@operato/data-grist 2.0.0-alpha.11 → 2.0.0-alpha.111
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 +472 -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/column-builder.js.map +1 -1
- 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-style.js +1 -0
- package/dist/src/data-grid/data-grid-body-style.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 +1 -1
- package/dist/src/data-grist.js +23 -22
- 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-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-select.js +37 -25
- package/dist/src/editors/ox-grist-editor-select.js.map +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-select.js +30 -16
- package/dist/src/filters/filter-select.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 +7 -1
- package/dist/src/filters/filters-form.js +154 -71
- 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 +4 -22
- 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-select.js +34 -4
- package/dist/src/renderers/ox-grist-renderer-select.js.map +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 +15 -9
- package/dist/src/types.js.map +1 -1
- package/dist/stories/{accumulator.stories.d.ts → accumulator-format.stories.d.ts} +1 -1
- package/dist/stories/{accumulator.stories.js → accumulator-format.stories.js} +58 -129
- package/dist/stories/accumulator-format.stories.js.map +1 -0
- 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/bounded-select-filters.stories.d.ts +25 -0
- package/dist/stories/bounded-select-filters.stories.js +264 -0
- package/dist/stories/bounded-select-filters.stories.js.map +1 -0
- package/dist/stories/bounded-select-record.stories.d.ts +25 -0
- package/dist/stories/bounded-select-record.stories.js +267 -0
- package/dist/stories/bounded-select-record.stories.js.map +1 -0
- package/dist/stories/creatable-only-column.stories.d.ts +25 -0
- package/dist/stories/creatable-only-column.stories.js +211 -0
- package/dist/stories/creatable-only-column.stories.js.map +1 -0
- package/dist/stories/default-filters.stories.d.ts +1 -1
- package/dist/stories/default-filters.stories.js +84 -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 +31 -2
- package/docs/default-value/value-generator/hour-time-generator.md +33 -0
- package/docs/default-value/value-generator/minute-time-generator.md +33 -0
- package/docs/default-value/value-generator/month-date-generator.md +4 -2
- package/docs/default-value/value-generator/now-generator.md +29 -0
- package/docs/default-value/value-generator/time-generator.md +31 -0
- package/docs/default-value/value-generator/today-generator.md +29 -0
- package/docs/default-value/value-generator/week-date-generator.md +33 -2
- package/docs/default-value/value-generator/year-date-generator.md +33 -2
- package/package.json +21 -20
- package/src/configure/column-builder.ts +1 -0
- 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-style.ts +1 -0
- 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 +25 -24
- 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/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-select.ts +41 -28
- 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-select.ts +41 -28
- package/src/filters/filter-styles.ts +47 -28
- package/src/filters/filters-form.ts +159 -59
- package/src/gutters/gutter-button.ts +3 -3
- package/src/gutters/gutter-dirty.ts +5 -5
- package/src/handlers/contextmenu-tree-mutation.ts +4 -22
- 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/renderers/ox-grist-renderer-select.ts +41 -6
- package/src/sorters/sorters-control.ts +3 -3
- package/src/types.ts +20 -10
- package/stories/{accumulator.stories.ts → accumulator-format.stories.ts} +56 -130
- package/stories/barcode-input-filter.stories.ts +53 -89
- package/stories/bounded-select-filters.stories.ts +313 -0
- package/stories/bounded-select-record.stories.ts +316 -0
- package/stories/creatable-only-column.stories.ts +231 -0
- package/stories/default-filters.stories.ts +96 -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 +3 -1
- package/yarn-error.log +16971 -0
- 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/dist/stories/accumulator.stories.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
@@ -100,7 +100,7 @@ export class DataGridBody extends LitElement {
|
|
100
100
|
@property({ type: Array }) columns: ColumnConfig[] = []
|
101
101
|
@property({ type: Object }) data: GristData = ZERO_DATA
|
102
102
|
@property({ type: Object }) focused: { row: number; column: number } = ZERO_FOCUS
|
103
|
-
@property({ type: Object }) editTarget: { row: number; column: number;
|
103
|
+
@property({ type: Object }) editTarget: { row: number; column: number; valueWith: string | null } | null = null
|
104
104
|
@property({ type: Number }) from = -1
|
105
105
|
@property({ type: Number }) to = -1
|
106
106
|
@property({ type: Array }) fixedLefts: number[] = []
|
@@ -135,7 +135,7 @@ export class DataGridBody extends LitElement {
|
|
135
135
|
render() {
|
136
136
|
// block이 선택되어 있으면, focused row/column은 표현하지 않는다.
|
137
137
|
var { row: focusedRow, column: focusedColumn } = (!this._selectBlock && this.focused) || {}
|
138
|
-
var { row: editingRow, column: editingColumn,
|
138
|
+
var { row: editingRow, column: editingColumn, valueWith = null } = this.editTarget || {}
|
139
139
|
|
140
140
|
var columns = this.columns.filter(column => !column.hidden)
|
141
141
|
var data = this.data
|
@@ -182,7 +182,7 @@ export class DataGridBody extends LitElement {
|
|
182
182
|
?selected-row=${attrSelected}
|
183
183
|
?focused=${idxRow === focusedRow && idxColumn === focusedColumn}
|
184
184
|
?editing=${idxRow === editingRow && idxColumn === editingColumn}
|
185
|
-
.
|
185
|
+
.valueWith=${valueWith}
|
186
186
|
.value=${record[column.name]}
|
187
187
|
?dirty=${!!dirtyFields[column.name]}
|
188
188
|
fixed=${ifDefined(this.fixedLefts[idxColumn])}
|
@@ -400,7 +400,7 @@ export class DataGridBody extends LitElement {
|
|
400
400
|
}
|
401
401
|
}
|
402
402
|
|
403
|
-
startEditTarget(row: number, column: number,
|
403
|
+
startEditTarget(row: number, column: number, valueWith: string | null = null) {
|
404
404
|
var { editable } = this.columns.filter(column => !column.hidden)[column].record
|
405
405
|
if (typeof editable === 'function') {
|
406
406
|
const curRow = this.data.records[row] || {}
|
@@ -419,7 +419,7 @@ export class DataGridBody extends LitElement {
|
|
419
419
|
this.editTarget = {
|
420
420
|
row,
|
421
421
|
column,
|
422
|
-
|
422
|
+
valueWith
|
423
423
|
}
|
424
424
|
}
|
425
425
|
|
@@ -647,14 +647,19 @@ export class DataGridBody extends LitElement {
|
|
647
647
|
|
648
648
|
switch (type) {
|
649
649
|
case 'object':
|
650
|
+
case 'parameters':
|
650
651
|
try {
|
651
652
|
value = JSON.parse(value || 'null')
|
652
653
|
} catch (err) {}
|
653
654
|
break
|
654
655
|
case 'boolean':
|
656
|
+
case 'checkbox':
|
655
657
|
value = !!value && !!String(value).match(/true/i)
|
656
658
|
break
|
657
659
|
case 'number':
|
660
|
+
case 'float':
|
661
|
+
case 'integer':
|
662
|
+
case 'progress':
|
658
663
|
value = parseToNumberOrNull(value)
|
659
664
|
break
|
660
665
|
default:
|
@@ -87,7 +87,7 @@ export class DataGridField extends LitElement {
|
|
87
87
|
@property({ type: Number }) columnIndex = 0
|
88
88
|
@property({ type: Boolean }) editing = false
|
89
89
|
@property({ type: Object }) value = {}
|
90
|
-
@property({ type: String })
|
90
|
+
@property({ type: String }) valueWith: string | null = null
|
91
91
|
@property({ attribute: false }) emphasized: any = false
|
92
92
|
@property({ type: String }) fixed?: string
|
93
93
|
@property({ type: String }) type?: string
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import '@material/
|
1
|
+
import '@material/web/icon/icon.js'
|
2
2
|
|
3
3
|
import { css, html, LitElement } from 'lit'
|
4
4
|
import { customElement, property } from 'lit/decorators.js'
|
@@ -14,17 +14,18 @@ export class DataGridFooter extends LitElement {
|
|
14
14
|
:host {
|
15
15
|
display: flex;
|
16
16
|
flex-direction: row;
|
17
|
+
gap: 4px;
|
17
18
|
overflow: hidden;
|
18
19
|
|
19
20
|
padding: var(--grid-footer-padding);
|
20
21
|
background-color: var(--grid-footer-background-color);
|
21
22
|
font-size: var(--grid-footer-font-size);
|
23
|
+
align-items: center;
|
22
24
|
}
|
23
25
|
|
24
26
|
:host * {
|
25
27
|
white-space: nowrap;
|
26
28
|
overflow: hidden;
|
27
|
-
padding: 0 2px;
|
28
29
|
|
29
30
|
text-overflow: ellipsis;
|
30
31
|
text-align: center;
|
@@ -35,11 +36,18 @@ export class DataGridFooter extends LitElement {
|
|
35
36
|
flex: 1;
|
36
37
|
}
|
37
38
|
|
38
|
-
|
39
|
+
md-icon {
|
39
40
|
font-size: 1.5em;
|
40
41
|
vertical-align: middle;
|
41
42
|
}
|
42
43
|
|
44
|
+
.limit {
|
45
|
+
display: flex;
|
46
|
+
flex-direction: row;
|
47
|
+
gap: 6px;
|
48
|
+
align-items: center;
|
49
|
+
}
|
50
|
+
|
43
51
|
.limit a {
|
44
52
|
color: var(--grid-footer-limit-color);
|
45
53
|
}
|
@@ -82,20 +90,19 @@ export class DataGridFooter extends LitElement {
|
|
82
90
|
var totalPage = Math.max(1, Math.ceil(total / limit))
|
83
91
|
|
84
92
|
return html`
|
85
|
-
<a ?inactive=${page <= 1} @click=${() => this._gotoPage(1)}><
|
86
|
-
<a ?inactive=${page <= 1} @click=${() => this._gotoPage(page - 1)}><
|
93
|
+
<a ?inactive=${page <= 1} @click=${() => this._gotoPage(1)}><md-icon>skip_previous</md-icon></a>
|
94
|
+
<a ?inactive=${page <= 1} @click=${() => this._gotoPage(page - 1)}><md-icon>navigate_before</md-icon></a>
|
87
95
|
<span>page <strong>${page}</strong> / ${totalPage}</span>
|
88
|
-
<a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(page + 1)}><
|
89
|
-
<a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(totalPage)}><
|
96
|
+
<a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(page + 1)}><md-icon>navigate_next</md-icon></a>
|
97
|
+
<a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(totalPage)}><md-icon>skip_next</md-icon></a>
|
90
98
|
|
91
99
|
<span class="filler"></span>
|
92
100
|
|
93
101
|
<span class="limit">
|
94
102
|
${pages.map(
|
95
|
-
size =>
|
96
|
-
|
97
|
-
|
98
|
-
`
|
103
|
+
size => html`
|
104
|
+
<a ?selected=${limit == size} @click=${() => this._changeLimit(size)}>${stringifyBigNumber(size)}</a>
|
105
|
+
`
|
99
106
|
)}
|
100
107
|
records
|
101
108
|
</span>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import '@operato/popup/ox-popup.js'
|
2
|
-
import '@material/
|
2
|
+
import '@material/web/icon/icon.js'
|
3
3
|
|
4
4
|
import { css, html, LitElement, PropertyValues, nothing, TemplateResult } from 'lit'
|
5
5
|
import { customElement, property, state } from 'lit/decorators.js'
|
@@ -22,6 +22,7 @@ export class DataGridHeader extends LitElement {
|
|
22
22
|
TooltipStyles,
|
23
23
|
css`
|
24
24
|
:host {
|
25
|
+
position: relative;
|
25
26
|
display: grid;
|
26
27
|
grid-template-columns: var(--grid-template-columns);
|
27
28
|
|
@@ -62,7 +63,7 @@ export class DataGridHeader extends LitElement {
|
|
62
63
|
align-self: center;
|
63
64
|
}
|
64
65
|
|
65
|
-
span[for-title]
|
66
|
+
span[for-title] md-icon {
|
66
67
|
font-size: var(--grid-record-fontsize);
|
67
68
|
}
|
68
69
|
|
@@ -75,11 +76,11 @@ export class DataGridHeader extends LitElement {
|
|
75
76
|
border: 0;
|
76
77
|
}
|
77
78
|
|
78
|
-
span[sorter]
|
79
|
+
span[sorter] md-icon {
|
79
80
|
font-size: var(--grid-header-sorter-size);
|
80
81
|
}
|
81
82
|
|
82
|
-
span[filter] >
|
83
|
+
span[filter] > md-icon {
|
83
84
|
font-size: var(--fontsize-default);
|
84
85
|
line-height: 20px;
|
85
86
|
}
|
@@ -104,7 +105,7 @@ export class DataGridHeader extends LitElement {
|
|
104
105
|
vertical-align: middle;
|
105
106
|
}
|
106
107
|
|
107
|
-
[filter-title]
|
108
|
+
[filter-title] md-icon {
|
108
109
|
opacity: 0.7;
|
109
110
|
color: var(--grid-header-filter-title-icon-color);
|
110
111
|
}
|
@@ -363,12 +364,10 @@ export class DataGridHeader extends LitElement {
|
|
363
364
|
if (sorters.length > 1) {
|
364
365
|
var rank = sorters.indexOf(sorter) + 1
|
365
366
|
return sorter.desc
|
366
|
-
? html` <
|
367
|
-
: html` <
|
367
|
+
? html` <md-icon>keyboard_arrow_down</md-icon><sub>${rank}</sub> `
|
368
|
+
: html` <md-icon>keyboard_arrow_up</md-icon><sub>${rank}</sub> `
|
368
369
|
} else {
|
369
|
-
return sorter.desc
|
370
|
-
? html` <mwc-icon>keyboard_arrow_down</mwc-icon> `
|
371
|
-
: html` <mwc-icon>keyboard_arrow_up</mwc-icon> `
|
370
|
+
return sorter.desc ? html` <md-icon>keyboard_arrow_down</md-icon> ` : html` <md-icon>keyboard_arrow_up</md-icon> `
|
372
371
|
}
|
373
372
|
}
|
374
373
|
|
@@ -381,7 +380,7 @@ export class DataGridHeader extends LitElement {
|
|
381
380
|
const renderer = getFilterRenderer(type)[idx]
|
382
381
|
|
383
382
|
return html`
|
384
|
-
<
|
383
|
+
<md-icon
|
385
384
|
@click=${(e: Event) => {
|
386
385
|
const parent = (e.target as HTMLElement).closest('[column]') as HTMLElement
|
387
386
|
const popup = parent.querySelector('ox-popup, ox-popup-list') as OxPopup | null
|
@@ -398,63 +397,63 @@ export class DataGridHeader extends LitElement {
|
|
398
397
|
top
|
399
398
|
})
|
400
399
|
}}
|
401
|
-
>filter_alt</
|
400
|
+
>filter_alt</md-icon
|
402
401
|
>
|
403
402
|
|
404
403
|
${!renderer
|
405
404
|
? html``
|
406
405
|
: type !== 'select'
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
406
|
+
? html` <ox-popup
|
407
|
+
><div filter-title><md-icon>filter_alt</md-icon> filter by <strong>${column.name}</strong></div>
|
408
|
+
${renderer(column, value, this)}</ox-popup
|
409
|
+
>`
|
410
|
+
: filter!.operator === 'in'
|
411
|
+
? html`<ox-popup-list
|
412
|
+
multiple
|
413
|
+
attr-selected="checked"
|
414
|
+
.value=${value}
|
415
|
+
with-search
|
416
|
+
@select=${(e: CustomEvent) =>
|
417
|
+
e.target?.dispatchEvent(
|
418
|
+
new CustomEvent('filter-change', {
|
419
|
+
bubbles: true,
|
420
|
+
composed: true,
|
421
|
+
detail: {
|
422
|
+
name,
|
423
|
+
operator: filter!.operator,
|
424
|
+
value: !e.detail
|
425
|
+
? undefined
|
426
|
+
: e.detail instanceof Array && e.detail.length === 0
|
427
|
+
? undefined
|
428
|
+
: e.detail
|
429
|
+
}
|
430
|
+
})
|
431
|
+
)}
|
432
|
+
><div filter-title slot="header">
|
433
|
+
<md-icon>filter_alt</md-icon> filter by <strong>${column.name}</strong>
|
434
|
+
</div>
|
435
|
+
${renderer(column, value, this)}</ox-popup-list
|
436
|
+
>`
|
437
|
+
: html`<ox-popup-list
|
438
|
+
.value=${value}
|
439
|
+
with-search
|
440
|
+
@select=${(e: CustomEvent) =>
|
441
|
+
e.target?.dispatchEvent(
|
442
|
+
new CustomEvent('filter-change', {
|
443
|
+
bubbles: true,
|
444
|
+
composed: true,
|
445
|
+
detail: {
|
446
|
+
name,
|
447
|
+
operator: filter!.operator,
|
448
|
+
value: e.detail ? e.detail : undefined
|
449
|
+
}
|
450
|
+
})
|
451
|
+
)}
|
452
|
+
><div filter-title slot="header">
|
453
|
+
<md-icon>filter_alt</md-icon> filter by <strong>${column.name}</strong>
|
454
|
+
</div>
|
455
|
+
${renderer(column, value, this)}</ox-popup-list
|
456
|
+
>`}
|
458
457
|
`
|
459
458
|
}
|
460
459
|
|
@@ -471,11 +470,15 @@ export class DataGridHeader extends LitElement {
|
|
471
470
|
if (sorter.desc) {
|
472
471
|
sorters.splice(idx, 1)
|
473
472
|
} else {
|
474
|
-
|
473
|
+
sorters.splice(idx, 1, {
|
474
|
+
...sorter,
|
475
|
+
desc: true
|
476
|
+
})
|
475
477
|
}
|
476
478
|
} else {
|
477
479
|
var sorter = {
|
478
|
-
name: column.name
|
480
|
+
name: column.name,
|
481
|
+
desc: false
|
479
482
|
}
|
480
483
|
|
481
484
|
sorters.push(sorter)
|
@@ -43,6 +43,11 @@ export class DataGrid extends DataManipulator {
|
|
43
43
|
transform: translate(-50%, -50%);
|
44
44
|
}
|
45
45
|
|
46
|
+
div[setting] {
|
47
|
+
position: relative;
|
48
|
+
z-index: 1;
|
49
|
+
}
|
50
|
+
|
46
51
|
@media print {
|
47
52
|
:host {
|
48
53
|
zoom: 80%;
|
@@ -159,7 +164,7 @@ export class DataGrid extends DataManipulator {
|
|
159
164
|
|
160
165
|
if (this.focused && 'row' in this.focused) {
|
161
166
|
var { row = 0, column = 0 } = this.focused
|
162
|
-
var { records: oldrecords = [] } = changes.get('data')
|
167
|
+
var { records: oldrecords = [] } = changes.get('data') || {}
|
163
168
|
var { records: newrecords } = this.data
|
164
169
|
|
165
170
|
var oldrecord = oldrecords[row]
|
@@ -172,8 +177,8 @@ export class DataGrid extends DataManipulator {
|
|
172
177
|
('id' in oldrecord
|
173
178
|
? record.id == oldrecord.id
|
174
179
|
: 'name' in oldrecord
|
175
|
-
|
176
|
-
|
180
|
+
? record.name == oldrecord.name
|
181
|
+
: false)
|
177
182
|
)
|
178
183
|
|
179
184
|
this.focused = {
|
@@ -222,6 +227,10 @@ export class DataGrid extends DataManipulator {
|
|
222
227
|
var data = this.data
|
223
228
|
|
224
229
|
return html`
|
230
|
+
<div setting>
|
231
|
+
<slot name="setting"></slot>
|
232
|
+
</div>
|
233
|
+
|
225
234
|
<ox-grid-header
|
226
235
|
.columns=${columns}
|
227
236
|
.sorters=${this.sorters}
|
@@ -234,7 +243,8 @@ export class DataGrid extends DataManipulator {
|
|
234
243
|
this.calculateWidths(columns)
|
235
244
|
}}
|
236
245
|
@fixed-lefts-change=${(e: CustomEvent) => (this.fixedLefts = e.detail)}
|
237
|
-
|
246
|
+
>
|
247
|
+
</ox-grid-header>
|
238
248
|
|
239
249
|
<ox-grid-body
|
240
250
|
.config=${this.config}
|
package/src/data-grist.ts
CHANGED
@@ -59,7 +59,7 @@ export class DataGrist extends LitElement implements DataConsumer {
|
|
59
59
|
|
60
60
|
padding: var(--ox-grist-padding);
|
61
61
|
|
62
|
-
--
|
62
|
+
--md-icon-size: var(--grid-record-wide-fontsize);
|
63
63
|
}
|
64
64
|
|
65
65
|
#wrap {
|
@@ -85,7 +85,7 @@ export class DataGrist extends LitElement implements DataConsumer {
|
|
85
85
|
box-sizing: border-box;
|
86
86
|
background-color: var(--grist-background-color);
|
87
87
|
|
88
|
-
z-index:
|
88
|
+
z-index: 2;
|
89
89
|
}
|
90
90
|
`
|
91
91
|
]
|
@@ -401,31 +401,32 @@ export class DataGrist extends LitElement implements DataConsumer {
|
|
401
401
|
.pagination=${this.pagination || {}}
|
402
402
|
?empty=${empty}
|
403
403
|
>
|
404
|
+
<slot name="setting" slot="setting"> </slot>
|
404
405
|
</ox-grid>
|
405
406
|
`
|
406
407
|
: this.mode == 'CARD'
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
408
|
+
? html`
|
409
|
+
<ox-card
|
410
|
+
id="grist"
|
411
|
+
.config=${this.compiledConfig}
|
412
|
+
.data=${this._data}
|
413
|
+
.sorters=${this.sorters || []}
|
414
|
+
.filters=${this.filters || []}
|
415
|
+
?empty=${empty}
|
416
|
+
>
|
417
|
+
</ox-card>
|
418
|
+
`
|
419
|
+
: html`
|
420
|
+
<ox-list
|
421
|
+
id="grist"
|
422
|
+
.config=${this.compiledConfig}
|
423
|
+
.data=${this._data}
|
424
|
+
.sorters=${this.sorters || []}
|
425
|
+
.filters=${this.filters || []}
|
426
|
+
?empty=${empty}
|
427
|
+
>
|
428
|
+
</ox-list>
|
429
|
+
`}
|
429
430
|
</div>
|
430
431
|
|
431
432
|
<div id="spinner" ?show=${this._showSpinner}></div>
|
@@ -22,6 +22,18 @@ export class DataListGutter extends LitElement {
|
|
22
22
|
font-size: var(--grid-record-wide-fontsize);
|
23
23
|
text-overflow: ellipsis;
|
24
24
|
color: var(--grid-record-color);
|
25
|
+
|
26
|
+
padding-right: 10px;
|
27
|
+
}
|
28
|
+
|
29
|
+
:host-context(.expand)::after {
|
30
|
+
content: '';
|
31
|
+
position: absolute;
|
32
|
+
left: 50%;
|
33
|
+
top: 50%;
|
34
|
+
transform: translate(-50%, -50%);
|
35
|
+
width: 150%;
|
36
|
+
height: 220%;
|
25
37
|
}
|
26
38
|
|
27
39
|
* {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import '@material/
|
1
|
+
import '@material/web/icon/icon.js'
|
2
2
|
import './record-partial'
|
3
3
|
|
4
4
|
import { css, html, PropertyValues } from 'lit'
|
@@ -25,7 +25,7 @@ export class DataList extends DataManipulator {
|
|
25
25
|
}
|
26
26
|
|
27
27
|
#upward {
|
28
|
-
--
|
28
|
+
--md-icon-size: 26px;
|
29
29
|
position: absolute;
|
30
30
|
top: var(--data-list-fab-position-vertical);
|
31
31
|
right: var(--data-list-fab-position-horizontal);
|
@@ -118,7 +118,7 @@ export class DataList extends DataManipulator {
|
|
118
118
|
${this.empty ? html` <ox-empty-note title="NO RECORDS"></ox-empty-note> ` : html``}
|
119
119
|
${this.isTop
|
120
120
|
? html``
|
121
|
-
: html` <
|
121
|
+
: html` <md-icon id="upward" @click=${(e: Event) => this.gotoTop(e)}>arrow_upward</md-icon> `}
|
122
122
|
`
|
123
123
|
}
|
124
124
|
|
@@ -29,6 +29,6 @@ export function recordPartialClickHandler(this: RecordPartial, e: MouseEvent): v
|
|
29
29
|
rowsClick(this.config.columns, this.data, column, this.record, rowIndex, target)
|
30
30
|
} else {
|
31
31
|
/* content 가 클릭된 경우 - 레코드뷰 팝업을 실행한다. */
|
32
|
-
this.popupRecordView()
|
32
|
+
this.config.rows.editable && this.popupRecordView()
|
33
33
|
}
|
34
34
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import '@material/
|
1
|
+
import '@material/web/icon/icon.js'
|
2
2
|
import './data-list-gutter'
|
3
3
|
import './data-list-field'
|
4
4
|
import '../record-view'
|
@@ -39,6 +39,7 @@ export class RecordPartial extends LitElement {
|
|
39
39
|
border-bottom: var(--data-list-item-border-bottom);
|
40
40
|
position: relative;
|
41
41
|
min-height: 42px;
|
42
|
+
padding-left: 7px;
|
42
43
|
}
|
43
44
|
|
44
45
|
:host([dirty])::before {
|
@@ -168,32 +169,31 @@ export class RecordPartial extends LitElement {
|
|
168
169
|
}
|
169
170
|
|
170
171
|
return html`
|
171
|
-
${dirtyIcon ? html` <
|
172
|
+
${dirtyIcon ? html` <md-icon dirty>${dirtyIcon}</md-icon> ` : html``}
|
172
173
|
${gutters.map(
|
173
|
-
gutter =>
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
174
|
+
gutter => html`
|
175
|
+
<ox-list-gutter
|
176
|
+
class=${gutter.name === 'detail' ? 'expand' : ''}
|
177
|
+
.rowIndex=${rowIndex}
|
178
|
+
.column=${gutter}
|
179
|
+
.record=${record}
|
180
|
+
.value=${record[gutter.name]}
|
181
|
+
></ox-list-gutter>
|
182
|
+
`
|
182
183
|
)}
|
183
184
|
|
184
185
|
<div content>
|
185
186
|
${displayColumns.map(
|
186
|
-
(column, idx) =>
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
`
|
187
|
+
(column, idx) => html`
|
188
|
+
<ox-list-field
|
189
|
+
.rowIndex=${rowIndex}
|
190
|
+
.column=${column}
|
191
|
+
.record=${record}
|
192
|
+
.value=${record[column?.name || '']}
|
193
|
+
?name=${idx == 0}
|
194
|
+
?desc=${idx == 1}
|
195
|
+
></ox-list-field>
|
196
|
+
`
|
197
197
|
)}
|
198
198
|
</div>
|
199
199
|
${thumbnail
|
@@ -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() {
|