@simplysm/angular 14.0.37 → 14.0.38
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/dist/controls/dropdown/sd-dropdown.js +8 -8
- package/dist/controls/input/{sd-date-range.picker.d.ts → sd-date-range-picker.d.ts} +1 -1
- package/dist/controls/input/{sd-date-range.picker.d.ts.map → sd-date-range-picker.d.ts.map} +1 -1
- package/dist/controls/input/{sd-date-range.picker.js → sd-date-range-picker.js} +1 -1
- package/dist/core/modal/sd-activated-modal.provider.d.ts +1 -1
- package/dist/core/modal/sd-activated-modal.provider.d.ts.map +1 -1
- package/dist/core/modal/sd-activated-modal.provider.js +1 -1
- package/dist/core/modal/sd-modal.js +1 -1
- package/dist/core/modal/sd-modal.provider.d.ts.map +1 -1
- package/dist/core/modal/sd-modal.provider.js +13 -5
- package/dist/core/routing/setupCanDeactivate.js +1 -1
- package/dist/core/selection/useSelectionManager.d.ts.map +1 -1
- package/dist/core/selection/useSelectionManager.js +4 -3
- package/dist/data/data-detail/sd-data-detail.base.d.ts.map +1 -1
- package/dist/data/data-detail/sd-data-detail.base.js +7 -1
- package/dist/data/data-sheet/injectDataSheetExcelManager.js +1 -1
- package/dist/data/data-sheet/injectDataSheetModalEditManager.js +1 -1
- package/dist/data/data-sheet/sd-data-sheet.base.d.ts +1 -1
- package/dist/data/data-sheet/sd-data-sheet.base.d.ts.map +1 -1
- package/dist/data/data-sheet/sd-data-sheet.base.js +1 -1
- package/dist/data/shared-data/sd-shared-data-select.d.ts +1 -0
- package/dist/data/shared-data/sd-shared-data-select.d.ts.map +1 -1
- package/dist/data/shared-data/sd-shared-data-select.js +15 -7
- package/dist/data/sheet/injectSheetColumnResizing.d.ts.map +1 -1
- package/dist/data/sheet/injectSheetColumnResizing.js +1 -0
- package/dist/data/state-preset/sd-state-preset.d.ts.map +1 -1
- package/dist/data/state-preset/sd-state-preset.js +4 -0
- package/dist/features/address/sd-address-search.modal.d.ts +2 -1
- package/dist/features/address/sd-address-search.modal.d.ts.map +1 -1
- package/dist/features/address/sd-address-search.modal.js +69 -23
- package/dist/features/visual/sd-barcode.d.ts.map +1 -1
- package/dist/features/visual/sd-barcode.js +10 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/layout/dock/sd-dock.d.ts.map +1 -1
- package/dist/layout/dock/sd-dock.js +1 -0
- package/package.json +7 -7
- package/src/controls/dropdown/sd-dropdown.ts +8 -8
- package/src/core/modal/sd-activated-modal.provider.ts +1 -1
- package/src/core/modal/sd-modal.provider.ts +12 -5
- package/src/core/modal/sd-modal.ts +1 -1
- package/src/core/routing/setupCanDeactivate.ts +1 -1
- package/src/core/selection/useSelectionManager.ts +5 -3
- package/src/data/data-detail/sd-data-detail.base.ts +8 -1
- package/src/data/data-sheet/injectDataSheetExcelManager.ts +1 -1
- package/src/data/data-sheet/injectDataSheetModalEditManager.ts +1 -1
- package/src/data/data-sheet/sd-data-sheet.base.ts +1 -1
- package/src/data/shared-data/sd-shared-data-select.ts +24 -13
- package/src/data/sheet/injectSheetColumnResizing.ts +2 -0
- package/src/data/state-preset/sd-state-preset.ts +6 -0
- package/src/features/address/sd-address-search.modal.ts +75 -31
- package/src/features/visual/sd-barcode.ts +9 -5
- package/src/index.ts +1 -1
- package/src/layout/dock/sd-dock.ts +2 -0
- /package/src/controls/input/{sd-date-range.picker.ts → sd-date-range-picker.ts} +0 -0
|
@@ -152,18 +152,18 @@ export class SdDropdown {
|
|
|
152
152
|
return;
|
|
153
153
|
contentEl.repaint();
|
|
154
154
|
const rect = contentEl.getBoundingClientRect();
|
|
155
|
-
const
|
|
156
|
-
const
|
|
155
|
+
const shouldPlaceAbove = window.innerHeight < rect.top * 2;
|
|
156
|
+
const shouldPlaceLeft = window.innerWidth < rect.left * 2;
|
|
157
157
|
const gap = 2;
|
|
158
|
-
const topPos =
|
|
159
|
-
const bottomPos =
|
|
160
|
-
const leftPos =
|
|
161
|
-
const rightPos =
|
|
158
|
+
const topPos = shouldPlaceAbove ? undefined : rect.bottom + gap;
|
|
159
|
+
const bottomPos = shouldPlaceAbove ? window.innerHeight - rect.top : undefined;
|
|
160
|
+
const leftPos = shouldPlaceLeft ? undefined : rect.left;
|
|
161
|
+
const rightPos = shouldPlaceLeft ? window.innerWidth - rect.right : undefined;
|
|
162
162
|
// Calculate available space for popup
|
|
163
|
-
const availableHeight =
|
|
163
|
+
const availableHeight = shouldPlaceAbove
|
|
164
164
|
? rect.top - gap
|
|
165
165
|
: window.innerHeight - rect.bottom - gap;
|
|
166
|
-
const availableWidth =
|
|
166
|
+
const availableWidth = shouldPlaceLeft ? rect.right : window.innerWidth - rect.left;
|
|
167
167
|
Object.assign(popupEl.style, {
|
|
168
168
|
top: topPos !== undefined ? topPos + "px" : "",
|
|
169
169
|
bottom: bottomPos !== undefined ? bottomPos + "px" : "",
|
|
@@ -10,4 +10,4 @@ export declare class SdDateRangePicker {
|
|
|
10
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdDateRangePicker, never>;
|
|
11
11
|
static ɵcmp: i0.ɵɵComponentDeclaration<SdDateRangePicker, "sd-date-range-picker", never, { "periodType": { "alias": "periodType"; "required": false; "isSignal": true; }; "from": { "alias": "from"; "required": false; "isSignal": true; }; "to": { "alias": "to"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; }, { "periodType": "periodTypeChange"; "from": "fromChange"; "to": "toChange"; }, never, never, true, never>;
|
|
12
12
|
}
|
|
13
|
-
//# sourceMappingURL=sd-date-range
|
|
13
|
+
//# sourceMappingURL=sd-date-range-picker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-date-range
|
|
1
|
+
{"version":3,"file":"sd-date-range-picker.d.ts","sourceRoot":"","sources":["../../../src/controls/input/sd-date-range-picker.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;;AAEjD,qBA+Ca,iBAAiB;IAC5B,UAAU,wDAAiC;IAC3C,IAAI,4DAAqB;IACzB,EAAE,4DAAqB;IAEvB,QAAQ,qEAAiD;IAEzD,2BAA2B,IAAI,IAAI;IAenC,qBAAqB,IAAI,IAAI;yCAtBlB,iBAAiB;2CAAjB,iBAAiB;CA2C7B"}
|
|
@@ -130,4 +130,4 @@ export class SdDateRangePicker {
|
|
|
130
130
|
}
|
|
131
131
|
`, styles: ["sd-date-range-picker {\n display: flex;\n align-items: center;\n flex-direction: row;\n gap: var(--gap-sm);\n}\n@supports not (appearance: auto) {\n sd-date-range-picker {\n gap: 0;\n }\n sd-date-range-picker > * + * {\n margin-left: var(--gap-sm);\n }\n sd-date-range-picker.gap-xxs {\n gap: 0;\n }\n sd-date-range-picker.gap-xxs > * + * {\n margin-left: var(--gap-xxs);\n }\n sd-date-range-picker.gap-xs {\n gap: 0;\n }\n sd-date-range-picker.gap-xs > * + * {\n margin-left: var(--gap-xs);\n }\n sd-date-range-picker.gap-sm {\n gap: 0;\n }\n sd-date-range-picker.gap-sm > * + * {\n margin-left: var(--gap-sm);\n }\n sd-date-range-picker.gap-default {\n gap: 0;\n }\n sd-date-range-picker.gap-default > * + * {\n margin-left: var(--gap-default);\n }\n sd-date-range-picker.gap-lg {\n gap: 0;\n }\n sd-date-range-picker.gap-lg > * + * {\n margin-left: var(--gap-lg);\n }\n sd-date-range-picker.gap-xl {\n gap: 0;\n }\n sd-date-range-picker.gap-xl > * + * {\n margin-left: var(--gap-xl);\n }\n sd-date-range-picker.gap-xxl {\n gap: 0;\n }\n sd-date-range-picker.gap-xxl > * + * {\n margin-left: var(--gap-xxl);\n }\n sd-date-range-picker.gap-0 {\n gap: 0;\n }\n sd-date-range-picker.gap-0 > * + * {\n margin-left: var(--gap-0);\n }\n sd-date-range-picker.gap-auto {\n gap: 0;\n }\n sd-date-range-picker.gap-auto > * + * {\n margin-left: var(--gap-auto);\n }\n}"] }]
|
|
132
132
|
}], null, { periodType: [{ type: i0.Input, args: [{ isSignal: true, alias: "periodType", required: false }] }, { type: i0.Output, args: ["periodTypeChange"] }], from: [{ type: i0.Input, args: [{ isSignal: true, alias: "from", required: false }] }, { type: i0.Output, args: ["fromChange"] }], to: [{ type: i0.Input, args: [{ isSignal: true, alias: "to", required: false }] }, { type: i0.Output, args: ["toChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }] }); })();
|
|
133
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdDateRangePicker, { className: "SdDateRangePicker", filePath: "packages/angular/src/controls/input/sd-date-range
|
|
133
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdDateRangePicker, { className: "SdDateRangePicker", filePath: "packages/angular/src/controls/input/sd-date-range-picker.ts", lineNumber: 62, forbidOrphanRendering: true }); })();
|
|
@@ -6,7 +6,7 @@ import * as i0 from "@angular/core";
|
|
|
6
6
|
export declare class SdActivatedModalProvider<T extends SdModalContentDef<any> = SdModalContentDef<any>> {
|
|
7
7
|
modalComponent: import("@angular/core").WritableSignal<any>;
|
|
8
8
|
contentComponent: import("@angular/core").WritableSignal<T | undefined>;
|
|
9
|
-
|
|
9
|
+
canDeactivateFn: () => boolean;
|
|
10
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdActivatedModalProvider<any>, never>;
|
|
11
11
|
static ɵprov: i0.ɵɵInjectableDeclaration<SdActivatedModalProvider<any>>;
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-activated-modal.provider.d.ts","sourceRoot":"","sources":["../../../src/core/modal/sd-activated-modal.provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;;AAE7D;;GAEG;AACH,qBACa,wBAAwB,CAAC,CAAC,SAAS,iBAAiB,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC;IAC7F,cAAc,8CAA0B;IACxC,gBAAgB,wDAAoC;IACpD,
|
|
1
|
+
{"version":3,"file":"sd-activated-modal.provider.d.ts","sourceRoot":"","sources":["../../../src/core/modal/sd-activated-modal.provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;;AAE7D;;GAEG;AACH,qBACa,wBAAwB,CAAC,CAAC,SAAS,iBAAiB,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC;IAC7F,cAAc,8CAA0B;IACxC,gBAAgB,wDAAoC;IACpD,eAAe,EAAE,MAAM,OAAO,CAAc;yCAHjC,wBAAwB;6CAAxB,wBAAwB;CAIpC"}
|
|
@@ -6,7 +6,7 @@ import * as i0 from "@angular/core";
|
|
|
6
6
|
export class SdActivatedModalProvider {
|
|
7
7
|
modalComponent = signal(undefined, ...(ngDevMode ? [{ debugName: "modalComponent" }] : /* istanbul ignore next */ []));
|
|
8
8
|
contentComponent = signal(undefined, ...(ngDevMode ? [{ debugName: "contentComponent" }] : /* istanbul ignore next */ []));
|
|
9
|
-
|
|
9
|
+
canDeactivateFn = () => true;
|
|
10
10
|
static ɵfac = function SdActivatedModalProvider_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdActivatedModalProvider)(); };
|
|
11
11
|
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SdActivatedModalProvider, factory: SdActivatedModalProvider.ɵfac });
|
|
12
12
|
}
|
|
@@ -174,7 +174,7 @@ export class SdModal {
|
|
|
174
174
|
this._bringToFront();
|
|
175
175
|
}
|
|
176
176
|
_requestClose() {
|
|
177
|
-
if (this._activatedModal !== null && !this._activatedModal.
|
|
177
|
+
if (this._activatedModal !== null && !this._activatedModal.canDeactivateFn()) {
|
|
178
178
|
return;
|
|
179
179
|
}
|
|
180
180
|
void this._saveConfig();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-modal.provider.d.ts","sourceRoot":"","sources":["../../../src/core/modal/sd-modal.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,qBAAqB,EACrB,YAAY,EACb,MAAM,4BAA4B,CAAC;AAGpC,OAAO,wBAAwB,CAAC;;AAEhC;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,KAAK,kBAAkB,GAAG,aAAa,GAAG,OAAO,GAAG,cAAc,GAAG,sBAAsB,CAAC;AAC5F,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GACrF,CAAC,GACD,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,GAAG,EAAE;IACrF,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,MAAM,EAAE,YAAY,CAClB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,EACtD,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,CACtF,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,qBACa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAE9C,UAAU,iDAAa;IAEjB,SAAS,CAAC,CAAC,SAAS,iBAAiB,CAAC,GAAG,CAAC,EAC9C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sd-modal.provider.d.ts","sourceRoot":"","sources":["../../../src/core/modal/sd-modal.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,qBAAqB,EACrB,YAAY,EACb,MAAM,4BAA4B,CAAC;AAGpC,OAAO,wBAAwB,CAAC;;AAEhC;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,KAAK,kBAAkB,GAAG,aAAa,GAAG,OAAO,GAAG,cAAc,GAAG,sBAAsB,CAAC;AAC5F,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GACrF,CAAC,GACD,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,GAAG,EAAE;IACrF,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,MAAM,EAAE,YAAY,CAClB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,EACtD,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,CACtF,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,qBACa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAE9C,UAAU,iDAAa;IAEjB,SAAS,CAAC,CAAC,SAAS,iBAAiB,CAAC,GAAG,CAAC,EAC9C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IA0JzD,OAAO,CAAC,aAAa;yCApKV,eAAe;6CAAf,eAAe;CA+K3B"}
|
|
@@ -14,7 +14,7 @@ export class SdModalProvider {
|
|
|
14
14
|
_injector = inject(Injector);
|
|
15
15
|
modalCount = signal(0, ...(ngDevMode ? [{ debugName: "modalCount" }] : /* istanbul ignore next */ []));
|
|
16
16
|
async showAsync(modal, options) {
|
|
17
|
-
return new Promise((resolve) => {
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
18
|
// 1. modalCount 증가
|
|
19
19
|
this.modalCount.update((v) => v + 1);
|
|
20
20
|
// 2. SdActivatedModalProvider 인스턴스 생성
|
|
@@ -24,10 +24,18 @@ export class SdModalProvider {
|
|
|
24
24
|
providers: [{ provide: SdActivatedModalProvider, useValue: activatedModal }],
|
|
25
25
|
parent: this._injector,
|
|
26
26
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
let contentRef;
|
|
28
|
+
try {
|
|
29
|
+
contentRef = createComponent(modal.type, {
|
|
30
|
+
environmentInjector: this._envInjector,
|
|
31
|
+
elementInjector: contentInjector,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
this.modalCount.update((v) => v - 1);
|
|
36
|
+
reject(err);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
31
39
|
// 4. setInput으로 inputs 바인딩
|
|
32
40
|
for (const [key, value] of Object.entries(modal.inputs)) {
|
|
33
41
|
contentRef.setInput(key, value);
|
|
@@ -6,7 +6,7 @@ export function setupCanDeactivate(fn) {
|
|
|
6
6
|
const activatedRoute = inject(ActivatedRoute, { optional: true });
|
|
7
7
|
const elRef = inject(ElementRef);
|
|
8
8
|
if (activatedModal != null) {
|
|
9
|
-
activatedModal.
|
|
9
|
+
activatedModal.canDeactivateFn = fn;
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
12
|
if (activatedRoute) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelectionManager.d.ts","sourceRoot":"","sources":["../../../src/core/selection/useSelectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3E,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE;IAC9C,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,aAAa,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IACnD,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC;CAC1E,GAAG;IACF,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IAClD,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,SAAS,IAAI,IAAI,CAAC;IAClB,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;CAC9B,
|
|
1
|
+
{"version":3,"file":"useSelectionManager.d.ts","sourceRoot":"","sources":["../../../src/core/selection/useSelectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3E,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE;IAC9C,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,aAAa,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IACnD,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC;CAC1E,GAAG;IACF,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IAClD,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,SAAS,IAAI,IAAI,CAAC;IAClB,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;CAC9B,CAwFA"}
|
|
@@ -9,12 +9,13 @@ export function useSelectionManager(options) {
|
|
|
9
9
|
const hasSelectable = computed(() => {
|
|
10
10
|
return options.selectMode() != null;
|
|
11
11
|
}, ...(ngDevMode ? [{ debugName: "hasSelectable" }] : /* istanbul ignore next */ []));
|
|
12
|
+
const selectedItemsSet = computed(() => new Set(options.selectedItems()), ...(ngDevMode ? [{ debugName: "selectedItemsSet" }] : /* istanbul ignore next */ []));
|
|
12
13
|
const isAllSelected = computed(() => {
|
|
13
14
|
const items = selectableItems();
|
|
14
15
|
if (items.length === 0)
|
|
15
16
|
return false;
|
|
16
|
-
const
|
|
17
|
-
return items.every((item) =>
|
|
17
|
+
const set = selectedItemsSet();
|
|
18
|
+
return items.every((item) => set.has(item));
|
|
18
19
|
}, ...(ngDevMode ? [{ debugName: "isAllSelected" }] : /* istanbul ignore next */ []));
|
|
19
20
|
function getSelectable(item) {
|
|
20
21
|
const mode = options.selectMode();
|
|
@@ -73,7 +74,7 @@ export function useSelectionManager(options) {
|
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
76
|
function isSelected(item) {
|
|
76
|
-
return
|
|
77
|
+
return selectedItemsSet().has(item);
|
|
77
78
|
}
|
|
78
79
|
return {
|
|
79
80
|
hasSelectable,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-data-detail.base.d.ts","sourceRoot":"","sources":["../../../src/data/data-detail/sd-data-detail.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,MAAM,EACX,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAO,MAAM,uBAAuB,CAAC;AAMtD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;AAG5E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,8BACsB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,OAAO,CAClE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAI/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAE5B,oBAAoB,CAAC,IAAI,IAAI;IAE7B,QAAQ,CAAC,IAAI,IACT,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,oBAAoB,CAAA;KAAE,CAAC,GAChD;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,oBAAoB,CAAA;KAAE;IAE3C,YAAY,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;IAEnE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;IAIxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAE9D,QAAQ,qCAAoC;IAE5C,SAAS,iDAAa;IACtB,WAAW,6DAAyC;IACpD,WAAW,kDAAiB;IAC5B,KAAK,8CAAe;IACpB,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,4CAAsB;IAE1B,QAAQ,2EAAuD;IAE/D,OAAO,CAAC,aAAa,CAAC,CAAI;;
|
|
1
|
+
{"version":3,"file":"sd-data-detail.base.d.ts","sourceRoot":"","sources":["../../../src/data/data-detail/sd-data-detail.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,MAAM,EACX,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAO,MAAM,uBAAuB,CAAC;AAMtD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;AAG5E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,8BACsB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,OAAO,CAClE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAI/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAE5B,oBAAoB,CAAC,IAAI,IAAI;IAE7B,QAAQ,CAAC,IAAI,IACT,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,oBAAoB,CAAA;KAAE,CAAC,GAChD;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,oBAAoB,CAAA;KAAE;IAE3C,YAAY,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;IAEnE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;IAIxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAE9D,QAAQ,qCAAoC;IAE5C,SAAS,iDAAa;IACtB,WAAW,6DAAyC;IACpD,WAAW,kDAAiB;IAC5B,KAAK,8CAAe;IACpB,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,4CAAsB;IAE1B,QAAQ,2EAAuD;IAE/D,OAAO,CAAC,aAAa,CAAC,CAAI;;IAgC1B,kBAAkB;IAQZ,SAAS;IAYT,OAAO;IASP,cAAc,CAAC,GAAG,EAAE,OAAO;IAqB3B,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE;IAmC3E,OAAO,CAAC,gCAAgC;yCAzJpB,gBAAgB;2CAAhB,gBAAgB;CAmKrC"}
|
|
@@ -23,9 +23,15 @@ export class SdDataDetailBase {
|
|
|
23
23
|
dataInfo = signal(undefined, ...(ngDevMode ? [{ debugName: "dataInfo" }] : /* istanbul ignore next */ []));
|
|
24
24
|
_dataSnapshot;
|
|
25
25
|
constructor() {
|
|
26
|
-
effect(() => {
|
|
26
|
+
effect((onCleanup) => {
|
|
27
27
|
this.prepareRefreshEffect?.();
|
|
28
|
+
let cancelled = false;
|
|
29
|
+
onCleanup(() => {
|
|
30
|
+
cancelled = true;
|
|
31
|
+
});
|
|
28
32
|
queueMicrotask(async () => {
|
|
33
|
+
if (cancelled)
|
|
34
|
+
return;
|
|
29
35
|
if (!this.canUse()) {
|
|
30
36
|
this.initialized.set(true);
|
|
31
37
|
return;
|
|
@@ -24,7 +24,7 @@ export function injectDataSheetExcelManager(options) {
|
|
|
24
24
|
await withBusy(options.busyCount, () => sdToast.try(async () => {
|
|
25
25
|
await uploadExcelFn(file);
|
|
26
26
|
await options.refresh();
|
|
27
|
-
sdToast.success("엑셀 업로드가
|
|
27
|
+
sdToast.success("엑셀 업로드가 완료되었습니다.");
|
|
28
28
|
}, (err) => options.errorMessageFn(err)));
|
|
29
29
|
}
|
|
30
30
|
return { doDownloadExcel, doUploadExcel };
|
|
@@ -25,7 +25,7 @@ export function injectDataSheetModalEditManager(options) {
|
|
|
25
25
|
if (!result)
|
|
26
26
|
return;
|
|
27
27
|
await options.refresh();
|
|
28
|
-
sdToast.success(`${del ? "삭제" : "복구"}
|
|
28
|
+
sdToast.success(`${del ? "삭제" : "복구"}되었습니다.`);
|
|
29
29
|
}, (err) => options.errorMessageFn(err)));
|
|
30
30
|
}
|
|
31
31
|
function doModalConfirm() {
|
|
@@ -29,7 +29,7 @@ export declare abstract class SdDataSheetBase<TFilter extends Record<string, any
|
|
|
29
29
|
private readonly _inlineEditMgr;
|
|
30
30
|
private readonly _modalEditMgr;
|
|
31
31
|
private readonly _excelMgr;
|
|
32
|
-
key: string
|
|
32
|
+
key: string;
|
|
33
33
|
viewType: Signal<import("../..").SdViewType>;
|
|
34
34
|
busyCount: WritableSignal<number>;
|
|
35
35
|
busyMessage: WritableSignal<string | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-data-sheet.base.d.ts","sourceRoot":"","sources":["../../../src/data/data-sheet/sd-data-sheet.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAKhB,KAAK,MAAM,EACX,WAAW,EACX,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAYrF,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;;AAT/B,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAO/B,8BACsB,eAAe,CACnC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,KAAK,EACL,IAAI,SAAS,MAAM,GAAG,MAAM,GAAG,SAAS,CACxC,YAAW,aAAa,CAAC,KAAK,CAAC;IAE/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAEjE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,QAAQ,CAAC,UAAU,IAAI,OAAO;IAE9B,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACtD,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEnE,oBAAoB,CAAC,IAAI,IAAI;IAE7B,QAAQ,CAAC,MAAM,CACb,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC;IAG3E,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,GAAG,SAAS;IAC3E,iBAAiB,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAClD,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;IAClC,MAAM,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO;IAC1E,aAAa,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACpD,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAG9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwD;IACnF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgE;IAC5F,OAAO,CAAC,QAAQ,CAAC,cAAc,CAE7B;IACF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IACF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwD;IAGlF,GAAG,
|
|
1
|
+
{"version":3,"file":"sd-data-sheet.base.d.ts","sourceRoot":"","sources":["../../../src/data/data-sheet/sd-data-sheet.base.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ export class SdDataSheetBase {
|
|
|
21
21
|
_modalEditMgr;
|
|
22
22
|
_excelMgr;
|
|
23
23
|
//-- shared state (D1: class 소유)
|
|
24
|
-
key = reflectComponentType(this.constructor)?.selector;
|
|
24
|
+
key = reflectComponentType(this.constructor)?.selector ?? this.constructor.name;
|
|
25
25
|
viewType = injectViewTypeSignal(() => this);
|
|
26
26
|
busyCount = signal(0, ...(ngDevMode ? [{ debugName: "busyCount" }] : /* istanbul ignore next */ []));
|
|
27
27
|
busyMessage = signal(undefined, ...(ngDevMode ? [{ debugName: "busyMessage" }] : /* istanbul ignore next */ []));
|
|
@@ -39,6 +39,7 @@ export declare class SdSharedDataSelect<TItem extends SharedDataBase<string | nu
|
|
|
39
39
|
getItemSelectable(item: TItem, _index: number, depth: number): boolean;
|
|
40
40
|
getItemVisible(item: TItem, index: number): boolean;
|
|
41
41
|
isIncludeSearchText(item: TItem, _index: number): boolean;
|
|
42
|
+
private readonly _sortedChildrenMap;
|
|
42
43
|
getChildren: (item: SharedDataBase<string | number>) => TItem[];
|
|
43
44
|
onUndefinedClick(): void;
|
|
44
45
|
onModalButtonClick(event: MouseEvent): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-shared-data-select.d.ts","sourceRoot":"","sources":["../../../src/data/shared-data/sd-shared-data-select.ts"],"names":[],"mappings":"AACA,OAAO,EAWL,WAAW,EAIZ,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIjF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAClB,MAAM,8CAA8C,CAAC;;AAKtD,qBAwGa,kBAAkB,CAC7B,KAAK,SAAS,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EAC7C,KAAK,SAAS,MAAM,eAAe,CAAC,KAAK,CAAC,EAC1C,MAAM,SAAS,aAAa,CAAC,GAAG,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IAEnD,KAAK,2GAAoE;IAEzE,KAAK,+CAA6B;IAElC,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,YAAY,qEAAiD;IAC7D,KAAK,qEAAiD;IACtD,MAAM,qEAAiD;IAEvD,IAAI,+DAAwB;IAC5B,UAAU,6CAA4B;IACtC,QAAQ,8CAAgB,KAAK,SAAS,MAAM,aAAa,GAAG,EAAE,KAAK,OAAO,eAAI;IAC9E,cAAc,yDAAkB;IAEhC,KAAK,6EAAsC;IAC3C,SAAS,+FAAoD;IAE7D,WAAW,0DAAmB;IAC9B,8BAA8B,8DAAuB;IACrD,aAAa,6CAAgB,KAAK,SAAS,MAAM,KAAK,OAAO,EAE3D;IACF,eAAe,6CAAgB,KAAK,SAAS,MAAM,KAAK,MAAM,EAE5D;IACF,mBAAmB,0DAAmB;IAEtC,UAAU,0FAGR;IACF,eAAe,gEAEZ;IAEH,UAAU,6DAAyC;IAEnD,cAAc,0CAA+D;IAE7E,YAAY,0CAEV;IAEF,kBAAkB,4FAcf;IAEH,gBAAgB,0CAyBb;IAEH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAsCnC;IAEH,YAAY,wCAKT;;IAgBH,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAMtE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAcnD,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIzD,WAAW,GAAI,MAAM,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"sd-shared-data-select.d.ts","sourceRoot":"","sources":["../../../src/data/shared-data/sd-shared-data-select.ts"],"names":[],"mappings":"AACA,OAAO,EAWL,WAAW,EAIZ,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIjF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAClB,MAAM,8CAA8C,CAAC;;AAKtD,qBAwGa,kBAAkB,CAC7B,KAAK,SAAS,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EAC7C,KAAK,SAAS,MAAM,eAAe,CAAC,KAAK,CAAC,EAC1C,MAAM,SAAS,aAAa,CAAC,GAAG,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IAEnD,KAAK,2GAAoE;IAEzE,KAAK,+CAA6B;IAElC,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,YAAY,qEAAiD;IAC7D,KAAK,qEAAiD;IACtD,MAAM,qEAAiD;IAEvD,IAAI,+DAAwB;IAC5B,UAAU,6CAA4B;IACtC,QAAQ,8CAAgB,KAAK,SAAS,MAAM,aAAa,GAAG,EAAE,KAAK,OAAO,eAAI;IAC9E,cAAc,yDAAkB;IAEhC,KAAK,6EAAsC;IAC3C,SAAS,+FAAoD;IAE7D,WAAW,0DAAmB;IAC9B,8BAA8B,8DAAuB;IACrD,aAAa,6CAAgB,KAAK,SAAS,MAAM,KAAK,OAAO,EAE3D;IACF,eAAe,6CAAgB,KAAK,SAAS,MAAM,KAAK,MAAM,EAE5D;IACF,mBAAmB,0DAAmB;IAEtC,UAAU,0FAGR;IACF,eAAe,gEAEZ;IAEH,UAAU,6DAAyC;IAEnD,cAAc,0CAA+D;IAE7E,YAAY,0CAEV;IAEF,kBAAkB,4FAcf;IAEH,gBAAgB,0CAyBb;IAEH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAsCnC;IAEH,YAAY,wCAKT;;IAgBH,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAMtE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAcnD,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIzD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAqBhC;IAEH,WAAW,GAAI,MAAM,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,KAAK,EAAE,CAK5D;IAEF,gBAAgB,IAAI,IAAI;IAIlB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpD,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9D,SAAS,CAAC,QAAQ,CAAC,YAAY,yXAAgB;IAC/C,SAAS,CAAC,QAAQ,CAAC,UAAU,geAAc;yCA1PhC,kBAAkB;2CAAlB,kBAAkB;CA2P9B"}
|
|
@@ -245,12 +245,16 @@ export class SdSharedDataSelect {
|
|
|
245
245
|
isIncludeSearchText(item, _index) {
|
|
246
246
|
return this._searchTextMatchCache().get(item.__valueKey) ?? false;
|
|
247
247
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
248
|
+
_sortedChildrenMap = computed(() => {
|
|
249
|
+
const parentMap = this.itemByParentKeyMap();
|
|
250
|
+
if (parentMap == null)
|
|
251
|
+
return undefined;
|
|
251
252
|
const orderProp = this.displayOrderKeyProp();
|
|
252
|
-
if (orderProp
|
|
253
|
-
|
|
253
|
+
if (orderProp == null)
|
|
254
|
+
return parentMap;
|
|
255
|
+
const sorted = new Map();
|
|
256
|
+
for (const [key, children] of parentMap) {
|
|
257
|
+
sorted.set(key, [...children].sort((a, b) => {
|
|
254
258
|
const aVal = a[orderProp];
|
|
255
259
|
const bVal = b[orderProp];
|
|
256
260
|
if (aVal < bVal)
|
|
@@ -258,9 +262,13 @@ export class SdSharedDataSelect {
|
|
|
258
262
|
if (aVal > bVal)
|
|
259
263
|
return 1;
|
|
260
264
|
return 0;
|
|
261
|
-
});
|
|
265
|
+
}));
|
|
262
266
|
}
|
|
263
|
-
return
|
|
267
|
+
return sorted;
|
|
268
|
+
}, ...(ngDevMode ? [{ debugName: "_sortedChildrenMap" }] : /* istanbul ignore next */ []));
|
|
269
|
+
getChildren = (item) => {
|
|
270
|
+
return (this._sortedChildrenMap()?.get(item.__valueKey) ??
|
|
271
|
+
[]);
|
|
264
272
|
};
|
|
265
273
|
onUndefinedClick() {
|
|
266
274
|
this.value.set(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectSheetColumnResizing.d.ts","sourceRoot":"","sources":["../../../src/data/sheet/injectSheetColumnResizing.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,WAAW,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACvD,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;QACzC,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;KACjC,CAAC;CACH;;;;yBAsB6B,UAAU,UAAU,gBAAgB,KAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"injectSheetColumnResizing.d.ts","sourceRoot":"","sources":["../../../src/data/sheet/injectSheetColumnResizing.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,WAAW,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACvD,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;QACzC,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;KACjC,CAAC;CACH;;;;yBAsB6B,UAAU,UAAU,gBAAgB,KAAG,IAAI;wBA0C5C,UAAU,UAAU,gBAAgB,KAAG,IAAI;EAmBvE"}
|
|
@@ -15,6 +15,7 @@ export function injectSheetColumnResizing(options) {
|
|
|
15
15
|
options.configResource.set({ ...current, columnRecord });
|
|
16
16
|
}
|
|
17
17
|
function onMousedown(event, colDef) {
|
|
18
|
+
resizingCleanup?.();
|
|
18
19
|
event.preventDefault();
|
|
19
20
|
event.stopPropagation();
|
|
20
21
|
const container = options.domAccessor.getContainer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-state-preset.d.ts","sourceRoot":"","sources":["../../../src/data/state-preset/sd-state-preset.ts"],"names":[],"mappings":";AAmBA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,qBA6Ea,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,GAAG,8CAA4B;IAC/B,KAAK,2CAAgB;IACrB,IAAI,+DAAwB;IAE5B,SAAS,CAAC,QAAQ,CAAC,UAAU,wZAAc;IAC3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,sdAAsB;IAC3D,SAAS,CAAC,QAAQ,CAAC,OAAO,yVAAW;IAErC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAE7B;IAEH,QAAQ,qDAAsD;IAExD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"sd-state-preset.d.ts","sourceRoot":"","sources":["../../../src/data/state-preset/sd-state-preset.ts"],"names":[],"mappings":";AAmBA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,qBA6Ea,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,GAAG,8CAA4B;IAC/B,KAAK,2CAAgB;IACrB,IAAI,+DAAwB;IAE5B,SAAS,CAAC,QAAQ,CAAC,UAAU,wZAAc;IAC3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,sdAAsB;IAC3D,SAAS,CAAC,QAAQ,CAAC,OAAO,yVAAW;IAErC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAE7B;IAEH,QAAQ,qDAAsD;IAExD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAM7C,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IASrC,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;yCA7DjD,aAAa;2CAAb,aAAa;CA6EzB"}
|
|
@@ -58,6 +58,10 @@ export class SdStatePreset {
|
|
|
58
58
|
if (name == null)
|
|
59
59
|
return;
|
|
60
60
|
const currentPresets = this._presets();
|
|
61
|
+
if (currentPresets.some((p) => p.name === name)) {
|
|
62
|
+
this._sdToast.warning("이미 존재하는 프리셋 이름입니다.");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
61
65
|
const newPreset = {
|
|
62
66
|
name,
|
|
63
67
|
state: obj.clone(this.state()),
|
|
@@ -8,9 +8,10 @@ export interface Address {
|
|
|
8
8
|
buildingName: string | undefined;
|
|
9
9
|
}
|
|
10
10
|
export declare class SdAddressSearchModal implements SdModalContentDef<Address>, OnInit {
|
|
11
|
-
contentElRef: import("@angular/core").Signal<ElementRef<HTMLElement
|
|
11
|
+
contentElRef: import("@angular/core").Signal<ElementRef<HTMLElement> | undefined>;
|
|
12
12
|
close: import("@angular/core").OutputEmitterRef<Address>;
|
|
13
13
|
initialized: import("@angular/core").WritableSignal<boolean>;
|
|
14
|
+
errorMessage: import("@angular/core").WritableSignal<string | null>;
|
|
14
15
|
ngOnInit(): void;
|
|
15
16
|
private _initAsync;
|
|
16
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdAddressSearchModal, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-address-search.modal.d.ts","sourceRoot":"","sources":["../../../src/features/address/sd-address-search.modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAKX,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;
|
|
1
|
+
{"version":3,"file":"sd-address-search.modal.d.ts","sourceRoot":"","sources":["../../../src/features/address/sd-address-search.modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAKX,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;AA0B5E,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AA+CD,qBAgBa,oBAAqB,YAAW,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM;IAC7E,YAAY,sEAET;IAEH,KAAK,oDAAqB;IAE1B,WAAW,kDAAiB;IAC5B,YAAY,wDAA+B;IAE3C,QAAQ;YAIM,UAAU;yCAdb,oBAAoB;2CAApB,oBAAoB;CA6DhC"}
|
|
@@ -2,33 +2,73 @@ import { ChangeDetectionStrategy, Component, ElementRef, output, signal, viewChi
|
|
|
2
2
|
import { SdBusyContainer } from "../../core/busy/sd-busy-container";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
const _c0 = ["content"];
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function SdAddressSearchModal_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
6
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
7
|
+
i0.ɵɵtext(1);
|
|
8
|
+
i0.ɵɵelementEnd();
|
|
9
|
+
} if (rf & 2) {
|
|
10
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
11
|
+
i0.ɵɵadvance();
|
|
12
|
+
i0.ɵɵtextInterpolate(ctx_r0.errorMessage());
|
|
13
|
+
} }
|
|
14
|
+
function SdAddressSearchModal_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
15
|
+
i0.ɵɵelement(0, "div", 3, 0);
|
|
16
|
+
} }
|
|
17
|
+
function loadDaumPostcodeScript() {
|
|
18
|
+
const existing = document.getElementById("daum_address");
|
|
19
|
+
if (existing != null) {
|
|
20
|
+
if (typeof daum !== "undefined") {
|
|
21
|
+
return Promise.resolve();
|
|
22
|
+
}
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
existing.addEventListener("load", () => {
|
|
25
|
+
daum.postcode.load(() => {
|
|
26
|
+
resolve();
|
|
27
|
+
});
|
|
28
|
+
}, { once: true });
|
|
29
|
+
existing.addEventListener("error", () => {
|
|
30
|
+
existing.remove();
|
|
31
|
+
reject(new Error("주소 검색 스크립트를 불러올 수 없습니다."));
|
|
32
|
+
}, { once: true });
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
const scriptEl = document.createElement("script");
|
|
37
|
+
scriptEl.src = "//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js";
|
|
38
|
+
scriptEl.setAttribute("id", "daum_address");
|
|
39
|
+
scriptEl.onload = () => {
|
|
40
|
+
daum.postcode.load(() => {
|
|
41
|
+
resolve();
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
scriptEl.onerror = () => {
|
|
45
|
+
scriptEl.remove();
|
|
46
|
+
reject(new Error("주소 검색 스크립트를 불러올 수 없습니다."));
|
|
47
|
+
};
|
|
48
|
+
document.head.appendChild(scriptEl);
|
|
8
49
|
});
|
|
50
|
+
}
|
|
51
|
+
export class SdAddressSearchModal {
|
|
52
|
+
contentElRef = viewChild("content", { ...(ngDevMode ? { debugName: "contentElRef" } : /* istanbul ignore next */ {}), read: ElementRef });
|
|
9
53
|
close = output();
|
|
10
54
|
initialized = signal(false, ...(ngDevMode ? [{ debugName: "initialized" }] : /* istanbul ignore next */ []));
|
|
55
|
+
errorMessage = signal(null, ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
|
|
11
56
|
ngOnInit() {
|
|
12
57
|
void this._initAsync();
|
|
13
58
|
}
|
|
14
59
|
async _initAsync() {
|
|
15
|
-
|
|
16
|
-
await
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
resolve();
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
scriptEl.onerror = () => {
|
|
26
|
-
reject(new Error("주소 검색 스크립트를 불러올 수 없습니다."));
|
|
27
|
-
};
|
|
28
|
-
document.head.appendChild(scriptEl);
|
|
29
|
-
});
|
|
60
|
+
try {
|
|
61
|
+
await loadDaumPostcodeScript();
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
this.errorMessage.set(err instanceof Error ? err.message : String(err));
|
|
65
|
+
this.initialized.set(true);
|
|
66
|
+
return;
|
|
30
67
|
}
|
|
31
|
-
const
|
|
68
|
+
const contentElRef = this.contentElRef();
|
|
69
|
+
if (contentElRef == null)
|
|
70
|
+
return;
|
|
71
|
+
const contentEl = contentElRef.nativeElement;
|
|
32
72
|
new daum.Postcode({
|
|
33
73
|
oncomplete: (data) => {
|
|
34
74
|
const addr = data.userSelectedType === "R" ? data.roadAddress : data.jibunAddress;
|
|
@@ -63,12 +103,14 @@ export class SdAddressSearchModal {
|
|
|
63
103
|
i0.ɵɵviewQuerySignal(ctx.contentElRef, _c0, 5, ElementRef);
|
|
64
104
|
} if (rf & 2) {
|
|
65
105
|
i0.ɵɵqueryAdvance();
|
|
66
|
-
} }, outputs: { close: "close" }, decls: 3, vars:
|
|
106
|
+
} }, outputs: { close: "close" }, decls: 3, vars: 2, consts: [["content", ""], [3, "busy"], [1, "_error"], [2, "min-height", "100px"]], template: function SdAddressSearchModal_Template(rf, ctx) { if (rf & 1) {
|
|
67
107
|
i0.ɵɵelementStart(0, "sd-busy-container", 1);
|
|
68
|
-
i0.ɵɵ
|
|
108
|
+
i0.ɵɵconditionalCreate(1, SdAddressSearchModal_Conditional_1_Template, 2, 1, "div", 2)(2, SdAddressSearchModal_Conditional_2_Template, 2, 0, "div", 3);
|
|
69
109
|
i0.ɵɵelementEnd();
|
|
70
110
|
} if (rf & 2) {
|
|
71
111
|
i0.ɵɵproperty("busy", !ctx.initialized());
|
|
112
|
+
i0.ɵɵadvance();
|
|
113
|
+
i0.ɵɵconditional(ctx.errorMessage() !== null ? 1 : 2);
|
|
72
114
|
} }, dependencies: [SdBusyContainer], encapsulation: 2, changeDetection: 0 });
|
|
73
115
|
}
|
|
74
116
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdAddressSearchModal, [{
|
|
@@ -81,11 +123,15 @@ export class SdAddressSearchModal {
|
|
|
81
123
|
imports: [SdBusyContainer],
|
|
82
124
|
template: `
|
|
83
125
|
<sd-busy-container [busy]="!initialized()">
|
|
84
|
-
|
|
126
|
+
@if (errorMessage() !== null) {
|
|
127
|
+
<div class="_error">{{ errorMessage() }}</div>
|
|
128
|
+
} @else {
|
|
129
|
+
<div #content style="min-height: 100px;"></div>
|
|
130
|
+
}
|
|
85
131
|
</sd-busy-container>
|
|
86
132
|
`,
|
|
87
133
|
}]
|
|
88
134
|
}], null, { contentElRef: [{ type: i0.ViewChild, args: ["content", { ...{
|
|
89
135
|
read: ElementRef,
|
|
90
136
|
}, isSignal: true }] }], close: [{ type: i0.Output, args: ["close"] }] }); })();
|
|
91
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdAddressSearchModal, { className: "SdAddressSearchModal", filePath: "packages/angular/src/features/address/sd-address-search.modal.ts", lineNumber:
|
|
137
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdAddressSearchModal, { className: "SdAddressSearchModal", filePath: "packages/angular/src/features/address/sd-address-search.modal.ts", lineNumber: 105, forbidOrphanRendering: true }); })();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-barcode.d.ts","sourceRoot":"","sources":["../../../src/features/visual/sd-barcode.ts"],"names":[],"mappings":";AAWA,qBAUa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IAEnD,IAAI,mDAAiC;IACrC,KAAK,0DAAmB;IAIxB,SAAS,CAAC,eAAe,+
|
|
1
|
+
{"version":3,"file":"sd-barcode.d.ts","sourceRoot":"","sources":["../../../src/features/visual/sd-barcode.ts"],"names":[],"mappings":";AAWA,qBAUa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IAEnD,IAAI,mDAAiC;IACrC,KAAK,0DAAmB;IAIxB,SAAS,CAAC,eAAe,+EActB;yCAtBQ,SAAS;2CAAT,SAAS;CAuBrB;AAED,MAAM,MAAM,WAAW,GACnB,SAAS,GAAG,WAAW,GAAG,kBAAkB,GAAG,WAAW,GAAG,OAAO,GACpE,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAC/D,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GACpE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,iBAAiB,GACjE,0BAA0B,GAAG,wBAAwB,GAAG,iCAAiC,GACzF,gBAAgB,GAAG,yBAAyB,GAAG,aAAa,GAAG,sBAAsB,GACrF,gBAAgB,GAAG,yBAAyB,GAAG,oBAAoB,GAAG,6BAA6B,GACnG,kBAAkB,GAAG,2BAA2B,GAAG,eAAe,GAAG,YAAY,GACjF,uBAAuB,GAAG,gCAAgC,GAAG,SAAS,GAAG,OAAO,GAChF,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,eAAe,GAAG,eAAe,GACzF,SAAS,GAAG,kBAAkB,GAAG,QAAQ,GAAG,eAAe,GAAG,0BAA0B,GACxF,iBAAiB,GAAG,aAAa,GAAG,YAAY,GAAG,wBAAwB,GAAG,WAAW,GACzF,QAAQ,GAAG,eAAe,GAAG,gBAAgB,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,GAC/F,2BAA2B,GAAG,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,GAC1F,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GACvF,WAAW,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GACnF,aAAa,GAAG,aAAa,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,eAAe,GAC9E,YAAY,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GACpF,QAAQ,GAAG,qBAAqB,GAAG,KAAK,GAAG,wBAAwB,GAAG,WAAW,GACjF,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,gBAAgB,GAAG,WAAW,GAChF,MAAM,GAAG,eAAe,GAAG,MAAM,GAAG,eAAe,CAAC"}
|
|
@@ -13,11 +13,16 @@ export class SdBarcode {
|
|
|
13
13
|
if (text == null || text === "") {
|
|
14
14
|
return "";
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
try {
|
|
17
|
+
const svg = bwipjs.toSVG({
|
|
18
|
+
bcid: this.type(),
|
|
19
|
+
text,
|
|
20
|
+
});
|
|
21
|
+
return this._sanitizer.bypassSecurityTrustHtml(svg);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return "";
|
|
25
|
+
}
|
|
21
26
|
}, ...(ngDevMode ? [{ debugName: "_trustedSvgHtml" }] : /* istanbul ignore next */ []));
|
|
22
27
|
static ɵfac = function SdBarcode_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdBarcode)(); };
|
|
23
28
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdBarcode, selectors: [["sd-barcode"]], inputs: { type: [1, "type"], value: [1, "value"] }, decls: 1, vars: 1, consts: [[3, "innerHTML"]], template: function SdBarcode_Template(rf, ctx) { if (rf & 1) {
|
package/dist/index.d.ts
CHANGED
|
@@ -69,7 +69,7 @@ export { type SdTextfieldTypes, sdTextfieldTypes } from "./controls/input/sd-tex
|
|
|
69
69
|
export { SdTextarea } from "./controls/input/sd-textarea";
|
|
70
70
|
export { SdNumpad } from "./controls/input/sd-numpad";
|
|
71
71
|
export { SdRange } from "./controls/input/sd-range";
|
|
72
|
-
export { SdDateRangePicker } from "./controls/input/sd-date-range
|
|
72
|
+
export { SdDateRangePicker } from "./controls/input/sd-date-range-picker";
|
|
73
73
|
export { SdCheckbox } from "./controls/checkbox/sd-checkbox";
|
|
74
74
|
export { SdSwitch } from "./controls/checkbox/sd-switch";
|
|
75
75
|
export { SdCheckboxGroup } from "./controls/checkbox/sd-checkbox-group";
|
package/dist/index.js
CHANGED
|
@@ -87,7 +87,7 @@ export { sdTextfieldTypes } from "./controls/input/sd-textfield-type-handlers";
|
|
|
87
87
|
export { SdTextarea } from "./controls/input/sd-textarea";
|
|
88
88
|
export { SdNumpad } from "./controls/input/sd-numpad";
|
|
89
89
|
export { SdRange } from "./controls/input/sd-range";
|
|
90
|
-
export { SdDateRangePicker } from "./controls/input/sd-date-range
|
|
90
|
+
export { SdDateRangePicker } from "./controls/input/sd-date-range-picker";
|
|
91
91
|
// controls/checkbox
|
|
92
92
|
export { SdCheckbox } from "./controls/checkbox/sd-checkbox";
|
|
93
93
|
export { SdSwitch } from "./controls/checkbox/sd-switch";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-dock.d.ts","sourceRoot":"","sources":["../../../src/layout/dock/sd-dock.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;;AAE9E,qBAyEa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAElD,OAAO,CAAC,YAAY,CAA2B;IAE/C,GAAG,0DAAmB;IACtB,QAAQ,2EAAqD;IAC7D,SAAS,qEAAiD;IAE1D,IAAI,iDAAa;IAEjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsE;;IAoB9F,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAI/C,YAAY,CAAC,KAAK,EAAE,aAAa;IASjC,oBAAoB,CAAC,KAAK,EAAE,UAAU;yCA7C3B,MAAM;2CAAN,MAAM;
|
|
1
|
+
{"version":3,"file":"sd-dock.d.ts","sourceRoot":"","sources":["../../../src/layout/dock/sd-dock.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;;AAE9E,qBAyEa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAElD,OAAO,CAAC,YAAY,CAA2B;IAE/C,GAAG,0DAAmB;IACtB,QAAQ,2EAAqD;IAC7D,SAAS,qEAAiD;IAE1D,IAAI,iDAAa;IAEjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsE;;IAoB9F,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAI/C,YAAY,CAAC,KAAK,EAAE,aAAa;IASjC,oBAAoB,CAAC,KAAK,EAAE,UAAU;yCA7C3B,MAAM;2CAAN,MAAM;CAiGlB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/angular",
|
|
3
|
-
"version": "14.0.
|
|
3
|
+
"version": "14.0.38",
|
|
4
4
|
"description": "심플리즘 패키지 - Angular",
|
|
5
5
|
"author": "심플리즘",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"@angular/platform-browser": "^21.2.8",
|
|
31
31
|
"@angular/router": "^21.2.8",
|
|
32
32
|
"@angular/service-worker": "^21.2.8",
|
|
33
|
-
"@ng-icons/core": "^33.2.
|
|
34
|
-
"@ng-icons/tabler-icons": "^33.2.
|
|
33
|
+
"@ng-icons/core": "^33.2.1",
|
|
34
|
+
"@ng-icons/tabler-icons": "^33.2.1",
|
|
35
35
|
"@tiptap/core": "^3.22.3",
|
|
36
36
|
"@tiptap/extension-color": "^3.22.3",
|
|
37
37
|
"@tiptap/extension-document": "^3.22.3",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"jspdf": "^4.2.1",
|
|
50
50
|
"rxjs": "^7.8.2",
|
|
51
51
|
"tabbable": "^6.4.0",
|
|
52
|
-
"@simplysm/core-browser": "14.0.
|
|
53
|
-
"@simplysm/core-common": "14.0.
|
|
54
|
-
"@simplysm/service-client": "14.0.
|
|
55
|
-
"@simplysm/service-common": "14.0.
|
|
52
|
+
"@simplysm/core-browser": "14.0.38",
|
|
53
|
+
"@simplysm/core-common": "14.0.38",
|
|
54
|
+
"@simplysm/service-client": "14.0.38",
|
|
55
|
+
"@simplysm/service-common": "14.0.38"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@angular/compiler": "^21.2.8",
|
|
@@ -199,20 +199,20 @@ export class SdDropdown {
|
|
|
199
199
|
|
|
200
200
|
const rect = contentEl.getBoundingClientRect();
|
|
201
201
|
|
|
202
|
-
const
|
|
203
|
-
const
|
|
202
|
+
const shouldPlaceAbove = window.innerHeight < rect.top * 2;
|
|
203
|
+
const shouldPlaceLeft = window.innerWidth < rect.left * 2;
|
|
204
204
|
|
|
205
205
|
const gap = 2;
|
|
206
|
-
const topPos =
|
|
207
|
-
const bottomPos =
|
|
208
|
-
const leftPos =
|
|
209
|
-
const rightPos =
|
|
206
|
+
const topPos = shouldPlaceAbove ? undefined : rect.bottom + gap;
|
|
207
|
+
const bottomPos = shouldPlaceAbove ? window.innerHeight - rect.top : undefined;
|
|
208
|
+
const leftPos = shouldPlaceLeft ? undefined : rect.left;
|
|
209
|
+
const rightPos = shouldPlaceLeft ? window.innerWidth - rect.right : undefined;
|
|
210
210
|
|
|
211
211
|
// Calculate available space for popup
|
|
212
|
-
const availableHeight =
|
|
212
|
+
const availableHeight = shouldPlaceAbove
|
|
213
213
|
? rect.top - gap
|
|
214
214
|
: window.innerHeight - rect.bottom - gap;
|
|
215
|
-
const availableWidth =
|
|
215
|
+
const availableWidth = shouldPlaceLeft ? rect.right : window.innerWidth - rect.left;
|
|
216
216
|
|
|
217
217
|
Object.assign(popupEl.style, {
|
|
218
218
|
top: topPos !== undefined ? topPos + "px" : "",
|
|
@@ -8,5 +8,5 @@ import type { SdModalContentDef } from "./sd-modal.provider";
|
|
|
8
8
|
export class SdActivatedModalProvider<T extends SdModalContentDef<any> = SdModalContentDef<any>> {
|
|
9
9
|
modalComponent = signal<any>(undefined);
|
|
10
10
|
contentComponent = signal<T | undefined>(undefined);
|
|
11
|
-
|
|
11
|
+
canDeactivateFn: () => boolean = () => true;
|
|
12
12
|
}
|
|
@@ -86,7 +86,7 @@ export class SdModalProvider {
|
|
|
86
86
|
modal: SdModalInfo<T>,
|
|
87
87
|
options?: SdModalOptions,
|
|
88
88
|
): Promise<Parameters<T["close"]["emit"]>[0] | undefined> {
|
|
89
|
-
return new Promise<Parameters<T["close"]["emit"]>[0] | undefined>((resolve) => {
|
|
89
|
+
return new Promise<Parameters<T["close"]["emit"]>[0] | undefined>((resolve, reject) => {
|
|
90
90
|
// 1. modalCount 증가
|
|
91
91
|
this.modalCount.update((v) => v + 1);
|
|
92
92
|
|
|
@@ -99,10 +99,17 @@ export class SdModalProvider {
|
|
|
99
99
|
parent: this._injector,
|
|
100
100
|
});
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
let contentRef: ComponentRef<T>;
|
|
103
|
+
try {
|
|
104
|
+
contentRef = createComponent(modal.type, {
|
|
105
|
+
environmentInjector: this._envInjector,
|
|
106
|
+
elementInjector: contentInjector,
|
|
107
|
+
});
|
|
108
|
+
} catch (err) {
|
|
109
|
+
this.modalCount.update((v) => v - 1);
|
|
110
|
+
reject(err);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
106
113
|
|
|
107
114
|
// 4. setInput으로 inputs 바인딩
|
|
108
115
|
for (const [key, value] of Object.entries(modal.inputs as Record<string, unknown>)) {
|
|
@@ -389,7 +389,7 @@ export class SdModal {
|
|
|
389
389
|
}
|
|
390
390
|
|
|
391
391
|
private _requestClose(): void {
|
|
392
|
-
if (this._activatedModal !== null && !this._activatedModal.
|
|
392
|
+
if (this._activatedModal !== null && !this._activatedModal.canDeactivateFn()) {
|
|
393
393
|
return;
|
|
394
394
|
}
|
|
395
395
|
void this._saveConfig();
|
|
@@ -26,11 +26,13 @@ export function useSelectionManager<T>(options: {
|
|
|
26
26
|
return options.selectMode() != null;
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
+
const selectedItemsSet = computed(() => new Set(options.selectedItems()));
|
|
30
|
+
|
|
29
31
|
const isAllSelected = computed(() => {
|
|
30
32
|
const items = selectableItems();
|
|
31
33
|
if (items.length === 0) return false;
|
|
32
|
-
const
|
|
33
|
-
return items.every((item) =>
|
|
34
|
+
const set = selectedItemsSet();
|
|
35
|
+
return items.every((item) => set.has(item));
|
|
34
36
|
});
|
|
35
37
|
|
|
36
38
|
function getSelectable(item: T): true | string | undefined {
|
|
@@ -87,7 +89,7 @@ export function useSelectionManager<T>(options: {
|
|
|
87
89
|
}
|
|
88
90
|
|
|
89
91
|
function isSelected(item: T): boolean {
|
|
90
|
-
return
|
|
92
|
+
return selectedItemsSet().has(item);
|
|
91
93
|
}
|
|
92
94
|
|
|
93
95
|
return {
|
|
@@ -63,10 +63,17 @@ export abstract class SdDataDetailBase<T extends object, R = boolean>
|
|
|
63
63
|
private _dataSnapshot?: T;
|
|
64
64
|
|
|
65
65
|
constructor() {
|
|
66
|
-
effect(() => {
|
|
66
|
+
effect((onCleanup) => {
|
|
67
67
|
this.prepareRefreshEffect?.();
|
|
68
68
|
|
|
69
|
+
let cancelled = false;
|
|
70
|
+
onCleanup(() => {
|
|
71
|
+
cancelled = true;
|
|
72
|
+
});
|
|
73
|
+
|
|
69
74
|
queueMicrotask(async () => {
|
|
75
|
+
if (cancelled) return;
|
|
76
|
+
|
|
70
77
|
if (!this.canUse()) {
|
|
71
78
|
this.initialized.set(true);
|
|
72
79
|
return;
|
|
@@ -46,7 +46,7 @@ export function injectDataSheetExcelManager<TItem>(options: {
|
|
|
46
46
|
async () => {
|
|
47
47
|
await uploadExcelFn(file);
|
|
48
48
|
await options.refresh();
|
|
49
|
-
sdToast.success("엑셀 업로드가
|
|
49
|
+
sdToast.success("엑셀 업로드가 완료되었습니다.");
|
|
50
50
|
},
|
|
51
51
|
(err) => options.errorMessageFn(err),
|
|
52
52
|
),
|
|
@@ -51,7 +51,7 @@ export function injectDataSheetModalEditManager<TItem, TKey>(options: {
|
|
|
51
51
|
if (!result) return;
|
|
52
52
|
|
|
53
53
|
await options.refresh();
|
|
54
|
-
sdToast.success(`${del ? "삭제" : "복구"}
|
|
54
|
+
sdToast.success(`${del ? "삭제" : "복구"}되었습니다.`);
|
|
55
55
|
},
|
|
56
56
|
(err) => options.errorMessageFn(err),
|
|
57
57
|
),
|
|
@@ -84,7 +84,7 @@ export abstract class SdDataSheetBase<
|
|
|
84
84
|
private readonly _excelMgr: ReturnType<typeof injectDataSheetExcelManager<TItem>>;
|
|
85
85
|
|
|
86
86
|
//-- shared state (D1: class 소유)
|
|
87
|
-
key = reflectComponentType(this.constructor as any)?.selector;
|
|
87
|
+
key = reflectComponentType(this.constructor as any)?.selector ?? this.constructor.name;
|
|
88
88
|
|
|
89
89
|
viewType = injectViewTypeSignal(() => this);
|
|
90
90
|
|
|
@@ -321,23 +321,34 @@ export class SdSharedDataSelect<
|
|
|
321
321
|
return this._searchTextMatchCache().get(item.__valueKey) ?? false;
|
|
322
322
|
}
|
|
323
323
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
[];
|
|
324
|
+
private readonly _sortedChildrenMap = computed(() => {
|
|
325
|
+
const parentMap = this.itemByParentKeyMap();
|
|
326
|
+
if (parentMap == null) return undefined;
|
|
328
327
|
|
|
329
328
|
const orderProp = this.displayOrderKeyProp();
|
|
330
|
-
if (orderProp
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
329
|
+
if (orderProp == null) return parentMap;
|
|
330
|
+
|
|
331
|
+
const sorted = new Map<TItem["__valueKey"] | undefined, TItem[]>();
|
|
332
|
+
for (const [key, children] of parentMap) {
|
|
333
|
+
sorted.set(
|
|
334
|
+
key,
|
|
335
|
+
[...children].sort((a, b) => {
|
|
336
|
+
const aVal = (a as any)[orderProp];
|
|
337
|
+
const bVal = (b as any)[orderProp];
|
|
338
|
+
if (aVal < bVal) return -1;
|
|
339
|
+
if (aVal > bVal) return 1;
|
|
340
|
+
return 0;
|
|
341
|
+
}),
|
|
342
|
+
);
|
|
338
343
|
}
|
|
344
|
+
return sorted;
|
|
345
|
+
});
|
|
339
346
|
|
|
340
|
-
|
|
347
|
+
getChildren = (item: SharedDataBase<string | number>): TItem[] => {
|
|
348
|
+
return (
|
|
349
|
+
this._sortedChildrenMap()?.get(item.__valueKey as TItem["__valueKey"]) ??
|
|
350
|
+
[]
|
|
351
|
+
);
|
|
341
352
|
};
|
|
342
353
|
|
|
343
354
|
onUndefinedClick(): void {
|
|
@@ -130,6 +130,12 @@ export class SdStatePreset {
|
|
|
130
130
|
if (name == null) return;
|
|
131
131
|
|
|
132
132
|
const currentPresets = this._presets();
|
|
133
|
+
|
|
134
|
+
if (currentPresets.some((p) => p.name === name)) {
|
|
135
|
+
this._sdToast.warning("이미 존재하는 프리셋 이름입니다.");
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
133
139
|
const newPreset: SdStatePresetDef = {
|
|
134
140
|
name,
|
|
135
141
|
state: obj.clone(this.state()),
|
|
@@ -11,17 +11,19 @@ import type { OnInit } from "@angular/core";
|
|
|
11
11
|
import { SdBusyContainer } from "../../core/busy/sd-busy-container";
|
|
12
12
|
import type { SdModalContentDef } from "../../core/modal/sd-modal.provider";
|
|
13
13
|
|
|
14
|
-
declare const daum:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
14
|
+
declare const daum:
|
|
15
|
+
| {
|
|
16
|
+
postcode: {
|
|
17
|
+
load(callback: () => void): void;
|
|
18
|
+
};
|
|
19
|
+
Postcode: new (options: {
|
|
20
|
+
oncomplete: (data: DaumPostcodeData) => void;
|
|
21
|
+
onresize: (size: { height: number }) => void;
|
|
22
|
+
width: string;
|
|
23
|
+
height: string;
|
|
24
|
+
}) => { embed(el: HTMLElement, options: { autoClose: boolean }): void };
|
|
25
|
+
}
|
|
26
|
+
| undefined;
|
|
25
27
|
|
|
26
28
|
interface DaumPostcodeData {
|
|
27
29
|
zonecode: string;
|
|
@@ -39,6 +41,51 @@ export interface Address {
|
|
|
39
41
|
buildingName: string | undefined;
|
|
40
42
|
}
|
|
41
43
|
|
|
44
|
+
function loadDaumPostcodeScript(): Promise<void> {
|
|
45
|
+
const existing = document.getElementById("daum_address");
|
|
46
|
+
if (existing != null) {
|
|
47
|
+
if (typeof daum !== "undefined") {
|
|
48
|
+
return Promise.resolve();
|
|
49
|
+
}
|
|
50
|
+
return new Promise<void>((resolve, reject) => {
|
|
51
|
+
existing.addEventListener(
|
|
52
|
+
"load",
|
|
53
|
+
() => {
|
|
54
|
+
daum!.postcode.load(() => {
|
|
55
|
+
resolve();
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
{ once: true },
|
|
59
|
+
);
|
|
60
|
+
existing.addEventListener(
|
|
61
|
+
"error",
|
|
62
|
+
() => {
|
|
63
|
+
existing.remove();
|
|
64
|
+
reject(new Error("주소 검색 스크립트를 불러올 수 없습니다."));
|
|
65
|
+
},
|
|
66
|
+
{ once: true },
|
|
67
|
+
);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return new Promise<void>((resolve, reject) => {
|
|
72
|
+
const scriptEl = document.createElement("script");
|
|
73
|
+
scriptEl.src = "//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js";
|
|
74
|
+
scriptEl.setAttribute("id", "daum_address");
|
|
75
|
+
|
|
76
|
+
scriptEl.onload = (): void => {
|
|
77
|
+
daum!.postcode.load(() => {
|
|
78
|
+
resolve();
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
scriptEl.onerror = (): void => {
|
|
82
|
+
scriptEl.remove();
|
|
83
|
+
reject(new Error("주소 검색 스크립트를 불러올 수 없습니다."));
|
|
84
|
+
};
|
|
85
|
+
document.head.appendChild(scriptEl);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
42
89
|
@Component({
|
|
43
90
|
selector: "sd-address-search-modal",
|
|
44
91
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -47,45 +94,42 @@ export interface Address {
|
|
|
47
94
|
imports: [SdBusyContainer],
|
|
48
95
|
template: `
|
|
49
96
|
<sd-busy-container [busy]="!initialized()">
|
|
50
|
-
|
|
97
|
+
@if (errorMessage() !== null) {
|
|
98
|
+
<div class="_error">{{ errorMessage() }}</div>
|
|
99
|
+
} @else {
|
|
100
|
+
<div #content style="min-height: 100px;"></div>
|
|
101
|
+
}
|
|
51
102
|
</sd-busy-container>
|
|
52
103
|
`,
|
|
53
104
|
})
|
|
54
105
|
export class SdAddressSearchModal implements SdModalContentDef<Address>, OnInit {
|
|
55
|
-
contentElRef = viewChild
|
|
106
|
+
contentElRef = viewChild<"content", ElementRef<HTMLElement>>("content", {
|
|
56
107
|
read: ElementRef,
|
|
57
108
|
});
|
|
58
109
|
|
|
59
110
|
close = output<Address>();
|
|
60
111
|
|
|
61
112
|
initialized = signal(false);
|
|
113
|
+
errorMessage = signal<string | null>(null);
|
|
62
114
|
|
|
63
115
|
ngOnInit() {
|
|
64
116
|
void this._initAsync();
|
|
65
117
|
}
|
|
66
118
|
|
|
67
119
|
private async _initAsync() {
|
|
68
|
-
|
|
69
|
-
await
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
scriptEl.onload = (): void => {
|
|
75
|
-
daum.postcode.load(() => {
|
|
76
|
-
resolve();
|
|
77
|
-
});
|
|
78
|
-
};
|
|
79
|
-
scriptEl.onerror = (): void => {
|
|
80
|
-
reject(new Error("주소 검색 스크립트를 불러올 수 없습니다."));
|
|
81
|
-
};
|
|
82
|
-
document.head.appendChild(scriptEl);
|
|
83
|
-
});
|
|
120
|
+
try {
|
|
121
|
+
await loadDaumPostcodeScript();
|
|
122
|
+
} catch (err) {
|
|
123
|
+
this.errorMessage.set(err instanceof Error ? err.message : String(err));
|
|
124
|
+
this.initialized.set(true);
|
|
125
|
+
return;
|
|
84
126
|
}
|
|
85
127
|
|
|
86
|
-
const
|
|
128
|
+
const contentElRef = this.contentElRef();
|
|
129
|
+
if (contentElRef == null) return;
|
|
130
|
+
const contentEl = contentElRef.nativeElement;
|
|
87
131
|
|
|
88
|
-
new daum
|
|
132
|
+
new daum!.Postcode({
|
|
89
133
|
oncomplete: (data: DaumPostcodeData): void => {
|
|
90
134
|
const addr = data.userSelectedType === "R" ? data.roadAddress : data.jibunAddress;
|
|
91
135
|
|
|
@@ -32,11 +32,15 @@ export class SdBarcode {
|
|
|
32
32
|
if (text == null || text === "") {
|
|
33
33
|
return "";
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
try {
|
|
36
|
+
const svg = bwipjs.toSVG({
|
|
37
|
+
bcid: this.type(),
|
|
38
|
+
text,
|
|
39
|
+
});
|
|
40
|
+
return this._sanitizer.bypassSecurityTrustHtml(svg);
|
|
41
|
+
} catch {
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
40
44
|
});
|
|
41
45
|
}
|
|
42
46
|
|
package/src/index.ts
CHANGED
|
@@ -159,7 +159,7 @@ export { type SdTextfieldTypes, sdTextfieldTypes } from "./controls/input/sd-tex
|
|
|
159
159
|
export { SdTextarea } from "./controls/input/sd-textarea";
|
|
160
160
|
export { SdNumpad } from "./controls/input/sd-numpad";
|
|
161
161
|
export { SdRange } from "./controls/input/sd-range";
|
|
162
|
-
export { SdDateRangePicker } from "./controls/input/sd-date-range
|
|
162
|
+
export { SdDateRangePicker } from "./controls/input/sd-date-range-picker";
|
|
163
163
|
|
|
164
164
|
// controls/checkbox
|
|
165
165
|
export { SdCheckbox } from "./controls/checkbox/sd-checkbox";
|
|
File without changes
|