@operato/data-grist 9.0.0-beta.7 → 9.0.0-beta.70

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 (83) hide show
  1. package/CHANGELOG.md +275 -0
  2. package/README.md +337 -44
  3. package/dist/src/data-grid/data-grid-body.js +30 -27
  4. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  5. package/dist/src/data-grist.d.ts +13 -1
  6. package/dist/src/data-grist.js +42 -0
  7. package/dist/src/data-grist.js.map +1 -1
  8. package/dist/src/data-report.js +4 -4
  9. package/dist/src/data-report.js.map +1 -1
  10. package/dist/src/editors/ox-grist-editor-json5.d.ts +8 -0
  11. package/dist/src/editors/ox-grist-editor-json5.js +66 -0
  12. package/dist/src/editors/ox-grist-editor-json5.js.map +1 -0
  13. package/dist/src/editors/ox-popup-code-input.d.ts +14 -0
  14. package/dist/src/editors/ox-popup-code-input.js +78 -0
  15. package/dist/src/editors/ox-popup-code-input.js.map +1 -0
  16. package/dist/src/editors/registry.js +3 -1
  17. package/dist/src/editors/registry.js.map +1 -1
  18. package/dist/src/formatters/registry.d.ts +1 -1
  19. package/dist/src/gutters/registry.d.ts +1 -1
  20. package/dist/src/handlers/registry.d.ts +1 -1
  21. package/dist/tsconfig.tsbuildinfo +1 -1
  22. package/package.json +18 -14
  23. package/dist/index.d.ts +0 -1
  24. package/dist/index.js +0 -2
  25. package/dist/index.js.map +0 -1
  26. package/dist/stories/accumulator-format.stories.d.ts +0 -41
  27. package/dist/stories/accumulator-format.stories.js +0 -237
  28. package/dist/stories/accumulator-format.stories.js.map +0 -1
  29. package/dist/stories/barcode-input-filter.stories.d.ts +0 -33
  30. package/dist/stories/barcode-input-filter.stories.js +0 -185
  31. package/dist/stories/barcode-input-filter.stories.js.map +0 -1
  32. package/dist/stories/bounded-select-filters.stories.d.ts +0 -25
  33. package/dist/stories/bounded-select-filters.stories.js +0 -283
  34. package/dist/stories/bounded-select-filters.stories.js.map +0 -1
  35. package/dist/stories/bounded-select-record.stories.d.ts +0 -25
  36. package/dist/stories/bounded-select-record.stories.js +0 -286
  37. package/dist/stories/bounded-select-record.stories.js.map +0 -1
  38. package/dist/stories/click-event-custom.stories.d.ts +0 -45
  39. package/dist/stories/click-event-custom.stories.js +0 -248
  40. package/dist/stories/click-event-custom.stories.js.map +0 -1
  41. package/dist/stories/click-event.stories.d.ts +0 -45
  42. package/dist/stories/click-event.stories.js +0 -243
  43. package/dist/stories/click-event.stories.js.map +0 -1
  44. package/dist/stories/creatable-only-column.stories.d.ts +0 -29
  45. package/dist/stories/creatable-only-column.stories.js +0 -232
  46. package/dist/stories/creatable-only-column.stories.js.map +0 -1
  47. package/dist/stories/default-filters.stories.d.ts +0 -26
  48. package/dist/stories/default-filters.stories.js +0 -219
  49. package/dist/stories/default-filters.stories.js.map +0 -1
  50. package/dist/stories/dynamic-editable.stories.d.ts +0 -25
  51. package/dist/stories/dynamic-editable.stories.js +0 -293
  52. package/dist/stories/dynamic-editable.stories.js.map +0 -1
  53. package/dist/stories/empty-sorters.stories.d.ts +0 -25
  54. package/dist/stories/empty-sorters.stories.js +0 -162
  55. package/dist/stories/empty-sorters.stories.js.map +0 -1
  56. package/dist/stories/explicit-fetch.stories.d.ts +0 -25
  57. package/dist/stories/explicit-fetch.stories.js +0 -166
  58. package/dist/stories/explicit-fetch.stories.js.map +0 -1
  59. package/dist/stories/fixed-column.stories.d.ts +0 -26
  60. package/dist/stories/fixed-column.stories.js +0 -383
  61. package/dist/stories/fixed-column.stories.js.map +0 -1
  62. package/dist/stories/grid-setting.stories.d.ts +0 -47
  63. package/dist/stories/grid-setting.stories.js +0 -453
  64. package/dist/stories/grid-setting.stories.js.map +0 -1
  65. package/dist/stories/grist-modes.stories.d.ts +0 -37
  66. package/dist/stories/grist-modes.stories.js +0 -416
  67. package/dist/stories/grist-modes.stories.js.map +0 -1
  68. package/dist/stories/group-header.stories.d.ts +0 -26
  69. package/dist/stories/group-header.stories.js +0 -410
  70. package/dist/stories/group-header.stories.js.map +0 -1
  71. package/dist/stories/record-view.stories.d.ts +0 -24
  72. package/dist/stories/record-view.stories.js +0 -125
  73. package/dist/stories/record-view.stories.js.map +0 -1
  74. package/dist/stories/textarea.stories.d.ts +0 -37
  75. package/dist/stories/textarea.stories.js +0 -229
  76. package/dist/stories/textarea.stories.js.map +0 -1
  77. package/dist/stories/tree-column-with-checkbox.stories.d.ts +0 -26
  78. package/dist/stories/tree-column-with-checkbox.stories.js +0 -267
  79. package/dist/stories/tree-column-with-checkbox.stories.js.map +0 -1
  80. package/dist/stories/tree-column.stories.d.ts +0 -26
  81. package/dist/stories/tree-column.stories.js +0 -266
  82. package/dist/stories/tree-column.stories.js.map +0 -1
  83. package/index.ts +0 -1
