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