/
struct.go
104 lines (88 loc) · 2.07 KB
/
struct.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package prago
import (
"reflect"
)
func (resource *Resource) getDefaultOrder() (column string, desc bool) {
for _, v := range resource.fields {
add := false
if v.id == "id" {
add = true
}
if v.tags["prago-type"] == "order" {
add = true
}
if v.tags["prago-order"] == "true" {
add = true
}
if v.tags["prago-order-desc"] == "true" {
add = true
}
if v.tags["prago-order"] == "false" {
add = false
}
if add {
column = v.id
desc = false
if v.tags["prago-order-desc"] == "true" {
desc = true
}
}
}
return
}
func (resource *Resource) getItemStringEditableValues(item any, request *Request) map[string]string {
itemVal := reflect.ValueOf(item).Elem()
ret := make(map[string]string)
for i, field := range resource.fields {
if !field.authorizeEdit(request) && field.id != "id" {
continue
}
var ifaceVal interface{}
reflect.ValueOf(&ifaceVal).Elem().Set(
itemVal.Field(i),
)
strVal := field.fieldType.formStringer(ifaceVal)
ret[field.id] = strVal
}
return ret
}
func (form *Form) addResourceItems(resource *Resource, item any, request *Request) {
editableValues := resource.getItemStringEditableValues(item, request)
focusedField := request.Param("_focus")
var firstField = true
for _, field := range resource.fields {
if !field.authorizeEdit(request) {
continue
}
var focused = false
if firstField && focusedField == "" {
focused = true
}
firstField = false
if field.id == focusedField {
focused = true
}
item := &FormItem{
ID: field.id,
Icon: field.getIcon(),
Name: field.name(request.Locale()),
Template: field.fieldType.formTemplate,
Focused: focused,
}
if field.description != nil {
item.Description = field.description(request.Locale())
}
item.AddUUID()
if field.fieldType.formHideLabel {
item.HiddenName = true
}
item.Value = editableValues[field.id]
if field.fieldType.formDataSource != nil {
item.Data = field.fieldType.formDataSource(field, request)
}
if field.required {
item.Required = true
}
form.AddItem(item)
}
}