@operato/data-grist 2.0.0-alpha.9 → 2.0.0-alpha.92

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 (274) hide show
  1. package/CHANGELOG.md +358 -0
  2. package/demo/data-grist-test.html +25 -14
  3. package/demo/index.html +25 -14
  4. package/demo/report-test.html +13 -2
  5. package/dist/src/configure/rows-option-builder.js +2 -1
  6. package/dist/src/configure/rows-option-builder.js.map +1 -1
  7. package/dist/src/configure/zero-config.js +1 -0
  8. package/dist/src/configure/zero-config.js.map +1 -1
  9. package/dist/src/data-card/data-card-gutter-menu.d.ts +1 -1
  10. package/dist/src/data-card/data-card-gutter-menu.js +5 -5
  11. package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
  12. package/dist/src/data-card/data-card.d.ts +2 -2
  13. package/dist/src/data-card/data-card.js +3 -3
  14. package/dist/src/data-card/data-card.js.map +1 -1
  15. package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
  16. package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
  17. package/dist/src/data-card/record-card.d.ts +2 -2
  18. package/dist/src/data-card/record-card.js +26 -26
  19. package/dist/src/data-card/record-card.js.map +1 -1
  20. package/dist/src/data-grid/data-grid-accum-field.js +8 -3
  21. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  22. package/dist/src/data-grid/data-grid-body.d.ts +3 -3
  23. package/dist/src/data-grid/data-grid-body.js +9 -4
  24. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  25. package/dist/src/data-grid/data-grid-field.d.ts +1 -1
  26. package/dist/src/data-grid/data-grid-field.js +2 -2
  27. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  28. package/dist/src/data-grid/data-grid-footer.d.ts +2 -2
  29. package/dist/src/data-grid/data-grid-footer.js +17 -9
  30. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  31. package/dist/src/data-grid/data-grid-header.d.ts +1 -1
  32. package/dist/src/data-grid/data-grid-header.js +38 -35
  33. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  34. package/dist/src/data-grid/data-grid.d.ts +1 -1
  35. package/dist/src/data-grid/data-grid.js +12 -2
  36. package/dist/src/data-grid/data-grid.js.map +1 -1
  37. package/dist/src/data-grist.d.ts +226 -4
  38. package/dist/src/data-grist.js +218 -25
  39. package/dist/src/data-grist.js.map +1 -1
  40. package/dist/src/data-list/data-list-gutter.js +12 -0
  41. package/dist/src/data-list/data-list-gutter.js.map +1 -1
  42. package/dist/src/data-list/data-list.d.ts +2 -2
  43. package/dist/src/data-list/data-list.js +3 -3
  44. package/dist/src/data-list/data-list.js.map +1 -1
  45. package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
  46. package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
  47. package/dist/src/data-list/record-partial.d.ts +2 -2
  48. package/dist/src/data-list/record-partial.js +20 -18
  49. package/dist/src/data-list/record-partial.js.map +1 -1
  50. package/dist/src/data-manipulator.d.ts +6 -6
  51. package/dist/src/data-manipulator.js +44 -29
  52. package/dist/src/data-manipulator.js.map +1 -1
  53. package/dist/src/data-report/data-report-body.d.ts +1 -1
  54. package/dist/src/data-report/data-report-component.d.ts +1 -1
  55. package/dist/src/data-report.d.ts +1 -1
  56. package/dist/src/editors/ox-grist-editor-checkbox.d.ts +3 -2
  57. package/dist/src/editors/ox-grist-editor-checkbox.js +9 -2
  58. package/dist/src/editors/ox-grist-editor-checkbox.js.map +1 -1
  59. package/dist/src/editors/ox-grist-editor-color.d.ts +1 -1
  60. package/dist/src/editors/ox-grist-editor-date.d.ts +1 -1
  61. package/dist/src/editors/ox-grist-editor-datetime.d.ts +2 -2
  62. package/dist/src/editors/ox-grist-editor-datetime.js +1 -2
  63. package/dist/src/editors/ox-grist-editor-datetime.js.map +1 -1
  64. package/dist/src/editors/ox-grist-editor-email.d.ts +1 -1
  65. package/dist/src/editors/ox-grist-editor-file.d.ts +3 -2
  66. package/dist/src/editors/ox-grist-editor-file.js +8 -2
  67. package/dist/src/editors/ox-grist-editor-file.js.map +1 -1
  68. package/dist/src/editors/ox-grist-editor-image.d.ts +2 -2
  69. package/dist/src/editors/ox-grist-editor-image.js +8 -8
  70. package/dist/src/editors/ox-grist-editor-image.js.map +1 -1
  71. package/dist/src/editors/ox-grist-editor-month.d.ts +1 -1
  72. package/dist/src/editors/ox-grist-editor-multiple-select.d.ts +1 -1
  73. package/dist/src/editors/ox-grist-editor-number.d.ts +3 -2
  74. package/dist/src/editors/ox-grist-editor-number.js +10 -9
  75. package/dist/src/editors/ox-grist-editor-number.js.map +1 -1
  76. package/dist/src/editors/ox-grist-editor-password.d.ts +1 -1
  77. package/dist/src/editors/ox-grist-editor-select.d.ts +1 -1
  78. package/dist/src/editors/ox-grist-editor-tel.d.ts +1 -1
  79. package/dist/src/editors/ox-grist-editor-text.d.ts +2 -1
  80. package/dist/src/editors/ox-grist-editor-text.js +3 -0
  81. package/dist/src/editors/ox-grist-editor-text.js.map +1 -1
  82. package/dist/src/editors/ox-grist-editor-textarea.d.ts +2 -1
  83. package/dist/src/editors/ox-grist-editor-textarea.js +3 -0
  84. package/dist/src/editors/ox-grist-editor-textarea.js.map +1 -1
  85. package/dist/src/editors/ox-grist-editor-time.d.ts +1 -1
  86. package/dist/src/editors/ox-grist-editor-tree.d.ts +1 -1
  87. package/dist/src/editors/ox-grist-editor-week.d.ts +1 -1
  88. package/dist/src/editors/ox-grist-editor.d.ts +4 -4
  89. package/dist/src/editors/ox-grist-editor.js +14 -12
  90. package/dist/src/editors/ox-grist-editor.js.map +1 -1
  91. package/dist/src/editors/ox-input-tree.d.ts +1 -1
  92. package/dist/src/empty-note.d.ts +2 -2
  93. package/dist/src/empty-note.js +3 -3
  94. package/dist/src/empty-note.js.map +1 -1
  95. package/dist/src/filters/filter-checkbox.js +12 -5
  96. package/dist/src/filters/filter-checkbox.js.map +1 -1
  97. package/dist/src/filters/filter-range-date.js +12 -1
  98. package/dist/src/filters/filter-range-date.js.map +1 -1
  99. package/dist/src/filters/filter-styles.js +47 -28
  100. package/dist/src/filters/filter-styles.js.map +1 -1
  101. package/dist/src/filters/filters-form.d.ts +1 -0
  102. package/dist/src/filters/filters-form.js +71 -50
  103. package/dist/src/filters/filters-form.js.map +1 -1
  104. package/dist/src/gutters/gutter-button.d.ts +1 -1
  105. package/dist/src/gutters/gutter-button.js +3 -3
  106. package/dist/src/gutters/gutter-button.js.map +1 -1
  107. package/dist/src/gutters/gutter-dirty.d.ts +1 -1
  108. package/dist/src/gutters/gutter-dirty.js +5 -5
  109. package/dist/src/gutters/gutter-dirty.js.map +1 -1
  110. package/dist/src/handlers/contextmenu-tree-mutation.js +5 -23
  111. package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
  112. package/dist/src/index.d.ts +0 -1
  113. package/dist/src/index.js +0 -1
  114. package/dist/src/index.js.map +1 -1
  115. package/dist/src/record-view/record-creator.d.ts +2 -2
  116. package/dist/src/record-view/record-creator.js +1 -1
  117. package/dist/src/record-view/record-creator.js.map +1 -1
  118. package/dist/src/record-view/record-view-body.d.ts +3 -3
  119. package/dist/src/record-view/record-view-body.js +4 -4
  120. package/dist/src/record-view/record-view-body.js.map +1 -1
  121. package/dist/src/record-view/record-view.d.ts +2 -2
  122. package/dist/src/record-view/record-view.js +5 -5
  123. package/dist/src/record-view/record-view.js.map +1 -1
  124. package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
  125. package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -1
  126. package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
  127. package/dist/src/sorters/sorters-control.js +3 -3
  128. package/dist/src/sorters/sorters-control.js.map +1 -1
  129. package/dist/src/types.d.ts +1 -8
  130. package/dist/src/types.js.map +1 -1
  131. package/dist/stories/accumulator.stories.d.ts +1 -1
  132. package/dist/stories/accumulator.stories.js +55 -127
  133. package/dist/stories/accumulator.stories.js.map +1 -1
  134. package/dist/stories/barcode-input-filter.stories.d.ts +1 -1
  135. package/dist/stories/barcode-input-filter.stories.js +41 -79
  136. package/dist/stories/barcode-input-filter.stories.js.map +1 -1
  137. package/dist/stories/default-filters.stories.d.ts +1 -1
  138. package/dist/stories/default-filters.stories.js +41 -79
  139. package/dist/stories/default-filters.stories.js.map +1 -1
  140. package/dist/stories/dynamic-editable.stories.d.ts +1 -1
  141. package/dist/stories/dynamic-editable.stories.js +61 -86
  142. package/dist/stories/dynamic-editable.stories.js.map +1 -1
  143. package/dist/stories/empty-sorters.stories.d.ts +1 -1
  144. package/dist/stories/empty-sorters.stories.js +41 -78
  145. package/dist/stories/empty-sorters.stories.js.map +1 -1
  146. package/dist/stories/explicit-fetch.stories.d.ts +1 -1
  147. package/dist/stories/explicit-fetch.stories.js +42 -79
  148. package/dist/stories/explicit-fetch.stories.js.map +1 -1
  149. package/dist/stories/fixed-column.stories.d.ts +1 -1
  150. package/dist/stories/fixed-column.stories.js +45 -127
  151. package/dist/stories/fixed-column.stories.js.map +1 -1
  152. package/dist/stories/grid-setting.stories.d.ts +36 -0
  153. package/dist/stories/grid-setting.stories.js +403 -0
  154. package/dist/stories/grid-setting.stories.js.map +1 -0
  155. package/dist/stories/grist-modes.stories.d.ts +1 -1
  156. package/dist/stories/grist-modes.stories.js +74 -140
  157. package/dist/stories/grist-modes.stories.js.map +1 -1
  158. package/dist/stories/group-header.stories.d.ts +1 -1
  159. package/dist/stories/group-header.stories.js +45 -127
  160. package/dist/stories/group-header.stories.js.map +1 -1
  161. package/dist/stories/textarea.stories.d.ts +1 -1
  162. package/dist/stories/textarea.stories.js +39 -121
  163. package/dist/stories/textarea.stories.js.map +1 -1
  164. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  165. package/dist/stories/tree-column-with-checkbox.stories.js +49 -136
  166. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  167. package/dist/stories/tree-column.stories.d.ts +1 -1
  168. package/dist/stories/tree-column.stories.js +49 -136
  169. package/dist/stories/tree-column.stories.js.map +1 -1
  170. package/dist/tsconfig.tsbuildinfo +1 -1
  171. package/docs/default-value/default-value.md +1 -1
  172. package/docs/default-value/value-generator/date-generator.md +2 -2
  173. package/docs/default-value/value-generator/month-date-generator.md +2 -2
  174. package/docs/default-value/value-generator/week-date-generator.md +2 -2
  175. package/docs/default-value/value-generator/year-date-generator.md +2 -2
  176. package/package.json +21 -20
  177. package/src/configure/rows-option-builder.ts +11 -1
  178. package/src/configure/zero-config.ts +1 -0
  179. package/src/data-card/data-card-gutter-menu.ts +5 -5
  180. package/src/data-card/data-card.ts +3 -3
  181. package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
  182. package/src/data-card/record-card.ts +30 -32
  183. package/src/data-grid/data-grid-accum-field.ts +8 -3
  184. package/src/data-grid/data-grid-body.ts +10 -5
  185. package/src/data-grid/data-grid-field.ts +1 -1
  186. package/src/data-grid/data-grid-footer.ts +18 -11
  187. package/src/data-grid/data-grid-header.ts +68 -65
  188. package/src/data-grid/data-grid.ts +14 -4
  189. package/src/data-grist.ts +275 -27
  190. package/src/data-list/data-list-gutter.ts +12 -0
  191. package/src/data-list/data-list.ts +3 -3
  192. package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
  193. package/src/data-list/record-partial.ts +22 -22
  194. package/src/data-manipulator.ts +52 -31
  195. package/src/editors/ox-grist-editor-checkbox.ts +12 -2
  196. package/src/editors/ox-grist-editor-datetime.ts +1 -2
  197. package/src/editors/ox-grist-editor-file.ts +12 -2
  198. package/src/editors/ox-grist-editor-image.ts +10 -7
  199. package/src/editors/ox-grist-editor-number.ts +11 -9
  200. package/src/editors/ox-grist-editor-text.ts +4 -0
  201. package/src/editors/ox-grist-editor-textarea.ts +4 -0
  202. package/src/editors/ox-grist-editor.ts +14 -10
  203. package/src/empty-note.ts +3 -3
  204. package/src/filters/filter-checkbox.ts +15 -5
  205. package/src/filters/filter-range-date.ts +16 -1
  206. package/src/filters/filter-styles.ts +47 -28
  207. package/src/filters/filters-form.ts +76 -50
  208. package/src/gutters/gutter-button.ts +3 -3
  209. package/src/gutters/gutter-dirty.ts +5 -5
  210. package/src/handlers/contextmenu-tree-mutation.ts +5 -23
  211. package/src/index.ts +0 -1
  212. package/src/record-view/record-creator.ts +1 -1
  213. package/src/record-view/record-view-body.ts +4 -4
  214. package/src/record-view/record-view.ts +5 -5
  215. package/src/sorters/sorters-control.ts +3 -3
  216. package/src/types.ts +1 -9
  217. package/stories/accumulator.stories.ts +54 -129
  218. package/stories/barcode-input-filter.stories.ts +53 -89
  219. package/stories/default-filters.stories.ts +53 -89
  220. package/stories/dynamic-editable.stories.ts +68 -92
  221. package/stories/empty-sorters.stories.ts +53 -89
  222. package/stories/explicit-fetch.stories.ts +54 -90
  223. package/stories/fixed-column.stories.ts +57 -137
  224. package/stories/grid-setting.stories.ts +441 -0
  225. package/stories/grist-modes.stories.ts +86 -155
  226. package/stories/group-header.stories.ts +57 -137
  227. package/stories/textarea.stories.ts +42 -127
  228. package/stories/tree-column-with-checkbox.stories.ts +53 -138
  229. package/stories/tree-column.stories.ts +53 -138
  230. package/themes/grist-theme.css +1 -1
  231. package/dist/src/value-generator/date-generator.d.ts +0 -6
  232. package/dist/src/value-generator/date-generator.js +0 -30
  233. package/dist/src/value-generator/date-generator.js.map +0 -1
  234. package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
  235. package/dist/src/value-generator/hour-time-generator.js +0 -29
  236. package/dist/src/value-generator/hour-time-generator.js.map +0 -1
  237. package/dist/src/value-generator/index.d.ts +0 -1
  238. package/dist/src/value-generator/index.js +0 -2
  239. package/dist/src/value-generator/index.js.map +0 -1
  240. package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
  241. package/dist/src/value-generator/minute-time-generator.js +0 -29
  242. package/dist/src/value-generator/minute-time-generator.js.map +0 -1
  243. package/dist/src/value-generator/month-date-generator.d.ts +0 -7
  244. package/dist/src/value-generator/month-date-generator.js +0 -31
  245. package/dist/src/value-generator/month-date-generator.js.map +0 -1
  246. package/dist/src/value-generator/now-generator.d.ts +0 -4
  247. package/dist/src/value-generator/now-generator.js +0 -8
  248. package/dist/src/value-generator/now-generator.js.map +0 -1
  249. package/dist/src/value-generator/registry.d.ts +0 -11
  250. package/dist/src/value-generator/registry.js +0 -50
  251. package/dist/src/value-generator/registry.js.map +0 -1
  252. package/dist/src/value-generator/time-generator.d.ts +0 -6
  253. package/dist/src/value-generator/time-generator.js +0 -28
  254. package/dist/src/value-generator/time-generator.js.map +0 -1
  255. package/dist/src/value-generator/today-generator.d.ts +0 -4
  256. package/dist/src/value-generator/today-generator.js +0 -8
  257. package/dist/src/value-generator/today-generator.js.map +0 -1
  258. package/dist/src/value-generator/week-date-generator.d.ts +0 -7
  259. package/dist/src/value-generator/week-date-generator.js +0 -29
  260. package/dist/src/value-generator/week-date-generator.js.map +0 -1
  261. package/dist/src/value-generator/year-date-generator.d.ts +0 -7
  262. package/dist/src/value-generator/year-date-generator.js +0 -29
  263. package/dist/src/value-generator/year-date-generator.js.map +0 -1
  264. package/src/value-generator/date-generator.ts +0 -35
  265. package/src/value-generator/hour-time-generator.ts +0 -43
  266. package/src/value-generator/index.ts +0 -1
  267. package/src/value-generator/minute-time-generator.ts +0 -43
  268. package/src/value-generator/month-date-generator.ts +0 -38
  269. package/src/value-generator/now-generator.ts +0 -10
  270. package/src/value-generator/registry.ts +0 -58
  271. package/src/value-generator/time-generator.ts +0 -33
  272. package/src/value-generator/today-generator.ts +0 -10
  273. package/src/value-generator/week-date-generator.ts +0 -40
  274. package/src/value-generator/year-date-generator.ts +0 -36
