@operato/data-grist 7.1.30 → 7.1.32

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.
Files changed (175) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/src/data-grid/data-grid-body-style.js +2 -2
  3. package/dist/src/data-grid/data-grid-body-style.js.map +1 -1
  4. package/dist/tsconfig.tsbuildinfo +1 -1
  5. package/package.json +10 -10
  6. package/.storybook/main.js +0 -3
  7. package/.storybook/preview.js +0 -52
  8. package/.storybook/server.mjs +0 -8
  9. package/demo/data-grist-test.html +0 -468
  10. package/demo/favicon.ico +0 -0
  11. package/demo/index.html +0 -541
  12. package/demo/report-test.html +0 -249
  13. package/dist/src/record-view/record-creator.d.ts +0 -17
  14. package/dist/src/record-view/record-creator.js +0 -148
  15. package/dist/src/record-view/record-creator.js.map +0 -1
  16. package/src/accumulator/accumulator.ts +0 -63
  17. package/src/configure/column-builder.ts +0 -114
  18. package/src/configure/config-builder.ts +0 -40
  19. package/src/configure/filters-option-builder.ts +0 -8
  20. package/src/configure/imex-option-builder.ts +0 -5
  21. package/src/configure/list-option-builder.ts +0 -9
  22. package/src/configure/rows-option-builder.ts +0 -38
  23. package/src/configure/tree-option-builder.ts +0 -22
  24. package/src/configure/zero-config.ts +0 -83
  25. package/src/const.ts +0 -1
  26. package/src/data-card/data-card-field.ts +0 -94
  27. package/src/data-card/data-card-gutter-menu.ts +0 -94
  28. package/src/data-card/data-card-gutter.ts +0 -103
  29. package/src/data-card/data-card.ts +0 -154
  30. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  31. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  32. package/src/data-card/record-card.ts +0 -289
  33. package/src/data-consumer.ts +0 -11
  34. package/src/data-grid/data-grid-accum-field.ts +0 -109
  35. package/src/data-grid/data-grid-body-style.ts +0 -99
  36. package/src/data-grid/data-grid-body.ts +0 -753
  37. package/src/data-grid/data-grid-field.ts +0 -236
  38. package/src/data-grid/data-grid-footer.ts +0 -117
  39. package/src/data-grid/data-grid-header.ts +0 -574
  40. package/src/data-grid/data-grid.ts +0 -293
  41. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  42. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  43. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  44. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  45. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  46. package/src/data-grist.ts +0 -1233
  47. package/src/data-list/data-list-field.ts +0 -82
  48. package/src/data-list/data-list-gutter.ts +0 -108
  49. package/src/data-list/data-list.ts +0 -145
  50. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  51. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  52. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  53. package/src/data-list/record-partial.ts +0 -255
  54. package/src/data-manipulator.ts +0 -426
  55. package/src/data-provider.ts +0 -271
  56. package/src/data-report/data-report-body-style.ts +0 -58
  57. package/src/data-report/data-report-body.ts +0 -189
  58. package/src/data-report/data-report-component.ts +0 -138
  59. package/src/data-report/data-report-field.ts +0 -83
  60. package/src/data-report/data-report-header.ts +0 -242
  61. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  62. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  63. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  64. package/src/data-report.ts +0 -424
  65. package/src/editors/index.ts +0 -4
  66. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  67. package/src/editors/ox-grist-editor-color.ts +0 -10
  68. package/src/editors/ox-grist-editor-date.ts +0 -10
  69. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  70. package/src/editors/ox-grist-editor-email.ts +0 -10
  71. package/src/editors/ox-grist-editor-file.ts +0 -28
  72. package/src/editors/ox-grist-editor-image.ts +0 -31
  73. package/src/editors/ox-grist-editor-month.ts +0 -10
  74. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  75. package/src/editors/ox-grist-editor-number.ts +0 -27
  76. package/src/editors/ox-grist-editor-password.ts +0 -10
  77. package/src/editors/ox-grist-editor-select.ts +0 -55
  78. package/src/editors/ox-grist-editor-tel.ts +0 -10
  79. package/src/editors/ox-grist-editor-text.ts +0 -14
  80. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  81. package/src/editors/ox-grist-editor-time.ts +0 -10
  82. package/src/editors/ox-grist-editor-tree.ts +0 -27
  83. package/src/editors/ox-grist-editor-varname.ts +0 -36
  84. package/src/editors/ox-grist-editor-week.ts +0 -10
  85. package/src/editors/ox-grist-editor.ts +0 -207
  86. package/src/editors/ox-input-tree.ts +0 -226
  87. package/src/editors/registry.ts +0 -82
  88. package/src/empty-note.ts +0 -46
  89. package/src/filters/filter-checkbox.ts +0 -49
  90. package/src/filters/filter-input-barcode.ts +0 -34
  91. package/src/filters/filter-input.ts +0 -30
  92. package/src/filters/filter-range-date.ts +0 -81
  93. package/src/filters/filter-range-number.ts +0 -64
  94. package/src/filters/filter-select-buttons.ts +0 -60
  95. package/src/filters/filter-select.ts +0 -68
  96. package/src/filters/filter-styles.ts +0 -119
  97. package/src/filters/filters-form.ts +0 -476
  98. package/src/filters/index.ts +0 -10
  99. package/src/filters/registry.ts +0 -56
  100. package/src/formatters/date-formatter.ts +0 -3
  101. package/src/formatters/index.ts +0 -1
  102. package/src/formatters/number-formatter.ts +0 -3
  103. package/src/formatters/registry.ts +0 -30
  104. package/src/formatters/text-formatter.ts +0 -3
  105. package/src/gutters/gutter-button.ts +0 -51
  106. package/src/gutters/gutter-dirty.ts +0 -96
  107. package/src/gutters/gutter-row-selector.ts +0 -89
  108. package/src/gutters/gutter-sequence.ts +0 -54
  109. package/src/gutters/index.ts +0 -1
  110. package/src/gutters/registry.ts +0 -32
  111. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  112. package/src/handlers/index.ts +0 -1
  113. package/src/handlers/move-down.ts +0 -44
  114. package/src/handlers/move-up.ts +0 -44
  115. package/src/handlers/record-copy.ts +0 -38
  116. package/src/handlers/record-delete.ts +0 -30
  117. package/src/handlers/record-view-handler.ts +0 -27
  118. package/src/handlers/registry.ts +0 -42
  119. package/src/handlers/select-row-toggle.ts +0 -30
  120. package/src/handlers/select-row.ts +0 -27
  121. package/src/index.ts +0 -17
  122. package/src/personalizer/index.ts +0 -1
  123. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  124. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  125. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  126. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  127. package/src/record-view/index.ts +0 -2
  128. package/src/record-view/ox-record-creator.ts +0 -289
  129. package/src/record-view/record-view-body.ts +0 -250
  130. package/src/record-view/record-view-handler.ts +0 -86
  131. package/src/record-view/record-view.ts +0 -122
  132. package/src/renderers/index.ts +0 -14
  133. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  134. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  135. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  136. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  137. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  138. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  139. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  140. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  141. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  142. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  143. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  144. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  145. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  146. package/src/renderers/ox-grist-renderer.ts +0 -35
  147. package/src/renderers/registry.ts +0 -111
  148. package/src/sorters/sorters-control.ts +0 -143
  149. package/src/types.ts +0 -813
  150. package/src/utils/index.ts +0 -2
  151. package/src/utils/list-param.ts +0 -72
  152. package/src/utils/supports-passive.ts +0 -13
  153. package/stories/accumulator-format.stories.ts +0 -276
  154. package/stories/barcode-input-filter.stories.ts +0 -216
  155. package/stories/bounded-select-filters.stories.ts +0 -333
  156. package/stories/bounded-select-record.stories.ts +0 -336
  157. package/stories/click-event-custom.stories.ts +0 -288
  158. package/stories/click-event.stories.ts +0 -283
  159. package/stories/creatable-only-column.stories.ts +0 -253
  160. package/stories/default-filters.stories.ts +0 -241
  161. package/stories/dynamic-editable.stories.ts +0 -313
  162. package/stories/empty-sorters.stories.ts +0 -180
  163. package/stories/explicit-fetch.stories.ts +0 -186
  164. package/stories/fixed-column.stories.ts +0 -416
  165. package/stories/grid-setting.stories.ts +0 -501
  166. package/stories/grist-modes.stories.ts +0 -451
  167. package/stories/group-header.stories.ts +0 -442
  168. package/stories/record-view.stories.ts +0 -143
  169. package/stories/textarea.stories.ts +0 -261
  170. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  171. package/stories/tree-column.stories.ts +0 -296
  172. package/tsconfig.json +0 -26
  173. package/web-dev-server.config.mjs +0 -27
  174. package/web-test-runner.config.mjs +0 -45
  175. package/yarn-error.log +0 -16971
