@operato/data-grist 7.1.31 → 7.1.33

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-field.js +4 -1
  3. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  4. package/dist/src/record-view/record-view-body.js +8 -4
  5. package/dist/src/record-view/record-view-body.js.map +1 -1
  6. package/dist/src/types.d.ts +1 -1
  7. package/dist/src/types.js.map +1 -1
  8. package/dist/tsconfig.tsbuildinfo +1 -1
  9. package/package.json +10 -10
  10. package/.storybook/main.js +0 -3
  11. package/.storybook/preview.js +0 -52
  12. package/.storybook/server.mjs +0 -8
  13. package/demo/data-grist-test.html +0 -468
  14. package/demo/favicon.ico +0 -0
  15. package/demo/index.html +0 -541
  16. package/demo/report-test.html +0 -249
  17. package/src/accumulator/accumulator.ts +0 -63
  18. package/src/configure/column-builder.ts +0 -114
  19. package/src/configure/config-builder.ts +0 -40
  20. package/src/configure/filters-option-builder.ts +0 -8
  21. package/src/configure/imex-option-builder.ts +0 -5
  22. package/src/configure/list-option-builder.ts +0 -9
  23. package/src/configure/rows-option-builder.ts +0 -38
  24. package/src/configure/tree-option-builder.ts +0 -22
  25. package/src/configure/zero-config.ts +0 -83
  26. package/src/const.ts +0 -1
  27. package/src/data-card/data-card-field.ts +0 -94
  28. package/src/data-card/data-card-gutter-menu.ts +0 -94
  29. package/src/data-card/data-card-gutter.ts +0 -103
  30. package/src/data-card/data-card.ts +0 -154
  31. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  32. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  33. package/src/data-card/record-card.ts +0 -289
  34. package/src/data-consumer.ts +0 -11
  35. package/src/data-grid/data-grid-accum-field.ts +0 -109
  36. package/src/data-grid/data-grid-body-style.ts +0 -99
  37. package/src/data-grid/data-grid-body.ts +0 -753
  38. package/src/data-grid/data-grid-field.ts +0 -236
  39. package/src/data-grid/data-grid-footer.ts +0 -117
  40. package/src/data-grid/data-grid-header.ts +0 -574
  41. package/src/data-grid/data-grid.ts +0 -293
  42. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  43. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  44. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  45. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  46. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  47. package/src/data-grist.ts +0 -1233
  48. package/src/data-list/data-list-field.ts +0 -82
  49. package/src/data-list/data-list-gutter.ts +0 -108
  50. package/src/data-list/data-list.ts +0 -145
  51. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  52. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  53. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  54. package/src/data-list/record-partial.ts +0 -255
  55. package/src/data-manipulator.ts +0 -426
  56. package/src/data-provider.ts +0 -271
  57. package/src/data-report/data-report-body-style.ts +0 -58
  58. package/src/data-report/data-report-body.ts +0 -189
  59. package/src/data-report/data-report-component.ts +0 -138
  60. package/src/data-report/data-report-field.ts +0 -83
  61. package/src/data-report/data-report-header.ts +0 -242
  62. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  63. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  64. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  65. package/src/data-report.ts +0 -424
  66. package/src/editors/index.ts +0 -4
  67. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  68. package/src/editors/ox-grist-editor-color.ts +0 -10
  69. package/src/editors/ox-grist-editor-date.ts +0 -10
  70. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  71. package/src/editors/ox-grist-editor-email.ts +0 -10
  72. package/src/editors/ox-grist-editor-file.ts +0 -28
  73. package/src/editors/ox-grist-editor-image.ts +0 -31
  74. package/src/editors/ox-grist-editor-month.ts +0 -10
  75. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  76. package/src/editors/ox-grist-editor-number.ts +0 -27
  77. package/src/editors/ox-grist-editor-password.ts +0 -10
  78. package/src/editors/ox-grist-editor-select.ts +0 -55
  79. package/src/editors/ox-grist-editor-tel.ts +0 -10
  80. package/src/editors/ox-grist-editor-text.ts +0 -14
  81. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  82. package/src/editors/ox-grist-editor-time.ts +0 -10
  83. package/src/editors/ox-grist-editor-tree.ts +0 -27
  84. package/src/editors/ox-grist-editor-varname.ts +0 -36
  85. package/src/editors/ox-grist-editor-week.ts +0 -10
  86. package/src/editors/ox-grist-editor.ts +0 -207
  87. package/src/editors/ox-input-tree.ts +0 -226
  88. package/src/editors/registry.ts +0 -82
  89. package/src/empty-note.ts +0 -46
  90. package/src/filters/filter-checkbox.ts +0 -49
  91. package/src/filters/filter-input-barcode.ts +0 -34
  92. package/src/filters/filter-input.ts +0 -30
  93. package/src/filters/filter-range-date.ts +0 -81
  94. package/src/filters/filter-range-number.ts +0 -64
  95. package/src/filters/filter-select-buttons.ts +0 -60
  96. package/src/filters/filter-select.ts +0 -68
  97. package/src/filters/filter-styles.ts +0 -119
  98. package/src/filters/filters-form.ts +0 -476
  99. package/src/filters/index.ts +0 -10
  100. package/src/filters/registry.ts +0 -56
  101. package/src/formatters/date-formatter.ts +0 -3
  102. package/src/formatters/index.ts +0 -1
  103. package/src/formatters/number-formatter.ts +0 -3
  104. package/src/formatters/registry.ts +0 -30
  105. package/src/formatters/text-formatter.ts +0 -3
  106. package/src/gutters/gutter-button.ts +0 -51
  107. package/src/gutters/gutter-dirty.ts +0 -96
  108. package/src/gutters/gutter-row-selector.ts +0 -89
  109. package/src/gutters/gutter-sequence.ts +0 -54
  110. package/src/gutters/index.ts +0 -1
  111. package/src/gutters/registry.ts +0 -32
  112. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  113. package/src/handlers/index.ts +0 -1
  114. package/src/handlers/move-down.ts +0 -44
  115. package/src/handlers/move-up.ts +0 -44
  116. package/src/handlers/record-copy.ts +0 -38
  117. package/src/handlers/record-delete.ts +0 -30
  118. package/src/handlers/record-view-handler.ts +0 -27
  119. package/src/handlers/registry.ts +0 -42
  120. package/src/handlers/select-row-toggle.ts +0 -30
  121. package/src/handlers/select-row.ts +0 -27
  122. package/src/index.ts +0 -17
  123. package/src/personalizer/index.ts +0 -1
  124. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  125. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  126. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  127. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  128. package/src/record-view/index.ts +0 -2
  129. package/src/record-view/ox-record-creator.ts +0 -289
  130. package/src/record-view/record-view-body.ts +0 -250
  131. package/src/record-view/record-view-handler.ts +0 -86
  132. package/src/record-view/record-view.ts +0 -122
  133. package/src/renderers/index.ts +0 -14
  134. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  135. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  136. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  137. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  138. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  139. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  140. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  141. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  142. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  143. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  144. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  145. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  146. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  147. package/src/renderers/ox-grist-renderer.ts +0 -35
  148. package/src/renderers/registry.ts +0 -111
  149. package/src/sorters/sorters-control.ts +0 -143
  150. package/src/types.ts +0 -813
  151. package/src/utils/index.ts +0 -2
  152. package/src/utils/list-param.ts +0 -72
  153. package/src/utils/supports-passive.ts +0 -13
  154. package/stories/accumulator-format.stories.ts +0 -276
  155. package/stories/barcode-input-filter.stories.ts +0 -216
  156. package/stories/bounded-select-filters.stories.ts +0 -333
  157. package/stories/bounded-select-record.stories.ts +0 -336
  158. package/stories/click-event-custom.stories.ts +0 -288
  159. package/stories/click-event.stories.ts +0 -283
  160. package/stories/creatable-only-column.stories.ts +0 -253
  161. package/stories/default-filters.stories.ts +0 -241
  162. package/stories/dynamic-editable.stories.ts +0 -313
  163. package/stories/empty-sorters.stories.ts +0 -180
  164. package/stories/explicit-fetch.stories.ts +0 -186
  165. package/stories/fixed-column.stories.ts +0 -416
  166. package/stories/grid-setting.stories.ts +0 -501
  167. package/stories/grist-modes.stories.ts +0 -451
  168. package/stories/group-header.stories.ts +0 -442
  169. package/stories/record-view.stories.ts +0 -143
  170. package/stories/textarea.stories.ts +0 -261
  171. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  172. package/stories/tree-column.stories.ts +0 -296
  173. package/tsconfig.json +0 -26
  174. package/web-dev-server.config.mjs +0 -27
  175. package/web-test-runner.config.mjs +0 -45
