@operato/data-grist 8.0.0-alpha.8 → 8.0.0-beta.1

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 (218) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/dist/src/data-grid/data-grid-body.js +21 -7
  3. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  4. package/dist/src/data-grid/data-grid-footer.js +2 -0
  5. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  6. package/dist/src/data-grid/data-grid-header.d.ts +1 -1
  7. package/dist/src/data-grid/data-grid-header.js +13 -9
  8. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  9. package/dist/src/editors/ox-grist-editor-varname.d.ts +6 -0
  10. package/dist/src/editors/ox-grist-editor-varname.js +36 -0
  11. package/dist/src/editors/ox-grist-editor-varname.js.map +1 -0
  12. package/dist/src/editors/ox-grist-editor.js +3 -3
  13. package/dist/src/editors/ox-grist-editor.js.map +1 -1
  14. package/dist/src/editors/registry.js +3 -1
  15. package/dist/src/editors/registry.js.map +1 -1
  16. package/dist/src/gutters/gutter-sequence.d.ts +1 -1
  17. package/dist/src/record-view/index.d.ts +1 -1
  18. package/dist/src/record-view/index.js +1 -1
  19. package/dist/src/record-view/index.js.map +1 -1
  20. package/dist/src/record-view/{record-creator.d.ts → ox-record-creator.d.ts} +8 -4
  21. package/dist/src/record-view/{record-creator.js → ox-record-creator.js} +90 -34
  22. package/dist/src/record-view/ox-record-creator.js.map +1 -0
  23. package/dist/src/renderers/ox-grist-renderer-boolean.js +1 -1
  24. package/dist/src/renderers/ox-grist-renderer-boolean.js.map +1 -1
  25. package/dist/stories/accumulator-format.stories.d.ts +1 -1
  26. package/dist/stories/accumulator-format.stories.js +1 -1
  27. package/dist/stories/accumulator-format.stories.js.map +1 -1
  28. package/dist/stories/click-event-custom.stories.d.ts +45 -0
  29. package/dist/stories/click-event-custom.stories.js +247 -0
  30. package/dist/stories/click-event-custom.stories.js.map +1 -0
  31. package/dist/stories/click-event.stories.d.ts +1 -1
  32. package/dist/stories/click-event.stories.js +1 -1
  33. package/dist/stories/click-event.stories.js.map +1 -1
  34. package/dist/stories/fixed-column.stories.d.ts +1 -1
  35. package/dist/stories/fixed-column.stories.js +1 -1
  36. package/dist/stories/fixed-column.stories.js.map +1 -1
  37. package/dist/stories/grid-setting.stories.d.ts +1 -1
  38. package/dist/stories/grid-setting.stories.js +1 -1
  39. package/dist/stories/grid-setting.stories.js.map +1 -1
  40. package/dist/stories/grist-modes.stories.d.ts +1 -1
  41. package/dist/stories/grist-modes.stories.js +1 -1
  42. package/dist/stories/grist-modes.stories.js.map +1 -1
  43. package/dist/stories/group-header.stories.d.ts +1 -1
  44. package/dist/stories/group-header.stories.js +1 -1
  45. package/dist/stories/group-header.stories.js.map +1 -1
  46. package/dist/stories/textarea.stories.d.ts +1 -1
  47. package/dist/stories/textarea.stories.js +1 -1
  48. package/dist/stories/textarea.stories.js.map +1 -1
  49. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  50. package/dist/stories/tree-column-with-checkbox.stories.js +1 -1
  51. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  52. package/dist/stories/tree-column.stories.d.ts +1 -1
  53. package/dist/stories/tree-column.stories.js +1 -1
  54. package/dist/stories/tree-column.stories.js.map +1 -1
  55. package/dist/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +20 -20
  57. package/themes/calendar-theme.css +3 -1
  58. package/.storybook/main.js +0 -3
  59. package/.storybook/preview.js +0 -52
  60. package/.storybook/server.mjs +0 -8
  61. package/dist/src/record-view/record-creator.js.map +0 -1
  62. package/src/accumulator/accumulator.ts +0 -63
  63. package/src/configure/column-builder.ts +0 -114
  64. package/src/configure/config-builder.ts +0 -40
  65. package/src/configure/filters-option-builder.ts +0 -8
  66. package/src/configure/imex-option-builder.ts +0 -5
  67. package/src/configure/list-option-builder.ts +0 -9
  68. package/src/configure/rows-option-builder.ts +0 -38
  69. package/src/configure/tree-option-builder.ts +0 -22
  70. package/src/configure/zero-config.ts +0 -83
  71. package/src/const.ts +0 -1
  72. package/src/data-card/data-card-field.ts +0 -94
  73. package/src/data-card/data-card-gutter-menu.ts +0 -94
  74. package/src/data-card/data-card-gutter.ts +0 -103
  75. package/src/data-card/data-card.ts +0 -154
  76. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  77. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  78. package/src/data-card/record-card.ts +0 -298
  79. package/src/data-consumer.ts +0 -11
  80. package/src/data-grid/data-grid-accum-field.ts +0 -109
  81. package/src/data-grid/data-grid-body-style.ts +0 -85
  82. package/src/data-grid/data-grid-body.ts +0 -749
  83. package/src/data-grid/data-grid-field.ts +0 -227
  84. package/src/data-grid/data-grid-footer.ts +0 -117
  85. package/src/data-grid/data-grid-header.ts +0 -574
  86. package/src/data-grid/data-grid.ts +0 -293
  87. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  88. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  89. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  90. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  91. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  92. package/src/data-grist.ts +0 -1233
  93. package/src/data-list/data-list-field.ts +0 -82
  94. package/src/data-list/data-list-gutter.ts +0 -108
  95. package/src/data-list/data-list.ts +0 -145
  96. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  97. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  98. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  99. package/src/data-list/record-partial.ts +0 -264
  100. package/src/data-manipulator.ts +0 -426
  101. package/src/data-provider.ts +0 -271
  102. package/src/data-report/data-report-body-style.ts +0 -58
  103. package/src/data-report/data-report-body.ts +0 -189
  104. package/src/data-report/data-report-component.ts +0 -138
  105. package/src/data-report/data-report-field.ts +0 -83
  106. package/src/data-report/data-report-header.ts +0 -242
  107. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  108. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  109. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  110. package/src/data-report.ts +0 -424
  111. package/src/editors/index.ts +0 -4
  112. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  113. package/src/editors/ox-grist-editor-color.ts +0 -10
  114. package/src/editors/ox-grist-editor-date.ts +0 -10
  115. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  116. package/src/editors/ox-grist-editor-email.ts +0 -10
  117. package/src/editors/ox-grist-editor-file.ts +0 -28
  118. package/src/editors/ox-grist-editor-image.ts +0 -31
  119. package/src/editors/ox-grist-editor-month.ts +0 -10
  120. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  121. package/src/editors/ox-grist-editor-number.ts +0 -27
  122. package/src/editors/ox-grist-editor-password.ts +0 -10
  123. package/src/editors/ox-grist-editor-select.ts +0 -55
  124. package/src/editors/ox-grist-editor-tel.ts +0 -10
  125. package/src/editors/ox-grist-editor-text.ts +0 -14
  126. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  127. package/src/editors/ox-grist-editor-time.ts +0 -10
  128. package/src/editors/ox-grist-editor-tree.ts +0 -27
  129. package/src/editors/ox-grist-editor-week.ts +0 -10
  130. package/src/editors/ox-grist-editor.ts +0 -207
  131. package/src/editors/ox-input-tree.ts +0 -226
  132. package/src/editors/registry.ts +0 -80
  133. package/src/empty-note.ts +0 -46
  134. package/src/filters/filter-checkbox.ts +0 -49
  135. package/src/filters/filter-input-barcode.ts +0 -34
  136. package/src/filters/filter-input.ts +0 -30
  137. package/src/filters/filter-range-date.ts +0 -81
  138. package/src/filters/filter-range-number.ts +0 -64
  139. package/src/filters/filter-select-buttons.ts +0 -60
  140. package/src/filters/filter-select.ts +0 -68
  141. package/src/filters/filter-styles.ts +0 -119
  142. package/src/filters/filters-form.ts +0 -476
  143. package/src/filters/index.ts +0 -10
  144. package/src/filters/registry.ts +0 -56
  145. package/src/formatters/date-formatter.ts +0 -3
  146. package/src/formatters/index.ts +0 -1
  147. package/src/formatters/number-formatter.ts +0 -3
  148. package/src/formatters/registry.ts +0 -30
  149. package/src/formatters/text-formatter.ts +0 -3
  150. package/src/gutters/gutter-button.ts +0 -51
  151. package/src/gutters/gutter-dirty.ts +0 -96
  152. package/src/gutters/gutter-row-selector.ts +0 -89
  153. package/src/gutters/gutter-sequence.ts +0 -54
  154. package/src/gutters/index.ts +0 -1
  155. package/src/gutters/registry.ts +0 -32
  156. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  157. package/src/handlers/index.ts +0 -1
  158. package/src/handlers/move-down.ts +0 -44
  159. package/src/handlers/move-up.ts +0 -44
  160. package/src/handlers/record-copy.ts +0 -38
  161. package/src/handlers/record-delete.ts +0 -30
  162. package/src/handlers/record-view-handler.ts +0 -27
  163. package/src/handlers/registry.ts +0 -42
  164. package/src/handlers/select-row-toggle.ts +0 -30
  165. package/src/handlers/select-row.ts +0 -27
  166. package/src/index.ts +0 -17
  167. package/src/personalizer/index.ts +0 -1
  168. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  169. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  170. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  171. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  172. package/src/record-view/index.ts +0 -2
  173. package/src/record-view/record-creator.ts +0 -226
  174. package/src/record-view/record-view-body.ts +0 -257
  175. package/src/record-view/record-view-handler.ts +0 -86
  176. package/src/record-view/record-view.ts +0 -122
  177. package/src/renderers/index.ts +0 -14
  178. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  179. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  180. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  181. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  182. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  183. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  184. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  185. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  186. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  187. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  188. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  189. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  190. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  191. package/src/renderers/ox-grist-renderer.ts +0 -35
  192. package/src/renderers/registry.ts +0 -111
  193. package/src/sorters/sorters-control.ts +0 -143
  194. package/src/types.ts +0 -813
  195. package/src/utils/index.ts +0 -2
  196. package/src/utils/list-param.ts +0 -72
  197. package/src/utils/supports-passive.ts +0 -13
  198. package/stories/accumulator-format.stories.ts +0 -276
  199. package/stories/barcode-input-filter.stories.ts +0 -216
  200. package/stories/bounded-select-filters.stories.ts +0 -333
  201. package/stories/bounded-select-record.stories.ts +0 -336
  202. package/stories/click-event.stories.ts +0 -283
  203. package/stories/creatable-only-column.stories.ts +0 -253
  204. package/stories/default-filters.stories.ts +0 -241
  205. package/stories/dynamic-editable.stories.ts +0 -313
  206. package/stories/empty-sorters.stories.ts +0 -180
  207. package/stories/explicit-fetch.stories.ts +0 -186
  208. package/stories/fixed-column.stories.ts +0 -416
  209. package/stories/grid-setting.stories.ts +0 -501
  210. package/stories/grist-modes.stories.ts +0 -451
  211. package/stories/group-header.stories.ts +0 -442
  212. package/stories/record-view.stories.ts +0 -143
  213. package/stories/textarea.stories.ts +0 -261
  214. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  215. package/stories/tree-column.stories.ts +0 -296
  216. package/tsconfig.json +0 -26
  217. package/web-dev-server.config.mjs +0 -27
  218. package/web-test-runner.config.mjs +0 -45
@@ -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
- }