diff --git a/frontend/src/components/visualizations/PublicVisualizationCard.tsx b/frontend/src/components/visualizations/PublicVisualizationCard.tsx index 5dda80784..abdbdecc8 100644 --- a/frontend/src/components/visualizations/PublicVisualizationCard.tsx +++ b/frontend/src/components/visualizations/PublicVisualizationCard.tsx @@ -1,5 +1,12 @@ -import React, { useState } from "react"; -import { Button, Card, CardActions, CardContent, Grid } from "@mui/material"; +import React, { useEffect, useState } from "react"; +import { + Button, + Card, + CardActions, + CardContent, + Grid, + IconButton, +} from "@mui/material"; import Collapse from "@mui/material/Collapse"; import { VisualizationDataDetail } from "./VisualizationDataDetail"; import { VisualizationDataOut } from "../../openapi/v2"; @@ -11,6 +18,8 @@ import { generatePublicVisPresignedUrl as generatePublicVisPresignedUrlAction, RESET_PUBLIC_VIS_DATA_PRESIGNED_URL, } from "../../actions/public_visualization"; +import FullscreenExitIcon from "@mui/icons-material/FullscreenExit"; +import FullscreenIcon from "@mui/icons-material/Fullscreen"; type publicPreviewProps = { publicVisComponentDefinition: VisComponentDefinitions; @@ -19,7 +28,8 @@ type publicPreviewProps = { export const PublicVisualizationCard = (props: publicPreviewProps) => { const { publicVisComponentDefinition, publicVisualizationDataItem } = props; - const [expanded, setExpanded] = React.useState(false); + const [expandInfo, setExpandInfo] = React.useState(false); + const [fullscreen, setFullscreen] = React.useState(false); // Default to normal view const [visShareModalOpen, setVisShareModalOpen] = useState(false); // share visualization const dispatch = useDispatch(); @@ -34,8 +44,12 @@ export const PublicVisualizationCard = (props: publicPreviewProps) => { (state: RootState) => state.publicVisualization.publicPresignedUrl ); + useEffect(() => { + if (expandInfo) setFullscreen(false); + }, [expandInfo]); + const handleExpandClick = () => { - setExpanded(!expanded); + setExpandInfo(!expandInfo); }; const handleShareLinkClick = () => { @@ -50,16 +64,27 @@ export const PublicVisualizationCard = (props: publicPreviewProps) => { dispatch({ type: RESET_PUBLIC_VIS_DATA_PRESIGNED_URL }); }; + const handleFullscreenToggle = () => { + setFullscreen(!fullscreen); + }; + return ( - - + + - + {React.cloneElement(publicVisComponentDefinition.component, { publicView: true, @@ -67,21 +92,18 @@ export const PublicVisualizationCard = (props: publicPreviewProps) => { })} - - {!expanded ? ( - - ) : ( - - )} - + + + + {fullscreen ? : } + - + { const { visComponentDefinition, fileId } = props; + const [fullscreen, setFullscreen] = React.useState(false); // Default to normal view + const handleFullscreenToggle = () => { + setFullscreen(!fullscreen); + }; + return ( - - + + {React.cloneElement(visComponentDefinition.component, { fileId: fileId, publicView: true, })} + + + {fullscreen ? : } + + ); diff --git a/frontend/src/components/visualizations/PublicVisualizationSpecCard.tsx b/frontend/src/components/visualizations/PublicVisualizationSpecCard.tsx index d034ba821..b7671d04e 100644 --- a/frontend/src/components/visualizations/PublicVisualizationSpecCard.tsx +++ b/frontend/src/components/visualizations/PublicVisualizationSpecCard.tsx @@ -1,9 +1,18 @@ -import React from "react"; -import { Button, Card, CardActions, CardContent, Grid } from "@mui/material"; +import React, { useEffect } from "react"; +import { + Button, + Card, + CardActions, + CardContent, + Grid, + IconButton, +} from "@mui/material"; import Collapse from "@mui/material/Collapse"; import { VisualizationConfigOut } from "../../openapi/v2"; import { VisComponentDefinitions } from "../../visualization.config"; import { VisualizationParamDetail } from "./VisualizationParamDetail"; +import FullscreenExitIcon from "@mui/icons-material/FullscreenExit"; +import FullscreenIcon from "@mui/icons-material/Fullscreen"; type publicPreviewProps = { visComponentDefinition: VisComponentDefinitions; @@ -12,22 +21,39 @@ type publicPreviewProps = { export const PublicVisualizationSpecCard = (props: publicPreviewProps) => { const { visComponentDefinition, visConfigEntry } = props; - const [expanded, setExpanded] = React.useState(false); + const [expandInfo, setExpandInfo] = React.useState(false); + const [fullscreen, setFullscreen] = React.useState(false); // Default to normal view + useEffect(() => { + if (expandInfo) setFullscreen(false); + }, [expandInfo]); + const handleExpandClick = () => { - setExpanded(!expanded); + setExpandInfo(!expandInfo); + }; + + const handleFullscreenToggle = () => { + setFullscreen(!fullscreen); }; + return ( - - - + + + {React.cloneElement(visComponentDefinition.component, { visConfigEntry: visConfigEntry, })} - - {!expanded ? ( + + {!expandInfo ? ( @@ -36,8 +62,11 @@ export const PublicVisualizationSpecCard = (props: publicPreviewProps) => { View )} + + {fullscreen ? : } + - + diff --git a/frontend/src/components/visualizations/VisualizationCard.tsx b/frontend/src/components/visualizations/VisualizationCard.tsx index 5d6b7b9a7..3380a2641 100644 --- a/frontend/src/components/visualizations/VisualizationCard.tsx +++ b/frontend/src/components/visualizations/VisualizationCard.tsx @@ -1,6 +1,15 @@ -import React, { useState } from "react"; -import { Button, Card, CardActions, CardContent, Grid } from "@mui/material"; +import React, { useState, useEffect } from "react"; +import { + Button, + Card, + CardActions, + CardContent, + Grid, + IconButton, +} from "@mui/material"; import Collapse from "@mui/material/Collapse"; +import FullscreenIcon from "@mui/icons-material/Fullscreen"; +import FullscreenExitIcon from "@mui/icons-material/FullscreenExit"; import { VisualizationDataDetail } from "./VisualizationDataDetail"; import { VisualizationDataOut } from "../../openapi/v2"; import { VisComponentDefinitions } from "../../visualization.config"; @@ -19,7 +28,8 @@ type previewProps = { export const VisualizationCard = (props: previewProps) => { const { visComponentDefinition, visualizationDataItem } = props; - const [expanded, setExpanded] = React.useState(false); + const [expandInfo, setExpandInfo] = React.useState(false); + const [fullscreen, setFullscreen] = React.useState(false); // Default to normal view const [visShareModalOpen, setVisShareModalOpen] = useState(false); // share visualization @@ -33,8 +43,12 @@ export const VisualizationCard = (props: previewProps) => { (state: RootState) => state.visualization.presignedUrl ); + useEffect(() => { + if (expandInfo) setFullscreen(false); + }, [expandInfo]); + const handleExpandClick = () => { - setExpanded(!expanded); + setExpandInfo(!expandInfo); }; const handleShareLinkClick = () => { @@ -46,37 +60,45 @@ export const VisualizationCard = (props: previewProps) => { dispatch({ type: RESET_VIS_DATA_PRESIGNED_URL }); }; + const handleFullscreenToggle = () => { + setFullscreen(!fullscreen); + }; + return ( - - + + - + {React.cloneElement(visComponentDefinition.component, { visualizationId: visualizationDataItem.id, })} - - {!expanded ? ( - - ) : ( - - )} - + + + + {fullscreen ? : } + - + { const { visComponentDefinition, fileId } = props; + const [fullscreen, setFullscreen] = React.useState(false); // Default to normal view + const handleFullscreenToggle = () => { + setFullscreen(!fullscreen); + }; return ( - - + + {React.cloneElement(visComponentDefinition.component, { fileId: fileId, })} + + + {fullscreen ? : } + + ); diff --git a/frontend/src/components/visualizations/VisualizationSpecCard.tsx b/frontend/src/components/visualizations/VisualizationSpecCard.tsx index 6c8da9c90..0b6d14bdd 100644 --- a/frontend/src/components/visualizations/VisualizationSpecCard.tsx +++ b/frontend/src/components/visualizations/VisualizationSpecCard.tsx @@ -1,9 +1,18 @@ -import React from "react"; -import { Button, Card, CardActions, CardContent, Grid } from "@mui/material"; +import React, { useEffect } from "react"; +import { + Button, + Card, + CardActions, + CardContent, + Grid, + IconButton, +} from "@mui/material"; import Collapse from "@mui/material/Collapse"; import { VisualizationConfigOut } from "../../openapi/v2"; import { VisComponentDefinitions } from "../../visualization.config"; import { VisualizationParamDetail } from "./VisualizationParamDetail"; +import FullscreenExitIcon from "@mui/icons-material/FullscreenExit"; +import FullscreenIcon from "@mui/icons-material/Fullscreen"; type previewProps = { visComponentDefinition: VisComponentDefinitions; @@ -12,22 +21,40 @@ type previewProps = { export const VisualizationSpecCard = (props: previewProps) => { const { visComponentDefinition, visConfigEntry } = props; - const [expanded, setExpanded] = React.useState(false); + const [expandInfo, setExpandInfo] = React.useState(false); + const [fullscreen, setFullscreen] = React.useState(false); // Default to normal view + + useEffect(() => { + if (expandInfo) setFullscreen(false); + }, [expandInfo]); + const handleExpandClick = () => { - setExpanded(!expanded); + setExpandInfo(!expandInfo); }; + + const handleFullscreenToggle = () => { + setFullscreen(!fullscreen); + }; + return ( - - - + + + {React.cloneElement(visComponentDefinition.component, { visConfigEntry: visConfigEntry, })} - - {!expanded ? ( + + {!expandInfo ? ( @@ -36,8 +63,11 @@ export const VisualizationSpecCard = (props: previewProps) => { View )} + + {fullscreen ? : } + - +