@operato/data-grist 2.0.0-alpha.0 → 2.0.0-alpha.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 (90) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/src/configure/column-builder.js +5 -5
  3. package/dist/src/configure/column-builder.js.map +1 -1
  4. package/dist/src/configure/zero-config.js +3 -1
  5. package/dist/src/configure/zero-config.js.map +1 -1
  6. package/dist/src/data-card/data-card-field.js +1 -1
  7. package/dist/src/data-card/data-card-field.js.map +1 -1
  8. package/dist/src/data-grid/data-grid-accum-field.d.ts +1 -0
  9. package/dist/src/data-grid/data-grid-accum-field.js +8 -0
  10. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  11. package/dist/src/data-grid/data-grid-body.js +24 -2
  12. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  13. package/dist/src/data-grid/data-grid-field.d.ts +1 -0
  14. package/dist/src/data-grid/data-grid-field.js +5 -0
  15. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  16. package/dist/src/data-grid/event-handlers/data-grid-body-click-handler.js +2 -2
  17. package/dist/src/data-grid/event-handlers/data-grid-body-click-handler.js.map +1 -1
  18. package/dist/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.d.ts +7 -0
  19. package/dist/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.js +25 -0
  20. package/dist/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.js.map +1 -0
  21. package/dist/src/data-grid/event-handlers/data-grid-body-dblclick-handler.js +2 -2
  22. package/dist/src/data-grid/event-handlers/data-grid-body-dblclick-handler.js.map +1 -1
  23. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler copy.d.ts +7 -0
  24. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler copy.js +19 -0
  25. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler copy.js.map +1 -0
  26. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler.js +2 -2
  27. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler.js.map +1 -1
  28. package/dist/src/data-list/data-list-field.js +1 -1
  29. package/dist/src/data-list/data-list-field.js.map +1 -1
  30. package/dist/src/data-manipulator.d.ts +3 -1
  31. package/dist/src/data-manipulator.js +20 -7
  32. package/dist/src/data-manipulator.js.map +1 -1
  33. package/dist/src/editors/ox-grist-editor-tree.d.ts +6 -0
  34. package/dist/src/editors/ox-grist-editor-tree.js +27 -0
  35. package/dist/src/editors/ox-grist-editor-tree.js.map +1 -0
  36. package/dist/src/editors/ox-grist-editor.d.ts +1 -0
  37. package/dist/src/editors/ox-grist-editor.js +3 -0
  38. package/dist/src/editors/ox-grist-editor.js.map +1 -1
  39. package/dist/src/editors/ox-input-tree.d.ts +20 -0
  40. package/dist/src/editors/ox-input-tree.js +221 -0
  41. package/dist/src/editors/ox-input-tree.js.map +1 -0
  42. package/dist/src/editors/registry.js +3 -1
  43. package/dist/src/editors/registry.js.map +1 -1
  44. package/dist/src/filters/filters-form.js +1 -1
  45. package/dist/src/filters/filters-form.js.map +1 -1
  46. package/dist/src/handlers/contextmenu-tree-mutation.d.ts +3 -0
  47. package/dist/src/handlers/contextmenu-tree-mutation.js +82 -0
  48. package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -0
  49. package/dist/src/handlers/contextmenu-tree.d.ts +3 -0
  50. package/dist/src/handlers/contextmenu-tree.js +30 -0
  51. package/dist/src/handlers/contextmenu-tree.js.map +1 -0
  52. package/dist/src/handlers/move-up copy.d.ts +3 -0
  53. package/dist/src/handlers/move-up copy.js +26 -0
  54. package/dist/src/handlers/move-up copy.js.map +1 -0
  55. package/dist/src/handlers/registry.js +3 -1
  56. package/dist/src/handlers/registry.js.map +1 -1
  57. package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -0
  58. package/dist/src/renderers/ox-grist-renderer-tree.js +5 -2
  59. package/dist/src/renderers/ox-grist-renderer-tree.js.map +1 -1
  60. package/dist/src/types.d.ts +3 -2
  61. package/dist/src/types.js.map +1 -1
  62. package/dist/stories/tree-column-with-checkbox.stories.js +8 -3
  63. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  64. package/dist/stories/tree-column.stories.js +8 -3
  65. package/dist/stories/tree-column.stories.js.map +1 -1
  66. package/dist/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +4 -4
  68. package/src/configure/column-builder.ts +4 -4
  69. package/src/configure/zero-config.ts +3 -1
  70. package/src/data-card/data-card-field.ts +1 -1
  71. package/src/data-grid/data-grid-accum-field.ts +7 -0
  72. package/src/data-grid/data-grid-body.ts +30 -2
  73. package/src/data-grid/data-grid-field.ts +6 -0
  74. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +2 -2
  75. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +32 -0
  76. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +2 -2
  77. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +2 -2
  78. package/src/data-list/data-list-field.ts +1 -1
  79. package/src/data-manipulator.ts +25 -8
  80. package/src/editors/ox-grist-editor-tree.ts +27 -0
  81. package/src/editors/ox-grist-editor.ts +4 -0
  82. package/src/editors/ox-input-tree.ts +226 -0
  83. package/src/editors/registry.ts +3 -1
  84. package/src/filters/filters-form.ts +1 -1
  85. package/src/handlers/contextmenu-tree-mutation.ts +98 -0
  86. package/src/handlers/registry.ts +3 -1
  87. package/src/renderers/ox-grist-renderer-tree.ts +6 -2
  88. package/src/types.ts +4 -2
  89. package/stories/tree-column-with-checkbox.stories.ts +8 -3
  90. package/stories/tree-column.stories.ts +8 -3
