@operato/data-grist 0.3.2 → 0.3.9

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 (86) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/custom-elements.json +1067 -2466
  3. package/demo/index.html +22 -12
  4. package/dist/src/data-grid/data-grid-header.js +13 -7
  5. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  6. package/dist/src/data-grist.js +3 -0
  7. package/dist/src/data-grist.js.map +1 -1
  8. package/dist/src/filters/filter-checkbox.js +1 -0
  9. package/dist/src/filters/filter-checkbox.js.map +1 -1
  10. package/dist/src/filters/filter-input.js +1 -1
  11. package/dist/src/filters/filter-input.js.map +1 -1
  12. package/dist/src/filters/filter-range-date.js +1 -1
  13. package/dist/src/filters/filter-range-date.js.map +1 -1
  14. package/dist/src/filters/filter-range-number.js +2 -1
  15. package/dist/src/filters/filter-range-number.js.map +1 -1
  16. package/dist/src/filters/filters-form.d.ts +19 -0
  17. package/dist/src/filters/filters-form.js +99 -0
  18. package/dist/src/filters/filters-form.js.map +1 -0
  19. package/dist/src/filters/index.d.ts +1 -0
  20. package/dist/src/filters/index.js +1 -0
  21. package/dist/src/filters/index.js.map +1 -1
  22. package/dist/src/filters/registry.d.ts +5 -5
  23. package/dist/src/filters/registry.js +25 -25
  24. package/dist/src/filters/registry.js.map +1 -1
  25. package/dist/src/index.d.ts +1 -2
  26. package/dist/src/index.js +1 -2
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/types.d.ts +4 -3
  29. package/dist/src/types.js.map +1 -1
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +9 -8
  32. package/src/data-grid/data-grid-header.ts +12 -6
  33. package/src/data-grist.ts +3 -0
  34. package/src/filters/filter-checkbox.ts +1 -0
  35. package/src/filters/filter-input.ts +1 -1
  36. package/src/filters/filter-range-date.ts +1 -1
  37. package/src/filters/filter-range-number.ts +2 -1
  38. package/src/filters/filters-form.ts +132 -0
  39. package/src/filters/index.ts +2 -0
  40. package/src/filters/registry.ts +26 -26
  41. package/src/index.ts +1 -3
  42. package/src/types.ts +34 -4
  43. package/dist/src/interfaces/index.d.ts +0 -2
  44. package/dist/src/interfaces/index.js +0 -3
  45. package/dist/src/interfaces/index.js.map +0 -1
  46. package/dist/src/interfaces/ox-grist-search-form.d.ts +0 -6
  47. package/dist/src/interfaces/ox-grist-search-form.js +0 -2
  48. package/dist/src/interfaces/ox-grist-search-form.js.map +0 -1
  49. package/dist/src/interfaces/ox-search-field.d.ts +0 -39
  50. package/dist/src/interfaces/ox-search-field.js +0 -2
  51. package/dist/src/interfaces/ox-search-field.js.map +0 -1
  52. package/dist/src/search-form/index.d.ts +0 -7
  53. package/dist/src/search-form/index.js +0 -8
  54. package/dist/src/search-form/index.js.map +0 -1
  55. package/dist/src/search-form/ox-basic-field.d.ts +0 -18
  56. package/dist/src/search-form/ox-basic-field.js +0 -75
  57. package/dist/src/search-form/ox-basic-field.js.map +0 -1
  58. package/dist/src/search-form/ox-checkbox-field.d.ts +0 -11
  59. package/dist/src/search-form/ox-checkbox-field.js +0 -60
  60. package/dist/src/search-form/ox-checkbox-field.js.map +0 -1
  61. package/dist/src/search-form/ox-grist-search-form.d.ts +0 -11
  62. package/dist/src/search-form/ox-grist-search-form.js +0 -177
  63. package/dist/src/search-form/ox-grist-search-form.js.map +0 -1
  64. package/dist/src/search-form/ox-number-field.d.ts +0 -14
  65. package/dist/src/search-form/ox-number-field.js +0 -112
  66. package/dist/src/search-form/ox-number-field.js.map +0 -1
  67. package/dist/src/search-form/ox-search-form.d.ts +0 -15
  68. package/dist/src/search-form/ox-search-form.js +0 -53
  69. package/dist/src/search-form/ox-search-form.js.map +0 -1
  70. package/dist/src/search-form/ox-select-field.d.ts +0 -21
  71. package/dist/src/search-form/ox-select-field.js +0 -181
  72. package/dist/src/search-form/ox-select-field.js.map +0 -1
  73. package/dist/src/search-form/ox-text-field.d.ts +0 -11
  74. package/dist/src/search-form/ox-text-field.js +0 -60
  75. package/dist/src/search-form/ox-text-field.js.map +0 -1
  76. package/src/interfaces/index.ts +0 -2
  77. package/src/interfaces/ox-grist-search-form.ts +0 -7
  78. package/src/interfaces/ox-search-field.ts +0 -52
  79. package/src/search-form/index.ts +0 -7
  80. package/src/search-form/ox-basic-field.ts +0 -86
  81. package/src/search-form/ox-checkbox-field.ts +0 -57
  82. package/src/search-form/ox-grist-search-form.ts +0 -200
  83. package/src/search-form/ox-number-field.ts +0 -113
  84. package/src/search-form/ox-search-form.ts +0 -71
  85. package/src/search-form/ox-select-field.ts +0 -189
  86. package/src/search-form/ox-text-field.ts +0 -55
