diff --git a/src/components/ui/MainPanel/AdjustPlot.tsx b/src/components/ui/MainPanel/AdjustPlot.tsx index 3f26964c..71684123 100644 --- a/src/components/ui/MainPanel/AdjustPlot.tsx +++ b/src/components/ui/MainPanel/AdjustPlot.tsx @@ -468,6 +468,7 @@ const GlobalOptions = () =>{ const AdjustPlot = () => { const [isMobile, setIsMobile] = useState(false); + const [popoverSide, setPopoverSide] = useState<"left" | "top">("left"); const {plotOn} = useGlobalStore( useShallow(state=>({ @@ -480,15 +481,13 @@ const AdjustPlot = () => { useEffect(() => { - const checkWindowSize = () => { - setIsMobile(window.innerWidth <= 768); - }; - - checkWindowSize(); // Initial check - window.addEventListener("resize", checkWindowSize); - - return () => window.removeEventListener("resize", checkWindowSize); - }, []); + const handleResize = () => { + setPopoverSide(window.innerWidth < 768 ? "top" : "left"); + }; + handleResize(); + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, []); const enableCond = (plotOn) return ( @@ -511,7 +510,10 @@ const AdjustPlot = () => { - + Plot Settings diff --git a/src/components/ui/MainPanel/Dataset.tsx b/src/components/ui/MainPanel/Dataset.tsx index 8f6794bf..b1aa7b70 100644 --- a/src/components/ui/MainPanel/Dataset.tsx +++ b/src/components/ui/MainPanel/Dataset.tsx @@ -1,26 +1,38 @@ "use client"; -import React, { SetStateAction, useEffect, useState } from 'react'; +import React, { SetStateAction, useEffect, useState, ReactNode } from 'react'; import { useGlobalStore } from '@/utils/GlobalStates'; import { useShallow } from 'zustand/shallow'; import { Input } from '../input'; import { Button } from '../button'; -// import { CgDatabase } from "react-icons/cg"; import { TbDatabasePlus } from "react-icons/tb"; +import { TbVariable } from "react-icons/tb"; import LocalZarr from './LocalZarr'; -import { Popover, PopoverTrigger, PopoverContent, PopoverAnchor } from "@/components/ui/popover"; +import { Popover, PopoverTrigger, PopoverContent } from "@/components/ui/popover"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip" +import { + Dialog, + DialogContent, + DialogTitle, + DialogPortal +} from "@/components/ui/dialog"; const ZARR_STORES = { ESDC: 'https://s3.bgc-jena.mpg.de:9000/esdl-esdc-v3.0.2/esdc-16d-2.5deg-46x72x1440-3.0.2.zarr', SEASFIRE: 'https://s3.bgc-jena.mpg.de:9000/misc/seasfire_rechunked.zarr', }; -const DescriptionContent = ({setOpenVariables}:{setOpenVariables : React.Dispatch>}) => { +const DescriptionContent = ({ + setOpenVariables, + onCloseDialog, +}: { + setOpenVariables: React.Dispatch>; + onCloseDialog: () => void; +}) => { const {titleDescription} = useGlobalStore(useShallow(state => ({ titleDescription: state.titleDescription }))) @@ -28,24 +40,53 @@ const DescriptionContent = ({setOpenVariables}:{setOpenVariables : React.Dispatc return (
- Title -

- {title ? title : "No Title"} +

+ {title ? title : "Store"}

- Description -

{description ? description : "No Description"}

+

+ {description ? description : "No Description"} +

+ onClick={() => { + setOpenVariables(true); + onCloseDialog(); + }} + > + Open Variables + +
) } +const DatasetOption = ({ + children, + active, + onClick, +}: { + children: ReactNode; + active: boolean; + onClick: () => void; +}) => { + return ( + + ); +}; + + const Dataset = ({setOpenVariables} : {setOpenVariables: React.Dispatch>}) => { const [showStoreInput, setShowStoreInput] = useState(false); const [showLocalInput, setShowLocalInput] = useState(false); @@ -53,7 +94,7 @@ const Dataset = ({setOpenVariables} : {setOpenVariables: React.Dispatch('ESDC') const [openDescription, setOpenDescription] = useState(false) - const { setInitStore, setVariable } = useGlobalStore( + const { setInitStore } = useGlobalStore( useShallow((state) => ({ setInitStore: state.setInitStore, setVariable: state.setVariable, @@ -70,7 +111,8 @@ const Dataset = ({setOpenVariables} : {setOpenVariables: React.Dispatch + <> +
@@ -87,127 +129,115 @@ const Dataset = ({setOpenVariables} : {setOpenVariables: React.Dispatch
- {popoverSide === "left" ? ( - - Select dataset - - ) : ( - - Select dataset - - )} + + Select dataset +
- -

Curated

- - { + const target = e.target as HTMLElement; + // If the click is inside the MetaData popover, do not close + if (target.closest('[data-meta-popover]')) { + e.preventDefault(); + } + }} + > +
+

Curated

+ { setShowStoreInput(false); setShowLocalInput(false); - setActiveOption('ESDC') + setActiveOption('ESDC'); setInitStore(ZARR_STORES.ESDC); + setOpenDescription(true); }} > - - - - - - - - - - - - - - - -
-

Personal

-
- - {showStoreInput && ( -
) => { - e.preventDefault(); - const input = e.currentTarget.elements[0] as HTMLInputElement; - setInitStore(input.value); + Seasfire + + +
+

Personal

+
+ { + setShowStoreInput((prev) => !prev); + setActiveOption('remote'); }} > - - - - )} -
- - -
- - {showLocalInput && ( -
- -
- )} -
-
- - - -
+ + + + )} +
+
+ { + setShowLocalInput((prev) => !prev); + setShowStoreInput(false); + setActiveOption('local'); + }} + > + Local + + {showLocalInput && ( +
+ +
+ )} +
+
+ + + {} + + setOpenDescription(false)} + /> + + + + ); }; diff --git a/src/components/ui/MainPanel/PlayButton.tsx b/src/components/ui/MainPanel/PlayButton.tsx index 22ba50cd..0ef704a6 100644 --- a/src/components/ui/MainPanel/PlayButton.tsx +++ b/src/components/ui/MainPanel/PlayButton.tsx @@ -193,10 +193,20 @@ const PlayButton = () => { const [showOptions, setShowOptions] = useState(false) const cond = useMemo(()=>!isFlat && plotOn, [isFlat,plotOn]) const enableCond = (!isFlat && plotOn) + const [popoverSide, setPopoverSide] = useState<"left" | "top">("left"); useEffect(()=>{ setShowOptions(false) },[reFetch]) + + useEffect(() => { + const handleResize = () => { + setPopoverSide(window.innerWidth < 768 ? "top" : "left"); + }; + handleResize(); + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, []); return ( <> @@ -216,9 +226,14 @@ const PlayButton = () => {
- + Animation controls + diff --git a/src/components/ui/MainPanel/PlotType.tsx b/src/components/ui/MainPanel/PlotType.tsx index 2d228c93..a8534b6c 100644 --- a/src/components/ui/MainPanel/PlotType.tsx +++ b/src/components/ui/MainPanel/PlotType.tsx @@ -79,15 +79,12 @@ const PlotType = () => {
- {popoverSide === "left" ? ( - - Change plot type - - ) : ( - - Change plot type - - )} + + Change plot type +