@@ -1,189 +0,0 @@
1
- import { PropertyValues, css, html, nothing } from 'lit'
2
- import { customElement, property, state } from 'lit/decorators.js'
3
- import { ifDefined } from 'lit/directives/if-defined.js'
4
-
5
- import { OxGristRenderer } from './ox-grist-renderer'
6
-
7
- @customElement('ox-grist-tree-renderer')
8
- export class OxGristRendererTree extends OxGristRenderer {
9
- static styles = css`
10
- :host {
11
- overflow: hidden;
12
- }
13
-
14
- div[wrap] {
15
- position: relative;
16
-
17
- display: flex;
18
- align-items: center;
19
- gap: 6px;
20
-
21
- width: 100%;
22
- padding-left: calc(var(--tree-depth, 0) * 18px);
23
- }
24
-
25
- span[expander] {
26
- display: inline-block;
27
- vertical-align: middle;
28
- width: 12px;
29
- height: 20px;
30
- cursor: pointer;
31
- position: relative;
32
- }
33
-
34
- span[expander][collapsed]::before {
35
- position: absolute;
36
- top: 50%;
37
- left: 50%;
38
- transform: translate(-25%, -50%) rotate(-90deg);
39
- content: ' ';
40
- border: 5px solid transparent;
41
- border-top: 5px solid var(--md-sys-color-on-primary-container, #1890ff);
42
- }
43
-
44
- span[expander][expanded]::before {
45
- position: absolute;
46
- top: 50%;
47
- left: 50%;
48
- transform: translate(-50%, -25%);
49
- content: ' ';
50
- border: 5px solid transparent;
51
- border-top: 5px solid var(--md-sys-color-on-primary-container, #1890ff);
52
- }
53
-
54
- span[checkbox] {
55
- display: inline-block;
56
- vertical-align: middle;
57
- width: 12px;
58
- height: 20px;
59
- cursor: pointer;
60
- position: relative;
61
- }
62
-
63
- span[checkbox]::before {
64
- cursor: pointer;
65
- position: absolute;
66
- top: 50%;
67
- left: 50%;
68
- transform: translate(-50%, -50%);
69
- content: ' ';
70
- display: block;
71
- width: 10px;
72
- height: 10px;
73
- border: 1px solid var(--md-sys-color-on-primary-container, #1890ff);
74
- border-radius: 2px;
75
- }
76
-
77
- span[label] {
78
- flex: 1;
79
- }
80
-
81
- span[checkbox][checked='checked']::before {
82
- background-color: var(--md-sys-color-on-primary-container, #1890ff);
83
- border-color: var(--md-sys-color-on-primary-container, #1890ff);
84
- }
85
-
86
- span[checkbox][checked='checked']::after {
87
- position: absolute;
88
- content: ' ';
89
- display: block;
90
- top: 50%;
91
- left: 50%;
92
- width: 3px;
93
- height: 7px;
94
- border: 2px solid #fff;
95
- border-top: none;
96
- border-left: none;
97
- -webkit-transform: translate(-50%, -50%) rotate(45deg);
98
- -ms-transform: translate(-50%, -50%) rotate(45deg);
99
- transform: translate(-50%, -50%) rotate(45deg);
100
- }
101
-
102
- span[checkbox][checked='half-checked']::before {
103
- background-color: var(--md-sys-color-on-primary-container, #1890ff);
104
- border-color: var(--md-sys-color-on-primary-container, #1890ff);
105
- }
106
-
107
- span[checkbox][checked='half-checked']::after {
108
- position: absolute;
109
- content: ' ';
110
- display: block;
111
- top: 50%;
112
- left: 50%;
113
- transform: translate(-50%, -50%);
114
- width: 10px;
115
- height: 2px;
116
- background-color: var(--md-sys-color-surface);
117
- }
118
- `
119
-
120
- @state() private checked?: 'checked' | 'half-checked' | 'unchecked'
121
- @state() private expanded?: boolean = false
122
-
123
- get rendererTemplate() {
124
- var { selectable = false } = this.column.record.options || {}
125
- var { __children__ } = this.record
126
-
127
- const expandable = __children__ && __children__.length > 0
128
-
129
- return html`
130
- <div wrap>
131
- ${expandable
132
- ? html`
133
- <span
134
- expander
135
- @click=${this.onClickExpander.bind(this)}
136
- ?expanded=${this.expanded}
137
- ?collapsed=${!this.expanded}
138
- ></span>
139
- `
140
- : html`<span expander></span>`}
141
- ${selectable
142
- ? html` <span checkbox @click=${this.onClickCheckbox.bind(this)} checked=${ifDefined(this.checked)}></span>`
143
- : nothing}
144
-
145
- <span label>${this.value}</span>
146
- </div>
147
- `
148
- }
149
-
150
- updated(changes: PropertyValues<this>) {
151
- var { __depth__, __check_in_tree__, __expanded__ } = this.record
152
- this.checked = __check_in_tree__
153
- this.expanded = __expanded__
154
-
155
- this.style.setProperty('--tree-depth', String(__depth__))
156
- }
157
-
158
- onClickCheckbox(e: MouseEvent) {
159
- e.stopPropagation()
160
-
161
- this.dispatchEvent(
162
- new CustomEvent('check-in-tree', {
163
- bubbles: true,
164
- composed: true,
165
- detail: this.record
166
- })
167
- )
168
-
169
- this.requestUpdate()
170
- }
171
-
172
- onClickExpander(e: MouseEvent) {
173
- e.stopPropagation()
174
-
175
- this.dispatchEvent(
176
- new CustomEvent(this.record.__expanded__ ? 'collapse-node' : 'expand-node', {
177
- bubbles: true,
178
- composed: true,
179
- detail: this.record
180
- })
181
- )
182
-
183
- this.requestUpdate()
184
- }
185
-
186
- get editableOnClick() {
187
- return false
188
- }
189
- }
@@ -1,35 +0,0 @@
1
- import { ColumnConfig, GristRecord } from '../types'
2
- import { LitElement, css, html } from 'lit'
3
- import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'
4
- import { customElement, property } from 'lit/decorators.js'
5
-
6
- import { DataGridField } from '../data-grid/data-grid-field'
7
-
8
- const STYLE = css``
9
-
10
- @customElement('ox-grist-renderer')
11
- export class OxGristRenderer extends LitElement {
12
- static styles = STYLE
13
-
14
- @property({ type: Object }) value?: any
15
- @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN
16
- @property({ type: Object }) record: GristRecord = ZERO_RECORD
17
- @property({ type: Number }) rowIndex?: number
18
- @property({ type: Object }) field?: DataGridField
19
- @property({ type: Number }) row?: number
20
-
21
- render() {
22
- return this.rendererTemplate
23
- }
24
-
25
- async firstUpdated() {
26
- const align = this.column.record.align
27
- if (align) {
28
- this.style.textAlign = align
29
- }
30
- }
31
-
32
- get rendererTemplate() {
33
- return html``
34
- }
35
- }
@@ -1,111 +0,0 @@
1
- import { DataCardField } from '../data-card/data-card-field.js'
2
- import { DataCardGutter } from '../data-card/data-card-gutter.js'
3
- import { RecordCard } from '../data-card/record-card.js'
4
- import { DataGridField } from '../data-grid/data-grid-field.js'
5
- import { DataListField } from '../data-list/data-list-field.js'
6
- import { DataListGutter } from '../data-list/data-list-gutter.js'
7
- import { RecordPartial } from '../data-list/record-partial.js'
8
- import { DataReportField } from '../data-report/data-report-field.js'
9
- import { ColumnConfig, FieldRenderer, GristRecord } from '../types.js'
10
- import { OxGristRendererBoolean } from './ox-grist-renderer-boolean.js'
11
- import { OxGristRendererColor } from './ox-grist-renderer-color.js'
12
- import { OxGristRendererDate } from './ox-grist-renderer-date.js'
13
- import { OxGristRendererFile } from './ox-grist-renderer-file.js'
14
- import { OxGristRendererImage } from './ox-grist-renderer-image.js'
15
- import { OxGristRendererJson5 } from './ox-grist-renderer-json5.js'
16
- import { OxGristRendererLink } from './ox-grist-renderer-link.js'
17
- import { OxGristRendererPassword } from './ox-grist-renderer-password.js'
18
- import { OxGristRendererProgress } from './ox-grist-renderer-progress.js'
19
- import { OxGristRendererSelect } from './ox-grist-renderer-select.js'
20
- import { OxGristRendererText } from './ox-grist-renderer-text.js'
21
- import { OxGristRendererTextarea } from './ox-grist-renderer-textarea.js'
22
- import { OxGristRendererTree } from './ox-grist-renderer-tree.js'
23
- import { OxGristRenderer } from './ox-grist-renderer.js'
24
-
25
- interface OxGristRendererConstructor {
26
- new (): OxGristRenderer
27
- }
28
-
29
- function isClass(func: Function) {
30
- return typeof func === 'function' && /^class\s/.test(Function.prototype.toString.call(func))
31
- }
32
-
33
- var RENDERERS: {
34
- [name: string]: FieldRenderer | OxGristRendererConstructor
35
- } = {
36
- string: OxGristRendererText,
37
- text: OxGristRendererText,
38
- textarea: OxGristRendererTextarea,
39
- email: OxGristRendererText,
40
- tel: OxGristRendererText,
41
- password: OxGristRendererPassword,
42
- integer: OxGristRendererText,
43
- float: OxGristRendererText,
44
- number: OxGristRendererText,
45
- select: OxGristRendererSelect,
46
- boolean: OxGristRendererBoolean,
47
- checkbox: OxGristRendererBoolean,
48
- month: OxGristRendererText,
49
- week: OxGristRendererText,
50
- date: OxGristRendererDate,
51
- time: OxGristRendererDate,
52
- datetime: OxGristRendererDate,
53
- color: OxGristRendererColor,
54
- progress: OxGristRendererProgress,
55
- link: OxGristRendererLink,
56
- image: OxGristRendererImage,
57
- file: OxGristRendererFile,
58
- json5: OxGristRendererJson5,
59
- tree: OxGristRendererTree
60
- }
61
-
62
- export function registerRenderer(type: string, renderer: FieldRenderer) {
63
- RENDERERS[type] = renderer
64
- }
65
-
66
- export function unregisterRenderer(type: string): void {
67
- delete RENDERERS[type]
68
- }
69
-
70
- export function getRenderers(): { [name: string]: FieldRenderer | OxGristRendererConstructor } {
71
- return { ...RENDERERS }
72
- }
73
-
74
- export function getRenderer(type: string | FieldRenderer): FieldRenderer {
75
- if (typeof type === 'function') {
76
- return type
77
- }
78
-
79
- var renderer: FieldRenderer | OxGristRendererConstructor = RENDERERS[type || 'text'] || OxGristRendererText
80
-
81
- if (!isClass(renderer)) {
82
- return renderer as FieldRenderer
83
- }
84
-
85
- return function (
86
- value: any,
87
- column: ColumnConfig,
88
- record: GristRecord,
89
- rowIndex: number,
90
- field:
91
- | DataGridField
92
- | RecordCard
93
- | DataCardGutter
94
- | DataCardField
95
- | DataListGutter
96
- | DataListField
97
- | RecordPartial
98
- | DataReportField
99
- | Element
100
- ) {
101
- var element: OxGristRenderer = new (renderer as OxGristRendererConstructor)() as any
102
-
103
- element.value = value
104
- element.record = record
105
- element.column = column
106
- element.row = rowIndex
107
- element.field = field as DataGridField
108
-
109
- return element as OxGristRenderer
110
- }
111
- }
@@ -1,143 +0,0 @@
1
- import { css, html, LitElement, PropertyValues, TemplateResult } from 'lit'
2
- import { customElement, state } from 'lit/decorators.js'
3
-
4
- import { DataGrist } from '../data-grist'
5
- import { ColumnConfig, GristConfig, SorterConfig } from '../types'
6
-
7
- @customElement('ox-sorters-control')
8
- export class SortersControl extends LitElement {
9
- static styles = [
10
- css`
11
- :host {
12
- display: flex;
13
- flex-direction: column;
14
- white-space: nowrap;
15
- }
16
-
17
- [option] {
18
- flex: 1;
19
-
20
- display: flex;
21
- justify-content: center;
22
- align-items: center;
23
- border-bottom: 1px solid rgba(0, 0, 0, 0.05);
24
- padding: 3px var(--spacing-small);
25
- }
26
-
27
- [option] > span {
28
- margin-right: auto;
29
- text-transform: capitalize;
30
- user-select: none;
31
- }
32
- [option] md-icon {
33
- margin-left: var(--spacing-medium);
34
- --md-icon-size: var(--fontsize-large);
35
- color: var(--md-sys-color-on-primary-container);
36
- }
37
- [option] sub {
38
- color: var(--md-sys-color-on-primary-container);
39
- }
40
- `
41
- ]
42
-
43
- @state() config!: GristConfig
44
- @state() columns: ColumnConfig[] = []
45
- @state() sorters: SorterConfig[] = []
46
-
47
- connectedCallback(): void {
48
- super.connectedCallback()
49
-
50
- const grist = this.closest('ox-grist') as DataGrist
51
-
52
- if (grist) {
53
- this.config = grist.compiledConfig
54
- grist.addEventListener('config-change', (e: Event) => {
55
- this.config = (e as CustomEvent).detail
56
- })
57
-
58
- grist.addEventListener('fetch-params-change', e => {
59
- const { sorters, from } = (e as CustomEvent).detail || {}
60
- if (from === 'sorters-control') {
61
- return
62
- }
63
-
64
- sorters && (this.sorters = sorters)
65
- })
66
- }
67
- }
68
-
69
- updated(changes: PropertyValues<this>) {
70
- if (changes.has('config')) {
71
- this.columns = this.config.columns.filter(column => column.sortable)
72
- this.sorters = this.sorters || this.config.sorters || []
73
- }
74
- }
75
-
76
- render(): TemplateResult {
77
- const columns = this.columns
78
-
79
- const current = this.sorters || []
80
-
81
- return html`
82
- ${columns.map(column => {
83
- const { name } = column
84
- var rank = current.findIndex(sorter => sorter.name === name) + 1
85
- var desc = rank !== 0 ? current[rank - 1].desc : null
86
-
87
- if (current.length <= 1) {
88
- rank = 0
89
- }
90
-
91
- return html`
92
- <div
93
- option
94
- @click=${(e: MouseEvent) => {
95
- this.onChangeSort(name)
96
- }}
97
- >
98
- <span>${column.header.renderer.call(this, column)}</span>
99
- ${desc === null
100
- ? html``
101
- : html`
102
- <md-icon>${desc ? 'keyboard_arrow_down' : 'keyboard_arrow_up'}</md-icon>
103
- ${rank === 0 ? html`` : html`<sub>${rank}</sub>`}
104
- `}
105
- </div>
106
- `
107
- })}
108
- `
109
- }
110
-
111
- onChangeSort(name: string) {
112
- var sorters = [...this.sorters]
113
-
114
- var idx = sorters.findIndex(sorter => sorter.name == name)
115
- if (idx !== -1) {
116
- let sorter = sorters[idx]
117
- if (sorter.desc) {
118
- sorters.splice(idx, 1)
119
- } else {
120
- sorter.desc = true
121
- }
122
- } else {
123
- var sorter = {
124
- name
125
- }
126
-
127
- sorters.push(sorter)
128
- }
129
-
130
- this.sorters = sorters
131
-
132
- this.dispatchEvent(
133
- new CustomEvent('fetch-params-change', {
134
- bubbles: true,
135
- composed: true,
136
- detail: {
137
- sorters: this.sorters,
138
- from: 'sorters-control'
139
- }
140
- })
141
- )
142
- }
143
- }