@operato/data-grist 8.0.0-beta.0 → 8.0.0-beta.2

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 (168) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/package.json +10 -10
  3. package/.storybook/main.js +0 -3
  4. package/.storybook/preview.js +0 -52
  5. package/.storybook/server.mjs +0 -8
  6. package/demo/data-grist-test.html +0 -468
  7. package/demo/favicon.ico +0 -0
  8. package/demo/index.html +0 -541
  9. package/demo/report-test.html +0 -249
  10. package/src/accumulator/accumulator.ts +0 -63
  11. package/src/configure/column-builder.ts +0 -114
  12. package/src/configure/config-builder.ts +0 -40
  13. package/src/configure/filters-option-builder.ts +0 -8
  14. package/src/configure/imex-option-builder.ts +0 -5
  15. package/src/configure/list-option-builder.ts +0 -9
  16. package/src/configure/rows-option-builder.ts +0 -38
  17. package/src/configure/tree-option-builder.ts +0 -22
  18. package/src/configure/zero-config.ts +0 -83
  19. package/src/const.ts +0 -1
  20. package/src/data-card/data-card-field.ts +0 -94
  21. package/src/data-card/data-card-gutter-menu.ts +0 -94
  22. package/src/data-card/data-card-gutter.ts +0 -103
  23. package/src/data-card/data-card.ts +0 -154
  24. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  25. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  26. package/src/data-card/record-card.ts +0 -298
  27. package/src/data-consumer.ts +0 -11
  28. package/src/data-grid/data-grid-accum-field.ts +0 -109
  29. package/src/data-grid/data-grid-body-style.ts +0 -85
  30. package/src/data-grid/data-grid-body.ts +0 -765
  31. package/src/data-grid/data-grid-field.ts +0 -227
  32. package/src/data-grid/data-grid-footer.ts +0 -119
  33. package/src/data-grid/data-grid-header.ts +0 -578
  34. package/src/data-grid/data-grid.ts +0 -293
  35. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  36. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  37. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  38. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  39. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  40. package/src/data-grist.ts +0 -1233
  41. package/src/data-list/data-list-field.ts +0 -82
  42. package/src/data-list/data-list-gutter.ts +0 -108
  43. package/src/data-list/data-list.ts +0 -145
  44. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  45. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  46. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  47. package/src/data-list/record-partial.ts +0 -264
  48. package/src/data-manipulator.ts +0 -426
  49. package/src/data-provider.ts +0 -271
  50. package/src/data-report/data-report-body-style.ts +0 -58
  51. package/src/data-report/data-report-body.ts +0 -189
  52. package/src/data-report/data-report-component.ts +0 -138
  53. package/src/data-report/data-report-field.ts +0 -83
  54. package/src/data-report/data-report-header.ts +0 -242
  55. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  56. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  57. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  58. package/src/data-report.ts +0 -424
  59. package/src/editors/index.ts +0 -4
  60. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  61. package/src/editors/ox-grist-editor-color.ts +0 -10
  62. package/src/editors/ox-grist-editor-date.ts +0 -10
  63. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  64. package/src/editors/ox-grist-editor-email.ts +0 -10
  65. package/src/editors/ox-grist-editor-file.ts +0 -28
  66. package/src/editors/ox-grist-editor-image.ts +0 -31
  67. package/src/editors/ox-grist-editor-month.ts +0 -10
  68. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  69. package/src/editors/ox-grist-editor-number.ts +0 -27
  70. package/src/editors/ox-grist-editor-password.ts +0 -10
  71. package/src/editors/ox-grist-editor-select.ts +0 -55
  72. package/src/editors/ox-grist-editor-tel.ts +0 -10
  73. package/src/editors/ox-grist-editor-text.ts +0 -14
  74. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  75. package/src/editors/ox-grist-editor-time.ts +0 -10
  76. package/src/editors/ox-grist-editor-tree.ts +0 -27
  77. package/src/editors/ox-grist-editor-varname.ts +0 -36
  78. package/src/editors/ox-grist-editor-week.ts +0 -10
  79. package/src/editors/ox-grist-editor.ts +0 -207
  80. package/src/editors/ox-input-tree.ts +0 -226
  81. package/src/editors/registry.ts +0 -82
  82. package/src/empty-note.ts +0 -46
  83. package/src/filters/filter-checkbox.ts +0 -49
  84. package/src/filters/filter-input-barcode.ts +0 -34
  85. package/src/filters/filter-input.ts +0 -30
  86. package/src/filters/filter-range-date.ts +0 -81
  87. package/src/filters/filter-range-number.ts +0 -64
  88. package/src/filters/filter-select-buttons.ts +0 -60
  89. package/src/filters/filter-select.ts +0 -68
  90. package/src/filters/filter-styles.ts +0 -119
  91. package/src/filters/filters-form.ts +0 -476
  92. package/src/filters/index.ts +0 -10
  93. package/src/filters/registry.ts +0 -56
  94. package/src/formatters/date-formatter.ts +0 -3
  95. package/src/formatters/index.ts +0 -1
  96. package/src/formatters/number-formatter.ts +0 -3
  97. package/src/formatters/registry.ts +0 -30
  98. package/src/formatters/text-formatter.ts +0 -3
  99. package/src/gutters/gutter-button.ts +0 -51
  100. package/src/gutters/gutter-dirty.ts +0 -96
  101. package/src/gutters/gutter-row-selector.ts +0 -89
  102. package/src/gutters/gutter-sequence.ts +0 -54
  103. package/src/gutters/index.ts +0 -1
  104. package/src/gutters/registry.ts +0 -32
  105. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  106. package/src/handlers/index.ts +0 -1
  107. package/src/handlers/move-down.ts +0 -44
  108. package/src/handlers/move-up.ts +0 -44
  109. package/src/handlers/record-copy.ts +0 -38
  110. package/src/handlers/record-delete.ts +0 -30
  111. package/src/handlers/record-view-handler.ts +0 -27
  112. package/src/handlers/registry.ts +0 -42
  113. package/src/handlers/select-row-toggle.ts +0 -30
  114. package/src/handlers/select-row.ts +0 -27
  115. package/src/index.ts +0 -17
  116. package/src/personalizer/index.ts +0 -1
  117. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  118. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  119. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  120. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  121. package/src/record-view/index.ts +0 -2
  122. package/src/record-view/ox-record-creator.ts +0 -289
  123. package/src/record-view/record-view-body.ts +0 -257
  124. package/src/record-view/record-view-handler.ts +0 -86
  125. package/src/record-view/record-view.ts +0 -122
  126. package/src/renderers/index.ts +0 -14
  127. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  128. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  129. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  130. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  131. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  132. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  133. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  134. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  135. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  136. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  137. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  138. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  139. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  140. package/src/renderers/ox-grist-renderer.ts +0 -35
  141. package/src/renderers/registry.ts +0 -111
  142. package/src/sorters/sorters-control.ts +0 -143
  143. package/src/types.ts +0 -813
  144. package/src/utils/index.ts +0 -2
  145. package/src/utils/list-param.ts +0 -72
  146. package/src/utils/supports-passive.ts +0 -13
  147. package/stories/accumulator-format.stories.ts +0 -276
  148. package/stories/barcode-input-filter.stories.ts +0 -216
  149. package/stories/bounded-select-filters.stories.ts +0 -333
  150. package/stories/bounded-select-record.stories.ts +0 -336
  151. package/stories/click-event-custom.stories.ts +0 -287
  152. package/stories/click-event.stories.ts +0 -283
  153. package/stories/creatable-only-column.stories.ts +0 -253
  154. package/stories/default-filters.stories.ts +0 -241
  155. package/stories/dynamic-editable.stories.ts +0 -313
  156. package/stories/empty-sorters.stories.ts +0 -180
  157. package/stories/explicit-fetch.stories.ts +0 -186
  158. package/stories/fixed-column.stories.ts +0 -416
  159. package/stories/grid-setting.stories.ts +0 -501
  160. package/stories/grist-modes.stories.ts +0 -451
  161. package/stories/group-header.stories.ts +0 -442
  162. package/stories/record-view.stories.ts +0 -143
  163. package/stories/textarea.stories.ts +0 -261
  164. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  165. package/stories/tree-column.stories.ts +0 -296
  166. package/tsconfig.json +0 -26
  167. package/web-dev-server.config.mjs +0 -27
  168. package/web-test-runner.config.mjs +0 -45