@@ -0,0 +1,132 @@
1
+ import '@operato/input/ox-checkbox.js'
2
+ import '@operato/input/ox-select.js'
3
+ import '@operato/popup/ox-popup-list.js'
4
+
5
+ import { css, html, LitElement, TemplateResult } from 'lit'
6
+ import { customElement, property, query } from 'lit/decorators.js'
7
+
8
+ import { ColumnConfig } from '..'
9
+ import { GristConfig } from '../types'
10
+ import { FilterStyles } from './filter-styles'
11
+ import { getFilterRenderer } from './registry'
12
+
13
+ export type QueryFilterRangeValue = [from: number, to: number]
14
+
15
+ export type QueryFilter = {
16
+ name: string
17
+ operator?:
18
+ | 'eq'
19
+ | 'between'
20
+ | 'gte'
21
+ | 'lte'
22
+ | 'is_not_true'
23
+ | 'in'
24
+ | 'like'
25
+ | 'i_like'
26
+ | 'noteq'
27
+ | 'is_empty_num_id'
28
+ | 'is_blank'
29
+ | 'is_present'
30
+ | 'is_not_false'
31
+ | 'is_true'
32
+ | 'is_false'
33
+ | 'is_not_null'
34
+ | 'is_null'
35
+ | 'notin_with_null'
36
+ | 'notin'
37
+ | 'gt'
38
+ | 'lt'
39
+ | 'i_nlike'
40
+ | 'nlike'
41
+ value: any
42
+ }
43
+
44
+ @customElement('ox-filters-form')
45
+ export class FiltersForm extends LitElement {
46
+ static styles = [
47
+ FilterStyles,
48
+ css`
49
+ :host {
50
+ display: flex;
51
+ }
52
+
53
+ form {
54
+ flex: 1;
55
+
56
+ display: flex;
57
+ flex-direction: row;
58
+
59
+ justify-content: space-between;
60
+ }
61
+ `
62
+ ]
63
+
64
+ @property({ type: Object }) config!: GristConfig
65
+ @property({ type: String }) defaultOperator: string = 'eq'
66
+ @query('form') form!: HTMLFormElement
67
+
68
+ render(): TemplateResult {
69
+ const columns = this.config.columns.filter(columnConfig => columnConfig.filter)
70
+
71
+ return html`
72
+ <form>
73
+ ${columns.map((column: ColumnConfig) => {
74
+ const { name, label, filter } = column
75
+ const placeholder =
76
+ typeof label === 'string'
77
+ ? name
78
+ : typeof label !== 'object'
79
+ ? name
80
+ : label.renderer
81
+ ? label.renderer()
82
+ : name
83
+
84
+ const type = typeof filter === 'boolean' ? column.type : filter?.type || column.type
85
+ const idx = typeof filter === 'boolean' ? 0 : filter!.operator === 'between' ? 1 : 0
86
+ const renderer = getFilterRenderer(type)[idx]
87
+
88
+ if (!renderer) {
89
+ return html``
90
+ }
91
+
92
+ return column.type === 'select'
93
+ ? html`
94
+ <ox-select name="${name}" placeholder="${placeholder}">
95
+ <ox-popup-list multiple attr-selected="checked" with-search>
96
+ ${renderer(column, this)}
97
+ </ox-popup-list>
98
+ </ox-select>
99
+ `
100
+ : html` <label filter-title>${column.name} ${renderer(column, this)} </label> `
101
+ })}
102
+ </form>
103
+ `
104
+ }
105
+
106
+ get queryFilters(): QueryFilter[] {
107
+ var formData = new FormData(this.form)
108
+
109
+ return this.config.columns
110
+ .filter(columnConfig => columnConfig.filter)
111
+ .map((column: ColumnConfig) => {
112
+ const { name, filter } = column
113
+ const operator = typeof filter === 'boolean' ? 'eq' : filter!.operator || 'eq'
114
+
115
+ var value = formData.getAll(name)
116
+ if (value.length == 0) {
117
+ return
118
+ }
119
+
120
+ if (-1 === value.findIndex(v => v !== '')) {
121
+ return
122
+ }
123
+
124
+ return {
125
+ name,
126
+ operator,
127
+ value: value.length === 1 ? value[0] : value
128
+ }
129
+ })
130
+ .filter(result => result !== undefined) as QueryFilter[]
131
+ }
132
+ }
@@ -5,3 +5,5 @@ export * from './filter-input'
5
5
  export * from './filter-checkbox'
