@simplysm/angular 14.0.38 → 14.0.39
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/checkbox/sd-checkbox.d.ts +1 -1
- package/dist/controls/checkbox/sd-checkbox.d.ts.map +1 -1
- package/dist/controls/checkbox/sd-checkbox.js +8 -5
- package/dist/controls/checkbox/sd-switch.d.ts +3 -1
- package/dist/controls/checkbox/sd-switch.d.ts.map +1 -1
- package/dist/controls/checkbox/sd-switch.js +11 -5
- package/dist/controls/input/sd-textfield.d.ts.map +1 -1
- package/dist/controls/input/sd-textfield.js +1 -0
- package/dist/core/error-handler/sd-global-error-handler.plugin.d.ts.map +1 -1
- package/dist/core/error-handler/sd-global-error-handler.plugin.js +7 -2
- package/dist/core/modal/sd-modal.d.ts +2 -3
- package/dist/core/modal/sd-modal.d.ts.map +1 -1
- package/dist/core/modal/sd-modal.js +8 -9
- package/dist/core/modal/sd-modal.provider.d.ts +0 -1
- package/dist/core/modal/sd-modal.provider.d.ts.map +1 -1
- package/dist/core/modal/sd-modal.provider.js +1 -1
- package/dist/core/routing/sd-navigate-window.provider.d.ts.map +1 -1
- package/dist/core/routing/sd-navigate-window.provider.js +3 -1
- package/dist/core/setupModelHook.d.ts.map +1 -1
- package/dist/core/setupModelHook.js +18 -1
- package/dist/core/shared-data/sd-shared-data.provider.d.ts.map +1 -1
- package/dist/core/shared-data/sd-shared-data.provider.js +12 -3
- package/dist/data/data-detail/sd-data-detail.base.d.ts +1 -1
- package/dist/data/data-detail/sd-data-detail.base.d.ts.map +1 -1
- package/dist/data/data-detail/sd-data-detail.base.js +19 -20
- package/dist/data/data-sheet/sd-data-sheet.base.d.ts +0 -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 +4 -12
- package/dist/data/getOrmDataEditToastErrorMessage.d.ts +2 -0
- package/dist/data/getOrmDataEditToastErrorMessage.d.ts.map +1 -0
- package/dist/data/getOrmDataEditToastErrorMessage.js +8 -0
- package/dist/data/permission-table/sd-permission-table.d.ts +1 -1
- package/dist/data/permission-table/sd-permission-table.d.ts.map +1 -1
- package/dist/data/permission-table/sd-permission-table.js +6 -5
- package/dist/features/editor/sd-tiptap-editor.d.ts.map +1 -1
- package/dist/features/editor/sd-tiptap-editor.js +3 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/layout/base-container/sd-base-container.d.ts +1 -0
- package/dist/layout/base-container/sd-base-container.d.ts.map +1 -1
- package/dist/layout/base-container/sd-base-container.js +5 -2
- package/package.json +6 -5
- package/src/controls/checkbox/sd-checkbox.ts +7 -3
- package/src/controls/checkbox/sd-switch.ts +8 -2
- package/src/controls/input/sd-textfield.ts +1 -0
- package/src/core/error-handler/sd-global-error-handler.plugin.ts +6 -2
- package/src/core/modal/sd-modal.provider.ts +1 -2
- package/src/core/modal/sd-modal.ts +5 -5
- package/src/core/routing/sd-navigate-window.provider.ts +3 -1
- package/src/core/setupModelHook.ts +21 -1
- package/src/core/shared-data/sd-shared-data.provider.ts +13 -2
- package/src/data/data-detail/sd-data-detail.base.ts +21 -24
- package/src/data/data-sheet/sd-data-sheet.base.ts +4 -15
- package/src/data/getOrmDataEditToastErrorMessage.ts +10 -0
- package/src/data/permission-table/sd-permission-table.ts +7 -6
- package/src/features/editor/sd-tiptap-editor.ts +2 -0
- package/src/index.ts +3 -0
- package/src/layout/base-container/sd-base-container.ts +4 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Directive,
|
|
3
3
|
effect,
|
|
4
|
+
ErrorHandler,
|
|
4
5
|
inject,
|
|
5
6
|
output,
|
|
6
7
|
signal,
|
|
@@ -15,6 +16,7 @@ import { injectViewTypeSignal } from "../../core/routing/injectViewTypeSignal";
|
|
|
15
16
|
import { withBusy } from "../../core/withBusy";
|
|
16
17
|
import { type SdModalContentDef } from "../../core/modal/sd-modal.provider";
|
|
17
18
|
import { SdToastProvider } from "../../core/toast/sd-toast.provider";
|
|
19
|
+
import { getOrmDataEditToastErrorMessage } from "../getOrmDataEditToastErrorMessage";
|
|
18
20
|
|
|
19
21
|
export interface SdDataDetailDataInfo {
|
|
20
22
|
isNew: boolean;
|
|
@@ -47,6 +49,7 @@ export abstract class SdDataDetailBase<T extends object, R = boolean>
|
|
|
47
49
|
|
|
48
50
|
private readonly _sdToast = inject(SdToastProvider);
|
|
49
51
|
private readonly _sdSharedData = inject(SdSharedDataProvider);
|
|
52
|
+
private readonly _errorHandler = inject(ErrorHandler);
|
|
50
53
|
|
|
51
54
|
viewType = injectViewTypeSignal(() => this);
|
|
52
55
|
|
|
@@ -72,20 +75,24 @@ export abstract class SdDataDetailBase<T extends object, R = boolean>
|
|
|
72
75
|
});
|
|
73
76
|
|
|
74
77
|
queueMicrotask(async () => {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
try {
|
|
79
|
+
if (cancelled) return;
|
|
80
|
+
|
|
81
|
+
if (!this.canUse()) {
|
|
82
|
+
this.initialized.set(true);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
await withBusy(this.busyCount, () =>
|
|
87
|
+
this._sdToast.try(async () => {
|
|
88
|
+
await this._sdSharedData.wait();
|
|
89
|
+
await this.refresh();
|
|
90
|
+
}),
|
|
91
|
+
);
|
|
78
92
|
this.initialized.set(true);
|
|
79
|
-
|
|
93
|
+
} catch (err) {
|
|
94
|
+
this._errorHandler.handleError(err);
|
|
80
95
|
}
|
|
81
|
-
|
|
82
|
-
await withBusy(this.busyCount, () =>
|
|
83
|
-
this._sdToast.try(async () => {
|
|
84
|
-
await this._sdSharedData.wait();
|
|
85
|
-
await this.refresh();
|
|
86
|
-
}),
|
|
87
|
-
);
|
|
88
|
-
this.initialized.set(true);
|
|
89
96
|
});
|
|
90
97
|
});
|
|
91
98
|
|
|
@@ -137,7 +144,7 @@ export abstract class SdDataDetailBase<T extends object, R = boolean>
|
|
|
137
144
|
|
|
138
145
|
this.close.emit(result);
|
|
139
146
|
},
|
|
140
|
-
(err) =>
|
|
147
|
+
(err) => getOrmDataEditToastErrorMessage(err),
|
|
141
148
|
),
|
|
142
149
|
);
|
|
143
150
|
}
|
|
@@ -172,19 +179,9 @@ export abstract class SdDataDetailBase<T extends object, R = boolean>
|
|
|
172
179
|
|
|
173
180
|
await this.refresh();
|
|
174
181
|
},
|
|
175
|
-
(err) =>
|
|
182
|
+
(err) => getOrmDataEditToastErrorMessage(err),
|
|
176
183
|
),
|
|
177
184
|
);
|
|
178
185
|
}
|
|
179
186
|
|
|
180
|
-
private _getOrmDataEditToastErrorMessage(err: unknown) {
|
|
181
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
182
|
-
if (
|
|
183
|
-
message.includes("a parent row: a foreign key constraint") ||
|
|
184
|
-
message.includes("conflicted with the REFERENCE")
|
|
185
|
-
) {
|
|
186
|
-
return "경고! 연결된 작업에 의한 처리 거부. 후속작업 확인 요망";
|
|
187
|
-
}
|
|
188
|
-
return message;
|
|
189
|
-
}
|
|
190
187
|
}
|
|
@@ -25,6 +25,7 @@ import { injectDataSheetRefreshManager } from "./injectDataSheetRefreshManager";
|
|
|
25
25
|
import { injectDataSheetInlineEditManager } from "./injectDataSheetInlineEditManager";
|
|
26
26
|
import { injectDataSheetModalEditManager } from "./injectDataSheetModalEditManager";
|
|
27
27
|
import { injectDataSheetExcelManager } from "./injectDataSheetExcelManager";
|
|
28
|
+
import { getOrmDataEditToastErrorMessage } from "../getOrmDataEditToastErrorMessage";
|
|
28
29
|
|
|
29
30
|
export type {
|
|
30
31
|
SdDataSheetItemPropInfo,
|
|
@@ -197,7 +198,7 @@ export abstract class SdDataSheetBase<
|
|
|
197
198
|
refresh: () => this._refreshMgr.refresh(),
|
|
198
199
|
getNewItemFn: () => this.newItem?.bind(this),
|
|
199
200
|
getSubmitFn: () => this.submit?.bind(this),
|
|
200
|
-
errorMessageFn: (err) =>
|
|
201
|
+
errorMessageFn: (err) => getOrmDataEditToastErrorMessage(err),
|
|
201
202
|
});
|
|
202
203
|
|
|
203
204
|
//-- modal edit composable
|
|
@@ -210,7 +211,7 @@ export abstract class SdDataSheetBase<
|
|
|
210
211
|
refresh: () => this._refreshMgr.refresh(),
|
|
211
212
|
getEditItemFn: () => this.editItem?.bind(this),
|
|
212
213
|
getToggleDeleteItemsFn: () => this.toggleDeleteItems?.bind(this),
|
|
213
|
-
errorMessageFn: (err) =>
|
|
214
|
+
errorMessageFn: (err) => getOrmDataEditToastErrorMessage(err),
|
|
214
215
|
});
|
|
215
216
|
|
|
216
217
|
//-- excel composable
|
|
@@ -220,7 +221,7 @@ export abstract class SdDataSheetBase<
|
|
|
220
221
|
refresh: () => this._refreshMgr.refresh(),
|
|
221
222
|
getDownloadExcelFn: () => this.downloadExcel?.bind(this),
|
|
222
223
|
getUploadExcelFn: () => this.uploadExcel?.bind(this),
|
|
223
|
-
errorMessageFn: (err) =>
|
|
224
|
+
errorMessageFn: (err) => getOrmDataEditToastErrorMessage(err),
|
|
224
225
|
});
|
|
225
226
|
|
|
226
227
|
setupCanDeactivate(() => this.viewType() === "modal" || this.checkIgnoreChanges());
|
|
@@ -290,16 +291,4 @@ export abstract class SdDataSheetBase<
|
|
|
290
291
|
await this._excelMgr.doUploadExcel();
|
|
291
292
|
}
|
|
292
293
|
|
|
293
|
-
//-- private
|
|
294
|
-
|
|
295
|
-
private _getOrmDataEditToastErrorMessage(err: unknown) {
|
|
296
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
297
|
-
if (
|
|
298
|
-
message.includes("a parent row: a foreign key constraint") ||
|
|
299
|
-
message.includes("conflicted with the REFERENCE")
|
|
300
|
-
) {
|
|
301
|
-
return "경고! 연결된 작업에 의한 처리 거부. 후속작업 확인 요망";
|
|
302
|
-
}
|
|
303
|
-
return message;
|
|
304
|
-
}
|
|
305
294
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function getOrmDataEditToastErrorMessage(err: unknown): string {
|
|
2
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
3
|
+
if (
|
|
4
|
+
message.includes("a parent row: a foreign key constraint") ||
|
|
5
|
+
message.includes("conflicted with the REFERENCE")
|
|
6
|
+
) {
|
|
7
|
+
return "경고! 연결된 작업에 의한 처리 거부. 후속작업 확인 요망";
|
|
8
|
+
}
|
|
9
|
+
return message;
|
|
10
|
+
}
|
|
@@ -215,7 +215,7 @@ export class SdPermissionTable<TModule> {
|
|
|
215
215
|
items = input<SdPermission<TModule>[]>([]);
|
|
216
216
|
disabled = input(false, { transform: booleanAttribute });
|
|
217
217
|
|
|
218
|
-
collapsedItems = signal(new Set<
|
|
218
|
+
collapsedItems = signal(new Set<string>());
|
|
219
219
|
|
|
220
220
|
depthLength = computed(() => {
|
|
221
221
|
return this._getDepthLength(this.items(), 0);
|
|
@@ -347,7 +347,7 @@ export class SdPermissionTable<TModule> {
|
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
getIsPermCollapsed(item: SdPermission<TModule>): boolean {
|
|
350
|
-
return this.collapsedItems().has(item);
|
|
350
|
+
return this.collapsedItems().has(item.codeChain.join("."));
|
|
351
351
|
}
|
|
352
352
|
|
|
353
353
|
getAllChildren(item: SdPermission<TModule>): SdPermission<TModule>[] {
|
|
@@ -367,15 +367,16 @@ export class SdPermissionTable<TModule> {
|
|
|
367
367
|
}
|
|
368
368
|
|
|
369
369
|
onPermCollapseToggle(item: SdPermission<TModule>) {
|
|
370
|
+
const key = item.codeChain.join(".");
|
|
370
371
|
this.collapsedItems.update((v) => {
|
|
371
372
|
const r = new Set(v);
|
|
372
|
-
if (r.has(
|
|
373
|
-
r.delete(
|
|
373
|
+
if (r.has(key)) {
|
|
374
|
+
r.delete(key);
|
|
374
375
|
} else {
|
|
375
|
-
r.add(
|
|
376
|
+
r.add(key);
|
|
376
377
|
const allChildren = this.getAllChildren(item);
|
|
377
378
|
for (const allChild of allChildren) {
|
|
378
|
-
r.add(allChild);
|
|
379
|
+
r.add(allChild.codeChain.join("."));
|
|
379
380
|
}
|
|
380
381
|
}
|
|
381
382
|
return r;
|
|
@@ -22,6 +22,7 @@ import Color from "@tiptap/extension-color";
|
|
|
22
22
|
import Highlight from "@tiptap/extension-highlight";
|
|
23
23
|
import TextAlign from "@tiptap/extension-text-align";
|
|
24
24
|
import Image from "@tiptap/extension-image";
|
|
25
|
+
import Underline from "@tiptap/extension-underline";
|
|
25
26
|
import Placeholder from "@tiptap/extension-placeholder";
|
|
26
27
|
import { useTiptapToolbar } from "./useTiptapToolbar";
|
|
27
28
|
|
|
@@ -32,6 +33,7 @@ const DEFAULT_EXTENSIONS: AnyExtension[] = [
|
|
|
32
33
|
Highlight.configure({ multicolor: true }),
|
|
33
34
|
TextAlign.configure({ types: ["heading", "paragraph"] }),
|
|
34
35
|
Image.configure({ inline: false, allowBase64: true }),
|
|
36
|
+
Underline,
|
|
35
37
|
];
|
|
36
38
|
|
|
37
39
|
@Component({
|
package/src/index.ts
CHANGED
|
@@ -252,6 +252,9 @@ export {
|
|
|
252
252
|
type SdDataDetailDataInfo,
|
|
253
253
|
} from "./data/data-detail/sd-data-detail.base";
|
|
254
254
|
|
|
255
|
+
// data/utils
|
|
256
|
+
export { getOrmDataEditToastErrorMessage } from "./data/getOrmDataEditToastErrorMessage";
|
|
257
|
+
|
|
255
258
|
// data/data-select-button
|
|
256
259
|
export { SdDataSelectButton } from "./data/data-select-button/sd-data-select-button";
|
|
257
260
|
export { SdDataSelectButtonBase } from "./data/data-select-button/sd-data-select-button.base";
|
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
type SdViewType,
|
|
23
23
|
} from "../../core/routing/injectViewTypeSignal";
|
|
24
24
|
import { injectParent } from "../../core/injectParent";
|
|
25
|
+
import { SdSystemLogProvider } from "../../core/config/sd-system-log.provider";
|
|
25
26
|
import { NgIcon } from "@ng-icons/core";
|
|
26
27
|
import { tablerAlertTriangle } from "@ng-icons/tabler-icons";
|
|
27
28
|
|
|
@@ -81,6 +82,7 @@ import { tablerAlertTriangle } from "@ng-icons/tabler-icons";
|
|
|
81
82
|
export class SdBaseContainer {
|
|
82
83
|
private readonly _sdActivatedModal = inject(SdActivatedModalProvider, { optional: true });
|
|
83
84
|
private readonly _sdAppStructure = inject(SdAppStructureProvider);
|
|
85
|
+
private readonly _systemLog = inject(SdSystemLogProvider);
|
|
84
86
|
|
|
85
87
|
private readonly _parent = injectParent();
|
|
86
88
|
|
|
@@ -104,7 +106,8 @@ export class SdBaseContainer {
|
|
|
104
106
|
this._sdActivatedModal?.modalComponent()?.title() ??
|
|
105
107
|
this._sdAppStructure.getTitleByFullCode(this._currPageCode?.() ?? this._fullPageCode())
|
|
106
108
|
);
|
|
107
|
-
} catch {
|
|
109
|
+
} catch (err) {
|
|
110
|
+
void this._systemLog.writeAsync("warn", `modalOrPageTitle 계산 중 에러: ${String(err)}`);
|
|
108
111
|
return "";
|
|
109
112
|
}
|
|
110
113
|
});
|