@operato/data-grist 2.0.0-alpha.5 → 2.0.0-alpha.51

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 (188) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/dist/src/accumulator/accumulator.js +4 -4
  3. package/dist/src/accumulator/accumulator.js.map +1 -1
  4. package/dist/src/configure/rows-option-builder.js +2 -1
  5. package/dist/src/configure/rows-option-builder.js.map +1 -1
  6. package/dist/src/configure/zero-config.js +1 -0
  7. package/dist/src/configure/zero-config.js.map +1 -1
  8. package/dist/src/data-card/data-card.d.ts +1 -1
  9. package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
  10. package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
  11. package/dist/src/data-card/record-card.d.ts +1 -1
  12. package/dist/src/data-grid/data-grid-accum-field.js +3 -2
  13. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  14. package/dist/src/data-grid/data-grid-body.d.ts +3 -3
  15. package/dist/src/data-grid/data-grid-body.js +9 -4
  16. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  17. package/dist/src/data-grid/data-grid-field.d.ts +1 -1
  18. package/dist/src/data-grid/data-grid-field.js +2 -2
  19. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  20. package/dist/src/data-grid/data-grid-footer.d.ts +1 -1
  21. package/dist/src/data-grid/data-grid-header.js +1 -3
  22. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  23. package/dist/src/data-grid/data-grid.d.ts +1 -1
  24. package/dist/src/data-grid/data-grid.js +1 -1
  25. package/dist/src/data-grid/data-grid.js.map +1 -1
  26. package/dist/src/data-grist.d.ts +226 -4
  27. package/dist/src/data-grist.js +196 -4
  28. package/dist/src/data-grist.js.map +1 -1
  29. package/dist/src/data-list/data-list-gutter.js +12 -0
  30. package/dist/src/data-list/data-list-gutter.js.map +1 -1
  31. package/dist/src/data-list/data-list.d.ts +1 -1
  32. package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
  33. package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
  34. package/dist/src/data-list/record-partial.d.ts +1 -1
  35. package/dist/src/data-list/record-partial.js +2 -0
  36. package/dist/src/data-list/record-partial.js.map +1 -1
  37. package/dist/src/data-manipulator.d.ts +6 -6
  38. package/dist/src/data-manipulator.js +44 -29
  39. package/dist/src/data-manipulator.js.map +1 -1
  40. package/dist/src/data-report/data-report-body.d.ts +1 -1
  41. package/dist/src/data-report/data-report-component.d.ts +1 -1
  42. package/dist/src/data-report.d.ts +1 -1
  43. package/dist/src/editors/ox-grist-editor-checkbox.d.ts +3 -2
  44. package/dist/src/editors/ox-grist-editor-checkbox.js +9 -2
  45. package/dist/src/editors/ox-grist-editor-checkbox.js.map +1 -1
  46. package/dist/src/editors/ox-grist-editor-color.d.ts +1 -1
  47. package/dist/src/editors/ox-grist-editor-date.d.ts +1 -1
  48. package/dist/src/editors/ox-grist-editor-datetime.d.ts +2 -2
  49. package/dist/src/editors/ox-grist-editor-datetime.js +1 -2
  50. package/dist/src/editors/ox-grist-editor-datetime.js.map +1 -1
  51. package/dist/src/editors/ox-grist-editor-email.d.ts +1 -1
  52. package/dist/src/editors/ox-grist-editor-file.d.ts +3 -2
  53. package/dist/src/editors/ox-grist-editor-file.js +8 -2
  54. package/dist/src/editors/ox-grist-editor-file.js.map +1 -1
  55. package/dist/src/editors/ox-grist-editor-image.d.ts +2 -2
  56. package/dist/src/editors/ox-grist-editor-image.js +8 -8
  57. package/dist/src/editors/ox-grist-editor-image.js.map +1 -1
  58. package/dist/src/editors/ox-grist-editor-month.d.ts +1 -1
  59. package/dist/src/editors/ox-grist-editor-multiple-select.d.ts +1 -1
  60. package/dist/src/editors/ox-grist-editor-number.d.ts +3 -2
  61. package/dist/src/editors/ox-grist-editor-number.js +9 -9
  62. package/dist/src/editors/ox-grist-editor-number.js.map +1 -1
  63. package/dist/src/editors/ox-grist-editor-password.d.ts +1 -1
  64. package/dist/src/editors/ox-grist-editor-select.d.ts +1 -1
  65. package/dist/src/editors/ox-grist-editor-tel.d.ts +1 -1
  66. package/dist/src/editors/ox-grist-editor-text.d.ts +2 -1
  67. package/dist/src/editors/ox-grist-editor-text.js +3 -0
  68. package/dist/src/editors/ox-grist-editor-text.js.map +1 -1
  69. package/dist/src/editors/ox-grist-editor-textarea.d.ts +2 -1
  70. package/dist/src/editors/ox-grist-editor-textarea.js +3 -0
  71. package/dist/src/editors/ox-grist-editor-textarea.js.map +1 -1
  72. package/dist/src/editors/ox-grist-editor-time.d.ts +1 -1
  73. package/dist/src/editors/ox-grist-editor-tree.d.ts +1 -1
  74. package/dist/src/editors/ox-grist-editor-week.d.ts +1 -1
  75. package/dist/src/editors/ox-grist-editor.d.ts +4 -4
  76. package/dist/src/editors/ox-grist-editor.js +14 -12
  77. package/dist/src/editors/ox-grist-editor.js.map +1 -1
  78. package/dist/src/editors/ox-input-tree.d.ts +1 -1
  79. package/dist/src/empty-note.d.ts +1 -1
  80. package/dist/src/filters/filter-range-date.js +12 -1
  81. package/dist/src/filters/filter-range-date.js.map +1 -1
  82. package/dist/src/filters/filters-form.d.ts +1 -0
  83. package/dist/src/filters/filters-form.js +21 -3
  84. package/dist/src/filters/filters-form.js.map +1 -1
  85. package/dist/src/handlers/contextmenu-tree-mutation.js +1 -19
  86. package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
  87. package/dist/src/index.d.ts +0 -1
  88. package/dist/src/index.js +0 -1
  89. package/dist/src/index.js.map +1 -1
  90. package/dist/src/record-view/record-creator.d.ts +1 -1
  91. package/dist/src/record-view/record-view-body.d.ts +2 -2
  92. package/dist/src/record-view/record-view.d.ts +1 -1
  93. package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
  94. package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -1
  95. package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
  96. package/dist/src/types.d.ts +1 -8
  97. package/dist/src/types.js.map +1 -1
  98. package/dist/stories/accumulator.stories.js +10 -5
  99. package/dist/stories/accumulator.stories.js.map +1 -1
  100. package/dist/stories/dynamic-editable.stories.js +89 -80
  101. package/dist/stories/dynamic-editable.stories.js.map +1 -1
  102. package/dist/stories/fixed-column.stories.js +1 -2
  103. package/dist/stories/fixed-column.stories.js.map +1 -1
  104. package/dist/stories/grist-modes.stories.js +23 -2
  105. package/dist/stories/grist-modes.stories.js.map +1 -1
  106. package/dist/tsconfig.tsbuildinfo +1 -1
  107. package/docs/default-value/default-value.md +1 -1
  108. package/docs/default-value/value-generator/date-generator.md +2 -2
  109. package/docs/default-value/value-generator/month-date-generator.md +2 -2
  110. package/docs/default-value/value-generator/week-date-generator.md +2 -2
  111. package/docs/default-value/value-generator/year-date-generator.md +2 -2
  112. package/package.json +20 -19
  113. package/src/accumulator/accumulator.ts +4 -4
  114. package/src/configure/rows-option-builder.ts +11 -1
  115. package/src/configure/zero-config.ts +1 -0
  116. package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
  117. package/src/data-grid/data-grid-accum-field.ts +3 -2
  118. package/src/data-grid/data-grid-body.ts +10 -5
  119. package/src/data-grid/data-grid-field.ts +1 -1
  120. package/src/data-grid/data-grid-header.ts +2 -4
  121. package/src/data-grid/data-grid.ts +3 -3
  122. package/src/data-grist.ts +251 -4
  123. package/src/data-list/data-list-gutter.ts +12 -0
  124. package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
  125. package/src/data-list/record-partial.ts +2 -0
  126. package/src/data-manipulator.ts +52 -31
  127. package/src/editors/ox-grist-editor-checkbox.ts +12 -2
  128. package/src/editors/ox-grist-editor-datetime.ts +1 -2
  129. package/src/editors/ox-grist-editor-file.ts +12 -2
  130. package/src/editors/ox-grist-editor-image.ts +10 -7
  131. package/src/editors/ox-grist-editor-number.ts +11 -9
  132. package/src/editors/ox-grist-editor-text.ts +4 -0
  133. package/src/editors/ox-grist-editor-textarea.ts +4 -0
  134. package/src/editors/ox-grist-editor.ts +14 -10
  135. package/src/filters/filter-range-date.ts +16 -1
  136. package/src/filters/filters-form.ts +25 -2
  137. package/src/handlers/contextmenu-tree-mutation.ts +1 -19
  138. package/src/index.ts +0 -1
  139. package/src/types.ts +1 -9
  140. package/stories/accumulator.stories.ts +10 -5
  141. package/stories/dynamic-editable.stories.ts +96 -86
  142. package/stories/fixed-column.stories.ts +1 -2
  143. package/stories/grist-modes.stories.ts +23 -2
  144. package/themes/grist-theme.css +1 -1
  145. package/dist/src/value-generator/date-generator.d.ts +0 -6
  146. package/dist/src/value-generator/date-generator.js +0 -30
  147. package/dist/src/value-generator/date-generator.js.map +0 -1
  148. package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
  149. package/dist/src/value-generator/hour-time-generator.js +0 -29
  150. package/dist/src/value-generator/hour-time-generator.js.map +0 -1
  151. package/dist/src/value-generator/index.d.ts +0 -1
  152. package/dist/src/value-generator/index.js +0 -2
  153. package/dist/src/value-generator/index.js.map +0 -1
  154. package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
  155. package/dist/src/value-generator/minute-time-generator.js +0 -29
  156. package/dist/src/value-generator/minute-time-generator.js.map +0 -1
  157. package/dist/src/value-generator/month-date-generator.d.ts +0 -7
  158. package/dist/src/value-generator/month-date-generator.js +0 -31
  159. package/dist/src/value-generator/month-date-generator.js.map +0 -1
  160. package/dist/src/value-generator/now-generator.d.ts +0 -4
  161. package/dist/src/value-generator/now-generator.js +0 -8
  162. package/dist/src/value-generator/now-generator.js.map +0 -1
  163. package/dist/src/value-generator/registry.d.ts +0 -11
  164. package/dist/src/value-generator/registry.js +0 -50
  165. package/dist/src/value-generator/registry.js.map +0 -1
  166. package/dist/src/value-generator/time-generator.d.ts +0 -6
  167. package/dist/src/value-generator/time-generator.js +0 -28
  168. package/dist/src/value-generator/time-generator.js.map +0 -1
  169. package/dist/src/value-generator/today-generator.d.ts +0 -4
  170. package/dist/src/value-generator/today-generator.js +0 -8
  171. package/dist/src/value-generator/today-generator.js.map +0 -1
  172. package/dist/src/value-generator/week-date-generator.d.ts +0 -7
  173. package/dist/src/value-generator/week-date-generator.js +0 -29
  174. package/dist/src/value-generator/week-date-generator.js.map +0 -1
  175. package/dist/src/value-generator/year-date-generator.d.ts +0 -7
  176. package/dist/src/value-generator/year-date-generator.js +0 -29
  177. package/dist/src/value-generator/year-date-generator.js.map +0 -1
  178. package/src/value-generator/date-generator.ts +0 -35
  179. package/src/value-generator/hour-time-generator.ts +0 -43
  180. package/src/value-generator/index.ts +0 -1
  181. package/src/value-generator/minute-time-generator.ts +0 -43
  182. package/src/value-generator/month-date-generator.ts +0 -38
  183. package/src/value-generator/now-generator.ts +0 -10
  184. package/src/value-generator/registry.ts +0 -58
  185. package/src/value-generator/time-generator.ts +0 -33
  186. package/src/value-generator/today-generator.ts +0 -10
  187. package/src/value-generator/week-date-generator.ts +0 -40
  188. package/src/value-generator/year-date-generator.ts +0 -36