6
6
  export * from './filter-range-date'
7
7
  export * from './filter-range-number'
8
+
9
+ export * from './filters-form'
@@ -6,46 +6,46 @@ import { FilterRangeNumber } from './filter-range-number'
6
6
  import { FilterSelect } from './filter-select'
7
7
 
8
8
  var RENDERERS: {
9
- [name: string]: FilterSelectRenderer
9
+ [name: string]: FilterSelectRenderer[]
10
10
  } = {
11
- string: FilterInput,
12
- text: FilterInput,
13
- email: FilterInput,
14
- tel: FilterInput,
15
- integer: FilterRangeNumber,
16
- float: FilterRangeNumber,
17
- number: FilterRangeNumber,
18
- select: FilterSelect,
19
- boolean: FilterCheckbox,
20
- checkbox: FilterCheckbox,
21
- month: FilterRangeDate,
22
- week: FilterRangeDate,
23
- date: FilterRangeDate,
24
- time: FilterRangeDate,
25
- datetime: FilterRangeDate,
26
- color: FilterInput,
27
- progress: FilterRangeNumber,
28
- link: FilterInput,
29
- image: FilterInput,
30
- json5: FilterInput
11
+ string: [FilterInput],
12
+ text: [FilterInput],
13
+ email: [FilterInput],
14
+ tel: [FilterInput],
15
+ integer: [FilterInput, FilterRangeNumber],
16
+ float: [FilterInput, FilterRangeNumber],
17
+ number: [FilterInput, FilterRangeNumber],
18
+ select: [FilterSelect],
19
+ boolean: [FilterCheckbox],
20
+ checkbox: [FilterCheckbox],
21
+ month: [FilterInput, FilterRangeDate],
22
+ week: [FilterInput, FilterRangeDate],
23
+ date: [FilterInput, FilterRangeDate],
24
+ time: [FilterInput, FilterRangeDate],
25
+ datetime: [FilterInput, FilterRangeDate],
26
+ color: [FilterInput],
27
+ progress: [FilterInput, FilterRangeNumber],
28
+ link: [FilterInput],
29
+ image: [FilterInput],
30
+ json5: [FilterInput]
31
31
  }
32
32
 
