diff --git a/widgets/table/action.go b/widgets/table/action.go index d4628125..be7dcb4b 100644 --- a/widgets/table/action.go +++ b/widgets/table/action.go @@ -15,7 +15,7 @@ var processActionDefaults = map[string]*ProcessActionDSL{ "Setting": { Name: "yao.table.Setting", Process: "yao.table.Xgen", - Default: []interface{}{}, + Default: []interface{}{nil}, }, "Component": { Name: "yao.table.Component", diff --git a/widgets/table/api.go b/widgets/table/api.go index 11819a2a..e2b2ac2b 100644 --- a/widgets/table/api.go +++ b/widgets/table/api.go @@ -1,3 +1,198 @@ package table -// export api +import ( + jsoniter "github.com/json-iterator/go" + "github.com/yaoapp/gou" + "github.com/yaoapp/yao/share" +) + +// export API +func exportAPI() error { + + http := gou.HTTP{ + Name: "Widget Table API", + Description: "Widget Table API", + Version: share.VERSION, + Guard: "-", + Group: "__yao/table", + Paths: []gou.Path{}, + } + + // GET /api/__yao/table/:id/setting -> Default process: yao.table.Xgen + path := gou.Path{ + Label: "Setting", + Description: "Setting", + Path: "/:id/setting", + Method: "GET", + Process: "yao.table.Setting", + In: []string{"$param.id"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // GET /api/__yao/table/:id/search -> Default process: yao.table.Search $param.id :query $query.page $query.pagesize + path = gou.Path{ + Label: "Search", + Description: "Search", + Path: "/:id/search", + Method: "GET", + Process: "yao.table.Search", + In: []string{"$param.id", ":query-param", "$query.page", "$query.pagesize"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // GET /api/__yao/table/:id/get -> Default process: yao.table.Get $param.id :query + path = gou.Path{ + Label: "Get", + Description: "Get", + Path: "/:id/get", + Method: "GET", + Process: "yao.table.Get", + In: []string{"$param.id", ":query-param"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // GET /api/__yao/table/:id/find/:primary -> Default process: yao.table.Find $param.id $param.primary :query + path = gou.Path{ + Label: "Find", + Description: "Find", + Path: "/:id/find/:primary", + Method: "GET", + Process: "yao.table.Find", + In: []string{"$param.id", "$param.primary", ":query-param"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // GET /api/__yao/table/:id/component/:xpath/:method -> Default process: yao.table.Component $param.id $param.xpath $param.method :query + path = gou.Path{ + Label: "Find", + Description: "Find", + Path: "/:id/component/:xpath/:method", + Method: "GET", + Process: "yao.table.Component", + In: []string{"$param.id", "$param.xpath", "$param.method", ":query"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // POST /api/__yao/table/:id/save -> Default process: yao.table.Save $param.id :payload + path = gou.Path{ + Label: "Save", + Description: "Save", + Path: "/:id/save", + Method: "POST", + Process: "yao.table.Save", + In: []string{"$param.id", ":payload"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // POST /api/__yao/table/:id/create -> Default process: yao.table.Create $param.id :payload + path = gou.Path{ + Label: "Create", + Description: "Create", + Path: "/:id/create", + Method: "POST", + Process: "yao.table.Create", + In: []string{"$param.id", ":payload"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // POST /api/__yao/table/:id/insert -> Default process: yao.table.Insert :payload + path = gou.Path{ + Label: "Insert", + Description: "Insert", + Path: "/:id/insert", + Method: "POST", + Process: "yao.table.Insert", + In: []string{"$param.id", "$payload.columns", "$payload.values"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // POST /api/__yao/table/:id/update/:primary -> Default process: yao.table.Update $param.id $param.primary :payload + path = gou.Path{ + Label: "Update", + Description: "Update", + Path: "/:id/update/:primary", + Method: "POST", + Process: "yao.table.Update", + In: []string{"$param.id", "$param.primary", ":payload"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // POST /api/__yao/table/:id/update/where -> Default process: yao.table.UpdateWhere $param.id :query :payload + path = gou.Path{ + Label: "Update Where", + Description: "Update Where", + Path: "/:id/update/where", + Method: "POST", + Process: "yao.table.UpdateWhere", + In: []string{"$param.id", ":query-param", ":payload"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // POST /api/__yao/table/:id/update/in -> Default process: yao.table.UpdateIn $param.id $query.ids :payload + path = gou.Path{ + Label: "Update In", + Description: "Update In", + Path: "/:id/update/in", + Method: "POST", + Process: "yao.table.UpdateIn", + In: []string{"$param.id", "$query.ids", ":payload"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // POST /api/__yao/table/:id/delete/:primary -> Default process: yao.table.Delete $param.id $param.primary + path = gou.Path{ + Label: "Delete", + Description: "Delete", + Path: "/:id/delete/:primary", + Method: "POST", + Process: "yao.table.Delete", + In: []string{"$param.id", "$param.primary"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // POST /api/__yao/table/:id/delete/where -> Default process: yao.table.DeleteWhere $param.id :query + path = gou.Path{ + Label: "Delete Where", + Description: "Delete Where", + Path: "/:id/delete/where", + Method: "POST", + Process: "yao.table.DeleteWhere", + In: []string{"$param.id", ":query-param"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // POST /api/__yao/table/:id/delete/in -> Default process: yao.table.DeleteIn $param.id $query.ids + path = gou.Path{ + Label: "Delete In", + Description: "Delete In", + Path: "/:id/delete/in", + Method: "POST", + Process: "yao.table.DeleteIn", + In: []string{"$param.id", "$query.ids"}, + Out: gou.Out{Status: 200, Type: "application/json"}, + } + http.Paths = append(http.Paths, path) + + // api source + source, err := jsoniter.Marshal(http) + if err != nil { + return err + } + + // load apis + _, err = gou.LoadAPIReturn(string(source), "widgets.table") + return err +} diff --git a/widgets/table/export.go b/widgets/table/export.go index 62110a0e..c201a060 100644 --- a/widgets/table/export.go +++ b/widgets/table/export.go @@ -3,5 +3,5 @@ package table // Export process & api func Export() error { exportProcess() - return nil + return exportAPI() } diff --git a/widgets/table/process.go b/widgets/table/process.go index eb9068a9..8869bead 100644 --- a/widgets/table/process.go +++ b/widgets/table/process.go @@ -70,6 +70,7 @@ func processComponent(process *gou.Process) interface{} { func processSetting(process *gou.Process) interface{} { tab := MustGet(process) + process.Args = append(process.Args, process.Args[0]) // table name return tab.Action.Setting.MustExec(process) } diff --git a/widgets/table/process_test.go b/widgets/table/process_test.go index 36ef126c..26ab5e12 100644 --- a/widgets/table/process_test.go +++ b/widgets/table/process_test.go @@ -348,6 +348,23 @@ func TestProcessComponentError(t *testing.T) { assert.Contains(t, err.Error(), "fields.filter.edit.props.状态.::not-exist") } +func TestProcessSetting(t *testing.T) { + load(t) + clear(t) + testData(t) + args := []interface{}{"pet"} + res, err := gou.NewProcess("yao.table.Setting", args...).Exec() + if err != nil { + t.Fatal(err) + } + + data := any.Of(res).MapStr().Dot() + assert.Equal(t, "/api/xiang/import/pet", data.Get("header.preset.import.api.import")) + assert.Equal(t, "跳转", data.Get("header.preset.import.operation.0.title")) + assert.Equal(t, "/api/__yao/table/pet/component/fields.table.入院状态.view.props.xProps/remote", data.Get("fields.table.入院状态.view.props.xProps.remote.api")) + assert.Equal(t, "/api/__yao/table/pet/component/fields.table.入院状态.edit.props.xProps/remote", data.Get("fields.table.入院状态.edit.props.xProps.remote.api")) +} + func TestProcessXgen(t *testing.T) { load(t) clear(t) diff --git a/widgets/widgets.go b/widgets/widgets.go index a438d569..35698dca 100644 --- a/widgets/widgets.go +++ b/widgets/widgets.go @@ -4,6 +4,7 @@ import ( "github.com/yaoapp/yao/config" "github.com/yaoapp/yao/widgets/app" "github.com/yaoapp/yao/widgets/login" + "github.com/yaoapp/yao/widgets/table" ) // Load the widgets @@ -30,5 +31,15 @@ func Load(cfg config.Config) error { return err } + // table widget + err = table.Load(cfg) + if err != nil { + return err + } + err = table.Export() + if err != nil { + return err + } + return nil } diff --git a/widgets/widgets_test.go b/widgets/widgets_test.go index f992f3cd..65114f5b 100644 --- a/widgets/widgets_test.go +++ b/widgets/widgets_test.go @@ -1,13 +1,45 @@ package widgets import ( + "os" "testing" "github.com/stretchr/testify/assert" "github.com/yaoapp/yao/config" + "github.com/yaoapp/yao/lang" + "github.com/yaoapp/yao/model" + "github.com/yaoapp/yao/script" + "github.com/yaoapp/yao/share" ) func TestLoad(t *testing.T) { + prepare(t) err := Load(config.Conf) assert.Nil(t, err) } + +func prepare(t *testing.T, language ...string) { + + // langs + if len(language) < 1 { + os.Unsetenv("YAO_LANG") + } else { + os.Setenv("YAO_LANG", language[0]) + } + lang.Load(config.Conf) + + share.DBConnect(config.Conf.DB) // removed later + + // load scripts + err := script.Load(config.Conf) + if err != nil { + t.Fatal(err) + } + + // load models + err = model.Load(config.Conf) + if err != nil { + t.Fatal(err) + } + +}