@@ -1,38 +0,0 @@
1
- import { NOOP } from '../const'
2
- import { RowsConfig } from '../types'
3
- import { getGristEventHandler } from '../handlers'
4
-
5
- export const buildRowsOptions = (rows: any): RowsConfig => {
6
- var {
7
- appendable = true,
8
- editable = true,
9
- insertable = false,
10
- selectable,
11
- groups = [],
12
- totals = [],
13
- classifier,
14
- accumulator
15
- } = rows
16
-
17
- /* handler */
18
- var { click, dblclick, focus } = rows.handlers || {}
19
- if (typeof classifier !== 'function') {
20
- classifier = NOOP
21
- }
22
-
23
- return {
24
- accumulator,
25
- appendable,
26
- editable,
27
- insertable,
28
- selectable,
29
- groups,
30
- totals,
31
- handlers: {
32
- click: getGristEventHandler(click),
33
- dblclick: getGristEventHandler(dblclick),
34
- focus: getGristEventHandler(focus)
35
- },
36
- classifier
37
- }
38
- }
@@ -1,22 +0,0 @@
1
- import { TreeConfig } from '../types'
2
-
3
- const CollapsedAll = () => false
4
- const ExpandedAll = () => true
5
-
6
- export const buildTreeOptions = (tree: TreeConfig | undefined): TreeConfig => {
7
- var { expanded = CollapsedAll } = tree || {}
8
-
9
- switch (expanded) {
10
- case true:
11
- expanded = ExpandedAll
12
- break
13
- case false:
14
- expanded = CollapsedAll
15
- break
16
- }
17
-
18
- return {
19
- ...tree,
20
- expanded
21
- }
22
- }
@@ -1,83 +0,0 @@
1
- import {
2
- ColumnConfig,
3
- FieldRenderer,
4
- GristClassifier,
5
- GristConfig,
6
- GristData,
7
- GristEventHandlerSet,
8
- GristRecord,
9
- GroupConfig,
10
- LabelConfig,
11
- ListConfig,
12
- TreeConfig,
13
- RowsConfig
14
- } from '../types'
15
-
16
- export const ZERO_CLASSIFIER: GristClassifier = (record, rowIndex) => {}
17
- export const ZERO_FIELD_RENDERER: FieldRenderer = (value, column, record, rowIndex, owner) => {}
18
-
19
- export const ZERO_EVENTHANDLERSET: GristEventHandlerSet = {
20
- click: undefined,
21
- dblclick: undefined,
22
- focus: undefined,
23
- contextmenu: undefined
24
- }
25
- export const ZERO_COLUMNS: ColumnConfig[] = []
26
- export const ZERO_GROUPS: GroupConfig[] = []
27
- export const ZERO_TOTALS: [] = []
28
- export const ZERO_LABEL: LabelConfig = false
29
-
30
- export const ZERO_COLUMN: ColumnConfig = {
31
- type: '',
32
- name: '',
33
- header: {
34
- renderer: column => {}
35
- },
36
- record: {
37
- renderer: ZERO_FIELD_RENDERER,
38
- classifier: ZERO_CLASSIFIER,
39
- options: {}
40
- },
41
- handlers: ZERO_EVENTHANDLERSET,
42
- label: ZERO_LABEL
43
- }
44
-
45
- export const ZERO_ROWS: RowsConfig = {
46
- appendable: false,
47
- insertable: false,
48
- editable: false,
49
- groups: ZERO_GROUPS,
50
- totals: ZERO_TOTALS,
51
- classifier: ZERO_CLASSIFIER,
52
- handlers: ZERO_EVENTHANDLERSET
53
- }
54
-
55
- export const ZERO_LIST: ListConfig = {
56
- fields: ['name', 'description', 'updatedAt'],
57
- details: []
58
- }
59
-
60
- export const ZERO_TREE: TreeConfig = {}
61
-
62
- export const ZERO_CONFIG: GristConfig = {
63
- columns: ZERO_COLUMNS,
64
- rows: ZERO_ROWS,
65
- list: ZERO_LIST,
66
- tree: ZERO_TREE
67
- }
68
-
69
- export const ZERO_RECORD: GristRecord = {}
70
- export const ZERO_RECORDS: GristRecord[] = []
71
-
72
- export const ZERO_DATA: GristData = {
73
- records: ZERO_RECORDS
74
- }
75
-
76
- export const ZERO_PAGES = [20, 30, 50, 100]
77
-
78
- export const ZERO_PAGINATION = {
79
- page: 1,
80
- limit: 20,
81
- total: 0,
82
- pages: ZERO_PAGES
83
- }
package/src/const.ts DELETED
@@ -1 +0,0 @@
1
- export const NOOP = function () {}
@@ -1,94 +0,0 @@
1
- import { css, html, LitElement, TemplateResult } from 'lit'
2
- import { customElement, property } from 'lit/decorators.js'
3
-
4
- import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'
5
- import { ColumnConfig, GristRecord } from '../types'
6
-
7
- @customElement('ox-card-field')
8
- export class DataCardField extends LitElement {
9
- static styles = [
10
- css`
11
- :host {
12
- display: flex;
13
- align-items: center;
14
- justify-content: flex-start;
15
- position: relative;
16
-
17
- white-space: nowrap;
18
-
19
- font: inherit;
20
- }
21
-
22
- :host([thumbnail]) {
23
- flex-direction: column;
24
- justify-content: center;
25
- }
26
-
27
- :host([thumbnail]) > * {
28
- object-fit: contain;
29
- max-width: 100%;
30
- max-height: 100%;
31
- }
32
-
33
- :host > * {
34
- margin: var(--spacing-none);
35
-
36
- overflow: hidden;
37
-
38
- text-overflow: ellipsis;
39
- text-align: left;
40
- }
41
-
42
- :host > *[center] {
43
- flex: none;
44
- margin: var(--spacing-none) auto;
45
- }
46
-
47
- :host([name]) label {
48
- display: none;
49
- }
50
-
51
- label {
52
- flex: none;
53
- width: 33%;
54
- padding-bottom: 2px;
55
- font: var(--data-card-item-etc-label-font);
56
- text-transform: capitalize;
57
- }
58
-
59
- :host([name]) > span,
60
- label + a {
61
- display: block;
62
- min-width: 100%;
63
- }
64
-
65
- @media only screen and (max-width: 460px) {
66
- *[center] {
67
- margin: initial;
68
- }
69
- }
70
- `
71
- ]
72
-
73
- @property({ attribute: true }) align?: string
74
- @property({ type: Object }) record: GristRecord = ZERO_RECORD
75
- @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN
76
- @property({ type: Number }) rowIndex: number = -1
77
- @property({ type: Object }) value?: object
78
-
79
- render(): TemplateResult {
80
- var { value, column, record, rowIndex } = this
81
-
82
- var {
83
- label,
84
- record: { renderer: recordRenderer }
85
- } = column
86
-
87
- if (typeof label == 'object') {
88
- let { renderer: labelRenderer } = label
89
- return html`<label>${labelRenderer(column)}</label>${recordRenderer(value, column, record, rowIndex, this)}`
90
- } else {
91
- return html`${recordRenderer(value, column, record, rowIndex, this)}`
92
- }
93
- }
94
- }
@@ -1,94 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
- import './data-card-gutter.js'
3
-
4
- import { css, html, LitElement } from 'lit'
5
- import { customElement, property, query } from 'lit/decorators.js'
6
-
7
- import { OxPopup } from '@operato/popup'
8
-
9
- import { ColumnConfig, GristRecord } from '../types.js'
10
-
11
- @customElement('ox-card-gutter-menu')
12
- class DataCardGutterMenu extends LitElement {
13
- static styles = css`
14
- :host {
15
- position: relative;
16
- }
17
-
18
- ::slotted(ox-popup) {
19
- padding: var(--spacing-small);
20
- }
21
-
22
- md-icon {
23
- flex: 1;
24
- margin: var(--spacing-none);
25
- border: var(--data-card-item-btn-border);
26
- border-radius: var(--data-card-item-btn-border-radius);
27
- padding: var(--data-card-item-btn-padding);
28
- font-size: var(--md-sys-typescale-label-large-size, 0.875rem);
29
- background-color: transparent;
30
- color: var(--grid-record-color);
31
- }
32
-
33
- md-icon:hover {
34
- cursor: pointer;
35
- background-color: var(--md-sys-color-primary);
36
- color: var(--md-sys-color-on-primary);
37
- }
38
- `
39
-
40
- @property({ type: Object }) gutters!: ColumnConfig[]
41
- @property({ type: Number }) rowIndex!: number
42
- @property({ type: Object }) record!: GristRecord
43
- @property() clickHandler!: EventListener
44
- @property() dblclickHandler!: EventListener
45
-
46
- @query('md-icon') icon!: Element
47
-
48
- render() {
49
- return html`
50
- <md-icon @click=${(e: Event) => this.open(e)}>more_horiz</md-icon>
51
- <slot></slot>
52
- `
53
- }
54
-
55
- menuRender() {
56
- return html`
57
- ${this.gutters.map(
58
- gutter => html`
59
- <ox-card-gutter
60
- .rowIndex=${this.rowIndex}
61
- .column=${gutter}
62
- .record=${this.record}
63
- .value=${this.record[gutter.name]}
64
- menu
65
- alive-on-select
66
- @click=${(e: Event) => {
67
- this.clickHandler(e)
68
- // TODO close popup
69
- }}
70
- @dblclick=${(e: Event) => {
71
- this.dblclickHandler(e)
72
- // TODO close popup
73
- }}
74
- ></ox-card-gutter>
75
- `
76
- )}
77
- `
78
- }
79
-
80
- open(e: Event) {
81
- e.stopPropagation()
82
-
83
- const bottom = (this.icon as HTMLElement).offsetHeight
84
- const left = -4
85
- const parent = this
86
-
87
- OxPopup.open({
88
- template: this.menuRender(),
89
- bottom,
90
- left,
91
- parent
92
- })
93
- }
94
- }
@@ -1,103 +0,0 @@
1
- import { css, html, LitElement, PropertyValues, TemplateResult } from 'lit'
2
- import { customElement, property } from 'lit/decorators.js'
3
-
4
- import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'
5
- import { ColumnConfig, GristRecord } from '../types'
6
-
7
- @customElement('ox-card-gutter')
8
- export class DataCardGutter extends LitElement {
9
- static styles = [
10
- css`
11
- :host {
12
- display: flex;
13
- background-color: transparent;
14
- align-content: center;
15
- align-items: center;
16
- text-overflow: ellipsis;
17
- }
18
-
19
- :host([row-selector]) {
20
- margin-right: auto;
21
- }
22
-
23
- * {
24
- border: 0;
25
- font-size: var(--md-sys-typescale-label-medium-size, 0.8rem);
26
- line-height: var(--md-sys-typescale-label-medium-size, 0.8rem);
27
-
28
- color: var(--md-sys-color-on-primary);
29
- background-color: var(--md-sys-color-primary);
30
- border-radius: var(--data-card-item-btn-border-radius, var(--md-sys-shape-corner-tiny));
31
-
32
- padding: var(--spacing-small);
33
- }
34
-
35
- *:hover {
36
- cursor: pointer;
37
- color: var(--md-sys-color-on-secondary);
38
- background-color: var(--md-sys-color-secondary);
39
- }
40
-
41
- :host([danger]) button {
42
- color: var(--md-sys-color-on-error);
43
- background-color: var(--md-sys-color-error);
44
- border-color: var(--md-sys-color-error);
45
- }
46
-
47
- :host([danger]) button:hover {
48
- color: var(--md-sys-color-error);
49
- background-color: var(--md-sys-color-on-secondary);
50
- border-color: var(--md-sys-color-on-secondary);
51
- }
52
-
53
- button {
54
- display: flex;
55
- gap: var(--spacing-small);
56
- border: 0;
57
- align-items: center;
58
- }
59
-
60
- button md-icon {
61
- border: 0;
62
- padding: 0;
63
- background-color: unset;
64
- }
65
- `
66
- ]
67
-
68
- @property({ attribute: true }) align?: string
69
- @property({ type: Object }) record: GristRecord = ZERO_RECORD
70
- @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN
71
- @property({ type: Number }) rowIndex: number = -1
72
- @property({ type: Object }) value?: object
73
-
74
- render(): TemplateResult {
75
- if (!this.column) {
76
- return html``
77
- }
78
-
79
- var { value, column, record, rowIndex } = this
80
- var { renderer } = column.record
81
-
82
- /* renderer가 html template이 아니고 단순한 값인 경우가 있으므로, html 템플릿으로 감싸준다. */
83
- return html` ${renderer(value, column, record, rowIndex, this)} `
84
- }
85
-
86
- updated(changes: PropertyValues<this>) {
87
- if (changes.has('column')) {
88
- const { gutterName, danger } = this.column
89
-
90
- if (gutterName == 'row-selector') {
91
- this.setAttribute('row-selector', '')
92
- } else {
93
- this.removeAttribute('row-selector')
94
- }
95
-
96
- if (danger) {
97
- this.setAttribute('danger', '')
98
- } else {
99
- this.removeAttribute('danger')
100
- }
101
- }
102
- }
103
- }
@@ -1,154 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
- import '../empty-note'
3
- import './record-card'
4
-
5
- import { PropertyValues, css, html } from 'lit'
6
- import { customElement, property, state } from 'lit/decorators.js'
7
-
8
- import { DataManipulator } from '../data-manipulator'
9
- import { GristRecord } from '../types'
10
-
11
- @customElement('ox-card')
12
- export class DataCard extends DataManipulator {
13
- static styles = [
14
- css`
15
- :host {
16
- overflow-y: auto;
17
- padding: var(--spacing-medium);
18
-
19
- display: grid;
20
- grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
21
- grid-template-rows: min-content;
22
- grid-gap: var(--spacing-large);
23
- }
24
-
25
- [selected-row] {
26
- background-color: var(--grid-record-selected-background-color);
27
- }
28
-
29
- #upward {
30
- --md-icon-size: var(--icon-size-large);
31
- position: absolute;
32
- top: var(--data-card-fab-position-vertical);
33
- right: var(--data-card-fab-position-horizontal);
34
- background-color: rgba(255, 255, 255, 0.7);
35
- border-radius: var(--md-sys-shape-corner-large);
36
- color: var(--data-card-fab-color);
37
- box-shadow: var(--data-card-fab-shadow);
38
- padding: var(--spacing-small);
39
- }
40
-
41
- slot {
42
- width: 100%;
43
- }
44
-
45
- ox-empty-note {
46
- display: block;
47
- position: absolute;
48
- left: 50%;
49
- top: 50%;
50
- transform: translate(-50%, -50%);
51
- }
52
-
53
- [card][emphasized-row],
54
- [card][emphasized-row][focused] {
55
- background-color: var(--grid-record-emphasized-background-color);
56
- color: var(--grid-record-emphasized-color);
57
- }
58
-
59
- @media screen and (max-width: 460px) {
60
- #setting {
61
- grid-template-columns: 1fr;
62
- grid-template-rows: 1fr 1fr;
63
- }
64
- }
65
- `
66
- ]
67
-
68
- @property({ type: Boolean }) empty?: boolean
69
-
70
- @state() private _records: GristRecord[] = []
71
- @state() private isTop: boolean = false
72
-
73
- private _total: number = 0
74
- private _limit: number = 20
75
- private _page: number = 1
76
-
77
- firstUpdated(changes: PropertyValues<this>) {
78
- this.isTop = true
79
-
80
- /* infinite scrolling */
81
- this.addEventListener('scroll', e => {
82
- const totalScrollHeight = this.scrollHeight
83
- const screenHeight = this.offsetHeight
84
- const currentScrollTop = this.scrollTop
85
-
86
- if (totalScrollHeight <= screenHeight + currentScrollTop + 1) {
87
- /* 마지막 페이지까지 계속 페이지를 증가시킨다. */
88
- var lastPage = Math.ceil(this._total / this._limit)
89
-
90
- if (this._page < lastPage) {
91
- this.dispatchEvent(new CustomEvent('attach-page', { bubbles: true, composed: true }))
92
- }
93
- }
94
-
95
- this.isTop = this.scrollTop == 0
96
- })
97
- }
98
-
99
- updated(changes: PropertyValues<this>) {
100
- if (changes.has('config')) {
101
- this._records = []
102
- this._page = 1
103
- }
104
-
105
- if (changes.has('data')) {
106
- this._records = this.data.records
107
- this._total = this.data.total || 0
108
- this._limit = this.data.limit || 20
109
- this._page = this.data.page || 0
110
- }
111
- }
112
-
113
- render() {
114
- var { classifier } = this.config.rows
115
- var records = this._records || []
116
-
117
- if (this.config && this.config.rows.appendable) {
118
- records = [...records, { __dirty__: '+' }]
119
- }
120
-
121
- return html`
122
- ${records.map((record, rowIndex) => {
123
- var { emphasized } = classifier.call(null, record, rowIndex) || {}
124
-
125
- return html`
126
- <ox-record-card
127
- .config=${this.config}
128
- .data=${this.data}
129
- .record=${record}
130
- .rowIndex=${rowIndex}
131
- .emphasized=${emphasized}
132
- ?selected-row=${record['__selected__']}
133
- ?dirty=${record['__dirty__']}
134
- card
135
- ></ox-record-card>
136
- `
137
- })}
138
- ${this.empty ? html` <ox-empty-note title="NO RECORDS"></ox-empty-note> ` : html``}
139
- ${this.isTop
140
- ? html``
141
- : html` <md-icon id="upward" @click=${(e: Event) => this.gotoTop(e)}>arrow_upward</md-icon> `}
142
- `
143
- }
144
-
145
- gotoTop(e: Event) {
146
- this.scrollTop = 0
147
-
148
- e.stopPropagation()
149
- }
150
-
151
- get pullToRefreshTarget() {
152
- return this
153
- }
154
- }
@@ -1,34 +0,0 @@
1
- import { DataCardField } from '../data-card-field'
2
- import { DataCardGutter } from '../data-card-gutter'
3
- import { RecordCard } from '../record-card'
4
-
5
- /**
6
- * ox-record-card 의 click handler
7
- *
8
- * - handler의 this 는 ox-record-card임.
9
- */
10
- export function recordCardClickHandler(this: RecordCard, e: MouseEvent): void {
11
- e.stopPropagation()
12
-
13
- /* target should be [content] or 'ox-card-field' or 'ox-card-gutter' */
14
- var target = (e.target as Element).closest('ox-card-field, ox-card-gutter') as DataCardField | DataCardGutter
15
- var { column, rowIndex } = target || {}
16
-
17
- /* do column click handler */
18
- if (column) {
19
- var { click } = column.handlers
20
- if (click) {
21
- click(this.config.columns, this.data, column, this.record, rowIndex, target)
22
- return
23
- }
24
- }
25
-
26
- /* do rows click handler */
27
- var { click: rowsClick } = this.config.rows.handlers
28
- if (rowsClick) {
29
- rowsClick(this.config.columns, this.data, column, this.record, rowIndex, target)
30
- } else {
31
- /* content 가 클릭된 경우 - 레코드뷰 팝업을 실행한다. */
32
- this.config.rows.editable && this.popupRecordView()
33
- }
34
- }
@@ -1,34 +0,0 @@
1
- import { DataCardField } from '../data-card-field'
2
- import { DataCardGutter } from '../data-card-gutter'
3
- import { RecordCard } from '../record-card'
4
-
5
- /**
6
- * ox-record-card 의 dblclick handler
7
- *
8
- * - handler의 this 는 ox-record-card임.
9
- */
10
- export function recordCardDblClickHandler(this: RecordCard, e: MouseEvent): void {
11
- e.stopPropagation()
12
-
13
- /* target should be [content] or 'ox-card-field' or 'ox-card-gutter' */
14
- var target = (e.target as Element).closest('ox-card-field, ox-card-gutter') as DataCardField | DataCardGutter
15
-
16
- var { column, record, rowIndex } = target || {}
17
-
18
- if (column && column.type == 'gutter') {
19
- /*
20
- * Gutter가 클릭된 경우
21
- * TODO ox-record-card의 dblclick handling의 성능을 확인하고,
22
- * gutter에 dblclick를 적용할 수 있는 지 확인한 후에 활성화하자.
23
- */
24
- /* do column click handler */
25
- // var { dblclick } = column.handlers
26
- // dblclick && dblclick(this.columns, this.data, column, record, rowIndex, target)
27
- // return
28
- } else {
29
- var { dblclick: rowsDblClick } = this.config.rows.handlers
30
- if (rowsDblClick) {
31
- rowsDblClick(this.config.columns, this.data, column, record, rowIndex, target)
32
- }
33
- }
34
- }