@operato/form 2.0.0-alpha.8 → 2.0.0-alpha.86

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 (67) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/demo/index.html +14 -3
  3. package/dist/src/components/ox-custom-input.d.ts +1 -1
  4. package/dist/src/components/ox-custom-select.d.ts +1 -1
  5. package/dist/src/components/ox-file-uploader.d.ts +1 -1
  6. package/dist/src/components/ox-file-uploader.js +7 -7
  7. package/dist/src/components/ox-file-uploader.js.map +1 -1
  8. package/dist/src/components/ox-form-paginator.d.ts +1 -1
  9. package/dist/src/components/ox-search-form.d.ts +2 -2
  10. package/dist/src/components/ox-search-form.js +36 -36
  11. package/dist/src/components/ox-search-form.js.map +1 -1
  12. package/dist/src/filters/filter-checkbox.d.ts +1 -1
  13. package/dist/src/filters/filter-checkbox.js +4 -2
  14. package/dist/src/filters/filter-checkbox.js.map +1 -1
  15. package/dist/src/filters/filter-input-barcode.d.ts +1 -1
  16. package/dist/src/filters/filter-input-barcode.js.map +1 -1
  17. package/dist/src/filters/filter-input.d.ts +1 -1
  18. package/dist/src/filters/filter-input.js.map +1 -1
  19. package/dist/src/filters/filter-range-date.d.ts +1 -1
  20. package/dist/src/filters/filter-range-date.js +14 -3
  21. package/dist/src/filters/filter-range-date.js.map +1 -1
  22. package/dist/src/filters/filter-range-number.d.ts +1 -1
  23. package/dist/src/filters/filter-range-number.js.map +1 -1
  24. package/dist/src/filters/filter-select.d.ts +1 -1
  25. package/dist/src/filters/filter-select.js.map +1 -1
  26. package/dist/src/filters/filter-styles.js +38 -28
  27. package/dist/src/filters/filter-styles.js.map +1 -1
  28. package/dist/src/filters/index.d.ts +1 -1
  29. package/dist/src/filters/index.js +1 -1
  30. package/dist/src/filters/index.js.map +1 -1
  31. package/dist/src/filters/ox-filters-form-base.d.ts +5 -8
  32. package/dist/src/filters/ox-filters-form-base.js +92 -69
  33. package/dist/src/filters/ox-filters-form-base.js.map +1 -1
  34. package/dist/src/filters/registry.d.ts +1 -1
  35. package/dist/src/filters/registry.js.map +1 -1
  36. package/dist/src/{filters/types.d.ts → types.d.ts} +10 -0
  37. package/dist/src/types.js.map +1 -0
  38. package/dist/stories/{ox-filter-form-barcode.stories.js → ox-filters-form-barcode.stories.js} +14 -6
  39. package/dist/stories/ox-filters-form-barcode.stories.js.map +1 -0
  40. package/dist/stories/{ox-filter-form-base.stories.d.ts → ox-filters-form-base.stories.d.ts} +3 -2
  41. package/dist/stories/ox-filters-form-base.stories.js +133 -0
  42. package/dist/stories/ox-filters-form-base.stories.js.map +1 -0
  43. package/dist/tsconfig.tsbuildinfo +1 -1
  44. package/package.json +17 -16
  45. package/src/components/ox-file-uploader.ts +7 -7
  46. package/src/components/ox-search-form.ts +83 -83
  47. package/src/filters/filter-checkbox.ts +5 -3
  48. package/src/filters/filter-input-barcode.ts +1 -1
  49. package/src/filters/filter-input.ts +1 -1
  50. package/src/filters/filter-range-date.ts +21 -6
  51. package/src/filters/filter-range-number.ts +1 -1
  52. package/src/filters/filter-select.ts +1 -1
  53. package/src/filters/filter-styles.ts +38 -28
  54. package/src/filters/index.ts +1 -1
  55. package/src/filters/ox-filters-form-base.ts +100 -71
  56. package/src/filters/registry.ts +1 -1
  57. package/src/{filters/types.ts → types.ts} +13 -0
  58. package/stories/{ox-filter-form-barcode.stories.ts → ox-filters-form-barcode.stories.ts} +13 -5
  59. package/stories/ox-filters-form-base.stories.ts +150 -0
  60. package/themes/form-theme.css +1 -1
  61. package/dist/src/filters/types.js.map +0 -1
  62. package/dist/stories/ox-filter-form-barcode.stories.js.map +0 -1
  63. package/dist/stories/ox-filter-form-base.stories.js +0 -82
  64. package/dist/stories/ox-filter-form-base.stories.js.map +0 -1
  65. package/stories/ox-filter-form-base.stories.ts +0 -97
  66. /package/dist/src/{filters/types.js → types.js} +0 -0
  67. /package/dist/stories/{ox-filter-form-barcode.stories.d.ts → ox-filters-form-barcode.stories.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
  import './ox-custom-input.js'
3
3
  import './ox-custom-select.js'
4
4
 
@@ -83,68 +83,68 @@ export class SearchForm extends LitElement {
83
83
  </select>
84
84
  `
85
85
  : field.type === 'checkbox'
86
- ? html`
87
- <input
88
- id="ckbx_${field.name}"
89
- type="checkbox"
90
- ?checked="${field.value}"
91
- .name=${field.name}
92
- ?hidden=${field.hidden}
93
- @click=${(e: MouseEvent) => {
94
- const checkbox = e.currentTarget as HTMLInputElement & { _value: any }
95
- if (checkbox.hasAttribute('indeterminate')) {
96
- const values = [undefined, 'on', 'off']
97
- const currentValue = checkbox._value
98
- const newValue =
99
- values.indexOf(currentValue) + 1 > values.length - 1
100
- ? values[0]
101
- : values[values.indexOf(currentValue) + 1]
86
+ ? html`
87
+ <input
88
+ id="ckbx_${field.name}"
89
+ type="checkbox"
90
+ ?checked="${field.value}"
91
+ .name=${field.name}
92
+ ?hidden=${field.hidden}
93
+ @click=${(e: MouseEvent) => {
94
+ const checkbox = e.currentTarget as HTMLInputElement & { _value: any }
95
+ if (checkbox.hasAttribute('indeterminate')) {
96
+ const values = [undefined, 'on', 'off']
97
+ const currentValue = checkbox._value
98
+ const newValue =
99
+ values.indexOf(currentValue) + 1 > values.length - 1
100
+ ? values[0]
101
+ : values[values.indexOf(currentValue) + 1]
102
102
 
103
- if (newValue === 'on') {
104
- checkbox.checked = true
105
- } else if (newValue === 'off') {
106
- checkbox.checked = false
107
- } else {
108
- checkbox.indeterminate = true
103
+ if (newValue === 'on') {
104
+ checkbox.checked = true
105
+ } else if (newValue === 'off') {
106
+ checkbox.checked = false
107
+ } else {
108
+ checkbox.indeterminate = true
109
+ }
110
+ checkbox._value = newValue
109
111
  }
110
- checkbox._value = newValue
111
- }
112
- }}
113
- />
114
- <label for="ckbx_${field.name}" ?hidden=${field.hidden}
115
- >${field.label || field.name || field.id}</label
116
- >
117
- `
118
- : field.type === 'object'
119
- ? html`
120
- <label ?hidden=${field.hidden}>${field.label || field.name || field.id}</label>
121
- <input
122
- .type=${field.type}
123
- .value=${field.value || ''}
124
- .name=${field.name}
125
- .field=${field.field}
126
- .queryName=${field.queryName}
127
- .placeholder=${field.placeholder || ''}
128
- ?hidden=${field.hidden}
129
- ?autofocus=${!field.hidden && 0 === autofocusConsumed++}
130
- />
131
- `
132
- : html`
133
- <label ?hidden=${field.hidden}>${field.label || field.name || field.id}</label>
134
- <input
135
- .type=${field.type}
136
- .value=${field.value || ''}
137
- .name=${field.name}
138
- .placeholder=${field.placeholder || ''}
139
- ?hidden=${field.hidden}
140
- ?autofocus=${!field.hidden && 0 === autofocusConsumed++}
141
- />
142
- `}
112
+ }}
113
+ />
114
+ <label for="ckbx_${field.name}" ?hidden=${field.hidden}
115
+ >${field.label || field.name || field.id}</label
116
+ >
117
+ `
118
+ : field.type === 'object'
119
+ ? html`
120
+ <label ?hidden=${field.hidden}>${field.label || field.name || field.id}</label>
121
+ <input
122
+ .type=${field.type}
123
+ .value=${field.value || ''}
124
+ .name=${field.name}
125
+ .field=${field.field}
126
+ .queryName=${field.queryName}
127
+ .placeholder=${field.placeholder || ''}
128
+ ?hidden=${field.hidden}
129
+ ?autofocus=${!field.hidden && 0 === autofocusConsumed++}
130
+ />
131
+ `
132
+ : html`
133
+ <label ?hidden=${field.hidden}>${field.label || field.name || field.id}</label>
134
+ <input
135
+ .type=${field.type}
136
+ .value=${field.value || ''}
137
+ .name=${field.name}
138
+ .placeholder=${field.placeholder || ''}
139
+ ?hidden=${field.hidden}
140
+ ?autofocus=${!field.hidden && 0 === autofocusConsumed++}
141
+ />
142
+ `}
143
143
  `
144
144
  )}
