@operato/data-grist 2.0.0-alpha.12 → 2.0.0-alpha.121
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 +535 -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 +12 -4
- 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 +6 -3
- 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 +12 -3
- package/dist/src/data-grist.js +74 -31
- 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 -4
- package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/personalizer/index.d.ts +1 -0
- package/dist/src/personalizer/index.js +2 -0
- package/dist/src/personalizer/index.js.map +1 -0
- package/dist/src/personalizer/ox-grist-personalizer.d.ts +10 -0
- package/dist/src/personalizer/ox-grist-personalizer.js +171 -0
- package/dist/src/personalizer/ox-grist-personalizer.js.map +1 -0
- 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 +28 -9
- package/dist/src/types.js.map +1 -1
- package/dist/stories/accumulator-format.stories.d.ts +36 -0
- package/dist/stories/accumulator-format.stories.js +231 -0
- package/dist/stories/accumulator-format.stories.js.map +1 -0
- package/dist/stories/accumulator.stories.d.ts +6 -1
- package/dist/stories/accumulator.stories.js +70 -129
- 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/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 +42 -0
- package/dist/stories/grid-setting.stories.js +415 -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 +26 -21
- 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 +11 -4
- 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 +4 -2
- 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 +89 -30
- 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 -4
- package/src/index.ts +1 -1
- package/src/personalizer/index.ts +1 -0
- package/src/personalizer/ox-grist-personalizer.ts +181 -0
- 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 +34 -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 +462 -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/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
@@ -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() {
|
@@ -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() {
|
@@ -1,6 +1,38 @@
|
|
1
|
-
import { OxGristEditor } from './ox-grist-editor.js'
|
2
|
-
import { customElement } from 'lit/decorators.js'
|
3
1
|
import { html } from 'lit'
|
2
|
+
import { customElement } from 'lit/decorators.js'
|
3
|
+
import { until } from 'lit/directives/until.js'
|
4
|
+
|
5
|
+
import { OxGristEditor } from './ox-grist-editor.js'
|
6
|
+
import { SelectOption, SelectOptionObject } from '../types.js'
|
7
|
+
|
8
|
+
function buildOptions(options: SelectOption[], value: any) {
|
9
|
+
const selectOptionObjects = options.map(option => {
|
10
|
+
switch (typeof option) {
|
11
|
+
case 'string':
|
12
|
+
return {
|
13
|
+
display: option,
|
14
|
+
value: option
|
15
|
+
}
|
16
|
+
case 'object':
|
17
|
+
return {
|
18
|
+
display: option.display || option.name,
|
19
|
+
value: option.value
|
20
|
+
}
|
21
|
+
default:
|
22
|
+
return option
|
23
|
+
}
|
24
|
+
}) as SelectOptionObject[]
|
25
|
+
|
26
|
+
return html`
|
27
|
+
<select>
|
28
|
+
${selectOptionObjects.map(
|
29
|
+
(option: any) => html`
|
30
|
+
<option ?selected=${option.value == value} value=${option.value}>${option.display}</option>
|
31
|
+
`
|
32
|
+
)}
|
33
|
+
</select>
|
34
|
+
`
|
35
|
+
}
|
4
36
|
|
5
37
|
@customElement('ox-grist-editor-select')
|
6
38
|
export class OxGristEditorSelect extends OxGristEditor {
|
@@ -10,33 +42,14 @@ export class OxGristEditorSelect extends OxGristEditor {
|
|
10
42
|
|
11
43
|
if (typeof options == 'function') {
|
12
44
|
options = options.call(null, this.value, this.column, this.record, this.rowIndex, this.field)
|
13
|
-
}
|
14
45
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
display: option,
|
20
|
-
value: option
|
21
|
-
}
|
22
|
-
case 'object':
|
23
|
-
return {
|
24
|
-
display: option.display,
|
25
|
-
value: option.value
|
26
|
-
}
|
27
|
-
default:
|
28
|
-
return option
|
46
|
+
if (options instanceof Promise) {
|
47
|
+
return html`${until(options.then(options => buildOptions(options, this.value)))}`
|
48
|
+
} else {
|
49
|
+
return buildOptions((options || []) as SelectOption[], rowOptionField.display || this.value)
|
29
50
|
}
|
30
|
-
}
|
31
|
-
|
32
|
-
|
33
|
-
<select>
|
34
|
-
${options.map(
|
35
|
-
(option: any) => html`
|
36
|
-
<option ?selected=${option.value == this.value} value=${option.value}>${option.display}</option>
|
37
|
-
`
|
38
|
-
)}
|
39
|
-
</select>
|
40
|
-
`
|
51
|
+
} else {
|
52
|
+
return buildOptions((options || []) as SelectOption[], this.value)
|
53
|
+
}
|
41
54
|
}
|
42
55
|
}
|
@@ -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}
|
@@ -1,26 +1,14 @@
|
|
1
1
|
import '@operato/input/ox-checkbox.js'
|
2
2
|
|
3
|
-
import {
|
3
|
+
import { html } from 'lit'
|
4
|
+
import { until } from 'lit/directives/until.js'
|
4
5
|
|
5
|
-
import {
|
6
|
+
import { FilterConfigObject, FilterOperator, FilterSelectRenderer, SelectOption, SelectOptionObject } from '../types'
|
7
|
+
import { OxFiltersForm } from './filters-form'
|
8
|
+
import { DataGridHeader } from '../data-grid/data-grid-header'
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
const filter = column.filter as FilterConfigObject
|
10
|
-
const operator = filter?.operator
|
11
|
-
|
12
|
-
var options = filter?.options || column.record.options || []
|
13
|
-
|
14
|
-
if (typeof options === 'function') {
|
15
|
-
if (!filter?.options) {
|
16
|
-
console.warn(
|
17
|
-
'ox-grist의 column.filter 속성에서는 column.record.options의 함수형 options을 사용할 수 없으므로, filter 속성에서 재지정해야한다.'
|
18
|
-
)
|
19
|
-
}
|
20
|
-
options = options.call(column, owner)
|
21
|
-
}
|
22
|
-
|
23
|
-
options = options.map((option: any) => {
|
10
|
+
function buildOptions(options: SelectOption[], operator?: FilterOperator) {
|
11
|
+
const selectOptionObjects = options.map(option => {
|
24
12
|
switch (typeof option) {
|
25
13
|
case 'string':
|
26
14
|
return {
|
@@ -29,27 +17,52 @@ export const FilterSelect: FilterSelectRenderer = (column, value, owner) => {
|
|
29
17
|
}
|
30
18
|
case 'object':
|
31
19
|
return {
|
32
|
-
display: option.display,
|
20
|
+
display: option.display || option.name,
|
33
21
|
value: option.value
|
34
22
|
}
|
35
23
|
default:
|
36
24
|
return option
|
37
25
|
}
|
38
|
-
})
|
26
|
+
}) as SelectOptionObject[]
|
39
27
|
|
40
28
|
return operator === 'in'
|
41
29
|
? html`
|
42
|
-
${
|
43
|
-
?.filter(
|
30
|
+
${selectOptionObjects
|
31
|
+
?.filter(option => !!option)
|
44
32
|
.map(
|
45
|
-
(
|
46
|
-
html` <ox-checkbox option value=${option.value}>${option.display}</ox-checkbox> `
|
33
|
+
({ value, display, name }) => html` <ox-checkbox option value=${value}>${display || name}</ox-checkbox> `
|
47
34
|
)}
|
48
35
|
`
|
49
36
|
: html`
|
50
|
-
${
|
51
|
-
(
|
52
|
-
html` <div option value=${option.value}>${option.display} </div> `
|
37
|
+
${selectOptionObjects?.map(
|
38
|
+
({ value, display, name }) => html` <div option value=${value}>${display || name} </div> `
|
53
39
|
)}
|
54
40
|
`
|
55
41
|
}
|
42
|
+
|
43
|
+
export const FilterSelect: FilterSelectRenderer = (column, value, owner) => {
|
44
|
+
/* value는 filters-form이나 grid-header에서 처리되므로 이 곳에서는 무시한다. */
|
45
|
+
const filter = column.filter as FilterConfigObject
|
46
|
+
const operator = filter?.operator
|
47
|
+
const form = owner as OxFiltersForm | DataGridHeader
|
48
|
+
|
49
|
+
var options = filter?.options || column.record.options || []
|
50
|
+
|
51
|
+
if (typeof options === 'function') {
|
52
|
+
if (!filter?.options) {
|
53
|
+
console.warn(
|
54
|
+
'ox-grist의 column.filter 속성에서는 column.record.options의 함수형 options을 사용할 수 없으므로, filter 속성에서 재지정해야한다.'
|
55
|
+
)
|
56
|
+
}
|
57
|
+
|
58
|
+
options = options.call(null, value, column, form instanceof OxFiltersForm ? form.getFormObjectValue() : {}, owner)
|
59
|
+
|
60
|
+
if (options instanceof Promise) {
|
61
|
+
return html`${until(options.then(options => buildOptions(options, operator)))}`
|
62
|
+
} else {
|
63
|
+
return buildOptions((options || []) as SelectOption[], operator)
|
64
|
+
}
|
65
|
+
} else {
|
66
|
+
return buildOptions((options || []) as SelectOption[], operator)
|
67
|
+
}
|
68
|
+
}
|