@operato/data-grist 2.0.0-alpha.2 → 2.0.0-alpha.4

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 (30) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/src/data-grid/data-grid-body.js +0 -1
  3. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  4. package/dist/src/data-manipulator.d.ts +4 -2
  5. package/dist/src/data-manipulator.js +66 -11
  6. package/dist/src/data-manipulator.js.map +1 -1
  7. package/dist/src/editors/ox-input-tree.js +1 -1
  8. package/dist/src/editors/ox-input-tree.js.map +1 -1
  9. package/dist/src/renderers/ox-grist-renderer-tree.js +1 -1
  10. package/dist/src/renderers/ox-grist-renderer-tree.js.map +1 -1
  11. package/dist/src/types.d.ts +434 -4
  12. package/dist/src/types.js +9 -0
  13. package/dist/src/types.js.map +1 -1
  14. package/dist/tsconfig.tsbuildinfo +1 -1
  15. package/docs/gutter/gutter.md +7 -0
  16. package/package.json +4 -4
  17. package/src/data-grid/data-grid-body.ts +0 -1
  18. package/src/data-manipulator.ts +84 -14
  19. package/src/editors/ox-input-tree.ts +1 -1
  20. package/src/renderers/ox-grist-renderer-tree.ts +1 -1
  21. package/src/types.ts +442 -4
  22. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler copy.d.ts +0 -7
  23. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler copy.js +0 -19
  24. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler copy.js.map +0 -1
  25. package/dist/src/handlers/contextmenu-tree.d.ts +0 -3
  26. package/dist/src/handlers/contextmenu-tree.js +0 -30
  27. package/dist/src/handlers/contextmenu-tree.js.map +0 -1
  28. package/dist/src/handlers/move-up copy.d.ts +0 -3
  29. package/dist/src/handlers/move-up copy.js +0 -26
  30. package/dist/src/handlers/move-up copy.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ # Gutter
2
+
3
+ "Gutter"는 테이블 형태에서 각 행의 왼쪽 또는 오른쪽에 위치한 추가적인 열(column)을 가리킵니다. 이 열은 주로 각 행(row)을 식별하거나 특정 작업을 수행하기 위한 버튼 또는 링크와 같은 요소를 표시하는 데 사용됩니다.
4
+
5
+ Gutter 열은 주로 데이터 행에 대한 조작 또는 행의 상태를 나타내는 데 사용됩니다. 예를 들어, 테이블에서 각 행이 특정 작업을 수행하는 버튼을 포함할 때, 이러한 버튼이 Gutter 열에 배치될 수 있습니다. 또한 Gutter 열은 행을 선택하거나 행의 상태를 나타내는 체크박스를 포함할 수도 있습니다.
6
+
7
+ Gutter 열의 구체적인 용도 및 디자인은 개발자 또는 디자이너에게 달려 있으며, 테이블 컴포넌트나 라이브러리에서 지원하는 기능에 따라 다를 수 있습니다. Gutter 열은 데이터 행을 더 유용하게 만들거나 조작할 수 있는 추가적인 공간을 제공하는 중요한 요소입니다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@operato/data-grist",
3
- "version": "2.0.0-alpha.2",
3
+ "version": "2.0.0-alpha.4",
4
4
  "description": "User interface for grid (desktop) and list (mobile)",
5
5
  "author": "heartyoh",
6
6
  "main": "dist/index.js",
@@ -57,8 +57,8 @@
57
57
  "dependencies": {
58
58
  "@material/mwc-icon": "^0.27.0",
59
59
  "@operato/headroom": "^2.0.0-alpha.0",
60
- "@operato/input": "^2.0.0-alpha.2",
61
- "@operato/popup": "^2.0.0-alpha.2",
60
+ "@operato/input": "^2.0.0-alpha.4",
61
+ "@operato/popup": "^2.0.0-alpha.4",
62
62
  "@operato/pull-to-refresh": "^2.0.0-alpha.0",
63
63
  "@operato/styles": "^2.0.0-alpha.0",
64
64
  "@operato/utils": "^2.0.0-alpha.0",
@@ -100,5 +100,5 @@
100
100
  "prettier --write"
101
101
  ]
102
102
  },
103
- "gitHead": "b940cc5dd44c22458ec03189e6bc8dae7f04f32e"
103
+ "gitHead": "351befceadea37e8095af5b5a43dbd8be87e5cc5"
104
104
  }
@@ -140,7 +140,6 @@ export class DataGridBody extends LitElement {
140
140
  var columns = this.columns.filter(column => !column.hidden)
141
141
  var data = this.data
142
142
  var { records } = data
143
- records = records.filter(record => !record.__parent__ || !record.__parent__.collapsed)
144
143
  var { appendable, classifier, accumulator } = this.config.rows
145
144
  const { start, end } = this._selectBlock || {}
146
145
 
@@ -66,16 +66,13 @@ export class DataManipulator extends LitElement {
66
66
  /* tree processing */
67
67
  this.addEventListener('collapse-all', (e: Event) => this.onCollapseAll(e as CustomEvent))
68
68
  this.addEventListener('expand-all', (e: Event) => this.onExpandAll(e as CustomEvent))
69
- this.addEventListener('collapsed', (e: Event) => this.onCollapsed(e as CustomEvent))
70
- this.addEventListener('expanded', (e: Event) => this.onExpanded(e as CustomEvent))
69
+ this.addEventListener('collapse-node', (e: Event) => this.onCollapse(e as CustomEvent))
70
+ this.addEventListener('expand-node', (e: Event) => this.onExpand(e as CustomEvent))
71
71
  this.addEventListener('check-in-tree', (e: Event) => this.onCheckInTree(e as CustomEvent))
72
- }
73
72
 
74
- // updated(changes: PropertyValues<this>) {
75
- // if (changes.has('data')) {
76
- // this.refresh()
77
- // }
78
- // }
73
+ this.addEventListener('add-sibling-node', (e: Event) => this.onAddSiblingNode(e as CustomEvent))
74
+ this.addEventListener('add-child-node', (e: Event) => this.onAddChildNode(e as CustomEvent))
75
+ }
79
76
 