@@ -12,17 +12,20 @@ export class OxGristEditorImage extends OxGristEditor {
12
12
 
13
13
  _onchange(e: Event) {
14
14
  e.stopPropagation()
15
- this._dirtyValue = this.formatFromEditor(e)
16
- this._onfocusout()
17
- }
18
15
 
19
- formatFromEditor(e: Event) {
20
- // value가 image file object인지, image url인지 확인
21
16
  const input = e.target as HTMLInputElement
17
+
18
+ // value가 image file object인지, image url인지 확인
22
19
  if (input.files?.[0]) {
23
- return input.files[0]
20
+ this._dirtyValue = this.formatFromEditor(input.files[0])
24
21
  } else {
25
- return input.value
22
+ this._dirtyValue = this.formatFromEditor(input.value)
26
23
  }
24
+
25
+ this._onfocusout()
26
+ }
27
+
28
+ formatFromEditor(value: any) {
29
+ return value
27
30
  }
28
31
  }
@@ -1,20 +1,22 @@
1
1
  import { OxGristEditor } from './ox-grist-editor.js'
2
2
  import { customElement } from 'lit/decorators.js'
3
3
  import { html } from 'lit'
4
+ import { parseToNumberOrNull } from '@operato/utils'
4
5
 
5
6
  @customElement('ox-grist-editor-number')
