@headless-adminapp/app 0.0.17-alpha.8 → 1.0.0

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 (243) hide show
  1. package/app/AppProvider.d.ts +0 -3
  2. package/app/AppProvider.js +10 -33
  3. package/app/AuthWrapper.d.ts +1 -1
  4. package/app/AuthWrapper.js +4 -1
  5. package/app/LayoutProvider.d.ts +8 -7
  6. package/app/LayoutProvider.js +28 -2
  7. package/app/context.d.ts +1 -1
  8. package/auth/AuthProvider.d.ts +1 -1
  9. package/auth/AuthProvider.js +30 -23
  10. package/auth/context.d.ts +2 -0
  11. package/auth/hooks/useIsSkipAuthCheck.d.ts +1 -0
  12. package/auth/hooks/useIsSkipAuthCheck.js +8 -0
  13. package/auth/hooks/useLogout.js +1 -1
  14. package/board/BoardColumnDataResolver.d.ts +1 -0
  15. package/board/BoardColumnDataResolver.js +64 -0
  16. package/board/BoardColumnProvider.d.ts +7 -0
  17. package/board/BoardColumnProvider.js +36 -0
  18. package/board/context.d.ts +19 -0
  19. package/board/context.js +6 -0
  20. package/board/hooks/index.d.ts +6 -0
  21. package/board/hooks/index.js +15 -0
  22. package/board/hooks/useBoardColumnConfig.d.ts +2 -0
  23. package/board/hooks/useBoardColumnConfig.js +8 -0
  24. package/board/hooks/useBoardColumnData.d.ts +3 -0
  25. package/board/hooks/useBoardColumnData.js +9 -0
  26. package/board/hooks/useBoardColumnDataState.d.ts +5 -0
  27. package/board/hooks/useBoardColumnDataState.js +9 -0
  28. package/board/hooks/useBoardConfig.d.ts +3 -0
  29. package/board/hooks/useBoardConfig.js +8 -0
  30. package/board/hooks/useBoardSchema.d.ts +2 -0
  31. package/board/hooks/useBoardSchema.js +7 -0
  32. package/board/hooks/useSearchText.d.ts +1 -0
  33. package/board/hooks/useSearchText.js +14 -0
  34. package/board/types.d.ts +47 -0
  35. package/board/utils.d.ts +3 -0
  36. package/board/utils.js +6 -0
  37. package/builders/CommandBuilder/DefaultCommandBuilder.d.ts +15 -6
  38. package/builders/CommandBuilder/DefaultCommandBuilder.js +42 -20
  39. package/builders/CommandBuilder/FormCommandBuilder.d.ts +14 -13
  40. package/builders/CommandBuilder/FormCommandBuilder.js +66 -52
  41. package/builders/CommandBuilder/SubgridCommandBuilder.d.ts +8 -27
  42. package/builders/CommandBuilder/SubgridCommandBuilder.js +115 -57
  43. package/builders/CommandBuilder/ViewCommandBuilder.js +32 -52
  44. package/builders/CommandBuilder/utils.js +1 -1
  45. package/builders/DefineFormExperience.d.ts +27 -0
  46. package/builders/DefineFormExperience.js +99 -0
  47. package/builders/DefineViewExperience.d.ts +13 -0
  48. package/builders/DefineViewExperience.js +33 -0
  49. package/builders/SchemaExperienceBuilder.d.ts +9 -7
  50. package/builders/SchemaExperienceBuilder.js +62 -40
  51. package/builders/utils.js +30 -44
  52. package/calendar/baseEventAttributes.d.ts +35 -0
  53. package/calendar/baseEventAttributes.js +38 -0
  54. package/calendar/context.d.ts +6 -0
  55. package/calendar/context.js +5 -0
  56. package/calendar/hooks/index.d.ts +1 -0
  57. package/{appearance → calendar}/hooks/index.js +1 -1
  58. package/calendar/hooks/useConfig.d.ts +3 -0
  59. package/calendar/hooks/useConfig.js +8 -0
  60. package/calendar/types.d.ts +41 -0
  61. package/calendar/types.js +2 -0
  62. package/calendar/utils.d.ts +3 -0
  63. package/calendar/utils.js +6 -0
  64. package/command/hooks/useBaseCommandHandlerContext.js +15 -6
  65. package/command/hooks/useCommands.js +1 -1
  66. package/command/utils/index.js +34 -9
  67. package/components/ScrollView/index.d.ts +1 -1
  68. package/components/ScrollView/index.js +2 -2
  69. package/components/ScrollbarWithMoreDataRequest/index.d.ts +9 -0
  70. package/components/ScrollbarWithMoreDataRequest/index.js +32 -0
  71. package/dataform/DataFormProvider/CustomHookExecuter.d.ts +5 -0
  72. package/dataform/DataFormProvider/CustomHookExecuter.js +14 -0
  73. package/dataform/DataFormProvider/DataResolver.d.ts +6 -4
  74. package/dataform/DataFormProvider/DataResolver.js +11 -94
  75. package/dataform/DataFormProvider/InitialValueResolver.js +3 -2
  76. package/dataform/DataFormProvider/ReadonlyInfoResolver.js +2 -3
  77. package/dataform/DataFormProvider/getRecord.d.ts +3 -0
  78. package/dataform/DataFormProvider/getRecord.js +56 -0
  79. package/dataform/DataFormProvider/index.d.ts +4 -0
  80. package/dataform/DataFormProvider/index.js +34 -12
  81. package/dataform/DataFormProvider/types.d.ts +13 -0
  82. package/dataform/DataFormProvider/types.js +2 -0
  83. package/dataform/DataFormProvider/utils.d.ts +23 -0
  84. package/dataform/DataFormProvider/utils.js +105 -0
  85. package/dataform/FormManager.d.ts +57 -0
  86. package/dataform/FormManager.js +247 -0
  87. package/dataform/constants.d.ts +1 -0
  88. package/dataform/constants.js +4 -0
  89. package/dataform/context.d.ts +26 -1
  90. package/dataform/hooks/index.d.ts +11 -0
  91. package/dataform/hooks/index.js +11 -0
  92. package/dataform/hooks/useContextKey.d.ts +1 -0
  93. package/dataform/hooks/useContextKey.js +8 -0
  94. package/dataform/hooks/useDisabledControlsManager.d.ts +6 -0
  95. package/dataform/hooks/useDisabledControlsManager.js +46 -0
  96. package/dataform/hooks/useEventManager.d.ts +1 -0
  97. package/dataform/hooks/useEventManager.js +8 -0
  98. package/dataform/hooks/useFormManager.d.ts +2 -0
  99. package/dataform/hooks/useFormManager.js +13 -0
  100. package/dataform/hooks/useFormNotifications.js +2 -2
  101. package/dataform/hooks/useFormSave.js +28 -31
  102. package/dataform/hooks/useHiddenControlsManager.d.ts +7 -0
  103. package/dataform/hooks/useHiddenControlsManager.js +50 -0
  104. package/dataform/hooks/useIsControlDisabled.d.ts +1 -0
  105. package/dataform/hooks/useIsControlDisabled.js +27 -0
  106. package/dataform/hooks/useIsControlHiddenByAttributeName.d.ts +1 -0
  107. package/dataform/hooks/useIsControlHiddenByAttributeName.js +17 -0
  108. package/dataform/hooks/useIsControlHiddenByKey.d.ts +1 -0
  109. package/dataform/hooks/useIsControlHiddenByKey.js +17 -0
  110. package/dataform/hooks/useIsFieldRequired.d.ts +1 -0
  111. package/dataform/hooks/useIsFieldRequired.js +25 -0
  112. package/dataform/hooks/useLoadFormGridPage.js +8 -17
  113. package/dataform/hooks/useMainFormCommands.d.ts +1 -12
  114. package/dataform/hooks/useMainFormCommands.js +13 -3
  115. package/dataform/hooks/useOnFieldValueChangeListener.d.ts +1 -0
  116. package/dataform/hooks/useOnFieldValueChangeListener.js +30 -0
  117. package/dataform/hooks/useProcessFlowSteps.d.ts +1 -0
  118. package/dataform/hooks/useProcessFlowSteps.js +45 -0
  119. package/dataform/hooks/useRecordTitle.d.ts +3 -1
  120. package/dataform/hooks/useRecordTitle.js +12 -5
  121. package/dataform/hooks/useRequiredFieldManager.d.ts +6 -0
  122. package/dataform/hooks/useRequiredFieldManager.js +49 -0
  123. package/dataform/test.d.ts +57 -0
  124. package/dataform/test.js +247 -0
  125. package/dataform/utils/defaultParameters.d.ts +6 -0
  126. package/dataform/utils/defaultParameters.js +54 -0
  127. package/dataform/utils/index.d.ts +6 -24
  128. package/dataform/utils/index.js +164 -190
  129. package/dataform/utils/saveRecord.d.ts +27 -0
  130. package/dataform/utils/saveRecord.js +163 -0
  131. package/datagrid/DataGridProvider/DataResolver.js +38 -109
  132. package/datagrid/DataGridProvider/index.d.ts +6 -0
  133. package/datagrid/DataGridProvider/index.js +18 -8
  134. package/datagrid/DataGridProvider/transformViewColumns.js +10 -2
  135. package/datagrid/DataGridProvider/utils.js +8 -8
  136. package/datagrid/column-filter/constants.js +38 -3
  137. package/datagrid/column-filter/utils.js +7 -1
  138. package/datagrid/context.d.ts +6 -0
  139. package/datagrid/hooks/useChangeView.js +1 -1
  140. package/datagrid/hooks/useGridColumnFilter.js +4 -1
  141. package/datagrid/hooks/useGridDisabled.d.ts +1 -0
  142. package/datagrid/hooks/useGridDisabled.js +8 -0
  143. package/datagrid/hooks/useLoadMainGridPage.js +1 -1
  144. package/datagrid/hooks/useMainGridCommands.js +23 -9
  145. package/datagrid/hooks/useOpenRecord.js +2 -2
  146. package/datagrid/hooks/useSubGridCommands.js +23 -45
  147. package/defaults.d.ts +2 -0
  148. package/defaults.js +5 -0
  149. package/dialog/hooks/useCloseDialog.js +17 -15
  150. package/dialog/hooks/useOpenAlertDialog.js +8 -3
  151. package/dialog/hooks/useOpenConfirmDialog.js +10 -4
  152. package/dialog/hooks/useOpenDialog.js +7 -5
  153. package/dialog/hooks/useOpenErrorDialog.js +8 -3
  154. package/dialog/hooks/useOpenPromptDialog.js +10 -4
  155. package/form/FormValidationStringContext.d.ts +1 -0
  156. package/form/FormValidationStringContext.js +1 -0
  157. package/hooks/index.d.ts +1 -0
  158. package/hooks/index.js +3 -0
  159. package/hooks/useDebouncedValue.js +0 -1
  160. package/hooks/useElementLayout.js +1 -1
  161. package/hooks/useIsMobile.js +0 -1
  162. package/hooks/useItemsWithKey.d.ts +7 -0
  163. package/hooks/useItemsWithKey.js +13 -0
  164. package/hooks/useStorageState.js +1 -2
  165. package/hooks/useSystemColorScheme.d.ts +1 -1
  166. package/hooks/useSystemColorScheme.js +0 -1
  167. package/insights/InsightsProvider.d.ts +8 -0
  168. package/insights/InsightsProvider.js +27 -0
  169. package/locale/LocaleProvider.d.ts +2 -1
  170. package/locale/LocaleProvider.js +3 -3
  171. package/locale/index.d.ts +1 -0
  172. package/locale/index.js +1 -0
  173. package/locale/useCurrencySymbol.d.ts +1 -0
  174. package/locale/useCurrencySymbol.js +12 -0
  175. package/locale/utils.js +4 -2
  176. package/metadata/MetadataProvider.d.ts +8 -4
  177. package/metadata/MetadataProvider.js +23 -17
  178. package/metadata/context.d.ts +3 -2
  179. package/metadata/hooks/index.d.ts +1 -1
  180. package/metadata/hooks/index.js +1 -1
  181. package/metadata/hooks/useAppExperience.d.ts +1 -0
  182. package/metadata/hooks/useAppExperience.js +8 -0
  183. package/metadata/hooks/useAppStore.d.ts +1 -1
  184. package/metadata/hooks/useAppStore.js +3 -3
  185. package/metadata/hooks/useExperienceView.js +2 -11
  186. package/metadata/hooks/useExperienceViewCommands.d.ts +1 -1
  187. package/metadata/hooks/useExperienceViewCommands.js +5 -14
  188. package/metadata/hooks/useExperienceViewLookup.js +2 -11
  189. package/metadata/hooks/useExperienceViewSubgridCommands.d.ts +1 -1
  190. package/metadata/hooks/useExperienceViewSubgridCommands.js +5 -14
  191. package/metadata/hooks/useMetadata.d.ts +11 -10
  192. package/metadata/hooks/useMetadata.js +4 -16
  193. package/metadata/hooks/useSchema.d.ts +1 -1
  194. package/metadata/hooks/useSchema.js +3 -0
  195. package/mutable/context.d.ts +3 -0
  196. package/mutable/context.js +8 -0
  197. package/mutable/utils.js +5 -12
  198. package/navigation/hooks/useOpenForm.js +4 -0
  199. package/package.json +6 -10
  200. package/providers/PageEntityFormProvider/index.d.ts +5 -1
  201. package/providers/PageEntityFormProvider/index.js +2 -2
  202. package/recordset/hooks/useRecordSetResult.js +4 -14
  203. package/route/RouteProvider.d.ts +2 -2
  204. package/route/RouteProvider.js +4 -1
  205. package/store/ClientAppStore.js +7 -20
  206. package/store/ComponentStore.d.ts +1 -1
  207. package/store/ComponentStore.js +6 -12
  208. package/store/EventManager.d.ts +2 -2
  209. package/store/EventManager.js +13 -29
  210. package/store/SchemaExperienceStore.js +179 -215
  211. package/store/index.d.ts +0 -1
  212. package/store/index.js +0 -1
  213. package/toast-notification/hooks/useCloseToastNotification.js +17 -15
  214. package/toast-notification/hooks/useOpenToastNotification.js +7 -5
  215. package/transport/InMemoryDataService/index.js +54 -77
  216. package/transport/RestDataService/index.d.ts +3 -3
  217. package/transport/RestDataService/index.js +68 -91
  218. package/transport/context.d.ts +2 -1
  219. package/transport/context.js +7 -1
  220. package/transport/hooks/index.d.ts +1 -0
  221. package/transport/hooks/index.js +1 -0
  222. package/transport/hooks/useFileService.d.ts +1 -0
  223. package/transport/hooks/useFileService.js +9 -0
  224. package/transport/hooks/useRetriveRecords.d.ts +33 -0
  225. package/transport/hooks/useRetriveRecords.js +110 -0
  226. package/utils/calculateColumnWidths.js +1 -1
  227. package/utils/color.d.ts +1 -0
  228. package/utils/color.js +14 -0
  229. package/utils/getAttributeFormattedValue.d.ts +4 -1
  230. package/utils/getAttributeFormattedValue.js +109 -54
  231. package/utils/phone.d.ts +13 -0
  232. package/utils/phone.js +33 -0
  233. package/appearance/context.d.ts +0 -7
  234. package/appearance/context.js +0 -5
  235. package/appearance/hooks/index.d.ts +0 -1
  236. package/appearance/hooks/useAppearanceContext.d.ts +0 -1
  237. package/appearance/hooks/useAppearanceContext.js +0 -12
  238. package/appearance/index.d.ts +0 -2
  239. package/appearance/index.js +0 -20
  240. package/builders/CommandBuilder.d.ts +0 -176
  241. package/builders/CommandBuilder.js +0 -567
  242. package/locale/types.d.ts +0 -2
  243. /package/{locale → board}/types.js +0 -0
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getControls = getControls;
4
+ exports.getColumns = getColumns;
5
+ exports.transformFormInternal = transformFormInternal;
6
+ exports.getIsFieldDisabled = getIsFieldDisabled;
7
+ exports.getIsControlHidden = getIsControlHidden;
8
+ exports.getIsFieldRequired = getIsFieldRequired;
9
+ function getControls(form) {
10
+ const controls = form.experience.tabs
11
+ .flatMap((tab) => tab.tabColumns)
12
+ .flatMap((tabColumn) => tabColumn.sections)
13
+ .flatMap((section) => section.controls);
14
+ return controls;
15
+ }
16
+ function getColumns(form, schema) {
17
+ const set = new Set([
18
+ ...(form.experience.includeAttributes ?? []),
19
+ ...(form.experience.headerControls ?? []),
20
+ ...getControls(form)
21
+ .filter((control) => control.type === 'standard')
22
+ .map((control) => control.attributeName),
23
+ ]);
24
+ if (schema.avatarAttribute) {
25
+ set.add(schema.avatarAttribute);
26
+ }
27
+ const columns = Array.from(set);
28
+ return columns;
29
+ }
30
+ function transformFormInternal(form) {
31
+ const controls = getControls(form);
32
+ const dict = controls.reduce((acc, control) => {
33
+ let key = control.key;
34
+ if (!key && control.type === 'standard') {
35
+ key = control.attributeName;
36
+ }
37
+ if (key) {
38
+ acc[key] = control;
39
+ }
40
+ return acc;
41
+ }, {});
42
+ const sections = form.experience.tabs
43
+ .flatMap((tab) => tab.tabColumns)
44
+ .flatMap((tabColumn) => tabColumn.sections);
45
+ const dictBySectionKey = sections.reduce((acc, section) => {
46
+ acc[section.name] = section;
47
+ return acc;
48
+ }, {});
49
+ const tabsDict = form.experience.tabs.reduce((acc, tab) => {
50
+ acc[tab.name] = tab;
51
+ return acc;
52
+ }, {});
53
+ return {
54
+ controls: {
55
+ list: controls,
56
+ dict,
57
+ },
58
+ sections: {
59
+ list: sections,
60
+ dict: dictBySectionKey,
61
+ },
62
+ tabs: {
63
+ dict: tabsDict,
64
+ },
65
+ };
66
+ }
67
+ function getIsFieldDisabled({ attribute, isFormReadonly, disabledFields, control, }) {
68
+ let disabled = isFormReadonly ?? false;
69
+ if (!disabled) {
70
+ if (control.type === 'standard' &&
71
+ typeof control.attributeName === 'string' &&
72
+ disabledFields[control.attributeName] !== undefined) {
73
+ disabled = disabledFields[control.attributeName];
74
+ }
75
+ else if (control.disabled !== undefined) {
76
+ disabled = control.disabled;
77
+ }
78
+ else if (attribute.readonly !== undefined) {
79
+ disabled = attribute.readonly;
80
+ }
81
+ }
82
+ return disabled;
83
+ }
84
+ function getIsControlHidden({ control, hiddenControls, }) {
85
+ let hidden = control.hidden ?? false;
86
+ let key = control.key;
87
+ if (!key && control.type === 'standard') {
88
+ key = control.attributeName;
89
+ }
90
+ if (key && hiddenControls[key] !== undefined) {
91
+ hidden = hiddenControls[key];
92
+ }
93
+ return hidden;
94
+ }
95
+ function getIsFieldRequired({ attribute, control, requiredFields, }) {
96
+ const attributeName = control.attributeName;
97
+ let required = attribute.required ?? false;
98
+ if (requiredFields[attributeName] !== undefined) {
99
+ required = requiredFields[attributeName];
100
+ }
101
+ else if (control.required !== undefined) {
102
+ required = control.required;
103
+ }
104
+ return required;
105
+ }
@@ -0,0 +1,57 @@
1
+ import { Attribute } from '@headless-adminapp/core';
2
+ import { Section } from '@headless-adminapp/core/experience/form';
3
+ import { SectionControl } from '@headless-adminapp/core/experience/form/SectionControl';
4
+ import { Tab } from '@headless-adminapp/core/experience/form/Tab';
5
+ import { SchemaAttributes } from '@headless-adminapp/core/schema';
6
+ import { ContextValue } from '../mutable';
7
+ import { DataFormContextState } from './context';
8
+ export declare class FormManager<SA extends SchemaAttributes = SchemaAttributes> {
9
+ private readonly contextState;
10
+ constructor(contextState: ContextValue<DataFormContextState<SA>>);
11
+ private get context();
12
+ getAttribute(attributeName: keyof SA): FormAttribute<SA> | null;
13
+ getControl<C extends Control<SA>>(name: string): C | null;
14
+ getSection(name: string): FormSection<SA> | null;
15
+ getTab(name: string): FormTab<SA> | null;
16
+ }
17
+ declare class FormAttribute<SA extends SchemaAttributes = SchemaAttributes> {
18
+ private readonly contextState;
19
+ private readonly attributeName;
20
+ private readonly attribute;
21
+ constructor(contextState: ContextValue<DataFormContextState<SA>>, attributeName: keyof SA, attribute: Attribute);
22
+ getInnerAttribute(): Attribute;
23
+ setRequired(state: boolean): void;
24
+ getRequired(): boolean;
25
+ resetRequired(): void;
26
+ getControls(): Control<SA>[];
27
+ }
28
+ declare class Control<SA extends SchemaAttributes = SchemaAttributes> {
29
+ private readonly contextState;
30
+ private readonly control;
31
+ constructor(contextState: ContextValue<DataFormContextState<SA>>, control: SectionControl<SA>);
32
+ private get context();
33
+ getKey(): string | undefined;
34
+ getDisabled(): boolean;
35
+ setDisabled(state: boolean): void;
36
+ resetDisabled(): void;
37
+ getHidden(): boolean;
38
+ setHidden(state: boolean): void;
39
+ resetHidden(): void;
40
+ }
41
+ declare class FormSection<SA extends SchemaAttributes = SchemaAttributes> {
42
+ private readonly contextState;
43
+ private readonly section;
44
+ constructor(contextState: ContextValue<DataFormContextState<SA>>, section: Section<SA>);
45
+ setHidden(state: boolean): void;
46
+ getHidden(): boolean;
47
+ resetHidden(): void;
48
+ }
49
+ declare class FormTab<SA extends SchemaAttributes = SchemaAttributes> {
50
+ private readonly contextState;
51
+ private readonly tab;
52
+ constructor(contextState: ContextValue<DataFormContextState<SA>>, tab: Tab<SA>);
53
+ setHidden(state: boolean): void;
54
+ getHidden(): boolean;
55
+ resetHidden(): void;
56
+ }
57
+ export {};
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FormManager = void 0;
4
+ const utils_1 = require("./DataFormProvider/utils");
5
+ class FormManager {
6
+ contextState;
7
+ constructor(contextState) {
8
+ this.contextState = contextState;
9
+ }
10
+ get context() {
11
+ return this.contextState.value.current;
12
+ }
13
+ getAttribute(attributeName) {
14
+ return new FormAttribute(this.contextState, attributeName, this.context.schema.attributes[attributeName]);
15
+ }
16
+ getControl(name) {
17
+ const control = this.context.formInternal.controls.dict[name] ?? null;
18
+ if (!control) {
19
+ return null;
20
+ }
21
+ return new Control(this.contextState, control);
22
+ }
23
+ getSection(name) {
24
+ const section = this.context.formInternal.sections.dict[name];
25
+ if (!section) {
26
+ return null;
27
+ }
28
+ return new FormSection(this.contextState, section);
29
+ }
30
+ getTab(name) {
31
+ const tab = this.context.formInternal.tabs.dict[name];
32
+ if (!tab) {
33
+ return null;
34
+ }
35
+ return new FormTab(this.contextState, tab);
36
+ }
37
+ }
38
+ exports.FormManager = FormManager;
39
+ class FormAttribute {
40
+ contextState;
41
+ attributeName;
42
+ attribute;
43
+ constructor(contextState, attributeName, attribute) {
44
+ this.contextState = contextState;
45
+ this.attributeName = attributeName;
46
+ this.attribute = attribute;
47
+ }
48
+ getInnerAttribute() {
49
+ return this.attribute;
50
+ }
51
+ setRequired(state) {
52
+ const control = this.contextState.value.current.formInternal.controls.dict[this.attributeName];
53
+ if (!control) {
54
+ return;
55
+ }
56
+ if (control.type !== 'standard') {
57
+ return;
58
+ }
59
+ this.contextState.setValue((prev) => {
60
+ return {
61
+ requiredFields: {
62
+ ...prev.requiredFields,
63
+ [this.attributeName]: state,
64
+ },
65
+ };
66
+ });
67
+ }
68
+ getRequired() {
69
+ const attribute = this.attribute;
70
+ const control = this.contextState.value.current.formInternal.controls.dict[this.attributeName];
71
+ if (control.type !== 'standard') {
72
+ return false;
73
+ }
74
+ return (0, utils_1.getIsFieldRequired)({
75
+ attribute,
76
+ control,
77
+ requiredFields: this.contextState.value.current.requiredFields,
78
+ });
79
+ }
80
+ resetRequired() {
81
+ this.contextState.setValue((prev) => {
82
+ const requiredFields = { ...prev.requiredFields };
83
+ delete requiredFields[this.attributeName];
84
+ return {
85
+ requiredFields,
86
+ };
87
+ });
88
+ }
89
+ getControls() {
90
+ return this.contextState.value.current.formInternal.controls.list
91
+ .filter((control) => control.type === 'standard' &&
92
+ control.attributeName === this.attributeName)
93
+ .map((control) => new Control(this.contextState, control));
94
+ }
95
+ }
96
+ class Control {
97
+ contextState;
98
+ control;
99
+ constructor(contextState, control) {
100
+ this.contextState = contextState;
101
+ this.control = control;
102
+ }
103
+ get context() {
104
+ return this.contextState.value.current;
105
+ }
106
+ getKey() {
107
+ let key = this.control.key;
108
+ if (!key && this.control.type === 'standard') {
109
+ key = this.control.attributeName;
110
+ }
111
+ return key;
112
+ }
113
+ getDisabled() {
114
+ if (this.control.type !== 'standard') {
115
+ return false;
116
+ }
117
+ const attributeName = this.control.attributeName;
118
+ return (0, utils_1.getIsFieldDisabled)({
119
+ control: this.control,
120
+ attribute: this.context.schema.attributes[attributeName],
121
+ disabledFields: this.context.disabledControls,
122
+ isFormReadonly: this.context.isReadonly,
123
+ });
124
+ }
125
+ setDisabled(state) {
126
+ if (this.control.type !== 'standard') {
127
+ return;
128
+ }
129
+ const key = this.control.attributeName;
130
+ this.contextState.setValue((prev) => {
131
+ return {
132
+ disabledControls: {
133
+ ...prev.disabledControls,
134
+ [key]: state,
135
+ },
136
+ };
137
+ });
138
+ }
139
+ resetDisabled() {
140
+ if (this.control.type !== 'standard') {
141
+ return;
142
+ }
143
+ const key = this.control.attributeName;
144
+ this.contextState.setValue((prev) => {
145
+ const disabledFields = { ...prev.disabledControls };
146
+ delete disabledFields[key];
147
+ return {
148
+ disabledControls: disabledFields,
149
+ };
150
+ });
151
+ }
152
+ getHidden() {
153
+ return (0, utils_1.getIsControlHidden)({
154
+ control: this.control,
155
+ hiddenControls: this.context.hiddenControls,
156
+ });
157
+ }
158
+ setHidden(state) {
159
+ const key = this.getKey();
160
+ if (!key) {
161
+ return;
162
+ }
163
+ this.contextState.setValue((prev) => {
164
+ return {
165
+ hiddenControls: {
166
+ ...prev.hiddenControls,
167
+ [key]: state,
168
+ },
169
+ };
170
+ });
171
+ }
172
+ resetHidden() {
173
+ const key = this.getKey();
174
+ if (!key) {
175
+ return;
176
+ }
177
+ this.contextState.setValue((prev) => {
178
+ const hiddenControls = { ...prev.hiddenControls };
179
+ delete hiddenControls[key];
180
+ return {
181
+ hiddenControls,
182
+ };
183
+ });
184
+ }
185
+ }
186
+ class FormSection {
187
+ contextState;
188
+ section;
189
+ constructor(contextState, section) {
190
+ this.contextState = contextState;
191
+ this.section = section;
192
+ }
193
+ setHidden(state) {
194
+ this.contextState.setValue((prev) => {
195
+ return {
196
+ hiddenSections: {
197
+ ...prev.hiddenSections,
198
+ [this.section.name]: state,
199
+ },
200
+ };
201
+ });
202
+ }
203
+ getHidden() {
204
+ return (this.contextState.value.current.hiddenSections[this.section.name] ??
205
+ this.section.hidden ??
206
+ false);
207
+ }
208
+ resetHidden() {
209
+ this.contextState.setValue((prev) => {
210
+ const hiddenSections = { ...prev.hiddenSections };
211
+ delete hiddenSections[this.section.name];
212
+ return {
213
+ hiddenSections,
214
+ };
215
+ });
216
+ }
217
+ }
218
+ class FormTab {
219
+ contextState;
220
+ tab;
221
+ constructor(contextState, tab) {
222
+ this.contextState = contextState;
223
+ this.tab = tab;
224
+ }
225
+ setHidden(state) {
226
+ this.contextState.setValue((prev) => {
227
+ return {
228
+ hiddenTabs: {
229
+ ...prev.hiddenTabs,
230
+ [this.tab.name]: state,
231
+ },
232
+ };
233
+ });
234
+ }
235
+ getHidden() {
236
+ return this.contextState.value.current.hiddenTabs[this.tab.name] ?? false;
237
+ }
238
+ resetHidden() {
239
+ this.contextState.setValue((prev) => {
240
+ const hiddenTabs = { ...prev.hiddenTabs };
241
+ delete hiddenTabs[this.tab.name];
242
+ return {
243
+ hiddenTabs,
244
+ };
245
+ });
246
+ }
247
+ }
@@ -0,0 +1 @@
1
+ export declare const EVENT_KEY_ON_FIELD_CHANGE = "onFieldChange";
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EVENT_KEY_ON_FIELD_CHANGE = void 0;
4
+ exports.EVENT_KEY_ON_FIELD_CHANGE = 'onFieldChange';
@@ -1,17 +1,42 @@
1
- import { EntityMainFormCommandItemExperience, Form } from '@headless-adminapp/core/experience/form';
1
+ import { EntityMainFormCommandItemExperience, Form, Section } from '@headless-adminapp/core/experience/form';
2
+ import { SectionControl } from '@headless-adminapp/core/experience/form/SectionControl';
3
+ import { Tab } from '@headless-adminapp/core/experience/form/Tab';
2
4
  import { InferredSchemaType, Schema, SchemaAttributes } from '@headless-adminapp/core/schema';