145
145
  ${this.hideSearchButton || false
146
146
  ? ``
147
- : html`<mwc-icon @click=${(e: MouseEvent) => this.submit()} search>search</mwc-icon>`}
147
+ : html`<md-icon @click=${(e: MouseEvent) => this.submit()} search>search</md-icon>`}
148
148
  </form>
149
149
  `
150
150
  }
@@ -224,14 +224,14 @@ export class SearchForm extends LitElement {
224
224
  field.type === 'text'
225
225
  ? value
226
226
  : field.type === 'checkbox'
227
- ? field.hasAttribute('indeterminate')
228
- ? field._value === 'on'
229
- ? true
230
- : false
231
- : (field as HTMLInputElement).checked
232
- : field.type === 'number'
233
- ? parseFloat(value)
234
- : value,
227
+ ? field.hasAttribute('indeterminate')
228
+ ? field._value === 'on'
229
+ ? true
230
+ : false
231
+ : (field as HTMLInputElement).checked
232
+ : field.type === 'number'
233
+ ? parseFloat(value)
234
+ : value,
235
235
  operator
236
236
  }
237
237
  })
@@ -257,16 +257,16 @@ export class SearchForm extends LitElement {
257
257
  field.type === 'text' && field.getAttribute('type') === 'object'
258
258
  ? await this._getResourceIds(field)
259
259
  : field.type === 'text'
260
- ? value
261
- : field.type === 'checkbox'
262
- ? field.hasAttribute('indeterminate')
263
- ? field._value === 'on'
264
- ? true
265
- : false
266
- : (field as HTMLInputElement).checked
267
- : field.type === 'number'
268
- ? parseFloat(value)
269
- : value,
260
+ ? value
261
+ : field.type === 'checkbox'
262
+ ? field.hasAttribute('indeterminate')
263
+ ? field._value === 'on'
264
+ ? true
265
+ : false
266
+ : (field as HTMLInputElement).checked
267
+ : field.type === 'number'
268
+ ? parseFloat(value)
269
+ : value,
270
270
  relation: field.type === 'text' && field.getAttribute('type') === 'object'
271
271
  }
272
272
  return filter
@@ -285,14 +285,14 @@ export class SearchForm extends LitElement {
285
285
  query: gql`
