@operato/data-grist 2.0.0-alpha.99 → 2.0.0-beta.0

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 (216) hide show
  1. package/CHANGELOG.md +433 -0
  2. package/demo/data-grist-test.html +1 -1
  3. package/demo/index.html +1 -1
  4. package/dist/src/data-card/data-card-field.js +2 -2
  5. package/dist/src/data-card/data-card-field.js.map +1 -1
  6. package/dist/src/data-card/data-card-gutter-menu.js +5 -5
  7. package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
  8. package/dist/src/data-card/data-card-gutter.js +6 -6
  9. package/dist/src/data-card/data-card-gutter.js.map +1 -1
  10. package/dist/src/data-card/data-card.js +7 -9
  11. package/dist/src/data-card/data-card.js.map +1 -1
  12. package/dist/src/data-card/record-card.js +9 -10
  13. package/dist/src/data-card/record-card.js.map +1 -1
  14. package/dist/src/data-grid/data-grid-accum-field.js +12 -5
  15. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  16. package/dist/src/data-grid/data-grid-body-style.js +12 -0
  17. package/dist/src/data-grid/data-grid-body-style.js.map +1 -1
  18. package/dist/src/data-grid/data-grid-body.d.ts +0 -1
  19. package/dist/src/data-grid/data-grid-body.js +14 -21
  20. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  21. package/dist/src/data-grid/data-grid-field.js +8 -2
  22. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  23. package/dist/src/data-grid/data-grid-footer.js +4 -2
  24. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  25. package/dist/src/data-grid/data-grid-header.js +9 -6
  26. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  27. package/dist/src/data-grid/data-grid.js +23 -1
  28. package/dist/src/data-grid/data-grid.js.map +1 -1
  29. package/dist/src/data-grid/event-handlers/data-grid-body-click-handler.js +3 -0
  30. package/dist/src/data-grid/event-handlers/data-grid-body-click-handler.js.map +1 -1
  31. package/dist/src/data-grist.d.ts +10 -2
  32. package/dist/src/data-grist.js +71 -8
  33. package/dist/src/data-grist.js.map +1 -1
  34. package/dist/src/data-list/data-list-field.js +5 -5
  35. package/dist/src/data-list/data-list-field.js.map +1 -1
  36. package/dist/src/data-list/data-list-gutter.js +3 -3
  37. package/dist/src/data-list/data-list-gutter.js.map +1 -1
  38. package/dist/src/data-list/data-list.js +4 -4
  39. package/dist/src/data-list/data-list.js.map +1 -1
  40. package/dist/src/data-list/record-partial.js +9 -10
  41. package/dist/src/data-list/record-partial.js.map +1 -1
  42. package/dist/src/data-manipulator.d.ts +1 -1
  43. package/dist/src/data-manipulator.js +5 -5
  44. package/dist/src/data-manipulator.js.map +1 -1
  45. package/dist/src/data-report/data-report-field.js +2 -1
  46. package/dist/src/data-report/data-report-field.js.map +1 -1
  47. package/dist/src/data-report/data-report-header.js +2 -2
  48. package/dist/src/data-report/data-report-header.js.map +1 -1
  49. package/dist/src/editors/ox-grist-editor-select.js +37 -25
  50. package/dist/src/editors/ox-grist-editor-select.js.map +1 -1
  51. package/dist/src/editors/ox-input-tree.js +8 -8
  52. package/dist/src/editors/ox-input-tree.js.map +1 -1
  53. package/dist/src/filters/filter-input-barcode.js +1 -0
  54. package/dist/src/filters/filter-input-barcode.js.map +1 -1
  55. package/dist/src/filters/filter-select.js +30 -16
  56. package/dist/src/filters/filter-select.js.map +1 -1
  57. package/dist/src/filters/filter-styles.js +46 -31
  58. package/dist/src/filters/filter-styles.js.map +1 -1
  59. package/dist/src/filters/filters-form.d.ts +15 -4
  60. package/dist/src/filters/filters-form.js +205 -70
  61. package/dist/src/filters/filters-form.js.map +1 -1
  62. package/dist/src/gutters/gutter-dirty.js +2 -2
  63. package/dist/src/gutters/gutter-dirty.js.map +1 -1
  64. package/dist/src/index.d.ts +1 -0
  65. package/dist/src/index.js +1 -0
  66. package/dist/src/index.js.map +1 -1
  67. package/dist/src/personalizer/index.d.ts +1 -0
  68. package/dist/src/personalizer/index.js +2 -0
  69. package/dist/src/personalizer/index.js.map +1 -0
  70. package/dist/src/personalizer/ox-grist-filter-personalizer.d.ts +8 -0
  71. package/dist/src/personalizer/ox-grist-filter-personalizer.js +177 -0
  72. package/dist/src/personalizer/ox-grist-filter-personalizer.js.map +1 -0
  73. package/dist/src/personalizer/ox-grist-personalizer.d.ts +8 -0
  74. package/dist/src/personalizer/ox-grist-personalizer.js +178 -0
  75. package/dist/src/personalizer/ox-grist-personalizer.js.map +1 -0
  76. package/dist/src/record-view/record-creator.js +2 -2
  77. package/dist/src/record-view/record-creator.js.map +1 -1
  78. package/dist/src/renderers/ox-grist-renderer-select.js +34 -4
  79. package/dist/src/renderers/ox-grist-renderer-select.js.map +1 -1
  80. package/dist/src/renderers/ox-grist-renderer-tree.js +8 -8
  81. package/dist/src/renderers/ox-grist-renderer-tree.js.map +1 -1
  82. package/dist/src/sorters/sorters-control.js +3 -3
  83. package/dist/src/sorters/sorters-control.js.map +1 -1
  84. package/dist/src/types.d.ts +41 -2
  85. package/dist/src/types.js.map +1 -1
  86. package/dist/stories/{accumulator.stories.d.ts → accumulator-format.stories.d.ts} +9 -0
  87. package/dist/stories/{accumulator.stories.js → accumulator-format.stories.js} +24 -12
  88. package/dist/stories/accumulator-format.stories.js.map +1 -0
  89. package/dist/stories/barcode-input-filter.stories.d.ts +5 -0
  90. package/dist/stories/barcode-input-filter.stories.js +29 -5
  91. package/dist/stories/barcode-input-filter.stories.js.map +1 -1
  92. package/dist/stories/bounded-select-filters.stories.d.ts +30 -0
  93. package/dist/stories/bounded-select-filters.stories.js +288 -0
  94. package/dist/stories/bounded-select-filters.stories.js.map +1 -0
  95. package/dist/stories/bounded-select-record.stories.d.ts +30 -0
  96. package/dist/stories/bounded-select-record.stories.js +291 -0
  97. package/dist/stories/bounded-select-record.stories.js.map +1 -0
  98. package/dist/stories/click-event.stories.d.ts +41 -0
  99. package/dist/stories/click-event.stories.js +234 -0
  100. package/dist/stories/click-event.stories.js.map +1 -0
  101. package/dist/stories/creatable-only-column.stories.d.ts +5 -0
  102. package/dist/stories/creatable-only-column.stories.js +46 -21
  103. package/dist/stories/creatable-only-column.stories.js.map +1 -1
  104. package/dist/stories/default-filters.stories.d.ts +5 -0
  105. package/dist/stories/default-filters.stories.js +84 -17
  106. package/dist/stories/default-filters.stories.js.map +1 -1
  107. package/dist/stories/dynamic-editable.stories.d.ts +5 -0
  108. package/dist/stories/dynamic-editable.stories.js +44 -21
  109. package/dist/stories/dynamic-editable.stories.js.map +1 -1
  110. package/dist/stories/empty-sorters.stories.d.ts +7 -1
  111. package/dist/stories/empty-sorters.stories.js +41 -17
  112. package/dist/stories/empty-sorters.stories.js.map +1 -1
  113. package/dist/stories/explicit-fetch.stories.d.ts +5 -0
  114. package/dist/stories/explicit-fetch.stories.js +40 -17
  115. package/dist/stories/explicit-fetch.stories.js.map +1 -1
  116. package/dist/stories/fixed-column.stories.d.ts +5 -0
  117. package/dist/stories/fixed-column.stories.js +53 -30
  118. package/dist/stories/fixed-column.stories.js.map +1 -1
  119. package/dist/stories/grid-setting.stories.d.ts +20 -4
  120. package/dist/stories/grid-setting.stories.js +96 -51
  121. package/dist/stories/grid-setting.stories.js.map +1 -1
  122. package/dist/stories/grist-modes.stories.d.ts +8 -2
  123. package/dist/stories/grist-modes.stories.js +58 -35
  124. package/dist/stories/grist-modes.stories.js.map +1 -1
  125. package/dist/stories/group-header.stories.d.ts +5 -0
  126. package/dist/stories/group-header.stories.js +53 -30
  127. package/dist/stories/group-header.stories.js.map +1 -1
  128. package/dist/stories/textarea.stories.d.ts +8 -2
  129. package/dist/stories/textarea.stories.js +37 -13
  130. package/dist/stories/textarea.stories.js.map +1 -1
  131. package/dist/stories/tree-column-with-checkbox.stories.d.ts +5 -0
  132. package/dist/stories/tree-column-with-checkbox.stories.js +44 -21
  133. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  134. package/dist/stories/tree-column.stories.d.ts +5 -0
  135. package/dist/stories/tree-column.stories.js +44 -21
  136. package/dist/stories/tree-column.stories.js.map +1 -1
  137. package/dist/tsconfig.tsbuildinfo +1 -1
  138. package/docs/default-value/value-generator/date-generator.md +29 -0
  139. package/docs/default-value/value-generator/hour-time-generator.md +33 -0
  140. package/docs/default-value/value-generator/minute-time-generator.md +33 -0
  141. package/docs/default-value/value-generator/month-date-generator.md +2 -0
  142. package/docs/default-value/value-generator/now-generator.md +29 -0
  143. package/docs/default-value/value-generator/time-generator.md +31 -0
  144. package/docs/default-value/value-generator/today-generator.md +29 -0
  145. package/docs/default-value/value-generator/week-date-generator.md +31 -0
  146. package/docs/default-value/value-generator/year-date-generator.md +31 -0
  147. package/package.json +15 -10
  148. package/src/data-card/data-card-field.ts +2 -2
  149. package/src/data-card/data-card-gutter-menu.ts +5 -5
  150. package/src/data-card/data-card-gutter.ts +6 -6
  151. package/src/data-card/data-card.ts +7 -9
  152. package/src/data-card/record-card.ts +9 -10
  153. package/src/data-grid/data-grid-accum-field.ts +11 -5
  154. package/src/data-grid/data-grid-body-style.ts +12 -0
  155. package/src/data-grid/data-grid-body.ts +16 -29
  156. package/src/data-grid/data-grid-field.ts +7 -2
  157. package/src/data-grid/data-grid-footer.ts +4 -2
  158. package/src/data-grid/data-grid-header.ts +8 -6
  159. package/src/data-grid/data-grid.ts +23 -1
  160. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +4 -0
  161. package/src/data-grist.ts +88 -8
  162. package/src/data-list/data-list-field.ts +5 -5
  163. package/src/data-list/data-list-gutter.ts +3 -3
  164. package/src/data-list/data-list.ts +4 -4
  165. package/src/data-list/record-partial.ts +9 -10
  166. package/src/data-manipulator.ts +5 -5
  167. package/src/data-report/data-report-field.ts +2 -1
  168. package/src/data-report/data-report-header.ts +2 -2
  169. package/src/editors/ox-grist-editor-select.ts +41 -28
  170. package/src/editors/ox-input-tree.ts +8 -8
  171. package/src/filters/filter-input-barcode.ts +1 -0
  172. package/src/filters/filter-select.ts +41 -28
  173. package/src/filters/filter-styles.ts +46 -31
  174. package/src/filters/filters-form.ts +273 -119
  175. package/src/gutters/gutter-dirty.ts +2 -2
  176. package/src/index.ts +1 -0
  177. package/src/personalizer/index.ts +1 -0
  178. package/src/personalizer/ox-grist-filter-personalizer.ts +191 -0
  179. package/src/personalizer/ox-grist-personalizer.ts +192 -0
  180. package/src/record-view/record-creator.ts +2 -2
  181. package/src/renderers/ox-grist-renderer-select.ts +41 -6
  182. package/src/renderers/ox-grist-renderer-tree.ts +8 -8
  183. package/src/sorters/sorters-control.ts +3 -3
  184. package/src/types.ts +53 -2
  185. package/stories/{accumulator.stories.ts → accumulator-format.stories.ts} +33 -12
  186. package/stories/barcode-input-filter.stories.ts +31 -6
  187. package/stories/bounded-select-filters.stories.ts +339 -0
  188. package/stories/bounded-select-record.stories.ts +342 -0
  189. package/stories/click-event.stories.ts +269 -0
  190. package/stories/creatable-only-column.stories.ts +54 -28
  191. package/stories/default-filters.stories.ts +92 -24
  192. package/stories/dynamic-editable.stories.ts +52 -28
  193. package/stories/empty-sorters.stories.ts +51 -25
  194. package/stories/explicit-fetch.stories.ts +48 -24
  195. package/stories/fixed-column.stories.ts +62 -39
  196. package/stories/grid-setting.stories.ts +120 -63
  197. package/stories/grist-modes.stories.ts +74 -46
  198. package/stories/group-header.stories.ts +61 -39
  199. package/stories/textarea.stories.ts +49 -17
  200. package/stories/tree-column-with-checkbox.stories.ts +52 -28
  201. package/stories/tree-column.stories.ts +52 -28
  202. package/themes/dark-hc.css +151 -0
  203. package/themes/dark-mc.css +151 -0
  204. package/themes/dark.css +151 -0
  205. package/themes/grist-theme.css +103 -100
  206. package/themes/light-hc.css +151 -0
  207. package/themes/light-mc.css +151 -0
  208. package/themes/light.css +151 -0
  209. package/themes/md-typescale-styles.css +100 -0
  210. package/themes/spacing.css +43 -0
  211. package/themes/state-color.css +6 -0
  212. package/dist/stories/accumulator.stories.js.map +0 -1
  213. package/themes/app-theme.css +0 -145
  214. package/themes/form-theme.css +0 -75
  215. package/themes/oops-theme.css +0 -26
  216. package/themes/report-theme.css +0 -47