@@ -0,0 +1,98 @@
1
+ import { html } from 'lit'
2
+ import { OxPopupMenu } from '@operato/popup'
3
+
4
+ import { DataGridField } from '../data-grid/data-grid-field'
5
+ import { ColumnConfig, GristData, GristRecord } from '../types'
6
+
7
+ function dispatchEvent(field: DataGridField, event: string) {
8
+ field.dispatchEvent(
9
+ new CustomEvent(event, {
10
+ bubbles: true,
11
+ composed: true,
12
+ detail: field
13
+ })
14
+ )
15
+ }
16
+
17
+ /*
18
+ * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
19
+ * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
20
+ */
21
+ export const ContextMenuTreeMutation = function (
22
+ columns: ColumnConfig[],
23
+ data: GristData,
24
+ column: ColumnConfig,
25
+ record: GristRecord,
26
+ rowIndex: number,
27
+ field: DataGridField,
28
+ event: Event
29
+ ): void {
30
+ const e = event as PointerEvent
31
+ if (!('pageX' in e && 'pageY' in e)) {
32
+ return
33
+ }
34
+
35
+ e.preventDefault()
36
+
37
+ OxPopupMenu.open({
38
+ template: html`
39
+ <ox-popup-menuitem
40
+ label="add sibling node"
41
+ @click=${() => {
42
+ dispatchEvent(field, 'add-sibling-node')
43
+ }}
44
+ >
45
+ <mwc-icon slot="icon">add</mwc-icon>
46
+ </ox-popup-menuitem>
47
+
48
+ <ox-popup-menuitem
49
+ label="add child node"
50
+ @click=${() => {
51
+ dispatchEvent(field, 'add-child-node')
52
+ }}
53
+ >
54
+ <mwc-icon slot="icon">playlist_add</mwc-icon>
55
+ </ox-popup-menuitem>
56
+
57
+ <ox-popup-menuitem
58
+ label="move up"
59
+ @click=${() => {
60
+ dispatchEvent(field, 'move-up')
61
+ }}
62
+ >
63
+ <mwc-icon slot="icon">arrow_upward</mwc-icon>
64
+ </ox-popup-menuitem>
65
+
66
+ <ox-popup-menuitem
67
+ label="move down"
68
+ @click=${() => {
69
+ dispatchEvent(field, 'move-down')
70
+ }}
71
+ >
72
+ <mwc-icon slot="icon">arrow_downward</mwc-icon>
73
+ </ox-popup-menuitem>
74
+
75
+ <div separator></div>
76
+
77
+ <ox-popup-menuitem
78
+ label="collapse all"
79
+ @click=${() => {
80
+ dispatchEvent(field, 'collapse-all')
81
+ }}
82
+ >
83
+ <mwc-icon slot="icon">unfold_less</mwc-icon>
84
+ </ox-popup-menuitem>
85
+
86
+ <ox-popup-menuitem
87
+ label="expand all"
88
+ @click=${() => {
89
+ dispatchEvent(field, 'expand-all')
90
+ }}
91
+ >
92
+ <mwc-icon slot="icon">unfold_more</mwc-icon>
93
+ </ox-popup-menuitem>
94
+ `,
95
+ top: e.pageY,
96
+ left: e.pageX
97
+ })
98
+ }
@@ -1,4 +1,5 @@
1
1
  import { GristEventHandler } from '../types'
2
+ import { ContextMenuTreeMutation } from './contextmenu-tree-mutation'
2
3
  import { MoveDown } from './move-down'
3
4
  import { MoveUp } from './move-up'
4
5
  import { RecordCopy } from './record-copy'
@@ -16,7 +17,8 @@ var HANDLERS: {
16
17
  'move-up': MoveUp as GristEventHandler,
17
18
  'move-down': MoveDown as GristEventHandler,
18
19
  'record-copy': RecordCopy as GristEventHandler,
19
- 'record-delete': RecordDelete as GristEventHandler
20
+ 'record-delete': RecordDelete as GristEventHandler,
21
+ 'contextmenu-tree-mutation': ContextMenuTreeMutation as GristEventHandler
20
22
  }
21
23
 
