@simplysm/angular 14.0.47 → 14.0.48

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.
Files changed (128) hide show
  1. package/README.md +468 -0
  2. package/dist/controls/dropdown/sd-dropdown-popup.d.ts +1 -0
  3. package/dist/controls/dropdown/sd-dropdown-popup.d.ts.map +1 -1
  4. package/dist/controls/dropdown/sd-dropdown-popup.js +6 -1
  5. package/dist/controls/dropdown/sd-dropdown.d.ts.map +1 -1
  6. package/dist/controls/dropdown/sd-dropdown.js +6 -2
  7. package/dist/controls/select/sd-select.d.ts.map +1 -1
  8. package/dist/controls/select/sd-select.js +12 -34
  9. package/dist/core/routing/injectViewTypeSignal.d.ts +1 -1
  10. package/dist/core/routing/injectViewTypeSignal.d.ts.map +1 -1
  11. package/dist/core/routing/injectViewTypeSignal.js +15 -7
  12. package/dist/core/selection/useSelectionManager.d.ts +1 -0
  13. package/dist/core/selection/useSelectionManager.d.ts.map +1 -1
  14. package/dist/core/selection/useSelectionManager.js +54 -14
  15. package/dist/data/shared-data/sd-shared-data-select-button.d.ts +11 -5
  16. package/dist/data/shared-data/sd-shared-data-select-button.d.ts.map +1 -1
  17. package/dist/data/shared-data/sd-shared-data-select-button.js +68 -29
  18. package/dist/data/sheet/sd-sheet.d.ts +4 -1
  19. package/dist/data/sheet/sd-sheet.d.ts.map +1 -1
  20. package/dist/data/sheet/sd-sheet.js +23 -4
  21. package/dist/index.d.ts +0 -13
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +0 -17
  24. package/docs/bootstrap.md +38 -0
  25. package/docs/directives.md +236 -0
  26. package/docs/features.md +169 -0
  27. package/docs/pipes.md +32 -0
  28. package/docs/plugins.md +37 -0
  29. package/docs/provider-types.md +283 -0
  30. package/docs/providers.md +379 -0
  31. package/docs/recipes/crud-detail.md +860 -0
  32. package/docs/recipes/crud-list.md +779 -0
  33. package/docs/recipes/data-select-button.md +319 -0
  34. package/docs/recipes/page-modal-container.md +178 -0
  35. package/docs/styling.md +222 -0
  36. package/docs/type-utilities.md +250 -0
  37. package/docs/ui-data.md +333 -0
  38. package/docs/ui-form.md +502 -0
  39. package/docs/ui-layout.md +140 -0
  40. package/docs/ui-navigation.md +273 -0
  41. package/docs/ui-overlay.md +157 -0
  42. package/docs/ui-visual.md +127 -0
  43. package/docs/utils.md +244 -0
  44. package/package.json +19 -18
  45. package/src/controls/dropdown/sd-dropdown-popup.ts +6 -2
  46. package/src/controls/dropdown/sd-dropdown.ts +3 -4
  47. package/src/controls/select/sd-select.ts +6 -30
  48. package/src/core/routing/injectViewTypeSignal.ts +17 -10
  49. package/src/core/selection/useSelectionManager.ts +62 -12
  50. package/src/data/shared-data/sd-shared-data-select-button.ts +49 -14
  51. package/src/data/sheet/sd-sheet.ts +21 -0
  52. package/src/index.ts +0 -29
  53. package/dist/core/commons.d.ts +0 -2
  54. package/dist/core/commons.d.ts.map +0 -1
  55. package/dist/core/commons.js +0 -4
  56. package/dist/core/injectParent.d.ts +0 -7
  57. package/dist/core/injectParent.d.ts.map +0 -1
  58. package/dist/core/injectParent.js +0 -30
  59. package/dist/core/selection/setupCumulateSelectedKeys.d.ts +0 -9
  60. package/dist/core/selection/setupCumulateSelectedKeys.d.ts.map +0 -1
  61. package/dist/core/selection/setupCumulateSelectedKeys.js +0 -27
  62. package/dist/core/withBusy.d.ts +0 -3
  63. package/dist/core/withBusy.d.ts.map +0 -1
  64. package/dist/core/withBusy.js +0 -9
  65. package/dist/data/data-detail/sd-data-detail.base.d.ts +0 -51
  66. package/dist/data/data-detail/sd-data-detail.base.d.ts.map +0 -1
  67. package/dist/data/data-detail/sd-data-detail.base.js +0 -127
  68. package/dist/data/data-detail/sd-data-detail.d.ts +0 -30
  69. package/dist/data/data-detail/sd-data-detail.d.ts.map +0 -1
  70. package/dist/data/data-detail/sd-data-detail.js +0 -495
  71. package/dist/data/data-select-button/sd-data-select-button.base.d.ts +0 -24
  72. package/dist/data/data-select-button/sd-data-select-button.base.d.ts.map +0 -1
  73. package/dist/data/data-select-button/sd-data-select-button.base.js +0 -68
  74. package/dist/data/data-select-button/sd-data-select-button.d.ts +0 -15
  75. package/dist/data/data-select-button/sd-data-select-button.d.ts.map +0 -1
  76. package/dist/data/data-select-button/sd-data-select-button.js +0 -152
  77. package/dist/data/data-sheet/injectDataSheetExcelManager.d.ts +0 -14
  78. package/dist/data/data-sheet/injectDataSheetExcelManager.d.ts.map +0 -1
  79. package/dist/data/data-sheet/injectDataSheetExcelManager.js +0 -31
  80. package/dist/data/data-sheet/injectDataSheetInlineEditManager.d.ts +0 -26
  81. package/dist/data/data-sheet/injectDataSheetInlineEditManager.d.ts.map +0 -1
  82. package/dist/data/data-sheet/injectDataSheetInlineEditManager.js +0 -54
  83. package/dist/data/data-sheet/injectDataSheetModalEditManager.d.ts +0 -19
  84. package/dist/data/data-sheet/injectDataSheetModalEditManager.d.ts.map +0 -1
  85. package/dist/data/data-sheet/injectDataSheetModalEditManager.js +0 -44
  86. package/dist/data/data-sheet/injectDataSheetRefreshManager.d.ts +0 -25
  87. package/dist/data/data-sheet/injectDataSheetRefreshManager.d.ts.map +0 -1
  88. package/dist/data/data-sheet/injectDataSheetRefreshManager.js +0 -50
  89. package/dist/data/data-sheet/sd-data-sheet-column.d.ts +0 -8
  90. package/dist/data/data-sheet/sd-data-sheet-column.d.ts.map +0 -1
  91. package/dist/data/data-sheet/sd-data-sheet-column.js +0 -15
  92. package/dist/data/data-sheet/sd-data-sheet.base.d.ts +0 -75
  93. package/dist/data/data-sheet/sd-data-sheet.base.d.ts.map +0 -1
  94. package/dist/data/data-sheet/sd-data-sheet.base.js +0 -188
  95. package/dist/data/data-sheet/sd-data-sheet.d.ts +0 -49
  96. package/dist/data/data-sheet/sd-data-sheet.d.ts.map +0 -1
  97. package/dist/data/data-sheet/sd-data-sheet.js +0 -968
  98. package/dist/data/data-sheet/sd-data-sheet.types.d.ts +0 -17
  99. package/dist/data/data-sheet/sd-data-sheet.types.d.ts.map +0 -1
  100. package/dist/data/data-sheet/sd-data-sheet.types.js +0 -1
  101. package/dist/data/data-sheet/setupCloserWhenSingleSelectionChange.d.ts +0 -9
  102. package/dist/data/data-sheet/setupCloserWhenSingleSelectionChange.d.ts.map +0 -1
  103. package/dist/data/data-sheet/setupCloserWhenSingleSelectionChange.js +0 -20
  104. package/dist/data/data-sheet/useDataSheetFilterManager.d.ts +0 -13
  105. package/dist/data/data-sheet/useDataSheetFilterManager.d.ts.map +0 -1
  106. package/dist/data/data-sheet/useDataSheetFilterManager.js +0 -19
  107. package/dist/layout/base-container/sd-base-container.d.ts +0 -27
  108. package/dist/layout/base-container/sd-base-container.d.ts.map +0 -1
  109. package/dist/layout/base-container/sd-base-container.js +0 -193
  110. package/src/core/commons.ts +0 -4
  111. package/src/core/injectParent.ts +0 -45
  112. package/src/core/selection/setupCumulateSelectedKeys.ts +0 -38
  113. package/src/core/withBusy.ts +0 -13
  114. package/src/data/data-detail/sd-data-detail.base.ts +0 -187
  115. package/src/data/data-detail/sd-data-detail.ts +0 -237
  116. package/src/data/data-select-button/sd-data-select-button.base.ts +0 -104
  117. package/src/data/data-select-button/sd-data-select-button.ts +0 -105
  118. package/src/data/data-sheet/injectDataSheetExcelManager.ts +0 -57
  119. package/src/data/data-sheet/injectDataSheetInlineEditManager.ts +0 -89
  120. package/src/data/data-sheet/injectDataSheetModalEditManager.ts +0 -76
  121. package/src/data/data-sheet/injectDataSheetRefreshManager.ts +0 -90
  122. package/src/data/data-sheet/sd-data-sheet-column.ts +0 -10
  123. package/src/data/data-sheet/sd-data-sheet.base.ts +0 -294
  124. package/src/data/data-sheet/sd-data-sheet.ts +0 -479
  125. package/src/data/data-sheet/sd-data-sheet.types.ts +0 -18
  126. package/src/data/data-sheet/setupCloserWhenSingleSelectionChange.ts +0 -29
  127. package/src/data/data-sheet/useDataSheetFilterManager.ts +0 -30
  128. package/src/layout/base-container/sd-base-container.ts +0 -121
