@simplysm/angular 14.0.47 → 14.0.49

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 (134) hide show
  1. package/README.md +467 -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 -14
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +0 -19
  24. package/dist/styles.css +9 -0
  25. package/docs/bootstrap.md +38 -0
  26. package/docs/directives.md +236 -0
  27. package/docs/features.md +154 -0
  28. package/docs/pipes.md +32 -0
  29. package/docs/plugins.md +37 -0
  30. package/docs/provider-types.md +283 -0
  31. package/docs/providers.md +379 -0
  32. package/docs/recipes/crud-detail.md +875 -0
  33. package/docs/recipes/crud-list.md +1037 -0
  34. package/docs/recipes/data-select-button.md +318 -0
  35. package/docs/recipes/page-modal-container.md +178 -0
  36. package/docs/styling.md +222 -0
  37. package/docs/type-utilities.md +250 -0
  38. package/docs/ui-data.md +333 -0
  39. package/docs/ui-form.md +502 -0
  40. package/docs/ui-layout.md +140 -0
  41. package/docs/ui-navigation.md +303 -0
  42. package/docs/ui-overlay.md +157 -0
  43. package/docs/ui-visual.md +127 -0
  44. package/docs/utils.md +244 -0
  45. package/package.json +21 -20
  46. package/scss/commons/_styles.scss +12 -0
  47. package/src/controls/dropdown/sd-dropdown-popup.ts +6 -2
  48. package/src/controls/dropdown/sd-dropdown.ts +3 -4
  49. package/src/controls/select/sd-select.ts +6 -30
  50. package/src/core/routing/injectViewTypeSignal.ts +17 -10
  51. package/src/core/selection/useSelectionManager.ts +62 -12
  52. package/src/data/shared-data/sd-shared-data-select-button.ts +49 -14
  53. package/src/data/sheet/sd-sheet.ts +21 -0
  54. package/src/index.ts +0 -32
  55. package/dist/core/commons.d.ts +0 -2
  56. package/dist/core/commons.d.ts.map +0 -1
  57. package/dist/core/commons.js +0 -4
  58. package/dist/core/injectParent.d.ts +0 -7
  59. package/dist/core/injectParent.d.ts.map +0 -1
  60. package/dist/core/injectParent.js +0 -30
  61. package/dist/core/selection/setupCumulateSelectedKeys.d.ts +0 -9
  62. package/dist/core/selection/setupCumulateSelectedKeys.d.ts.map +0 -1
  63. package/dist/core/selection/setupCumulateSelectedKeys.js +0 -27
  64. package/dist/core/withBusy.d.ts +0 -3
  65. package/dist/core/withBusy.d.ts.map +0 -1
  66. package/dist/core/withBusy.js +0 -9
  67. package/dist/data/data-detail/sd-data-detail.base.d.ts +0 -51
  68. package/dist/data/data-detail/sd-data-detail.base.d.ts.map +0 -1
  69. package/dist/data/data-detail/sd-data-detail.base.js +0 -127
  70. package/dist/data/data-detail/sd-data-detail.d.ts +0 -30
  71. package/dist/data/data-detail/sd-data-detail.d.ts.map +0 -1
  72. package/dist/data/data-detail/sd-data-detail.js +0 -495
  73. package/dist/data/data-select-button/sd-data-select-button.base.d.ts +0 -24
  74. package/dist/data/data-select-button/sd-data-select-button.base.d.ts.map +0 -1
  75. package/dist/data/data-select-button/sd-data-select-button.base.js +0 -68
  76. package/dist/data/data-select-button/sd-data-select-button.d.ts +0 -15
  77. package/dist/data/data-select-button/sd-data-select-button.d.ts.map +0 -1
  78. package/dist/data/data-select-button/sd-data-select-button.js +0 -152
  79. package/dist/data/data-sheet/injectDataSheetExcelManager.d.ts +0 -14
  80. package/dist/data/data-sheet/injectDataSheetExcelManager.d.ts.map +0 -1
  81. package/dist/data/data-sheet/injectDataSheetExcelManager.js +0 -31
  82. package/dist/data/data-sheet/injectDataSheetInlineEditManager.d.ts +0 -26
  83. package/dist/data/data-sheet/injectDataSheetInlineEditManager.d.ts.map +0 -1
  84. package/dist/data/data-sheet/injectDataSheetInlineEditManager.js +0 -54
  85. package/dist/data/data-sheet/injectDataSheetModalEditManager.d.ts +0 -19
  86. package/dist/data/data-sheet/injectDataSheetModalEditManager.d.ts.map +0 -1
  87. package/dist/data/data-sheet/injectDataSheetModalEditManager.js +0 -44
  88. package/dist/data/data-sheet/injectDataSheetRefreshManager.d.ts +0 -25
  89. package/dist/data/data-sheet/injectDataSheetRefreshManager.d.ts.map +0 -1
  90. package/dist/data/data-sheet/injectDataSheetRefreshManager.js +0 -50
  91. package/dist/data/data-sheet/sd-data-sheet-column.d.ts +0 -8
  92. package/dist/data/data-sheet/sd-data-sheet-column.d.ts.map +0 -1
  93. package/dist/data/data-sheet/sd-data-sheet-column.js +0 -15
  94. package/dist/data/data-sheet/sd-data-sheet.base.d.ts +0 -75
  95. package/dist/data/data-sheet/sd-data-sheet.base.d.ts.map +0 -1
  96. package/dist/data/data-sheet/sd-data-sheet.base.js +0 -188
  97. package/dist/data/data-sheet/sd-data-sheet.d.ts +0 -49
  98. package/dist/data/data-sheet/sd-data-sheet.d.ts.map +0 -1
  99. package/dist/data/data-sheet/sd-data-sheet.js +0 -968
  100. package/dist/data/data-sheet/sd-data-sheet.types.d.ts +0 -17
  101. package/dist/data/data-sheet/sd-data-sheet.types.d.ts.map +0 -1
  102. package/dist/data/data-sheet/sd-data-sheet.types.js +0 -1
  103. package/dist/data/data-sheet/setupCloserWhenSingleSelectionChange.d.ts +0 -9
  104. package/dist/data/data-sheet/setupCloserWhenSingleSelectionChange.d.ts.map +0 -1
  105. package/dist/data/data-sheet/setupCloserWhenSingleSelectionChange.js +0 -20
  106. package/dist/data/data-sheet/useDataSheetFilterManager.d.ts +0 -13
  107. package/dist/data/data-sheet/useDataSheetFilterManager.d.ts.map +0 -1
  108. package/dist/data/data-sheet/useDataSheetFilterManager.js +0 -19
  109. package/dist/data/getOrmDataEditToastErrorMessage.d.ts +0 -2
  110. package/dist/data/getOrmDataEditToastErrorMessage.d.ts.map +0 -1
  111. package/dist/data/getOrmDataEditToastErrorMessage.js +0 -8
  112. package/dist/layout/base-container/sd-base-container.d.ts +0 -27
  113. package/dist/layout/base-container/sd-base-container.d.ts.map +0 -1
  114. package/dist/layout/base-container/sd-base-container.js +0 -193
  115. package/src/core/commons.ts +0 -4
  116. package/src/core/injectParent.ts +0 -45
  117. package/src/core/selection/setupCumulateSelectedKeys.ts +0 -38
  118. package/src/core/withBusy.ts +0 -13
  119. package/src/data/data-detail/sd-data-detail.base.ts +0 -187
  120. package/src/data/data-detail/sd-data-detail.ts +0 -237
  121. package/src/data/data-select-button/sd-data-select-button.base.ts +0 -104
  122. package/src/data/data-select-button/sd-data-select-button.ts +0 -105
  123. package/src/data/data-sheet/injectDataSheetExcelManager.ts +0 -57
  124. package/src/data/data-sheet/injectDataSheetInlineEditManager.ts +0 -89
  125. package/src/data/data-sheet/injectDataSheetModalEditManager.ts +0 -76
  126. package/src/data/data-sheet/injectDataSheetRefreshManager.ts +0 -90
  127. package/src/data/data-sheet/sd-data-sheet-column.ts +0 -10
  128. package/src/data/data-sheet/sd-data-sheet.base.ts +0 -294
  129. package/src/data/data-sheet/sd-data-sheet.ts +0 -479
  130. package/src/data/data-sheet/sd-data-sheet.types.ts +0 -18
  131. package/src/data/data-sheet/setupCloserWhenSingleSelectionChange.ts +0 -29
  132. package/src/data/data-sheet/useDataSheetFilterManager.ts +0 -30
  133. package/src/data/getOrmDataEditToastErrorMessage.ts +0 -10
  134. 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
- }