Skip to content

Commit 96d758e

Browse files
committed
refactor: enhance type safety and streamline modal confirmation logic
- Updated type definitions in the editor registry to incorporate UnwrapCodeEvaluators for improved type handling. - Refactored LayerSelectorSettingsModalWrapper to use a more specific type for settings, enhancing type safety. - Simplified modal confirmation logic in createModalApi by consolidating promise handling and reducing code duplication.
1 parent 6854a36 commit 96d758e

File tree

3 files changed

+21
-31
lines changed

3 files changed

+21
-31
lines changed

shesha-reactjs/src/designer-components/inputComponent/wrappers/index.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,15 @@ import { KeyInformationBarColumnsWrapper } from "./keyInformationBarColumns";
4343
import { SizableColumnsConfigWrapper } from "./sizableColumnsConfig";
4444
import { LayerSelectorSettingsModalWrapper } from "./layerSelectorSettingsModal";
4545
import { ThreeStateSwitchWrapper } from "./threeStateSwitch";
46+
import { UnwrapCodeEvaluators } from "@/index";
4647

4748

4849
type InputType = ISettingsInputProps['type'];
4950

5051
export type EditorComponent = FC<ISettingsInputProps>;
5152

5253
type EditorDictionary = {
53-
[K in InputType]: FC<BaseInputProps & { type: K }>;
54+
[K in InputType]: FC<UnwrapCodeEvaluators<BaseInputProps & { type: K }>> | FC<BaseInputProps & { type: K }>;
5455
};
5556

5657
export const editorRegistry: EditorDictionary = {
@@ -80,7 +81,7 @@ export const editorRegistry: EditorDictionary = {
8081
columnsList: ColumnsListWrapper,
8182
labelValueEditor: LabelValueEditorWrapper,
8283
componentSelector: ComponentSelectorWrapper,
83-
itemListConfiguratorModal: ItemListConfiguratorModalWrapper as any,
84+
itemListConfiguratorModal: ItemListConfiguratorModalWrapper,
8485
dataSortingEditor: DataSortingEditorWrapper,
8586
queryBuilder: QueryBuilderWrapper,
8687
filtersList: FiltersListWrapper,
@@ -90,7 +91,7 @@ export const editorRegistry: EditorDictionary = {
9091
RefListItemSelectorSettingsModal: RefListItemSelectorSettingsModalWrapper,
9192
Password: PasswordWrapper,
9293
date: DateWrapper,
93-
layerSelectorSettingsModal: LayerSelectorSettingsModalWrapper as any,
94+
layerSelectorSettingsModal: LayerSelectorSettingsModalWrapper,
9495
// TODO: check usages and remove or implement wrapper
9596
settingsInput: undefined,
9697
endpointsAutocomplete: EndpointsAutocompleteWrapper,
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import LayerSelectorSettingsModal from '@/components/layerEditor/modal';
22
import { ILayerSelectorSettingsInputProps } from '@/designer-components/settingsInput/interfaces';
33
import React from 'react';
4-
import { FCUnwrapped } from '@/providers/form/models';
4+
import { FCUnwrapped, FormMarkup } from '@/providers/form/models';
55

66
export const LayerSelectorSettingsModalWrapper: FCUnwrapped<ILayerSelectorSettingsInputProps> = (props) => {
77
const { value, readOnly, onChange, settings } = props;
@@ -10,7 +10,7 @@ export const LayerSelectorSettingsModalWrapper: FCUnwrapped<ILayerSelectorSettin
1010
value={value}
1111
onChange={(e) => onChange(e)}
1212
readOnly={readOnly}
13-
settings={settings as any}
13+
settings={settings as unknown as FormMarkup}
1414
/>
1515
);
1616
};

shesha-reactjs/src/providers/dynamicModal/modalApi.tsx

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -267,32 +267,21 @@ export const createModalApi = (
267267
confirm: (args: ConfirmModalArgs): Promise<boolean> => {
268268
const { title = 'Confirm', content, okText = 'Yes', cancelText = 'No', okType = 'primary' } = args;
269269

270-
// Use Ant Design's modal API if available, otherwise use the static Modal.confirm
271-
if (modalApi) {
272-
return new Promise<boolean>((resolve) => {
273-
modalApi.confirm({
274-
title,
275-
content,
276-
okText,
277-
cancelText,
278-
okType,
279-
onOk: () => resolve(true),
280-
onCancel: () => resolve(false),
281-
});
282-
});
283-
} else {
284-
return new Promise<boolean>((resolve) => {
285-
AntModal.confirm({
286-
title,
287-
content,
288-
okText,
289-
cancelText,
290-
okType,
291-
onOk: () => resolve(true),
292-
onCancel: () => resolve(false),
293-
});
294-
});
295-
}
270+
return new Promise<boolean>((resolve) => {
271+
const options = {
272+
title,
273+
content,
274+
okText,
275+
cancelText,
276+
okType,
277+
onOk: () => resolve(true),
278+
onCancel: () => resolve(false),
279+
};
280+
281+
// Use Ant Design's modal API if available, otherwise use the static Modal.confirm
282+
const confirmFn = modalApi ? modalApi.confirm : AntModal.confirm;
283+
confirmFn(options);
284+
});
296285
},
297286

298287
warning: createAlertHandler('warning', 'Warning', modalApi),

0 commit comments

Comments
 (0)