@gridsuite/commons-ui 0.292.0 → 0.294.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.
- package/dist/components/ui/reactHookForm/directory-item-input/directory-item-input.js +67 -26
- package/dist/features/index.js +32 -11
- package/dist/features/process-configs/common/FormSection.d.ts +8 -0
- package/dist/features/process-configs/common/FormSection.js +11 -0
- package/dist/features/process-configs/common/FormSubSection.d.ts +8 -0
- package/dist/features/process-configs/common/FormSubSection.js +11 -0
- package/dist/features/process-configs/common/GeneralInformationSection.d.ts +8 -0
- package/dist/features/process-configs/{shortcircuit/sc-process-config-edition.utils.js → common/GeneralInformationSection.js} +57 -54
- package/dist/features/process-configs/{security-analysis/index.d.ts → common/ModificationsSubSection.d.ts} +1 -3
- package/dist/features/process-configs/common/ModificationsSubSection.js +14 -0
- package/dist/features/process-configs/common/ProvidersParametersSubSection.d.ts +5 -0
- package/dist/features/process-configs/{loadflow/lf-process-config-edition.js → common/ProvidersParametersSubSection.js} +35 -26
- package/dist/features/process-configs/common/SpecificInformationSection.d.ts +8 -0
- package/dist/features/process-configs/common/SpecificInformationSection.js +25 -0
- package/dist/features/process-configs/common/index.d.ts +13 -1
- package/dist/features/process-configs/common/index.js +26 -2
- package/dist/features/process-configs/common/process-config-backend.type.d.ts +15 -0
- package/dist/features/process-configs/common/process-config-form.constants.d.ts +7 -0
- package/dist/features/process-configs/common/process-config-form.constants.js +39 -0
- package/dist/features/process-configs/common/process-config-form.schema.d.ts +29 -0
- package/dist/features/process-configs/{loadflow/lf-process-config-edition.utils.js → common/process-config-form.schema.js} +33 -51
- package/dist/features/process-configs/common/process-config-form.types.d.ts +45 -0
- package/dist/features/process-configs/common/process-config-mapping.d.ts +4 -0
- package/dist/features/process-configs/common/process-config-mapping.js +57 -0
- package/dist/features/process-configs/common/process-config-modifications-edition.utils.d.ts +0 -3
- package/dist/features/process-configs/common/process-config-modifications-edition.utils.js +0 -2
- package/dist/features/process-configs/common/process-config-type.definitions.d.ts +56 -0
- package/dist/features/process-configs/common/process-config-type.definitions.js +70 -0
- package/dist/features/process-configs/form/components/ProcessTypeChangeDialog.d.ts +13 -0
- package/dist/features/process-configs/form/components/ProcessTypeChangeDialog.js +27 -0
- package/dist/features/process-configs/form/components/ProcessTypeSelect.d.ts +6 -0
- package/dist/features/process-configs/form/components/ProcessTypeSelect.js +69 -0
- package/dist/features/process-configs/form/hooks/usePrefillSelection.d.ts +19 -0
- package/dist/features/process-configs/form/hooks/usePrefillSelection.js +51 -0
- package/dist/features/process-configs/form/hooks/useProcessConfigForm.d.ts +19 -0
- package/dist/features/process-configs/form/hooks/useProcessConfigForm.js +74 -0
- package/dist/features/process-configs/form/hooks/useProcessTypeGuard.d.ts +10 -0
- package/dist/features/process-configs/form/hooks/useProcessTypeGuard.js +67 -0
- package/dist/features/process-configs/form/process-config-form.d.ts +2 -0
- package/dist/features/process-configs/form/process-config-form.js +170 -0
- package/dist/features/process-configs/form/utils/form.utils.d.ts +3 -0
- package/dist/features/process-configs/form/utils/form.utils.js +36 -0
- package/dist/features/process-configs/index.d.ts +3 -5
- package/dist/features/process-configs/index.js +33 -12
- package/dist/features/process-configs/process-config-edition-dialog.d.ts +2 -0
- package/dist/features/process-configs/{process-config.utils.js → process-config-edition-dialog.js} +86 -26
- package/dist/index.js +32 -11
- package/dist/translations/en/businessErrorsEn.js +1 -1
- package/dist/translations/en/processConfigEn.d.ts +18 -0
- package/dist/translations/en/processConfigEn.js +19 -1
- package/dist/translations/fr/businessErrorsFr.js +1 -1
- package/dist/translations/fr/processConfigFr.d.ts +18 -0
- package/dist/translations/fr/processConfigFr.js +19 -1
- package/package.json +1 -1
- package/dist/features/process-configs/lf-process-config-edition-dialog.d.ts +0 -3
- package/dist/features/process-configs/lf-process-config-edition-dialog.js +0 -128
- package/dist/features/process-configs/loadflow/index.d.ts +0 -9
- package/dist/features/process-configs/loadflow/index.js +0 -9
- package/dist/features/process-configs/loadflow/lf-process-config-edition.d.ts +0 -1
- package/dist/features/process-configs/loadflow/lf-process-config-edition.utils.d.ts +0 -39
- package/dist/features/process-configs/loadflow/lf-process-config.type.d.ts +0 -6
- package/dist/features/process-configs/process-config-edition.utils.d.ts +0 -13
- package/dist/features/process-configs/process-config.type.d.ts +0 -16
- package/dist/features/process-configs/process-config.type.js +0 -1
- package/dist/features/process-configs/process-config.utils.d.ts +0 -33
- package/dist/features/process-configs/sa-process-config-edition-dialog.d.ts +0 -3
- package/dist/features/process-configs/sa-process-config-edition-dialog.js +0 -128
- package/dist/features/process-configs/sc-process-config-edition-dialog.d.ts +0 -3
- package/dist/features/process-configs/sc-process-config-edition-dialog.js +0 -141
- package/dist/features/process-configs/security-analysis/index.js +0 -9
- package/dist/features/process-configs/security-analysis/sa-process-config-edition.d.ts +0 -1
- package/dist/features/process-configs/security-analysis/sa-process-config-edition.js +0 -100
- package/dist/features/process-configs/security-analysis/sa-process-config-edition.utils.d.ts +0 -45
- package/dist/features/process-configs/security-analysis/sa-process-config-edition.utils.js +0 -111
- package/dist/features/process-configs/security-analysis/sa-process-config.type.d.ts +0 -7
- package/dist/features/process-configs/security-analysis/sa-process-config.type.js +0 -1
- package/dist/features/process-configs/shortcircuit/index.d.ts +0 -9
- package/dist/features/process-configs/shortcircuit/index.js +0 -9
- package/dist/features/process-configs/shortcircuit/sc-process-config-edition.d.ts +0 -1
- package/dist/features/process-configs/shortcircuit/sc-process-config-edition.js +0 -90
- package/dist/features/process-configs/shortcircuit/sc-process-config-edition.utils.d.ts +0 -39
- package/dist/features/process-configs/shortcircuit/sc-process-config.type.d.ts +0 -6
- package/dist/features/process-configs/shortcircuit/sc-process-config.type.js +0 -1
- /package/dist/features/process-configs/{loadflow/lf-process-config.type.js → common/process-config-backend.type.js} +0 -0
- /package/dist/features/process-configs/{process-config-edition.utils.js → common/process-config-form.types.js} +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useState, useCallback } from "react";
|
|
2
|
+
import { FieldConstants } from "../../../../utils/constants/fieldConstants.js";
|
|
3
|
+
import "../../../../utils/conversionUtils.js";
|
|
4
|
+
import { ElementType } from "../../../../utils/types/elementType.js";
|
|
5
|
+
import "../../../../utils/types/equipmentType.js";
|
|
6
|
+
import "react/jsx-runtime";
|
|
7
|
+
import "@mui/icons-material";
|
|
8
|
+
import { getProcessConfigFormDefaultValues } from "../../common/process-config-form.constants.js";
|
|
9
|
+
function usePrefillSelection({ form, onFetchProcessConfig, selectedProcessType }) {
|
|
10
|
+
const [isSelectorOpen, setIsSelectorOpen] = useState(false);
|
|
11
|
+
const openSelector = useCallback(() => setIsSelectorOpen(true), []);
|
|
12
|
+
const closeSelector = useCallback(() => setIsSelectorOpen(false), []);
|
|
13
|
+
const itemFilter = useCallback(
|
|
14
|
+
(item) => item?.type === ElementType.PROCESS_CONFIG && item?.specificMetadata?.type === selectedProcessType,
|
|
15
|
+
[selectedProcessType]
|
|
16
|
+
);
|
|
17
|
+
const handleSelect = useCallback(
|
|
18
|
+
async (nodes) => {
|
|
19
|
+
closeSelector();
|
|
20
|
+
const selectedElement = nodes?.[0];
|
|
21
|
+
if (!selectedElement || !onFetchProcessConfig) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const prefillValues = await onFetchProcessConfig(
|
|
25
|
+
selectedElement.id,
|
|
26
|
+
selectedElement.name,
|
|
27
|
+
selectedElement.description
|
|
28
|
+
);
|
|
29
|
+
if (!prefillValues) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const currentDirectory = form.getValues(FieldConstants.DIRECTORY);
|
|
33
|
+
const currentName = form.getValues(FieldConstants.NAME);
|
|
34
|
+
form.reset(
|
|
35
|
+
{
|
|
36
|
+
...getProcessConfigFormDefaultValues("create"),
|
|
37
|
+
...prefillValues,
|
|
38
|
+
processType: selectedProcessType,
|
|
39
|
+
[FieldConstants.NAME]: currentName,
|
|
40
|
+
[FieldConstants.DIRECTORY]: currentDirectory
|
|
41
|
+
},
|
|
42
|
+
{ keepDefaultValues: true }
|
|
43
|
+
);
|
|
44
|
+
},
|
|
45
|
+
[closeSelector, form, onFetchProcessConfig, selectedProcessType]
|
|
46
|
+
);
|
|
47
|
+
return { isSelectorOpen, openSelector, itemFilter, handleSelect };
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
usePrefillSelection
|
|
51
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { UseFormReturn } from 'react-hook-form';
|
|
2
|
+
import { UUID } from 'node:crypto';
|
|
3
|
+
import { FetchPersistedProcessConfigHandler, ProcessConfigFormValues, ProcessConfigMode } from '../../common/process-config-form.types';
|
|
4
|
+
import type * as yup from 'yup';
|
|
5
|
+
type UseProcessConfigFormParams = {
|
|
6
|
+
mode: ProcessConfigMode;
|
|
7
|
+
processConfigUuid?: UUID;
|
|
8
|
+
processConfigName?: string;
|
|
9
|
+
description?: string | null;
|
|
10
|
+
fetchProcessConfig?: FetchPersistedProcessConfigHandler;
|
|
11
|
+
};
|
|
12
|
+
export type UseProcessConfigFormReturn = {
|
|
13
|
+
formMethods: UseFormReturn<ProcessConfigFormValues>;
|
|
14
|
+
formSchema: yup.ObjectSchema<ProcessConfigFormValues>;
|
|
15
|
+
defaultValues: ProcessConfigFormValues;
|
|
16
|
+
isLoading: boolean;
|
|
17
|
+
};
|
|
18
|
+
export declare function useProcessConfigForm({ mode, processConfigUuid, processConfigName, description, fetchProcessConfig, }: UseProcessConfigFormParams): UseProcessConfigFormReturn;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { yupResolver } from "@hookform/resolvers/yup";
|
|
2
|
+
import { useMemo, useState, useEffect } from "react";
|
|
3
|
+
import { useForm } from "react-hook-form";
|
|
4
|
+
import "../../../../utils/conversionUtils.js";
|
|
5
|
+
import { snackWithFallback } from "../../../../utils/error.js";
|
|
6
|
+
import "../../../../utils/types/equipmentType.js";
|
|
7
|
+
import "react/jsx-runtime";
|
|
8
|
+
import "@mui/icons-material";
|
|
9
|
+
import "react-intl";
|
|
10
|
+
import "@mui/material";
|
|
11
|
+
import "localized-countries";
|
|
12
|
+
import { useSnackMessage } from "../../../../hooks/useSnackMessage.js";
|
|
13
|
+
import { getProcessConfigFormData } from "../../common/process-config-mapping.js";
|
|
14
|
+
import { getProcessConfigFormDefaultValues } from "../../common/process-config-form.constants.js";
|
|
15
|
+
import { getProcessConfigFormSchema } from "../../common/process-config-form.schema.js";
|
|
16
|
+
function useProcessConfigForm({
|
|
17
|
+
mode,
|
|
18
|
+
processConfigUuid,
|
|
19
|
+
processConfigName,
|
|
20
|
+
description,
|
|
21
|
+
fetchProcessConfig
|
|
22
|
+
}) {
|
|
23
|
+
const defaultValues = useMemo(() => getProcessConfigFormDefaultValues(mode), [mode]);
|
|
24
|
+
const formSchema = useMemo(
|
|
25
|
+
() => getProcessConfigFormSchema(mode),
|
|
26
|
+
[mode]
|
|
27
|
+
);
|
|
28
|
+
const formMethods = useForm({
|
|
29
|
+
defaultValues,
|
|
30
|
+
resolver: yupResolver(formSchema)
|
|
31
|
+
});
|
|
32
|
+
const { reset } = formMethods;
|
|
33
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
34
|
+
const { snackError } = useSnackMessage();
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (mode !== "edit" || !processConfigUuid || !fetchProcessConfig) {
|
|
37
|
+
return void 0;
|
|
38
|
+
}
|
|
39
|
+
let cancelled = false;
|
|
40
|
+
setIsLoading(true);
|
|
41
|
+
(async () => {
|
|
42
|
+
try {
|
|
43
|
+
const persistedProcessConfig = await fetchProcessConfig(processConfigUuid);
|
|
44
|
+
if (!cancelled && persistedProcessConfig) {
|
|
45
|
+
const formData = await getProcessConfigFormData(
|
|
46
|
+
persistedProcessConfig,
|
|
47
|
+
processConfigName ?? "",
|
|
48
|
+
description ?? null
|
|
49
|
+
);
|
|
50
|
+
if (!cancelled) {
|
|
51
|
+
reset(formData);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
} catch (error) {
|
|
55
|
+
if (!cancelled) {
|
|
56
|
+
snackWithFallback(snackError, error, {
|
|
57
|
+
headerId: "processConfig/fetchProcessConfigError"
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
} finally {
|
|
61
|
+
if (!cancelled) {
|
|
62
|
+
setIsLoading(false);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
})();
|
|
66
|
+
return () => {
|
|
67
|
+
cancelled = true;
|
|
68
|
+
};
|
|
69
|
+
}, [mode, processConfigUuid, processConfigName, description, fetchProcessConfig, reset, snackError]);
|
|
70
|
+
return { formMethods, formSchema, defaultValues, isLoading };
|
|
71
|
+
}
|
|
72
|
+
export {
|
|
73
|
+
useProcessConfigForm
|
|
74
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { UseFormReturn } from 'react-hook-form';
|
|
2
|
+
import { Option } from '../../../../utils';
|
|
3
|
+
import { ProcessConfigFormValues } from '../../common/process-config-form.types';
|
|
4
|
+
export declare function useProcessTypeGuard(form: UseFormReturn<ProcessConfigFormValues>): {
|
|
5
|
+
selectedProcessType: "" | import('../..').ProcessType;
|
|
6
|
+
pendingProcessType: string | null;
|
|
7
|
+
checkProcessTypeChange: (nextValue: Option | null) => boolean;
|
|
8
|
+
confirmProcessTypeChange: () => void;
|
|
9
|
+
cancelProcessTypeChange: () => void;
|
|
10
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
import { useWatch } from "react-hook-form";
|
|
3
|
+
import { getProcessConfigFormDefaultValues } from "../../common/process-config-form.constants.js";
|
|
4
|
+
import { deepEqual, withoutProcessType } from "../utils/form.utils.js";
|
|
5
|
+
function useProcessTypeGuard(form) {
|
|
6
|
+
const { control } = form;
|
|
7
|
+
const selectedProcessType = useWatch({ control, name: "processType" });
|
|
8
|
+
const defaultValues = getProcessConfigFormDefaultValues("create");
|
|
9
|
+
const [confirmedProcessType, setConfirmedProcessType] = useState("");
|
|
10
|
+
const [pendingProcessType, setPendingProcessType] = useState(null);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (!selectedProcessType) {
|
|
13
|
+
setConfirmedProcessType("");
|
|
14
|
+
setPendingProcessType(null);
|
|
15
|
+
}
|
|
16
|
+
}, [selectedProcessType]);
|
|
17
|
+
const checkProcessTypeChange = useCallback(
|
|
18
|
+
(nextValue) => {
|
|
19
|
+
const nextProcessType = typeof nextValue === "string" ? nextValue : nextValue?.id ?? "";
|
|
20
|
+
if (!nextProcessType) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
if (!confirmedProcessType) {
|
|
24
|
+
setConfirmedProcessType(nextProcessType);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (nextProcessType === confirmedProcessType) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
const hasOtherChanges = !deepEqual(
|
|
31
|
+
withoutProcessType(form.getValues()),
|
|
32
|
+
withoutProcessType(defaultValues)
|
|
33
|
+
);
|
|
34
|
+
if (!hasOtherChanges) {
|
|
35
|
+
setConfirmedProcessType(nextProcessType);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
setPendingProcessType(nextProcessType);
|
|
39
|
+
return false;
|
|
40
|
+
},
|
|
41
|
+
[form, confirmedProcessType, defaultValues]
|
|
42
|
+
);
|
|
43
|
+
const cancelProcessTypeChange = useCallback(() => {
|
|
44
|
+
setPendingProcessType(null);
|
|
45
|
+
}, []);
|
|
46
|
+
const confirmProcessTypeChange = useCallback(() => {
|
|
47
|
+
if (!pendingProcessType) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
form.reset({
|
|
51
|
+
...defaultValues,
|
|
52
|
+
processType: pendingProcessType
|
|
53
|
+
});
|
|
54
|
+
setConfirmedProcessType(pendingProcessType);
|
|
55
|
+
setPendingProcessType(null);
|
|
56
|
+
}, [form, defaultValues, pendingProcessType]);
|
|
57
|
+
return {
|
|
58
|
+
selectedProcessType,
|
|
59
|
+
pendingProcessType,
|
|
60
|
+
checkProcessTypeChange,
|
|
61
|
+
confirmProcessTypeChange,
|
|
62
|
+
cancelProcessTypeChange
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export {
|
|
66
|
+
useProcessTypeGuard
|
|
67
|
+
};
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Stack, Divider } from "@mui/material";
|
|
3
|
+
import { useWatch } from "react-hook-form";
|
|
4
|
+
import { useIntl } from "react-intl";
|
|
5
|
+
import { ProcessTypeSelect } from "./components/ProcessTypeSelect.js";
|
|
6
|
+
import { ProcessTypeChangeDialog } from "./components/ProcessTypeChangeDialog.js";
|
|
7
|
+
import { usePrefillSelection } from "./hooks/usePrefillSelection.js";
|
|
8
|
+
import { useProcessTypeGuard } from "./hooks/useProcessTypeGuard.js";
|
|
9
|
+
import { GeneralInformationSection } from "../common/GeneralInformationSection.js";
|
|
10
|
+
import { FieldConstants } from "../../../utils/constants/fieldConstants.js";
|
|
11
|
+
import "../../../utils/conversionUtils.js";
|
|
12
|
+
import { ElementType } from "../../../utils/types/elementType.js";
|
|
13
|
+
import "../../../utils/types/equipmentType.js";
|
|
14
|
+
import "@mui/icons-material";
|
|
15
|
+
import "react";
|
|
16
|
+
import "../../../components/ui/overflowableText/OverflowableText.js";
|
|
17
|
+
import "localized-countries";
|
|
18
|
+
import "notistack";
|
|
19
|
+
import "../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
|
|
20
|
+
import "yup";
|
|
21
|
+
import { DirectoryItemSelector } from "../../../components/ui/directoryItemSelector/DirectoryItemSelector.js";
|
|
22
|
+
import "../../../components/ui/reactHookForm/numbers/RangeInput.js";
|
|
23
|
+
import "../../../components/ui/dialogs/descriptionModificationDialog/DescriptionModificationDialog.js";
|
|
24
|
+
import "../../../components/ui/reactHookForm/expandableInput/ExpandableInput.js";
|
|
25
|
+
import "../../../components/ui/reactHookForm/directory-item-input/directory-item-utils.js";
|
|
26
|
+
import "@hello-pangea/dnd";
|
|
27
|
+
import "../../../components/ui/dialogs/elementSaveDialog/ElementSaveDialog.js";
|
|
28
|
+
import "../../../components/ui/snackbarProvider/SnackbarProvider.js";
|
|
29
|
+
import "../../../chunks/module.pXeJjFiM.js";
|
|
30
|
+
import "react-resizable-panels";
|
|
31
|
+
import "react-papaparse";
|
|
32
|
+
import "../../../components/ui/treeViewFinder/TreeViewFinder.js";
|
|
33
|
+
import "react-dom";
|
|
34
|
+
import "../../../chunks/index.BJsVzTMz.js";
|
|
35
|
+
import "clsx";
|
|
36
|
+
import "../../../components/composite/filter/FilterCreationDialog.js";
|
|
37
|
+
import "../../../components/composite/filter/HeaderFilterForm.js";
|
|
38
|
+
import "../../../components/composite/filter/explicitNaming/ExplicitNamingFilterForm.js";
|
|
39
|
+
import "../../../components/composite/filter/expert/ExpertFilterForm.js";
|
|
40
|
+
import "../../../components/composite/filter/expert/ExpertFilterEditionDialog.js";
|
|
41
|
+
import "../../../components/composite/filter/expert/expertFilterConstants.js";
|
|
42
|
+
import "react-querybuilder";
|
|
43
|
+
import "uuid";
|
|
44
|
+
import "../../../components/composite/filter/explicitNaming/ExplicitNamingFilterEditionDialog.js";
|
|
45
|
+
import "../../../components/composite/filter/utils/filterFormUtils.js";
|
|
46
|
+
import "@react-querybuilder/material";
|
|
47
|
+
import "../../../components/composite/reactQueryBuilder/CustomReactQueryBuilder.js";
|
|
48
|
+
import "../../../components/composite/reactQueryBuilder/PropertyValueEditor.js";
|
|
49
|
+
import "../../../components/composite/agGridTable/BottomTableButtons.js";
|
|
50
|
+
import "../../../components/composite/agGridTable/CustomAgGridTable.js";
|
|
51
|
+
import "ag-grid-community";
|
|
52
|
+
import "../../../components/composite/customAGGrid/customAggrid.js";
|
|
53
|
+
import "../../../components/composite/customAGGrid/context/custom-aggrid-context.js";
|
|
54
|
+
import "mathjs";
|
|
55
|
+
import "../../../components/composite/report/report-viewer/log-table/log-table.js";
|
|
56
|
+
import "react-window";
|
|
57
|
+
import "../../../components/composite/report/report-treeview/treeview-item.js";
|
|
58
|
+
import "../../../components/composite/report/report-viewer/context/report-viewer-context.js";
|
|
59
|
+
import "../../parameters/common/parameter-layout/parameter-layout-provider.js";
|
|
60
|
+
import "../../parameters/common/widget/parameter-line-slider.js";
|
|
61
|
+
import "../../parameters/common/contingency-table/contingency-table.js";
|
|
62
|
+
import "../../parameters/common/contingency-table/columns-definitions.js";
|
|
63
|
+
import "@hookform/resolvers/yup";
|
|
64
|
+
import "../../parameters/network-visualizations/constants.js";
|
|
65
|
+
import "../../parameters/loadflow/load-flow-parameters-context.js";
|
|
66
|
+
import "../../parameters/loadflow/load-flow-parameters-utils.js";
|
|
67
|
+
import "../../parameters/loadflow/load-flow-parameters-content.js";
|
|
68
|
+
import "../../parameters/short-circuit/short-circuit-parameters-content.js";
|
|
69
|
+
import "../../parameters/short-circuit/short-circuit-parameters-utils.js";
|
|
70
|
+
import "../../parameters/voltage-init/constants.js";
|
|
71
|
+
import "../../parameters/voltage-init/voltage-init-form-utils.js";
|
|
72
|
+
import "../../parameters/security-analysis/constants.js";
|
|
73
|
+
import "../../parameters/security-analysis/security-analysis-parameters-utils.js";
|
|
74
|
+
import "../../parameters/sensi/utils.js";
|
|
75
|
+
import "../../parameters/sensi/columns-definitions.js";
|
|
76
|
+
import "../../parameters/dynamic-simulation/use-dynamic-simulation-parameters-form.js";
|
|
77
|
+
import "../../parameters/dynamic-simulation/dynamic-simulation.type.js";
|
|
78
|
+
import "../../parameters/dynamic-simulation/time-delay/time-delay-parameters-utils.js";
|
|
79
|
+
import "../../parameters/dynamic-simulation/time-delay/time-delay-parameters.js";
|
|
80
|
+
import "../../parameters/dynamic-simulation/solver/solver-parameters-utils.js";
|
|
81
|
+
import "../../parameters/dynamic-simulation/solver/solver-parameters.js";
|
|
82
|
+
import "../../parameters/dynamic-simulation/mapping/mapping-parameters-utils.js";
|
|
83
|
+
import "../../parameters/dynamic-simulation/network/network-parameters-utils.js";
|
|
84
|
+
import "../../parameters/dynamic-simulation/network/network-parameters.js";
|
|
85
|
+
import "../../parameters/dynamic-simulation/curve/dialog/curve-preview.js";
|
|
86
|
+
import "../../parameters/dynamic-simulation/curve/dialog/curve-selector.js";
|
|
87
|
+
import "../../parameters/dynamic-simulation/curve/common/grid-search.js";
|
|
88
|
+
import "../../parameters/dynamic-security-analysis/use-dynamic-security-analysis-parameters-form.js";
|
|
89
|
+
import "../../parameters/dynamic-security-analysis/scenario-parameters.js";
|
|
90
|
+
import "../../parameters/dynamic-security-analysis/contingency-parameters.js";
|
|
91
|
+
import "../../parameters/dynamic-security-analysis/dynamic-security-analysis.type.js";
|
|
92
|
+
import "../../parameters/dynamic-margin-calculation/time-delay-parameters.js";
|
|
93
|
+
import "../../parameters/dynamic-margin-calculation/loads-variations-parameters.js";
|
|
94
|
+
import "../../parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.js";
|
|
95
|
+
import "../../parameters/dynamic-margin-calculation/use-dynamic-margin-calculation-parameters-form.js";
|
|
96
|
+
import "../common/process-config-type.definitions.js";
|
|
97
|
+
import { SpecificInformationSection } from "../common/SpecificInformationSection.js";
|
|
98
|
+
import "../common/process-config-modifications-edition.utils.js";
|
|
99
|
+
import "../common/process-config-form.constants.js";
|
|
100
|
+
import "../common/process-config-form.schema.js";
|
|
101
|
+
function ProcessConfigForm({
|
|
102
|
+
form,
|
|
103
|
+
mode,
|
|
104
|
+
initialElementName,
|
|
105
|
+
activeDirectory,
|
|
106
|
+
onFetchProcessConfig
|
|
107
|
+
}) {
|
|
108
|
+
const { control } = form;
|
|
109
|
+
const isCreate = mode === "create";
|
|
110
|
+
const intl = useIntl();
|
|
111
|
+
const {
|
|
112
|
+
selectedProcessType,
|
|
113
|
+
pendingProcessType,
|
|
114
|
+
checkProcessTypeChange,
|
|
115
|
+
confirmProcessTypeChange,
|
|
116
|
+
cancelProcessTypeChange
|
|
117
|
+
} = useProcessTypeGuard(form);
|
|
118
|
+
const selectedDirectory = useWatch({ control, name: FieldConstants.DIRECTORY });
|
|
119
|
+
const { isSelectorOpen, openSelector, itemFilter, handleSelect } = usePrefillSelection({
|
|
120
|
+
form,
|
|
121
|
+
onFetchProcessConfig,
|
|
122
|
+
selectedProcessType
|
|
123
|
+
});
|
|
124
|
+
return /* @__PURE__ */ jsxs(Stack, { spacing: 3, sx: { paddingTop: 1 }, children: [
|
|
125
|
+
isCreate && /* @__PURE__ */ jsx(ProcessTypeSelect, { onCheckNewValue: checkProcessTypeChange }),
|
|
126
|
+
selectedProcessType !== "" && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
127
|
+
/* @__PURE__ */ jsx(Divider, {}),
|
|
128
|
+
/* @__PURE__ */ jsx(
|
|
129
|
+
GeneralInformationSection,
|
|
130
|
+
{
|
|
131
|
+
activeDirectory: isCreate ? selectedDirectory?.directoryItemId ?? "" : activeDirectory,
|
|
132
|
+
initialElementName,
|
|
133
|
+
withFolderField: isCreate
|
|
134
|
+
}
|
|
135
|
+
),
|
|
136
|
+
/* @__PURE__ */ jsx(
|
|
137
|
+
SpecificInformationSection,
|
|
138
|
+
{
|
|
139
|
+
control,
|
|
140
|
+
onPrefill: isCreate && onFetchProcessConfig ? openSelector : void 0
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
] }),
|
|
144
|
+
isCreate && isSelectorOpen && /* @__PURE__ */ jsx(
|
|
145
|
+
DirectoryItemSelector,
|
|
146
|
+
{
|
|
147
|
+
open: true,
|
|
148
|
+
onClose: handleSelect,
|
|
149
|
+
types: [ElementType.PROCESS_CONFIG],
|
|
150
|
+
equipmentTypes: [selectedProcessType],
|
|
151
|
+
itemFilter,
|
|
152
|
+
title: intl.formatMessage({ id: "selectProcessConfig" }),
|
|
153
|
+
onlyLeaves: true,
|
|
154
|
+
multiSelect: false,
|
|
155
|
+
validationButtonText: intl.formatMessage({ id: "validate" })
|
|
156
|
+
}
|
|
157
|
+
),
|
|
158
|
+
isCreate && /* @__PURE__ */ jsx(
|
|
159
|
+
ProcessTypeChangeDialog,
|
|
160
|
+
{
|
|
161
|
+
open: pendingProcessType !== null,
|
|
162
|
+
onCancel: cancelProcessTypeChange,
|
|
163
|
+
onConfirm: confirmProcessTypeChange
|
|
164
|
+
}
|
|
165
|
+
)
|
|
166
|
+
] });
|
|
167
|
+
}
|
|
168
|
+
export {
|
|
169
|
+
ProcessConfigForm
|
|
170
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
function withoutProcessType(values) {
|
|
2
|
+
const { processType, ...rest } = values;
|
|
3
|
+
return rest;
|
|
4
|
+
}
|
|
5
|
+
function deepEqual(a, b) {
|
|
6
|
+
if (Object.is(a, b)) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
if (a === null || b === null) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
if (typeof a !== "object" || typeof b !== "object") {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
16
|
+
if (!Array.isArray(a) || !Array.isArray(b)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
if (a.length !== b.length) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return a.every((value, index) => deepEqual(value, b[index]));
|
|
23
|
+
}
|
|
24
|
+
const aRecord = a;
|
|
25
|
+
const bRecord = b;
|
|
26
|
+
const aKeys = Object.keys(aRecord);
|
|
27
|
+
const bKeys = Object.keys(bRecord);
|
|
28
|
+
if (aKeys.length !== bKeys.length) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return aKeys.every((key) => Object.hasOwn(bRecord, key) && deepEqual(aRecord[key], bRecord[key]));
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
deepEqual,
|
|
35
|
+
withoutProcessType
|
|
36
|
+
};
|
|
@@ -5,8 +5,6 @@
|
|
|
5
5
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
6
6
|
*/
|
|
7
7
|
export * from './common';
|
|
8
|
-
export * from './
|
|
9
|
-
export * from './process-config
|
|
10
|
-
export * from './
|
|
11
|
-
export * from './sa-process-config-edition-dialog';
|
|
12
|
-
export * from './sc-process-config-edition-dialog';
|
|
8
|
+
export * from './form/hooks/useProcessConfigForm';
|
|
9
|
+
export * from './form/process-config-form';
|
|
10
|
+
export * from './process-config-edition-dialog';
|
|
@@ -1,20 +1,41 @@
|
|
|
1
|
+
import { FormSection } from "./common/FormSection.js";
|
|
2
|
+
import { FormSubSection } from "./common/FormSubSection.js";
|
|
3
|
+
import { GeneralInformationSection } from "./common/GeneralInformationSection.js";
|
|
4
|
+
import { ModificationsSubSection } from "./common/ModificationsSubSection.js";
|
|
5
|
+
import { ProvidersParametersSubSection } from "./common/ProvidersParametersSubSection.js";
|
|
6
|
+
import { SpecificInformationSection } from "./common/SpecificInformationSection.js";
|
|
1
7
|
import { ProcessType } from "./common/process-config.type.js";
|
|
2
|
-
import {
|
|
8
|
+
import { PROCESS_CONFIG_PARAMETER_FIELDS, PROCESS_CONFIG_TYPE_DEFINITIONS, getProcessConfigTypeDefinition, getProcessTypesRequiringParameter } from "./common/process-config-type.definitions.js";
|
|
3
9
|
import { ProcessConfigModificationsEdition } from "./common/process-config-modifications-edition.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
10
|
+
import { getProcessConfigModificationsBackendFromFormData, getProcessConfigModificationsFormData, processConfigModificationsShape } from "./common/process-config-modifications-edition.utils.js";
|
|
11
|
+
import { PROCESS_CONFIG_TYPES, getProcessConfigFormDefaultValues } from "./common/process-config-form.constants.js";
|
|
12
|
+
import { getProcessConfigFormSchema } from "./common/process-config-form.schema.js";
|
|
13
|
+
import { getProcessConfigBackendFromFormData, getProcessConfigFormData } from "./common/process-config-mapping.js";
|
|
14
|
+
import { useProcessConfigForm } from "./form/hooks/useProcessConfigForm.js";
|
|
15
|
+
import { ProcessConfigForm } from "./form/process-config-form.js";
|
|
16
|
+
import { ProcessConfigEditionDialog } from "./process-config-edition-dialog.js";
|
|
8
17
|
export {
|
|
9
|
-
|
|
18
|
+
FormSection,
|
|
19
|
+
FormSubSection,
|
|
20
|
+
GeneralInformationSection,
|
|
21
|
+
ModificationsSubSection,
|
|
22
|
+
PROCESS_CONFIG_PARAMETER_FIELDS,
|
|
23
|
+
PROCESS_CONFIG_TYPES,
|
|
24
|
+
PROCESS_CONFIG_TYPE_DEFINITIONS,
|
|
25
|
+
ProcessConfigEditionDialog,
|
|
26
|
+
ProcessConfigForm,
|
|
10
27
|
ProcessConfigModificationsEdition,
|
|
11
28
|
ProcessType,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
29
|
+
ProvidersParametersSubSection,
|
|
30
|
+
SpecificInformationSection,
|
|
31
|
+
getProcessConfigBackendFromFormData,
|
|
32
|
+
getProcessConfigFormData,
|
|
33
|
+
getProcessConfigFormDefaultValues,
|
|
34
|
+
getProcessConfigFormSchema,
|
|
16
35
|
getProcessConfigModificationsBackendFromFormData,
|
|
17
36
|
getProcessConfigModificationsFormData,
|
|
18
|
-
|
|
19
|
-
|
|
37
|
+
getProcessConfigTypeDefinition,
|
|
38
|
+
getProcessTypesRequiringParameter,
|
|
39
|
+
processConfigModificationsShape,
|
|
40
|
+
useProcessConfigForm
|
|
20
41
|
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { ProcessConfigEditionDialogProps } from './common';
|
|
2
|
+
export declare function ProcessConfigEditionDialog({ open, onClose, processConfigUuid, processConfigName, description, directory, fetchProcessConfig, updateProcessConfig, }: Readonly<ProcessConfigEditionDialogProps>): import("react").JSX.Element;
|
package/dist/features/process-configs/{process-config.utils.js → process-config-edition-dialog.js}
RENAMED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "
|
|
3
|
-
import "react
|
|
4
|
-
import "react-hook-form";
|
|
5
|
-
import "react";
|
|
6
|
-
import "react-intl";
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
import { useWatch } from "react-hook-form";
|
|
7
4
|
import "@mui/material";
|
|
8
5
|
import "@mui/icons-material";
|
|
6
|
+
import "react-intl";
|
|
9
7
|
import "../../components/ui/overflowableText/OverflowableText.js";
|
|
8
|
+
import { FieldConstants } from "../../utils/constants/fieldConstants.js";
|
|
10
9
|
import "../../utils/conversionUtils.js";
|
|
10
|
+
import { snackWithFallback } from "../../utils/error.js";
|
|
11
|
+
import { isDisabledValidationButton } from "../../utils/form-utils.js";
|
|
11
12
|
import "../../utils/types/equipmentType.js";
|
|
12
13
|
import "localized-countries";
|
|
13
|
-
import "
|
|
14
|
+
import { useSnackMessage } from "../../hooks/useSnackMessage.js";
|
|
14
15
|
import "../../components/ui/reactHookForm/provider/CustomFormProvider.js";
|
|
15
16
|
import "yup";
|
|
16
17
|
import "../../components/ui/treeViewFinder/TreeViewFinder.js";
|
|
@@ -19,6 +20,7 @@ import "../../components/ui/dialogs/descriptionModificationDialog/DescriptionMod
|
|
|
19
20
|
import "../../components/ui/reactHookForm/expandableInput/ExpandableInput.js";
|
|
20
21
|
import "../../components/ui/reactHookForm/directory-item-input/directory-item-utils.js";
|
|
21
22
|
import "@hello-pangea/dnd";
|
|
23
|
+
import { CustomMuiDialog } from "../../components/ui/dialogs/customMuiDialog/CustomMuiDialog.js";
|
|
22
24
|
import "../../components/ui/dialogs/elementSaveDialog/ElementSaveDialog.js";
|
|
23
25
|
import "../../components/ui/snackbarProvider/SnackbarProvider.js";
|
|
24
26
|
import "../../chunks/module.pXeJjFiM.js";
|
|
@@ -87,25 +89,83 @@ import "../parameters/dynamic-margin-calculation/time-delay-parameters.js";
|
|
|
87
89
|
import "../parameters/dynamic-margin-calculation/loads-variations-parameters.js";
|
|
88
90
|
import "../parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.js";
|
|
89
91
|
import "../parameters/dynamic-margin-calculation/use-dynamic-margin-calculation-parameters-form.js";
|
|
90
|
-
import
|
|
91
|
-
import {
|
|
92
|
-
import
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
92
|
+
import "./common/process-config-type.definitions.js";
|
|
93
|
+
import { ProcessType } from "./common/process-config.type.js";
|
|
94
|
+
import "./common/process-config-modifications-edition.utils.js";
|
|
95
|
+
import "./common/process-config-form.constants.js";
|
|
96
|
+
import "./common/process-config-form.schema.js";
|
|
97
|
+
import { getProcessConfigBackendFromFormData } from "./common/process-config-mapping.js";
|
|
98
|
+
import { ProcessConfigForm } from "./form/process-config-form.js";
|
|
99
|
+
import { useProcessConfigForm } from "./form/hooks/useProcessConfigForm.js";
|
|
100
|
+
const PROCESS_CONFIG_EDIT_TITLE_IDS = {
|
|
101
|
+
[ProcessType.LOADFLOW]: "process_config/editLFProcessConfigTitle",
|
|
102
|
+
[ProcessType.SECURITY_ANALYSIS]: "process_config/editSAProcessConfigTitle",
|
|
103
|
+
[ProcessType.SHORT_CIRCUIT]: "process_config/editSCProcessConfigTitle"
|
|
104
|
+
};
|
|
105
|
+
function ProcessConfigEditionDialog({
|
|
106
|
+
open,
|
|
107
|
+
onClose,
|
|
108
|
+
processConfigUuid,
|
|
109
|
+
processConfigName,
|
|
110
|
+
description,
|
|
111
|
+
directory,
|
|
112
|
+
fetchProcessConfig,
|
|
113
|
+
updateProcessConfig
|
|
114
|
+
}) {
|
|
115
|
+
const { formMethods, formSchema, isLoading } = useProcessConfigForm({
|
|
116
|
+
mode: "edit",
|
|
117
|
+
processConfigUuid,
|
|
118
|
+
processConfigName,
|
|
119
|
+
description,
|
|
120
|
+
fetchProcessConfig
|
|
121
|
+
});
|
|
122
|
+
const {
|
|
123
|
+
control,
|
|
124
|
+
formState: { errors }
|
|
125
|
+
} = formMethods;
|
|
126
|
+
const { snackError } = useSnackMessage();
|
|
127
|
+
const selectedProcessType = useWatch({ control, name: "processType" });
|
|
128
|
+
const handleSave = useCallback(
|
|
129
|
+
async (values) => {
|
|
130
|
+
try {
|
|
131
|
+
await updateProcessConfig(
|
|
132
|
+
processConfigUuid,
|
|
133
|
+
values[FieldConstants.NAME] ?? "",
|
|
134
|
+
values[FieldConstants.DESCRIPTION] ?? "",
|
|
135
|
+
getProcessConfigBackendFromFormData(values)
|
|
136
|
+
);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
snackWithFallback(snackError, error, { headerId: "processConfig/updateProcessConfigError" });
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
[processConfigUuid, updateProcessConfig, snackError]
|
|
142
|
+
);
|
|
143
|
+
return /* @__PURE__ */ jsx(
|
|
144
|
+
CustomMuiDialog,
|
|
145
|
+
{
|
|
146
|
+
titleId: PROCESS_CONFIG_EDIT_TITLE_IDS[selectedProcessType] ?? "processConfigEditTitle",
|
|
147
|
+
open,
|
|
148
|
+
onClose,
|
|
149
|
+
onSave: handleSave,
|
|
150
|
+
formContext: {
|
|
151
|
+
...formMethods,
|
|
152
|
+
validationSchema: formSchema,
|
|
153
|
+
removeOptional: true
|
|
154
|
+
},
|
|
155
|
+
disabledSave: isLoading || isDisabledValidationButton(errors),
|
|
156
|
+
isDataFetching: isLoading,
|
|
157
|
+
children: /* @__PURE__ */ jsx(
|
|
158
|
+
ProcessConfigForm,
|
|
159
|
+
{
|
|
160
|
+
form: formMethods,
|
|
161
|
+
mode: "edit",
|
|
162
|
+
initialElementName: processConfigName,
|
|
163
|
+
activeDirectory: directory
|
|
164
|
+
}
|
|
165
|
+
)
|
|
166
|
+
}
|
|
167
|
+
);
|
|
107
168
|
}
|
|
108
169
|
export {
|
|
109
|
-
|
|
110
|
-
isProcessType
|
|
170
|
+
ProcessConfigEditionDialog
|
|
111
171
|
};
|