@operato/data-grist 7.1.31 → 7.1.33

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 (175) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/src/data-grid/data-grid-field.js +4 -1
  3. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  4. package/dist/src/record-view/record-view-body.js +8 -4
  5. package/dist/src/record-view/record-view-body.js.map +1 -1
  6. package/dist/src/types.d.ts +1 -1
  7. package/dist/src/types.js.map +1 -1
  8. package/dist/tsconfig.tsbuildinfo +1 -1
  9. package/package.json +10 -10
  10. package/.storybook/main.js +0 -3
  11. package/.storybook/preview.js +0 -52
  12. package/.storybook/server.mjs +0 -8
  13. package/demo/data-grist-test.html +0 -468
  14. package/demo/favicon.ico +0 -0
  15. package/demo/index.html +0 -541
  16. package/demo/report-test.html +0 -249
  17. package/src/accumulator/accumulator.ts +0 -63
  18. package/src/configure/column-builder.ts +0 -114
  19. package/src/configure/config-builder.ts +0 -40
  20. package/src/configure/filters-option-builder.ts +0 -8
  21. package/src/configure/imex-option-builder.ts +0 -5
  22. package/src/configure/list-option-builder.ts +0 -9
  23. package/src/configure/rows-option-builder.ts +0 -38
  24. package/src/configure/tree-option-builder.ts +0 -22
  25. package/src/configure/zero-config.ts +0 -83
  26. package/src/const.ts +0 -1
  27. package/src/data-card/data-card-field.ts +0 -94
  28. package/src/data-card/data-card-gutter-menu.ts +0 -94
  29. package/src/data-card/data-card-gutter.ts +0 -103
  30. package/src/data-card/data-card.ts +0 -154
  31. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  32. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  33. package/src/data-card/record-card.ts +0 -289
  34. package/src/data-consumer.ts +0 -11
  35. package/src/data-grid/data-grid-accum-field.ts +0 -109
  36. package/src/data-grid/data-grid-body-style.ts +0 -99
  37. package/src/data-grid/data-grid-body.ts +0 -753
  38. package/src/data-grid/data-grid-field.ts +0 -236
  39. package/src/data-grid/data-grid-footer.ts +0 -117
  40. package/src/data-grid/data-grid-header.ts +0 -574
  41. package/src/data-grid/data-grid.ts +0 -293
  42. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  43. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  44. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  45. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  46. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  47. package/src/data-grist.ts +0 -1233
  48. package/src/data-list/data-list-field.ts +0 -82
  49. package/src/data-list/data-list-gutter.ts +0 -108
  50. package/src/data-list/data-list.ts +0 -145
  51. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  52. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  53. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  54. package/src/data-list/record-partial.ts +0 -255
  55. package/src/data-manipulator.ts +0 -426
  56. package/src/data-provider.ts +0 -271
  57. package/src/data-report/data-report-body-style.ts +0 -58
  58. package/src/data-report/data-report-body.ts +0 -189
  59. package/src/data-report/data-report-component.ts +0 -138
  60. package/src/data-report/data-report-field.ts +0 -83
  61. package/src/data-report/data-report-header.ts +0 -242
  62. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  63. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  64. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  65. package/src/data-report.ts +0 -424
  66. package/src/editors/index.ts +0 -4
  67. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  68. package/src/editors/ox-grist-editor-color.ts +0 -10
  69. package/src/editors/ox-grist-editor-date.ts +0 -10
  70. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  71. package/src/editors/ox-grist-editor-email.ts +0 -10
  72. package/src/editors/ox-grist-editor-file.ts +0 -28
  73. package/src/editors/ox-grist-editor-image.ts +0 -31
  74. package/src/editors/ox-grist-editor-month.ts +0 -10
  75. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  76. package/src/editors/ox-grist-editor-number.ts +0 -27
  77. package/src/editors/ox-grist-editor-password.ts +0 -10
  78. package/src/editors/ox-grist-editor-select.ts +0 -55
  79. package/src/editors/ox-grist-editor-tel.ts +0 -10
  80. package/src/editors/ox-grist-editor-text.ts +0 -14
  81. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  82. package/src/editors/ox-grist-editor-time.ts +0 -10
  83. package/src/editors/ox-grist-editor-tree.ts +0 -27
  84. package/src/editors/ox-grist-editor-varname.ts +0 -36
  85. package/src/editors/ox-grist-editor-week.ts +0 -10
  86. package/src/editors/ox-grist-editor.ts +0 -207
  87. package/src/editors/ox-input-tree.ts +0 -226
  88. package/src/editors/registry.ts +0 -82
  89. package/src/empty-note.ts +0 -46
  90. package/src/filters/filter-checkbox.ts +0 -49
  91. package/src/filters/filter-input-barcode.ts +0 -34
  92. package/src/filters/filter-input.ts +0 -30
  93. package/src/filters/filter-range-date.ts +0 -81
  94. package/src/filters/filter-range-number.ts +0 -64
  95. package/src/filters/filter-select-buttons.ts +0 -60
  96. package/src/filters/filter-select.ts +0 -68
  97. package/src/filters/filter-styles.ts +0 -119
  98. package/src/filters/filters-form.ts +0 -476
  99. package/src/filters/index.ts +0 -10
  100. package/src/filters/registry.ts +0 -56
  101. package/src/formatters/date-formatter.ts +0 -3
  102. package/src/formatters/index.ts +0 -1
  103. package/src/formatters/number-formatter.ts +0 -3
  104. package/src/formatters/registry.ts +0 -30
  105. package/src/formatters/text-formatter.ts +0 -3
  106. package/src/gutters/gutter-button.ts +0 -51
  107. package/src/gutters/gutter-dirty.ts +0 -96
  108. package/src/gutters/gutter-row-selector.ts +0 -89
  109. package/src/gutters/gutter-sequence.ts +0 -54
  110. package/src/gutters/index.ts +0 -1
  111. package/src/gutters/registry.ts +0 -32
  112. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  113. package/src/handlers/index.ts +0 -1
  114. package/src/handlers/move-down.ts +0 -44
  115. package/src/handlers/move-up.ts +0 -44
  116. package/src/handlers/record-copy.ts +0 -38
  117. package/src/handlers/record-delete.ts +0 -30
  118. package/src/handlers/record-view-handler.ts +0 -27
  119. package/src/handlers/registry.ts +0 -42
  120. package/src/handlers/select-row-toggle.ts +0 -30
  121. package/src/handlers/select-row.ts +0 -27
  122. package/src/index.ts +0 -17
  123. package/src/personalizer/index.ts +0 -1
  124. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  125. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  126. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  127. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  128. package/src/record-view/index.ts +0 -2
  129. package/src/record-view/ox-record-creator.ts +0 -289
  130. package/src/record-view/record-view-body.ts +0 -250
  131. package/src/record-view/record-view-handler.ts +0 -86
  132. package/src/record-view/record-view.ts +0 -122
  133. package/src/renderers/index.ts +0 -14
  134. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  135. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  136. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  137. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  138. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  139. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  140. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  141. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  142. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  143. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  144. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  145. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  146. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  147. package/src/renderers/ox-grist-renderer.ts +0 -35
  148. package/src/renderers/registry.ts +0 -111
  149. package/src/sorters/sorters-control.ts +0 -143
  150. package/src/types.ts +0 -813
  151. package/src/utils/index.ts +0 -2
  152. package/src/utils/list-param.ts +0 -72
  153. package/src/utils/supports-passive.ts +0 -13
  154. package/stories/accumulator-format.stories.ts +0 -276
  155. package/stories/barcode-input-filter.stories.ts +0 -216
  156. package/stories/bounded-select-filters.stories.ts +0 -333
  157. package/stories/bounded-select-record.stories.ts +0 -336
  158. package/stories/click-event-custom.stories.ts +0 -288
  159. package/stories/click-event.stories.ts +0 -283
  160. package/stories/creatable-only-column.stories.ts +0 -253
  161. package/stories/default-filters.stories.ts +0 -241
  162. package/stories/dynamic-editable.stories.ts +0 -313
  163. package/stories/empty-sorters.stories.ts +0 -180
  164. package/stories/explicit-fetch.stories.ts +0 -186
  165. package/stories/fixed-column.stories.ts +0 -416
  166. package/stories/grid-setting.stories.ts +0 -501
  167. package/stories/grist-modes.stories.ts +0 -451
  168. package/stories/group-header.stories.ts +0 -442
  169. package/stories/record-view.stories.ts +0 -143
  170. package/stories/textarea.stories.ts +0 -261
  171. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  172. package/stories/tree-column.stories.ts +0 -296
  173. package/tsconfig.json +0 -26
  174. package/web-dev-server.config.mjs +0 -27
  175. 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
- }