286
286
  query {
287
287
  fetch: ${queryName}(${buildArgs({
288
- filters: [
289
- {
290
- name: field,
291
- operator: 'i_like',
292
- value: `%${value}%`
293
- }
294
- ]
295
- })}) {
288
+ filters: [
289
+ {
290
+ name: field,
291
+ operator: 'i_like',
292
+ value: `%${value}%`
293
+ }
294
+ ]
295
+ })}) {
296
296
  items {
297
297
  id
298
298
  }
@@ -2,10 +2,10 @@ import '@operato/input/ox-checkbox.js'
2
2
 
3
3
  import { html } from 'lit-html'
4
4
 
5
- import { FilterSelectRenderer } from './types.js'
5
+ import { FilterSelectRenderer } from '../types.js'
6
6
 
7
7
  export const FilterCheckbox: FilterSelectRenderer = (filter, value, owner) => {
8
- const { name } = filter
8
+ const { name, label } = filter
9
9
 
10
10
  return html`
11
11
  <ox-checkbox
@@ -13,6 +13,7 @@ export const FilterCheckbox: FilterSelectRenderer = (filter, value, owner) => {
13
13
  ?checked=${value}
14
14
  indeterminatable
15
15
  ?indeterminate=${value === undefined}
16
+ left-label
16
17
  @change=${(e: CustomEvent) => {
17
18
  ;(e.target as HTMLElement).dispatchEvent(
18
19
  new CustomEvent('filter-change', {
@@ -26,6 +27,7 @@ export const FilterCheckbox: FilterSelectRenderer = (filter, value, owner) => {
26
27
  })
27
28
  )
28
29
  }}
29
- />
30
+ ><label><span>${label}</span></label></ox-checkbox
31
+ >
30
32
  `
31
33
  }
@@ -2,7 +2,7 @@ import '@operato/input/ox-input-barcode.js'
2
2
 
3
3
  import { html } from 'lit-html'
4
4
 
5
- import { FilterSelectRenderer } from './types.js'
5
+ import { FilterSelectRenderer } from '../types.js'
6
6
 
7
7
  export const FilterInputBarcode: FilterSelectRenderer = (filter, value, owner) => {
8
8
  const { name, type } = filter
@@ -1,6 +1,6 @@
1
1
  import { html } from 'lit-html'
2
2
 
3
- import { FilterSelectRenderer } from './types.js'
3
+ import { FilterSelectRenderer } from '../types.js'
4
4
 
5
5
  export const FilterInput: FilterSelectRenderer = (filter, value, owner) => {
6
6
  const { name, type } = filter
@@ -1,20 +1,35 @@
1
1
  import { html } from 'lit-html'
2
2
 
3
- import { FilterSelectRenderer } from './types.js'
3
+ import { FilterSelectRenderer } from '../types.js'
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
+ }
4
16
 
5
17
  export const FilterRangeDate: FilterSelectRenderer = (filter, value, owner) => {
6
18
  var { name, type, operator } = filter
7
- const [from, to] = value instanceof Array ? value : []
19
+ var [from, to] = value instanceof Array ? value : []
8
20
 
9
21
  if (type === 'datetime') {
10
22
  type = 'datetime-local'
11
23
  }
12
24
 
25
+ from = formatDate(type, new Date(from))
26
+ to = formatDate(type, new Date(to))
27
+
13
28
  return html`
14
29
  <input
15
30
  name=${name}
16
- type=${type}
17
- .value=${from}
31
+ type=${type as 'date' | 'datetime-local'}
32
+ value=${from}
18
33
  from
19
34
  @keyup=${(e: KeyboardEvent) => {
20
35
  if (e.key !== 'Enter') {
@@ -38,8 +53,8 @@ export const FilterRangeDate: FilterSelectRenderer = (filter, value, owner) => {
38
53
  ~
39
54
  <input
40
55
  name=${name}
41
- type=${type}
42
- .value=${to}
56
+ type=${type as 'date' | 'datetime-local'}
57
+ value=${to}
43
58
  to
44
59
  @keyup=${(e: KeyboardEvent) => {
45
60
  if (e.key !== 'Enter') {
@@ -1,6 +1,6 @@
1
1
  import { html } from 'lit-html'
2
2
 
3
- import { FilterSelectRenderer } from './types.js'
3
+ import { FilterSelectRenderer } from '../types.js'
4
4
 
5
5
  export const FilterRangeNumber: FilterSelectRenderer = (filter, value, owner) => {
6
6
  const { name, operator } = filter
@@ -2,7 +2,7 @@ import '@operato/input/ox-checkbox.js'
2
2
 
3
3
  import { html } from 'lit-html'
4
4
 
5
- import { FilterSelectRenderer } from './types.js'
5
+ import { FilterSelectRenderer } from '../types.js'
6
6
 
7
7
  export const FilterSelect: FilterSelectRenderer = (filter, value, owner) => {
8
8
  /* value는 filters-form이나 grid-header에서 처리되므로 이 곳에서는 무시한다. */
@@ -2,56 +2,68 @@ import { css } from 'lit'
2
2
 
3
3
  export const FilterStyles = css`
4
4
  :host {
5
- --ox-input-placeholder-color: var(--primary-color);
6
-
7
- --ox-input-padding: var(--padding-narrow) var(--padding-default);
8
- --ox-input-border: 1px solid rgba(0, 0, 0, 0.2);
9
- --ox-input-focus-border: 1px solid var(--primary-color);
10
- --ox-input-border-radius: var(--border-radius);
11
- --ox-input-font: normal 14px var(--theme-font);
12
- --ox-input-color: var(--primary-text-color);
13
-
14
- --ox-filters-form-gap: var(--margin-wide);
15
- --ox-filters-form-label-font: var(--label-font);
16
- --ox-filters-form-label-color: var(--label-color);
17
- --ox-select-padding: 0 var(--padding-narrow);
5
+ --ox-filters-input-placeholder-color: var(--input-placeholder-color, var(--primary-color));
6
+
7
+ --ox-filters-input-border: var(--input-border, 1px solid rgba(0, 0, 0, 0.2));
8
+ --ox-filters-input-focus-border: var(--input-focus-border, 1px solid var(--primary-color));
9
+ --ox-filters-input-font: var(--input-font, normal 14px var(--theme-font));
10
+ --ox-filters-input-color: var(--input-color, var(--primary-text-color));
11
+ --ox-filters-input-focus-color: var(--input-focus-color, var(--primary-color));
12
+ --ox-filters-label-font: var(--label-font, normal 14px var(--theme-font));
13
+ --ox-filters-label-color: var(--label-color, var(--primary-text-color));
14
+ --ox-filters-input-background-color: transparent;
15
+
16
+ --ox-filters-form-gap: var(--input-gap-vertical, 8px) var(--input-gap-horizontal, 16px);
17
+ --ox-filters-input-padding: var(--input-padding, 6px 2px);
18
+
19
+ --ox-select-padding: var(--ox-filters-input-padding);
20
+ --ox-checkbox-background-color: var(--ox-filters-input-background-color, transparent);
18
21
  }
19
22
 
20
23
  label {
21
- font: var(--ox-filters-form-label-font);
22
- color: var(--ox-filters-form-label-color);
24
+ font: var(--ox-filters-label-font);
25
+ color: var(--ox-filters-label-color);
23
26
  }
27
+
24
28
  span {
25
- margin-right: var(--margin-narrow);
26
29
  text-transform: capitalize;
27
30
  }
28
31
 
29
32
  input::placeholder {
30
- color: var(--ox-input-placeholder-color);
33
+ color: var(--ox-filters-input-placeholder-color);
31
34
  opacity: 0.6;
32
35
  }
33
36
 
37
+ input {
38
+ padding: var(--ox-filters-input-padding);
39
+ }
40
+
34
41
  ox-select,
35
42
  input {
36
- padding: var(--input-padding);
37
43
  border: none;
38
- border-bottom: var(--ox-input-border);
39
- font: var(--ox-input-font);
40
- color: var(--ox-input-color);
44
+ border-bottom: var(--ox-filters-input-border);
45
+ font: var(--ox-filters-input-font);
46
+ color: var(--ox-filters-input-color);
47
+ background-color: var(--ox-filters-input-background-color, transparent);
41
48
  }
42
49
 
43
50
  ox-select:focus,
44
51
  input:focus {
45
52
  outline: none;
46
- border-bottom: var(--ox-input-focus-border);
47
- color: var(--primary-color);
53
+ border-bottom: var(--ox-filters-input-focus-border);
54
+ color: var(--ox-filters-input-focus-color);
48
55
  }
56
+
49
57
  ox-select {
50
- padding: var(--ox-select-padding);
58
+ min-width: 90px;
59
+ max-width: 170px;
60
+ }
61
+
62
+ ox-input-search {
63
+ max-width: 150px;
51
64
  }
52
65
 
53
66
  input[type='number'] {
54
- padding-right: var(--padding-narrow);
55
67
  max-width: 90px;
56
68
  }
57
69
 
@@ -59,15 +71,13 @@ export const FilterStyles = css`
59
71
  input[type*='time'],
60
72
  input[type='week'],
61
73
  input[type='month'] {
62
- padding: 8px var(--padding-narrow) 8px var(--padding-default);
63
74
  max-width: 170px;
64
75
  }
65
76
 
66
77
  @media only screen and (max-width: 460px) {
67
78
  :host {
68
79
  --ox-filters-form-label-font: bold 13px var(--theme-font);
69
- --ox-input-font: normal 16px var(--theme-font);
70
- --ox-filters-form-gap: var(--margin-narrow);
80
+ --ox-filters-input-font: normal 16px var(--theme-font);
71
81
  }
72
82
 
73
83
  input[from],
@@ -7,4 +7,4 @@ export * from './filter-range-date.js'
7
7
  export * from './filter-range-number.js'
8
8
 
9
9
  export * from './ox-filters-form-base.js'
10
- export * from './types.js'
10
+ export * from '../types.js'