yao/widgets/field/filter.go
2022-10-07 20:11:53 +08:00

87 lines
1.9 KiB
Go

package field
import (
"github.com/yaoapp/yao/widgets/component"
"github.com/yaoapp/yao/widgets/expression"
)
// Replace replace with data
func (filter FilterDSL) Replace(data map[string]interface{}) (*FilterDSL, error) {
new := filter
err := expression.Replace(&new.Key, data)
if err != nil {
return nil, err
}
err = expression.Replace(&new.Bind, data)
if err != nil {
return nil, err
}
if new.Edit != nil {
err = expression.Replace(&new.Edit.Props, data)
if err != nil {
return nil, err
}
}
return &new, nil
}
// Trans trans
func (filter *FilterDSL) Trans(widgetName string, inst string, trans func(widget string, inst string, value *string) bool) bool {
res := false
if filter.Edit != nil {
if filter.Edit.Trans(widgetName, inst, trans) {
res = true
}
}
return res
}
// Trans column trans
func (filters Filters) Trans(widgetName string, inst string, trans func(widget string, inst string, value *string) bool) bool {
res := false
for key, filter := range filters {
if trans(widgetName, inst, &key) {
res = true
}
newPtr := &filter
if newPtr.Trans(widgetName, inst, trans) {
res = true
}
filters[key] = *newPtr
}
return res
}
// Map cast to map[string]inteface{}
func (filter FilterDSL) Map() map[string]interface{} {
res := map[string]interface{}{
"key": filter.Key,
"bind": filter.Bind,
}
if filter.Edit != nil {
res["edit"] = filter.Edit.Map()
}
return res
}
// CPropsMerge merge the Filters cloud props
func (filters Filters) CPropsMerge(cloudProps map[string]component.CloudPropsDSL, getXpath func(name string, filter FilterDSL) (xpath string)) error {
for name, filter := range filters {
if filter.Edit != nil && filter.Edit.Props != nil {
xpath := getXpath(name, filter)
cProps, err := filter.Edit.Props.CloudProps(xpath)
if err != nil {
return err
}
mergeCProps(cloudProps, cProps)
}
}
return nil
}