@operato/data-grist 8.0.0-alpha.8 → 8.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/dist/src/data-grid/data-grid-body.js +21 -7
  3. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  4. package/dist/src/data-grid/data-grid-footer.js +2 -0
  5. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  6. package/dist/src/data-grid/data-grid-header.d.ts +1 -1
  7. package/dist/src/data-grid/data-grid-header.js +13 -9
  8. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  9. package/dist/src/editors/ox-grist-editor-varname.d.ts +6 -0
  10. package/dist/src/editors/ox-grist-editor-varname.js +36 -0
  11. package/dist/src/editors/ox-grist-editor-varname.js.map +1 -0
  12. package/dist/src/editors/ox-grist-editor.js +3 -3
  13. package/dist/src/editors/ox-grist-editor.js.map +1 -1
  14. package/dist/src/editors/registry.js +3 -1
  15. package/dist/src/editors/registry.js.map +1 -1
  16. package/dist/src/gutters/gutter-sequence.d.ts +1 -1
  17. package/dist/src/record-view/index.d.ts +1 -1
  18. package/dist/src/record-view/index.js +1 -1
  19. package/dist/src/record-view/index.js.map +1 -1
  20. package/dist/src/record-view/{record-creator.d.ts → ox-record-creator.d.ts} +8 -4
  21. package/dist/src/record-view/{record-creator.js → ox-record-creator.js} +90 -34
  22. package/dist/src/record-view/ox-record-creator.js.map +1 -0
  23. package/dist/src/renderers/ox-grist-renderer-boolean.js +1 -1
  24. package/dist/src/renderers/ox-grist-renderer-boolean.js.map +1 -1
  25. package/dist/stories/accumulator-format.stories.d.ts +1 -1
  26. package/dist/stories/accumulator-format.stories.js +1 -1
  27. package/dist/stories/accumulator-format.stories.js.map +1 -1
  28. package/dist/stories/click-event-custom.stories.d.ts +45 -0
  29. package/dist/stories/click-event-custom.stories.js +247 -0
  30. package/dist/stories/click-event-custom.stories.js.map +1 -0
  31. package/dist/stories/click-event.stories.d.ts +1 -1
  32. package/dist/stories/click-event.stories.js +1 -1
  33. package/dist/stories/click-event.stories.js.map +1 -1
  34. package/dist/stories/fixed-column.stories.d.ts +1 -1
  35. package/dist/stories/fixed-column.stories.js +1 -1
  36. package/dist/stories/fixed-column.stories.js.map +1 -1
  37. package/dist/stories/grid-setting.stories.d.ts +1 -1
  38. package/dist/stories/grid-setting.stories.js +1 -1
  39. package/dist/stories/grid-setting.stories.js.map +1 -1
  40. package/dist/stories/grist-modes.stories.d.ts +1 -1
  41. package/dist/stories/grist-modes.stories.js +1 -1
  42. package/dist/stories/grist-modes.stories.js.map +1 -1
  43. package/dist/stories/group-header.stories.d.ts +1 -1
  44. package/dist/stories/group-header.stories.js +1 -1
  45. package/dist/stories/group-header.stories.js.map +1 -1
  46. package/dist/stories/textarea.stories.d.ts +1 -1
  47. package/dist/stories/textarea.stories.js +1 -1
  48. package/dist/stories/textarea.stories.js.map +1 -1
  49. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  50. package/dist/stories/tree-column-with-checkbox.stories.js +1 -1
  51. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  52. package/dist/stories/tree-column.stories.d.ts +1 -1
  53. package/dist/stories/tree-column.stories.js +1 -1
  54. package/dist/stories/tree-column.stories.js.map +1 -1
  55. package/dist/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +20 -20
  57. package/themes/calendar-theme.css +3 -1
  58. package/.storybook/main.js +0 -3
  59. package/.storybook/preview.js +0 -52
  60. package/.storybook/server.mjs +0 -8
  61. package/dist/src/record-view/record-creator.js.map +0 -1
  62. package/src/accumulator/accumulator.ts +0 -63
  63. package/src/configure/column-builder.ts +0 -114
  64. package/src/configure/config-builder.ts +0 -40
  65. package/src/configure/filters-option-builder.ts +0 -8
  66. package/src/configure/imex-option-builder.ts +0 -5
  67. package/src/configure/list-option-builder.ts +0 -9
  68. package/src/configure/rows-option-builder.ts +0 -38
  69. package/src/configure/tree-option-builder.ts +0 -22
  70. package/src/configure/zero-config.ts +0 -83
  71. package/src/const.ts +0 -1
  72. package/src/data-card/data-card-field.ts +0 -94
  73. package/src/data-card/data-card-gutter-menu.ts +0 -94
  74. package/src/data-card/data-card-gutter.ts +0 -103
  75. package/src/data-card/data-card.ts +0 -154
  76. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  77. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  78. package/src/data-card/record-card.ts +0 -298
  79. package/src/data-consumer.ts +0 -11
  80. package/src/data-grid/data-grid-accum-field.ts +0 -109
  81. package/src/data-grid/data-grid-body-style.ts +0 -85
  82. package/src/data-grid/data-grid-body.ts +0 -749
  83. package/src/data-grid/data-grid-field.ts +0 -227
  84. package/src/data-grid/data-grid-footer.ts +0 -117
  85. package/src/data-grid/data-grid-header.ts +0 -574
  86. package/src/data-grid/data-grid.ts +0 -293
  87. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  88. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  89. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  90. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  91. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  92. package/src/data-grist.ts +0 -1233
  93. package/src/data-list/data-list-field.ts +0 -82
  94. package/src/data-list/data-list-gutter.ts +0 -108
  95. package/src/data-list/data-list.ts +0 -145
  96. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  97. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  98. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  99. package/src/data-list/record-partial.ts +0 -264
  100. package/src/data-manipulator.ts +0 -426
  101. package/src/data-provider.ts +0 -271
  102. package/src/data-report/data-report-body-style.ts +0 -58
  103. package/src/data-report/data-report-body.ts +0 -189
  104. package/src/data-report/data-report-component.ts +0 -138
  105. package/src/data-report/data-report-field.ts +0 -83
  106. package/src/data-report/data-report-header.ts +0 -242
  107. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  108. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  109. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  110. package/src/data-report.ts +0 -424
  111. package/src/editors/index.ts +0 -4
  112. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  113. package/src/editors/ox-grist-editor-color.ts +0 -10
  114. package/src/editors/ox-grist-editor-date.ts +0 -10
  115. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  116. package/src/editors/ox-grist-editor-email.ts +0 -10
  117. package/src/editors/ox-grist-editor-file.ts +0 -28
  118. package/src/editors/ox-grist-editor-image.ts +0 -31
  119. package/src/editors/ox-grist-editor-month.ts +0 -10
  120. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  121. package/src/editors/ox-grist-editor-number.ts +0 -27
  122. package/src/editors/ox-grist-editor-password.ts +0 -10
  123. package/src/editors/ox-grist-editor-select.ts +0 -55
  124. package/src/editors/ox-grist-editor-tel.ts +0 -10
  125. package/src/editors/ox-grist-editor-text.ts +0 -14
  126. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  127. package/src/editors/ox-grist-editor-time.ts +0 -10
  128. package/src/editors/ox-grist-editor-tree.ts +0 -27
  129. package/src/editors/ox-grist-editor-week.ts +0 -10
  130. package/src/editors/ox-grist-editor.ts +0 -207
  131. package/src/editors/ox-input-tree.ts +0 -226
  132. package/src/editors/registry.ts +0 -80
  133. package/src/empty-note.ts +0 -46
  134. package/src/filters/filter-checkbox.ts +0 -49
  135. package/src/filters/filter-input-barcode.ts +0 -34
  136. package/src/filters/filter-input.ts +0 -30
  137. package/src/filters/filter-range-date.ts +0 -81
  138. package/src/filters/filter-range-number.ts +0 -64
  139. package/src/filters/filter-select-buttons.ts +0 -60
  140. package/src/filters/filter-select.ts +0 -68
  141. package/src/filters/filter-styles.ts +0 -119
  142. package/src/filters/filters-form.ts +0 -476
  143. package/src/filters/index.ts +0 -10
  144. package/src/filters/registry.ts +0 -56
  145. package/src/formatters/date-formatter.ts +0 -3
  146. package/src/formatters/index.ts +0 -1
  147. package/src/formatters/number-formatter.ts +0 -3
  148. package/src/formatters/registry.ts +0 -30
  149. package/src/formatters/text-formatter.ts +0 -3
  150. package/src/gutters/gutter-button.ts +0 -51
  151. package/src/gutters/gutter-dirty.ts +0 -96
  152. package/src/gutters/gutter-row-selector.ts +0 -89
  153. package/src/gutters/gutter-sequence.ts +0 -54
  154. package/src/gutters/index.ts +0 -1
  155. package/src/gutters/registry.ts +0 -32
  156. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  157. package/src/handlers/index.ts +0 -1
  158. package/src/handlers/move-down.ts +0 -44
  159. package/src/handlers/move-up.ts +0 -44
  160. package/src/handlers/record-copy.ts +0 -38
  161. package/src/handlers/record-delete.ts +0 -30
  162. package/src/handlers/record-view-handler.ts +0 -27
  163. package/src/handlers/registry.ts +0 -42
  164. package/src/handlers/select-row-toggle.ts +0 -30
  165. package/src/handlers/select-row.ts +0 -27
  166. package/src/index.ts +0 -17
  167. package/src/personalizer/index.ts +0 -1
  168. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  169. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  170. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  171. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  172. package/src/record-view/index.ts +0 -2
  173. package/src/record-view/record-creator.ts +0 -226
  174. package/src/record-view/record-view-body.ts +0 -257
  175. package/src/record-view/record-view-handler.ts +0 -86
  176. package/src/record-view/record-view.ts +0 -122
  177. package/src/renderers/index.ts +0 -14
  178. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  179. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  180. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  181. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  182. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  183. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  184. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  185. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  186. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  187. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  188. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  189. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  190. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  191. package/src/renderers/ox-grist-renderer.ts +0 -35
  192. package/src/renderers/registry.ts +0 -111
  193. package/src/sorters/sorters-control.ts +0 -143
  194. package/src/types.ts +0 -813
  195. package/src/utils/index.ts +0 -2
  196. package/src/utils/list-param.ts +0 -72
  197. package/src/utils/supports-passive.ts +0 -13
  198. package/stories/accumulator-format.stories.ts +0 -276
  199. package/stories/barcode-input-filter.stories.ts +0 -216
  200. package/stories/bounded-select-filters.stories.ts +0 -333
  201. package/stories/bounded-select-record.stories.ts +0 -336
  202. package/stories/click-event.stories.ts +0 -283
  203. package/stories/creatable-only-column.stories.ts +0 -253
  204. package/stories/default-filters.stories.ts +0 -241
  205. package/stories/dynamic-editable.stories.ts +0 -313
  206. package/stories/empty-sorters.stories.ts +0 -180
  207. package/stories/explicit-fetch.stories.ts +0 -186
  208. package/stories/fixed-column.stories.ts +0 -416
  209. package/stories/grid-setting.stories.ts +0 -501
  210. package/stories/grist-modes.stories.ts +0 -451
  211. package/stories/group-header.stories.ts +0 -442
  212. package/stories/record-view.stories.ts +0 -143
  213. package/stories/textarea.stories.ts +0 -261
  214. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  215. package/stories/tree-column.stories.ts +0 -296
  216. package/tsconfig.json +0 -26
  217. package/web-dev-server.config.mjs +0 -27
  218. package/web-test-runner.config.mjs +0 -45
