@operato/data-grist 8.0.0-beta.0 → 8.0.0-beta.2

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 (168) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/package.json +10 -10
  3. package/.storybook/main.js +0 -3
  4. package/.storybook/preview.js +0 -52
  5. package/.storybook/server.mjs +0 -8
  6. package/demo/data-grist-test.html +0 -468
  7. package/demo/favicon.ico +0 -0
  8. package/demo/index.html +0 -541
  9. package/demo/report-test.html +0 -249
  10. package/src/accumulator/accumulator.ts +0 -63
  11. package/src/configure/column-builder.ts +0 -114
  12. package/src/configure/config-builder.ts +0 -40
  13. package/src/configure/filters-option-builder.ts +0 -8
  14. package/src/configure/imex-option-builder.ts +0 -5
  15. package/src/configure/list-option-builder.ts +0 -9
  16. package/src/configure/rows-option-builder.ts +0 -38
  17. package/src/configure/tree-option-builder.ts +0 -22
  18. package/src/configure/zero-config.ts +0 -83
  19. package/src/const.ts +0 -1
  20. package/src/data-card/data-card-field.ts +0 -94
  21. package/src/data-card/data-card-gutter-menu.ts +0 -94
  22. package/src/data-card/data-card-gutter.ts +0 -103
  23. package/src/data-card/data-card.ts +0 -154
  24. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  25. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  26. package/src/data-card/record-card.ts +0 -298
  27. package/src/data-consumer.ts +0 -11
  28. package/src/data-grid/data-grid-accum-field.ts +0 -109
  29. package/src/data-grid/data-grid-body-style.ts +0 -85
  30. package/src/data-grid/data-grid-body.ts +0 -765
  31. package/src/data-grid/data-grid-field.ts +0 -227
  32. package/src/data-grid/data-grid-footer.ts +0 -119
  33. package/src/data-grid/data-grid-header.ts +0 -578
  34. package/src/data-grid/data-grid.ts +0 -293
  35. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  36. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  37. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  38. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  39. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  40. package/src/data-grist.ts +0 -1233
  41. package/src/data-list/data-list-field.ts +0 -82
  42. package/src/data-list/data-list-gutter.ts +0 -108
  43. package/src/data-list/data-list.ts +0 -145
  44. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  45. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  46. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  47. package/src/data-list/record-partial.ts +0 -264
  48. package/src/data-manipulator.ts +0 -426
  49. package/src/data-provider.ts +0 -271
  50. package/src/data-report/data-report-body-style.ts +0 -58
  51. package/src/data-report/data-report-body.ts +0 -189
  52. package/src/data-report/data-report-component.ts +0 -138
  53. package/src/data-report/data-report-field.ts +0 -83
  54. package/src/data-report/data-report-header.ts +0 -242
  55. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  56. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  57. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  58. package/src/data-report.ts +0 -424
  59. package/src/editors/index.ts +0 -4
  60. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  61. package/src/editors/ox-grist-editor-color.ts +0 -10
  62. package/src/editors/ox-grist-editor-date.ts +0 -10
  63. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  64. package/src/editors/ox-grist-editor-email.ts +0 -10
  65. package/src/editors/ox-grist-editor-file.ts +0 -28
  66. package/src/editors/ox-grist-editor-image.ts +0 -31
  67. package/src/editors/ox-grist-editor-month.ts +0 -10
  68. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  69. package/src/editors/ox-grist-editor-number.ts +0 -27
  70. package/src/editors/ox-grist-editor-password.ts +0 -10
  71. package/src/editors/ox-grist-editor-select.ts +0 -55
  72. package/src/editors/ox-grist-editor-tel.ts +0 -10
  73. package/src/editors/ox-grist-editor-text.ts +0 -14
  74. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  75. package/src/editors/ox-grist-editor-time.ts +0 -10
  76. package/src/editors/ox-grist-editor-tree.ts +0 -27
  77. package/src/editors/ox-grist-editor-varname.ts +0 -36
  78. package/src/editors/ox-grist-editor-week.ts +0 -10
  79. package/src/editors/ox-grist-editor.ts +0 -207
  80. package/src/editors/ox-input-tree.ts +0 -226
  81. package/src/editors/registry.ts +0 -82
  82. package/src/empty-note.ts +0 -46
  83. package/src/filters/filter-checkbox.ts +0 -49
  84. package/src/filters/filter-input-barcode.ts +0 -34
  85. package/src/filters/filter-input.ts +0 -30
  86. package/src/filters/filter-range-date.ts +0 -81
  87. package/src/filters/filter-range-number.ts +0 -64
  88. package/src/filters/filter-select-buttons.ts +0 -60
  89. package/src/filters/filter-select.ts +0 -68
  90. package/src/filters/filter-styles.ts +0 -119
  91. package/src/filters/filters-form.ts +0 -476
  92. package/src/filters/index.ts +0 -10
  93. package/src/filters/registry.ts +0 -56
  94. package/src/formatters/date-formatter.ts +0 -3
  95. package/src/formatters/index.ts +0 -1
  96. package/src/formatters/number-formatter.ts +0 -3
  97. package/src/formatters/registry.ts +0 -30
  98. package/src/formatters/text-formatter.ts +0 -3
  99. package/src/gutters/gutter-button.ts +0 -51
  100. package/src/gutters/gutter-dirty.ts +0 -96
  101. package/src/gutters/gutter-row-selector.ts +0 -89
  102. package/src/gutters/gutter-sequence.ts +0 -54
  103. package/src/gutters/index.ts +0 -1
  104. package/src/gutters/registry.ts +0 -32
  105. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  106. package/src/handlers/index.ts +0 -1
  107. package/src/handlers/move-down.ts +0 -44
  108. package/src/handlers/move-up.ts +0 -44
  109. package/src/handlers/record-copy.ts +0 -38
  110. package/src/handlers/record-delete.ts +0 -30
  111. package/src/handlers/record-view-handler.ts +0 -27
  112. package/src/handlers/registry.ts +0 -42
  113. package/src/handlers/select-row-toggle.ts +0 -30
  114. package/src/handlers/select-row.ts +0 -27
  115. package/src/index.ts +0 -17
  116. package/src/personalizer/index.ts +0 -1
  117. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  118. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  119. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  120. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  121. package/src/record-view/index.ts +0 -2
  122. package/src/record-view/ox-record-creator.ts +0 -289
  123. package/src/record-view/record-view-body.ts +0 -257
  124. package/src/record-view/record-view-handler.ts +0 -86
  125. package/src/record-view/record-view.ts +0 -122
  126. package/src/renderers/index.ts +0 -14
  127. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  128. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  129. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  130. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  131. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  132. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  133. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  134. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  135. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  136. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  137. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  138. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  139. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  140. package/src/renderers/ox-grist-renderer.ts +0 -35
  141. package/src/renderers/registry.ts +0 -111
  142. package/src/sorters/sorters-control.ts +0 -143
  143. package/src/types.ts +0 -813
  144. package/src/utils/index.ts +0 -2
  145. package/src/utils/list-param.ts +0 -72
  146. package/src/utils/supports-passive.ts +0 -13
  147. package/stories/accumulator-format.stories.ts +0 -276
  148. package/stories/barcode-input-filter.stories.ts +0 -216
  149. package/stories/bounded-select-filters.stories.ts +0 -333
  150. package/stories/bounded-select-record.stories.ts +0 -336
  151. package/stories/click-event-custom.stories.ts +0 -287
  152. package/stories/click-event.stories.ts +0 -283
  153. package/stories/creatable-only-column.stories.ts +0 -253
  154. package/stories/default-filters.stories.ts +0 -241
  155. package/stories/dynamic-editable.stories.ts +0 -313
  156. package/stories/empty-sorters.stories.ts +0 -180
  157. package/stories/explicit-fetch.stories.ts +0 -186
  158. package/stories/fixed-column.stories.ts +0 -416
  159. package/stories/grid-setting.stories.ts +0 -501
  160. package/stories/grist-modes.stories.ts +0 -451
  161. package/stories/group-header.stories.ts +0 -442
  162. package/stories/record-view.stories.ts +0 -143
  163. package/stories/textarea.stories.ts +0 -261
  164. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  165. package/stories/tree-column.stories.ts +0 -296
  166. package/tsconfig.json +0 -26
  167. package/web-dev-server.config.mjs +0 -27
  168. package/web-test-runner.config.mjs +0 -45
