@operato/data-grist 2.0.0-alpha.13 → 2.0.0-alpha.131

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 (310) hide show
  1. package/CHANGELOG.md +564 -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/column-builder.js.map +1 -1
  6. package/dist/src/configure/rows-option-builder.js +2 -1
  7. package/dist/src/configure/rows-option-builder.js.map +1 -1
  8. package/dist/src/configure/zero-config.js +1 -0
  9. package/dist/src/configure/zero-config.js.map +1 -1
  10. package/dist/src/data-card/data-card-gutter-menu.d.ts +1 -1
  11. package/dist/src/data-card/data-card-gutter-menu.js +5 -5
  12. package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
  13. package/dist/src/data-card/data-card.d.ts +2 -2
  14. package/dist/src/data-card/data-card.js +3 -3
  15. package/dist/src/data-card/data-card.js.map +1 -1
  16. package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
  17. package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
  18. package/dist/src/data-card/record-card.d.ts +2 -2
  19. package/dist/src/data-card/record-card.js +26 -26
  20. package/dist/src/data-card/record-card.js.map +1 -1
  21. package/dist/src/data-grid/data-grid-accum-field.js +9 -2
  22. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  23. package/dist/src/data-grid/data-grid-body-style.js +1 -0
  24. package/dist/src/data-grid/data-grid-body-style.js.map +1 -1
  25. package/dist/src/data-grid/data-grid-body.d.ts +3 -3
  26. package/dist/src/data-grid/data-grid-body.js +6 -4
  27. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  28. package/dist/src/data-grid/data-grid-field.d.ts +1 -1
  29. package/dist/src/data-grid/data-grid-field.js +6 -3
  30. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  31. package/dist/src/data-grid/data-grid-footer.d.ts +2 -2
  32. package/dist/src/data-grid/data-grid-footer.js +17 -9
  33. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  34. package/dist/src/data-grid/data-grid-header.d.ts +1 -1
  35. package/dist/src/data-grid/data-grid-header.js +38 -35
  36. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  37. package/dist/src/data-grid/data-grid.d.ts +1 -1
  38. package/dist/src/data-grid/data-grid.js +12 -2
  39. package/dist/src/data-grid/data-grid.js.map +1 -1
  40. package/dist/src/data-grist.d.ts +12 -3
  41. package/dist/src/data-grist.js +74 -31
  42. package/dist/src/data-grist.js.map +1 -1
  43. package/dist/src/data-list/data-list-gutter.js +12 -0
  44. package/dist/src/data-list/data-list-gutter.js.map +1 -1
  45. package/dist/src/data-list/data-list.d.ts +2 -2
  46. package/dist/src/data-list/data-list.js +3 -3
  47. package/dist/src/data-list/data-list.js.map +1 -1
  48. package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
  49. package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
  50. package/dist/src/data-list/record-partial.d.ts +2 -2
  51. package/dist/src/data-list/record-partial.js +20 -18
  52. package/dist/src/data-list/record-partial.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-select.js +37 -25
  79. package/dist/src/editors/ox-grist-editor-select.js.map +1 -1
  80. package/dist/src/editors/ox-grist-editor-tel.d.ts +1 -1
  81. package/dist/src/editors/ox-grist-editor-text.d.ts +2 -1
  82. package/dist/src/editors/ox-grist-editor-text.js +3 -0
  83. package/dist/src/editors/ox-grist-editor-text.js.map +1 -1
  84. package/dist/src/editors/ox-grist-editor-textarea.d.ts +2 -1
  85. package/dist/src/editors/ox-grist-editor-textarea.js +3 -0
  86. package/dist/src/editors/ox-grist-editor-textarea.js.map +1 -1
  87. package/dist/src/editors/ox-grist-editor-time.d.ts +1 -1
  88. package/dist/src/editors/ox-grist-editor-tree.d.ts +1 -1
  89. package/dist/src/editors/ox-grist-editor-week.d.ts +1 -1
  90. package/dist/src/editors/ox-grist-editor.d.ts +4 -4
  91. package/dist/src/editors/ox-grist-editor.js +14 -16
  92. package/dist/src/editors/ox-grist-editor.js.map +1 -1
  93. package/dist/src/editors/ox-input-tree.d.ts +1 -1
  94. package/dist/src/empty-note.d.ts +2 -2
  95. package/dist/src/empty-note.js +3 -3
  96. package/dist/src/empty-note.js.map +1 -1
  97. package/dist/src/filters/filter-checkbox.js +12 -5
  98. package/dist/src/filters/filter-checkbox.js.map +1 -1
  99. package/dist/src/filters/filter-range-date.js +12 -1
  100. package/dist/src/filters/filter-range-date.js.map +1 -1
  101. package/dist/src/filters/filter-select.js +30 -16
  102. package/dist/src/filters/filter-select.js.map +1 -1
  103. package/dist/src/filters/filter-styles.js +47 -28
  104. package/dist/src/filters/filter-styles.js.map +1 -1
  105. package/dist/src/filters/filters-form.d.ts +7 -1
  106. package/dist/src/filters/filters-form.js +154 -71
  107. package/dist/src/filters/filters-form.js.map +1 -1
  108. package/dist/src/gutters/gutter-button.d.ts +1 -1
  109. package/dist/src/gutters/gutter-button.js +3 -3
  110. package/dist/src/gutters/gutter-button.js.map +1 -1
  111. package/dist/src/gutters/gutter-dirty.d.ts +1 -1
  112. package/dist/src/gutters/gutter-dirty.js +5 -5
  113. package/dist/src/gutters/gutter-dirty.js.map +1 -1
  114. package/dist/src/handlers/contextmenu-tree-mutation.js +4 -4
  115. package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
  116. package/dist/src/index.d.ts +1 -1
  117. package/dist/src/index.js +1 -1
  118. package/dist/src/index.js.map +1 -1
  119. package/dist/src/personalizer/index.d.ts +1 -0
  120. package/dist/src/personalizer/index.js +2 -0
  121. package/dist/src/personalizer/index.js.map +1 -0
  122. package/dist/src/personalizer/ox-grist-personalizer.d.ts +10 -0
  123. package/dist/src/personalizer/ox-grist-personalizer.js +171 -0
  124. package/dist/src/personalizer/ox-grist-personalizer.js.map +1 -0
  125. package/dist/src/record-view/record-creator.d.ts +2 -2
  126. package/dist/src/record-view/record-creator.js +1 -1
  127. package/dist/src/record-view/record-creator.js.map +1 -1
  128. package/dist/src/record-view/record-view-body.d.ts +3 -3
  129. package/dist/src/record-view/record-view-body.js +4 -4
  130. package/dist/src/record-view/record-view-body.js.map +1 -1
  131. package/dist/src/record-view/record-view.d.ts +2 -2
  132. package/dist/src/record-view/record-view.js +5 -5
  133. package/dist/src/record-view/record-view.js.map +1 -1
  134. package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
  135. package/dist/src/renderers/ox-grist-renderer-select.js +34 -4
  136. package/dist/src/renderers/ox-grist-renderer-select.js.map +1 -1
  137. package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -1
  138. package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
  139. package/dist/src/sorters/sorters-control.js +3 -3
  140. package/dist/src/sorters/sorters-control.js.map +1 -1
  141. package/dist/src/types.d.ts +30 -9
  142. package/dist/src/types.js.map +1 -1
  143. package/dist/stories/{accumulator.stories.d.ts → accumulator-format.stories.d.ts} +1 -1
  144. package/dist/stories/{accumulator.stories.js → accumulator-format.stories.js} +50 -125
  145. package/dist/stories/accumulator-format.stories.js.map +1 -0
  146. package/dist/stories/barcode-input-filter.stories.d.ts +1 -1
  147. package/dist/stories/barcode-input-filter.stories.js +41 -79
  148. package/dist/stories/barcode-input-filter.stories.js.map +1 -1
  149. package/dist/stories/bounded-select-filters.stories.d.ts +25 -0
  150. package/dist/stories/bounded-select-filters.stories.js +264 -0
  151. package/dist/stories/bounded-select-filters.stories.js.map +1 -0
  152. package/dist/stories/bounded-select-record.stories.d.ts +25 -0
  153. package/dist/stories/bounded-select-record.stories.js +267 -0
  154. package/dist/stories/bounded-select-record.stories.js.map +1 -0
  155. package/dist/stories/creatable-only-column.stories.d.ts +25 -0
  156. package/dist/stories/creatable-only-column.stories.js +211 -0
  157. package/dist/stories/creatable-only-column.stories.js.map +1 -0
  158. package/dist/stories/default-filters.stories.d.ts +1 -1
  159. package/dist/stories/default-filters.stories.js +84 -79
  160. package/dist/stories/default-filters.stories.js.map +1 -1
  161. package/dist/stories/dynamic-editable.stories.d.ts +1 -1
  162. package/dist/stories/dynamic-editable.stories.js +51 -86
  163. package/dist/stories/dynamic-editable.stories.js.map +1 -1
  164. package/dist/stories/empty-sorters.stories.d.ts +1 -1
  165. package/dist/stories/empty-sorters.stories.js +41 -78
  166. package/dist/stories/empty-sorters.stories.js.map +1 -1
  167. package/dist/stories/explicit-fetch.stories.d.ts +1 -1
  168. package/dist/stories/explicit-fetch.stories.js +42 -79
  169. package/dist/stories/explicit-fetch.stories.js.map +1 -1
  170. package/dist/stories/fixed-column.stories.d.ts +1 -1
  171. package/dist/stories/fixed-column.stories.js +45 -127
  172. package/dist/stories/fixed-column.stories.js.map +1 -1
  173. package/dist/stories/grid-setting.stories.d.ts +42 -0
  174. package/dist/stories/grid-setting.stories.js +415 -0
  175. package/dist/stories/grid-setting.stories.js.map +1 -0
  176. package/dist/stories/grist-modes.stories.d.ts +1 -1
  177. package/dist/stories/grist-modes.stories.js +74 -140
  178. package/dist/stories/grist-modes.stories.js.map +1 -1
  179. package/dist/stories/group-header.stories.d.ts +1 -1
  180. package/dist/stories/group-header.stories.js +45 -127
  181. package/dist/stories/group-header.stories.js.map +1 -1
  182. package/dist/stories/textarea.stories.d.ts +1 -1
  183. package/dist/stories/textarea.stories.js +39 -121
  184. package/dist/stories/textarea.stories.js.map +1 -1
  185. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  186. package/dist/stories/tree-column-with-checkbox.stories.js +49 -136
  187. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  188. package/dist/stories/tree-column.stories.d.ts +1 -1
  189. package/dist/stories/tree-column.stories.js +49 -136
  190. package/dist/stories/tree-column.stories.js.map +1 -1
  191. package/dist/tsconfig.tsbuildinfo +1 -1
  192. package/docs/default-value/default-value.md +1 -1
  193. package/docs/default-value/value-generator/date-generator.md +31 -2
  194. package/docs/default-value/value-generator/hour-time-generator.md +33 -0
  195. package/docs/default-value/value-generator/minute-time-generator.md +33 -0
  196. package/docs/default-value/value-generator/month-date-generator.md +4 -2
  197. package/docs/default-value/value-generator/now-generator.md +29 -0
  198. package/docs/default-value/value-generator/time-generator.md +31 -0
  199. package/docs/default-value/value-generator/today-generator.md +29 -0
  200. package/docs/default-value/value-generator/week-date-generator.md +33 -2
  201. package/docs/default-value/value-generator/year-date-generator.md +33 -2
  202. package/package.json +26 -21
  203. package/src/configure/column-builder.ts +1 -0
  204. package/src/configure/rows-option-builder.ts +11 -1
  205. package/src/configure/zero-config.ts +1 -0
  206. package/src/data-card/data-card-gutter-menu.ts +5 -5
  207. package/src/data-card/data-card.ts +3 -3
  208. package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
  209. package/src/data-card/record-card.ts +30 -32
  210. package/src/data-grid/data-grid-accum-field.ts +8 -2
  211. package/src/data-grid/data-grid-body-style.ts +1 -0
  212. package/src/data-grid/data-grid-body.ts +7 -5
  213. package/src/data-grid/data-grid-field.ts +4 -2
  214. package/src/data-grid/data-grid-footer.ts +18 -11
  215. package/src/data-grid/data-grid-header.ts +68 -65
  216. package/src/data-grid/data-grid.ts +14 -4
  217. package/src/data-grist.ts +89 -30
  218. package/src/data-list/data-list-gutter.ts +12 -0
  219. package/src/data-list/data-list.ts +3 -3
  220. package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
  221. package/src/data-list/record-partial.ts +22 -22
  222. package/src/editors/ox-grist-editor-checkbox.ts +12 -2
  223. package/src/editors/ox-grist-editor-datetime.ts +1 -2
  224. package/src/editors/ox-grist-editor-file.ts +12 -2
  225. package/src/editors/ox-grist-editor-image.ts +10 -7
  226. package/src/editors/ox-grist-editor-number.ts +10 -9
  227. package/src/editors/ox-grist-editor-select.ts +41 -28
  228. package/src/editors/ox-grist-editor-text.ts +4 -0
  229. package/src/editors/ox-grist-editor-textarea.ts +4 -0
  230. package/src/editors/ox-grist-editor.ts +14 -14
  231. package/src/empty-note.ts +3 -3
  232. package/src/filters/filter-checkbox.ts +15 -5
  233. package/src/filters/filter-range-date.ts +16 -1
  234. package/src/filters/filter-select.ts +41 -28
  235. package/src/filters/filter-styles.ts +47 -28
  236. package/src/filters/filters-form.ts +159 -59
  237. package/src/gutters/gutter-button.ts +3 -3
  238. package/src/gutters/gutter-dirty.ts +5 -5
  239. package/src/handlers/contextmenu-tree-mutation.ts +4 -4
  240. package/src/index.ts +1 -1
  241. package/src/personalizer/index.ts +1 -0
  242. package/src/personalizer/ox-grist-personalizer.ts +181 -0
  243. package/src/record-view/record-creator.ts +1 -1
  244. package/src/record-view/record-view-body.ts +4 -4
  245. package/src/record-view/record-view.ts +5 -5
  246. package/src/renderers/ox-grist-renderer-select.ts +41 -6
  247. package/src/sorters/sorters-control.ts +3 -3
  248. package/src/types.ts +36 -10
  249. package/stories/{accumulator.stories.ts → accumulator-format.stories.ts} +48 -126
  250. package/stories/barcode-input-filter.stories.ts +53 -89
  251. package/stories/bounded-select-filters.stories.ts +313 -0
  252. package/stories/bounded-select-record.stories.ts +316 -0
  253. package/stories/creatable-only-column.stories.ts +231 -0
  254. package/stories/default-filters.stories.ts +96 -89
  255. package/stories/dynamic-editable.stories.ts +58 -92
  256. package/stories/empty-sorters.stories.ts +53 -89
  257. package/stories/explicit-fetch.stories.ts +54 -90
  258. package/stories/fixed-column.stories.ts +57 -137
  259. package/stories/grid-setting.stories.ts +462 -0
  260. package/stories/grist-modes.stories.ts +86 -155
  261. package/stories/group-header.stories.ts +57 -137
  262. package/stories/textarea.stories.ts +42 -127
  263. package/stories/tree-column-with-checkbox.stories.ts +53 -138
  264. package/stories/tree-column.stories.ts +53 -138
  265. package/themes/grist-theme.css +2 -0
  266. package/dist/src/value-generator/date-generator.d.ts +0 -6
  267. package/dist/src/value-generator/date-generator.js +0 -30
  268. package/dist/src/value-generator/date-generator.js.map +0 -1
  269. package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
  270. package/dist/src/value-generator/hour-time-generator.js +0 -29
  271. package/dist/src/value-generator/hour-time-generator.js.map +0 -1
  272. package/dist/src/value-generator/index.d.ts +0 -1
  273. package/dist/src/value-generator/index.js +0 -2
  274. package/dist/src/value-generator/index.js.map +0 -1
  275. package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
  276. package/dist/src/value-generator/minute-time-generator.js +0 -29
  277. package/dist/src/value-generator/minute-time-generator.js.map +0 -1
  278. package/dist/src/value-generator/month-date-generator.d.ts +0 -7
  279. package/dist/src/value-generator/month-date-generator.js +0 -31
  280. package/dist/src/value-generator/month-date-generator.js.map +0 -1
  281. package/dist/src/value-generator/now-generator.d.ts +0 -4
  282. package/dist/src/value-generator/now-generator.js +0 -8
  283. package/dist/src/value-generator/now-generator.js.map +0 -1
  284. package/dist/src/value-generator/registry.d.ts +0 -11
  285. package/dist/src/value-generator/registry.js +0 -50
  286. package/dist/src/value-generator/registry.js.map +0 -1
  287. package/dist/src/value-generator/time-generator.d.ts +0 -6
  288. package/dist/src/value-generator/time-generator.js +0 -28
  289. package/dist/src/value-generator/time-generator.js.map +0 -1
  290. package/dist/src/value-generator/today-generator.d.ts +0 -4
  291. package/dist/src/value-generator/today-generator.js +0 -8
  292. package/dist/src/value-generator/today-generator.js.map +0 -1
  293. package/dist/src/value-generator/week-date-generator.d.ts +0 -7
  294. package/dist/src/value-generator/week-date-generator.js +0 -29
  295. package/dist/src/value-generator/week-date-generator.js.map +0 -1
  296. package/dist/src/value-generator/year-date-generator.d.ts +0 -7
  297. package/dist/src/value-generator/year-date-generator.js +0 -29
  298. package/dist/src/value-generator/year-date-generator.js.map +0 -1
  299. package/dist/stories/accumulator.stories.js.map +0 -1
  300. package/src/value-generator/date-generator.ts +0 -35
  301. package/src/value-generator/hour-time-generator.ts +0 -43
  302. package/src/value-generator/index.ts +0 -1
  303. package/src/value-generator/minute-time-generator.ts +0 -43
  304. package/src/value-generator/month-date-generator.ts +0 -38
  305. package/src/value-generator/now-generator.ts +0 -10
  306. package/src/value-generator/registry.ts +0 -58
  307. package/src/value-generator/time-generator.ts +0 -33
  308. package/src/value-generator/today-generator.ts +0 -10
  309. package/src/value-generator/week-date-generator.ts +0 -40
  310. package/src/value-generator/year-date-generator.ts +0 -36