@@ -1,333 +0,0 @@
1
- import '../src/index.js'
2
- import '../src/filters/filters-form.js'
3
- import '../src/sorters/sorters-control.js'
4
- import '@operato/popup/ox-popup-list.js'
5
- import '@material/web/icon/icon.js'
6
-
7
- import { html, TemplateResult } from 'lit'
8
- import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
9
-
10
- import { sleep } from '@operato/utils'
11
-
12
- import { ColumnConfig, FetchHandler, GristRecord, SelectOption } from '../src/types.js'
13
-
14
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
15
- import { DataGridField } from '../src/data-grid/data-grid-field.js'
16
-
17
- const fetchHandler: FetchHandler = async ({ sorters = [], filters, page, limit }) => {
18
- var total = 120993
19
- var start = (page! - 1) * limit!
20
-
21
- await new Promise(resolve => setTimeout(resolve, 500))
22
-
23
- return {
24
- total,
25
- records: Array(limit! * page! > total ? total % limit! : limit)
26
- .fill('')
27
- .map((item, idx) => {
28
- const warehouse = idx % 2 ? '01' : '02'
29
- const zone = idx % 2 ? 'Z001' : 'Z002'
30
-
31
- return {
32
- id: String(idx),
33
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
34
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
35
- warehouse,
36
- zone,
37
- location: `L${warehouse}-${zone}-0${(idx % 5) + 1}`,
38
- createdAt: Date.now(),
39
- updatedAt: Date.now()
40
- }
41
- })
42
- }
43
- }
44
-
45
- function buildConfig({ headerFilter }: { headerFilter: boolean }) {
46
- return {
47
- list: {
48
- fields: ['name', 'description'],
49
- details: ['updatedAt', 'createdAt']
50
- },
51
- columns: [
52
- {
53
- type: 'gutter',
54
- gutterName: 'sequence'
55
- },
56
- {
57
- type: 'string',
58
- name: 'id',
59
- hidden: true
60
- },
61
- {
62
- type: 'string',
63
- name: 'name',
64
- label: true,
65
- header: 'name',
66
- filter: {
67
- operator: 'eq',
68
- value: 'shnam'
69
- },
70
- sortable: true,
71
- width: 120
72
- },
73
- {
74
- type: 'string',
75
- name: 'description',
76
- header: 'description',
77
- record: {
78
- align: 'left'
79
- },
80
- width: 200
81
- },
82
- {
83
- type: 'select',
84
- name: 'warehouse',
85
- header: 'warehouse',
86
- filter: {
87
- operator: 'eq'
88
- },
89
- record: {
90
- align: 'left',
91
- options: async (
92
- value: any,
93
- column: ColumnConfig,
94
- record: GristRecord,
95
- rowIndex: number,
96
- field: DataGridField
97
- ): Promise<SelectOption[]> => {
98
- await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
99
- return [
100
- {
101
- display: '',
102
- value: ''
103
- }
104
- ].concat(
105
- WAREHOUSE.map(w => {
106
- return {
107
- display: w.name,
108
- value: w.id
109
- }
110
- })
111
- )
112
- }
113
- },
114
- width: 200
115
- },
116
- {
117
- type: 'select',
118
- name: 'zone',
119
- header: 'zone',
120
- filter: {
121
- operator: 'eq',
122
- boundTo: ['warehouse'],
123
- onchange: () => {
124
- console.log('warehousde filter value changed.')
125
- }
126
- },
127
- record: {
128
- align: 'left',
129
- options: async (
130
- value: any,
131
- column: ColumnConfig,
132
- record: GristRecord,
133
- rowIndex: number,
134
- field: DataGridField
135
- ): Promise<SelectOption[]> => {
136
- console.log('arguments', arguments)
137
- await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
138
- const warehouse = record.warehouse
139
- console.log('warehouse', warehouse)
140
-
141
- const targetWH = warehouse && WAREHOUSE.find(w => w.id == warehouse)
142
- const zones = targetWH
143
- ? targetWH.zones
144
- : WAREHOUSE.reduce((sum, warehouse) => {
145
- sum = sum.concat(warehouse.zones)
146
- return sum
147
- }, [] as any[])
148
-
149
- return [
150
- {
151
- display: '',
152
- value: ''
153
- }
154
- ].concat(
155
- zones.map((z: any) => {
156
- return {
157
- display: z.name,
158
- value: z.id
159
- }
160
- })
161
- )
162
- }
163
- },
164
- width: 200
165
- },
166
- {
167
- type: 'select',
168
- name: 'location',
169
- header: 'location',
170
- filter: {
171
- operator: 'eq',
172
- boundTo: ['warehouse', 'zone']
173
- },
174
- record: {
175
- align: 'left',
176
- options: async (
177
- value: any,
178
- column: ColumnConfig,
179
- record: GristRecord,
180
- rowIndex: number,
181
- field: DataGridField
182
- ): Promise<SelectOption[]> => {
183
- await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
184
- const warehouse = record.warehouse
185
- const zone = record.zone
186
- console.log('warehouse, zone', warehouse, zone)
187
-
188
- const targetWH = (warehouse && WAREHOUSE.find(w => w.id == warehouse)) || null
189
- const targetZone = zone && targetWH?.zones.find((z: any) => z.id == zone)
190
- return targetZone ? ['', ...targetZone.locations] : []
191
- }
192
- },
193
- width: 200
194
- },
195
- {
196
- type: 'datetime',
197
- name: 'updatedAt',
198
- header: 'updated at',
199
- width: 180
200
- },
201
- {
202
- type: 'datetime',
203
- name: 'createdAt',
204
- header: 'created at',
205
- width: 180
206
- }
207
- ],
208
- rows: {},
209
- sorters: [
210
- {
211
- name: 'name',
212
- desc: true
213
- }
214
- ],
215
- filters: {
216
- header: headerFilter
217
- },
218
- pagination: {
219
- pages: [30, 50, 100, 200]
220
- }
221
- }
222
- }
223
-
224
- const WAREHOUSE = [
225
- {
226
- id: '01',
227
- name: '제 1 창고',
228
- zones: [
229
- {
230
- id: 'Z001',
231
- name: 'Zone 01-001',
232
- locations: ['L01-001-01', 'L01-001-02', 'L01-001-03', 'L01-001-04', 'L01-001-05']
233
- },
234
- {
235
- id: 'Z002',
236
- name: 'Zone 01-002',
237
- locations: ['L01-002-01', 'L01-002-02', 'L01-002-03', 'L01-002-04', 'L01-002-05']
238
- }
239
- ]
240
- },
241
- {
242
- id: '02',
243
- name: '제 2 창고',
244
- zones: [
245
- {
246
- id: 'Z001',
247
- name: 'Zone 02-001',
248
- locations: ['L02-001-01', 'L02-001-02', 'L02-001-03', 'L02-001-04', 'L02-001-05']
249
- },
250
- {
251
- id: 'Z002',
252
- name: 'Zone 02-002',
253
- locations: ['L02-002-01', 'L02-002-02', 'L02-002-03', 'L02-002-04', 'L02-002-05']
254
- }
255
- ]
256
- }
257
- ]
258
-
259
- export default {
260
- title: 'bounded select filters for ox-grist',
261
- component: 'ox-grist',
262
- argTypes: {
263
- headerFilter: { control: 'boolean' }
264
- }
265
- }
266
-
267
- interface Story<T> {
268
- (args: T): TemplateResult
269
- args?: Partial<T>
270
- argTypes?: Record<string, unknown>
271
- }
272
-
273
- interface ArgTypes {
274
- headerFilter: boolean
275
- }
276
-
277
- const Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) =>
278
- html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
279
-
280
- <link href="/themes/light.css" rel="stylesheet" />
281
- <link href="/themes/dark.css" rel="stylesheet" />
282
- <link href="/themes/spacing.css" rel="stylesheet" />
283
- <link href="/themes/grist-theme.css" rel="stylesheet" />
284
-
285
- <link
286
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
287
- rel="stylesheet"
288
- />
289
- <link
290
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
291
- rel="stylesheet"
292
- />
293
- <link
294
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
295
- rel="stylesheet"
296
- />
297
-
298
- <style>
299
- ${MDTypeScaleStyles.cssText}
300
- </style>
301
-
302
- <style>
303
- ${CommonGristStyles.cssText}
304
- ${CommonHeaderStyles.cssText}
305
- </style>
306
-
307
- <style>
308
- ox-grist {
309
- height: 600px;
310
- }
311
-
312
- ox-filters-form {
313
- flex: 1;
314
- }
315
- </style>
316
-
317
- <ox-grist
318
- .config=${buildConfig({ headerFilter })}
319
- mode="GRID"
320
- .fetchHandler=${fetchHandler}
321
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
322
- >
323
- <div slot="headroom" class="header">
324
- <div class="filters">
325
- <ox-filters-form></ox-filters-form>
326
- </div>
327
- </div>
328
- </ox-grist>`
329
-
330
- export const Regular = Template.bind({})
331
- Regular.args = {
332
- headerFilter: true
333
- }
@@ -1,336 +0,0 @@
1
- import '../src/index.js'
2
- import '../src/filters/filters-form.js'
3
- import '../src/sorters/sorters-control.js'
4
- import '@operato/popup/ox-popup-list.js'
5
- import '@material/web/icon/icon.js'
6
-
7
- import { html, TemplateResult } from 'lit'
8
- import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
9
-
10
- import { sleep } from '@operato/utils'
11
-
12
- import { ColumnConfig, FetchHandler, FieldEditor, GristRecord, SelectOption } from '../src/types.js'
13
-
14
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
15
- import { DataGridField } from '../src/data-grid/data-grid-field.js'
16
-
17
- const fetchHandler: FetchHandler = async ({ sorters = [], filters, page, limit }) => {
18
- var total = 120993
19
- var start = (page! - 1) * limit!
20
-
21
- await new Promise(resolve => setTimeout(resolve, 500))
22
-
23
- return {
24
- total,
25
- records: Array(limit! * page! > total ? total % limit! : limit)
26
- .fill('')
27
- .map((item, idx) => {
28
- const warehouse: string = idx % 2 ? '01' : '02'
29
- const zone: string = idx % 2 ? 'Z001' : 'Z002'
30
-
31
- return {
32
- id: String(idx),
33
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
34
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
35
- warehouse,
36
- zone,
37
- location: `L${warehouse}-${zone}-0${(idx % 5) + 1}`,
38
- createdAt: Date.now(),
39
- updatedAt: Date.now()
40
- }
41
- })
42
- }
43
- }
44
-
45
- function buildConfig({ headerFilter }: { headerFilter: boolean }) {
46
- return {
47
- list: {
48
- fields: ['name', 'description'],
49
- details: ['updatedAt', 'createdAt']
50
- },
51
- columns: [
52
- {
53
- type: 'gutter',
54
- gutterName: 'sequence'
55
- },
56
- {
57
- type: 'string',
58
- name: 'id',
59
- hidden: true
60
- },
61
- {
62
- type: 'string',
63
- name: 'name',
64
- label: true,
65
- header: 'name',
66
- filter: {
67
- operator: 'eq',
68
- value: 'shnam'
69
- },
70
- sortable: true,
71
- width: 120
72
- },
73
- {
74
- type: 'string',
75
- name: 'description',
76
- header: 'description',
77
- record: {
78
- align: 'left'
79
- },
80
- width: 200
81
- },
82
- {
83
- type: 'select',
84
- name: 'warehouse',
85
- header: 'warehouse',
86
- filter: {
87
- operator: 'eq'
88
- },
89
- record: {
90
- align: 'left',
91
- editable: true,
92
- options: async (
93
- value: any,
94
- column: ColumnConfig,
95
- record: GristRecord,
96
- rowIndex: number,
97
- field: DataGridField
98
- ): Promise<SelectOption[]> => {
99
- await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
100
- return [
101
- {
102
- display: '',
103
- value: ''
104
- }
105
- ].concat(
106
- WAREHOUSE.map(w => {
107
- return {
108
- display: w.name,
109
- value: w.id
110
- }
111
- })
112
- )
113
- }
114
- },
115
- width: 200
116
- },
117
- {
118
- type: 'select',
119
- name: 'zone',
120
- header: 'zone',
121
- filter: {
122
- operator: 'eq',
123
- boundTo: ['warehouse'],
124
- onchange: () => {
125
- console.log('warehousde filter value changed.')
126
- }
127
- },
128
- record: {
129
- align: 'left',
130
- editable: true,
131
- options: async (
132
- value: any,
133
- column: ColumnConfig,
134
- record: GristRecord,
135
- rowIndex: number,
136
- field: DataGridField
137
- ): Promise<SelectOption[]> => {
138
- console.log('arguments', arguments)
139
- await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
140
- const warehouse = record.warehouse
141
- console.log('warehouse', warehouse)
142
-
143
- const targetWH = warehouse && WAREHOUSE.find(w => w.id == warehouse)
144
- const zones = targetWH
145
- ? targetWH.zones
146
- : WAREHOUSE.reduce((sum, warehouse) => {
147
- sum = sum.concat(warehouse.zones)
148
- return sum
149
- }, [] as any[])
150
-
151
- return [
152
- {
153
- display: '',
154
- value: ''
155
- }
156
- ].concat(
157
- zones.map((z: any) => {
158
- return {
159
- display: z.name,
160
- value: z.id
161
- }
162
- })
163
- )
164
- }
165
- },
166
- width: 200
167
- },
168
- {
169
- type: 'select',
170
- name: 'location',
171
- header: 'location',
172
- filter: {
173
- operator: 'eq',
174
- boundTo: ['warehouse', 'zone']
175
- },
176
- record: {
177
- align: 'left',
178
- editable: true,
179
- options: async (
180
- value: any,
181
- column: ColumnConfig,
182
- record: GristRecord,
183
- rowIndex: number,
184
- field: DataGridField
185
- ): Promise<SelectOption[]> => {
186
- await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
187
- const warehouse = record.warehouse
188
- const zone = record.zone
189
- console.log('warehouse, zone', warehouse, zone)
190
-
191
- const targetWH = (warehouse && WAREHOUSE.find(w => w.id == warehouse)) || null
192
- const targetZone = zone && targetWH?.zones.find((z: any) => z.id == zone)
193
- return targetZone ? ['', ...targetZone.locations] : []
194
- }
195
- },
196
- width: 200
197
- },
198
- {
199
- type: 'datetime',
200
- name: 'updatedAt',
201
- header: 'updated at',
202
- width: 180
203
- },
204
- {
205
- type: 'datetime',
206
- name: 'createdAt',
207
- header: 'created at',
208
- width: 180
209
- }
210
- ],
211
- rows: {},
212
- sorters: [
213
- {
214
- name: 'name',
215
- desc: true
216
- }
217
- ],
218
- filters: {
219
- header: headerFilter
220
- },
221
- pagination: {
222
- pages: [30, 50, 100, 200]
223
- }
224
- }
225
- }
226
-
227
- const WAREHOUSE = [
228
- {
229
- id: '01',
230
- name: '제 1 창고',
231
- zones: [
232
- {
233
- id: 'Z001',
234
- name: 'Zone 01-001',
235
- locations: ['L01-001-01', 'L01-001-02', 'L01-001-03', 'L01-001-04', 'L01-001-05']
236
- },
237
- {
238
- id: 'Z002',
239
- name: 'Zone 01-002',
240
- locations: ['L01-002-01', 'L01-002-02', 'L01-002-03', 'L01-002-04', 'L01-002-05']
241
- }
242
- ]
243
- },
244
- {
245
- id: '02',
246
- name: '제 2 창고',
247
- zones: [
248
- {
249
- id: 'Z001',
250
- name: 'Zone 02-001',
251
- locations: ['L02-001-01', 'L02-001-02', 'L02-001-03', 'L02-001-04', 'L02-001-05']
252
- },
253
- {
254
- id: 'Z002',
255
- name: 'Zone 02-002',
256
- locations: ['L02-002-01', 'L02-002-02', 'L02-002-03', 'L02-002-04', 'L02-002-05']
257
- }
258
- ]
259
- }
260
- ]
261
-
262
- export default {
263
- title: 'bounded select record for ox-grist',
264
- component: 'ox-grist',
265
- argTypes: {
266
- headerFilter: { control: 'boolean' }
267
- }
268
- }
269
-
270
- interface Story<T> {
271
- (args: T): TemplateResult
272
- args?: Partial<T>
273
- argTypes?: Record<string, unknown>
274
- }
275
-
276
- interface ArgTypes {
277
- headerFilter: boolean
278
- }
279
-
280
- const Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) =>
281
- html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
282
-
283
- <link href="/themes/light.css" rel="stylesheet" />
284
- <link href="/themes/dark.css" rel="stylesheet" />
285
- <link href="/themes/spacing.css" rel="stylesheet" />
286
- <link href="/themes/grist-theme.css" rel="stylesheet" />
287
-
288
- <link
289
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
290
- rel="stylesheet"
291
- />
292
- <link
293
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
294
- rel="stylesheet"
295
- />
296
- <link
297
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
298
- rel="stylesheet"
299
- />
300
-
301
- <style>
302
- ${MDTypeScaleStyles.cssText}
303
- </style>
304
-
305
- <style>
306
- ${CommonGristStyles.cssText}
307
- ${CommonHeaderStyles.cssText}
308
- </style>
309
-
310
- <style>
311
- ox-grist {
312
- height: 600px;
313
- }
314
-
315
- ox-filters-form {
316
- flex: 1;
317
- }
318
- </style>
319
-
320
- <ox-grist
321
- .config=${buildConfig({ headerFilter })}
322
- mode="GRID"
323
- .fetchHandler=${fetchHandler}
324
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
325
- >
326
- <div slot="headroom" class="header">
327
- <div class="filters">
328
- <ox-filters-form></ox-filters-form>
329
- </div>
330
- </div>
331
- </ox-grist>`
332
-
333
- export const Regular = Template.bind({})
334
- Regular.args = {
335
- headerFilter: true
336
- }