5
+ import { IEventManager } from '@headless-adminapp/core/store';
3
6
  import { Data } from '@headless-adminapp/core/transport';
4
7
  import { Nullable } from '@headless-adminapp/core/types';
8
+ import { SaveRecordFn } from './utils/saveRecord';
5
9
  export type DataFormContextState<SA extends SchemaAttributes = SchemaAttributes> = {
10
+ contextKey: number;
6
11
  schema: Schema<SA>;
7
12
  form: Form<SA>;
8
13
  recordId?: string | number;
9
14
  cloneId?: string | number;
10
15
  commands: EntityMainFormCommandItemExperience[][];
16
+ saveRecordFn: SaveRecordFn;
11
17
  activeTab?: string;
18
+ disabledControls: Record<string, boolean>;
19
+ requiredFields: Record<string, boolean>;
20
+ hiddenControls: Record<string, boolean>;
21
+ hiddenSections: Record<string, boolean>;
22
+ hiddenTabs: Record<string, boolean>;
23
+ formInternal: {
24
+ controls: {
25
+ list: SectionControl<SA>[];
26
+ dict: Record<string, SectionControl<SA>>;
27
+ };
28
+ sections: {
29
+ list: Section<SA>[];
30
+ dict: Record<string, Section<SA>>;
31
+ };
32
+ tabs: {
33
+ dict: Record<string, Tab<SA>>;
34
+ };
35
+ };
12
36
  record?: Data<InferredSchemaType<SA>>;
13
37
  cloneRecord?: Data<InferredSchemaType<SA>>;
14
38
  isReadonly?: boolean;
39
+ eventManager: IEventManager;
15
40
  dataState: {
16
41
  isFetching: boolean;
17
42
  isError?: boolean;
@@ -10,3 +10,14 @@ export * from './useRecordId';
10
10
  export * from './useRecordTitle';
11
11
  export * from './useSelectedForm';
12
12
  export * from './useLoadFormGridPage';
13
+ export * from './useProcessFlowSteps';
14
+ export * from './useEventManager';
15
+ export * from './useIsControlHiddenByAttributeName';
16
+ export * from './useIsControlHiddenByKey';
17
+ export * from './useHiddenControlsManager';
18
+ export * from './useDisabledControlsManager';
19
+ export * from './useContextKey';
20
+ export * from './useIsControlDisabled';
21
+ export * from './useIsFieldRequired';
22
+ export * from './useRequiredFieldManager';
23
+ export * from './useFormManager';
@@ -26,3 +26,14 @@ __exportStar(require("./useRecordId"), exports);
26
26
  __exportStar(require("./useRecordTitle"), exports);
27
27
  __exportStar(require("./useSelectedForm"), exports);
28
28
  __exportStar(require("./useLoadFormGridPage"), exports);
29
+ __exportStar(require("./useProcessFlowSteps"), exports);
30
+ __exportStar(require("./useEventManager"), exports);
31
+ __exportStar(require("./useIsControlHiddenByAttributeName"), exports);
32
+ __exportStar(require("./useIsControlHiddenByKey"), exports);
33
+ __exportStar(require("./useHiddenControlsManager"), exports);
34
+ __exportStar(require("./useDisabledControlsManager"), exports);
35
+ __exportStar(require("./useContextKey"), exports);
36
+ __exportStar(require("./useIsControlDisabled"), exports);
37
+ __exportStar(require("./useIsFieldRequired"), exports);
38
+ __exportStar(require("./useRequiredFieldManager"), exports);
39
+ __exportStar(require("./useFormManager"), exports);
@@ -0,0 +1 @@
1
+ export declare function useContextKey(): number;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useContextKey = useContextKey;
4
+ const context_1 = require("../../mutable/context");
5
+ const context_2 = require("../context");
6
+ function useContextKey() {
7
+ return (0, context_1.useContextSelector)(context_2.DataFormContext, (state) => state.contextKey);
8
+ }
@@ -0,0 +1,6 @@
1
+ /*** @deprecated */
2
+ export declare function useDisabledControlsManager(): {
3
+ getIsControlDisabled: (attributeName: string) => boolean;
4
+ setControlDisabled: (attributeName: string, state: boolean) => void;
5
+ resetControlDisabled: (key: string) => void;
6
+ };
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDisabledControlsManager = useDisabledControlsManager;
4
+ const mutable_1 = require("@headless-adminapp/app/mutable");
5
+ const context_1 = require("@headless-adminapp/app/mutable/context");
6
+ const react_1 = require("react");
7
+ const context_2 = require("../context");
8
+ const utils_1 = require("../DataFormProvider/utils");
9
+ /*** @deprecated */
10
+ function useDisabledControlsManager() {
11
+ const setValue = (0, mutable_1.useContextSetValue)(context_2.DataFormContext);
12
+ const dataFormContextValue = (0, context_1.useContextValue)(context_2.DataFormContext);
13
+ const _getIsControlDisabled = (0, react_1.useCallback)((attributeName) => {
14
+ const attribute = dataFormContextValue.current.schema.attributes[attributeName];
15
+ return (0, utils_1.getIsFieldDisabled)({
16
+ attribute,
17
+ control: dataFormContextValue.current.formInternal.controls.dict[attributeName],
18
+ disabledFields: dataFormContextValue.current.disabledControls,
19
+ isFormReadonly: dataFormContextValue.current.isReadonly,
20
+ });
21
+ }, [dataFormContextValue]);
22
+ const _setControlDisabled = (0, react_1.useCallback)((attributeName, state) => {
23
+ setValue((prev) => {
24
+ return {
25
+ disabledControls: {
26
+ ...prev.disabledControls,
27
+ [attributeName]: state,
28
+ },
29
+ };
30
+ });
31
+ }, [setValue]);
32
+ const _resetControlDisabled = (0, react_1.useCallback)((key) => {
33
+ setValue((prev) => {
34
+ const _disabledControls = { ...prev.disabledControls };
35
+ delete _disabledControls[key];
36
+ return {
37
+ hiddenControls: _disabledControls,
38
+ };
39
+ });
40
+ }, [setValue]);
41
+ return {
42
+ getIsControlDisabled: _getIsControlDisabled,
43
+ setControlDisabled: _setControlDisabled,
44
+ resetControlDisabled: _resetControlDisabled,
45
+ };
46
+ }
@@ -0,0 +1 @@
1
+ export declare function useEventManager(): import("@headless-adminapp/core/store").IEventManager;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useEventManager = useEventManager;
4
+ const mutable_1 = require("@headless-adminapp/app/mutable");
5
+ const context_1 = require("../context");
6
+ function useEventManager() {
7
+ return (0, mutable_1.useContextSelector)(context_1.DataFormContext, (state) => state.eventManager);
8
+ }
@@ -0,0 +1,2 @@
1
+ import { FormManager } from '../FormManager';
2
+ export declare function useFormManager(): FormManager<import("@headless-adminapp/core/schema").SchemaAttributes>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useFormManager = useFormManager;
4
+ const react_1 = require("react");
5
+ const context_1 = require("../context");
6
+ const FormManager_1 = require("../FormManager");
7
+ function useFormManager() {
8
+ const context = (0, react_1.useContext)(context_1.DataFormContext);
9
+ if (!context) {
10
+ throw new Error('useFormManager must be used within a DataFormProvider');
11
+ }
12
+ return (0, react_1.useMemo)(() => new FormManager_1.FormManager(context), [context]);
13
+ }
@@ -27,8 +27,8 @@ function useFormNotifications() {
27
27
  return notifications;
28
28
  }, [
29
29
  formInstanceAvailable,
30
- formInstance === null || formInstance === void 0 ? void 0 : formInstance.formState.errors,
31
- formInstance === null || formInstance === void 0 ? void 0 : formInstance.formState.isSubmitted,
30
+ formInstance?.formState.errors,
31
+ formInstance?.formState.isSubmitted,
32
32
  readonly,
33
33
  ]);
34
34
  }