Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 72 additions & 22 deletions src/components/diagrams/diagram-controls.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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) => ({
Expand Down Expand Up @@ -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;
Expand All @@ -66,17 +71,21 @@ interface DiagramControlsProps {

const DiagramControls: React.FC<DiagramControlsProps> = ({
onSave,
onLoad,
onSetNadConfig,
onSetFilter,
isEditNadMode,
onToggleEditNadMode,
onExpandAllVoltageLevels,
isDiagramLoading,
}) => {
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);
};
Expand All @@ -85,12 +94,20 @@ const DiagramControls: React.FC<DiagramControlsProps> = ({
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 = () => {
Expand All @@ -105,17 +122,30 @@ const DiagramControls: React.FC<DiagramControlsProps> = ({
}
};

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 = () => {
Expand All @@ -140,14 +170,23 @@ const DiagramControls: React.FC<DiagramControlsProps> = ({
<SaveIcon sx={styles.icon} />
</IconButton>
</Tooltip>
<Tooltip title={<FormattedMessage id={'AddFromGridexplore'} />}>
<IconButton sx={styles.actionIcon} onClick={handleClickLoadIcon}>
<UploadIcon sx={styles.icon} />
</IconButton>
</Tooltip>
{isEditNadMode && (
<>
<hr style={{ margin: '2px 4px' }} />
{enableDeveloperMode && (
<>
<Tooltip title={<FormattedMessage id={'AddFromGridexplore'} />}>
<IconButton sx={styles.actionIcon} onClick={handleClickNadConfigIcon}>
<HubIcon sx={styles.icon} />
</IconButton>
</Tooltip>
<Tooltip title={<FormattedMessage id={'AddFromGridexplore'} />}>
<IconButton sx={styles.actionIcon} onClick={handleClickFilterIcon}>
<FilterAltIcon sx={styles.icon} />
</IconButton>
</Tooltip>
</>
)}
<Tooltip title={<FormattedMessage id={'expandAllVoltageLevels'} />}>
<IconButton
sx={styles.actionIcon}
Expand Down Expand Up @@ -179,9 +218,20 @@ const DiagramControls: React.FC<DiagramControlsProps> = ({
/>
<Box minWidth="12em">
<DirectoryItemSelector
open={isLoadSelectorOpen}
onClose={selectElement}
types={[ElementType.DIAGRAM_CONFIG, ElementType.FILTER]}
open={isNadConfigSelectorOpen}
onClose={selectNadConfig}
types={[ElementType.DIAGRAM_CONFIG]}
title={intl.formatMessage({
id: 'AddFromGridexplore',
})}
multiSelect={false}
/>{' '}
{/* TODO only one component instead of two ? */}
<DirectoryItemSelector
open={isFilterSelectorOpen}
onClose={selectFilter}
types={[ElementType.FILTER]}
equipmentTypes={[EQUIPMENT_TYPES.VOLTAGE_LEVEL]}
title={intl.formatMessage({
id: 'AddFromGridexplore',
})}
Expand Down
54 changes: 52 additions & 2 deletions src/components/diagrams/diagram-grid-layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,50 @@ function DiagramGridLayout({ studyUuid, showInSpreadsheet, visible }: Readonly<D
[createDiagram]
);

// TODO The positions are still a work in progress : if we do not remove them when adding a config or filter, they
// become all over the place because the NAD already contains at least a position, meaning new ones are not retrieved in the backend.
const handleSetNadConfigInDiagram = useCallback(
(diagramId: UUID, nadConfigUuid: 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: 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];
Expand Down Expand Up @@ -394,7 +438,12 @@ function DiagramGridLayout({ studyUuid, showInSpreadsheet, visible }: Readonly<D
visible={visible}
isEditNadMode={diagramsInEditMode.includes(diagram.diagramUuid)}
onToggleEditNadMode={(isEditMode) => handleToggleEditMode(diagram.diagramUuid)}
onLoadNad={handleLoadNad}
onSetNadConfigInDiagram={(nadConfigUuid) =>
handleSetNadConfigInDiagram(diagram.diagramUuid, nadConfigUuid)
}
onSetFilterInDiagram={(filterUuid) =>
handleSetFilterInDiagram(diagram.diagramUuid, filterUuid)
}
onExpandVoltageLevel={(vlId) =>
handleExpandVoltageLevelId(diagram.diagramUuid, vlId)
}
Expand All @@ -416,7 +465,8 @@ function DiagramGridLayout({ studyUuid, showInSpreadsheet, visible }: Readonly<D
diagrams,
diagramsInEditMode,
globalError,
handleLoadNad,
handleSetNadConfigInDiagram,
handleSetFilterInDiagram,
handleToggleEditMode,
loadingDiagrams,
handleExpandAllVoltageLevels,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
import { FEEDER_TYPES } from 'components/utils/feederType';
import {
ComputingType,
ElementType,

Check warning on line 37 in src/components/diagrams/networkAreaDiagram/network-area-diagram-content.tsx

View workflow job for this annotation

GitHub Actions / build / build

'ElementType' is defined but never used
EquipmentType,
IElementCreationDialog,
mergeSx,
Expand Down Expand Up @@ -67,7 +67,8 @@
visible: boolean;
isEditNadMode: boolean;
onToggleEditNadMode?: (isEditMode: boolean) => 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;
Expand All @@ -82,7 +83,8 @@
visible,
isEditNadMode,
onToggleEditNadMode,
onLoadNad,
onSetNadConfigInDiagram,
onSetFilterInDiagram,
diagramId,
onExpandVoltageLevel,
onExpandAllVoltageLevels,
Expand Down Expand Up @@ -353,7 +355,8 @@
/>
<DiagramControls
onSave={handleSaveNadConfig}
onLoad={onLoadNad}
onSetNadConfig={onSetNadConfigInDiagram}
onSetFilter={onSetFilterInDiagram}
isEditNadMode={isEditNadMode}
onToggleEditNadMode={onToggleEditNadMode}
onExpandAllVoltageLevels={onExpandAllVoltageLevels}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@
import EquipmentPopover from '../../tooltips/equipment-popover';
import { updateSwitchState } from '../../../services/study/network-modifications';
import { BusMenu } from 'components/menus/bus-menu';
import { PARAM_DEVELOPER_MODE } from 'utils/config-params';

Check warning on line 33 in src/components/diagrams/singleLineDiagram/single-line-diagram-content.tsx

View workflow job for this annotation

GitHub Actions / build / build

'PARAM_DEVELOPER_MODE' is defined but never used
import { startShortCircuitAnalysis } from '../../../services/study/short-circuit-analysis';
import { useOneBusShortcircuitAnalysisLoader } from '../use-one-bus-shortcircuit-analysis-loader';
import { setComputationStarting, setComputingStatus, setLogsFilter } from '../../../redux/actions';
import { AppState } from 'redux/reducer';
import { UUID } from 'crypto';
import { INVALID_LOADFLOW_OPACITY } from '../../../utils/colors';
import { useParameterState } from 'components/dialogs/parameters/use-parameters-state';

Check warning on line 40 in src/components/diagrams/singleLineDiagram/single-line-diagram-content.tsx

View workflow job for this annotation

GitHub Actions / build / build

'useParameterState' is defined but never used
import { DiagramType } from '../diagram.type';
import { useEquipmentMenu } from '../../../hooks/use-equipment-menu';
import useEquipmentDialogs from 'hooks/use-equipment-dialogs';
Expand Down Expand Up @@ -104,7 +104,6 @@
const [equipmentPopoverAnchorEl, setEquipmentPopoverAnchorEl] = useState<EventTarget | null>(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]);

Expand Down Expand Up @@ -360,7 +359,6 @@
isAnyNodeBuilding,
showEquipmentMenu,
showBusMenu,
enableDeveloperMode,
props.diagramId,
props.svgType,
theme,
Expand Down
Loading