@operato/data-grist 2.0.0-alpha.2 → 2.0.0-alpha.3
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.
- package/CHANGELOG.md +11 -0
- package/dist/src/data-grid/data-grid-body.js +0 -1
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-manipulator.d.ts +4 -2
- package/dist/src/data-manipulator.js +66 -11
- package/dist/src/data-manipulator.js.map +1 -1
- package/dist/src/editors/ox-input-tree.js +1 -1
- package/dist/src/editors/ox-input-tree.js.map +1 -1
- package/dist/src/renderers/ox-grist-renderer-tree.js +1 -1
- package/dist/src/renderers/ox-grist-renderer-tree.js.map +1 -1
- package/dist/src/types.d.ts +434 -4
- package/dist/src/types.js +9 -0
- package/dist/src/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/gutter/gutter.md +7 -0
- package/package.json +3 -3
- package/src/data-grid/data-grid-body.ts +0 -1
- package/src/data-manipulator.ts +84 -14
- package/src/editors/ox-input-tree.ts +1 -1
- package/src/renderers/ox-grist-renderer-tree.ts +1 -1
- package/src/types.ts +442 -4
- package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler copy.d.ts +0 -7
- package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler copy.js +0 -19
- package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler copy.js.map +0 -1
- package/dist/src/handlers/contextmenu-tree.d.ts +0 -3
- package/dist/src/handlers/contextmenu-tree.js +0 -30
- package/dist/src/handlers/contextmenu-tree.js.map +0 -1
- package/dist/src/handlers/move-up copy.d.ts +0 -3
- package/dist/src/handlers/move-up copy.js +0 -26
- 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.
|
3
|
+
"version": "2.0.0-alpha.3",
|
4
4
|
"description": "User interface for grid (desktop) and list (mobile)",
|
5
5
|
"author": "heartyoh",
|
6
6
|
"main": "dist/index.js",
|
@@ -57,7 +57,7 @@
|
|
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.
|
60
|
+
"@operato/input": "^2.0.0-alpha.3",
|
61
61
|
"@operato/popup": "^2.0.0-alpha.2",
|
62
62
|
"@operato/pull-to-refresh": "^2.0.0-alpha.0",
|
63
63
|
"@operato/styles": "^2.0.0-alpha.0",
|
@@ -100,5 +100,5 @@
|
|
100
100
|
"prettier --write"
|
101
101
|
]
|
102
102
|
},
|
103
|
-
"gitHead": "
|
103
|
+
"gitHead": "9943c2c54a27be3619920543344c699d3a9a55de"
|
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
|
|
package/src/data-manipulator.ts
CHANGED
@@ -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('
|
70
|
-
this.addEventListener('
|
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
|
-
|
75
|
-
|
76
|
-
|
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
|
-
|
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
|
-
|
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'
|
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__ ? '
|
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__ ? '
|
176
|
+
new CustomEvent(this.record.__expanded__ ? 'collapse-node' : 'expand-node', {
|
177
177
|
bubbles: true,
|
178
178
|
composed: true,
|
179
179
|
detail: this.record
|