@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.
- package/CHANGELOG.md +65 -0
- package/custom-elements.json +1067 -2466
- package/demo/index.html +22 -12
- package/dist/src/data-grid/data-grid-header.js +13 -7
- package/dist/src/data-grid/data-grid-header.js.map +1 -1
- package/dist/src/data-grist.js +3 -0
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/filters/filter-checkbox.js +1 -0
- package/dist/src/filters/filter-checkbox.js.map +1 -1
- package/dist/src/filters/filter-input.js +1 -1
- package/dist/src/filters/filter-input.js.map +1 -1
- package/dist/src/filters/filter-range-date.js +1 -1
- package/dist/src/filters/filter-range-date.js.map +1 -1
- package/dist/src/filters/filter-range-number.js +2 -1
- package/dist/src/filters/filter-range-number.js.map +1 -1
- package/dist/src/filters/filters-form.d.ts +19 -0
- package/dist/src/filters/filters-form.js +99 -0
- package/dist/src/filters/filters-form.js.map +1 -0
- package/dist/src/filters/index.d.ts +1 -0
- package/dist/src/filters/index.js +1 -0
- package/dist/src/filters/index.js.map +1 -1
- package/dist/src/filters/registry.d.ts +5 -5
- package/dist/src/filters/registry.js +25 -25
- package/dist/src/filters/registry.js.map +1 -1
- package/dist/src/index.d.ts +1 -2
- package/dist/src/index.js +1 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/types.d.ts +4 -3
- package/dist/src/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -8
- package/src/data-grid/data-grid-header.ts +12 -6
- package/src/data-grist.ts +3 -0
- package/src/filters/filter-checkbox.ts +1 -0
- package/src/filters/filter-input.ts +1 -1
- package/src/filters/filter-range-date.ts +1 -1
- package/src/filters/filter-range-number.ts +2 -1
- package/src/filters/filters-form.ts +132 -0
- package/src/filters/index.ts +2 -0
- package/src/filters/registry.ts +26 -26
- package/src/index.ts +1 -3
- package/src/types.ts +34 -4
- package/dist/src/interfaces/index.d.ts +0 -2
- package/dist/src/interfaces/index.js +0 -3
- package/dist/src/interfaces/index.js.map +0 -1
- package/dist/src/interfaces/ox-grist-search-form.d.ts +0 -6
- package/dist/src/interfaces/ox-grist-search-form.js +0 -2
- package/dist/src/interfaces/ox-grist-search-form.js.map +0 -1
- package/dist/src/interfaces/ox-search-field.d.ts +0 -39
- package/dist/src/interfaces/ox-search-field.js +0 -2
- package/dist/src/interfaces/ox-search-field.js.map +0 -1
- package/dist/src/search-form/index.d.ts +0 -7
- package/dist/src/search-form/index.js +0 -8
- package/dist/src/search-form/index.js.map +0 -1
- package/dist/src/search-form/ox-basic-field.d.ts +0 -18
- package/dist/src/search-form/ox-basic-field.js +0 -75
- package/dist/src/search-form/ox-basic-field.js.map +0 -1
- package/dist/src/search-form/ox-checkbox-field.d.ts +0 -11
- package/dist/src/search-form/ox-checkbox-field.js +0 -60
- package/dist/src/search-form/ox-checkbox-field.js.map +0 -1
- package/dist/src/search-form/ox-grist-search-form.d.ts +0 -11
- package/dist/src/search-form/ox-grist-search-form.js +0 -177
- package/dist/src/search-form/ox-grist-search-form.js.map +0 -1
- package/dist/src/search-form/ox-number-field.d.ts +0 -14
- package/dist/src/search-form/ox-number-field.js +0 -112
- package/dist/src/search-form/ox-number-field.js.map +0 -1
- package/dist/src/search-form/ox-search-form.d.ts +0 -15
- package/dist/src/search-form/ox-search-form.js +0 -53
- package/dist/src/search-form/ox-search-form.js.map +0 -1
- package/dist/src/search-form/ox-select-field.d.ts +0 -21
- package/dist/src/search-form/ox-select-field.js +0 -181
- package/dist/src/search-form/ox-select-field.js.map +0 -1
- package/dist/src/search-form/ox-text-field.d.ts +0 -11
- package/dist/src/search-form/ox-text-field.js +0 -60
- package/dist/src/search-form/ox-text-field.js.map +0 -1
- package/src/interfaces/index.ts +0 -2
- package/src/interfaces/ox-grist-search-form.ts +0 -7
- package/src/interfaces/ox-search-field.ts +0 -52
- package/src/search-form/index.ts +0 -7
- package/src/search-form/ox-basic-field.ts +0 -86
- package/src/search-form/ox-checkbox-field.ts +0 -57
- package/src/search-form/ox-grist-search-form.ts +0 -200
- package/src/search-form/ox-number-field.ts +0 -113
- package/src/search-form/ox-search-form.ts +0 -71
- package/src/search-form/ox-select-field.ts +0 -189
- 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
|
+
}
|
package/src/filters/index.ts
CHANGED
package/src/filters/registry.ts
CHANGED
|
@@ -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
|
|
33
|
+
export function registerFilterRenderer(type: string, renderer: FilterSelectRenderer[]) {
|
|
34
34
|
RENDERERS[type] = renderer
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
export function
|
|
37
|
+
export function unregisterFilterRenderer(type: string): void {
|
|
38
38
|
delete RENDERERS[type]
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
export function
|
|
41
|
+
export function getFilterRenderers(): { [name: string]: FilterSelectRenderer[] } {
|
|
42
42
|
return { ...RENDERERS }
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
export function
|
|
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'] ||
|
|
50
|
+
return RENDERERS[type || 'text'] || [FilterInput]
|
|
51
51
|
}
|
package/src/index.ts
CHANGED
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 {
|
|
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 =
|
|
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 +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 +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 +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,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
|
-
}
|