-
Notifications
You must be signed in to change notification settings - Fork 0
/
assoc_sorting_button_impl.go
131 lines (103 loc) · 4.17 KB
/
assoc_sorting_button_impl.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// generated code - do not edit
package probe
import (
"fmt"
"log"
gongtable_fullstack "github.com/fullstack-lang/gongtable/go/fullstack"
form "github.com/fullstack-lang/gongtable/go/models"
gongtable_models "github.com/fullstack-lang/gongtable/go/models"
"github.com/fullstack-lang/gongsim/go/models"
)
func NewOnSortingEditon[InstanceType models.PointerToGongstruct, FieldType models.PointerToGongstruct](
instance InstanceType,
field *[]FieldType,
probe *Probe,
) (onSortingEdition *OnSortingEditon[InstanceType, FieldType]) {
onSortingEdition = new(OnSortingEditon[InstanceType, FieldType])
onSortingEdition.probe = probe
onSortingEdition.instance = instance
onSortingEdition.field = field
return
}
type OnSortingEditon[InstanceType models.PointerToGongstruct, FieldType models.PointerToGongstruct] struct {
instance InstanceType
field *[]FieldType
probe *Probe
}
func (onSortingEditon *OnSortingEditon[InstanceType, FieldType]) OnButtonPressed() {
tableStackName := onSortingEditon.probe.formStage.GetPath() +
string(form.StackNamePostFixForTableForAssociationSorting)
// tableStackName supposed to be "test-form-table"
tableStageForSelection, _ := gongtable_fullstack.NewStackInstance(onSortingEditon.probe.r, tableStackName)
table := new(gongtable_models.Table).Stage(tableStageForSelection)
table.Name = string(form.TableSortExtraName)
table.HasColumnSorting = false
table.HasFiltering = false
table.HasPaginator = false
table.HasCheckableRows = false
table.HasSaveButton = true
table.CanDragDropRows = true
for _, fieldName := range models.GetFieldsFromPointer[FieldType]() {
column := new(gongtable_models.DisplayedColumn).Stage(tableStageForSelection)
column.Name = fieldName
table.DisplayedColumns = append(table.DisplayedColumns, column)
}
map_RowID_instance := make(map[*gongtable_models.Row]FieldType)
for _, instance := range *onSortingEditon.field {
row := new(gongtable_models.Row).Stage(tableStageForSelection)
row.Name = instance.GetName()
map_RowID_instance[row] = instance
table.Rows = append(table.Rows, row)
for _, fieldName := range models.GetFieldsFromPointer[FieldType]() {
cell := new(gongtable_models.Cell).Stage(tableStageForSelection)
cell.Name = fmt.Sprintf("Row %s - Column %s", instance.GetName(), fieldName)
cellString := new(gongtable_models.CellString).Stage(tableStageForSelection)
cellString.Name = models.GetFieldStringValueFromPointer(instance, fieldName)
cellString.Value = cellString.Name
cell.CellString = cellString
row.Cells = append(row.Cells, cell)
}
}
table.Impl = NewTableSortSaver[InstanceType, FieldType](
onSortingEditon.instance,
onSortingEditon.field,
onSortingEditon.probe,
&map_RowID_instance)
tableStageForSelection.Commit()
}
func NewTableSortSaver[InstanceType models.PointerToGongstruct, FieldType models.PointerToGongstruct](
instance InstanceType,
field *[]FieldType,
probe *Probe,
map_RowID_instance *map[*gongtable_models.Row]FieldType,
) (tableSortSaver *TableSortSaver[InstanceType, FieldType]) {
tableSortSaver = new(TableSortSaver[InstanceType, FieldType])
tableSortSaver.instance = instance
tableSortSaver.field = field
tableSortSaver.probe = probe
tableSortSaver.map_RowID_instance = map_RowID_instance
return
}
type TableSortSaver[InstanceType models.PointerToGongstruct, FieldType models.PointerToGongstruct] struct {
instance InstanceType
field *[]FieldType
probe *Probe
// map giving the relation between the row ID and the instance
map_RowID_instance *map[*gongtable_models.Row]FieldType
}
func (tableSortSaver *TableSortSaver[InstanceType, FieldType]) TableUpdated(stage *form.StageStruct, table, updatedTable *form.Table) {
log.Println("TableSortSaver: TableUpdated")
// checkout to the stage to get the rows that have been checked and not
stage.Checkout()
*tableSortSaver.field = make([]FieldType, 0)
for _, row := range table.Rows {
instance := (*tableSortSaver.map_RowID_instance)[row]
*tableSortSaver.field = append(*tableSortSaver.field, instance)
}
tableSortSaver.probe.stageOfInterest.Commit()
// see the result
fillUpTablePointerToGongstruct[InstanceType](
tableSortSaver.probe,
)
tableSortSaver.probe.tableStage.Commit()
}