Skip to content

Commit 1c7c5e2

Browse files
committed
improve api: func(action) TransformMultiple
1 parent d59e3c4 commit 1c7c5e2

File tree

1 file changed

+20
-22
lines changed

1 file changed

+20
-22
lines changed

comp/action.go

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package comp
22

33
import (
44
js "encoding/json"
5-
"fmt"
65
"io"
76
"net/http"
87

@@ -52,15 +51,17 @@ func (a action) Toast(value toast) action {
5251

5352
// Transform transform the src value with transfor, and renderer the result to dst component
5453
func (a action) Transform(src, dst, successMsg string, transfor func(input any) (any, error)) action {
55-
return a.transform(src, dst, successMsg, transfor)
56-
}
57-
58-
// TransformMultipletransform the inputs(single or multiple) with transfor, and renderer the result to multiple destinates
59-
func (a action) TransformMultiple(inputs any, successMsg string, transfor func(any) (any, error)) action {
60-
return a.transform(inputs, "", successMsg, transfor)
54+
return a.TransformMultiple([]string{src}, successMsg, func(d Data) (Data, error) {
55+
output, err := transfor(d[src])
56+
if err != nil {
57+
return nil, err
58+
}
59+
return Data{dst: output}, nil
60+
})
6161
}
6262

63-
func (a action) transform(input any, dstKey, successMsg string, transfor func(any) (any, error)) action {
63+
// TransformMultiple transform the src with transfor, and renderer the result to multiple destinates
64+
func (a action) TransformMultiple(src []string, successMsg string, transfor func(Data) (Data, error)) action {
6465
route := getRoute()
6566
servermux.Mux().HandleFunc(route, func(w http.ResponseWriter, r *http.Request) {
6667
inputData, err := io.ReadAll(r.Body)
@@ -69,32 +70,29 @@ func (a action) transform(input any, dstKey, successMsg string, transfor func(an
6970
return
7071
}
7172
defer r.Body.Close()
72-
m := Schema{}
73-
js.Unmarshal(inputData, &m)
74-
input := m["__amisgo__input"]
75-
output, err := transfor(input)
73+
d := Data{}
74+
err = js.Unmarshal(inputData, &d)
7675
if err != nil {
7776
respError(w, err)
7877
return
7978
}
80-
81-
resp := Response{}
82-
if dstKey != "" {
83-
resp = Response{Msg: successMsg, Data: Data{dstKey: output}}
84-
} else {
85-
resp = Response{Msg: successMsg, Data: output.(Data)}
79+
output, err := transfor(d)
80+
if err != nil {
81+
respError(w, err)
82+
return
8683
}
84+
resp := SuccessResponse(successMsg, output)
8785
w.Write(resp.Json())
8886
})
8987

90-
ipt := input
91-
if s, ok := input.(string); ok {
92-
ipt = fmt.Sprintf("${%s}", s)
88+
data := make(Data, len(src))
89+
for _, s := range src {
90+
data.Set(s, "${"+s+"}")
9391
}
9492
return a.ActionType("ajax").Api(
9593
Schema{
9694
"url": route,
97-
"data": Data{"__amisgo__input": ipt},
95+
"data": data,
9896
"__amisgo_resp": Schema{
9997
"200": Schema{
10098
"then": EventAction().ActionType("setValue").Args(Schema{"value": "${__amisgo__resp}"}),

0 commit comments

Comments
 (0)