@@ -0,0 +1,288 @@
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';
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
+ theme: { control: 'select', options: ['light', 'dark'] }
227
+ }
228
+ };
229
+ const Template = ({ headerFilter, theme = 'light' }) => html ` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
230
+
231
+ <link href="/themes/light.css" rel="stylesheet" />
232
+ <link href="/themes/dark.css" rel="stylesheet" />
233
+ <link href="/themes/spacing.css" rel="stylesheet" />
234
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
235
+
236
+ <link
237
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
238
+ rel="stylesheet"
239
+ />
240
+ <link
241
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
242
+ rel="stylesheet"
243
+ />
244
+ <link
245
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
246
+ rel="stylesheet"
247
+ />
248
+
249
+ <style>
250
+ ${MDTypeScaleStyles.cssText}
251
+ </style>
252
+
253
+ <style>
254
+ ${CommonGristStyles.cssText}
255
+ ${CommonHeaderStyles.cssText}
256
+ </style>
257
+
258
+ <script>
259
+ document.body.classList.add('${theme}')
260
+ </script>
261
+
262
+ <style>
263
+ ox-grist {
264
+ height: 600px;
265
+ }
266
+
267
+ ox-filters-form {
268
+ flex: 1;
269
+ }
270
+ </style>
271
+
272
+ <ox-grist
273
+ .config=${buildConfig({ headerFilter })}
274
+ mode="GRID"
275
+ .fetchHandler=${fetchHandler}
276
+ @filters-change=${(e) => console.log('filters', e.target.filters)}
277
+ >
278
+ <div slot="headroom" class="header">
279
+ <div class="filters">
280
+ <ox-filters-form></ox-filters-form>
281
+ </div>
282
+ </div>
283
+ </ox-grist>`;
284
+ export const Regular = Template.bind({});
285
+ Regular.args = {
286
+ headerFilter: true
287
+ };
288
+ //# sourceMappingURL=bounded-select-filters.stories.js.map
@@ -0,0 +1 @@
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'\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 theme: { control: 'select', options: ['light', 'dark'] }\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 theme: 'light' | 'dark'\n}\n\nconst Template: Story<ArgTypes> = ({ headerFilter, theme = 'light' }: 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 <script>\n document.body.classList.add('${theme}')\n </script>\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"]}
@@ -0,0 +1,30 @@
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
+ theme: {
15
+ control: string;
16
+ options: string[];
17
+ };
18
+ };
19
+ };
20
+ export default _default;
21
+ interface Story<T> {
22
+ (args: T): TemplateResult;
23
+ args?: Partial<T>;
24
+ argTypes?: Record<string, unknown>;
25
+ }
26
+ interface ArgTypes {
27
+ headerFilter: boolean;
28
+ theme: 'light' | 'dark';
29
+ }
30
+ export declare const Regular: Story<ArgTypes>;
@@ -0,0 +1,291 @@
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';
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
+ theme: { control: 'select', options: ['light', 'dark'] }
230
+ }
231
+ };
232
+ const Template = ({ headerFilter, theme = 'light' }) => html ` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
233
+
234
+ <link href="/themes/light.css" rel="stylesheet" />
235
+ <link href="/themes/dark.css" rel="stylesheet" />
236
+ <link href="/themes/spacing.css" rel="stylesheet" />
237
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
238
+
239
+ <link
240
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined: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+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
245
+ rel="stylesheet"
246
+ />
247
+ <link
248
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
249
+ rel="stylesheet"
250
+ />
251
+
252
+ <style>
253
+ ${MDTypeScaleStyles.cssText}
254
+ </style>
255
+
256
+ <style>
257
+ ${CommonGristStyles.cssText}
258
+ ${CommonHeaderStyles.cssText}
259
+ </style>
260
+
261
+ <script>
262
+ document.body.classList.add('${theme}')
263
+ </script>
264
+
265
+ <style>
266
+ ox-grist {
267
+ height: 600px;
268
+ }
269
+
270
+ ox-filters-form {
271
+ flex: 1;
272
+ }
273
+ </style>
274
+
275
+ <ox-grist
276
+ .config=${buildConfig({ headerFilter })}
277
+ mode="GRID"
278
+ .fetchHandler=${fetchHandler}
279
+ @filters-change=${(e) => console.log('filters', e.target.filters)}
280
+ >
281
+ <div slot="headroom" class="header">
282
+ <div class="filters">
283
+ <ox-filters-form></ox-filters-form>
284
+ </div>
285
+ </div>
286
+ </ox-grist>`;
287
+ export const Regular = Template.bind({});
288
+ Regular.args = {
289
+ headerFilter: true
290
+ };
291
+ //# sourceMappingURL=bounded-select-record.stories.js.map