6
7
  export class OxGristEditorNumber extends OxGristEditor {
7
- formatFromEditor(e: Event) {
8
- let value = (e.target as HTMLInputElement).value
8
+ get inlineEditable() {
9
+ return true
10
+ }
11
+
12
+ formatFromEditor(value: any) {
13
+ const parsed = parseToNumberOrNull(value) || null
9
14
 
10
- switch (this.column.type) {
11
- case 'float':
12
- return Number.parseFloat(value)
13
- case 'integer':
14
- return Number.parseInt(value)
15
- default:
16
- return Number(value)
15
+ if (parsed !== null && this.column.type == 'integer') {
16
+ return Math.floor(parsed)
17
17
  }
18
+
19
+ return parsed
18
20
  }
19
21
 
20
22
  get editorTemplate() {
@@ -4,6 +4,10 @@ import { html } from 'lit'
4
4
 
5
5
  @customElement('ox-grist-editor-text')
6
6
  export class OxGristEditorText extends OxGristEditor {
7
+ get inlineEditable() {
8
+ return true
9
+ }
10
+
7
11
  get editorTemplate() {
8
12
  return html` <input type="text" .value=${this.value} /> `
9
13
  }
@@ -6,6 +6,10 @@ import { html } from 'lit'
6
6
 
7
7
  @customElement('ox-grist-editor-textarea')
8
8
  export class OxGristEditorTextarea extends OxGristEditor {
9
+ get inlineEditable() {
10
+ return true
11
+ }
12
+
9
13
  get editorTemplate() {
10
14
  return html` <ox-input-textarea .value=${this.value}></ox-input-textarea> `
11
15
  }
@@ -4,7 +4,7 @@ import { customElement, property } from 'lit/decorators.js'
4
4
  import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'
5
5
  import { DataGridField } from '../data-grid/data-grid-field'
6
6
  import { ColumnConfig, GristRecord } from '../types'
7
- import { getDefaultValue } from '../value-generator'
7
+ import { getDefaultValue } from '@operato/time-calculator'
8
8
 
9
9
  const STYLE = css`
10
10
  :host {
@@ -91,8 +91,8 @@ export class OxGristEditor extends LitElement {
91
91
  return this.renderRoot.firstElementChild as HTMLElement
92
92
  }
93
93
 
94
- get directEditable() {
95
- return true
94
+ get inlineEditable() {
95
+ return false
96
96
  }
97
97
 
98
98
  async firstUpdated() {
@@ -121,19 +121,21 @@ export class OxGristEditor extends LitElement {
121
121
  currentValue = getDefaultValue(defaultValue, this.record)
122
122
  }
123
123
 
124
+ this.value = this._dirtyValue = this.formatForEditor(currentValue)
125
+
124
126
  // 입력을 위한 키를 누르면서 편집모드가 될때는 누른 키가 처음에 입력되도록, enter 같은 것을 눌러서 편집모드가 되면 현재 값으로 편집모드 전환
125
- const editorValue = this.field?.valueWithEdit ? this.field.valueWithEdit : this.formatForEditor(currentValue)
126
- this.value = this._dirtyValue = this.field?.type === 'number' ? Number(editorValue) : editorValue
127
+ const valueWith = this.inlineEditable && this.field?.valueWith
128
+ this.value = this._dirtyValue = valueWith ? this.formatFromEditor(valueWith) : this.formatForEditor(currentValue)
127
129
 
128
130
  requestAnimationFrame(() => {
129
131
  this.focus()
130
- this.select()
132
+ !valueWith && this.select()
131
133
  })
132
134
  }
133
135
 
134
136
  select() {
135
137
  const editor = this.editor
136
- if ((editor as HTMLInputElement)?.select && !this.field?.valueWithEdit) {
138
+ if ((editor as HTMLInputElement)?.select) {
137
139
  return (editor as HTMLInputElement).select()
138
140
  }
139
141
  }
@@ -149,8 +151,8 @@ export class OxGristEditor extends LitElement {
149
151
  return value == null ? '' : value
150
152
  }
151
153
 
152
- formatFromEditor(e: Event): any {
153
- return (e.target as HTMLInputElement).value
154
+ formatFromEditor(value: any): any {
155
+ return value
154
156
  }
155
157
 
156
158
  _onfocusout() {
@@ -180,7 +182,9 @@ export class OxGristEditor extends LitElement {
180
182
  _onchange(e: Event): void {
181
183
  e.stopPropagation()
182
184
 
183
- this._dirtyValue = this.formatFromEditor(e)
185
+ const value = (e.target as any)?.value
186
+
187
+ this._dirtyValue = this.formatFromEditor(value)
184
188
  }
185
189
 
186
190
  _onkeydown(e: Event): void {}
@@ -2,16 +2,31 @@ import { FilterConfigObject, FilterSelectRenderer } from '../types'
2
2
 
3
3
  import { html } from 'lit-html'
4
4
 
5
+ function formatDate(type: string, date: Date) {
6
+ var year = date.getFullYear()
7
+ var month = ('0' + (date.getMonth() + 1)).slice(-2)
8
+ var day = ('0' + date.getDate()).slice(-2)
9
+ var hours = ('0' + date.getHours()).slice(-2)
10
+ var minutes = ('0' + date.getMinutes()).slice(-2)
11
+
12
+ var formatDate = year + '-' + month + '-' + day
13
+
14
+ return type == 'date' ? formatDate : formatDate + 'T' + hours + ':' + minutes
15
+ }
16
+
5
17
  export const FilterRangeDate: FilterSelectRenderer = (column, value, owner) => {
6
18
  const filter = column.filter as FilterConfigObject
7
19
 
8
- const [from, to] = value instanceof Array ? value : []
20
+ var [from, to] = value instanceof Array ? value : []
9
21
 
10
22
  var type: any = filter?.type || column.type
11
23
  if (type === 'datetime') {
12
24
  type = 'datetime-local'
13
25
  }
14
26
 
27
+ from = formatDate(type, new Date(from))
28
+ to = formatDate(type, new Date(to))
29
+
15
30
  return html`
16
31
  <input
17
32
  name=${column.name}
@@ -6,6 +6,8 @@ import '@operato/input/ox-input-search.js'
6
6
  import { css, html, LitElement, PropertyValues, TemplateResult, nothing } from 'lit'
7
7
  import { customElement, property, queryAsync, state } from 'lit/decorators.js'
8
8
 
9
+ import { getDefaultValue } from '@operato/time-calculator'
10
+
9
11
  import { FilterConfigObject } from '..'
10
12
  import { DataGrist } from '../data-grist'
11
13
  import { ColumnConfig, FilterOperator, FilterValue, GristConfig } from '../types'
@@ -72,7 +74,6 @@ export class FiltersForm extends LitElement {
72
74
 
73
75
  if (grist) {
74
76
  this.config = grist.compiledConfig
75
- this.value = grist.filters || []
76
77
 
77
78
  grist.addEventListener('config-change', (e: Event) => {
78
79
  this.config = (e as CustomEvent).detail
@@ -102,6 +103,17 @@ export class FiltersForm extends LitElement {
102
103
  }
103
104
  }
104
105
 
106
+ buildDefaultValue(operator: string, defaultValue: any) {
107
+ if (defaultValue === undefined) {
108
+ return
109
+ }
110
+ if (operator == 'between') {
111
+ return (defaultValue as Array<any>).map(v => getDefaultValue(v, this))
112
+ } else {
113
+ return getDefaultValue(defaultValue, this)
114
+ }
115
+ }
116
+
105
117
  updated(changes: PropertyValues<this>) {
106
118
  if (changes.has('config')) {
107
119
  const filters = this.config.columns.filter(columnConfig => !!columnConfig.filter)
@@ -114,6 +126,15 @@ export class FiltersForm extends LitElement {
114
126
  return filter!.operator === 'search'
115
127
  })
116
128
 
129
+ const grist = this.closest('ox-grist') as DataGrist
130
+
131
+ this.value = (grist.filters || []).map(filter => {
132
+ return {
133
+ ...filter,
134
+ value: this.buildDefaultValue(filter!.operator, filter!.value)
135
+ }
136
+ })
137
+
117
138
  this.empty = (this.searchColumns.length === 0 || this.withoutSearch) && this.filterColumns.length === 0
118
139
  }
119
140
  }
@@ -160,7 +181,9 @@ export class FiltersForm extends LitElement {
160
181
  ? 'text'
161
182
  : type
162
183
  )[idx]
163
- const value = this.value?.find(filter => filter.name == name)?.value
184
+ const value =
185
+ this.value?.find(filter => filter.name == name)?.value ??
186
+ this.buildDefaultValue(operator!, (filter as FilterConfigObject)?.value)
164
187
 
165
188
  if (!renderer) {
166
189
  return html``
@@ -9,7 +9,7 @@ function dispatchEvent(field: DataGridField, event: string) {
9
9
  new CustomEvent(event, {
10
10
  bubbles: true,
11
11
  composed: true,
12
- detail: field
12
+ detail: field.record
13
13
  })
14
14
  )
15
15
  }
@@ -54,24 +54,6 @@ export const ContextMenuTreeMutation = function (
54
54
  <mwc-icon slot="icon">playlist_add</mwc-icon>
55
55
  </ox-popup-menuitem>
56
56
 
57
- <ox-popup-menuitem
58
- label="move up"
59
- @click=${() => {
60
- dispatchEvent(field, 'move-up')
61
- }}
62
- >
63
- <mwc-icon slot="icon">arrow_upward</mwc-icon>
64
- </ox-popup-menuitem>
65
-
66
- <ox-popup-menuitem
67
- label="move down"
68
- @click=${() => {
69
- dispatchEvent(field, 'move-down')
70
- }}
71
- >
72
- <mwc-icon slot="icon">arrow_downward</mwc-icon>
73
- </ox-popup-menuitem>
74
-
75
57
  <div separator></div>
76
58
 
77
59
  <ox-popup-menuitem
package/src/index.ts CHANGED
@@ -12,6 +12,5 @@ export * from './gutters'
12
12
  export * from './filters'
13
13
  export * from './sorters/sorters-control'
14
14
  export * from './record-view'
15
- export * from './value-generator'
16
15
 
17
16
  export * from './utils/list-param'
package/src/types.ts CHANGED
@@ -427,15 +427,6 @@ export type HeaderConfig = {
427
427
  */
428
428
  export type HeaderRenderer = (column: ColumnConfig) => any
429
429
 
430
- /**
431
- * Function type for generating values.
432
- *
433
- * @callback ValueGeneratorFn
434
- * @param {...any} args - The arguments used for generating a value.
435
- * @returns {*} - The generated value.
436
- */
437
- export type ValueGeneratorFn = (...args: any[]) => any
438
-
439
430
  /**
440
431
  * Configuration for specifying default values for fields in a record.
441
432
  * Default values can be set using predefined value generator functions or custom user-defined functions.
@@ -627,6 +618,7 @@ export type ImexConfig = {
627
618
  export type RowsConfig = {
628
619
  accumulator?: boolean
629
620
  appendable: boolean
621
+ editable: boolean
630
622
  insertable: boolean
631
623
  selectable?: RowSelectableConfig
632
624
  groups: GroupConfig[]
@@ -79,7 +79,8 @@ const config = {
79
79
  },
80
80
  filter: 'search',
81
81
  sortable: true,
82
- width: 120
82
+ width: 120,
83
+ fixed: true
83
84
  },
84
85
  {
85
86
  type: 'string',
@@ -105,6 +106,10 @@ const config = {
105
106
  align: 'right'
106
107
  },
107
108
  accumulator: 'avg',
109
+ // accumulator: {
110
+ // type: 'avg',
111
+ // tag: true
112
+ // },
108
113
  sortable: true,
109
114
  width: 130
110
115
  },
@@ -115,7 +120,10 @@ const config = {
115
120
  header: 'accval2',
116
121
  record: {
117
122
  editable: true,
118
- align: 'right'
123
+ align: 'right',
124
+ renderer: (value: any, column: any, record: any) => {
125
+ return value && Intl.NumberFormat('en-US').format(value)
126
+ }
119
127
  },
120
128
  accumulator: {
121
129
  type: 'sum',
@@ -162,9 +170,6 @@ const config = {
162
170
  {
163
171
  name: 'name',
164
172
  desc: true
165
- },
166
- {
167
- name: 'email'
168
173
  }
169
174
  ],
170
175
  pagination: {
@@ -24,6 +24,7 @@ const fetchHandler: FetchHandler = async ({ sorters = [], filters, page, limit }
24
24
  name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
25
25
  description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
26
26
  number: idx,
27
+ float: 1.3,
27
28
  date: '2023-09-20',
28
29
  routing: {
29
30
  id: '006dc64d-4fb9-4afc-a9ea-962bd1b9e110',
@@ -101,7 +102,8 @@ function buildConfig({ headerFilter }: { headerFilter: boolean }) {
101
102
  editable: (value: any, column: any, record: any, rowIndex: any, field: any) => {
102
103
  return record?.name !== 'heartyoh-3'
103
104
  }
104
- }
105
+ },
106
+ width: 40
105
107
  },
106
108
  {
107
109
  type: 'number',
@@ -117,6 +119,15 @@ function buildConfig({ headerFilter }: { headerFilter: boolean }) {
117
119
  },
118
120
  width: 80
119
121
  },
122
+ {
123
+ type: 'float',
124
+ name: 'float',
125
+ header: 'float',
126
+ record: {
127
+ editable: true
128
+ },
129
+ width: 80
130
+ },
120
131
  {
121
132
  type: 'date',
122
133
  name: 'date',
@@ -182,102 +193,101 @@ interface ArgTypes {
182
193
  headerFilter: boolean
183
194
  }
184
195
 
185
- const Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) => html` <link
186
- href="https://fonts.googleapis.com/css?family=Material+Icons&display=block"
187
- rel="stylesheet"
188
- />
189
- <link href="/themes/app-theme.css" rel="stylesheet" />
190
- <link href="/themes/oops-theme.css" rel="stylesheet" />
191
- <link href="/themes/grist-theme.css" rel="stylesheet" />
196
+ const Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) =>
197
+ html` <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
198
+ <link href="/themes/app-theme.css" rel="stylesheet" />
199
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
200
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
192
201
 
193
- <style>
194
- [slot='headroom'] {
195
- display: flex;
196
- flex-direction: row;
197
- align-items: center;
198
- padding: var(--padding-default) var(--padding-wide);
199
- background-color: var(--theme-white-color);
200
- box-shadow: var(--box-shadow);
202
+ <style>
203
+ [slot='headroom'] {
204
+ display: flex;
205
+ flex-direction: row;
206
+ align-items: center;
207
+ padding: var(--padding-default) var(--padding-wide);
208
+ background-color: var(--theme-white-color);
209
+ box-shadow: var(--box-shadow);
201
210
 
202
- --mdc-icon-size: 24px;
203
- }
204
- #sorters mwc-icon,
205
- #modes mwc-icon {
206
- --mdc-icon-size: 18px;
207
- }
208
- #sorters {
209
- margin-left: auto;
210
- margin-right: var(--margin-default);
211
- padding-left: var(--padding-narrow);
212
- border-bottom: var(--border-dark-color);
213
- position: relative;
214
- color: var(--secondary-color);
215
- font-size: var(--fontsize-default);
216
- user-select: none;
217
- }
218
-
219
- #sorters > * {
220
- padding: var(--padding-narrow);
221
- vertical-align: middle;
222
- }
223
-
224
- #filters {
225
- display: flex;
226
- justify-content: center;
227
- align-items: center;
228
- }
211
+ --mdc-icon-size: 24px;
212
+ }
213
+ #sorters mwc-icon,
214
+ #modes mwc-icon {
215
+ --mdc-icon-size: 18px;
216
+ }
217
+ #sorters {
218
+ margin-left: auto;
219
+ margin-right: var(--margin-default);
220
+ padding-left: var(--padding-narrow);
221
+ border-bottom: var(--border-dark-color);
222
+ position: relative;
223
+ color: var(--secondary-color);
224
+ font-size: var(--fontsize-default);
225
+ user-select: none;
226
+ }
229
227
 
230
- #filters * {
231
- margin-right: var(--margin-default);
232
- }
228
+ #sorters > * {
229
+ padding: var(--padding-narrow);
230
+ vertical-align: middle;
231
+ }
233
232
 
234
- @media only screen and (max-width: 460px) {
235
233
  #filters {
236
- flex-direction: column;
234
+ display: flex;
235
+ justify-content: center;
236
+ align-items: center;
237
237
  }
238
238
 
239
- #modes {
240
- display: none;
239
+ #filters * {
240
+ margin-right: var(--margin-default);
241
241
  }
242
- }
243
- </style>
244
242
 
245
- <ox-grist
246
- .config=${buildConfig({ headerFilter })}
247
- mode="GRID"
248
- .fetchHandler=${fetchHandler}
249
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
250
- @field-change="${(e: any) => {
251
- console.log(e.detail.record.name, e.detail.record.number)
252
- }}"
253
- >
254
- <div slot="headroom">
255
- <div id="filters">
256
- <ox-filters-form></ox-filters-form>
257
- </div>
243
+ @media only screen and (max-width: 460px) {
244
+ #filters {
245
+ flex-direction: column;
246
+ }
258
247
 
259
- <div id="sorters">
260
- Sort
261
- <mwc-icon
262
- @click=${(e: Event) => {
263
- const target = e.currentTarget as HTMLElement
264
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
265
- right: 0,
266
- top: target.offsetTop + target.offsetHeight
267
- })
268
- }}
269
- >expand_more</mwc-icon
270
- >
271
- <ox-popup id="sorter-control">
272
- <ox-sorters-control> </ox-sorters-control>
273
- </ox-popup>
274
- </div>
248
+ #modes {
249
+ display: none;
250
+ }
251
+ }
252
+ </style>
275
253
 
276
- <ox-record-creator id="add" light-popup>
277
- <button><mwc-icon>add</mwc-icon></button>
278
- </ox-record-creator>
279
- </div>
280
- </ox-grist>`
254
+ <ox-grist
255
+ .config=${buildConfig({ headerFilter })}
256
+ mode="GRID"
257
+ .fetchHandler=${fetchHandler}
258
+ @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
259
+ @field-change=${(e: any) => {
260
+ const { name, number, chk } = e.detail.record
261
+ console.log(name, number, chk)
262
+ }}
263
+ >
264
+ <div slot="headroom">
265
+ <div id="filters">
266
+ <ox-filters-form></ox-filters-form>
267
+ </div>
268
+
269
+ <div id="sorters">
270
+ Sort
271
+ <mwc-icon
272
+ @click=${(e: Event) => {
273
+ const target = e.currentTarget as HTMLElement
274
+ ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
275
+ right: 0,
276
+ top: target.offsetTop + target.offsetHeight
277
+ })
278
+ }}
279
+ >expand_more</mwc-icon
280
+ >
281
+ <ox-popup id="sorter-control">
282
+ <ox-sorters-control> </ox-sorters-control>
283
+ </ox-popup>
284
+ </div>
285
+
286
+ <ox-record-creator id="add" light-popup>
287
+ <button><mwc-icon>add</mwc-icon></button>
288
+ </ox-record-creator>
289
+ </div>
290
+ </ox-grist>`
281
291
 
282
292
  export const Regular = Template.bind({})
283
293
  Regular.args = {}
@@ -144,8 +144,7 @@ const config = {
144
144
  },
145
145
  filter: 'search',
146
146
  sortable: true,
147
- width: 120,
148
- fixed: true
147
+ width: 120
149
148
  },
150
149
  {
151
150
  type: 'string',
@@ -237,7 +237,10 @@ const config = {
237
237
  editable: true,
238
238
  defaultValue: 10000.1
239
239
  },
240
- filter: 'between',
240
+ filter: {
241
+ operator: 'between',
242
+ value: [1, 100]
243
+ },
241
244
  sortable: true,
242
245
  width: 50
243
246
  },
@@ -266,7 +269,25 @@ const config = {
266
269
  name: 'now'
267
270
  }
268
271
  },
269
- filter: 'between',
272
+ filter: {
273
+ operator: 'between',
274
+ type: 'datetime',
275
+ value: [
276
+ {
277
+ name: 'today',
278
+ params: {
279
+ type: 'datetime'
280
+ }
281
+ },
282
+ {
283
+ name: 'now',
284
+ params: {
285
+ type: 'datetime',
286
+ relativeDays: 1
287
+ }
288
+ }
289
+ ]
290
+ },
270
291
  sortable: true,
271
292
  width: 180
272
293
  },
@@ -41,7 +41,7 @@ body {
41
41
 
42
42
  --grid-record-background-color: var(--theme-white-color);
43
43
  --grid-record-odd-background-color: #f9f7f5;
44
- --grid-record-padding: 0 0 0 var(--padding-default);
44
+ --grid-record-padding: 0 5px 0 5px;
45
45
  --grid-record-color: var(--secondary-color);
46
46
  --grid-record-color-hover: var(--primary-color);
47
47
  --grid-record-wide-fontsize: var(--fontsize-small);
@@ -1,6 +0,0 @@
1
- export type RelativeDateParams = {
2
- relativeDate?: number;
3
- timeZone?: string;
4
- format?: 'timestamp' | 'date' | Intl.DateTimeFormatOptions;
5
- };
6
- export declare const getRelativeDate: (params?: RelativeDateParams) => Date | number | string;
@@ -1,30 +0,0 @@
1
- export const getRelativeDate = (params = {}) => {
2
- const { relativeDate = 0, timeZone, format } = params;
3
- const relativeSeconds = relativeDate * 24 * 60 * 60;
4
- const now = new Date();
5
- let currentDate;
6
- if (timeZone) {
7
- const options = { timeZone };
8
- const currentDateISOString = now.toLocaleString('en-US', options).split(',')[0];
9
- currentDate = new Date(currentDateISOString);
10
- }
11
- else {
12
- currentDate = now;
13
- }
14
- const startOfDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
15
- const targetTime = startOfDay.getTime() + relativeSeconds * 1000;
16
- if (format === 'date') {
17
- return new Date(targetTime);
18
- }
19
- else if (format === 'timestamp') {
20
- return targetTime;
21
- }
22
- else if (format) {
23
- const formatter = new Intl.DateTimeFormat(undefined, format);
24
- return formatter.format(new Date(targetTime));
25
- }
26
- else {
27
- return new Date(targetTime);
28
- }
29
- };
30
- //# sourceMappingURL=date-generator.js.map