@@ -1,122 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
- import './record-view-body'
3
- import '@operato/input/ox-input-file.js'
4
- import '../data-grid/data-grid-field'
5
-
6
- import { css, html, LitElement } from 'lit'
7
- import { customElement, property, query } from 'lit/decorators.js'
8
-
9
- import { ScrollbarStyles } from '@operato/styles'
10
-
11
- import { ZERO_RECORD } from '../configure/zero-config'
12
- import { ColumnConfig, GristRecord, ValidationReason } from '../types'
13
-
14
- import { RecordViewBody } from './record-view-body'
15
-
16
- @customElement('ox-record-view')
17
- export class RecordView extends LitElement {
18
- static styles = [
19
- ScrollbarStyles,
20
- css`
21
- :host {
22
- display: flex;
23
- flex-direction: column;
24
- background-color: var(--record-view-background-color);
25
- }
26
-
27
- ox-record-view-body {
28
- flex: 1;
29
- overflow-y: auto;
30
- }
31
-
32
- [footer] {
33
- text-align: right;
34
- background-color: var(--record-view-footer-background);
35
- box-shadow: var(--context-toolbar-shadow-line);
36
- }
37
-
38
- [footer] button {
39
- display: inline-block;
40
- align-items: center;
41
- justify-content: center;
42
-
43
- background-color: transparent;
44
- border: var(--record-view-footer-button-border);
45
- border-width: var(--record-view-footer-button-border-width);
46
- padding: var(--spacing-tiny) var(--spacing-medium);
47
- color: var(--record-view-footer-button-color);
48
- font-size: var(--md-sys-typescale-title-medium-size, 1rem);
49
- line-height: 2;
50
- }
51
-
52
- [footer] button * {
53
- vertical-align: middle;
54
- }
55
-
56
- [footer] button md-icon {
57
- --md-icon-size: var(--icon-size-small);
58
- margin-right: var(--spacing-small, 4px);
59
- }
60
-
61
- [footer] button[ok] {
62
- background-color: var(--record-view-footer-focus-background);
63
- }
64
- `
65
- ]
66
-
67
- @property({ type: Array }) columns: ColumnConfig[] = []
68
- @property({ type: Object }) record: GristRecord = ZERO_RECORD
69
- @property({ type: Number }) rowIndex: number = -1
70
-
71
- @query('ox-record-view-body') body!: RecordViewBody
72
-
73
- render() {
74
- return html`
75
- <ox-record-view-body .columns=${this.columns} .record=${this.record} .rowIndex=${this.rowIndex}>
76
- </ox-record-view-body>
77
- <div footer>
78
- <button @click=${this.onReset.bind(this)}><md-icon>refresh</md-icon><span>Reset</span></button>
79
- <button @click=${this.onCancel.bind(this)}><md-icon>clear</md-icon><span>Cancel</span></button>
80
- <button @click=${this.onOK.bind(this)} ok><md-icon>task_alt</md-icon><span>OK</span></button>
81
- </div>
82
- `
83
- }
84
-
85
- firstUpdated() {
86
- this.setAttribute('tabindex', '0')
87
- }
88
-
89
- setFocusOnInvalid(invalidFields: { field: string; reason: ValidationReason }[]) {
90
- this.body.setFocusOnInvalid(invalidFields)
91
- }
92
-
93
- onReset() {
94
- this.focus()
95
-
96
- this.dispatchEvent(
97
- new CustomEvent('reset', {
98
- detail: this.record
99
- })
100
- )
101
- }
102
-
103
- onCancel() {
104
- this.focus()
105
-
106
- this.dispatchEvent(
107
- new CustomEvent('cancel', {
108
- detail: this.record
109
- })
110
- )
111
- }
112
-
113
- onOK() {
114
- this.focus()
115
-
116
- this.dispatchEvent(
117
- new CustomEvent('ok', {
118
- detail: this.record
119
- })
120
- )
121
- }
122
- }
@@ -1,14 +0,0 @@
1
- export * from './registry.js'
2
-
3
- export * from './ox-grist-renderer.js'
4
- export * from './ox-grist-renderer-boolean.js'
5
- export * from './ox-grist-renderer-color.js'
6
- export * from './ox-grist-renderer-date.js'
7
- export * from './ox-grist-renderer-link.js'
8
- export * from './ox-grist-renderer-password.js'
9
- export * from './ox-grist-renderer-progress.js'
10
- export * from './ox-grist-renderer-text.js'
11
- export * from './ox-grist-renderer-select.js'
12
- export * from './ox-grist-renderer-image.js'
13
- export * from './ox-grist-renderer-file.js'
14
- export * from './ox-grist-renderer-json5.js'
@@ -1,43 +0,0 @@
1
- import { FieldRenderer } from '../types'
2
- import { html } from 'lit'
3
-
4
- export const OxGristRendererBoolean: FieldRenderer = (value, column, record, rowIndex, field) => {
5
- let { editable } = column.record
6
- if (typeof editable === 'function') {
7
- editable = editable.call(field, value, column, record, rowIndex, field)
8
- }
9
-
10
- return html`
11
- <input
12
- type="checkbox"
13
- .checked=${!!value && !!String(value).match(/true/i)}
14
- ?disabled=${!editable}
15
- @pointerdown=${(e: Event) => {
16
- /* edit mode로 전환되지 않도록 차단함. 체크박스인풋은 렌더러 모드에서도 처리가능하므로. */
17
- e.stopPropagation()
18
- }}
19
- @click=${(e: Event) => {
20
- e.stopPropagation()
21
- /*
22
- * 특별하게, checkbox인 경우에, editor가 활성화되지 않아도, renderer에서 값을 변경할 수 있게 함.
23
- * checkbox가 클릭되면, 클릭에 의해 변경된 값을 레코드에 반영하기 위해서 value-changed 이벤트를 발생시킨다.
24
- *
25
- * 만일, readonly인 경우에는 click 이벤트가 발생하지 않으므로, 클릭으로 에디트할 수 없게 됨.
26
- */
27
- field.dispatchEvent(
28
- new CustomEvent('field-change', {
29
- bubbles: true,
30
- composed: true,
31
- detail: {
32
- before: value,
33
- after: (e.target as HTMLInputElement).checked,
34
- column: column,
35
- record: record,
36
- row: rowIndex
37
- }
38
- })
39
- )
40
- }}
41
- />
42
- `
43
- }
@@ -1,15 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- export const OxGristRendererColor: FieldRenderer = (value, column, record, rowIndex, field) => {
6
- value = value == null ? '#000' : value
7
-
8
- return html`
9
- <div
10
- style="display:flex;align-items:center;justify-content:center;width:100%;height:100%;background-color:${value};"
11
- >
12
- ${value ? html`<p>${value}</p>` : html`<p>&nbsp</p>`}
13
- </div>
14
- `
15
- }
@@ -1,62 +0,0 @@
1
- import { FieldRenderer } from '../types'
2
- import { html } from 'lit'
3
-
4
- // TODO 로케일 설정에 따라서 포맷이 바뀌도록 해야한다.
5
- const DATETIME_OPTIONS = {
6
- year: 'numeric',
7
- month: 'numeric',
8
- day: 'numeric',
9
- hour: 'numeric',
10
- minute: 'numeric',
11
- second: 'numeric',
12
- hour12: false
13
- }
14
-
15
- const DATE_OPTIONS = {
16
- year: 'numeric',
17
- month: 'numeric',
18
- day: 'numeric'
19
- }
20
-
21
- const TIME_OPTIONS = {
22
- hour: 'numeric',
23
- minute: 'numeric',
24
- second: 'numeric'
25
- }
26
-
27
- const OPTIONS = {
28
- datetime: DATETIME_OPTIONS,
29
- time: TIME_OPTIONS,
30
- date: DATE_OPTIONS
31
- }
32
-
33
- function getsec(time: string): number {
34
- var arr = time.split(':')
35
- return Number(arr[0]) * 3600 + Number(arr[1]) * 60 + (Number(arr[2]) || 0)
36
- }
37
-
38
- /*
39
- TODO date, time, month, week 등 datetime 이 외의 타입인 경우에는 문자열로 처리하도록 한다.
40
- 따라서, 이 경우는 타임존에 대한 처리가 불필요하다.
41
- */
42
- export const OxGristRendererDate: FieldRenderer = (value, column, record, rowIndex, field) => {
43
- if (!value) {
44
- return ''
45
- }
46
-
47
- if (!isNaN(Number(value))) value = Number(value)
48
-
49
- var options = column.record.options || OPTIONS[column.type as 'datetime' | 'date' | 'time']
50
- var formatter = new Intl.DateTimeFormat(navigator.language, options)
51
-
52
- switch (column.type) {
53
- case 'datetime':
54
- case 'date':
55
- value = formatter.format(new Date(value))
56
- break
57
- case 'time':
58
- default:
59
- }
60
-
61
- return value ? html`<span>${value}</span>` : html`<span>&nbsp</span>`
62
- }
@@ -1,31 +0,0 @@
1
- import { html, nothing } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- function download(file: { mimetype: string; name: string; fullpath: string }) {
6
- const element = document.createElement('a')
7
- element.setAttribute('href', file.fullpath)
8
- element.setAttribute('download', file.name!)
9
- document.body.appendChild(element)
10
- element.click()
11
- }
12
-
13
- export const OxGristRendererFile: FieldRenderer = (value, column, record, rowIndex, field) => {
14
- let text: string
15
-
16
- if (!value) {
17
- return html`<span>&nbsp;</span>`
18
- } else if (typeof value === 'string') {
19
- return html`<span>${value}</span>`
20
- } else {
21
- const files = value as { mimetype: string; name: string; fullpath: string }[]
22
- return html`<span
23
- >${files.map(
24
- (file, idx) => html`
25
- <a @click=${() => download(file)} file><md-icon>description</md-icon>${file.name}</a>
26
- ${files.length - 1 == idx ? html`</br>` : nothing}
27
- `
28
- )}</span
29
- >`
30
- }
31
- }
@@ -1,27 +0,0 @@
1
- import { FieldRenderer } from '../types'
2
- import { html } from 'lit'
3
-
4
- const IMAGE_FALLBACK = new URL('../../../assets/images/no-image.png', import.meta.url).href
5
-
6
- export const OxGristRendererImage: FieldRenderer = (value, column, record, rowIndex, field) => {
7
- let src: string
8
-
9
- if (!value) {
10
- src = IMAGE_FALLBACK
11
- } else if (typeof value === 'string') {
12
- src = value
13
- } else {
14
- src = URL.createObjectURL(value)
15
- requestAnimationFrame(() => URL.revokeObjectURL(src))
16
- }
17
-
18
- const { width, height } = column.record.options || {}
19
-
20
- return html` <img
21
- src=${src}
22
- width=${width}
23
- height=${height}
24
- style="object-fit: contain; max-width: 100%;"
25
- onerror="this.src !== '${IMAGE_FALLBACK}' && (this.src = '${IMAGE_FALLBACK}')"
26
- />`
27
- }
@@ -1,36 +0,0 @@
1
- import JSON5 from 'json5'
2
- import { html } from 'lit'
3
-
4
- import { FieldRenderer } from '../types'
5
-
6
- function onmouseover(e: Event) {
7
- const element = e.target as HTMLPreElement
8
- var parsed
9
- try {
10
- parsed = JSON5.parse(element.textContent!)
11
- } catch {}
12
-
13
- element.setAttribute('data-tooltip', JSON5.stringify(parsed, null, 2))
14
-
15
- const rect = element.getBoundingClientRect()
16
- element.style.setProperty('--tooltip-top', `${rect.top + rect.height}px`)
17
- element.style.setProperty('--tooltip-left', `${rect.left}px`)
18
- }
19
-
20
- function onmouseout(e: Event) {
21
- const element = e.target as HTMLPreElement
22
- element.removeAttribute('data-tooltip')
23
- }
24
-
25
- export const OxGristRendererJson5: FieldRenderer = (value, column, record, rowIndex, field) => {
26
- var parsed: any = value
27
-
28
- if (typeof value === 'string') {
29
- try {
30
- parsed = JSON5.parse(value)
31
- } catch {}
32
- }
33
-
34
- const text = parsed == null ? '' : JSON5.stringify(parsed)
35
- return html`<pre @mouseover=${onmouseover} @mouseout=${onmouseout}>${text}</pre>`
36
- }
@@ -1,17 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- export const OxGristRendererLink: FieldRenderer = (value, column, record, rowIndex, field) => {
6
- var { href, target } = column.record.options || {}
7
-
8
- value = value == null ? '' : value
9
-
10
- if (typeof href == 'function') {
11
- href = href(value, column, record, rowIndex, field)
12
- }
13
-
14
- return target
15
- ? html` <a style="text-decoration:none;color:inherit" href=${href || value} target=${target}>${value}&nbsp;</a> `
16
- : html` <a style="text-decoration:none;color:inherit" href=${href || value}>${value}&nbsp;</a> `
17
- }
@@ -1,7 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- export const OxGristRendererPassword: FieldRenderer = (value, column, record, rowIndex, field) => {
6
- return html`<span>********</span>`
7
- }
@@ -1,45 +0,0 @@
1
- import { css, html } from 'lit'
2
- import { customElement, property } from 'lit/decorators.js'
3
-
4
- import { OxGristRenderer } from './ox-grist-renderer'
5
-
6
- @customElement('ox-grist-progress-renderer')
7
- export class OxGristRendererProgress extends OxGristRenderer {
8
- static styles = css`
9
- :host {
10
- display: block;
11
- position: relative;
12
-
13
- width: 100%;
14
- }
15
-
16
- #border {
17
- display: block;
18
- position: absolute;
19
-
20
- height: 100%;
21
- width: 100%;
22
- box-sizing: border-box;
23
-
24
- border: var(--grist-input-progress-border);
25
- background-color: var(--grist-input-progress-background);
26
- }
27
-
28
- #bar {
29
- background-color: var(--grist-input-progress-bar-background);
30
- text-align: left;
31
- color: var(--grist-input-progress-bar-color);
32
- }
33
- `
34
-
35
- get rendererTemplate() {
36
- var { min = 0, max = 100 } = this.column.record.options || {}
37
- var value = Number(this.value)
38
- var progress = isNaN(value) ? 0 : Math.min(100, Math.max(0, ((value - min) * 100) / (max - min)))
39
-
40
- return html`
41
- <div id="border"></div>
42
- <div id="bar" style="width:${progress}%">&nbsp;${progress}</div>
43
- `
44
- }
45
- }
@@ -1,58 +0,0 @@
1
- import { html } from 'lit'
2
- import { until } from 'lit/directives/until.js'
3
-
4
- import { FieldRenderer, SelectOption, SelectOptionObject } from '../types'
5
-
6
- function buildOptions(options: SelectOption[], value: any) {
7
- const selectOptionObjects = options.map(option => {
8
- switch (typeof option) {
9
- case 'string':
10
- return {
11
- display: option,
12
- value: option
13
- }
14
- case 'object':
15
- return {
16
- display: option.display || option.name,
17
- value: option.value
18
- }
19
- default:
20
- return option
21
- }
22
- }) as SelectOptionObject[]
23
-
24
- var res = selectOptionObjects
25
- ? selectOptionObjects.filter((option: any) => option.value == String(value == null ? '' : value))
26
- : []
27
-
28
- if (res.length) {
29
- return html`<span>${res[0].display || res[0].name || ''}</span>`
30
- }
31
- return html`<span>${value}</span>`
32
- }
33
-
34
- export const OxGristRendererSelect: FieldRenderer = (value, column, record, rowIndex, field) => {
35
- if (value == null) {
36
- return ''
37
- }
38
-
39
- var rowOptionField = column.record.rowOptionField && record[column.record.rowOptionField]
40
- var options = rowOptionField?.options ? rowOptionField.options : column.record.options
41
-
42
- if (!options) {
43
- console.error(`options value for select '${column.name}' column is mandatory.`)
44
- } else if (typeof options == 'function') {
45
- options = options.call(null, value, column, record, rowIndex, field)
46
-
47
- if (options instanceof Promise) {
48
- return html`${until(
49
- options.then(options => buildOptions(options, value)),
50
- value
51
- )}`
52
- } else {
53
- return buildOptions((options || []) as SelectOption[], value)
54
- }
55
- } else {
56
- return buildOptions((options || []) as SelectOption[], value)
57
- }
58
- }
@@ -1,16 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { format as formatter } from '@operato/utils'
4
-
5
- import { FieldRenderer } from '../types'
6
-
7
- export const OxGristRendererText: FieldRenderer = (value, column, record, rowIndex, field) => {
8
- var { format } = column.record || {}
9
-
10
- var text = value == null ? '' : value
11
- if (format) {
12
- text = formatter(format, text)
13
- }
14
-
15
- return html`<span data-reactive-tooltip>${text}&nbsp;</span>`
16
- }
@@ -1,7 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- export const OxGristRendererTextarea: FieldRenderer = (value, column, record, rowIndex, field) => {
6
- return html`<span style="height:auto;white-space: pre-wrap;word-wrap:break-word;">${value}&nbsp;</span>`
7
- }