@operato/data-grist 2.0.0-alpha.0 → 2.0.0-alpha.11
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 +95 -0
- package/dist/src/accumulator/accumulator.js +4 -4
- package/dist/src/accumulator/accumulator.js.map +1 -1
- package/dist/src/configure/column-builder.js +5 -5
- package/dist/src/configure/column-builder.js.map +1 -1
- package/dist/src/configure/zero-config.js +3 -1
- package/dist/src/configure/zero-config.js.map +1 -1
- package/dist/src/data-card/data-card-field.js +1 -1
- package/dist/src/data-card/data-card-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-accum-field.d.ts +1 -0
- package/dist/src/data-grid/data-grid-accum-field.js +8 -0
- package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-body.js +24 -3
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-grid/data-grid-field.d.ts +1 -0
- package/dist/src/data-grid/data-grid-field.js +5 -0
- package/dist/src/data-grid/data-grid-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-header.d.ts +1 -0
- package/dist/src/data-grid/data-grid-header.js +16 -14
- package/dist/src/data-grid/data-grid-header.js.map +1 -1
- package/dist/src/data-grid/event-handlers/data-grid-body-click-handler.js +2 -2
- package/dist/src/data-grid/event-handlers/data-grid-body-click-handler.js.map +1 -1
- package/dist/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.d.ts +7 -0
- package/dist/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.js +25 -0
- package/dist/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.js.map +1 -0
- package/dist/src/data-grid/event-handlers/data-grid-body-dblclick-handler.js +2 -2
- package/dist/src/data-grid/event-handlers/data-grid-body-dblclick-handler.js.map +1 -1
- package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler.js +2 -2
- package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler.js.map +1 -1
- package/dist/src/data-grist.d.ts +225 -3
- package/dist/src/data-grist.js +195 -3
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/data-list/data-list-field.js +1 -1
- package/dist/src/data-list/data-list-field.js.map +1 -1
- package/dist/src/data-manipulator.d.ts +7 -3
- package/dist/src/data-manipulator.js +103 -20
- package/dist/src/data-manipulator.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-tree.d.ts +6 -0
- package/dist/src/editors/ox-grist-editor-tree.js +27 -0
- package/dist/src/editors/ox-grist-editor-tree.js.map +1 -0
- package/dist/src/editors/ox-grist-editor.d.ts +1 -0
- package/dist/src/editors/ox-grist-editor.js +3 -0
- package/dist/src/editors/ox-grist-editor.js.map +1 -1
- package/dist/src/editors/ox-input-tree.d.ts +20 -0
- package/dist/src/editors/ox-input-tree.js +221 -0
- package/dist/src/editors/ox-input-tree.js.map +1 -0
- package/dist/src/editors/registry.js +3 -1
- package/dist/src/editors/registry.js.map +1 -1
- package/dist/src/filters/filters-form.js +1 -1
- package/dist/src/filters/filters-form.js.map +1 -1
- package/dist/src/handlers/contextmenu-tree-mutation.d.ts +3 -0
- package/dist/src/handlers/contextmenu-tree-mutation.js +82 -0
- package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -0
- package/dist/src/handlers/registry.js +3 -1
- package/dist/src/handlers/registry.js.map +1 -1
- package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -0
- package/dist/src/renderers/ox-grist-renderer-tree.js +6 -3
- package/dist/src/renderers/ox-grist-renderer-tree.js.map +1 -1
- package/dist/src/types.d.ts +437 -6
- package/dist/src/types.js +9 -0
- package/dist/src/types.js.map +1 -1
- package/dist/stories/accumulator.stories.js +2 -1
- package/dist/stories/accumulator.stories.js.map +1 -1
- package/dist/stories/fixed-column.stories.js +3 -3
- package/dist/stories/fixed-column.stories.js.map +1 -1
- package/dist/stories/tree-column-with-checkbox.stories.js +8 -3
- package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
- package/dist/stories/tree-column.stories.js +8 -3
- package/dist/stories/tree-column.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/gutter/gutter.md +7 -0
- package/package.json +5 -5
- package/src/accumulator/accumulator.ts +4 -4
- package/src/configure/column-builder.ts +4 -4
- package/src/configure/zero-config.ts +3 -1
- package/src/data-card/data-card-field.ts +1 -1
- package/src/data-grid/data-grid-accum-field.ts +7 -0
- package/src/data-grid/data-grid-body.ts +30 -3
- package/src/data-grid/data-grid-field.ts +6 -0
- package/src/data-grid/data-grid-header.ts +22 -18
- package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +2 -2
- package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +32 -0
- package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +2 -2
- package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +2 -2
- package/src/data-grist.ts +250 -3
- package/src/data-list/data-list-field.ts +1 -1
- package/src/data-manipulator.ts +130 -22
- package/src/editors/ox-grist-editor-tree.ts +27 -0
- package/src/editors/ox-grist-editor.ts +4 -0
- package/src/editors/ox-input-tree.ts +226 -0
- package/src/editors/registry.ts +3 -1
- package/src/filters/filters-form.ts +1 -1
- package/src/handlers/contextmenu-tree-mutation.ts +98 -0
- package/src/handlers/registry.ts +3 -1
- package/src/renderers/ox-grist-renderer-tree.ts +7 -3
- package/src/types.ts +446 -6
- package/stories/accumulator.stories.ts +2 -1
- package/stories/fixed-column.stories.ts +3 -3
- package/stories/tree-column-with-checkbox.stories.ts +8 -3
- package/stories/tree-column.stories.ts +8 -3
@@ -18,7 +18,9 @@ export const ZERO_FIELD_RENDERER: FieldRenderer = (value, column, record, rowInd
|
|
18
18
|
|
19
19
|
export const ZERO_EVENTHANDLERSET: GristEventHandlerSet = {
|
20
20
|
click: undefined,
|
21
|
-
dblclick: undefined
|
21
|
+
dblclick: undefined,
|
22
|
+
focus: undefined,
|
23
|
+
contextmenu: undefined
|
22
24
|
}
|
23
25
|
export const ZERO_COLUMNS: ColumnConfig[] = []
|
24
26
|
export const ZERO_GROUPS: GroupConfig[] = []
|
@@ -89,7 +89,7 @@ export class DataCardField extends LitElement {
|
|
89
89
|
|
90
90
|
if (typeof label == 'object') {
|
91
91
|
let { renderer: labelRenderer } = label
|
92
|
-
return html`<label>${labelRenderer()}</label>${recordRenderer(value, column, record, rowIndex, this)}`
|
92
|
+
return html`<label>${labelRenderer(column)}</label>${recordRenderer(value, column, record, rowIndex, this)}`
|
93
93
|
} else {
|
94
94
|
return html`${recordRenderer(value, column, record, rowIndex, this)}`
|
95
95
|
}
|
@@ -58,6 +58,7 @@ export class DataGridAccumField extends LitElement {
|
|
58
58
|
@property({ type: Boolean }) editing = false
|
59
59
|
@property({ type: Object }) value = {}
|
60
60
|
@property({ attribute: false }) emphasized: any = false
|
61
|
+
@property({ type: String }) fixed?: string
|
61
62
|
|
62
63
|
render(): TemplateResult {
|
63
64
|
if (!this.column || !this.column.accumulator) {
|
@@ -90,5 +91,11 @@ export class DataGridAccumField extends LitElement {
|
|
90
91
|
this.style.setProperty('--data-grid-field-text-align', align)
|
91
92
|
}
|
92
93
|
}
|
94
|
+
|
95
|
+
if (changes.has('fixed')) {
|
96
|
+
if (this.fixed) {
|
97
|
+
this.style.left = this.fixed + 'px'
|
98
|
+
}
|
99
|
+
}
|
93
100
|
}
|
94
101
|
}
|
@@ -18,6 +18,7 @@ import { DataGridField } from './data-grid-field'
|
|
18
18
|
import { dataGridBodyClickHandler } from './event-handlers/data-grid-body-click-handler'
|
19
19
|
import { dataGridBodyDblclickHandler } from './event-handlers/data-grid-body-dblclick-handler'
|
20
20
|
import { dataGridBodyFocusChangeHandler } from './event-handlers/data-grid-body-focus-change-handler'
|
21
|
+
import { dataGridBodyContextMenuHandler } from './event-handlers/data-grid-body-contextmenu-handler'
|
21
22
|
import { dataGridBodyKeydownHandler } from './event-handlers/data-grid-body-keydown-handler'
|
22
23
|
import { accumulate } from '../accumulator/accumulator'
|
23
24
|
|
@@ -75,7 +76,7 @@ export class DataGridBody extends LitElement {
|
|
75
76
|
[fixed] {
|
76
77
|
position: sticky;
|
77
78
|
background-color: var(--grid-record-background-color);
|
78
|
-
z-index:
|
79
|
+
z-index: 2; /* 고정된 열을 다른 열 위에 표시. */
|
79
80
|
}
|
80
81
|
|
81
82
|
:host([raised]) [fixed] {
|
@@ -88,6 +89,10 @@ export class DataGridBody extends LitElement {
|
|
88
89
|
bottom: 0;
|
89
90
|
z-index: 1;
|
90
91
|
}
|
92
|
+
|
93
|
+
ox-grid-accum-field[fixed] {
|
94
|
+
background-color: var(--grid-accum-record-background-color, #ccc);
|
95
|
+
}
|
91
96
|
`
|
92
97
|
]
|
93
98
|
|
@@ -135,7 +140,6 @@ export class DataGridBody extends LitElement {
|
|
135
140
|
var columns = this.columns.filter(column => !column.hidden)
|
136
141
|
var data = this.data
|
137
142
|
var { records } = data
|
138
|
-
records = records.filter(record => !record.__parent__ || !record.__parent__.collapsed)
|
139
143
|
var { appendable, classifier, accumulator } = this.config.rows
|
140
144
|
const { start, end } = this._selectBlock || {}
|
141
145
|
|
@@ -208,6 +212,7 @@ export class DataGridBody extends LitElement {
|
|
208
212
|
.column=${column}
|
209
213
|
.record=${accumRecord!}
|
210
214
|
.value=${accumRecord[column.name]}
|
215
|
+
fixed=${ifDefined(this.fixedLefts[idxColumn])}
|
211
216
|
></ox-grid-accum-field>
|
212
217
|
`
|
213
218
|
)}
|
@@ -261,6 +266,27 @@ export class DataGridBody extends LitElement {
|
|
261
266
|
this.setSelectBlock(start, end)
|
262
267
|
})
|
263
268
|
|
269
|
+
this.renderRoot.addEventListener('contextmenu', (event: Event) => {
|
270
|
+
const e = event as MouseEvent
|
271
|
+
this.setSelectBlock()
|
272
|
+
|
273
|
+
this._draggable = false
|
274
|
+
|
275
|
+
var target = (e.target as Element).closest('ox-grid-field') as DataGridField
|
276
|
+
var { rowIndex, columnIndex } = target || {}
|
277
|
+
|
278
|
+
this.dispatchEvent(
|
279
|
+
new CustomEvent('focus-change', {
|
280
|
+
bubbles: true,
|
281
|
+
composed: true,
|
282
|
+
detail: {
|
283
|
+
row: rowIndex,
|
284
|
+
column: columnIndex
|
285
|
+
}
|
286
|
+
})
|
287
|
+
)
|
288
|
+
})
|
289
|
+
|
264
290
|
this.renderRoot.addEventListener('mousedown', (event: Event) => {
|
265
291
|
const e = event as MouseEvent
|
266
292
|
this.setSelectBlock()
|
@@ -285,7 +311,7 @@ export class DataGridBody extends LitElement {
|
|
285
311
|
})
|
286
312
|
)
|
287
313
|
|
288
|
-
if (!isNaN(rowIndex) && !isNaN(columnIndex)) {
|
314
|
+
if (columnIndex >= 0 && target.editableOnClick && !isNaN(rowIndex) && !isNaN(columnIndex)) {
|
289
315
|
this.startEditTarget(rowIndex, columnIndex)
|
290
316
|
}
|
291
317
|
})
|
@@ -318,6 +344,7 @@ export class DataGridBody extends LitElement {
|
|
318
344
|
|
319
345
|
this.renderRoot.addEventListener('click', dataGridBodyClickHandler.bind(this))
|
320
346
|
this.renderRoot.addEventListener('dblclick', dataGridBodyDblclickHandler.bind(this))
|
347
|
+
this.renderRoot.addEventListener('contextmenu', dataGridBodyContextMenuHandler.bind(this))
|
321
348
|
|
322
349
|
this.addEventListener('focus-change', dataGridBodyFocusChangeHandler.bind(this))
|
323
350
|
|
@@ -173,4 +173,10 @@ export class DataGridField extends LitElement {
|
|
173
173
|
this.removeAttribute('emphasized-row')
|
174
174
|
}
|
175
175
|
}
|
176
|
+
|
177
|
+
get editableOnClick() {
|
178
|
+
const renderer = this.renderRoot.firstElementChild as HTMLElement
|
179
|
+
//@ts-ignore
|
180
|
+
return renderer && 'editableOnClick' in renderer ? renderer.editableOnClick : true
|
181
|
+
}
|
176
182
|
}
|
@@ -267,26 +267,26 @@ export class DataGridHeader extends LitElement {
|
|
267
267
|
`
|
268
268
|
}
|
269
269
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
})
|
270
|
+
notifyFixedLeftChange() {
|
271
|
+
const fixedHeaders = Array.from(this.renderRoot.querySelectorAll('div[fixed]')) as HTMLElement[]
|
272
|
+
const fixedLefts = [] as number[]
|
273
|
+
var left = 0
|
274
|
+
fixedHeaders.forEach((header: HTMLElement) => {
|
275
|
+
header.style.left = left + 'px'
|
276
|
+
fixedLefts.push(left)
|
277
|
+
|
278
|
+
const width = header.offsetWidth
|
279
|
+
left += width
|
280
|
+
})
|
282
281
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
282
|
+
this.dispatchEvent(
|
283
|
+
new CustomEvent('fixed-lefts-change', {
|
284
|
+
detail: fixedLefts
|
285
|
+
})
|
286
|
+
)
|
287
|
+
}
|
289
288
|
|
289
|
+
updated(changes: PropertyValues) {
|
290
290
|
if (changes.has('columns')) {
|
291
291
|
this.row2 = this.columns.reduce((row2, column, index) => {
|
292
292
|
if (column.hidden || !column.header?.group) {
|
@@ -340,6 +340,8 @@ export class DataGridHeader extends LitElement {
|
|
340
340
|
|
341
341
|
return row1
|
342
342
|
}, [] as any[])
|
343
|
+
|
344
|
+
requestAnimationFrame(this.notifyFixedLeftChange.bind(this))
|
343
345
|
}
|
344
346
|
}
|
345
347
|
|
@@ -512,6 +514,8 @@ export class DataGridHeader extends LitElement {
|
|
512
514
|
})
|
513
515
|
)
|
514
516
|
|
517
|
+
this.notifyFixedLeftChange()
|
518
|
+
|
515
519
|
this._lastAccVal = 0
|
516
520
|
}, 100)
|
517
521
|
}
|
@@ -56,10 +56,10 @@ export function dataGridBodyClickHandler(this: DataGridBody, e: Event): void {
|
|
56
56
|
/* do column click handler */
|
57
57
|
if (column) {
|
58
58
|
var { click } = column.handlers
|
59
|
-
click && click(this.columns, this.data, column, record, rowIndex, target)
|
59
|
+
click && click(this.columns, this.data, column, record, rowIndex, target, e)
|
60
60
|
}
|
61
61
|
|
62
62
|
/* do rows click handler */
|
63
63
|
var { click: rowsClick } = this.config.rows.handlers
|
64
|
-
rowsClick && rowsClick(this.columns, this.data, column, record, rowIndex, target)
|
64
|
+
rowsClick && rowsClick(this.columns, this.data, column, record, rowIndex, target, e)
|
65
65
|
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { DataGridBody } from '../data-grid-body'
|
2
|
+
import { DataGridField } from '../data-grid-field'
|
3
|
+
|
4
|
+
/**
|
5
|
+
* ox-grid-body 의 focus-change handler
|
6
|
+
*
|
7
|
+
* - handler의 this 는 ox-grid-body임.
|
8
|
+
*/
|
9
|
+
export async function dataGridBodyContextMenuHandler(this: DataGridBody, e: Event): Promise<void> {
|
10
|
+
e.stopPropagation()
|
11
|
+
|
12
|
+
if (this.editTarget) {
|
13
|
+
/* editTarget이 새로 설정되지 않았다면, 이후 기능이 실행된다. */
|
14
|
+
return
|
15
|
+
}
|
16
|
+
|
17
|
+
/* target should be 'ox-grid-field' */
|
18
|
+
var target = (e.target as Element).closest('ox-grid-field') as DataGridField
|
19
|
+
var { column, record, rowIndex, columnIndex } = target || {}
|
20
|
+
|
21
|
+
var { column, record } = target || {}
|
22
|
+
|
23
|
+
/* do column contextmenu handler */
|
24
|
+
if (column) {
|
25
|
+
var { contextmenu } = column.handlers
|
26
|
+
contextmenu && contextmenu(this.columns, this.data, column, record, rowIndex, target, e)
|
27
|
+
}
|
28
|
+
|
29
|
+
/* do rows contextmenu handler */
|
30
|
+
var { contextmenu: rowsContextMenu } = this.config.rows.handlers
|
31
|
+
rowsContextMenu && rowsContextMenu(this.columns, this.data, column, record, rowIndex, target, e)
|
32
|
+
}
|
@@ -33,10 +33,10 @@ export async function dataGridBodyDblclickHandler(this: DataGridBody, e: Event):
|
|
33
33
|
/* do column dblclick handler */
|
34
34
|
if (column) {
|
35
35
|
var { dblclick } = column.handlers
|
36
|
-
dblclick && dblclick(this.columns, this.data, column, record, rowIndex, target)
|
36
|
+
dblclick && dblclick(this.columns, this.data, column, record, rowIndex, target, e)
|
37
37
|
}
|
38
38
|
|
39
39
|
/* do rows dblclick handler */
|
40
40
|
var { dblclick: rowsDblclick } = this.config.rows.handlers
|
41
|
-
rowsDblclick && rowsDblclick(this.columns, this.data, column, record, rowIndex, target)
|
41
|
+
rowsDblclick && rowsDblclick(this.columns, this.data, column, record, rowIndex, target, e)
|
42
42
|
}
|
@@ -15,10 +15,10 @@ export async function dataGridBodyFocusChangeHandler(this: DataGridBody, e: Even
|
|
15
15
|
/* do column focus handler */
|
16
16
|
if (column) {
|
17
17
|
var { focus } = column.handlers
|
18
|
-
focus && focus(this.columns, this.data, column, record, rowIndex, target)
|
18
|
+
focus && focus(this.columns, this.data, column, record, rowIndex, target, e)
|
19
19
|
}
|
20
20
|
|
21
21
|
/* do rows focus handler */
|
22
22
|
var { focus: rowsFocus } = this.config.rows.handlers
|
23
|
-
rowsFocus && rowsFocus(this.columns, this.data, column, record, rowIndex, target)
|
23
|
+
rowsFocus && rowsFocus(this.columns, this.data, column, record, rowIndex, target, e)
|
24
24
|
}
|