@@ -1,283 +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
- import { html } from 'lit';
7
- import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles.js';
8
- import { sleep } from '@operato/utils';
9
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles';
10
- const fetchHandler = async ({ sorters = [], filters, page, limit }) => {
11
- var total = 120993;
12
- var start = (page - 1) * limit;
13
- await new Promise(resolve => setTimeout(resolve, 500));
14
- return {
15
- total,
16
- records: Array(limit * page > total ? total % limit : limit)
17
- .fill('')
18
- .map((item, idx) => {
19
- const warehouse = idx % 2 ? '01' : '02';
20
- const zone = idx % 2 ? 'Z001' : 'Z002';
21
- return {
22
- id: String(idx),
23
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
24
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
25
- warehouse,
26
- zone,
27
- location: `L${warehouse}-${zone}-0${(idx % 5) + 1}`,
28
- createdAt: Date.now(),
29
- updatedAt: Date.now()
30
- };
31
- })
32
- };
33
- };
34
- function buildConfig({ headerFilter }) {
35
- return {
36
- list: {
37
- fields: ['name', 'description'],
38
- details: ['updatedAt', 'createdAt']
39
- },
40
- columns: [
41
- {
42
- type: 'gutter',
43
- gutterName: 'sequence'
44
- },
45
- {
46
- type: 'string',
47
- name: 'id',
48
- hidden: true
49
- },
50
- {
51
- type: 'string',
52
- name: 'name',
53
- label: true,
54
- header: 'name',
55
- filter: {
56
- operator: 'eq',
57
- value: 'shnam'
58
- },
59
- sortable: true,
60
- width: 120
61
- },
62
- {
63
- type: 'string',
64
- name: 'description',
65
- header: 'description',
66
- record: {
67
- align: 'left'
68
- },
69
- width: 200
70
- },
71
- {
72
- type: 'select',
73
- name: 'warehouse',
74
- header: 'warehouse',
75
- filter: {
76
- operator: 'eq'
77
- },
78
- record: {
79
- align: 'left',
80
- options: async (value, column, record, rowIndex, field) => {
81
- await sleep(1000); // 테스트를 위해서 강제로 1초 쉬기
82
- return [
83
- {
84
- display: '',
85
- value: ''
86
- }
87
- ].concat(WAREHOUSE.map(w => {
88
- return {
89
- display: w.name,
90
- value: w.id
91
- };
92
- }));
93
- }
94
- },
95
- width: 200
96
- },
97
- {
98
- type: 'select',
99
- name: 'zone',
100
- header: 'zone',
101
- filter: {
102
- operator: 'eq',
103
- boundTo: ['warehouse'],
104
- onchange: () => {
105
- console.log('warehousde filter value changed.');
106
- }
107
- },
108
- record: {
109
- align: 'left',
110
- options: async (value, column, record, rowIndex, field) => {
111
- console.log('arguments', arguments);
112
- await sleep(1000); // 테스트를 위해서 강제로 1초 쉬기
113
- const warehouse = record.warehouse;
114
- console.log('warehouse', warehouse);
115
- const targetWH = warehouse && WAREHOUSE.find(w => w.id == warehouse);
116
- const zones = targetWH
117
- ? targetWH.zones
118
- : WAREHOUSE.reduce((sum, warehouse) => {
119
- sum = sum.concat(warehouse.zones);
120
- return sum;
121
- }, []);
122
- return [
123
- {
124
- display: '',
125
- value: ''
126
- }
127
- ].concat(zones.map((z) => {
128
- return {
129
- display: z.name,
130
- value: z.id
131
- };
132
- }));
133
- }
134
- },
135
- width: 200
136
- },
137
- {
138
- type: 'select',
139
- name: 'location',
140
- header: 'location',
141
- filter: {
142
- operator: 'eq',
143
- boundTo: ['warehouse', 'zone']
144
- },
145
- record: {
146
- align: 'left',
147
- options: async (value, column, record, rowIndex, field) => {
148
- await sleep(1000); // 테스트를 위해서 강제로 1초 쉬기
149
- const warehouse = record.warehouse;
150
- const zone = record.zone;
151
- console.log('warehouse, zone', warehouse, zone);
152
- const targetWH = (warehouse && WAREHOUSE.find(w => w.id == warehouse)) || null;
153
- const targetZone = zone && (targetWH === null || targetWH === void 0 ? void 0 : targetWH.zones.find((z) => z.id == zone));
154
- return targetZone ? ['', ...targetZone.locations] : [];
155
- }
156
- },
157
- width: 200
158
- },
159
- {
160
- type: 'datetime',
161
- name: 'updatedAt',
162
- header: 'updated at',
163
- width: 180
164
- },
165
- {
166
- type: 'datetime',
167
- name: 'createdAt',
168
- header: 'created at',
169
- width: 180
170
- }
171
- ],
172
- rows: {},
173
- sorters: [
174
- {
175
- name: 'name',
176
- desc: true
177
- }
178
- ],
179
- filters: {
180
- header: headerFilter
181
- },
182
- pagination: {
183
- pages: [30, 50, 100, 200]
184
- }
185
- };
186
- }
187
- const WAREHOUSE = [
188
- {
189
- id: '01',
190
- name: '제 1 창고',
191
- zones: [
192
- {
193
- id: 'Z001',
194
- name: 'Zone 01-001',
195
- locations: ['L01-001-01', 'L01-001-02', 'L01-001-03', 'L01-001-04', 'L01-001-05']
196
- },
197
- {
198
- id: 'Z002',
199
- name: 'Zone 01-002',
200
- locations: ['L01-002-01', 'L01-002-02', 'L01-002-03', 'L01-002-04', 'L01-002-05']
201
- }
202
- ]
203
- },
204
- {
205
- id: '02',
206
- name: '제 2 창고',
207
- zones: [
208
- {
209
- id: 'Z001',
210
- name: 'Zone 02-001',
211
- locations: ['L02-001-01', 'L02-001-02', 'L02-001-03', 'L02-001-04', 'L02-001-05']
212
- },
213
- {
214
- id: 'Z002',
215
- name: 'Zone 02-002',
216
- locations: ['L02-002-01', 'L02-002-02', 'L02-002-03', 'L02-002-04', 'L02-002-05']
217
- }
218
- ]
219
- }
220
- ];
221
- export default {
222
- title: 'bounded select filters for ox-grist',
223
- component: 'ox-grist',
224
- argTypes: {
225
- headerFilter: { control: 'boolean' }
226
- }
227
- };
228
- const Template = ({ headerFilter }) => html ` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
229
-
230
- <link href="/themes/light.css" rel="stylesheet" />
231
- <link href="/themes/dark.css" rel="stylesheet" />
232
- <link href="/themes/spacing.css" rel="stylesheet" />
233
- <link href="/themes/grist-theme.css" rel="stylesheet" />
234
-
235
- <link
236
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
237
- rel="stylesheet"
238
- />
239
- <link
240
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
241
- rel="stylesheet"
242
- />
243
- <link
244
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
245
- rel="stylesheet"
246
- />
247
-
248
- <style>
249
- ${MDTypeScaleStyles.cssText}
250
- </style>
251
-
252
- <style>
253
- ${CommonGristStyles.cssText}
254
- ${CommonHeaderStyles.cssText}
255
- </style>
256
-
257
- <style>
258
- ox-grist {
259
- height: 600px;
260
- }
261
-
262
- ox-filters-form {
263
- flex: 1;
264
- }
265
- </style>
266
-
267
- <ox-grist
268
- .config=${buildConfig({ headerFilter })}
269
- mode="GRID"
270
- .fetchHandler=${fetchHandler}
271
- @filters-change=${(e) => console.log('filters', e.target.filters)}
272
- >
273
- <div slot="headroom" class="header">
274
- <div class="filters">
275
- <ox-filters-form></ox-filters-form>
276
- </div>
277
- </div>
278
- </ox-grist>`;
279
- export const Regular = Template.bind({});
280
- Regular.args = {
281
- headerFilter: true
282
- };
283
- //# sourceMappingURL=bounded-select-filters.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bounded-select-filters.stories.js","sourceRoot":"","sources":["../../stories/bounded-select-filters.stories.ts"],"names":[],"mappings":"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","sourcesContent":["import '../src/index.js'\nimport '../src/filters/filters-form.js'\nimport '../src/sorters/sorters-control.js'\nimport '@operato/popup/ox-popup-list.js'\nimport '@material/web/icon/icon.js'\n\nimport { html, TemplateResult } from 'lit'\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles.js'\n\nimport { sleep } from '@operato/utils'\n\nimport { ColumnConfig, FetchHandler, GristRecord, SelectOption } from '../src/types.js'\n\nimport { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'\nimport { DataGridField } from '../src/data-grid/data-grid-field.js'\n\nconst fetchHandler: FetchHandler = async ({ sorters = [], filters, page, limit }) => {\n var total = 120993\n var start = (page! - 1) * limit!\n\n await new Promise(resolve => setTimeout(resolve, 500))\n\n return {\n total,\n records: Array(limit! * page! > total ? total % limit! : limit)\n .fill('')\n .map((item, idx) => {\n const warehouse = idx % 2 ? '01' : '02'\n const zone = idx % 2 ? 'Z001' : 'Z002'\n\n return {\n id: String(idx),\n name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,\n description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,\n warehouse,\n zone,\n location: `L${warehouse}-${zone}-0${(idx % 5) + 1}`,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n })\n }\n}\n\nfunction buildConfig({ headerFilter }: { headerFilter: boolean }) {\n return {\n list: {\n fields: ['name', 'description'],\n details: ['updatedAt', 'createdAt']\n },\n columns: [\n {\n type: 'gutter',\n gutterName: 'sequence'\n },\n {\n type: 'string',\n name: 'id',\n hidden: true\n },\n {\n type: 'string',\n name: 'name',\n label: true,\n header: 'name',\n filter: {\n operator: 'eq',\n value: 'shnam'\n },\n sortable: true,\n width: 120\n },\n {\n type: 'string',\n name: 'description',\n header: 'description',\n record: {\n align: 'left'\n },\n width: 200\n },\n {\n type: 'select',\n name: 'warehouse',\n header: 'warehouse',\n filter: {\n operator: 'eq'\n },\n record: {\n align: 'left',\n options: async (\n value: any,\n column: ColumnConfig,\n record: GristRecord,\n rowIndex: number,\n field: DataGridField\n ): Promise<SelectOption[]> => {\n await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기\n return [\n {\n display: '',\n value: ''\n }\n ].concat(\n WAREHOUSE.map(w => {\n return {\n display: w.name,\n value: w.id\n }\n })\n )\n }\n },\n width: 200\n },\n {\n type: 'select',\n name: 'zone',\n header: 'zone',\n filter: {\n operator: 'eq',\n boundTo: ['warehouse'],\n onchange: () => {\n console.log('warehousde filter value changed.')\n }\n },\n record: {\n align: 'left',\n options: async (\n value: any,\n column: ColumnConfig,\n record: GristRecord,\n rowIndex: number,\n field: DataGridField\n ): Promise<SelectOption[]> => {\n console.log('arguments', arguments)\n await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기\n const warehouse = record.warehouse\n console.log('warehouse', warehouse)\n\n const targetWH = warehouse && WAREHOUSE.find(w => w.id == warehouse)\n const zones = targetWH\n ? targetWH.zones\n : WAREHOUSE.reduce((sum, warehouse) => {\n sum = sum.concat(warehouse.zones)\n return sum\n }, [] as any[])\n\n return [\n {\n display: '',\n value: ''\n }\n ].concat(\n zones.map((z: any) => {\n return {\n display: z.name,\n value: z.id\n }\n })\n )\n }\n },\n width: 200\n },\n {\n type: 'select',\n name: 'location',\n header: 'location',\n filter: {\n operator: 'eq',\n boundTo: ['warehouse', 'zone']\n },\n record: {\n align: 'left',\n options: async (\n value: any,\n column: ColumnConfig,\n record: GristRecord,\n rowIndex: number,\n field: DataGridField\n ): Promise<SelectOption[]> => {\n await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기\n const warehouse = record.warehouse\n const zone = record.zone\n console.log('warehouse, zone', warehouse, zone)\n\n const targetWH = (warehouse && WAREHOUSE.find(w => w.id == warehouse)) || null\n const targetZone = zone && targetWH?.zones.find((z: any) => z.id == zone)\n return targetZone ? ['', ...targetZone.locations] : []\n }\n },\n width: 200\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: 'updated at',\n width: 180\n },\n {\n type: 'datetime',\n name: 'createdAt',\n header: 'created at',\n width: 180\n }\n ],\n rows: {},\n sorters: [\n {\n name: 'name',\n desc: true\n }\n ],\n filters: {\n header: headerFilter\n },\n pagination: {\n pages: [30, 50, 100, 200]\n }\n }\n}\n\nconst WAREHOUSE = [\n {\n id: '01',\n name: '제 1 창고',\n zones: [\n {\n id: 'Z001',\n name: 'Zone 01-001',\n locations: ['L01-001-01', 'L01-001-02', 'L01-001-03', 'L01-001-04', 'L01-001-05']\n },\n {\n id: 'Z002',\n name: 'Zone 01-002',\n locations: ['L01-002-01', 'L01-002-02', 'L01-002-03', 'L01-002-04', 'L01-002-05']\n }\n ]\n },\n {\n id: '02',\n name: '제 2 창고',\n zones: [\n {\n id: 'Z001',\n name: 'Zone 02-001',\n locations: ['L02-001-01', 'L02-001-02', 'L02-001-03', 'L02-001-04', 'L02-001-05']\n },\n {\n id: 'Z002',\n name: 'Zone 02-002',\n locations: ['L02-002-01', 'L02-002-02', 'L02-002-03', 'L02-002-04', 'L02-002-05']\n }\n ]\n }\n]\n\nexport default {\n title: 'bounded select filters for ox-grist',\n component: 'ox-grist',\n argTypes: {\n headerFilter: { control: 'boolean' }\n }\n}\n\ninterface Story<T> {\n (args: T): TemplateResult\n args?: Partial<T>\n argTypes?: Record<string, unknown>\n}\n\ninterface ArgTypes {\n headerFilter: boolean\n}\n\nconst Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) =>\n html` <link href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap\" rel=\"stylesheet\" />\n\n <link href=\"/themes/light.css\" rel=\"stylesheet\" />\n <link href=\"/themes/dark.css\" rel=\"stylesheet\" />\n <link href=\"/themes/spacing.css\" rel=\"stylesheet\" />\n <link href=\"/themes/grist-theme.css\" rel=\"stylesheet\" />\n\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n\n <style>\n ${MDTypeScaleStyles.cssText}\n </style>\n\n <style>\n ${CommonGristStyles.cssText}\n ${CommonHeaderStyles.cssText}\n </style>\n\n <style>\n ox-grist {\n height: 600px;\n }\n\n ox-filters-form {\n flex: 1;\n }\n </style>\n\n <ox-grist\n .config=${buildConfig({ headerFilter })}\n mode=\"GRID\"\n .fetchHandler=${fetchHandler}\n @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}\n >\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form></ox-filters-form>\n </div>\n </div>\n </ox-grist>`\n\nexport const Regular = Template.bind({})\nRegular.args = {\n headerFilter: true\n}\n"]}
@@ -1,25 +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
- import { TemplateResult } from 'lit';
7
- declare const _default: {
8
- title: string;
9
- component: string;
10
- argTypes: {
11
- headerFilter: {
12
- control: string;
13
- };
14
- };
15
- };
16
- export default _default;
17
- interface Story<T> {
18
- (args: T): TemplateResult;
19
- args?: Partial<T>;
20
- argTypes?: Record<string, unknown>;
21
- }
22
- interface ArgTypes {
23
- headerFilter: boolean;
24
- }
25
- export declare const Regular: Story<ArgTypes>;
@@ -1,286 +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
- import { html } from 'lit';
7
- import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles.js';
8
- import { sleep } from '@operato/utils';
9
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles';
10
- const fetchHandler = async ({ sorters = [], filters, page, limit }) => {
11
- var total = 120993;
12
- var start = (page - 1) * limit;
13
- await new Promise(resolve => setTimeout(resolve, 500));
14
- return {
15
- total,
16
- records: Array(limit * page > total ? total % limit : limit)
17
- .fill('')
18
- .map((item, idx) => {
19
- const warehouse = idx % 2 ? '01' : '02';
20
- const zone = idx % 2 ? 'Z001' : 'Z002';
21
- return {
22
- id: String(idx),
23
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
24
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
25
- warehouse,
26
- zone,
27
- location: `L${warehouse}-${zone}-0${(idx % 5) + 1}`,
28
- createdAt: Date.now(),
29
- updatedAt: Date.now()
30
- };
31
- })
32
- };
33
- };
34
- function buildConfig({ headerFilter }) {
35
- return {
36
- list: {
37
- fields: ['name', 'description'],
38
- details: ['updatedAt', 'createdAt']
39
- },
40
- columns: [
41
- {
42
- type: 'gutter',
43
- gutterName: 'sequence'
44
- },
45
- {
46
- type: 'string',
47
- name: 'id',
48
- hidden: true
49
- },
50
- {
51
- type: 'string',
52
- name: 'name',
53
- label: true,
54
- header: 'name',
55
- filter: {
56
- operator: 'eq',
57
- value: 'shnam'
58
- },
59
- sortable: true,
60
- width: 120
61
- },
62
- {
63
- type: 'string',
64
- name: 'description',
65
- header: 'description',
66
- record: {
67
- align: 'left'
68
- },
69
- width: 200
70
- },
71
- {
72
- type: 'select',
73
- name: 'warehouse',
74
- header: 'warehouse',
75
- filter: {
76
- operator: 'eq'
77
- },
78
- record: {
79
- align: 'left',
80
- editable: true,
81
- options: async (value, column, record, rowIndex, field) => {
82
- await sleep(1000); // 테스트를 위해서 강제로 1초 쉬기
83
- return [
84
- {
85
- display: '',
86
- value: ''
87
- }
88
- ].concat(WAREHOUSE.map(w => {
89
- return {
90
- display: w.name,
91
- value: w.id
92
- };
93
- }));
94
- }
95
- },
96
- width: 200
97
- },
98
- {
99
- type: 'select',
100
- name: 'zone',
101
- header: 'zone',
102
- filter: {
103
- operator: 'eq',
104
- boundTo: ['warehouse'],
105
- onchange: () => {
106
- console.log('warehousde filter value changed.');
107
- }
108
- },
109
- record: {
110
- align: 'left',
111
- editable: true,
112
- options: async (value, column, record, rowIndex, field) => {
113
- console.log('arguments', arguments);
114
- await sleep(1000); // 테스트를 위해서 강제로 1초 쉬기
115
- const warehouse = record.warehouse;
116
- console.log('warehouse', warehouse);
117
- const targetWH = warehouse && WAREHOUSE.find(w => w.id == warehouse);
118
- const zones = targetWH
119
- ? targetWH.zones
120
- : WAREHOUSE.reduce((sum, warehouse) => {
121
- sum = sum.concat(warehouse.zones);
122
- return sum;
123
- }, []);
124
- return [
125
- {
126
- display: '',
127
- value: ''
128
- }
129
- ].concat(zones.map((z) => {
130
- return {
131
- display: z.name,
132
- value: z.id
133
- };
134
- }));
135
- }
136
- },
137
- width: 200
138
- },
139
- {
140
- type: 'select',
141
- name: 'location',
142
- header: 'location',
143
- filter: {
144
- operator: 'eq',
145
- boundTo: ['warehouse', 'zone']
146
- },
147
- record: {
148
- align: 'left',
149
- editable: true,
150
- options: async (value, column, record, rowIndex, field) => {
151
- await sleep(1000); // 테스트를 위해서 강제로 1초 쉬기
152
- const warehouse = record.warehouse;
153
- const zone = record.zone;
154
- console.log('warehouse, zone', warehouse, zone);
155
- const targetWH = (warehouse && WAREHOUSE.find(w => w.id == warehouse)) || null;
156
- const targetZone = zone && (targetWH === null || targetWH === void 0 ? void 0 : targetWH.zones.find((z) => z.id == zone));
157
- return targetZone ? ['', ...targetZone.locations] : [];
158
- }
159
- },
160
- width: 200
161
- },
162
- {
163
- type: 'datetime',
164
- name: 'updatedAt',
165
- header: 'updated at',
166
- width: 180
167
- },
168
- {
169
- type: 'datetime',
170
- name: 'createdAt',
171
- header: 'created at',
172
- width: 180
173
- }
174
- ],
175
- rows: {},
176
- sorters: [
177
- {
178
- name: 'name',
179
- desc: true
180
- }
181
- ],
182
- filters: {
183
- header: headerFilter
184
- },
185
- pagination: {
186
- pages: [30, 50, 100, 200]
187
- }
188
- };
189
- }
190
- const WAREHOUSE = [
191
- {
192
- id: '01',
193
- name: '제 1 창고',
194
- zones: [
195
- {
196
- id: 'Z001',
197
- name: 'Zone 01-001',
198
- locations: ['L01-001-01', 'L01-001-02', 'L01-001-03', 'L01-001-04', 'L01-001-05']
199
- },
200
- {
201
- id: 'Z002',
202
- name: 'Zone 01-002',
203
- locations: ['L01-002-01', 'L01-002-02', 'L01-002-03', 'L01-002-04', 'L01-002-05']
204
- }
205
- ]
206
- },
207
- {
208
- id: '02',
209
- name: '제 2 창고',
210
- zones: [
211
- {
212
- id: 'Z001',
213
- name: 'Zone 02-001',
214
- locations: ['L02-001-01', 'L02-001-02', 'L02-001-03', 'L02-001-04', 'L02-001-05']
215
- },
216
- {
217
- id: 'Z002',
218
- name: 'Zone 02-002',
219
- locations: ['L02-002-01', 'L02-002-02', 'L02-002-03', 'L02-002-04', 'L02-002-05']
220
- }
221
- ]
222
- }
223
- ];
224
- export default {
225
- title: 'bounded select record for ox-grist',
226
- component: 'ox-grist',
227
- argTypes: {
228
- headerFilter: { control: 'boolean' }
229
- }
230
- };
231
- const Template = ({ headerFilter }) => html ` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
232
-
233
- <link href="/themes/light.css" rel="stylesheet" />
234
- <link href="/themes/dark.css" rel="stylesheet" />
235
- <link href="/themes/spacing.css" rel="stylesheet" />
236
- <link href="/themes/grist-theme.css" rel="stylesheet" />
237
-
238
- <link
239
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
240
- rel="stylesheet"
241
- />
242
- <link
243
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
244
- rel="stylesheet"
245
- />
246
- <link
247
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
248
- rel="stylesheet"
249
- />
250
-
251
- <style>
252
- ${MDTypeScaleStyles.cssText}
253
- </style>
254
-
255
- <style>
256
- ${CommonGristStyles.cssText}
257
- ${CommonHeaderStyles.cssText}
258
- </style>
259
-
260
- <style>
261
- ox-grist {
262
- height: 600px;
263
- }
264
-
265
- ox-filters-form {
266
- flex: 1;
267
- }
268
- </style>
269
-
270
- <ox-grist
271
- .config=${buildConfig({ headerFilter })}
272
- mode="GRID"
273
- .fetchHandler=${fetchHandler}
274
- @filters-change=${(e) => console.log('filters', e.target.filters)}
275
- >
276
- <div slot="headroom" class="header">
277
- <div class="filters">
278
- <ox-filters-form></ox-filters-form>
279
- </div>
280
- </div>
281
- </ox-grist>`;
282
- export const Regular = Template.bind({});
283
- Regular.args = {
284
- headerFilter: true
285
- };
286
- //# sourceMappingURL=bounded-select-record.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bounded-select-record.stories.js","sourceRoot":"","sources":["../../stories/bounded-select-record.stories.ts"],"names":[],"mappings":"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","sourcesContent":["import '../src/index.js'\nimport '../src/filters/filters-form.js'\nimport '../src/sorters/sorters-control.js'\nimport '@operato/popup/ox-popup-list.js'\nimport '@material/web/icon/icon.js'\n\nimport { html, TemplateResult } from 'lit'\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles.js'\n\nimport { sleep } from '@operato/utils'\n\nimport { ColumnConfig, FetchHandler, FieldEditor, GristRecord, SelectOption } from '../src/types.js'\n\nimport { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'\nimport { DataGridField } from '../src/data-grid/data-grid-field.js'\n\nconst fetchHandler: FetchHandler = async ({ sorters = [], filters, page, limit }) => {\n var total = 120993\n var start = (page! - 1) * limit!\n\n await new Promise(resolve => setTimeout(resolve, 500))\n\n return {\n total,\n records: Array(limit! * page! > total ? total % limit! : limit)\n .fill('')\n .map((item, idx) => {\n const warehouse: string = idx % 2 ? '01' : '02'\n const zone: string = idx % 2 ? 'Z001' : 'Z002'\n\n return {\n id: String(idx),\n name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,\n description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,\n warehouse,\n zone,\n location: `L${warehouse}-${zone}-0${(idx % 5) + 1}`,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n })\n }\n}\n\nfunction buildConfig({ headerFilter }: { headerFilter: boolean }) {\n return {\n list: {\n fields: ['name', 'description'],\n details: ['updatedAt', 'createdAt']\n },\n columns: [\n {\n type: 'gutter',\n gutterName: 'sequence'\n },\n {\n type: 'string',\n name: 'id',\n hidden: true\n },\n {\n type: 'string',\n name: 'name',\n label: true,\n header: 'name',\n filter: {\n operator: 'eq',\n value: 'shnam'\n },\n sortable: true,\n width: 120\n },\n {\n type: 'string',\n name: 'description',\n header: 'description',\n record: {\n align: 'left'\n },\n width: 200\n },\n {\n type: 'select',\n name: 'warehouse',\n header: 'warehouse',\n filter: {\n operator: 'eq'\n },\n record: {\n align: 'left',\n editable: true,\n options: async (\n value: any,\n column: ColumnConfig,\n record: GristRecord,\n rowIndex: number,\n field: DataGridField\n ): Promise<SelectOption[]> => {\n await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기\n return [\n {\n display: '',\n value: ''\n }\n ].concat(\n WAREHOUSE.map(w => {\n return {\n display: w.name,\n value: w.id\n }\n })\n )\n }\n },\n width: 200\n },\n {\n type: 'select',\n name: 'zone',\n header: 'zone',\n filter: {\n operator: 'eq',\n boundTo: ['warehouse'],\n onchange: () => {\n console.log('warehousde filter value changed.')\n }\n },\n record: {\n align: 'left',\n editable: true,\n options: async (\n value: any,\n column: ColumnConfig,\n record: GristRecord,\n rowIndex: number,\n field: DataGridField\n ): Promise<SelectOption[]> => {\n console.log('arguments', arguments)\n await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기\n const warehouse = record.warehouse\n console.log('warehouse', warehouse)\n\n const targetWH = warehouse && WAREHOUSE.find(w => w.id == warehouse)\n const zones = targetWH\n ? targetWH.zones\n : WAREHOUSE.reduce((sum, warehouse) => {\n sum = sum.concat(warehouse.zones)\n return sum\n }, [] as any[])\n\n return [\n {\n display: '',\n value: ''\n }\n ].concat(\n zones.map((z: any) => {\n return {\n display: z.name,\n value: z.id\n }\n })\n )\n }\n },\n width: 200\n },\n {\n type: 'select',\n name: 'location',\n header: 'location',\n filter: {\n operator: 'eq',\n boundTo: ['warehouse', 'zone']\n },\n record: {\n align: 'left',\n editable: true,\n options: async (\n value: any,\n column: ColumnConfig,\n record: GristRecord,\n rowIndex: number,\n field: DataGridField\n ): Promise<SelectOption[]> => {\n await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기\n const warehouse = record.warehouse\n const zone = record.zone\n console.log('warehouse, zone', warehouse, zone)\n\n const targetWH = (warehouse && WAREHOUSE.find(w => w.id == warehouse)) || null\n const targetZone = zone && targetWH?.zones.find((z: any) => z.id == zone)\n return targetZone ? ['', ...targetZone.locations] : []\n }\n },\n width: 200\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: 'updated at',\n width: 180\n },\n {\n type: 'datetime',\n name: 'createdAt',\n header: 'created at',\n width: 180\n }\n ],\n rows: {},\n sorters: [\n {\n name: 'name',\n desc: true\n }\n ],\n filters: {\n header: headerFilter\n },\n pagination: {\n pages: [30, 50, 100, 200]\n }\n }\n}\n\nconst WAREHOUSE = [\n {\n id: '01',\n name: '제 1 창고',\n zones: [\n {\n id: 'Z001',\n name: 'Zone 01-001',\n locations: ['L01-001-01', 'L01-001-02', 'L01-001-03', 'L01-001-04', 'L01-001-05']\n },\n {\n id: 'Z002',\n name: 'Zone 01-002',\n locations: ['L01-002-01', 'L01-002-02', 'L01-002-03', 'L01-002-04', 'L01-002-05']\n }\n ]\n },\n {\n id: '02',\n name: '제 2 창고',\n zones: [\n {\n id: 'Z001',\n name: 'Zone 02-001',\n locations: ['L02-001-01', 'L02-001-02', 'L02-001-03', 'L02-001-04', 'L02-001-05']\n },\n {\n id: 'Z002',\n name: 'Zone 02-002',\n locations: ['L02-002-01', 'L02-002-02', 'L02-002-03', 'L02-002-04', 'L02-002-05']\n }\n ]\n }\n]\n\nexport default {\n title: 'bounded select record for ox-grist',\n component: 'ox-grist',\n argTypes: {\n headerFilter: { control: 'boolean' }\n }\n}\n\ninterface Story<T> {\n (args: T): TemplateResult\n args?: Partial<T>\n argTypes?: Record<string, unknown>\n}\n\ninterface ArgTypes {\n headerFilter: boolean\n}\n\nconst Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) =>\n html` <link href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap\" rel=\"stylesheet\" />\n\n <link href=\"/themes/light.css\" rel=\"stylesheet\" />\n <link href=\"/themes/dark.css\" rel=\"stylesheet\" />\n <link href=\"/themes/spacing.css\" rel=\"stylesheet\" />\n <link href=\"/themes/grist-theme.css\" rel=\"stylesheet\" />\n\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n\n <style>\n ${MDTypeScaleStyles.cssText}\n </style>\n\n <style>\n ${CommonGristStyles.cssText}\n ${CommonHeaderStyles.cssText}\n </style>\n\n <style>\n ox-grist {\n height: 600px;\n }\n\n ox-filters-form {\n flex: 1;\n }\n </style>\n\n <ox-grist\n .config=${buildConfig({ headerFilter })}\n mode=\"GRID\"\n .fetchHandler=${fetchHandler}\n @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}\n >\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form></ox-filters-form>\n </div>\n </div>\n </ox-grist>`\n\nexport const Regular = Template.bind({})\nRegular.args = {\n headerFilter: true\n}\n"]}