Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
7 changes: 6 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
VITE_WORKSPACE_LOCAL=true
VITE_WORKSPACE_LOCAL=true
VITE_OPEN_COSMOS_AUTH_DOMAIN=https://login.open-cosmos.com
VITE_OPEN_COSMOS_AUDIENCE=https://beeapp.open-cosmos.com
VITE_OPEN_COSMOS_REDIRECT_URI=https://eodatahub.org.uk/workspaces/
VITE_OPEN_COSMOS_SCOPE=openid profile email offline_access
VITE_OPEN_COSMOS_CLIENT_ID=
33 changes: 31 additions & 2 deletions src/components/WorkspaceMenu/WorkspaceMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,47 @@ import { useWorkspace } from '../../hooks/useWorkspace';

import './WorkspaceMenu.scss';

const SELECTED_MENU_PATH_STORAGE_KEY = 'workspaceUiSelectedMenuPath';

const findNavItemByPath = (items: NavItem[], path: string[]): NavItem | undefined => {
if (!path.length) return undefined;

let currentItems = items;
let foundItem: NavItem | undefined;

for (const segment of path) {
foundItem = currentItems.find((item) => item.label === segment);
if (!foundItem) return undefined;
currentItems = foundItem.subItems ?? [];
}

return foundItem;
};

export const WorkspaceMenu = () => {
const { selectedItemPath, setSelectedItemPath, setContent } = useWorkspace();

const [expandedSet, setExpandedSet] = useState<Set<string>>(new Set());

useEffect(() => {
if (navItems.length > 0) {
setSelectedItemPath([navItems[0].label]);
setContent(navItems[0].content || <ComingSoon title={navItems[0].label} />);
const storedPath = localStorage.getItem(SELECTED_MENU_PATH_STORAGE_KEY);
const parsedPath = storedPath ? storedPath.split('/').filter(Boolean) : [];
const matchedItem = findNavItemByPath(navItems, parsedPath);

const initialPath = matchedItem ? parsedPath : [navItems[0].label];
const initialItem = matchedItem ?? navItems[0];

setSelectedItemPath(initialPath);
setContent(initialItem.content || <ComingSoon title={initialItem.label} />);
}
}, [setContent, setSelectedItemPath]);

useEffect(() => {
if (!selectedItemPath.length) return;
localStorage.setItem(SELECTED_MENU_PATH_STORAGE_KEY, selectedItemPath.join('/'));
}, [selectedItemPath]);

const handleToggle = (label: string) => {
setExpandedSet((prev) => {
const next = new Set(prev);
Expand Down
Loading
Loading