@operato/app 8.0.0-alpha.9 → 8.0.0-beta.0
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 +1089 -3057
- package/dist/src/filters-form/filter-resource-code.d.ts +3 -0
- package/dist/src/filters-form/filter-resource-code.js +8 -0
- package/dist/src/filters-form/filter-resource-code.js.map +1 -0
- package/dist/src/filters-form/filter-resource-object.d.ts +3 -0
- package/dist/src/filters-form/filter-resource-object.js +8 -0
- package/dist/src/filters-form/filter-resource-object.js.map +1 -0
- package/dist/src/filters-form/index.js +6 -0
- package/dist/src/filters-form/index.js.map +1 -1
- package/dist/src/filters-form/ox-filter-resource-code.d.ts +17 -0
- package/dist/src/filters-form/ox-filter-resource-code.js +133 -0
- package/dist/src/filters-form/ox-filter-resource-code.js.map +1 -0
- package/dist/src/filters-form/ox-filter-resource-object.d.ts +13 -0
- package/dist/src/filters-form/ox-filter-resource-object.js +195 -0
- package/dist/src/filters-form/ox-filter-resource-object.js.map +1 -0
- package/dist/src/grist-editor/ox-grist-editor-resource-id.js +1 -1
- package/dist/src/grist-editor/ox-grist-editor-resource-id.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +33 -22
- package/src/filters-form/filter-resource-code.ts +11 -0
- package/src/filters-form/filter-resource-object.ts +11 -0
- package/src/filters-form/index.ts +8 -0
- package/src/filters-form/ox-filter-resource-code.ts +154 -0
- package/src/filters-form/ox-filter-resource-object.ts +224 -0
- package/src/grist-editor/ox-grist-editor-resource-id.ts +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import './ox-filter-resource-code.js';
|
|
2
|
+
import { html } from 'lit-html';
|
|
3
|
+
export const FilterResourceCode = (column, value, owner) => {
|
|
4
|
+
return html `
|
|
5
|
+
<ox-filter-resource-code name=${column === null || column === void 0 ? void 0 : column.name} .column=${column} .value=${value}></ox-filter-resource-code>
|
|
6
|
+
`;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=filter-resource-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-resource-code.js","sourceRoot":"","sources":["../../../src/filters-form/filter-resource-code.ts"],"names":[],"mappings":"AAAA,OAAO,8BAA8B,CAAA;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAI/B,MAAM,CAAC,MAAM,kBAAkB,GAAyB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAC/E,OAAO,IAAI,CAAA;oCACuB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,YAAY,MAAM,WAAW,KAAK;GAC/E,CAAA;AACH,CAAC,CAAA","sourcesContent":["import './ox-filter-resource-code.js'\n\nimport { html } from 'lit-html'\n\nimport { FilterSelectRenderer } from '@operato/data-grist'\n\nexport const FilterResourceCode: FilterSelectRenderer = (column, value, owner) => {\n return html`\n <ox-filter-resource-code name=${column?.name} .column=${column} .value=${value}></ox-filter-resource-code>\n `\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import './ox-filter-resource-object.js';
|
|
2
|
+
import { html } from 'lit-html';
|
|
3
|
+
export const FilterResourceObject = (column, value, owner) => {
|
|
4
|
+
return html `
|
|
5
|
+
<ox-filter-resource-object name=${column === null || column === void 0 ? void 0 : column.name} .column=${column} .value=${value}></ox-filter-resource-object>
|
|
6
|
+
`;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=filter-resource-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-resource-object.js","sourceRoot":"","sources":["../../../src/filters-form/filter-resource-object.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAI/B,MAAM,CAAC,MAAM,oBAAoB,GAAyB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IACjF,OAAO,IAAI,CAAA;sCACyB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,YAAY,MAAM,WAAW,KAAK;GACjF,CAAA;AACH,CAAC,CAAA","sourcesContent":["import './ox-filter-resource-object.js'\n\nimport { html } from 'lit-html'\n\nimport { FilterSelectRenderer } from '@operato/data-grist'\n\nexport const FilterResourceObject: FilterSelectRenderer = (column, value, owner) => {\n return html`\n <ox-filter-resource-object name=${column?.name} .column=${column} .value=${value}></ox-filter-resource-object>\n `\n}\n"]}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { registerFilterRenderer } from '@operato/form';
|
|
2
|
+
import { registerFilterRenderer as dataGristFilterRenderer } from '@operato/data-grist';
|
|
2
3
|
import { FilterResourceSelect } from './filter-resource-select.js';
|
|
4
|
+
import { FilterResourceCode } from './filter-resource-code.js';
|
|
5
|
+
import { FilterResourceObject } from './filter-resource-object.js';
|
|
3
6
|
registerFilterRenderer('resource-object', [FilterResourceSelect]);
|
|
4
7
|
registerFilterRenderer('resource-id', [FilterResourceSelect]);
|
|
8
|
+
dataGristFilterRenderer('code', [FilterResourceCode]);
|
|
9
|
+
dataGristFilterRenderer('object', [FilterResourceObject]);
|
|
10
|
+
dataGristFilterRenderer('resource-object', [FilterResourceObject]);
|
|
5
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/filters-form/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/filters-form/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,sBAAsB,IAAI,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElE,sBAAsB,CAAC,iBAAiB,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAA;AACjE,sBAAsB,CAAC,aAAa,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAA;AAE7D,uBAAuB,CAAC,MAAM,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;AACrD,uBAAuB,CAAC,QAAQ,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAA;AACzD,uBAAuB,CAAC,iBAAiB,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAA","sourcesContent":["import { registerFilterRenderer } from '@operato/form'\nimport { registerFilterRenderer as dataGristFilterRenderer } from '@operato/data-grist'\n\nimport { FilterResourceSelect } from './filter-resource-select.js'\n\nimport { FilterResourceCode } from './filter-resource-code.js'\nimport { FilterResourceObject } from './filter-resource-object.js'\n\nregisterFilterRenderer('resource-object', [FilterResourceSelect])\nregisterFilterRenderer('resource-id', [FilterResourceSelect])\n\ndataGristFilterRenderer('code', [FilterResourceCode])\ndataGristFilterRenderer('object', [FilterResourceObject])\ndataGristFilterRenderer('resource-object', [FilterResourceObject])\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import '@operato/input/ox-select.js';
|
|
2
|
+
import { OxFormField } from '@operato/input';
|
|
3
|
+
type CommonCodeDetail = {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
rank: number;
|
|
7
|
+
};
|
|
8
|
+
export declare class OxFilterResourceCode extends OxFormField {
|
|
9
|
+
static styles: import("lit").CSSResult;
|
|
10
|
+
column: any;
|
|
11
|
+
value?: string;
|
|
12
|
+
codes?: CommonCodeDetail[];
|
|
13
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
14
|
+
fetchCodes(): Promise<void>;
|
|
15
|
+
connectedCallback(): void;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import '@operato/input/ox-select.js';
|
|
3
|
+
import gql from 'graphql-tag';
|
|
4
|
+
import { css, html } from 'lit';
|
|
5
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
6
|
+
import { i18next } from '@operato/i18n';
|
|
7
|
+
import { client, gqlContext } from '@operato/graphql';
|
|
8
|
+
import { OxFormField } from '@operato/input';
|
|
9
|
+
const FETCH_COMMON_CODE_GQL = (codeName) => gql `
|
|
10
|
+
{
|
|
11
|
+
commonCode(name: "${codeName}") {
|
|
12
|
+
details {
|
|
13
|
+
name
|
|
14
|
+
description
|
|
15
|
+
rank
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
`;
|
|
20
|
+
let OxFilterResourceCode = class OxFilterResourceCode extends OxFormField {
|
|
21
|
+
render() {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
const { name, filter } = this.column;
|
|
24
|
+
const operator = filter.operator;
|
|
25
|
+
const { selectDispOpt = 'code-name' } = this.column.record || {};
|
|
26
|
+
if (!this.codes) {
|
|
27
|
+
return html `<p>Loading...</p>`;
|
|
28
|
+
}
|
|
29
|
+
return operator === 'in'
|
|
30
|
+
? html `
|
|
31
|
+
<ox-select
|
|
32
|
+
.value=${this.value}
|
|
33
|
+
@change=${(e) => {
|
|
34
|
+
let val = e.detail;
|
|
35
|
+
this.value = (val === null || val === void 0 ? void 0 : val.length) > 0 ? val : undefined;
|
|
36
|
+
this === null || this === void 0 ? void 0 : this.dispatchEvent(new CustomEvent('change', {
|
|
37
|
+
detail: {
|
|
38
|
+
name,
|
|
39
|
+
operator,
|
|
40
|
+
value: this.value
|
|
41
|
+
}
|
|
42
|
+
}));
|
|
43
|
+
}}
|
|
44
|
+
>
|
|
45
|
+
<ox-popup-list multiple attr-selected="checked" with-search align-left>
|
|
46
|
+
<ox-checkbox
|
|
47
|
+
checkAll
|
|
48
|
+
@click=${(e) => {
|
|
49
|
+
var _a;
|
|
50
|
+
const checked = e.target.checked;
|
|
51
|
+
const val = checked ? this.codes.map((code) => code.name) : [];
|
|
52
|
+
(_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new CustomEvent('select', { bubbles: true, detail: val }));
|
|
53
|
+
}}
|
|
54
|
+
>${i18next.t('label.all')}</ox-checkbox
|
|
55
|
+
>
|
|
56
|
+
${(_a = this.codes) === null || _a === void 0 ? void 0 : _a.filter((code) => !!code.name).map((code) => html `
|
|
57
|
+
<ox-checkbox
|
|
58
|
+
option
|
|
59
|
+
value=${code.name}
|
|
60
|
+
@change=${(e) => {
|
|
61
|
+
const parent = e.target.parentElement;
|
|
62
|
+
const checkCnt = e.target.checked ? 1 : -1;
|
|
63
|
+
const checkedLen = parent.querySelectorAll('ox-checkbox[option][checked]').length + checkCnt;
|
|
64
|
+
parent.querySelector('ox-checkbox[checkAll]').checked =
|
|
65
|
+
this.codes.filter((code) => !!code.name).length === checkedLen;
|
|
66
|
+
}}
|
|
67
|
+
>${selectDispOpt.replace('name', code.description).replace('code', code.name)}</ox-checkbox
|
|
68
|
+
>
|
|
69
|
+
`)}
|
|
70
|
+
</ox-popup-list>
|
|
71
|
+
</ox-select>
|
|
72
|
+
`
|
|
73
|
+
: html `
|
|
74
|
+
<ox-select
|
|
75
|
+
.value=${this.value}
|
|
76
|
+
@change=${(e) => {
|
|
77
|
+
this.value = e.detail;
|
|
78
|
+
this.dispatchEvent(new CustomEvent('change', {
|
|
79
|
+
detail: {
|
|
80
|
+
name,
|
|
81
|
+
operator,
|
|
82
|
+
value: this.value
|
|
83
|
+
}
|
|
84
|
+
}));
|
|
85
|
+
}}
|
|
86
|
+
>
|
|
87
|
+
<ox-popup-list with-search>
|
|
88
|
+
<div option value=""> </div>
|
|
89
|
+
${(_b = this.codes) === null || _b === void 0 ? void 0 : _b.map((code) => html `
|
|
90
|
+
<div option value=${code.name}>
|
|
91
|
+
${selectDispOpt.replace('name', code.description).replace('code', code.name)}
|
|
92
|
+
</div>
|
|
93
|
+
`)}
|
|
94
|
+
</ox-popup-list>
|
|
95
|
+
</ox-select>
|
|
96
|
+
`;
|
|
97
|
+
}
|
|
98
|
+
async fetchCodes() {
|
|
99
|
+
var _a, _b;
|
|
100
|
+
const { codeName } = this.column.record || {};
|
|
101
|
+
if (codeName) {
|
|
102
|
+
const response = await client.query({
|
|
103
|
+
query: FETCH_COMMON_CODE_GQL(codeName),
|
|
104
|
+
context: gqlContext()
|
|
105
|
+
});
|
|
106
|
+
this.codes = ((_b = (_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.commonCode) === null || _b === void 0 ? void 0 : _b.details) || [];
|
|
107
|
+
this.requestUpdate();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
connectedCallback() {
|
|
111
|
+
super.connectedCallback();
|
|
112
|
+
this.fetchCodes();
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
OxFilterResourceCode.styles = css `
|
|
116
|
+
:host {
|
|
117
|
+
min-width: 100px;
|
|
118
|
+
}
|
|
119
|
+
`;
|
|
120
|
+
__decorate([
|
|
121
|
+
property({ type: Object })
|
|
122
|
+
], OxFilterResourceCode.prototype, "column", void 0);
|
|
123
|
+
__decorate([
|
|
124
|
+
property({ type: String })
|
|
125
|
+
], OxFilterResourceCode.prototype, "value", void 0);
|
|
126
|
+
__decorate([
|
|
127
|
+
state()
|
|
128
|
+
], OxFilterResourceCode.prototype, "codes", void 0);
|
|
129
|
+
OxFilterResourceCode = __decorate([
|
|
130
|
+
customElement('ox-filter-resource-code')
|
|
131
|
+
], OxFilterResourceCode);
|
|
132
|
+
export { OxFilterResourceCode };
|
|
133
|
+
//# sourceMappingURL=ox-filter-resource-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ox-filter-resource-code.js","sourceRoot":"","sources":["../../../src/filters-form/ox-filter-resource-code.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-select.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\nimport { FilterConfigObject } from '@operato/data-grist'\nimport { client, gqlContext } from '@operato/graphql'\nimport { OxFormField } from '@operato/input'\n\ntype CommonCodeDetail = {\n name: string\n description: string\n rank: number\n}\n\nconst FETCH_COMMON_CODE_GQL = (codeName: string) => gql`\n{\n commonCode(name: \"${codeName}\") {\n details {\n name\n description\n rank\n }\n }\n}\n`\n\n@customElement('ox-filter-resource-code')\nexport class OxFilterResourceCode extends OxFormField {\n static styles = css`\n :host {\n min-width: 100px;\n }\n `\n\n @property({ type: Object }) column: any\n @property({ type: String }) value?: string\n\n @state() codes?: CommonCodeDetail[]\n\n render() {\n const { name, filter } = this.column\n const operator = (filter as FilterConfigObject).operator\n const { selectDispOpt = 'code-name' } = this.column.record || {}\n\n if (!this.codes) {\n return html`<p>Loading...</p>`\n }\n\n return operator === 'in'\n ? html`\n <ox-select\n .value=${this.value}\n @change=${(e: CustomEvent) => {\n let val = e.detail\n this.value = val?.length > 0 ? val : undefined\n\n this?.dispatchEvent(\n new CustomEvent('change', {\n detail: {\n name,\n operator,\n value: this.value\n }\n })\n )\n }}\n >\n <ox-popup-list multiple attr-selected=\"checked\" with-search align-left>\n <ox-checkbox\n checkAll\n @click=${(e: any) => {\n const checked = e.target.checked\n const val = checked ? this.codes!.map((code: CommonCodeDetail) => code.name) : []\n\n e.target?.dispatchEvent(new CustomEvent('select', { bubbles: true, detail: val }))\n }}\n >${i18next.t('label.all')}</ox-checkbox\n >\n ${this.codes\n ?.filter((code: CommonCodeDetail) => !!code.name)\n .map(\n (code: CommonCodeDetail) => html`\n <ox-checkbox\n option\n value=${code.name}\n @change=${(e: any) => {\n const parent = e.target.parentElement\n const checkCnt = e.target.checked ? 1 : -1\n const checkedLen = parent.querySelectorAll('ox-checkbox[option][checked]').length + checkCnt\n\n parent.querySelector('ox-checkbox[checkAll]').checked =\n this.codes!.filter((code: CommonCodeDetail) => !!code.name).length === checkedLen\n }}\n >${selectDispOpt.replace('name', code.description).replace('code', code.name)}</ox-checkbox\n >\n `\n )}\n </ox-popup-list>\n </ox-select>\n `\n : html`\n <ox-select\n .value=${this.value}\n @change=${(e: CustomEvent) => {\n this.value = e.detail\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: {\n name,\n operator,\n value: this.value\n }\n })\n )\n }}\n >\n <ox-popup-list with-search>\n <div option value=\"\"> </div>\n ${this.codes?.map(\n (code: CommonCodeDetail) => html`\n <div option value=${code.name}>\n ${selectDispOpt.replace('name', code.description).replace('code', code.name)}\n </div>\n `\n )}\n </ox-popup-list>\n </ox-select>\n `\n }\n\n async fetchCodes() {\n const { codeName } = this.column.record || {}\n\n if (codeName) {\n const response = await client.query({\n query: FETCH_COMMON_CODE_GQL(codeName),\n context: gqlContext()\n })\n\n this.codes = response?.data?.commonCode?.details || []\n\n this.requestUpdate()\n }\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n this.fetchCodes()\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import '../selector/ox-selector-resource-object.js';
|
|
2
|
+
import { OxFormField } from '@operato/input';
|
|
3
|
+
export declare class OxFilterResourceObject extends OxFormField {
|
|
4
|
+
static styles: import("lit").CSSResult[];
|
|
5
|
+
column: any;
|
|
6
|
+
value?: string;
|
|
7
|
+
resourceObject?: any;
|
|
8
|
+
private popup?;
|
|
9
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
10
|
+
_onclick(e: Event): void;
|
|
11
|
+
_onkeydown(e: KeyboardEvent): void;
|
|
12
|
+
openSelector(): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import '../selector/ox-selector-resource-object.js';
|
|
3
|
+
import { css, html } from 'lit';
|
|
4
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
5
|
+
import { i18next } from '@operato/i18n';
|
|
6
|
+
import { openPopup } from '@operato/layout';
|
|
7
|
+
import { OxFormField } from '@operato/input';
|
|
8
|
+
let OxFilterResourceObject = class OxFilterResourceObject extends OxFormField {
|
|
9
|
+
render() {
|
|
10
|
+
var { nameField = 'name', descriptionField = 'description' } = this.column.record.options || {};
|
|
11
|
+
var value = this.resourceObject || {};
|
|
12
|
+
var name, description;
|
|
13
|
+
if (typeof nameField === 'function') {
|
|
14
|
+
name = nameField(value);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
name = value[nameField];
|
|
18
|
+
}
|
|
19
|
+
if (typeof descriptionField === 'function') {
|
|
20
|
+
description = descriptionField(value);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
description = value[descriptionField] && `(${value[descriptionField]})`;
|
|
24
|
+
}
|
|
25
|
+
return html `
|
|
26
|
+
<div @click=${this._onclick} @keydown=${this._onkeydown}>
|
|
27
|
+
<span tabindex="0" style="flex:1">${name || ''}${(description && `(${description})`) || ''}</span>
|
|
28
|
+
<md-icon>search</md-icon>
|
|
29
|
+
</div>
|
|
30
|
+
`;
|
|
31
|
+
}
|
|
32
|
+
_onclick(e) {
|
|
33
|
+
e.stopPropagation();
|
|
34
|
+
this.openSelector();
|
|
35
|
+
}
|
|
36
|
+
_onkeydown(e) {
|
|
37
|
+
const key = e.key;
|
|
38
|
+
if (key == 'Enter') {
|
|
39
|
+
e.stopPropagation();
|
|
40
|
+
this.openSelector();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
openSelector() {
|
|
44
|
+
if (this.popup) {
|
|
45
|
+
delete this.popup;
|
|
46
|
+
}
|
|
47
|
+
var { title = '', idField = 'id', nameField = 'name', descriptionField = 'description', valueField = 'id', queryName, basicArgs, select, columns, pagination, list } = this.column.record.options || {};
|
|
48
|
+
if (!queryName) {
|
|
49
|
+
console.warn('queryName is empty');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
/* select options is only for compatability, it might be able to be deprecated. */
|
|
53
|
+
columns = columns || select;
|
|
54
|
+
const confirmCallback = (selected) => {
|
|
55
|
+
// this.department = selected
|
|
56
|
+
// ? {
|
|
57
|
+
// id: selected.id,
|
|
58
|
+
// controlNo: selected.controlNo,
|
|
59
|
+
// name: selected.name,
|
|
60
|
+
// description: selected.description
|
|
61
|
+
// }
|
|
62
|
+
// : null
|
|
63
|
+
var _a;
|
|
64
|
+
// this.value = this.department?.name
|
|
65
|
+
// this.dispatchEvent(
|
|
66
|
+
// new CustomEvent('change', {
|
|
67
|
+
// bubbles: true,
|
|
68
|
+
// composed: true,
|
|
69
|
+
// detail: this.value
|
|
70
|
+
// })
|
|
71
|
+
// )
|
|
72
|
+
this.resourceObject = selected
|
|
73
|
+
? {
|
|
74
|
+
...(columns || [])
|
|
75
|
+
.map((field) => field.name)
|
|
76
|
+
.reduce((obj, fieldName) => {
|
|
77
|
+
return (obj = {
|
|
78
|
+
...obj,
|
|
79
|
+
[fieldName]: selected[fieldName]
|
|
80
|
+
});
|
|
81
|
+
}, {}),
|
|
82
|
+
[idField]: selected[idField],
|
|
83
|
+
[nameField]: selected[nameField],
|
|
84
|
+
[descriptionField]: selected[descriptionField]
|
|
85
|
+
}
|
|
86
|
+
: null;
|
|
87
|
+
this.value = (_a = this.resourceObject) === null || _a === void 0 ? void 0 : _a[nameField];
|
|
88
|
+
this.dispatchEvent(new CustomEvent('change', {
|
|
89
|
+
detail: this.value
|
|
90
|
+
}));
|
|
91
|
+
};
|
|
92
|
+
var value = this.resourceObject || {};
|
|
93
|
+
var actualValue;
|
|
94
|
+
if (typeof valueField === 'function') {
|
|
95
|
+
actualValue = valueField(value);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
actualValue = value[valueField];
|
|
99
|
+
}
|
|
100
|
+
var template = html `
|
|
101
|
+
<ox-selector-resource-object
|
|
102
|
+
.value=${actualValue}
|
|
103
|
+
.confirmCallback=${confirmCallback.bind(this)}
|
|
104
|
+
.queryName=${queryName}
|
|
105
|
+
.columns=${columns}
|
|
106
|
+
.pagination=${pagination}
|
|
107
|
+
.list=${list}
|
|
108
|
+
.basicArgs=${basicArgs}
|
|
109
|
+
.valueField=${valueField}
|
|
110
|
+
></ox-selector-resource-object>
|
|
111
|
+
`;
|
|
112
|
+
this.popup = openPopup(template, {
|
|
113
|
+
backdrop: true,
|
|
114
|
+
size: 'large',
|
|
115
|
+
search: {
|
|
116
|
+
autofocus: true,
|
|
117
|
+
placeholder: title || i18next.t('title.select_item'),
|
|
118
|
+
handler: (instance, value) => {
|
|
119
|
+
/* instance: template instance */
|
|
120
|
+
instance.searchText(value);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
filter: {
|
|
124
|
+
handler: (instance) => {
|
|
125
|
+
/* instance: template instance */
|
|
126
|
+
instance.toggleFilter();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
OxFilterResourceObject.styles = [
|
|
133
|
+
css `
|
|
134
|
+
:host {
|
|
135
|
+
display: block;
|
|
136
|
+
position: relative;
|
|
137
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.15);
|
|
138
|
+
min-width: 100px;
|
|
139
|
+
|
|
140
|
+
--ox-select-padding: var(--spacing-tiny);
|
|
141
|
+
--ox-select-font: var(--input-font);
|
|
142
|
+
--ox-select-color: var(--input-color, var(--md-sys-color-on-surface-variant));
|
|
143
|
+
--ox-select-icon-color: var(--theme-primary-text-color, var(--md-sys-color-on-surface-variant));
|
|
144
|
+
--ox-select-icon-hover-color: var(--md-sys-color-on-primary-container, #3c3938);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
div {
|
|
148
|
+
width: 100%;
|
|
149
|
+
box-sizing: border-box;
|
|
150
|
+
|
|
151
|
+
display: flex;
|
|
152
|
+
flex-direction: row;
|
|
153
|
+
align-items: center;
|
|
154
|
+
justify-content: center;
|
|
155
|
+
cursor: pointer;
|
|
156
|
+
padding: var(--ox-select-padding);
|
|
157
|
+
font: var(--ox-select-font);
|
|
158
|
+
color: var(--ox-select-color);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
span {
|
|
162
|
+
flex: 1;
|
|
163
|
+
overflow: hidden;
|
|
164
|
+
text-overflow: ellipsis;
|
|
165
|
+
white-space: nowrap;
|
|
166
|
+
gap: 4px;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
md-icon {
|
|
170
|
+
--md-icon-size: 16px;
|
|
171
|
+
display: block;
|
|
172
|
+
text-align: right;
|
|
173
|
+
color: var(--ox-select-icon-color);
|
|
174
|
+
opacity: 0.7;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
div:hover md-icon {
|
|
178
|
+
color: var(--md-sys-color-on-primary-container);
|
|
179
|
+
}
|
|
180
|
+
`
|
|
181
|
+
];
|
|
182
|
+
__decorate([
|
|
183
|
+
property({ type: Object })
|
|
184
|
+
], OxFilterResourceObject.prototype, "column", void 0);
|
|
185
|
+
__decorate([
|
|
186
|
+
property({ type: String })
|
|
187
|
+
], OxFilterResourceObject.prototype, "value", void 0);
|
|
188
|
+
__decorate([
|
|
189
|
+
state()
|
|
190
|
+
], OxFilterResourceObject.prototype, "resourceObject", void 0);
|
|
191
|
+
OxFilterResourceObject = __decorate([
|
|
192
|
+
customElement('ox-filter-resource-object')
|
|
193
|
+
], OxFilterResourceObject);
|
|
194
|
+
export { OxFilterResourceObject };
|
|
195
|
+
//# sourceMappingURL=ox-filter-resource-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ox-filter-resource-object.js","sourceRoot":"","sources":["../../../src/filters-form/ox-filter-resource-object.ts"],"names":[],"mappings":"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","sourcesContent":["import '../selector/ox-selector-resource-object.js'\n\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\nimport { openPopup, PopupHandle } from '@operato/layout'\nimport { OxFormField } from '@operato/input'\n\n@customElement('ox-filter-resource-object')\nexport class OxFilterResourceObject extends OxFormField {\n static styles = [\n css`\n :host {\n display: block;\n position: relative;\n border-bottom: 1px solid rgba(0, 0, 0, 0.15);\n min-width: 100px;\n\n --ox-select-padding: var(--spacing-tiny);\n --ox-select-font: var(--input-font);\n --ox-select-color: var(--input-color, var(--md-sys-color-on-surface-variant));\n --ox-select-icon-color: var(--theme-primary-text-color, var(--md-sys-color-on-surface-variant));\n --ox-select-icon-hover-color: var(--md-sys-color-on-primary-container, #3c3938);\n }\n\n div {\n width: 100%;\n box-sizing: border-box;\n\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: var(--ox-select-padding);\n font: var(--ox-select-font);\n color: var(--ox-select-color);\n }\n\n span {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n gap: 4px;\n }\n\n md-icon {\n --md-icon-size: 16px;\n display: block;\n text-align: right;\n color: var(--ox-select-icon-color);\n opacity: 0.7;\n }\n\n div:hover md-icon {\n color: var(--md-sys-color-on-primary-container);\n }\n `\n ]\n\n @property({ type: Object }) column: any\n @property({ type: String }) value?: string\n\n @state() resourceObject?: any\n\n private popup?: PopupHandle\n\n render() {\n var { nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n\n var value = this.resourceObject || {}\n var name, description\n\n if (typeof nameField === 'function') {\n name = nameField(value)\n } else {\n name = value[nameField]\n }\n\n if (typeof descriptionField === 'function') {\n description = descriptionField(value)\n } else {\n description = value[descriptionField] && `(${value[descriptionField]})`\n }\n\n return html`\n <div @click=${this._onclick} @keydown=${this._onkeydown}>\n <span tabindex=\"0\" style=\"flex:1\">${name || ''}${(description && `(${description})`) || ''}</span>\n <md-icon>search</md-icon>\n </div>\n `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.openSelector()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openSelector()\n }\n }\n\n openSelector() {\n if (this.popup) {\n delete this.popup\n }\n\n var {\n title = '',\n idField = 'id',\n nameField = 'name',\n descriptionField = 'description',\n valueField = 'id',\n queryName,\n basicArgs,\n select,\n columns,\n pagination,\n list\n } = this.column.record.options || {}\n\n if (!queryName) {\n console.warn('queryName is empty')\n return\n }\n\n /* select options is only for compatability, it might be able to be deprecated. */\n columns = columns || select\n\n const confirmCallback = (selected?: { [field: string]: any }) => {\n // this.department = selected\n // ? {\n // id: selected.id,\n // controlNo: selected.controlNo,\n // name: selected.name,\n // description: selected.description\n // }\n // : null\n\n // this.value = this.department?.name\n\n // this.dispatchEvent(\n // new CustomEvent('change', {\n // bubbles: true,\n // composed: true,\n // detail: this.value\n // })\n // )\n\n this.resourceObject = selected\n ? {\n ...(columns || [])\n .map((field: any) => field.name)\n .reduce(\n (obj: { [field: string]: any }, fieldName: string) => {\n return (obj = {\n ...obj,\n [fieldName]: selected[fieldName]\n })\n },\n {} as { [field: string]: any }\n ),\n [idField]: selected[idField],\n [nameField]: selected[nameField],\n [descriptionField]: selected[descriptionField]\n }\n : null\n\n this.value = this.resourceObject?.[nameField]\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: this.value\n })\n )\n }\n\n var value = this.resourceObject || {}\n var actualValue\n if (typeof valueField === 'function') {\n actualValue = valueField(value)\n } else {\n actualValue = value[valueField]\n }\n\n var template = html`\n <ox-selector-resource-object\n .value=${actualValue}\n .confirmCallback=${confirmCallback.bind(this)}\n .queryName=${queryName}\n .columns=${columns}\n .pagination=${pagination}\n .list=${list}\n .basicArgs=${basicArgs}\n .valueField=${valueField}\n ></ox-selector-resource-object>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n search: {\n autofocus: true,\n placeholder: title || i18next.t('title.select_item'),\n handler: (instance: any, value: any) => {\n /* instance: template instance */\n instance.searchText(value)\n }\n },\n filter: {\n handler: (instance: any) => {\n /* instance: template instance */\n instance.toggleFilter()\n }\n }\n })\n }\n}\n"]}
|
|
@@ -71,7 +71,7 @@ let OxGristEditorResourceId = class OxGristEditorResourceId extends OxGristEdito
|
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
73
|
OxGristEditorResourceId = __decorate([
|
|
74
|
-
customElement('ox-
|
|
74
|
+
customElement('ox-grist-editor-resource-id')
|
|
75
75
|
], OxGristEditorResourceId);
|
|
76
76
|
export { OxGristEditorResourceId };
|
|
77
77
|
//# sourceMappingURL=ox-grist-editor-resource-id.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ox-grist-editor-resource-id.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-id.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ox-grist-editor-resource-id.js","sourceRoot":"","sources":["../../../src/grist-editor/ox-grist-editor-resource-id.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '../selector/ox-selector-resource-id.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { GristRecord, OxGristEditor } from '@operato/data-grist'\nimport { openPopup, PopupHandle } from '@operato/layout'\n\n@customElement('ox-grist-editor-resource-id')\nexport class OxGristEditorResourceId extends OxGristEditor {\n private popup?: PopupHandle\n\n render() {\n var { nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n var value = this.value\n\n return html`\n ${!value\n ? html`<span tabindex=\"0\"></span>`\n : html` <span tabindex=\"0\">${value[nameField]} (${value[descriptionField]})</span> `}\n <md-icon>arrow_drop_down</md-icon>\n `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.openSelector()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openSelector()\n }\n }\n\n openSelector() {\n if (this.popup) {\n delete this.popup\n }\n\n const confirmCallback: (record?: GristRecord) => void = selected => {\n if (!selected) {\n return\n }\n\n var { idField = 'id', nameField = 'name', descriptionField = 'description' } = this.column.record.options || {}\n\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: selected\n ? {\n [idField]: selected[idField],\n [nameField]: selected[nameField],\n [descriptionField]: selected[descriptionField]\n }\n : null,\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n }\n\n var value = this.value || {}\n var template = html`\n <ox-selector-resource-id\n .value=${value.id}\n .confirmCallback=${confirmCallback.bind(this)}\n .queryName=${this.column.record.options.queryName}\n .basicArgs=${this.column.record.options.basicArgs}\n ></ox-selector-resource-id>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n title: 'select item'\n })\n }\n}\n"]}
|