80
77
  onFieldChange({
81
78
  after,
@@ -223,17 +220,89 @@ export class DataManipulator extends LitElement {
223
220
  this.refresh(true)
224
221
  }
225
222
 
226
- onCollapsed(e: CustomEvent) {
227
- const record = e.detail
223
+ onCollapse(e: CustomEvent) {
224
+ const record = e.detail as GristRecord
228
225
  record.__expanded__ = false
229
226
 
230
227
  this.refresh()
231
228
  }
232
229
 
233
- onExpanded(e: CustomEvent) {
234
- const record = e.detail
230
+ onExpand(e: CustomEvent) {
231
+ const record = e.detail as GristRecord
232
+ record.__expanded__ = true
233
+
234
+ this.refresh()
235
+ }
236
+
237
+ onAddSiblingNode(e: CustomEvent) {
238
+ const { records } = this.data
239
+ const toplevelRecords = records.filter(
240
+ record => !record.__depth__
241
+ ) /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */
242
+
243
+ const field = e.detail
244
+ const { record } = field
245
+ const { __depth__ } = record as GristRecord
246
+
247
+ function findParent(record: GristRecord, parent?: GristRecord): GristRecord | undefined {
248
+ var children = (parent ? parent.__children__ || [] : toplevelRecords) as GristRecord[]
249
+
250
+ if (children.find(child => child === record)) {
251
+ return parent
252
+ } else {
253
+ for (let child of children) {
254
+ const found = findParent(record, child)
255
+ if (found) {
256
+ return found
257
+ }
258
+ }
259
+ }
260
+ }
261
+
262
+ const parent = findParent(record)
263
+
264
+ const sibling = {
265
+ __depth__,
266
+ __dirty__: '+'
267
+ }
268
+
269
+ if (parent) {
270
+ const { __children__ } = parent as GristRecord
271
+
272
+ if (!__children__) {
273
+ parent.__children__ = [sibling]
274
+ } else {
275
+ parent.__children__ = [...__children__, sibling]
276
+ }
277
+
278
+ parent.__expanded__ = true
279
+ } else {
280
+ this.data.records = [...toplevelRecords, sibling]
281
+ }
282
+
283
+ this.refresh()
284
+ }
285
+
286
+ onAddChildNode(e: CustomEvent) {
287
+ const field = e.detail
288
+ const { record } = field
289
+
290
+ const { __children__, __depth__, __seq__ } = record as GristRecord
291
+ const child = {
292
+ __depth__: (__depth__ || 0) + 1,
293
+ __dirty__: '+'
294
+ }
295
+
296
+ if (!__children__) {
297
+ record.__children__ = [child]
298
+ } else {
299
+ record.__children__.push(child)
300
+ }
301
+
235
302
  record.__expanded__ = true
236
303
 
304
+ field.requestUpdate()
305
+
237
306
  this.refresh()
238
307
  }
239
308
 
@@ -256,7 +325,8 @@ export class DataManipulator extends LitElement {
256
325
 
257
326
  children.forEach(child => updateCheckedAll(child))
258
327
 
259
- var checked: 'checked' | 'half-checked' | 'unchecked' | undefined
328
+ var checked: 'checked' | 'half-checked' | 'unchecked' | undefined =
329
+ record.__check_in_tree__ == 'checked' ? 'checked' : undefined
260
330
 
261
331
  children.forEach(child => {
262
332
  const { __check_in_tree__ } = child
@@ -264,7 +334,7 @@ export class DataManipulator extends LitElement {
264
334
  if (__check_in_tree__ == 'half-checked') {
265
335
  checked = 'half-checked'
266
336
  } else if (__check_in_tree__ == 'checked') {
267
- checked = checked == 'checked' || !checked ? 'checked' : 'half-checked'
337
+ checked = checked == 'checked' ? 'checked' : 'half-checked'
268
338
  } else {
269
339
  checked = checked == 'unchecked' || !checked ? 'unchecked' : 'half-checked'
270
340
  }
@@ -214,7 +214,7 @@ export class OxInputTree extends OxFormField {
214
214
  e.stopPropagation()
215
215
 
216
216
  this.dispatchEvent(
217
- new CustomEvent(this.record.__expanded__ ? 'collapsed' : 'expanded', {
217
+ new CustomEvent(this.record.__expanded__ ? 'collapse-node' : 'expand-node', {
218
218
  bubbles: true,
219
219
  composed: true,
220
220
  detail: this.record
@@ -173,7 +173,7 @@ export class OxGristRendererTree extends OxGristRenderer {
173
173
  e.stopPropagation()
174
174
 
175
175
  this.dispatchEvent(
176
- new CustomEvent(this.record.__expanded__ ? 'collapsed' : 'expanded', {
176
+ new CustomEvent(this.record.__expanded__ ? 'collapse-node' : 'expand-node', {
177
177
  bubbles: true,
178
178
  composed: true,
179
179
  detail: this.record