diff --git a/widgets/component/component.go b/widgets/component/component.go index cf9f1a7d..00204409 100644 --- a/widgets/component/component.go +++ b/widgets/component/component.go @@ -1,5 +1,9 @@ package component +import ( + jsoniter "github.com/json-iterator/go" +) + // process // yao.component.TagView // yao.component.TagEdit @@ -12,19 +16,27 @@ func Export() error { return nil } +// MarshalJSON Custom JSON parse +func (dsl DSL) MarshalJSON() ([]byte, error) { + return jsoniter.Marshal(dsl.Map()) +} + // Map cast to map[string]interface{} func (dsl DSL) Map() map[string]interface{} { - return map[string]interface{}{ + res := map[string]interface{}{ "type": dsl.Type, - "in": dsl.In, - "out": dsl.Out, "props": map[string]interface{}(dsl.Props), } + if dsl.Bind != "" { + res["bind"] = dsl.Bind + } + return res } // Clone Component func (dsl *DSL) Clone() *DSL { new := DSL{ + Bind: dsl.Bind, Type: dsl.Type, In: dsl.In, Out: dsl.Out, diff --git a/widgets/component/types.go b/widgets/component/types.go index a88b88e3..02f3d1eb 100644 --- a/widgets/component/types.go +++ b/widgets/component/types.go @@ -2,6 +2,7 @@ package component // DSL the component DSL type DSL struct { + Bind string `json:"bind,omitempty"` Type string `json:"type,omitempty"` In string `json:"in,omitempty"` Out string `json:"out,omitempty"` diff --git a/widgets/field/column.go b/widgets/field/column.go index 6457f817..fe19ed11 100644 --- a/widgets/field/column.go +++ b/widgets/field/column.go @@ -61,11 +61,13 @@ func (column *ColumnDSL) Clone() *ColumnDSL { // Map cast to map[string]inteface{} func (column ColumnDSL) Map() map[string]interface{} { res := map[string]interface{}{ - "key": column.Key, - "link": column.Link, "bind": column.Bind, } + if column.Link != "" { + res["link"] = column.Link + } + if column.View != nil { res["view"] = column.View.Map() } @@ -109,20 +111,20 @@ func (columns Columns) ComputeFieldsMerge(computeInFields map[string]string, com // Compute In if column.In != "" { - if !strings.Contains(column.In, ".") { - column.In = fmt.Sprintf("yao.component.%s", column.In) + if !strings.Contains(string(column.In), ".") { + column.In = Compute(fmt.Sprintf("yao.component.%s", column.In)) } - computeInFields[column.Bind] = column.In - computeInFields[name] = column.In + computeInFields[column.Bind] = string(column.In) + computeInFields[name] = string(column.In) } // Compute Out if column.Out != "" { - if !strings.Contains(column.Out, ".") { - column.In = fmt.Sprintf("yao.component.%s", column.Out) + if !strings.Contains(string(column.Out), ".") { + column.In = Compute(fmt.Sprintf("yao.component.%s", column.Out)) } - computeOutFields[column.Bind] = column.Out - computeOutFields[name] = column.Out + computeOutFields[column.Bind] = string(column.Out) + computeOutFields[name] = string(column.Out) } } } diff --git a/widgets/field/filter.go b/widgets/field/filter.go index 707798ab..a797f70d 100644 --- a/widgets/field/filter.go +++ b/widgets/field/filter.go @@ -43,7 +43,6 @@ func (filter *FilterDSL) Clone() *FilterDSL { // Map cast to map[string]inteface{} func (filter FilterDSL) Map() map[string]interface{} { res := map[string]interface{}{ - "key": filter.Key, "bind": filter.Bind, } diff --git a/widgets/field/types.go b/widgets/field/types.go index d80e9c8a..b667d7e5 100644 --- a/widgets/field/types.go +++ b/widgets/field/types.go @@ -21,8 +21,8 @@ type ColumnDSL struct { Key string `json:"key,omitempty"` Bind string `json:"bind,omitempty"` Link string `json:"link,omitempty"` - In string `json:"in,omitempty"` - Out string `json:"out,omitempty"` + In Compute `json:"in,omitempty"` + Out Compute `json:"out,omitempty"` View *component.DSL `json:"view,omitempty"` Edit *component.DSL `json:"edit,omitempty"` } @@ -34,6 +34,9 @@ type FilterDSL struct { Edit *component.DSL `json:"edit,omitempty"` } +// Compute the compute filed +type Compute string + // Transform the field transform type Transform struct { Variables map[string]interface{} `json:"variables,omitempty"` diff --git a/widgets/table/fields.go b/widgets/table/fields.go index cddfbad1..6ee72ea8 100644 --- a/widgets/table/fields.go +++ b/widgets/table/fields.go @@ -83,6 +83,7 @@ func (fields *FieldsDSL) Xgen(layout *LayoutDSL) (map[string]interface{}, error) filters := map[string]interface{}{} tables := map[string]interface{}{} + if layout.Filter != nil { for i, f := range layout.Filter.Columns { name := f.Name diff --git a/widgets/table/fields_test.go b/widgets/table/fields_test.go index f0d5ca10..16674f54 100644 --- a/widgets/table/fields_test.go +++ b/widgets/table/fields_test.go @@ -18,6 +18,6 @@ func TestFiledsBindModel(t *testing.T) { t.Fatal(err) } assert.Equal(t, "id", tab.Fields.Table["ID"].Bind) - assert.Equal(t, 15, len(tab.Fields.Table)) - assert.Equal(t, 4, len(tab.Fields.Filter)) + assert.Equal(t, 17, len(tab.Fields.Table)) + assert.Equal(t, 6, len(tab.Fields.Filter)) } diff --git a/widgets/table/table_test.go b/widgets/table/table_test.go index 5a11c2f6..33d83ecf 100644 --- a/widgets/table/table_test.go +++ b/widgets/table/table_test.go @@ -22,7 +22,7 @@ func TestLoad(t *testing.T) { if err != nil { t.Fatal(err) } - assert.Equal(t, 9, len(Tables)) + assert.Equal(t, 10, len(Tables)) } func TestLoadID(t *testing.T) {