@@ -1,11 +1,41 @@
1
1
  import { html } from 'lit'
2
+ import { until } from 'lit/directives/until.js'
2
3
 
3
- import { FieldRenderer } from '../types'
4
+ import { FieldRenderer, SelectOption, SelectOptionObject } from '../types'
5
+
6
+ function buildOptions(options: SelectOption[], value: any) {
7
+ const selectOptionObjects = options.map(option => {
8
+ switch (typeof option) {
9
+ case 'string':
10
+ return {
11
+ display: option,
12
+ value: option
13
+ }
14
+ case 'object':
15
+ return {
16
+ display: option.display || option.name,
17
+ value: option.value
18
+ }
19
+ default:
20
+ return option
21
+ }
22
+ }) as SelectOptionObject[]
23
+
24
+ var res = selectOptionObjects
25
+ ? selectOptionObjects.filter((option: any) => option.value == String(value == null ? '' : value))
26
+ : []
27
+
28
+ if (res.length) {
29
+ return html`<span>${res[0].display || res[0].name || ''}</span>`
30
+ }
31
+ return html`<span>${value}</span>`
32
+ }
4
33
 
5
34
  export const OxGristRendererSelect: FieldRenderer = (value, column, record, rowIndex, field) => {
6
35
  if (value == null) {
7
36
  return ''
8
37
  }
38
+
9
39
  var rowOptionField = column.record.rowOptionField && record[column.record.rowOptionField]
10
40
  var options = rowOptionField?.options ? rowOptionField.options : column.record.options
11
41
 
@@ -13,11 +43,16 @@ export const OxGristRendererSelect: FieldRenderer = (value, column, record, rowI
13
43
  console.error(`options value for select '${column.name}' column is mandatory.`)
14
44
  } else if (typeof options == 'function') {
15
45
  options = options.call(null, value, column, record, rowIndex, field)
16
- }
17
46
 
18
- var res = options ? options.filter((option: any) => option.value == String(value == null ? '' : value)) : []
19
- if (res.length) {
20
- return html`<span>${res[0].display}</span>`
47
+ if (options instanceof Promise) {
48
+ return html`${until(
49
+ options.then(options => buildOptions(options, value)),
50
+ value
51
+ )}`
52
+ } else {
53
+ return buildOptions((options || []) as SelectOption[], value)
54
+ }
55
+ } else {
56
+ return buildOptions((options || []) as SelectOption[], value)
21
57
  }
22
- return html`<span>${value}</span>`
23
58
  }