33
- export function registerRenderer(type: string, renderer: FilterSelectRenderer) {
33
+ export function registerFilterRenderer(type: string, renderer: FilterSelectRenderer[]) {
34
34
  RENDERERS[type] = renderer
35
35
  }
36
36
 
37
- export function unregisterRenderer(type: string): void {
37
+ export function unregisterFilterRenderer(type: string): void {
38
38
  delete RENDERERS[type]
39
39
  }
40
40
 
41
- export function getRenderers(): { [name: string]: FilterSelectRenderer } {
41
+ export function getFilterRenderers(): { [name: string]: FilterSelectRenderer[] } {
42
42
  return { ...RENDERERS }
43
43
  }
44
44
 
45
- export function getRenderer(type: string | FilterSelectRenderer): FilterSelectRenderer {
45
+ export function getFilterRenderer(type: string): FilterSelectRenderer[] {
46
46
  if (typeof type == 'function') {
47
47
  return type
48
48
  }
49
49
 
50
- return RENDERERS[type || 'text'] || FilterSelect
50
+ return RENDERERS[type || 'text'] || [FilterInput]
51
51
  }
package/src/index.ts CHANGED
@@ -9,6 +9,4 @@ export * from './renderers'
9
9
  export * from './handlers'
10
10
  export * from './formatters'
11
11
  export * from './gutters'
12
-
13
- export * from './interfaces'
14
- export * from './search-form'
12
+ export * from './filters'
package/src/types.ts CHANGED
@@ -1,12 +1,13 @@
1
+ import { TemplateResult } from 'lit-html'
2
+
1
3
  import { DataCardField } from './data-card/data-card-field'
2
4
  import { DataCardGutter } from './data-card/data-card-gutter'
5
+ import { RecordCard } from './data-card/record-card'
3
6
  import { DataGridField } from './data-grid/data-grid-field'
4
7
  import { DataListField } from './data-list/data-list-field'
5
8
  import { DataListGutter } from './data-list/data-list-gutter'
6
- import { DataReportField } from './data-report/data-report-field'
7
- import { RecordCard } from './data-card/record-card'
8
9
  import { RecordPartial } from './data-list/record-partial'
9
- import { TemplateResult } from 'lit-html'
10
+ import { DataReportField } from './data-report/data-report-field'
10
11
 
11
12
  export type GristConfig = {
12
13
  columns: ColumnConfig[]
@@ -18,7 +19,36 @@ export type GristConfig = {
18
19
 
19
20
  export type SorterConfig = { name: string; desc?: boolean }
20
21
  export type SortersConfig = SorterConfig[]
21
- export type FilterConfig = { type: string; options?: { [key: string]: any } } | boolean
22
+ export type FilterConfig =
23
+ | {
24
+ type: string
25
+ operator?:
26
+ | 'eq'
27
+ | 'between'
28
+ | 'gte'
29
+ | 'lte'
30
+ | 'is_not_true'
31
+ | 'in'
32
+ | 'like'
33
+ | 'i_like'
34
+ | 'noteq'
35
+ | 'is_empty_num_id'
36
+ | 'is_blank'
37
+ | 'is_present'
38
+ | 'is_not_false'
39
+ | 'is_true'
40
+ | 'is_false'
41
+ | 'is_not_null'
42
+ | 'is_null'
43
+ | 'notin_with_null'
44
+ | 'notin'
45
+ | 'gt'
46
+ | 'lt'
47
+ | 'i_nlike'
48
+ | 'nlike'
49
+ options?: { [key: string]: any }
50
+ }
51
+ | boolean
22
52
 
23
53
  export type PaginationConfig = {
24
54
  page?: number
@@ -1,2 +0,0 @@
1
- export * from './ox-search-field';
2
- export * from './ox-grist-search-form';
@@ -1,3 +0,0 @@
1
- export * from './ox-search-field';
2
- export * from './ox-grist-search-form';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA","sourcesContent":["export * from './ox-search-field'\nexport * from './ox-grist-search-form'\n"]}
@@ -1,6 +0,0 @@
1
- export declare type QueryFilterRangeValue = [from: number, to: number];
2
- export declare type QueryFilter = {
3
- name: string;
4
- operator?: string;
5
- value: any;
6
- };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ox-grist-search-form.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ox-grist-search-form.js","sourceRoot":"","sources":["../../../src/interfaces/ox-grist-search-form.ts"],"names":[],"mappings":"","sourcesContent":["export type QueryFilterRangeValue = [from: number, to: number]\n\nexport type QueryFilter = {\n name: string\n operator?: string\n value: any\n}\n"]}
@@ -1,39 +0,0 @@
1
- export declare type OXSearchFieldType = 'select' | 'checkbox' | 'text' | 'number';
2
- export interface OXFieldOptionProps {
3
- name?: string;
4
- value: string;
5
- }
6
- export interface OXBasicFieldProps {
7
- name: string;
8
- type?: OXSearchFieldType;
9
- hidden?: boolean;
10
- id?: string;
11
- placeholder?: string;
12
- handlers?: Record<string, (event: Event) => void>;
13
- defaultValue?: any;
14
- operator?: string;
15
- }
16
- export interface OXTextFieldProps extends OXBasicFieldProps {
17
- defaultValue?: string;
18
- }
19
- export interface OXNumberFieldProps extends OXBasicFieldProps {
20
- min?: number;
21
- max?: number;
22
- step: number;
23
- defaultValue?: number;
24
- }
25
- export interface OXObjectFieldProps extends OXBasicFieldProps {
26
- field: string;
27
- queryName: string;
28
- defaultValue?: Record<string, any>;
29
- }
30
- export interface OXSelectFieldProps extends OXBasicFieldProps {
31
- searchEnable?: boolean;
32
- options: OXFieldOptionProps[];
33
- defaultValue?: any;
34
- }
35
- export interface OXCheckboxFieldProps extends OXBasicFieldProps {
36
- indeterminate?: boolean;
37
- defaultValue?: boolean;
38
- }
39
- export declare type OXSearchFieldProps = OXTextFieldProps | OXNumberFieldProps | OXObjectFieldProps | OXSelectFieldProps | OXCheckboxFieldProps;
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ox-search-field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ox-search-field.js","sourceRoot":"","sources":["../../../src/interfaces/ox-search-field.ts"],"names":[],"mappings":"","sourcesContent":["export type OXSearchFieldType = 'select' | 'checkbox' | 'text' | 'number'\n\nexport interface OXFieldOptionProps {\n name?: string\n value: string\n}\n\nexport interface OXBasicFieldProps {\n name: string\n type?: OXSearchFieldType\n hidden?: boolean\n id?: string\n placeholder?: string\n handlers?: Record<string, (event: Event) => void>\n defaultValue?: any\n operator?: string\n}\n\nexport interface OXTextFieldProps extends OXBasicFieldProps {\n defaultValue?: string\n}\n\nexport interface OXNumberFieldProps extends OXBasicFieldProps {\n min?: number\n max?: number\n step: number\n defaultValue?: number\n}\n\nexport interface OXObjectFieldProps extends OXBasicFieldProps {\n field: string\n queryName: string\n defaultValue?: Record<string, any>\n}\n\nexport interface OXSelectFieldProps extends OXBasicFieldProps {\n searchEnable?: boolean\n options: OXFieldOptionProps[]\n defaultValue?: any\n}\n\nexport interface OXCheckboxFieldProps extends OXBasicFieldProps {\n indeterminate?: boolean\n defaultValue?: boolean\n}\n\nexport type OXSearchFieldProps =\n | OXTextFieldProps\n | OXNumberFieldProps\n | OXObjectFieldProps\n | OXSelectFieldProps\n | OXCheckboxFieldProps\n"]}
@@ -1,7 +0,0 @@
1
- export * from './ox-search-form';
2
- export * from './ox-grist-search-form';
3
- export * from './ox-basic-field';
4
- export * from './ox-checkbox-field';
5
- export * from './ox-number-field';
6
- export * from './ox-select-field';
7
- export * from './ox-text-field';
@@ -1,8 +0,0 @@
1
- export * from './ox-search-form';
2
- export * from './ox-grist-search-form';
3
- export * from './ox-basic-field';
4
- export * from './ox-checkbox-field';
5
- export * from './ox-number-field';
6
- export * from './ox-select-field';
7
- export * from './ox-text-field';
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/search-form/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA","sourcesContent":["export * from './ox-search-form'\nexport * from './ox-grist-search-form'\nexport * from './ox-basic-field'\nexport * from './ox-checkbox-field'\nexport * from './ox-number-field'\nexport * from './ox-select-field'\nexport * from './ox-text-field'\n"]}
@@ -1,18 +0,0 @@
1
- import { LitElement } from 'lit-element';
2
- import { OXBasicFieldProps } from '../interfaces/ox-search-field';
3
- export declare abstract class OXBasicField extends LitElement {
4
- static styles: import("lit-element").CSSResult[];
5
- field: OXBasicFieldProps;
6
- private form;
7
- value?: any;
8
- abstract setDefaultValue(defaultValue: unknown): void;
9
- get input(): HTMLInputElement | HTMLSelectElement;
10
- connectedCallback(): void;
11
- disconnectedCallback(): void;
12
- firstUpdated(): void;
13
- private findFormElement;
14
- private registerCustomEventHandlers;
15
- private registerBasicEventHandlers;
16
- private appendFormData;
17
- private submit;
18
- }
@@ -1,75 +0,0 @@
1
- import { css, LitElement } from 'lit-element';
2
- export class OXBasicField extends LitElement {
3
- constructor() {
4
- super(...arguments);
5
- this.form = null;
6
- }
7
- get input() {
8
- if (!this.field.name)
9
- throw new Error('No name property provided');
10
- const input = this.renderRoot.querySelector(`input[name=${this.field.name}],select[name=${this.field.name}]`);
11
- if (!input)
12
- throw new Error('Failed to find input element');
13
- return input;
14
- }
15
- connectedCallback() {
16
- var _a;
17
- super.connectedCallback();
18
- this.form = this.findFormElement();
19
- (_a = this.form) === null || _a === void 0 ? void 0 : _a.addEventListener('formdata', this.appendFormData.bind(this));
20
- }
21
- disconnectedCallback() {
22
- var _a;
23
- super.disconnectedCallback();
24
- (_a = this.form) === null || _a === void 0 ? void 0 : _a.removeEventListener('formdata', this.appendFormData.bind(this));
25
- this.form = null;
26
- }
27
- firstUpdated() {
28
- const { handlers } = this.field || {};
29
- this.registerBasicEventHandlers();
30
- if (handlers)
31
- this.registerCustomEventHandlers(handlers);
32
- if (this.field.defaultValue !== undefined)
33
- this.setDefaultValue(this.field.defaultValue);
34
- }
35
- findFormElement() {
36
- const rootNode = this.getRootNode();
37
- const forms = Array.from(rootNode.querySelectorAll('form'));
38
- return forms.find((form) => form.contains(this)) || null;
39
- }
40
- registerCustomEventHandlers(handlers) {
41
- const eventNames = Object.keys(handlers);
42
- if (!eventNames.length)
43
- return;
44
- eventNames.forEach((eventName) => this.input.addEventListener(eventName, handlers[eventName]));
45
- }
46
- registerBasicEventHandlers() {
47
- this.input.onkeydown = (event) => {
48
- if (event.key === 'Enter')
49
- this.submit();
50
- };
51
- }
52
- appendFormData({ formData }) {
53
- formData.append(this.field.name, this.value);
54
- }
55
- submit() {
56
- if (this.form)
57
- this.dispatchEvent(new CustomEvent('submit-field', { composed: true, bubbles: true }));
58
- }
59
- }
60
- OXBasicField.styles = [
61
- css `
62
- input,
63
- select {
64
- background-color: transparent;
65
- border: none;
66
- box-sizing: border-box;
67
- outline: none;
68
- padding: 4px 9px;
69
- font-size: var(--fontsize-default, 14px);
70
- color: var(--primary-text-color, #476172);
71
- font-weight: bold;
72
- }
73
- `
74
- ];
75
- //# sourceMappingURL=ox-basic-field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ox-basic-field.js","sourceRoot":"","sources":["../../../src/search-form/ox-basic-field.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, LitElement } from 'lit-element'\n\nimport { OXBasicFieldProps } from '../interfaces/ox-search-field'\n\nexport abstract class OXBasicField extends LitElement {\n static styles = [\n css`\n input,\n select {\n background-color: transparent;\n border: none;\n box-sizing: border-box;\n outline: none;\n padding: 4px 9px;\n font-size: var(--fontsize-default, 14px);\n color: var(--primary-text-color, #476172);\n font-weight: bold;\n }\n `\n ]\n\n field!: OXBasicFieldProps\n\n private form: HTMLFormElement | null = null\n value?: any\n\n abstract setDefaultValue(defaultValue: unknown): void\n\n get input(): HTMLInputElement | HTMLSelectElement {\n if (!this.field.name) throw new Error('No name property provided')\n const input: HTMLInputElement | null = this.renderRoot.querySelector(\n `input[name=${this.field.name}],select[name=${this.field.name}]`\n )\n if (!input) throw new Error('Failed to find input element')\n\n return input\n }\n\n override connectedCallback(): void {\n super.connectedCallback()\n this.form = this.findFormElement()\n this.form?.addEventListener('formdata', this.appendFormData.bind(this))\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback()\n this.form?.removeEventListener('formdata', this.appendFormData.bind(this))\n this.form = null\n }\n\n override firstUpdated(): void {\n const { handlers } = this.field || {}\n\n this.registerBasicEventHandlers()\n if (handlers) this.registerCustomEventHandlers(handlers)\n if (this.field.defaultValue !== undefined) this.setDefaultValue(this.field.defaultValue)\n }\n\n private findFormElement(): HTMLFormElement | null {\n const rootNode: HTMLElement = this.getRootNode() as HTMLElement\n const forms: HTMLFormElement[] = Array.from(rootNode.querySelectorAll('form'))\n\n return forms.find((form: HTMLFormElement) => form.contains(this)) || null\n }\n\n private registerCustomEventHandlers(handlers: Record<string, (event: Event) => void>): void {\n const eventNames: string[] = Object.keys(handlers)\n if (!eventNames.length) return\n\n eventNames.forEach((eventName: string) => this.input.addEventListener(eventName, handlers[eventName]))\n }\n\n private registerBasicEventHandlers(): void {\n this.input.onkeydown = (event: KeyboardEvent) => {\n if (event.key === 'Enter') this.submit()\n }\n }\n\n private appendFormData({ formData }: FormDataEvent): void {\n formData.append(this.field.name, this.value)\n }\n\n private submit(): void {\n if (this.form) this.dispatchEvent(new CustomEvent('submit-field', { composed: true, bubbles: true }))\n }\n}\n"]}
@@ -1,11 +0,0 @@
1
- import { TemplateResult } from 'lit';
2
- import { OXCheckboxFieldProps } from '..';
3
- import { OXBasicField } from './ox-basic-field';
4
- export declare class OXCheckboxField extends OXBasicField {
5
- field: OXCheckboxFieldProps;
6
- value?: boolean;
7
- static styles: import("lit").CSSResult[];
8
- setDefaultValue(defaultValue: boolean): void;
9
- render(): TemplateResult;
10
- private onClickHandler;
11
- }
@@ -1,60 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { css, html } from 'lit';
3
- import { ifDefined } from 'lit-html/directives/if-defined.js';
4
- import { customElement, property } from 'lit/decorators.js';
5
- import { OXBasicField } from './ox-basic-field';
6
- let OXCheckboxField = class OXCheckboxField extends OXBasicField {
7
- setDefaultValue(defaultValue) {
8
- this.value = defaultValue;
9
- }
10
- render() {
11
- const { name, hidden, placeholder, id } = this.field;
12
- return html `<label ?hidden=${hidden}>
13
- <input
14
- id=${ifDefined(id)}
15
- type="checkbox"
16
- name=${name}
17
- .checked=${Boolean(this.value)}
18
- @click=${this.onClickHandler.bind(this)}
19
- />
20
- ${placeholder || name}
21
- </label>`;
22
- }
23
- onClickHandler() {
24
- const checkbox = this.input;
25
- if (!this.field.indeterminate) {
26
- this.value = !this.value;
27
- }
28
- else {
29
- if (this.value === false) {
30
- this.value = undefined;
31
- checkbox.indeterminate = true;
32
- }
33
- else if (this.value === undefined) {
34
- this.value = true;
35
- }
36
- else {
37
- this.value = false;
38
- }
39
- }
40
- }
41
- };
42
- OXCheckboxField.styles = [
43
- css `
44
- label {
45
- font-size: var(--fontsize-default, 14px);
46
- color: var(--primary-text-color, #476172);
47
- }
48
- `
49
- ];
50
- __decorate([
51
- property({ type: Object })
52
- ], OXCheckboxField.prototype, "field", void 0);
53
- __decorate([
54
- property({ type: Boolean })
55
- ], OXCheckboxField.prototype, "value", void 0);
56
- OXCheckboxField = __decorate([
57
- customElement('ox-checkbox-field')
58
- ], OXCheckboxField);
59
- export { OXCheckboxField };
60
- //# sourceMappingURL=ox-checkbox-field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ox-checkbox-field.js","sourceRoot":"","sources":["../../../src/search-form/ox-checkbox-field.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG/C,IAAa,eAAe,GAA5B,MAAa,eAAgB,SAAQ,YAAY;IAa/C,eAAe,CAAC,YAAqB;QACnC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAA;IAC3B,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAEpD,OAAO,IAAI,CAAA,kBAAkB,MAAM;;aAE1B,SAAS,CAAC,EAAE,CAAC;;eAEX,IAAI;mBACA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;QAEvC,WAAW,IAAI,IAAI;aACd,CAAA;IACX,CAAC;IAEO,cAAc;QACpB,MAAM,QAAQ,GAAqB,IAAI,CAAC,KAAyB,CAAA;QAEjE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC7B,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAA;SACzB;aAAM;YACL,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;gBACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;gBACtB,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAA;aAC9B;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;aAClB;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;aACnB;SACF;IACH,CAAC;CACF,CAAA;AA5CQ,sBAAM,GAAG;IACd,GAAG,CAAA;;;;;KAKF;CACF,CAAA;AAV2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8CAA6B;AAC3B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;8CAAgB;AAFjC,eAAe;IAD3B,aAAa,CAAC,mBAAmB,CAAC;GACtB,eAAe,CAgD3B;SAhDY,eAAe","sourcesContent":["import { css, html, TemplateResult } from 'lit'\nimport { ifDefined } from 'lit-html/directives/if-defined.js'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { OXCheckboxFieldProps } from '..'\nimport { OXBasicField } from './ox-basic-field'\n\n@customElement('ox-checkbox-field')\nexport class OXCheckboxField extends OXBasicField {\n @property({ type: Object }) field!: OXCheckboxFieldProps\n @property({ type: Boolean }) value?: boolean\n\n static styles = [\n css`\n label {\n font-size: var(--fontsize-default, 14px);\n color: var(--primary-text-color, #476172);\n }\n `\n ]\n\n setDefaultValue(defaultValue: boolean): void {\n this.value = defaultValue\n }\n\n render(): TemplateResult {\n const { name, hidden, placeholder, id } = this.field\n\n return html`<label ?hidden=${hidden}>\n <input\n id=${ifDefined(id)}\n type=\"checkbox\"\n name=${name}\n .checked=${Boolean(this.value)}\n @click=${this.onClickHandler.bind(this)}\n />\n ${placeholder || name}\n </label>`\n }\n\n private onClickHandler(): void {\n const checkbox: HTMLInputElement = this.input as HTMLInputElement\n\n if (!this.field.indeterminate) {\n this.value = !this.value\n } else {\n if (this.value === false) {\n this.value = undefined\n checkbox.indeterminate = true\n } else if (this.value === undefined) {\n this.value = true\n } else {\n this.value = false\n }\n }\n }\n}\n"]}
@@ -1,11 +0,0 @@
1
- import { GristConfig } from '../types';
2
- import { LitElement, TemplateResult } from 'lit';
3
- import { QueryFilter } from '..';
4
- export declare class OXGristSearchForm extends LitElement {
5
- config: GristConfig;
6
- defaultOperator: string;
7
- private timeout?;
8
- render(): TemplateResult;
9
- private convertToSearchFields;
10
- get queryFilters(): QueryFilter[];
11
- }