@@ -0,0 +1,441 @@
1
+ import '../src/index.js'
2
+ import '../src/filters/filters-form.js'
3
+ import '../src/sorters/sorters-control.js'
4
+ import '../src/record-view/record-creator.js'
5
+ import '@operato/popup/ox-popup-list.js'
6
+ import '@material/web/icon/icon.js'
7
+
8
+ import { html, TemplateResult } from 'lit'
9
+
10
+ import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
11
+
12
+ import {
13
+ ColumnConfig,
14
+ FetchHandler,
15
+ GristClassifier,
16
+ GristEventHandlerSet,
17
+ GristRecord,
18
+ ValidationCallback
19
+ } from '../src/types.js'
20
+ import { DataGrist } from '../src/index.js'
21
+
22
+ const fetchHandler: FetchHandler = async ({ page, limit }) => {
23
+ var total = 120993
24
+ var start = (page! - 1) * limit!
25
+
26
+ await new Promise(resolve => setTimeout(resolve, 500))
27
+
28
+ return {
29
+ total,
30
+ records: Array(limit! * page! > total ? total % limit! : limit)
31
+ .fill('')
32
+ .map((item, idx) => {
33
+ return {
34
+ id: String(idx),
35
+ name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
36
+ description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
37
+ email: idx % 2 ? `shnam-${start + idx + 1}@gmail.com` : `heartyoh-${start + idx + 1}@gmail.com`,
38
+ active: Math.round(Math.random() * 2) % 2 ? true : false,
39
+ barcode: idx % 2 ? `1234567890${start + idx + 1}` : `0987654321${start + idx + 1}`,
40
+ company:
41
+ idx % 2
42
+ ? {
43
+ id: '2',
44
+ name: 'HatioLAB',
45
+ description: `경기도 성남시-${start + idx + 1}`
46
+ }
47
+ : {
48
+ id: '3',
49
+ name: 'HatioSEA',
50
+ description: `말레이시아 세티아알람-${start + idx + 1}`
51
+ },
52
+ thumbnail:
53
+ idx % 4 === 0
54
+ ? '' /* no source */
55
+ : idx % 4 === 1
56
+ ? `http://www.hatiolab.com/assets/img/operato-biz3.png`
57
+ : idx % 4 === 2
58
+ ? `http://www.hatiolab.com/assets/img/thingsboard-30.png`
59
+ : `http://www.hatiolab.com/wrong-url.png` /* wrong source */,
60
+ role: ['admin', 'worker', 'tester'][idx % 3],
61
+ color: idx % 2 ? `#87f018` : `#180f87`,
62
+ rate: Math.round(Math.random() * 100),
63
+ dynamicType: ['text', 'email', 'checkbox', 'color', 'progress', 'barcode'][idx % 5],
64
+ dynamicValue: ['abcdefghijkl', 'heartyoh@hatiolab.com', 'true', 'orange', '50', '1234567890'][idx % 5],
65
+ homepage:
66
+ idx % 2 ? `http://hatiolab.com/${start + idx + 1}` : `http://deadpool.hatiolab.com/${start + idx + 1}`,
67
+ json5: {
68
+ abc: 'abc',
69
+ value: 123
70
+ },
71
+ createdAt: Date.now(),
72
+ updatedAt: Date.now()
73
+ }
74
+ })
75
+ }
76
+ }
77
+
78
+ const config = {
79
+ list: {
80
+ thumbnail: 'thumbnail',
81
+ fields: ['name', 'description'],
82
+ details: ['role', 'email']
83
+ },
84
+ columns: [
85
+ {
86
+ type: 'gutter',
87
+ gutterName: 'dirty'
88
+ },
89
+ {
90
+ type: 'gutter',
91
+ gutterName: 'sequence'
92
+ },
93
+ {
94
+ type: 'gutter',
95
+ gutterName: 'row-selector',
96
+ multiple: true
97
+ },
98
+ {
99
+ type: 'gutter',
100
+ gutterName: 'button',
101
+ icon: 'edit',
102
+ title: 'edit',
103
+ handlers: {
104
+ click: function () {
105
+ console.log('clicked')
106
+ }
107
+ }
108
+ },
109
+ {
110
+ type: 'gutter',
111
+ gutterName: 'button',
112
+ icon: 'add',
113
+ title: 'add',
114
+ handlers: {
115
+ click: 'record-copy'
116
+ }
117
+ },
118
+ {
119
+ type: 'gutter',
120
+ gutterName: 'button',
121
+ icon: 'arrow_downward',
122
+ title: 'download',
123
+ handlers: {
124
+ click: 'move-down'
125
+ }
126
+ },
127
+ {
128
+ type: 'string',
129
+ name: 'id',
130
+ hidden: true
131
+ },
132
+ {
133
+ type: 'link',
134
+ name: 'name',
135
+ label: true,
136
+ fixed: true,
137
+ header: 'name',
138
+ record: {
139
+ editable: true,
140
+ options: {
141
+ // href: 'http://hatiolab.com',
142
+ href: function (column: ColumnConfig, record: GristRecord, rowIndex: number) {
143
+ return record['homepage']
144
+ },
145
+ target: '_blank'
146
+ }
147
+ },
148
+ filter: 'search',
149
+ sortable: true,
150
+ width: 120
151
+ },
152
+ {
153
+ type: 'string',
154
+ name: 'description',
155
+ header: 'description',
156
+ filter: 'search',
157
+ record: {
158
+ editable: true,
159
+ align: 'left'
160
+ },
161
+ width: 200,
162
+ handlers: {
163
+ click: (columns, data, column, record, rowIndex, target) => {
164
+ alert(`${column!.name} ${record![column!.name]}, row : ${rowIndex}`)
165
+ }
166
+ } as GristEventHandlerSet
167
+ },
168
+ {
169
+ type: 'email',
170
+ name: 'email',
171
+ label: true,
172
+ header: 'email',
173
+ record: {
174
+ editable: true
175
+ },
176
+ filter: 'search',
177
+ sortable: true,
178
+ width: 130,
179
+ validation: function (after, before, record, column) {
180
+ if (after.indexOf('@') == -1) {
181
+ document.dispatchEvent(
182
+ new CustomEvent('notify', {
183
+ detail: {
184
+ type: 'error',
185
+ message: `invalid value - ${after}`
186
+ }
187
+ })
188
+ )
189
+ return false
190
+ }
191
+ return true
192
+ } as ValidationCallback
193
+ },
194
+ {
195
+ type: 'boolean',
196
+ name: 'active',
197
+ header: 'active',
198
+ record: {
199
+ editable: true
200
+ },
201
+ filter: true,
202
+ handlers: {
203
+ dblclick: () => {
204
+ const grist = document.querySelector('ox-grist') as any
205
+ console.log(grist!.dirtyRecords)
206
+ }
207
+ },
208
+ sortable: true,
209
+ width: 60
210
+ },
211
+ {
212
+ type: 'select',
213
+ name: 'role',
214
+ label: true,
215
+ header: 'role',
216
+ record: {
217
+ options: ['', 'admin', 'worker', 'tester'],
218
+ editable: true
219
+ },
220
+ filter: true,
221
+ sortable: true,
222
+ width: 120
223
+ },
224
+ {
225
+ type: 'color',
226
+ name: 'color',
227
+ header: 'color',
228
+ record: {
229
+ editable: true
230
+ },
231
+ sortable: true,
232
+ width: 50
233
+ },
234
+ {
235
+ type: 'float',
236
+ name: 'rate',
237
+ header: 'rate',
238
+ record: {
239
+ align: 'right',
240
+ editable: true,
241
+ defaultValue: 10000.1
242
+ },
243
+ filter: {
244
+ operator: 'between',
245
+ value: [1, 100]
246
+ },
247
+ sortable: true,
248
+ width: 50
249
+ },
250
+ {
251
+ type: 'json5',
252
+ name: 'json5',
253
+ header: 'JSON5',
254
+ width: 200
255
+ },
256
+ {
257
+ type: 'image',
258
+ name: 'thumbnail',
259
+ header: 'thumbnail',
260
+ record: {
261
+ editable: true
262
+ },
263
+ width: 120
264
+ },
265
+ {
266
+ type: 'datetime',
267
+ name: 'updatedAt',
268
+ header: 'updated at',
269
+ record: {
270
+ editable: true,
271
+ defaultValue: {
272
+ name: 'now'
273
+ }
274
+ },
275
+ filter: {
276
+ operator: 'between',
277
+ type: 'datetime',
278
+ value: [
279
+ {
280
+ name: 'today',
281
+ params: {
282
+ type: 'datetime'
283
+ }
284
+ },
285
+ {
286
+ name: 'now',
287
+ params: {
288
+ type: 'datetime',
289
+ relativeDays: 1
290
+ }
291
+ }
292
+ ]
293
+ },
294
+ sortable: true,
295
+ width: 180
296
+ },
297
+ {
298
+ type: 'datetime',
299
+ name: 'createdAt',
300
+ header: 'created at',
301
+ record: {
302
+ editable: false
303
+ },
304
+ sortable: true,
305
+ width: 180
306
+ }
307
+ ],
308
+ rows: {
309
+ selectable: {
310
+ multiple: true
311
+ },
312
+ handlers: {
313
+ focus: 'select-row-toggle'
314
+ },
315
+ classifier: function (record, rowIndex) {
316
+ const rate = record['rate']
317
+ const emphasized =
318
+ rate < 10 ? ['black', 'white'] : rate < 25 ? ['yellow', 'blue'] : rate < 40 ? ['cyan', 'red'] : undefined
319
+ return {
320
+ emphasized
321
+ }
322
+ } as GristClassifier
323
+ },
324
+ sorters: [
325
+ {
326
+ name: 'name',
327
+ desc: true
328
+ },
329
+ {
330
+ name: 'email'
331
+ }
332
+ ],
333
+ pagination: {
334
+ pages: [20, 30, 50, 100, 200]
335
+ }
336
+ }
337
+
338
+ export default {
339
+ title: 'grid setting',
340
+ component: 'ox-grist',
341
+ argTypes: {
342
+ config: { control: 'object' },
343
+ mode: { control: 'select', options: ['GRID', 'LIST', 'CARD'] },
344
+ urlParamsSensitive: { control: 'boolean' }
345
+ }
346
+ }
347
+
348
+ interface Story<T> {
349
+ (args: T): TemplateResult
350
+ args?: Partial<T>
351
+ argTypes?: Record<string, unknown>
352
+ }
353
+
354
+ interface ArgTypes {
355
+ config: object
356
+ mode: string
357
+ urlParamsSensitive: boolean
358
+ fetchHandler: object
359
+ }
360
+
361
+ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive = false, fetchHandler }: ArgTypes) =>
362
+ html` <link
363
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
364
+ rel="stylesheet"
365
+ />
366
+ <link
367
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
368
+ rel="stylesheet"
369
+ />
370
+ <link
371
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
372
+ rel="stylesheet"
373
+ />
374
+
375
+ <link href="/themes/app-theme.css" rel="stylesheet" />
376
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
377
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
378
+
379
+ <style>
380
+ ${CommonGristStyles.cssText}
381
+ ${CommonHeaderStyles.cssText}
382
+ </style>
383
+
384
+ <ox-grist
385
+ .config=${config}
386
+ .mode=${mode}
387
+ .fetchHandler=${fetchHandler}
388
+ ?url-params-sensitive=${urlParamsSensitive}
389
+ @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
390
+ >
391
+ <div slot="headroom">
392
+ <div id="filters">
393
+ <ox-filters-form autofocus></ox-filters-form>
394
+ </div>
395
+
396
+ <div id="sorters">
397
+ Sort
398
+ <md-icon
399
+ @click=${(e: Event) => {
400
+ const target = e.currentTarget as HTMLElement
401
+ ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
402
+ right: 0,
403
+ top: target.offsetTop + target.offsetHeight
404
+ })
405
+ }}
406
+ >expand_more</md-icon
407
+ >
408
+ <ox-popup id="sorter-control">
409
+ <ox-sorters-control> </ox-sorters-control>
410
+ </ox-popup>
411
+ </div>
412
+
413
+ <div id="modes">
414
+ <md-icon @click=${() => (mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</md-icon>
415
+ <md-icon @click=${() => (mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</md-icon>
416
+ <md-icon @click=${() => (mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
417
+ </div>
418
+
419
+ <ox-record-creator id="add" light-popup>
420
+ <button><md-icon>add</md-icon></button>
421
+ </ox-record-creator>
422
+ </div>
423
+
424
+ <md-icon
425
+ title="personal setting"
426
+ slot="setting"
427
+ @click=${(e: MouseEvent) => {
428
+ const grist = (e.target as HTMLElement).closest('ox-grist') as DataGrist
429
+ alert('setting clicked. will fetch again.')
430
+ grist?.fetch()
431
+ }}
432
+ >tune</md-icon
433
+ >
434
+ </ox-grist>`
435
+
436
+ export const Regular = Template.bind({})
437
+ Regular.args = {
438
+ config,
439
+ fetchHandler,
440
+ mode: 'GRID'
441
+ }