@@ -1,313 +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 { FetchHandler } from '../src/types.js'
11
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
12
-
13
- const fetchHandler: FetchHandler = async ({ sorters = [], filters, page, limit }) => {
14
- var total = 5
15
- var start = (page! - 1) * limit!
16
-
17
- await new Promise(resolve => setTimeout(resolve, 500))
18
-
19
- return {
20
- total,
21
- records: Array(limit! * page! > total ? total % limit! : limit)
22
- .fill('')
23
- .map((item, idx) => {
24
- return {
25
- id: String(idx),
26
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
27
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
28
- number: idx,
29
- float: 1.3,
30
- date: '2023-09-20',
31
- active: idx % 2 === 0,
32
- role: 'admin',
33
- routing: {
34
- id: '006dc64d-4fb9-4afc-a9ea-962bd1b9e110',
35
- name: '조림>세척'
36
- },
37
- updatedAt: Date.now()
38
- }
39
- })
40
- }
41
- }
42
-
43
- // 그리드 필드에 들어오는 값: string, number, date, checkbox(boolean), object, image(url)
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: 'gutter',
63
- gutterName: 'button',
64
- icon: 'add',
65
- title: 'add',
66
- handlers: {
67
- click: 'record-copy'
68
- }
69
- },
70
- {
71
- type: 'string',
72
- name: 'name',
73
- label: true,
74
- header: 'name',
75
- filter: {
76
- operator: 'eq',
77
- value: 'shnam'
78
- },
79
- record: {
80
- editable: true
81
- },
82
- sortable: true,
83
- width: 120
84
- },
85
- {
86
- type: 'string',
87
- name: 'description',
88
- header: 'description',
89
- filter: {
90
- operator: 'like',
91
- value: 'hahaha'
92
- },
93
- record: {
94
- align: 'left',
95
- editable: (value: any, column: any, record: any, rowIndex: any, field: any) => {
96
- return record?.name !== 'heartyoh-3'
97
- }
98
- },
99
- width: 200
100
- },
101
- {
102
- type: 'checkbox',
103
- name: 'chk',
104
- header: 'chk',
105
- record: {
106
- editable: (value: any, column: any, record: any, rowIndex: any, field: any) => {
107
- return record?.name !== 'heartyoh-3'
108
- }
109
- },
110
- width: 40
111
- },
112
- {
113
- type: 'number',
114
- name: 'number',
115
- header: 'number',
116
- record: {
117
- editable: true,
118
- handlers: {
119
- change: () => {
120
- console.log('dblclick333')
121
- }
122
- }
123
- },
124
- width: 80
125
- },
126
- {
127
- type: 'float',
128
- name: 'float',
129
- header: 'float',
130
- record: {
131
- editable: true
132
- },
133
- width: 80
134
- },
135
- {
136
- type: 'date',
137
- name: 'date',
138
- header: 'date',
139
- width: 120
140
- },
141
- {
142
- type: 'boolean',
143
- name: 'active',
144
- header: 'active',
145
- record: {
146
- editable: true
147
- },
148
- filter: {
149
- value: 'false'
150
- },
151
- sortable: true,
152
- width: 60
153
- },
154
- {
155
- type: 'select',
156
- name: 'role',
157
- label: true,
158
- header: 'role',
159
- record: {
160
- // options: ['', 'admin', 'worker', 'tester'],
161
- options: [
162
- { display: 'admin', value: 'admin' },
163
- { display: 'worker', value: 'worker' },
164
- { display: 'tester', value: 'tester' }
165
- ],
166
- editable: true
167
- },
168
- filter: {
169
- operator: 'in',
170
- value: ['worker']
171
- },
172
- sortable: true,
173
- width: 120
174
- },
175
- {
176
- type: 'object',
177
- name: 'routing',
178
- header: 'routing',
179
- record: { editable: true, options: { queryName: 'routings' }, mandatory: true },
180
- width: 180
181
- },
182
- {
183
- type: 'datetime',
184
- name: 'updatedAt',
185
- header: 'updated at',
186
- width: 180
187
- }
188
- ],
189
- rows: {
190
- selectable: {
191
- multiple: false
192
- },
193
- handlers: {
194
- click: 'select-row',
195
- dblclick: () => {
196
- console.log('dblclick333')
197
- }
198
- },
199
- appendable: false
200
- },
201
- sorters: [
202
- {
203
- name: 'name',
204
- desc: true
205
- }
206
- ],
207
- filters: {
208
- header: headerFilter
209
- },
210
- pagination: {
211
- pages: [30, 50, 100, 200]
212
- }
213
- }
214
- }
215
-
216
- export default {
217
- title: 'dynamic-editable for ox-grist',
218
- component: 'ox-grist',
219
- argTypes: {
220
- headerFilter: { control: 'boolean' }
221
- }
222
- }
223
-
224
- interface Story<T> {
225
- (args: T): TemplateResult
226
- args?: Partial<T>
227
- argTypes?: Record<string, unknown>
228
- }
229
-
230
- interface ArgTypes {
231
- headerFilter: boolean
232
- }
233
-
234
- const Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) =>
235
- html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
236
-
237
- <link href="/themes/light.css" rel="stylesheet" />
238
- <link href="/themes/dark.css" rel="stylesheet" />
239
- <link href="/themes/spacing.css" rel="stylesheet" />
240
- <link href="/themes/grist-theme.css" rel="stylesheet" />
241
-
242
- <link
243
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined: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+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
248
- rel="stylesheet"
249
- />
250
- <link
251
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
252
- rel="stylesheet"
253
- />
254
-
255
- <style>
256
- ${MDTypeScaleStyles.cssText}
257
- </style>
258
-
259
- <style>
260
- ${CommonGristStyles.cssText}
261
- ${CommonHeaderStyles.cssText}
262
- </style>
263
-
264
- <style>
265
- ox-grist {
266
- height: 600px;
267
- }
268
-
269
- ox-filters-form {
270
- flex: 1;
271
- }
272
- </style>
273
-
274
- <ox-grist
275
- .config=${buildConfig({ headerFilter })}
276
- mode="GRID"
277
- .fetchHandler=${fetchHandler}
278
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
279
- @field-change=${(e: any) => {
280
- const { name, number, chk } = e.detail.record
281
- console.log(name, number, chk)
282
- }}
283
- >
284
- <div slot="headroom" class="header">
285
- <div class="filters">
286
- <ox-filters-form></ox-filters-form>
287
-
288
- <div id="sorters">
289
- Sort
290
- <md-icon
291
- @click=${(e: Event) => {
292
- const target = e.currentTarget as HTMLElement
293
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
294
- right: 0,
295
- top: target.offsetTop + target.offsetHeight
296
- })
297
- }}
298
- >expand_more</md-icon
299
- >
300
- <ox-popup id="sorter-control">
301
- <ox-sorters-control> </ox-sorters-control>
302
- </ox-popup>
303
- </div>
304
-
305
- <ox-record-creator id="add" light-popup>
306
- <button><md-icon>add</md-icon></button>
307
- </ox-record-creator>
308
- </div>
309
- </div>
310
- </ox-grist>`
311
-
312
- export const Regular = Template.bind({})
313
- Regular.args = {}
@@ -1,180 +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 { FetchHandler } from '../src/types.js'
11
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
12
-
13
- const fetchHandler: FetchHandler = async ({ filters, page, limit }) => {
14
- var total = 120993
15
- var start = (page! - 1) * limit!
16
-
17
- await new Promise(resolve => setTimeout(resolve, 500))
18
-
19
- return {
20
- total,
21
- records: Array(limit! * page! > total ? total % limit! : limit)
22
- .fill('')
23
- .map((item, idx) => {
24
- return {
25
- id: String(idx),
26
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
27
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
28
- createdAt: Date.now(),
29
- updatedAt: Date.now()
30
- }
31
- })
32
- }
33
- }
34
-
35
- const config = {
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
- filter: {
67
- operator: 'like',
68
- value: 'hahaha'
69
- },
70
- record: {
71
- align: 'left'
72
- },
73
- width: 200
74
- },
75
- {
76
- type: 'datetime',
77
- name: 'updatedAt',
78
- header: 'updated at',
79
- width: 180
80
- },
81
- {
82
- type: 'datetime',
83
- name: 'createdAt',
84
- header: 'created at',
85
- width: 180
86
- }
87
- ],
88
- pagination: {
89
- pages: [30, 50, 100, 200]
90
- }
91
- }
92
-
93
- export default {
94
- title: 'empty sorters for ox-grist',
95
- component: 'ox-grist',
96
- argTypes: {
97
- theme: { control: 'select', options: ['light', 'dark'] }
98
- }
99
- }
100
-
101
- interface Story<T> {
102
- (args: T): TemplateResult
103
- args?: Partial<T>
104
- argTypes?: Record<string, unknown>
105
- }
106
-
107
- interface ArgTypes {}
108
-
109
- const Template: Story<ArgTypes> = ({}: ArgTypes) =>
110
- html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
111
-
112
- <link href="/themes/light.css" rel="stylesheet" />
113
- <link href="/themes/dark.css" rel="stylesheet" />
114
- <link href="/themes/spacing.css" rel="stylesheet" />
115
- <link href="/themes/grist-theme.css" rel="stylesheet" />
116
-
117
- <link
118
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
119
- rel="stylesheet"
120
- />
121
- <link
122
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
123
- rel="stylesheet"
124
- />
125
- <link
126
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
127
- rel="stylesheet"
128
- />
129
-
130
- <style>
131
- ${MDTypeScaleStyles.cssText}
132
- </style>
133
-
134
- <style>
135
- ${CommonGristStyles.cssText}
136
- ${CommonHeaderStyles.cssText}
137
- </style>
138
-
139
- <style>
140
- ox-grist {
141
- height: 600px;
142
- }
143
-
144
- ox-filters-form {
145
- flex: 1;
146
- }
147
- </style>
148
-
149
- <ox-grist
150
- .config=${config}
151
- mode="GRID"
152
- .fetchHandler=${fetchHandler}
153
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
154
- >
155
- <div slot="headroom" class="header">
156
- <div class="filters">
157
- <ox-filters-form></ox-filters-form>
158
-
159
- <div id="sorters">
160
- Sort
161
- <md-icon
162
- @click=${(e: Event) => {
163
- const target = e.currentTarget as HTMLElement
164
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
165
- right: 0,
166
- top: target.offsetTop + target.offsetHeight
167
- })
168
- }}
169
- >expand_more</md-icon
170
- >
171
- <ox-popup id="sorter-control">
172
- <ox-sorters-control> </ox-sorters-control>
173
- </ox-popup>
174
- </div>
175
- </div>
176
- </div>
177
- </ox-grist>`
178
-
179
- export const Regular = Template.bind({})
180
- Regular.args = {}
@@ -1,186 +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 { FetchHandler } from '../src/types.js'
11
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
12
-
13
- const fetchHandler: FetchHandler = async ({ page, limit }) => {
14
- var total = 120993
15
- var start = (page! - 1) * limit!
16
-
17
- await new Promise(resolve => setTimeout(resolve, 500))
18
-
19
- return {
20
- total,
21
- records: Array(limit! * page! > total ? total % limit! : limit)
22
- .fill('')
23
- .map((item, idx) => {
24
- return {
25
- id: String(idx),
26
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
27
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
28
- createdAt: Date.now(),
29
- updatedAt: Date.now()
30
- }
31
- })
32
- }
33
- }
34
-
35
- const config = {
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: 'search',
56
- sortable: true,
57
- width: 120
58
- },
59
- {
60
- type: 'string',
61
- name: 'description',
62
- header: 'description',
63
- filter: 'search',
64
- record: {
65
- align: 'left'
66
- },
67
- width: 200
68
- },
69
- {
70
- type: 'datetime',
71
- name: 'updatedAt',
72
- header: 'updated at',
73
- width: 180
74
- },
75
- {
76
- type: 'datetime',
77
- name: 'createdAt',
78
- header: 'created at',
79
- width: 180
80
- }
81
- ],
82
- rows: {},
83
- sorters: [
84
- {
85
- name: 'name',
86
- desc: true
87
- }
88
- ],
89
- pagination: {
90
- pages: [30, 50, 100, 200]
91
- }
92
- }
93
-
94
- export default {
95
- title: 'explicit-fetch attribute for ox-grist',
96
- component: 'ox-grist',
97
- argTypes: {
98
- explicitFetch: { control: 'boolean' }
99
- }
100
- }
101
-
102
- interface Story<T> {
103
- (args: T): TemplateResult
104
- args?: Partial<T>
105
- argTypes?: Record<string, unknown>
106
- }
107
-
108
- interface ArgTypes {
109
- explicitFetch: boolean
110
- }
111
-
112
- const Template: Story<ArgTypes> = ({ explicitFetch = false }: ArgTypes) =>
113
- html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
114
-
115
- <link href="/themes/light.css" rel="stylesheet" />
116
- <link href="/themes/dark.css" rel="stylesheet" />
117
- <link href="/themes/spacing.css" rel="stylesheet" />
118
- <link href="/themes/grist-theme.css" rel="stylesheet" />
119
-
120
- <link
121
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
122
- rel="stylesheet"
123
- />
124
- <link
125
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
126
- rel="stylesheet"
127
- />
128
- <link
129
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
130
- rel="stylesheet"
131
- />
132
-
133
- <style>
134
- ${MDTypeScaleStyles.cssText}
135
- </style>
136
-
137
- <style>
138
- ${CommonGristStyles.cssText}
139
- ${CommonHeaderStyles.cssText}
140
- </style>
141
-
142
- <style>
143
- ox-grist {
144
- height: 600px;
145
- }
146
-
147
- ox-filters-form {
148
- flex: 1;
149
- }
150
- </style>
151
-
152
- <ox-grist
153
- .config=${config}
154
- mode="GRID"
155
- ?explicit-fetch=${explicitFetch}
156
- .fetchHandler=${fetchHandler}
157
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
158
- >
159
- <div slot="headroom" class="header">
160
- <div class="filters">
161
- <ox-filters-form></ox-filters-form>
162
-
163
- <div id="sorters">
164
- Sort
165
- <md-icon
166
- @click=${(e: Event) => {
167
- const target = e.currentTarget as HTMLElement
168
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
169
- right: 0,
170
- top: target.offsetTop + target.offsetHeight
171
- })
172
- }}
173
- >expand_more</md-icon
174
- >
175
- <ox-popup id="sorter-control">
176
- <ox-sorters-control> </ox-sorters-control>
177
- </ox-popup>
178
- </div>
179
- </div>
180
- </div>
181
- </ox-grist>`
182
-
183
- export const Regular = Template.bind({})
184
- Regular.args = {
185
- explicitFetch: true
186
- }