diff --git a/src/components/diagrams/diagram-controls.tsx b/src/components/diagrams/diagram-controls.tsx index 5eb1942e0f..9e9b7bf622 100644 --- a/src/components/diagrams/diagram-controls.tsx +++ b/src/components/diagrams/diagram-controls.tsx @@ -16,14 +16,18 @@ import { TreeViewFinderNodeProps, } from '@gridsuite/commons-ui'; import IconButton from '@mui/material/IconButton'; -import UploadIcon from '@mui/icons-material/Upload'; +import HubIcon from '@mui/icons-material/Hub'; import Button from '@mui/material/Button'; import SaveIcon from '@mui/icons-material/Save'; import LoupeIcon from '@mui/icons-material/Loupe'; +import FilterAltIcon from '@mui/icons-material/FilterAlt'; import { Theme, Tooltip } from '@mui/material'; import { AppState } from 'redux/reducer'; import { FormattedMessage, useIntl } from 'react-intl'; import { UUID } from 'crypto'; +import { useParameterState } from '../dialogs/parameters/use-parameters-state'; +import { PARAM_DEVELOPER_MODE } from '../../utils/config-params'; +import { EQUIPMENT_TYPES } from '../utils/equipment-types'; const styles = { actionIcon: (theme: Theme) => ({ @@ -57,7 +61,8 @@ const styles = { interface DiagramControlsProps { onSave?: (data: IElementCreationDialog) => void; - onLoad?: (elementUuid: UUID, elementType: ElementType, elementName: string) => void; + onSetNadConfig?: (nadConfigUuid: UUID) => void; + onSetFilter?: (filterUuid: UUID) => void; isEditNadMode: boolean; onToggleEditNadMode?: (isEditMode: boolean) => void; onExpandAllVoltageLevels?: () => void; @@ -66,7 +71,8 @@ interface DiagramControlsProps { const DiagramControls: React.FC = ({ onSave, - onLoad, + onSetNadConfig, + onSetFilter, isEditNadMode, onToggleEditNadMode, onExpandAllVoltageLevels, @@ -74,9 +80,12 @@ const DiagramControls: React.FC = ({ }) => { const intl = useIntl(); const [isSaveDialogOpen, setIsSaveDialogOpen] = useState(false); - const [isLoadSelectorOpen, setIsLoadSelectorOpen] = useState(false); + const [isNadConfigSelectorOpen, setIsNadConfigSelectorOpen] = useState(false); + const [isFilterSelectorOpen, setIsFilterSelectorOpen] = useState(false); const studyUuid = useSelector((state: AppState) => state.studyUuid); + const [enableDeveloperMode] = useParameterState(PARAM_DEVELOPER_MODE); + const handleCloseSaveDialog = () => { setIsSaveDialogOpen(false); }; @@ -85,12 +94,20 @@ const DiagramControls: React.FC = ({ setIsSaveDialogOpen(true); }; - const handleCloseLoadSelector = () => { - setIsLoadSelectorOpen(false); + const handleCloseNadConfigSelector = () => { + setIsNadConfigSelectorOpen(false); + }; + + const handleClickNadConfigIcon = () => { + setIsNadConfigSelectorOpen(true); + }; + + const handleCloseFilterSelector = () => { + setIsFilterSelectorOpen(false); }; - const handleClickLoadIcon = () => { - setIsLoadSelectorOpen(true); + const handleClickFilterIcon = () => { + setIsFilterSelectorOpen(true); }; const handleClickExpandAllVoltageLevelsIcon = () => { @@ -105,17 +122,30 @@ const DiagramControls: React.FC = ({ } }; - const handleLoad = (elementUuid: UUID, elementType: ElementType, elementName: string) => { - if (onLoad) { - onLoad(elementUuid, elementType, elementName); + const handleSetNadConfig = (nadConfigUuid: UUID) => { + if (onSetNadConfig) { + onSetNadConfig(nadConfigUuid); } }; - const selectElement = (selectedElements: TreeViewFinderNodeProps[]) => { + const handleSetFilter = (filterUuid: UUID) => { + if (onSetFilter) { + onSetFilter(filterUuid); + } + }; + + const selectNadConfig = (selectedElements: TreeViewFinderNodeProps[]) => { if (selectedElements.length > 0) { - handleLoad(selectedElements[0].id, selectedElements[0].type!, selectedElements[0].name); + handleSetNadConfig(selectedElements[0].id); } - handleCloseLoadSelector(); + handleCloseNadConfigSelector(); + }; + + const selectFilter = (selectedElements: TreeViewFinderNodeProps[]) => { + if (selectedElements.length > 0) { + handleSetFilter(selectedElements[0].id); + } + handleCloseFilterSelector(); }; const handleToggleEditMode = () => { @@ -140,14 +170,23 @@ const DiagramControls: React.FC = ({ - }> - - - - {isEditNadMode && ( <>
+ {enableDeveloperMode && ( + <> + }> + + + + + }> + + + + + + )} }> = ({ /> {' '} + {/* TODO only one component instead of two ? */} + { + const diagram = diagrams[diagramId]; + if (diagram && diagram.type === DiagramType.NETWORK_AREA_DIAGRAM) { + // TODO What about the diagram's name ? + updateDiagram({ + diagramUuid: diagramId, + type: DiagramType.NETWORK_AREA_DIAGRAM, + name: diagram.name, + nadConfigUuid: nadConfigUuid, + filterUuid: diagram.filterUuid, + voltageLevelIds: diagram.voltageLevelIds, + voltageLevelToExpandIds: diagram.voltageLevelToExpandIds, + voltageLevelToOmitIds: diagram.voltageLevelToOmitIds, + positions: [], // TODO Not the best, but this is a work in progress + }); + } + }, + [diagrams, updateDiagram] + ); + + const handleSetFilterInDiagram = useCallback( + (diagramId: UUID, filterUuid: UUID) => { + const diagram = diagrams[diagramId]; + if (diagram && diagram.type === DiagramType.NETWORK_AREA_DIAGRAM) { + // TODO What about the diagram's name ? + updateDiagram({ + diagramUuid: diagramId, + type: DiagramType.NETWORK_AREA_DIAGRAM, + name: diagram.name, + nadConfigUuid: diagram.nadConfigUuid, + filterUuid: filterUuid, + voltageLevelIds: diagram.voltageLevelIds, + voltageLevelToExpandIds: diagram.voltageLevelToExpandIds, + voltageLevelToOmitIds: diagram.voltageLevelToOmitIds, + positions: [], // TODO Not the best, but this is a work in progress + }); + } + }, + [diagrams, updateDiagram] + ); + const handleExpandAllVoltageLevels = useCallback( (diagramId: UUID) => { const diagram = diagrams[diagramId]; @@ -394,7 +438,12 @@ function DiagramGridLayout({ studyUuid, showInSpreadsheet, visible }: Readonly handleToggleEditMode(diagram.diagramUuid)} - onLoadNad={handleLoadNad} + onSetNadConfigInDiagram={(nadConfigUuid) => + handleSetNadConfigInDiagram(diagram.diagramUuid, nadConfigUuid) + } + onSetFilterInDiagram={(filterUuid) => + handleSetFilterInDiagram(diagram.diagramUuid, filterUuid) + } onExpandVoltageLevel={(vlId) => handleExpandVoltageLevelId(diagram.diagramUuid, vlId) } @@ -416,7 +465,8 @@ function DiagramGridLayout({ studyUuid, showInSpreadsheet, visible }: Readonly void; - readonly onLoadNad: (elementUuid: UUID, elementType: ElementType, elementName: string) => void; + readonly onSetNadConfigInDiagram: (nadConfigUuid: UUID) => void; + readonly onSetFilterInDiagram: (filterUuid: UUID) => void; readonly onExpandVoltageLevel: (vlId: string) => void; readonly onExpandAllVoltageLevels: () => void; readonly onHideVoltageLevel: (vlId: string) => void; @@ -82,7 +83,8 @@ function NetworkAreaDiagramContent(props: NetworkAreaDiagramContentProps) { visible, isEditNadMode, onToggleEditNadMode, - onLoadNad, + onSetNadConfigInDiagram, + onSetFilterInDiagram, diagramId, onExpandVoltageLevel, onExpandAllVoltageLevels, @@ -353,7 +355,8 @@ function NetworkAreaDiagramContent(props: NetworkAreaDiagramContentProps) { /> (null); const [hoveredEquipmentId, setHoveredEquipmentId] = useState(''); const [hoveredEquipmentType, setHoveredEquipmentType] = useState(''); - const [enableDeveloperMode] = useParameterState(PARAM_DEVELOPER_MODE); const computationStarting = useSelector((state: AppState) => state.computationStarting); const loadFlowStatus = useSelector((state: AppState) => state.computingStatus[ComputingType.LOAD_FLOW]); @@ -360,7 +359,6 @@ function SingleLineDiagramContent(props: SingleLineDiagramContentProps) { isAnyNodeBuilding, showEquipmentMenu, showBusMenu, - enableDeveloperMode, props.diagramId, props.svgType, theme,