@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,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
- @mousedown=${(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
- }