@operato/app 9.0.28 → 9.0.31
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
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
### [9.0.31](https://github.com/hatiolab/operato/compare/v9.0.30...v9.0.31) (2025-09-14)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @operato/app
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### [9.0.29](https://github.com/hatiolab/operato/compare/v9.0.28...v9.0.29) (2025-09-13)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### :bug: Bug Fix
|
|
18
|
+
|
|
19
|
+
* ox-filter-resource-object ([ea72a0e](https://github.com/hatiolab/operato/commit/ea72a0e60efdbf521d67f7d65215abae1ab8790c))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
6
23
|
### [9.0.28](https://github.com/hatiolab/operato/compare/v9.0.27...v9.0.28) (2025-09-04)
|
|
7
24
|
|
|
8
25
|
**Note:** Version bump only for package @operato/app
|
|
@@ -48,7 +48,7 @@ let OxFilterResourceObject = class OxFilterResourceObject extends OxFormField {
|
|
|
48
48
|
if (this.popup) {
|
|
49
49
|
delete this.popup;
|
|
50
50
|
}
|
|
51
|
-
var { title = '', idField = 'id', nameField = 'name', descriptionField = 'description', valueField = 'id', queryName, basicArgs, select, columns, pagination, list } = this.column.record.options || {};
|
|
51
|
+
var { title = '', idField = 'id', nameField = 'name', descriptionField = 'description', valueField = 'id', filterValueField = 'name' /* for filter, it might be different from valueField. 원래 valueField를 사용하려고 했으나, 기존 코드에서 잘못 사용되고 있어서, 특별히 추가한 최우선 옵션이다. */, queryName, basicArgs, select, columns, pagination, list } = this.column.record.options || {};
|
|
52
52
|
if (!queryName) {
|
|
53
53
|
console.warn('queryName is empty');
|
|
54
54
|
return;
|
|
@@ -88,8 +88,10 @@ let OxFilterResourceObject = class OxFilterResourceObject extends OxFormField {
|
|
|
88
88
|
[descriptionField]: selected[descriptionField]
|
|
89
89
|
}
|
|
90
90
|
: null;
|
|
91
|
-
this.value = (_a = this.resourceObject) === null || _a === void 0 ? void 0 : _a[nameField];
|
|
91
|
+
this.value = (_a = this.resourceObject) === null || _a === void 0 ? void 0 : _a[filterValueField || nameField];
|
|
92
92
|
this.dispatchEvent(new CustomEvent('change', {
|
|
93
|
+
bubbles: true,
|
|
94
|
+
composed: true,
|
|
93
95
|
detail: this.value
|
|
94
96
|
}));
|
|
95
97
|
};
|
|
@@ -1 +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 = undefined\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"]}
|
|
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 = undefined\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 filterValueField = 'name' /* for filter, it might be different from valueField. 원래 valueField를 사용하려고 했으나, 기존 코드에서 잘못 사용되고 있어서, 특별히 추가한 최우선 옵션이다. */,\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?.[filterValueField || nameField]\n\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\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"]}
|