From e6982447eadbc72feaaae61a34491289e27fbe54 Mon Sep 17 00:00:00 2001 From: sBouzols Date: Tue, 16 Sep 2025 16:01:40 +0200 Subject: [PATCH] refactor(): Make CSV Export Button act homogeneously for all computation types (check status) Signed-off-by: sBouzols --- .../voltage-init-modification-dialog.tsx | 29 ++++++++++++++- .../loadflow/limit-violation-result.tsx | 6 +++ .../results/loadflow/load-flow-result-tab.tsx | 9 +++++ .../results/loadflow/load-flow-result.tsx | 12 +++++- .../results/loadflow/load-flow-result.type.ts | 4 +- .../security-analysis-result-tab.tsx | 3 +- .../state-estimation-quality-result.tsx | 6 +++ .../state-estimation-result-tab.tsx | 6 +++ .../state-estimation-result.type.ts | 5 ++- .../utils/renderTable-ExportCsv.tsx | 20 ++++++++-- src/components/voltage-init-result-tab.tsx | 3 ++ src/components/voltage-init-result.tsx | 37 +++++++++++++------ src/components/voltage-init-result.type.ts | 3 ++ 13 files changed, 121 insertions(+), 22 deletions(-) diff --git a/src/components/dialogs/network-modifications/voltage-init-modification/voltage-init-modification-dialog.tsx b/src/components/dialogs/network-modifications/voltage-init-modification/voltage-init-modification-dialog.tsx index f69f7cdef3..94f2ecff79 100644 --- a/src/components/dialogs/network-modifications/voltage-init-modification/voltage-init-modification-dialog.tsx +++ b/src/components/dialogs/network-modifications/voltage-init-modification/voltage-init-modification-dialog.tsx @@ -32,6 +32,9 @@ import { suppressEventsToPreventEditMode } from '../../commons/utils'; import { AGGRID_LOCALES } from '../../../../translations/not-intl/aggrid-locales'; import { useSelector } from 'react-redux'; import { AppState } from '../../../../redux/reducer'; +import { STUDY_VIEWS, StudyView } from 'components/utils/utils'; +import { UUID } from 'crypto'; +import { CurrentTreeNode } from 'components/graph/tree-node.type'; const styles = { container: { @@ -164,6 +167,9 @@ export interface EditData { } interface VoltageInitModificationProps { + currentNode: CurrentTreeNode; + studyUuid: UUID; + currentRootNetworkUuid: UUID; editData: EditData; onClose: () => void; onPreviewModeSubmit?: () => void; @@ -172,6 +178,9 @@ interface VoltageInitModificationProps { } const VoltageInitModificationDialog: FunctionComponent = ({ + studyUuid, + currentNode, + currentRootNetworkUuid, editData, onClose, onPreviewModeSubmit, @@ -184,6 +193,11 @@ const VoltageInitModificationDialog: FunctionComponent state.computedLanguage); + const appTabIndex = useSelector((state: AppState) => state.appTabIndex); + + const isExportCSVButtonDisabled = useMemo(() => { + return STUDY_VIEWS[appTabIndex] !== StudyView.RESULTS; + }, [appTabIndex]); const handleTabChange = useCallback((newValue: number) => { setTabIndex(newValue); @@ -505,10 +519,17 @@ const VoltageInitModificationDialog: FunctionComponent gridRef.current?.api?.exportDataAsCsv(params)} /> @@ -529,14 +550,18 @@ const VoltageInitModificationDialog: FunctionComponent = ({ + studyUuid, + nodeUuid, + currentRootNetworkUuid, result, isLoadingResult, columnDefs, @@ -95,6 +98,9 @@ export const LimitViolationResult: FunctionComponent <> {openLoaderTab && } = ({ {tabIndex === 0 && ( = ({ {tabIndex === 1 && ( = ({ )} {tabIndex === 2 && ( = ({ result, isLoadingResult, columnDefs }) => { +export const LoadFlowResult: FunctionComponent = ({ + studyUuid, + nodeUuid, + currentRootNetworkUuid, + result, + isLoadingResult, + columnDefs, +}) => { const theme = useTheme(); const intl = useIntl(); @@ -90,6 +97,9 @@ export const LoadFlowResult: FunctionComponent = ({ result, <> {openLoaderStatusTab && } = ({ + studyUuid, + nodeUuid, + currentRootNetworkUuid, result, isLoadingResult, columnDefs, @@ -106,6 +109,9 @@ export const StateEstimationQualityResult: FunctionComponent {openLoaderTab && } ; columns: any[]; defaultColDef: ColDef; @@ -44,6 +49,9 @@ interface RenderTableAndExportCsvProps { } export const RenderTableAndExportCsv: FunctionComponent = ({ + studyUuid, + nodeUuid, + rootNetworkUuid, gridRef, columns, defaultColDef, @@ -55,17 +63,23 @@ export const RenderTableAndExportCsv: FunctionComponent { - const isRowsEmpty = !rows || rows.length === 0; const language = useSelector((state: AppState) => state.computedLanguage); + const appTabIndex = useSelector((state: AppState) => state.appTabIndex); + const isExportCSVButtonDisabled = useMemo(() => { + return STUDY_VIEWS[appTabIndex] !== StudyView.RESULTS || !rows || rows.length === 0; + }, [appTabIndex, rows]); return ( gridRef.current?.api?.exportDataAsCsv(params)} diff --git a/src/components/voltage-init-result-tab.tsx b/src/components/voltage-init-result-tab.tsx index de1f1b89a6..59149c841c 100644 --- a/src/components/voltage-init-result-tab.tsx +++ b/src/components/voltage-init-result-tab.tsx @@ -68,6 +68,9 @@ export function VoltageInitResultTab({ return ( = ({ + studyUuid, + nodeUuid, + currentRootNetworkUuid, result = null, status, handleGlobalFilterChange, globalFilterOptions, }) => { const [tabIndex, setTabIndex] = useState(0); - const studyUuid = useSelector((state: AppState) => state.studyUuid); - const currentNode = useSelector((state: AppState) => state.currentTreeNode); - const currentRootNetworkUuid = useSelector((state: AppState) => state.currentRootNetworkUuid); const { snackError } = useSnackMessage(); const [disableApplyModifications, setDisableApplyModifications] = useState(!result?.modificationsGroupUuid); const [applyingModifications, setApplyingModifications] = useState(false); const [previewModificationsDialogOpen, setPreviewModificationsDialogOpen] = useState(false); const [voltageInitModification, setVoltageInitModification] = useState(); + // TODO remove after futur refactoring because we don't need more than the nodeUuid normally + const currentNode = useSelector((state: AppState) => state.currentTreeNode); const intl = useIntl(); @@ -134,8 +136,8 @@ export const VoltageInitResult: FunctionComponent = ({ const applyModifications = () => { setApplyingModifications(true); setDisableApplyModifications(true); - if (studyUuid && currentNode?.id && currentRootNetworkUuid) { - cloneVoltageInitModifications(studyUuid, currentNode.id, currentRootNetworkUuid) + if (studyUuid && nodeUuid && currentRootNetworkUuid) { + cloneVoltageInitModifications(studyUuid, nodeUuid, currentRootNetworkUuid) .catch((errmsg) => { snackError({ messageTxt: errmsg, @@ -152,8 +154,8 @@ export const VoltageInitResult: FunctionComponent = ({ const previewModifications = useCallback(() => { setApplyingModifications(true); setDisableApplyModifications(true); - if (studyUuid && currentNode?.id && currentRootNetworkUuid) { - getVoltageInitModifications(studyUuid, currentNode.id, currentRootNetworkUuid) + if (studyUuid && nodeUuid && currentRootNetworkUuid) { + getVoltageInitModifications(studyUuid, nodeUuid, currentRootNetworkUuid) .then((modificationList) => { // this endpoint returns a list, but we are expecting a single modification here setVoltageInitModification(modificationList.at(0)); @@ -171,7 +173,7 @@ export const VoltageInitResult: FunctionComponent = ({ }); } }, [ - currentNode?.id, + nodeUuid, currentRootNetworkUuid, snackError, studyUuid, @@ -190,11 +192,15 @@ export const VoltageInitResult: FunctionComponent = ({ }, [studyUuid]); const renderPreviewModificationsDialog = () => { + if (!currentNode) { + return null; + } if (voltageInitModification) { return ( setPreviewModificationsDialogOpen(false)} onPreviewModeSubmit={applyModifications} @@ -277,6 +283,9 @@ export const VoltageInitResult: FunctionComponent = ({ = ({ {renderHeaderReactiveSlacks(result)} = ({ function renderBusVoltagesTable(busVoltages: BusVoltages) { return ( void;