yao/widgets/component/action.go
2022-12-08 04:26:06 +08:00

40 lines
811 B
Go

package component
import (
"fmt"
"io"
"sort"
"strings"
jsoniter "github.com/json-iterator/go"
"golang.org/x/crypto/md4"
)
// SetPath set actions xpath
func (actions Actions) SetPath(root string) Actions {
for i := range actions {
actions[i].Xpath = fmt.Sprintf("%s.%d", root, i)
}
return actions
}
// Hash hash value
func (actions Actions) Hash() Actions {
h := md4.New()
for i := range actions {
keys := []string{}
for i, value := range actions[i].Action {
key := fmt.Sprintf("%d", i)
for k, v := range value {
data, _ := jsoniter.Marshal(v)
key = fmt.Sprintf("%s%s%s", key, k, data)
}
keys = append(keys, key)
}
sort.Strings(keys)
origin := strings.Join(keys, "|")
io.WriteString(h, origin)
actions[i].ID = fmt.Sprintf("%x", h.Sum(nil))
}
return actions
}