@operato/data-grist 2.0.0-alpha.9 → 2.0.0-alpha.92
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 +358 -0
- package/demo/data-grist-test.html +25 -14
- package/demo/index.html +25 -14
- package/demo/report-test.html +13 -2
- package/dist/src/configure/rows-option-builder.js +2 -1
- package/dist/src/configure/rows-option-builder.js.map +1 -1
- package/dist/src/configure/zero-config.js +1 -0
- package/dist/src/configure/zero-config.js.map +1 -1
- package/dist/src/data-card/data-card-gutter-menu.d.ts +1 -1
- package/dist/src/data-card/data-card-gutter-menu.js +5 -5
- package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
- package/dist/src/data-card/data-card.d.ts +2 -2
- package/dist/src/data-card/data-card.js +3 -3
- package/dist/src/data-card/data-card.js.map +1 -1
- package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
- package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
- package/dist/src/data-card/record-card.d.ts +2 -2
- package/dist/src/data-card/record-card.js +26 -26
- package/dist/src/data-card/record-card.js.map +1 -1
- package/dist/src/data-grid/data-grid-accum-field.js +8 -3
- package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-body.d.ts +3 -3
- package/dist/src/data-grid/data-grid-body.js +9 -4
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-grid/data-grid-field.d.ts +1 -1
- package/dist/src/data-grid/data-grid-field.js +2 -2
- package/dist/src/data-grid/data-grid-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-footer.d.ts +2 -2
- package/dist/src/data-grid/data-grid-footer.js +17 -9
- package/dist/src/data-grid/data-grid-footer.js.map +1 -1
- package/dist/src/data-grid/data-grid-header.d.ts +1 -1
- package/dist/src/data-grid/data-grid-header.js +38 -35
- package/dist/src/data-grid/data-grid-header.js.map +1 -1
- package/dist/src/data-grid/data-grid.d.ts +1 -1
- package/dist/src/data-grid/data-grid.js +12 -2
- package/dist/src/data-grid/data-grid.js.map +1 -1
- package/dist/src/data-grist.d.ts +226 -4
- package/dist/src/data-grist.js +218 -25
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/data-list/data-list-gutter.js +12 -0
- package/dist/src/data-list/data-list-gutter.js.map +1 -1
- package/dist/src/data-list/data-list.d.ts +2 -2
- package/dist/src/data-list/data-list.js +3 -3
- package/dist/src/data-list/data-list.js.map +1 -1
- package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
- package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
- package/dist/src/data-list/record-partial.d.ts +2 -2
- package/dist/src/data-list/record-partial.js +20 -18
- package/dist/src/data-list/record-partial.js.map +1 -1
- package/dist/src/data-manipulator.d.ts +6 -6
- package/dist/src/data-manipulator.js +44 -29
- package/dist/src/data-manipulator.js.map +1 -1
- package/dist/src/data-report/data-report-body.d.ts +1 -1
- package/dist/src/data-report/data-report-component.d.ts +1 -1
- package/dist/src/data-report.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-checkbox.d.ts +3 -2
- package/dist/src/editors/ox-grist-editor-checkbox.js +9 -2
- package/dist/src/editors/ox-grist-editor-checkbox.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-color.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-date.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-datetime.d.ts +2 -2
- package/dist/src/editors/ox-grist-editor-datetime.js +1 -2
- package/dist/src/editors/ox-grist-editor-datetime.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-email.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-file.d.ts +3 -2
- package/dist/src/editors/ox-grist-editor-file.js +8 -2
- package/dist/src/editors/ox-grist-editor-file.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-image.d.ts +2 -2
- package/dist/src/editors/ox-grist-editor-image.js +8 -8
- package/dist/src/editors/ox-grist-editor-image.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-month.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-multiple-select.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-number.d.ts +3 -2
- package/dist/src/editors/ox-grist-editor-number.js +10 -9
- package/dist/src/editors/ox-grist-editor-number.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-password.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-select.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-tel.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-text.d.ts +2 -1
- package/dist/src/editors/ox-grist-editor-text.js +3 -0
- package/dist/src/editors/ox-grist-editor-text.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-textarea.d.ts +2 -1
- package/dist/src/editors/ox-grist-editor-textarea.js +3 -0
- package/dist/src/editors/ox-grist-editor-textarea.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-time.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-tree.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-week.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor.d.ts +4 -4
- package/dist/src/editors/ox-grist-editor.js +14 -12
- package/dist/src/editors/ox-grist-editor.js.map +1 -1
- package/dist/src/editors/ox-input-tree.d.ts +1 -1
- package/dist/src/empty-note.d.ts +2 -2
- package/dist/src/empty-note.js +3 -3
- package/dist/src/empty-note.js.map +1 -1
- package/dist/src/filters/filter-checkbox.js +12 -5
- package/dist/src/filters/filter-checkbox.js.map +1 -1
- package/dist/src/filters/filter-range-date.js +12 -1
- package/dist/src/filters/filter-range-date.js.map +1 -1
- package/dist/src/filters/filter-styles.js +47 -28
- package/dist/src/filters/filter-styles.js.map +1 -1
- package/dist/src/filters/filters-form.d.ts +1 -0
- package/dist/src/filters/filters-form.js +71 -50
- package/dist/src/filters/filters-form.js.map +1 -1
- package/dist/src/gutters/gutter-button.d.ts +1 -1
- package/dist/src/gutters/gutter-button.js +3 -3
- package/dist/src/gutters/gutter-button.js.map +1 -1
- package/dist/src/gutters/gutter-dirty.d.ts +1 -1
- package/dist/src/gutters/gutter-dirty.js +5 -5
- package/dist/src/gutters/gutter-dirty.js.map +1 -1
- package/dist/src/handlers/contextmenu-tree-mutation.js +5 -23
- package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/record-view/record-creator.d.ts +2 -2
- package/dist/src/record-view/record-creator.js +1 -1
- package/dist/src/record-view/record-creator.js.map +1 -1
- package/dist/src/record-view/record-view-body.d.ts +3 -3
- package/dist/src/record-view/record-view-body.js +4 -4
- package/dist/src/record-view/record-view-body.js.map +1 -1
- package/dist/src/record-view/record-view.d.ts +2 -2
- package/dist/src/record-view/record-view.js +5 -5
- package/dist/src/record-view/record-view.js.map +1 -1
- package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
- package/dist/src/sorters/sorters-control.js +3 -3
- package/dist/src/sorters/sorters-control.js.map +1 -1
- package/dist/src/types.d.ts +1 -8
- package/dist/src/types.js.map +1 -1
- package/dist/stories/accumulator.stories.d.ts +1 -1
- package/dist/stories/accumulator.stories.js +55 -127
- package/dist/stories/accumulator.stories.js.map +1 -1
- package/dist/stories/barcode-input-filter.stories.d.ts +1 -1
- package/dist/stories/barcode-input-filter.stories.js +41 -79
- package/dist/stories/barcode-input-filter.stories.js.map +1 -1
- package/dist/stories/default-filters.stories.d.ts +1 -1
- package/dist/stories/default-filters.stories.js +41 -79
- package/dist/stories/default-filters.stories.js.map +1 -1
- package/dist/stories/dynamic-editable.stories.d.ts +1 -1
- package/dist/stories/dynamic-editable.stories.js +61 -86
- package/dist/stories/dynamic-editable.stories.js.map +1 -1
- package/dist/stories/empty-sorters.stories.d.ts +1 -1
- package/dist/stories/empty-sorters.stories.js +41 -78
- package/dist/stories/empty-sorters.stories.js.map +1 -1
- package/dist/stories/explicit-fetch.stories.d.ts +1 -1
- package/dist/stories/explicit-fetch.stories.js +42 -79
- package/dist/stories/explicit-fetch.stories.js.map +1 -1
- package/dist/stories/fixed-column.stories.d.ts +1 -1
- package/dist/stories/fixed-column.stories.js +45 -127
- package/dist/stories/fixed-column.stories.js.map +1 -1
- package/dist/stories/grid-setting.stories.d.ts +36 -0
- package/dist/stories/grid-setting.stories.js +403 -0
- package/dist/stories/grid-setting.stories.js.map +1 -0
- package/dist/stories/grist-modes.stories.d.ts +1 -1
- package/dist/stories/grist-modes.stories.js +74 -140
- package/dist/stories/grist-modes.stories.js.map +1 -1
- package/dist/stories/group-header.stories.d.ts +1 -1
- package/dist/stories/group-header.stories.js +45 -127
- package/dist/stories/group-header.stories.js.map +1 -1
- package/dist/stories/textarea.stories.d.ts +1 -1
- package/dist/stories/textarea.stories.js +39 -121
- package/dist/stories/textarea.stories.js.map +1 -1
- package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
- package/dist/stories/tree-column-with-checkbox.stories.js +49 -136
- package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
- package/dist/stories/tree-column.stories.d.ts +1 -1
- package/dist/stories/tree-column.stories.js +49 -136
- package/dist/stories/tree-column.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/default-value/default-value.md +1 -1
- package/docs/default-value/value-generator/date-generator.md +2 -2
- package/docs/default-value/value-generator/month-date-generator.md +2 -2
- package/docs/default-value/value-generator/week-date-generator.md +2 -2
- package/docs/default-value/value-generator/year-date-generator.md +2 -2
- package/package.json +21 -20
- package/src/configure/rows-option-builder.ts +11 -1
- package/src/configure/zero-config.ts +1 -0
- package/src/data-card/data-card-gutter-menu.ts +5 -5
- package/src/data-card/data-card.ts +3 -3
- package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
- package/src/data-card/record-card.ts +30 -32
- package/src/data-grid/data-grid-accum-field.ts +8 -3
- package/src/data-grid/data-grid-body.ts +10 -5
- package/src/data-grid/data-grid-field.ts +1 -1
- package/src/data-grid/data-grid-footer.ts +18 -11
- package/src/data-grid/data-grid-header.ts +68 -65
- package/src/data-grid/data-grid.ts +14 -4
- package/src/data-grist.ts +275 -27
- package/src/data-list/data-list-gutter.ts +12 -0
- package/src/data-list/data-list.ts +3 -3
- package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
- package/src/data-list/record-partial.ts +22 -22
- package/src/data-manipulator.ts +52 -31
- package/src/editors/ox-grist-editor-checkbox.ts +12 -2
- package/src/editors/ox-grist-editor-datetime.ts +1 -2
- package/src/editors/ox-grist-editor-file.ts +12 -2
- package/src/editors/ox-grist-editor-image.ts +10 -7
- package/src/editors/ox-grist-editor-number.ts +11 -9
- package/src/editors/ox-grist-editor-text.ts +4 -0
- package/src/editors/ox-grist-editor-textarea.ts +4 -0
- package/src/editors/ox-grist-editor.ts +14 -10
- package/src/empty-note.ts +3 -3
- package/src/filters/filter-checkbox.ts +15 -5
- package/src/filters/filter-range-date.ts +16 -1
- package/src/filters/filter-styles.ts +47 -28
- package/src/filters/filters-form.ts +76 -50
- package/src/gutters/gutter-button.ts +3 -3
- package/src/gutters/gutter-dirty.ts +5 -5
- package/src/handlers/contextmenu-tree-mutation.ts +5 -23
- package/src/index.ts +0 -1
- package/src/record-view/record-creator.ts +1 -1
- package/src/record-view/record-view-body.ts +4 -4
- package/src/record-view/record-view.ts +5 -5
- package/src/sorters/sorters-control.ts +3 -3
- package/src/types.ts +1 -9
- package/stories/accumulator.stories.ts +54 -129
- package/stories/barcode-input-filter.stories.ts +53 -89
- package/stories/default-filters.stories.ts +53 -89
- package/stories/dynamic-editable.stories.ts +68 -92
- package/stories/empty-sorters.stories.ts +53 -89
- package/stories/explicit-fetch.stories.ts +54 -90
- package/stories/fixed-column.stories.ts +57 -137
- package/stories/grid-setting.stories.ts +441 -0
- package/stories/grist-modes.stories.ts +86 -155
- package/stories/group-header.stories.ts +57 -137
- package/stories/textarea.stories.ts +42 -127
- package/stories/tree-column-with-checkbox.stories.ts +53 -138
- package/stories/tree-column.stories.ts +53 -138
- package/themes/grist-theme.css +1 -1
- package/dist/src/value-generator/date-generator.d.ts +0 -6
- package/dist/src/value-generator/date-generator.js +0 -30
- package/dist/src/value-generator/date-generator.js.map +0 -1
- package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
- package/dist/src/value-generator/hour-time-generator.js +0 -29
- package/dist/src/value-generator/hour-time-generator.js.map +0 -1
- package/dist/src/value-generator/index.d.ts +0 -1
- package/dist/src/value-generator/index.js +0 -2
- package/dist/src/value-generator/index.js.map +0 -1
- package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
- package/dist/src/value-generator/minute-time-generator.js +0 -29
- package/dist/src/value-generator/minute-time-generator.js.map +0 -1
- package/dist/src/value-generator/month-date-generator.d.ts +0 -7
- package/dist/src/value-generator/month-date-generator.js +0 -31
- package/dist/src/value-generator/month-date-generator.js.map +0 -1
- package/dist/src/value-generator/now-generator.d.ts +0 -4
- package/dist/src/value-generator/now-generator.js +0 -8
- package/dist/src/value-generator/now-generator.js.map +0 -1
- package/dist/src/value-generator/registry.d.ts +0 -11
- package/dist/src/value-generator/registry.js +0 -50
- package/dist/src/value-generator/registry.js.map +0 -1
- package/dist/src/value-generator/time-generator.d.ts +0 -6
- package/dist/src/value-generator/time-generator.js +0 -28
- package/dist/src/value-generator/time-generator.js.map +0 -1
- package/dist/src/value-generator/today-generator.d.ts +0 -4
- package/dist/src/value-generator/today-generator.js +0 -8
- package/dist/src/value-generator/today-generator.js.map +0 -1
- package/dist/src/value-generator/week-date-generator.d.ts +0 -7
- package/dist/src/value-generator/week-date-generator.js +0 -29
- package/dist/src/value-generator/week-date-generator.js.map +0 -1
- package/dist/src/value-generator/year-date-generator.d.ts +0 -7
- package/dist/src/value-generator/year-date-generator.js +0 -29
- package/dist/src/value-generator/year-date-generator.js.map +0 -1
- package/src/value-generator/date-generator.ts +0 -35
- package/src/value-generator/hour-time-generator.ts +0 -43
- package/src/value-generator/index.ts +0 -1
- package/src/value-generator/minute-time-generator.ts +0 -43
- package/src/value-generator/month-date-generator.ts +0 -38
- package/src/value-generator/now-generator.ts +0 -10
- package/src/value-generator/registry.ts +0 -58
- package/src/value-generator/time-generator.ts +0 -33
- package/src/value-generator/today-generator.ts +0 -10
- package/src/value-generator/week-date-generator.ts +0 -40
- package/src/value-generator/year-date-generator.ts +0 -36
package/src/data-manipulator.ts
CHANGED
@@ -64,14 +64,16 @@ export class DataManipulator extends LitElement {
|
|
64
64
|
})
|
65
65
|
|
66
66
|
/* tree processing */
|
67
|
-
this.addEventListener('collapse-all', (e: Event) => this.
|
68
|
-
this.addEventListener('expand-all', (e: Event) => this.
|
69
|
-
this.addEventListener('collapse-node', (e: Event) => this.
|
70
|
-
this.addEventListener('expand-node', (e: Event) => this.
|
67
|
+
this.addEventListener('collapse-all', (e: Event) => this.collapseAll())
|
68
|
+
this.addEventListener('expand-all', (e: Event) => this.expandAll())
|
69
|
+
this.addEventListener('collapse-node', (e: Event) => this.collapseNode((e as CustomEvent).detail as GristRecord))
|
70
|
+
this.addEventListener('expand-node', (e: Event) => this.expandNode((e as CustomEvent).detail as GristRecord))
|
71
71
|
this.addEventListener('check-in-tree', (e: Event) => this.onCheckInTree(e as CustomEvent))
|
72
72
|
|
73
|
-
this.addEventListener('add-sibling-node', (e: Event) =>
|
74
|
-
|
73
|
+
this.addEventListener('add-sibling-node', (e: Event) =>
|
74
|
+
this.addSiblingNode((e as CustomEvent).detail as GristRecord)
|
75
|
+
)
|
76
|
+
this.addEventListener('add-child-node', (e: Event) => this.addChildNode((e as CustomEvent).detail as GristRecord))
|
75
77
|
}
|
76
78
|
|
77
79
|
onFieldChange({
|
@@ -212,36 +214,46 @@ export class DataManipulator extends LitElement {
|
|
212
214
|
this.requestUpdate()
|
213
215
|
}
|
214
216
|
|
215
|
-
|
217
|
+
collapseAll() {
|
216
218
|
this.refresh(false)
|
217
219
|
}
|
218
220
|
|
219
|
-
|
221
|
+
expandAll() {
|
220
222
|
this.refresh(true)
|
221
223
|
}
|
222
224
|
|
223
|
-
|
224
|
-
const record = e.detail as GristRecord
|
225
|
+
collapseNode(record: GristRecord) {
|
225
226
|
record.__expanded__ = false
|
226
227
|
|
227
228
|
this.refresh()
|
228
229
|
}
|
229
230
|
|
230
|
-
|
231
|
-
const record = e.detail as GristRecord
|
231
|
+
expandNode(record: GristRecord) {
|
232
232
|
record.__expanded__ = true
|
233
233
|
|
234
234
|
this.refresh()
|
235
235
|
}
|
236
236
|
|
237
|
-
|
237
|
+
// onCollapse(e: CustomEvent) {
|
238
|
+
// const record = e.detail as GristRecord
|
239
|
+
// record.__expanded__ = false
|
240
|
+
|
241
|
+
// this.refresh()
|
242
|
+
// }
|
243
|
+
|
244
|
+
// onExpand(e: CustomEvent) {
|
245
|
+
// const record = e.detail as GristRecord
|
246
|
+
// record.__expanded__ = true
|
247
|
+
|
248
|
+
// this.refresh()
|
249
|
+
// }
|
250
|
+
|
251
|
+
addSiblingNode(record: GristRecord) {
|
238
252
|
const { records } = this.data
|
239
253
|
const toplevelRecords = records.filter(
|
240
254
|
record => !record.__depth__
|
241
255
|
) /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */
|
242
256
|
|
243
|
-
const field = e.detail
|
244
|
-
const { record } = field
|
245
257
|
const { __depth__ } = record as GristRecord
|
246
258
|
|
247
259
|
function findParent(record: GristRecord, parent?: GristRecord): GristRecord | undefined {
|
@@ -264,15 +276,27 @@ export class DataManipulator extends LitElement {
|
|
264
276
|
const sibling = {
|
265
277
|
__depth__,
|
266
278
|
__dirty__: '+'
|
267
|
-
}
|
279
|
+
} as GristRecord
|
268
280
|
|
269
281
|
if (parent) {
|
270
|
-
const {
|
282
|
+
const { id } = parent as GristRecord
|
271
283
|
|
272
|
-
|
284
|
+
sibling.parent = { id }
|
285
|
+
|
286
|
+
if (!parent.__children__) {
|
273
287
|
parent.__children__ = [sibling]
|
274
288
|
} else {
|
275
|
-
|
289
|
+
let index = parent.__children__.indexOf(record)
|
290
|
+
|
291
|
+
if (index !== -1) {
|
292
|
+
parent.__children__ = [
|
293
|
+
...parent.__children__.slice(0, index + 1),
|
294
|
+
sibling,
|
295
|
+
...parent.__children__.slice(index + 1)
|
296
|
+
]
|
297
|
+
} else {
|
298
|
+
parent.__children__ = [...parent.__children__, sibling]
|
299
|
+
}
|
276
300
|
}
|
277
301
|
|
278
302
|
parent.__expanded__ = true
|
@@ -283,25 +307,25 @@ export class DataManipulator extends LitElement {
|
|
283
307
|
this.refresh()
|
284
308
|
}
|
285
309
|
|
286
|
-
|
287
|
-
const
|
288
|
-
const { record } = field
|
289
|
-
|
290
|
-
const { __children__, __depth__, __seq__ } = record as GristRecord
|
310
|
+
addChildNode(record: GristRecord) {
|
311
|
+
const { id: parentId, __children__, __depth__ } = record as GristRecord
|
291
312
|
const child = {
|
313
|
+
parent: {
|
314
|
+
id: parentId
|
315
|
+
},
|
292
316
|
__depth__: (__depth__ || 0) + 1,
|
293
317
|
__dirty__: '+'
|
294
318
|
}
|
295
319
|
|
296
|
-
if (!__children__) {
|
320
|
+
if (!record.__children__) {
|
297
321
|
record.__children__ = [child]
|
298
322
|
} else {
|
299
|
-
record.__children__.
|
323
|
+
record.__children__.unshift(child)
|
300
324
|
}
|
301
325
|
|
302
326
|
record.__expanded__ = true
|
303
327
|
|
304
|
-
|
328
|
+
// this.requestUpdate()
|
305
329
|
|
306
330
|
this.refresh()
|
307
331
|
}
|
@@ -388,10 +412,7 @@ export class DataManipulator extends LitElement {
|
|
388
412
|
|
389
413
|
private traverseRefresh(record: GristRecord, forceExpandOrCollapse?: boolean): GristRecord[] {
|
390
414
|
if (forceExpandOrCollapse !== undefined) {
|
391
|
-
record =
|
392
|
-
...record,
|
393
|
-
__expanded__: forceExpandOrCollapse
|
394
|
-
}
|
415
|
+
record.__expanded__ = forceExpandOrCollapse
|
395
416
|
}
|
396
417
|
|
397
418
|
const { __expanded__, __children__ = [] } = record
|
@@ -4,8 +4,18 @@ import { html } from 'lit'
|
|
4
4
|
|
5
5
|
@customElement('ox-grist-editor-checkbox')
|
6
6
|
export class OxGristEditorCheckbox extends OxGristEditor {
|
7
|
-
|
8
|
-
|
7
|
+
_onchange(e: Event) {
|
8
|
+
e.stopPropagation()
|
9
|
+
|
10
|
+
const input = e.target as HTMLInputElement
|
11
|
+
|
12
|
+
this._dirtyValue = this.formatFromEditor(input.checked)
|
13
|
+
}
|
14
|
+
|
15
|
+
formatFromEditor(value: any) {
|
16
|
+
if (typeof value == 'boolean') {
|
17
|
+
return value
|
18
|
+
}
|
9
19
|
}
|
10
20
|
|
11
21
|
formatForEditor(value: any): any {
|
@@ -15,8 +15,7 @@ export class OxGristEditorDateTime extends OxGristEditor {
|
|
15
15
|
return new Date(timestamp - tzoffset).toISOString().slice(0, -1)
|
16
16
|
}
|
17
17
|
|
18
|
-
formatFromEditor(
|
19
|
-
var value = (e.target as HTMLInputElement).value
|
18
|
+
formatFromEditor(value: any) {
|
20
19
|
var datetime = new Date(value)
|
21
20
|
|
22
21
|
return datetime.getTime()
|
@@ -5,8 +5,18 @@ import { OxGristEditor } from './ox-grist-editor.js'
|
|
5
5
|
|
6
6
|
@customElement('ox-grist-editor-file')
|
7
7
|
export class OxGristEditorFile extends OxGristEditor {
|
8
|
-
|
9
|
-
|
8
|
+
_onchange(e: Event) {
|
9
|
+
e.stopPropagation()
|
10
|
+
|
11
|
+
const input = e.target as HTMLInputElement
|
12
|
+
|
13
|
+
this._dirtyValue = this.formatFromEditor(input.files)
|
14
|
+
|
15
|
+
this._onfocusout()
|
16
|
+
}
|
17
|
+
|
18
|
+
formatFromEditor(value: any): any {
|
19
|
+
return value
|
10
20
|
}
|
11
21
|
|
12
22
|
get editorTemplate() {
|
@@ -12,17 +12,20 @@ export class OxGristEditorImage extends OxGristEditor {
|
|
12
12
|
|
13
13
|
_onchange(e: Event) {
|
14
14
|
e.stopPropagation()
|
15
|
-
this._dirtyValue = this.formatFromEditor(e)
|
16
|
-
this._onfocusout()
|
17
|
-
}
|
18
15
|
|
19
|
-
formatFromEditor(e: Event) {
|
20
|
-
// value가 image file object인지, image url인지 확인
|
21
16
|
const input = e.target as HTMLInputElement
|
17
|
+
|
18
|
+
// value가 image file object인지, image url인지 확인
|
22
19
|
if (input.files?.[0]) {
|
23
|
-
|
20
|
+
this._dirtyValue = this.formatFromEditor(input.files[0])
|
24
21
|
} else {
|
25
|
-
|
22
|
+
this._dirtyValue = this.formatFromEditor(input.value)
|
26
23
|
}
|
24
|
+
|
25
|
+
this._onfocusout()
|
26
|
+
}
|
27
|
+
|
28
|
+
formatFromEditor(value: any) {
|
29
|
+
return value
|
27
30
|
}
|
28
31
|
}
|
@@ -1,20 +1,22 @@
|
|
1
1
|
import { OxGristEditor } from './ox-grist-editor.js'
|
2
2
|
import { customElement } from 'lit/decorators.js'
|
3
3
|
import { html } from 'lit'
|
4
|
+
import { parseToNumberOrNull } from '@operato/utils'
|
4
5
|
|
5
6
|
@customElement('ox-grist-editor-number')
|
6
7
|
export class OxGristEditorNumber extends OxGristEditor {
|
7
|
-
|
8
|
-
|
8
|
+
get inlineEditable() {
|
9
|
+
return true
|
10
|
+
}
|
11
|
+
|
12
|
+
formatFromEditor(value: any) {
|
13
|
+
const parsed = parseToNumberOrNull(value) ?? null
|
9
14
|
|
10
|
-
|
11
|
-
|
12
|
-
return Number.parseFloat(value)
|
13
|
-
case 'integer':
|
14
|
-
return Number.parseInt(value)
|
15
|
-
default:
|
16
|
-
return Number(value)
|
15
|
+
if (parsed !== null && this.column.type == 'integer') {
|
16
|
+
return Math.floor(parsed)
|
17
17
|
}
|
18
|
+
|
19
|
+
return parsed
|
18
20
|
}
|
19
21
|
|
20
22
|
get editorTemplate() {
|
@@ -4,6 +4,10 @@ import { html } from 'lit'
|
|
4
4
|
|
5
5
|
@customElement('ox-grist-editor-text')
|
6
6
|
export class OxGristEditorText extends OxGristEditor {
|
7
|
+
get inlineEditable() {
|
8
|
+
return true
|
9
|
+
}
|
10
|
+
|
7
11
|
get editorTemplate() {
|
8
12
|
return html` <input type="text" .value=${this.value} /> `
|
9
13
|
}
|
@@ -6,6 +6,10 @@ import { html } from 'lit'
|
|
6
6
|
|
7
7
|
@customElement('ox-grist-editor-textarea')
|
8
8
|
export class OxGristEditorTextarea extends OxGristEditor {
|
9
|
+
get inlineEditable() {
|
10
|
+
return true
|
11
|
+
}
|
12
|
+
|
9
13
|
get editorTemplate() {
|
10
14
|
return html` <ox-input-textarea .value=${this.value}></ox-input-textarea> `
|
11
15
|
}
|
@@ -4,7 +4,7 @@ import { customElement, property } from 'lit/decorators.js'
|
|
4
4
|
import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'
|
5
5
|
import { DataGridField } from '../data-grid/data-grid-field'
|
6
6
|
import { ColumnConfig, GristRecord } from '../types'
|
7
|
-
import { getDefaultValue } from '
|
7
|
+
import { getDefaultValue } from '@operato/time-calculator'
|
8
8
|
|
9
9
|
const STYLE = css`
|
10
10
|
:host {
|
@@ -91,8 +91,8 @@ export class OxGristEditor extends LitElement {
|
|
91
91
|
return this.renderRoot.firstElementChild as HTMLElement
|
92
92
|
}
|
93
93
|
|
94
|
-
get
|
95
|
-
return
|
94
|
+
get inlineEditable() {
|
95
|
+
return false
|
96
96
|
}
|
97
97
|
|
98
98
|
async firstUpdated() {
|
@@ -121,19 +121,21 @@ export class OxGristEditor extends LitElement {
|
|
121
121
|
currentValue = getDefaultValue(defaultValue, this.record)
|
122
122
|
}
|
123
123
|
|
124
|
+
this.value = this._dirtyValue = this.formatForEditor(currentValue)
|
125
|
+
|
124
126
|
// 입력을 위한 키를 누르면서 편집모드가 될때는 누른 키가 처음에 입력되도록, enter 같은 것을 눌러서 편집모드가 되면 현재 값으로 편집모드 전환
|
125
|
-
const
|
126
|
-
this.value = this._dirtyValue =
|
127
|
+
const valueWith = this.inlineEditable && this.field?.valueWith
|
128
|
+
this.value = this._dirtyValue = valueWith ? this.formatFromEditor(valueWith) : this.formatForEditor(currentValue)
|
127
129
|
|
128
130
|
requestAnimationFrame(() => {
|
129
131
|
this.focus()
|
130
|
-
this.select()
|
132
|
+
!valueWith && this.select()
|
131
133
|
})
|
132
134
|
}
|
133
135
|
|
134
136
|
select() {
|
135
137
|
const editor = this.editor
|
136
|
-
if ((editor as HTMLInputElement)?.select
|
138
|
+
if ((editor as HTMLInputElement)?.select) {
|
137
139
|
return (editor as HTMLInputElement).select()
|
138
140
|
}
|
139
141
|
}
|
@@ -149,8 +151,8 @@ export class OxGristEditor extends LitElement {
|
|
149
151
|
return value == null ? '' : value
|
150
152
|
}
|
151
153
|
|
152
|
-
formatFromEditor(
|
153
|
-
return
|
154
|
+
formatFromEditor(value: any): any {
|
155
|
+
return value
|
154
156
|
}
|
155
157
|
|
156
158
|
_onfocusout() {
|
@@ -180,7 +182,9 @@ export class OxGristEditor extends LitElement {
|
|
180
182
|
_onchange(e: Event): void {
|
181
183
|
e.stopPropagation()
|
182
184
|
|
183
|
-
|
185
|
+
const value = (e.target as any)?.value
|
186
|
+
|
187
|
+
this._dirtyValue = this.formatFromEditor(value)
|
184
188
|
}
|
185
189
|
|
186
190
|
_onkeydown(e: Event): void {}
|
package/src/empty-note.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import '@material/
|
1
|
+
import '@material/web/icon/icon.js'
|
2
2
|
|
3
3
|
import { LitElement, css, html } from 'lit'
|
4
4
|
import { customElement, property } from 'lit/decorators.js'
|
@@ -11,7 +11,7 @@ export class EmptyNote extends LitElement {
|
|
11
11
|
text-align: center;
|
12
12
|
}
|
13
13
|
|
14
|
-
|
14
|
+
md-icon {
|
15
15
|
font: var(--oops-note-icon-font);
|
16
16
|
color: var(--oops-note-icon-color);
|
17
17
|
border: var(--oops-note-icon-border);
|
@@ -38,7 +38,7 @@ export class EmptyNote extends LitElement {
|
|
38
38
|
|
39
39
|
render() {
|
40
40
|
return html`
|
41
|
-
${this.icon ? html`<
|
41
|
+
${this.icon ? html`<md-icon>${this.icon}</md-icon>` : html``}
|
42
42
|
<div titler>${this.title}</div>
|
43
43
|
${this.description ? html`<div description>${this.description}</div>` : html``}
|
44
44
|
`
|
@@ -5,8 +5,16 @@ import { html } from 'lit-html'
|
|
5
5
|
import { FilterConfigObject, FilterSelectRenderer } from '../types.js'
|
6
6
|
|
7
7
|
export const FilterCheckbox: FilterSelectRenderer = (column, value, owner) => {
|
8
|
-
const filter = column
|
9
|
-
|
8
|
+
const { name, header, label, filter } = column
|
9
|
+
|
10
|
+
const { label: filterLabel, operator } = filter! as FilterConfigObject
|
11
|
+
|
12
|
+
const labelText =
|
13
|
+
filterLabel !== undefined
|
14
|
+
? filterLabel
|
15
|
+
: typeof label === 'object' && label.renderer
|
16
|
+
? label.renderer(column)
|
17
|
+
: header.renderer(column) || name
|
10
18
|
|
11
19
|
return html`
|
12
20
|
<ox-checkbox
|
@@ -14,19 +22,21 @@ export const FilterCheckbox: FilterSelectRenderer = (column, value, owner) => {
|
|
14
22
|
?checked=${value}
|
15
23
|
indeterminatable
|
16
24
|
?indeterminate=${value == null}
|
25
|
+
left-label
|
17
26
|
@change=${(e: CustomEvent) => {
|
18
27
|
;(e.target as HTMLElement).dispatchEvent(
|
19
28
|
new CustomEvent('filter-change', {
|
20
29
|
bubbles: true,
|
21
30
|
composed: true,
|
22
31
|
detail: {
|
23
|
-
name
|
24
|
-
operator
|
32
|
+
name,
|
33
|
+
operator,
|
25
34
|
value: (e.target as Element & { checked: boolean | undefined }).checked
|
26
35
|
}
|
27
36
|
})
|
28
37
|
)
|
29
38
|
}}
|
30
|
-
|
39
|
+
><label filter-title><span>${labelText}</span></label></ox-checkbox
|
40
|
+
>
|
31
41
|
`
|
32
42
|
}
|
@@ -2,16 +2,31 @@ import { FilterConfigObject, FilterSelectRenderer } from '../types'
|
|
2
2
|
|
3
3
|
import { html } from 'lit-html'
|
4
4
|
|
5
|
+
function formatDate(type: string, date: Date) {
|
6
|
+
var year = date.getFullYear()
|
7
|
+
var month = ('0' + (date.getMonth() + 1)).slice(-2)
|
8
|
+
var day = ('0' + date.getDate()).slice(-2)
|
9
|
+
var hours = ('0' + date.getHours()).slice(-2)
|
10
|
+
var minutes = ('0' + date.getMinutes()).slice(-2)
|
11
|
+
|
12
|
+
var formatDate = year + '-' + month + '-' + day
|
13
|
+
|
14
|
+
return type == 'date' ? formatDate : formatDate + 'T' + hours + ':' + minutes
|
15
|
+
}
|
16
|
+
|
5
17
|
export const FilterRangeDate: FilterSelectRenderer = (column, value, owner) => {
|
6
18
|
const filter = column.filter as FilterConfigObject
|
7
19
|
|
8
|
-
|
20
|
+
var [from, to] = value instanceof Array ? value : []
|
9
21
|
|
10
22
|
var type: any = filter?.type || column.type
|
11
23
|
if (type === 'datetime') {
|
12
24
|
type = 'datetime-local'
|
13
25
|
}
|
14
26
|
|
27
|
+
from = formatDate(type, new Date(from))
|
28
|
+
to = formatDate(type, new Date(to))
|
29
|
+
|
15
30
|
return html`
|
16
31
|
<input
|
17
32
|
name=${column.name}
|
@@ -2,56 +2,77 @@ import { css } from 'lit'
|
|
2
2
|
|
3
3
|
export const FilterStyles = css`
|
4
4
|
:host {
|
5
|
-
--ox-input-placeholder-color: var(--primary-color);
|
6
|
-
|
7
|
-
--ox-input-
|
8
|
-
--ox-input-border: 1px solid
|
9
|
-
--ox-input-
|
10
|
-
--ox-input-
|
11
|
-
--ox-input-
|
12
|
-
--ox-
|
13
|
-
|
14
|
-
--ox-filters-
|
15
|
-
|
16
|
-
--ox-filters-form-
|
17
|
-
--ox-
|
5
|
+
--ox-filters-input-placeholder-color: var(--input-placeholder-color, var(--primary-color));
|
6
|
+
|
7
|
+
--ox-filters-input-border: var(--input-border, 1px solid rgba(0, 0, 0, 0.2));
|
8
|
+
--ox-filters-input-focus-border: var(--input-focus-border, 1px solid var(--primary-color));
|
9
|
+
--ox-filters-input-font: var(--input-font, normal 14px var(--theme-font));
|
10
|
+
--ox-filters-input-color: var(--input-color, var(--primary-text-color));
|
11
|
+
--ox-filters-input-focus-color: var(--input-focus-color, var(--primary-color));
|
12
|
+
--ox-filters-label-font: var(--label-font, normal 14px var(--theme-font));
|
13
|
+
--ox-filters-label-color: var(--label-color, var(--primary-text-color));
|
14
|
+
--ox-filters-input-background-color: transparent;
|
15
|
+
|
16
|
+
--ox-filters-form-gap: var(--input-gap-vertical, 8px) var(--input-gap-horizontal, 16px);
|
17
|
+
--ox-filters-input-padding: var(--input-padding, 6px 2px);
|
18
|
+
|
19
|
+
--ox-select-padding: var(--ox-filters-input-padding);
|
20
|
+
--ox-checkbox-background-color: var(--ox-filters-input-background-color, transparent);
|
18
21
|
}
|
19
22
|
|
20
23
|
label {
|
21
|
-
font: var(--ox-filters-
|
22
|
-
color: var(--ox-filters-
|
24
|
+
font: var(--ox-filters-label-font);
|
25
|
+
color: var(--ox-filters-label-color);
|
23
26
|
}
|
27
|
+
|
24
28
|
span {
|
25
|
-
margin-right: var(--margin-narrow);
|
26
29
|
text-transform: capitalize;
|
27
30
|
}
|
28
31
|
|
29
32
|
input::placeholder {
|
30
|
-
color: var(--ox-input-placeholder-color);
|
33
|
+
color: var(--ox-filters-input-placeholder-color);
|
31
34
|
opacity: 0.6;
|
32
35
|
}
|
33
36
|
|
37
|
+
input {
|
38
|
+
padding: var(--ox-filters-input-padding);
|
39
|
+
}
|
40
|
+
|
41
|
+
label > span + *,
|
34
42
|
ox-select,
|
35
43
|
input {
|
36
|
-
padding: var(--input-padding);
|
37
44
|
border: none;
|
38
|
-
border-bottom: var(--ox-input-border);
|
39
|
-
font: var(--ox-input-font);
|
40
|
-
color: var(--ox-input-color);
|
45
|
+
border-bottom: var(--ox-filters-input-border);
|
46
|
+
font: var(--ox-filters-input-font);
|
47
|
+
color: var(--ox-filters-input-color);
|
48
|
+
background-color: var(--ox-filters-input-background-color, transparent);
|
49
|
+
}
|
50
|
+
|
51
|
+
label > span + * {
|
52
|
+
min-width: 120px;
|
41
53
|
}
|
42
54
|
|
43
55
|
ox-select:focus,
|
44
56
|
input:focus {
|
45
57
|
outline: none;
|
46
|
-
border-bottom: var(--ox-input-focus-border);
|
47
|
-
color: var(--
|
58
|
+
border-bottom: var(--ox-filters-input-focus-border);
|
59
|
+
color: var(--ox-filters-input-focus-color);
|
48
60
|
}
|
61
|
+
|
49
62
|
ox-select {
|
50
|
-
|
63
|
+
min-width: 100px;
|
64
|
+
max-width: 170px;
|
65
|
+
}
|
66
|
+
|
67
|
+
ox-input-barcode {
|
68
|
+
min-width: 150px;
|
69
|
+
}
|
70
|
+
|
71
|
+
ox-input-search {
|
72
|
+
max-width: 150px;
|
51
73
|
}
|
52
74
|
|
53
75
|
input[type='number'] {
|
54
|
-
padding-right: var(--padding-narrow);
|
55
76
|
max-width: 90px;
|
56
77
|
}
|
57
78
|
|
@@ -59,15 +80,13 @@ export const FilterStyles = css`
|
|
59
80
|
input[type*='time'],
|
60
81
|
input[type='week'],
|
61
82
|
input[type='month'] {
|
62
|
-
padding: 8px var(--padding-narrow) 8px var(--padding-default);
|
63
83
|
max-width: 170px;
|
64
84
|
}
|
65
85
|
|
66
86
|
@media only screen and (max-width: 460px) {
|
67
87
|
:host {
|
68
88
|
--ox-filters-form-label-font: bold 13px var(--theme-font);
|
69
|
-
--ox-input-font: normal 16px var(--theme-font);
|
70
|
-
--ox-filters-form-gap: var(--margin-narrow);
|
89
|
+
--ox-filters-input-font: normal 16px var(--theme-font);
|
71
90
|
}
|
72
91
|
|
73
92
|
input[from],
|