@@ -1,90 +0,0 @@
1
- import { type Signal, type WritableSignal, effect, inject } from "@angular/core";
2
- import { type ArrayOneWayDiffResult, obj } from "@simplysm/core-common";
3
- import { SdToastProvider } from "../../core/toast/sd-toast.provider";
4
- import { SdSharedDataProvider } from "../../core/shared-data/sd-shared-data.provider";
5
- import { withBusy } from "../../core/withBusy";
6
- import type { SdDataSheetSearchResult } from "./sd-data-sheet.types";
7
-
8
- export function injectDataSheetRefreshManager<
9
- TItem,
10
- TKey extends string | number | undefined,
11
- >(options: {
12
- busyCount: WritableSignal<number>;
13
- initialized: WritableSignal<boolean>;
14
- canUse: () => boolean;
15
- items: WritableSignal<TItem[]>;
16
- selectedItems: WritableSignal<TItem[]>;
17
- pageLength: WritableSignal<number>;
18
- summaryData: WritableSignal<Partial<TItem>>;
19
- page: Signal<number>;
20
- lastFilter: Signal<unknown>;
21
- sortingDefs: Signal<unknown[]>;
22
- getItemInfoFn: (item: TItem) => { key: TKey };
23
- search: (
24
- usePagination: boolean,
25
- ) => Promise<SdDataSheetSearchResult<TItem>> | SdDataSheetSearchResult<TItem>;
26
- prepareRefreshEffect?: () => void;
27
- getDiffsExcludes: () => string[] | undefined;
28
- }) {
29
- const sdToast = inject(SdToastProvider);
30
- const sdSharedData = inject(SdSharedDataProvider);
31
- let itemsSnapshot: TItem[] = [];
32
-
33
- async function refresh(): Promise<void> {
34
- const result = await options.search(true);
35
- options.items.set(result.items);
36
- itemsSnapshot = obj.clone(result.items);
37
-
38
- options.pageLength.set(result.pageLength ?? 0);
39
- options.summaryData.set(result.summary ?? {});
40
-
41
- const selectedKeySet = new Set(
42
- options.selectedItems().map((sel) => options.getItemInfoFn(sel).key),
43
- );
44
- options.selectedItems.set(
45
- options.items().filter((item) => selectedKeySet.has(options.getItemInfoFn(item).key)),
46
- );
47
- }
48
-
49
- function getDiffs(): ArrayOneWayDiffResult<TItem>[] {
50
- const diffsExcludes = options.getDiffsExcludes();
51
- return options
52
- .items()
53
- .oneWayDiffs(
54
- itemsSnapshot,
55
- (item) => options.getItemInfoFn(item).key,
56
- diffsExcludes ? { excludes: diffsExcludes } : undefined,
57
- )
58
- .filter((d) => d.type !== "same");
59
- }
60
-
61
- effect((onCleanup) => {
62
- options.page();
63
- options.lastFilter();
64
- options.sortingDefs();
65
- options.prepareRefreshEffect?.();
66
-
67
- let cancelled = false;
68
- onCleanup(() => {
69
- cancelled = true;
70
- });
71
-
72
- queueMicrotask(async () => {
73
- if (cancelled) return;
74
- if (!options.canUse()) {
75
- options.initialized.set(true);
76
- return;
77
- }
78
-
79
- await withBusy(options.busyCount, () =>
80
- sdToast.try(async () => {
81
- await sdSharedData.wait();
82
- await refresh();
83
- }),
84
- );
85
- options.initialized.set(true);
86
- });
87
- });
88
-
89
- return { refresh, getDiffs };
90
- }
@@ -1,10 +0,0 @@
1
- import { booleanAttribute, Directive, input } from "@angular/core";
2
- import { SdSheetColumn } from "../sheet/sd-sheet-column";
3
-
4
- @Directive({
5
- selector: "sd-data-sheet-column",
6
- standalone: true,
7
- })
8
- export class SdDataSheetColumn extends SdSheetColumn {
9
- edit = input(false, { transform: booleanAttribute });
10
- }
@@ -1,294 +0,0 @@
1
- import {
2
- computed,
3
- Directive,
4
- type InputSignal,
5
- model,
6
- output,
7
- reflectComponentType,
8
- signal,
9
- type Signal,
10
- TemplateRef,
11
- type WritableSignal,
12
- } from "@angular/core";
13
- import type { ArrayOneWayDiffResult } from "@simplysm/core-common";
14
- import { mark } from "../../core/mark";
15
- import type { SortingDef } from "../sheet/sd-sheet";
16
- import { injectViewTypeSignal } from "../../core/routing/injectViewTypeSignal";
17
- import { setupCumulateSelectedKeys } from "../../core/selection/setupCumulateSelectedKeys";
18
- import { setupCloserWhenSingleSelectionChange } from "./setupCloserWhenSingleSelectionChange";
19
- import { setupCanDeactivate } from "../../core/routing/setupCanDeactivate";
20
- import { TXT_CHANGE_IGNORE_CONFIRM } from "../../core/commons";
21
- import type { SdSelectModal } from "../../controls/button/sd-modal-select-button";
22
- import type { SelectModalOutputResult } from "../../core/select-modal-output-result";
23
- import { useDataSheetFilterManager } from "./useDataSheetFilterManager";
24
- import { injectDataSheetRefreshManager } from "./injectDataSheetRefreshManager";
25
- import { injectDataSheetInlineEditManager } from "./injectDataSheetInlineEditManager";
26
- import { injectDataSheetModalEditManager } from "./injectDataSheetModalEditManager";
27
- import { injectDataSheetExcelManager } from "./injectDataSheetExcelManager";
28
- import { getOrmDataEditToastErrorMessage } from "../getOrmDataEditToastErrorMessage";
29
-
30
- export type {
31
- SdDataSheetItemPropInfo,
32
- SdDataSheetItemInfo,
33
- SdDataSheetSearchResult,
34
- } from "./sd-data-sheet.types";
35
- import type {
36
- SdDataSheetItemPropInfo,
37
- SdDataSheetItemInfo,
38
- SdDataSheetSearchResult,
39
- } from "./sd-data-sheet.types";
40
-
41
- @Directive()
42
- export abstract class SdDataSheetBase<
43
- TFilter extends Record<string, any>,
44
- TItem,
45
- TKey extends string | number | undefined,
46
- > implements SdSelectModal<TItem> {
47
- //-- abstract
48
- abstract canUse: Signal<boolean>;
49
- abstract canEdit: Signal<boolean>;
50
- hideTool?: Signal<boolean>;
51
-
52
- abstract editMode: "inline" | "modal" | undefined;
53
- abstract selectMode: InputSignal<"single" | "multi" | undefined>;
54
-
55
- diffsExcludes?: string[];
56
-
57
- abstract bindFilter(): TFilter;
58
-
59
- abstract itemPropInfo: SdDataSheetItemPropInfo<TItem>;
60
- abstract getItemInfoFn: (item: TItem) => SdDataSheetItemInfo<TKey>;
61
-
62
- prepareRefreshEffect?(): void;
63
-
64
- abstract search(
65
- usePagination: boolean,
66
- ): Promise<SdDataSheetSearchResult<TItem>> | SdDataSheetSearchResult<TItem>;
67
-
68
- //-- optional methods (consuming code implements)
69
- editItem?(item?: TItem): Promise<boolean | undefined> | boolean | undefined;
70
- toggleDeleteItems?(del: boolean): Promise<boolean>;
71
- newItem?(): Promise<TItem> | TItem;
72
- submit?(diffs: ArrayOneWayDiffResult<TItem>[]): Promise<boolean> | boolean;
73
- downloadExcel?(items: TItem[]): Promise<void> | void;
74
- uploadExcel?(file: File): Promise<void> | void;
75
-
76
- //-- composable instances
77
- private readonly _filterMgr: ReturnType<typeof useDataSheetFilterManager<TFilter>>;
78
- private readonly _refreshMgr: ReturnType<typeof injectDataSheetRefreshManager<TItem, TKey>>;
79
- private readonly _inlineEditMgr: ReturnType<
80
- typeof injectDataSheetInlineEditManager<TItem, TKey>
81
- >;
82
- private readonly _modalEditMgr: ReturnType<
83
- typeof injectDataSheetModalEditManager<TItem, TKey>
84
- >;
85
- private readonly _excelMgr: ReturnType<typeof injectDataSheetExcelManager<TItem>>;
86
-
87
- //-- shared state (D1: class 소유)
88
- key = reflectComponentType(this.constructor as any)?.selector ?? this.constructor.name;
89
-
90
- viewType = injectViewTypeSignal(() => this);
91
-
92
- busyCount = signal(0);
93
- busyMessage = signal<string | undefined>(undefined);
94
- initialized = signal(false);
95
- close = output<SelectModalOutputResult<TItem>>();
96
- submitted = output<boolean>();
97
- selectedItemKeys = model<TKey[]>([]);
98
- actionTplRef?: TemplateRef<any>;
99
-
100
- autoSelect = computed<"click" | undefined>(() =>
101
- (!this.canEdit() || this.editMode === "modal") && this.selectMode() === "single"
102
- ? "click"
103
- : undefined,
104
- );
105
-
106
- items = signal<TItem[]>([]);
107
- summaryData = signal<Partial<TItem>>({});
108
- selectedItems = signal<TItem[]>([]);
109
-
110
- trackByFn = (item: TItem): TKey | TItem => this.getItemInfoFn(item).key ?? item;
111
-
112
- page = signal(0);
113
- pageLength = signal(0);
114
- sortingDefs = signal<SortingDef[]>([]);
115
-
116
- //-- filter state (composable에서 생성, 재할당)
117
- filter!: WritableSignal<TFilter>;
118
- lastFilter!: WritableSignal<TFilter>;
119
-
120
- //-- computed
121
- isSelectedItemsHasDeleted = computed(() =>
122
- this.selectedItems().some(
123
- (item) =>
124
- this.itemPropInfo.isDeleted != null &&
125
- (item[this.itemPropInfo.isDeleted] as boolean),
126
- ),
127
- );
128
-
129
- isSelectedItemsHasNotDeleted = computed(() =>
130
- this.selectedItems().some(
131
- (item) =>
132
- this.itemPropInfo.isDeleted == null ||
133
- !(item[this.itemPropInfo.isDeleted] as boolean),
134
- ),
135
- );
136
-
137
- getItemCellStyleFn = (item: TItem): string | undefined =>
138
- this.itemPropInfo.isDeleted != null && (item[this.itemPropInfo.isDeleted] as boolean)
139
- ? "text-decoration: line-through;"
140
- : undefined;
141
-
142
- getItemSelectableFn = (item: TItem): boolean => this.getItemInfoFn(item).canSelect;
143
-
144
- constructor() {
145
- setupCumulateSelectedKeys({
146
- items: this.items,
147
- selectedItems: this.selectedItems,
148
- selectedItemKeys: this.selectedItemKeys,
149
- selectMode: () => this.selectMode(),
150
- keySelectorFn: (item) => this.getItemInfoFn(item).key,
151
- });
152
-
153
- setupCloserWhenSingleSelectionChange({
154
- selectedItemKeys: this.selectedItemKeys,
155
- selectedItems: this.selectedItems,
156
- selectMode: () => this.selectMode(),
157
- close: this.close,
158
- });
159
-
160
- //-- filter composable
161
- this._filterMgr = useDataSheetFilterManager({
162
- bindFilter: () => this.bindFilter(),
163
- busyCount: this.busyCount,
164
- canUse: () => this.canUse(),
165
- page: this.page,
166
- checkIgnoreChanges: () => this.checkIgnoreChanges(),
167
- });
168
- this.filter = this._filterMgr.filter;
169
- this.lastFilter = this._filterMgr.lastFilter;
170
-
171
- //-- refresh composable
172
- this._refreshMgr = injectDataSheetRefreshManager({
173
- busyCount: this.busyCount,
174
- initialized: this.initialized,
175
- canUse: () => this.canUse(),
176
- items: this.items,
177
- selectedItems: this.selectedItems,
178
- pageLength: this.pageLength,
179
- summaryData: this.summaryData,
180
- page: this.page,
181
- lastFilter: this.lastFilter,
182
- sortingDefs: this.sortingDefs,
183
- getItemInfoFn: (item) => this.getItemInfoFn(item),
184
- search: (p) => this.search(p),
185
- prepareRefreshEffect: () => this.prepareRefreshEffect?.(),
186
- getDiffsExcludes: () => this.diffsExcludes,
187
- });
188
-
189
- //-- inline edit composable
190
- this._inlineEditMgr = injectDataSheetInlineEditManager({
191
- busyCount: this.busyCount,
192
- canEdit: () => this.canEdit(),
193
- items: this.items,
194
- submitted: this.submitted,
195
- itemPropInfo: () => this.itemPropInfo,
196
- getItemInfoFn: (item) => this.getItemInfoFn(item),
197
- getDiffs: () => this._refreshMgr.getDiffs(),
198
- refresh: () => this._refreshMgr.refresh(),
199
- getNewItemFn: () => this.newItem?.bind(this),
200
- getSubmitFn: () => this.submit?.bind(this),
201
- errorMessageFn: (err) => getOrmDataEditToastErrorMessage(err),
202
- });
203
-
204
- //-- modal edit composable
205
- this._modalEditMgr = injectDataSheetModalEditManager({
206
- busyCount: this.busyCount,
207
- canEdit: () => this.canEdit(),
208
- selectedItemKeys: this.selectedItemKeys,
209
- selectedItems: this.selectedItems,
210
- close: this.close,
211
- refresh: () => this._refreshMgr.refresh(),
212
- getEditItemFn: () => this.editItem?.bind(this),
213
- getToggleDeleteItemsFn: () => this.toggleDeleteItems?.bind(this),
214
- errorMessageFn: (err) => getOrmDataEditToastErrorMessage(err),
215
- });
216
-
217
- //-- excel composable
218
- this._excelMgr = injectDataSheetExcelManager({
219
- busyCount: this.busyCount,
220
- search: (p) => this.search(p),
221
- refresh: () => this._refreshMgr.refresh(),
222
- getDownloadExcelFn: () => this.downloadExcel?.bind(this),
223
- getUploadExcelFn: () => this.uploadExcel?.bind(this),
224
- errorMessageFn: (err) => getOrmDataEditToastErrorMessage(err),
225
- });
226
-
227
- setupCanDeactivate(() => this.viewType() === "modal" || this.checkIgnoreChanges());
228
- }
229
-
230
- //-- D2: class 메서드 (커스터마이징 가능)
231
-
232
- checkIgnoreChanges() {
233
- return this._refreshMgr.getDiffs().length === 0 || confirm(TXT_CHANGE_IGNORE_CONFIRM);
234
- }
235
-
236
- doFilterSubmit() {
237
- this._filterMgr.doFilterSubmit();
238
- }
239
-
240
- doRefresh() {
241
- if (this.busyCount() > 0) return;
242
- if (!this.canUse()) return;
243
- if (!this.checkIgnoreChanges()) return;
244
-
245
- mark(this.lastFilter);
246
- }
247
-
248
- async refresh() {
249
- await this._refreshMgr.refresh();
250
- }
251
-
252
- //-- inline edit (delegated to composable)
253
-
254
- async doAddItem() {
255
- await this._inlineEditMgr.doAddItem();
256
- }
257
-
258
- async doSubmit(opt?: { permCheck?: boolean; hideNoChangeMessage?: boolean }) {
259
- await this._inlineEditMgr.doSubmit(opt);
260
- }
261
-
262
- doToggleDeleteItem(item: TItem) {
263
- this._inlineEditMgr.doToggleDeleteItem(item);
264
- }
265
-
266
- //-- modal edit (delegated to composable)
267
-
268
- async doEditItem(item?: TItem) {
269
- await this._modalEditMgr.doEditItem(item);
270
- }
271
-
272
- async doToggleDeleteItems(del: boolean) {
273
- await this._modalEditMgr.doToggleDeleteItems(del);
274
- }
275
-
276
- doModalConfirm() {
277
- this._modalEditMgr.doModalConfirm();
278
- }
279
-
280
- doModalCancel() {
281
- this._modalEditMgr.doModalCancel();
282
- }
283
-
284
- //-- excel (delegated to composable)
285
-
286
- async doDownloadExcel() {
287
- await this._excelMgr.doDownloadExcel();
288
- }
289
-
290
- async doUploadExcel() {
291
- await this._excelMgr.doUploadExcel();
292
- }
293
-
294
- }