22
24
  export function registerGristEventHandler(type: string, handler: GristEventHandler) {
@@ -74,8 +74,8 @@ export class OxGristRendererTree extends OxGristRenderer {
74
74
  border-radius: 2px;
75
75
  }
76
76
 
77
- span[label][selected] {
78
- background-color: var(--primary-color, #1890ff);
77
+ span[label] {
78
+ flex: 1;
79
79
  }
80
80
 
81
81
  span[checkbox][checked='checked']::before {
@@ -182,4 +182,8 @@ export class OxGristRendererTree extends OxGristRenderer {
182
182
 
183
183
  this.requestUpdate()
184
184
  }
185
+
186
+ get editableOnClick() {
187
+ return false
188
+ }
185
189
  }
package/src/types.ts CHANGED
@@ -111,7 +111,8 @@ export type GristEventHandler = (
111
111
  column?: ColumnConfig,
112
112
  record?: GristRecord,
113
113
  rowIndex?: number,
114
- target?: any
114
+ target?: any,
115
+ e?: Event
115
116
  ) => void
116
117
 
117
118
  export type AccumulatorFunc =
@@ -160,7 +161,7 @@ export type LabelConfig =
160
161
  renderer: LabelRenderer
161
162
  }
162
163
 
163
- export type LabelRenderer = () => void
164
+ export type LabelRenderer = (column: ColumnConfig) => void
164
165
 
165
166
  export type ColumnWidthCallback = (column: ColumnConfig) => string
166
167
 
@@ -234,6 +235,7 @@ export type GristEventHandlerSet = {
234
235
  click?: GristEventHandler
235
236
  dblclick?: GristEventHandler
236
237
  focus?: GristEventHandler
238
+ contextmenu?: GristEventHandler
237
239
  }
238
240
 
239
241
  export type ListConfig = {
@@ -40,6 +40,7 @@ const fetchHandler: FetchHandler = async ({ page, limit }) => {
40
40
  name: 'subitem' + idx,
41
41
  description: 'sub items...',
42
42
  active: Math.round(Math.random() * 2) % 2 ? true : false,
43
+ accval: Math.random(),
43
44
  children: [
44
45
  ...Array.from({ length: 3 }, (_, idx2) => {
45
46
  return {
@@ -91,7 +92,7 @@ const config = {
91
92
  label: true,
92
93
  header: 'name',
93
94
  record: {
94
- editable: false,
95
+ editable: true,
95
96
  options: {
96
97
  selectable: true /* with checkbox */
97
98
  }
@@ -99,7 +100,10 @@ const config = {
99
100
  filter: 'search',
100
101
  sortable: true,
101
102
  width: 200,
102
- fixed: true
103
+ fixed: true,
104
+ handlers: {
105
+ contextmenu: 'contextmenu-tree-mutation'
106
+ }
103
107
  },
104
108
  {
105
109
  type: 'gutter',
@@ -157,6 +161,7 @@ const config = {
157
161
  }
158
162
  ],
159
163
  rows: {
164
+ appendable: false,
160
165
  selectable: {
161
166
  multiple: true
162
167
  },
@@ -210,7 +215,7 @@ interface ArgTypes {
210
215
  }
211
216
 
212
217
  const Template: Story<ArgTypes> = ({ config }: ArgTypes) => html` <link
213
- href="https://fonts.googleapis.com/css?family=Material+Icons&display=block"
218
+ href="https://fonts.googleapis.com/css?family=Material+Icons"
214
219
  rel="stylesheet"
215
220
  />
216
221
  <link href="/themes/app-theme.css" rel="stylesheet" />
@@ -40,6 +40,7 @@ const fetchHandler: FetchHandler = async ({ page, limit }) => {
40
40
  name: 'subitem' + idx,
41
41
  description: 'sub items...',
42
42
  active: Math.round(Math.random() * 2) % 2 ? true : false,
43
+ accval: Math.random(),
43
44
  children: [
44
45
  ...Array.from({ length: 3 }, (_, idx2) => {
45
46
  return {
@@ -91,7 +92,7 @@ const config = {
91
92
  label: true,
92
93
  header: 'name',
93
94
  record: {
94
- editable: false,
95
+ editable: true,
95
96
  options: {
96
97
  selectable: false
97
98
  }
@@ -99,7 +100,10 @@ const config = {
99
100
  filter: 'search',
100
101
  sortable: true,
101
102
  width: 200,
102
- fixed: true
103
+ fixed: true,
104
+ handlers: {
105
+ contextmenu: 'contextmenu-tree-mutation'
106
+ }
103
107
  },
104
108
  {
105
109
  type: 'gutter',
@@ -157,6 +161,7 @@ const config = {
157
161
  }
158
162
  ],
159
163
  rows: {
164
+ appendable: false,
160
165
  selectable: {
161
166
  multiple: true
162
167
  },
@@ -209,7 +214,7 @@ interface ArgTypes {
209
214
  }
210
215
 
211
216
  const Template: Story<ArgTypes> = ({ config }: ArgTypes) => html` <link
212
- href="https://fonts.googleapis.com/css?family=Material+Icons&display=block"
217
+ href="https://fonts.googleapis.com/css?family=Material+Icons"
213
218
  rel="stylesheet"
214
219
  />
215
220
  <link href="/themes/app-theme.css" rel="stylesheet" />