@@ -29,9 +29,9 @@ export class SortersControl extends LitElement {
29
29
  text-transform: capitalize;
30
30
  user-select: none;
31
31
  }
32
- [option] mwc-icon {
32
+ [option] md-icon {
33
33
  margin-left: var(--margin-default);
34
- --mdc-icon-size: var(--fontsize-large);
34
+ --md-icon-size: var(--fontsize-large);
35
35
  color: var(--primary-color);
36
36
  }
37
37
  [option] sub {
@@ -99,7 +99,7 @@ export class SortersControl extends LitElement {
99
99
  ${desc === null
100
100
  ? html``
101
101
  : html`
102
- <mwc-icon>${desc ? 'keyboard_arrow_down' : 'keyboard_arrow_up'}</mwc-icon>
102
+ <md-icon>${desc ? 'keyboard_arrow_down' : 'keyboard_arrow_up'}</md-icon>
103
103
  ${rank === 0 ? html`` : html`<sub>${rank}</sub>`}
104
104
  `}
105
105
  </div>
package/src/types.ts CHANGED
@@ -9,7 +9,7 @@ import { DataListGutter } from './data-list/data-list-gutter'
9
9
  import { RecordPartial } from './data-list/record-partial'
10
10
  import { DataReportField } from './data-report/data-report-field'
11
11
  import { OxGristEditor } from './editors'
12
- import { QueryFilter } from './filters'
12
+ import { QueryFilter, OxFiltersForm } from './filters'
13
13
  import { OxGristRenderer } from './renderers/ox-grist-renderer'
14
14
 
15
15
  /**
@@ -83,6 +83,22 @@ export type FilterOperator =
83
83
  | 'i_nlike'
84
84
  | 'nlike'
85
85
 
86
+ export type SelectOptionObject =
87
+ | {
88
+ name: string
89
+ display?: never
90
+ value: string
91
+ }
92
+ | {
93
+ display: string
94
+ name?: never
95
+ value: string
96
+ }
97
+
98
+ export type SelectOption = SelectOptionObject | string
99
+
100
+ export type FilterChangedCallback = (value: any, form: OxFiltersForm) => boolean
101
+
86
102
  /**
87
103
  * Configuration object for specifying filter conditions.
88
104
  *
@@ -99,6 +115,8 @@ export type FilterConfigObject = {
99
115
  options?: { [key: string]: any }
100
116
  value?: string | number | boolean | string[] | number[] | undefined
101
117
  label?: string
118
+ boundTo?: string[]
119
+ onchange?: FilterChangedCallback
102
120
  }
103
121
 
104
122
  /**
@@ -341,6 +359,8 @@ export type ColumnConfig = {
341
359
  imex?: ImexConfig | boolean
342
360
  multiple?: boolean
343
361
  rowCount?: boolean
362
+ /** 특정 도구에 의해서 사용되는 옵션으로, 일반적인 용도로 사용되지 않음을 표현할 수 있다. */
363
+ unusable?: boolean
344
364
  }
345
365
 
346
366
  /**
@@ -427,15 +447,6 @@ export type HeaderConfig = {
427
447
  */
428
448
  export type HeaderRenderer = (column: ColumnConfig) => any
429
449
 
430
- /**
431
- * Function type for generating values.
432
- *
433
- * @callback ValueGeneratorFn
434
- * @param {...any} args - The arguments used for generating a value.
435
- * @returns {*} - The generated value.
436
- */
437
- export type ValueGeneratorFn = (...args: any[]) => any
438
-
439
450
  /**
440
451
  * Configuration for specifying default values for fields in a record.
441
452
  * Default values can be set using predefined value generator functions or custom user-defined functions.
@@ -627,6 +638,7 @@ export type ImexConfig = {
627
638
  export type RowsConfig = {
628
639
  accumulator?: boolean
629
640
  appendable: boolean
641
+ editable: boolean
630
642
  insertable: boolean
631
643
  selectable?: RowSelectableConfig
632
644
  groups: GroupConfig[]
@@ -751,3 +763,17 @@ export type GristData = {
751
763
  * @returns {boolean} - `true` if the record should be selected, `false` otherwise.
752
764
  */
753
765
  export type GristSelectFunction = (record: GristRecord) => boolean
766
+
767
+ /**
768
+ * Defines a type for personalized grid settings. It includes individual column settings and additional configurations specific to a user's grid view.
769
+ *
770
+ * @typedef {Object} PersonalGristPreference
771
+ * @property {Partial<ColumnConfig>[]} [columns] - Partially defines the configuration for each column in the grid.
772
+ * Each element can include only some properties of the `ColumnConfig`, used for optionally overriding column settings.
773
+ * @property {any} [key] - Allows for storing additional user-defined properties with dynamic keys.
774
+ * This property can include various custom settings beyond the grid configuration, and the keys can be freely defined.
775
+ */
776
+ export type PersonalGristPreference = {
777
+ columns?: Partial<ColumnConfig>[]
778
+ [key: string]: any
779
+ }
@@ -3,7 +3,7 @@ import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
4
  import '../src/record-view/record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
- import '@material/mwc-icon'
6
+ import '@material/web/icon/icon.js'
7
7
 
8
8
  import { html, TemplateResult } from 'lit'
9
9
 
@@ -16,6 +16,8 @@ import {
16
16
  ValidationCallback
17
17
  } from '../src/types.js'
18
18
 
19
+ import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
20
+
19
21
  const fetchHandler: FetchHandler = async ({ page, limit }) => {
20
22
  var total = 25
21
23
  var start = (page! - 1) * limit!
@@ -103,7 +105,9 @@ const config = {
103
105
  header: 'accval',
104
106
  record: {
105
107
  editable: true,
106
- align: 'right'
108
+ align: 'right',
109
+ defaultValue: 100,
110
+ format: '+$#,##0.00'
107
111
  },
108
112
  accumulator: 'avg',
109
113
  // accumulator: {
@@ -178,7 +182,7 @@ const config = {
178
182
  }
179
183
 
180
184
  export default {
181
- title: 'accumulator in ox-grist',
185
+ title: 'accumulator format in ox-grist',
182
186
  component: 'ox-grist',
183
187
  argTypes: {
184
188
  config: { control: 'object' },
@@ -200,137 +204,55 @@ interface ArgTypes {
200
204
  fetchHandler: object
201
205
  }
202
206
 
203
- const Template: Story<ArgTypes> = ({
204
- config,
205
- mode = 'GRID',
206
- urlParamsSensitive = false,
207
- fetchHandler
208
- }: ArgTypes) => html` <link
209
- href="https://fonts.googleapis.com/css?family=Material+Icons&display=block"
210
- rel="stylesheet"
211
- />
212
- <link href="/themes/app-theme.css" rel="stylesheet" />
213
- <link href="/themes/oops-theme.css" rel="stylesheet" />
214
- <link href="/themes/grist-theme.css" rel="stylesheet" />
215
-
216
- <style>
217
- ox-grist {
218
- height: 600px;
219
- }
220
-
221
- [slot='headroom'] {
222
- display: flex;
223
- flex-direction: row;
224
- align-items: center;
225
- padding: var(--padding-default) var(--padding-wide);
226
- background-color: var(--theme-white-color);
227
- box-shadow: var(--box-shadow);
228
-
229
- --mdc-icon-size: 24px;
230
- }
231
- #sorters mwc-icon,
232
- #modes mwc-icon {
233
- --mdc-icon-size: 18px;
234
- }
235
- #sorters {
236
- margin-left: auto;
237
- margin-right: var(--margin-default);
238
- padding-left: var(--padding-narrow);
239
- border-bottom: var(--border-dark-color);
240
- position: relative;
241
- color: var(--secondary-color);
242
- font-size: var(--fontsize-default);
243
- user-select: none;
244
- }
245
-
246
- #sorters > * {
247
- padding: var(--padding-narrow);
248
- vertical-align: middle;
249
- }
250
-
251
- #modes > * {
252
- padding: var(--padding-narrow);
253
- opacity: 0.5;
254
- color: var(--primary-text-color);
255
- cursor: pointer;
256
- }
257
-
258
- #modes > mwc-icon[active] {
259
- border-radius: 9px;
260
- background-color: rgba(var(--primary-color-rgb), 0.05);
261
- opacity: 1;
262
- color: var(--secondary-text-color);
263
- cursor: default;
264
- }
265
-
266
- #modes > mwc-icon:hover {
267
- opacity: 1;
268
- color: var(--secondary-text-color);
269
- }
270
-
271
- #add {
272
- width: 50px;
273
- text-align: right;
274
- }
207
+ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive = false, fetchHandler }: ArgTypes) =>
208
+ html` <link
209
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
210
+ rel="stylesheet"
211
+ />
212
+ <link
213
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
214
+ rel="stylesheet"
215
+ />
216
+ <link
217
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
218
+ rel="stylesheet"
219
+ />
275
220
 
276
- #add button {
277
- background-color: var(--primary-color);
278
- border: 0;
279
- border-radius: 50%;
280
- padding: 5px;
281
- width: 36px;
282
- height: 36px;
283
- cursor: pointer;
284
- }
221
+ <link href="/themes/app-theme.css" rel="stylesheet" />
222
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
223
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
285
224
 
286
- #add button:hover {
287
- background-color: var(--focus-background-color);
288
- box-shadow: var(--box-shadow);
289
- }
225
+ <style>
226
+ ${CommonGristStyles.cssText}
227
+ ${CommonHeaderStyles.cssText}
228
+ </style>
290
229
 
291
- #add button mwc-icon {
292
- font-size: 2em;
293
- color: var(--theme-white-color);
294
- }
295
-
296
- #filters {
297
- display: flex;
298
- justify-content: center;
299
- align-items: center;
300
- }
301
-
302
- #filters * {
303
- margin-right: var(--margin-default);
304
- }
305
-
306
- @media only screen and (max-width: 460px) {
307
- #filters {
308
- flex-direction: column;
230
+ <style>
231
+ ox-grist {
232
+ height: 600px;
309
233
  }
310
234
 
311
- #modes {
312
- display: none;
235
+ ox-filters-form {
236
+ flex: 1;
313
237
  }
314
- }
315
- </style>
238
+ </style>
316
239
 
317
- <ox-grist
318
- mode="GRID"
319
- .config=${config}
320
- .fetchHandler=${fetchHandler}
321
- ?url-params-sensitive=${urlParamsSensitive}
322
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
323
- >
324
- <div slot="headroom">
325
- <div id="filters">
326
- <ox-filters-form autofocus></ox-filters-form>
240
+ <ox-grist
241
+ mode="GRID"
242
+ .config=${config}
243
+ .fetchHandler=${fetchHandler}
244
+ ?url-params-sensitive=${urlParamsSensitive}
245
+ @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
246
+ >
247
+ <div slot="headroom" class="header">
248
+ <div class="filters">
249
+ <ox-filters-form autofocus></ox-filters-form>
250
+ <ox-record-creator id="add" light-popup>
251
+ <button><md-icon>add</md-icon></button>
252
+ </ox-record-creator>
253
+ </div>
327
254
  </div>
328
-
329
- <ox-record-creator id="add" light-popup>
330
- <button><mwc-icon>add</mwc-icon></button>
331
- </ox-record-creator>
332
- </div>
333
- </ox-grist>`
255
+ </ox-grist>`
334
256
 
335
257
  export const Regular = Template.bind({})
336
258
  Regular.args = {
@@ -2,12 +2,14 @@ import '../src/index.js'
2
2
  import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
4
  import '@operato/popup/ox-popup-list.js'
5
- import '@material/mwc-icon'
5
+ import '@material/web/icon/icon.js'
6
6
 
7
7
  import { html, TemplateResult } from 'lit'
8
8
 
9
9
  import { FetchHandler } from '../src/types.js'
10
10
 
11
+ import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
12
+
11
13
  const fetchHandler: FetchHandler = async ({ filters, page, limit }) => {
12
14
  var total = 120993
13
15
  var start = (page! - 1) * limit!
@@ -135,95 +137,57 @@ interface ArgTypes {
135
137
  headerFilter: boolean
136
138
  }
137
139
 
138
- const Template: Story<ArgTypes> = ({ englishOnly, selectAfterChange, headerFilter }: ArgTypes) => html` <link
139
- href="https://fonts.googleapis.com/css?family=Material+Icons&display=block"
140
- rel="stylesheet"
141
- />
142
- <link href="/themes/app-theme.css" rel="stylesheet" />
143
- <link href="/themes/oops-theme.css" rel="stylesheet" />
144
- <link href="/themes/grist-theme.css" rel="stylesheet" />
145
-
146
- <style>
147
- [slot='headroom'] {
148
- display: flex;
149
- flex-direction: row;
150
- align-items: center;
151
- padding: var(--padding-default) var(--padding-wide);
152
- background-color: var(--theme-white-color);
153
- box-shadow: var(--box-shadow);
154
-
155
- --mdc-icon-size: 24px;
156
- }
157
- #sorters mwc-icon,
158
- #modes mwc-icon {
159
- --mdc-icon-size: 18px;
160
- }
161
- #sorters {
162
- margin-left: auto;
163
- margin-right: var(--margin-default);
164
- padding-left: var(--padding-narrow);
165
- border-bottom: var(--border-dark-color);
166
- position: relative;
167
- color: var(--secondary-color);
168
- font-size: var(--fontsize-default);
169
- user-select: none;
170
- }
171
-
172
- #sorters > * {
173
- padding: var(--padding-narrow);
174
- vertical-align: middle;
175
- }
176
-
177
- #filters {
178
- display: flex;
179
- justify-content: center;
180
- align-items: center;
181
- }
182
-
183
- #filters * {
184
- margin-right: var(--margin-default);
185
- }
186
-
187
- @media only screen and (max-width: 460px) {
188
- #filters {
189
- flex-direction: column;
190
- }
191
-
192
- #modes {
193
- display: none;
194
- }
195
- }
196
- </style>
197
-
198
- <ox-grist
199
- .config=${buildConfig({ englishOnly, selectAfterChange, headerFilter })}
200
- mode="GRID"
201
- .fetchHandler=${fetchHandler}
202
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
203
- >
204
- <div slot="headroom">
205
- <div id="filters">
206
- <ox-filters-form></ox-filters-form>
207
- </div>
208
-
209
- <div id="sorters">
210
- Sort
211
- <mwc-icon
212
- @click=${(e: Event) => {
213
- const target = e.currentTarget as HTMLElement
214
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
215
- right: 0,
216
- top: target.offsetTop + target.offsetHeight
217
- })
218
- }}
219
- >expand_more</mwc-icon
220
- >
221
- <ox-popup id="sorter-control">
222
- <ox-sorters-control> </ox-sorters-control>
223
- </ox-popup>
140
+ const Template: Story<ArgTypes> = ({ englishOnly, selectAfterChange, headerFilter }: ArgTypes) =>
141
+ html` <link
142
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
143
+ rel="stylesheet"
144
+ />
145
+ <link
146
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
147
+ rel="stylesheet"
148
+ />
149
+ <link
150
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
151
+ rel="stylesheet"
152
+ />
153
+ <link href="/themes/app-theme.css" rel="stylesheet" />
154
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
155
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
156
+
157
+ <style>
158
+ ${CommonGristStyles.cssText}
159
+ ${CommonHeaderStyles.cssText}
160
+ </style>
161
+
162
+ <ox-grist
163
+ .config=${buildConfig({ englishOnly, selectAfterChange, headerFilter })}
164
+ mode="GRID"
165
+ .fetchHandler=${fetchHandler}
166
+ @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
167
+ >
168
+ <div slot="headroom" class="header">
169
+ <div class="filters">
170
+ <ox-filters-form></ox-filters-form>
171
+
172
+ <div id="sorters">
173
+ Sort
174
+ <md-icon
175
+ @click=${(e: Event) => {
176
+ const target = e.currentTarget as HTMLElement
177
+ ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
178
+ right: 0,
179
+ top: target.offsetTop + target.offsetHeight
180
+ })
181
+ }}
182
+ >expand_more</md-icon
183
+ >
184
+ <ox-popup id="sorter-control">
185
+ <ox-sorters-control> </ox-sorters-control>
186
+ </ox-popup>
187
+ </div>
188
+ </div>
224
189
  </div>
225
- </div>
226
- </ox-grist>`
190
+ </ox-grist>`
227
191
 
228
192
  export const Regular = Template.bind({})
229
193
  Regular.args = {