Skip to content

Commit

Permalink
SHARED:VKT(Frontend): MobileNavigationMenu improvements, add opaque o…
Browse files Browse the repository at this point in the history
…verlay on main contents if menu is open [deploy]
  • Loading branch information
pkoivisto committed Dec 17, 2024
1 parent 8d7e486 commit 71e1592
Show file tree
Hide file tree
Showing 13 changed files with 180 additions and 88 deletions.
7 changes: 7 additions & 0 deletions frontend/packages/shared/CHANGELOG.MD
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/).

## [Released]

## [1.11.8] - 2024-12-17

### Changed

- TitlePage to accept optional className in props
- Make MobileNavigationMenuWithPortal a controlled component

## [1.11.7] - 2024-12-17

### Changed
Expand Down
2 changes: 1 addition & 1 deletion frontend/packages/shared/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@opetushallitus/kieli-ja-kaantajatutkinnot.shared",
"version": "1.11.7",
"version": "1.11.8",
"description": "Shared Frontend Package",
"exports": {
"./components": "./src/components/index.tsx",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,15 +142,17 @@ export const MobileNavigationMenuWithPortal = ({
closedStateAriaLabel,
links,
portalContainer,
isMenuOpen,
setIsMenuOpen,
}: {
openStateLabel: string;
openStateAriaLabel: string;
closedStateLabel: string;
closedStateAriaLabel: string;
portalContainer: HTMLElement;
isMenuOpen: boolean;
setIsMenuOpen: (open: boolean) => void;
} & NavigationLinksProps) => {
const [isMenuOpen, setIsMenuOpen] = useState(false);

const toggleRef = useRef<HTMLDivElement>(null);
const [containerElements, setContainerElements] = useState<
Array<HTMLElement>
Expand Down
7 changes: 4 additions & 3 deletions frontend/packages/shared/src/utils/common/titlepage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ import { ReactNode } from 'react';

import { useTitle } from '../..//hooks';

interface TitleProps {
export interface TitlePageProps {
title: string;
children: ReactNode;
className?: string;
}

export const TitlePage = ({ title, children }: TitleProps) => {
export const TitlePage = ({ title, children, className }: TitlePageProps) => {
useTitle(title);

return <>{children}</>;
return <div className={className}>{children}</div>;
};
4 changes: 2 additions & 2 deletions frontend/packages/shared/src/utils/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { CommonUtils } from './common/common';
import { TitlePage } from './common/titlepage';
import { TitlePage, TitlePageProps } from './common/titlepage';
import { DateUtils } from './date/date';
import type { FieldErrors } from './inputField/inputField';
import { getErrors, hasErrors, InputFieldUtils } from './inputField/inputField';
Expand All @@ -14,4 +14,4 @@ export {
getErrors,
hasErrors,
};
export type { FieldErrors };
export type { FieldErrors, TitlePageProps };
2 changes: 1 addition & 1 deletion frontend/packages/vkt/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@
},
"dependencies": {
"reduxjs-toolkit-persist": "^7.2.1",
"shared": "npm:@opetushallitus/[email protected].7"
"shared": "npm:@opetushallitus/[email protected].8"
}
}
10 changes: 10 additions & 0 deletions frontend/packages/vkt/src/components/layouts/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,10 @@ import { AppRoutes, PublicNavigationLink } from 'enums/app';
import { useAuthentication } from 'hooks/useAuthentication';
import { useInterval } from 'hooks/useInterval';
import { loadClerkUser } from 'redux/reducers/clerkUser';
import { setMobileNavigationMenuState } from 'redux/reducers/mobileNavigationMenu';
import { loadPublicUser } from 'redux/reducers/publicUser';
import { featureFlagsSelector } from 'redux/selectors/featureFlags';
import { mobileNavigationMenuSelector } from 'redux/selectors/mobileNavigationMenu';

const isPathActive = (currentPath: string, route: AppRoutes) =>
!!matchPath({ path: route, end: false }, currentPath);
Expand Down Expand Up @@ -111,6 +113,12 @@ const PublicMobileNavigationMenu = () => {
translateCommon,
);

const { open } = useAppSelector(mobileNavigationMenuSelector);
const dispatch = useAppDispatch();
const setIsMenuOpen = (open: boolean) => {
dispatch(setMobileNavigationMenuState(open));
};

const portalContainer = document.getElementById('mobile-menu-placeholder');

if (!portalContainer) {
Expand All @@ -128,6 +136,8 @@ const PublicMobileNavigationMenu = () => {
closedStateAriaLabel="Avaa valikko"
links={navigationLinks}
portalContainer={portalContainer}
isMenuOpen={open}
setIsMenuOpen={setIsMenuOpen}
/>
);
};
Expand Down
23 changes: 23 additions & 0 deletions frontend/packages/vkt/src/redux/reducers/mobileNavigationMenu.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit';

export interface MobileNavigationMenuState {
open: boolean;
}

const initialState: MobileNavigationMenuState = {
open: false,
};

const mobileNavigationMenuSlice = createSlice({
name: 'mobileNavigationMenu',
initialState,
reducers: {
setMobileNavigationMenuState(state, action: PayloadAction<boolean>) {
state.open = action.payload;
},
},
});

export const mobileNavigationMenuReducer = mobileNavigationMenuSlice.reducer;
export const { setMobileNavigationMenuState } =
mobileNavigationMenuSlice.actions;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { RootState } from 'configs/redux';
import { MobileNavigationMenuState } from 'redux/reducers/mobileNavigationMenu';

export const mobileNavigationMenuSelector: (
state: RootState,
) => MobileNavigationMenuState = (state: RootState) =>
state.mobileNavigationMenu;
2 changes: 2 additions & 0 deletions frontend/packages/vkt/src/redux/store/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { examinerDetailsUpsertReducer } from 'redux/reducers/examinerDetailsUpse
import { examinerExamEventOverviewReducer } from 'redux/reducers/examinerExamEventOverview';
import { examinerExamEventUpsertReducer } from 'redux/reducers/examinerExamEventUpsert';
import { featureFlagsReducer } from 'redux/reducers/featureFlags';
import { mobileNavigationMenuReducer } from 'redux/reducers/mobileNavigationMenu';
import { publicEducationReducer } from 'redux/reducers/publicEducation';
import { publicEnrollmentReducer } from 'redux/reducers/publicEnrollment';
import { publicEnrollmentAppointmentReducer } from 'redux/reducers/publicEnrollmentAppointment';
Expand Down Expand Up @@ -61,6 +62,7 @@ const reducer = combineReducers({
examinerExamEventOverview: examinerExamEventOverviewReducer,
examinerExamEventUpsert: examinerExamEventUpsertReducer,
clerkListExaminer: clerkListExaminerReducer,
mobileNavigationMenu: mobileNavigationMenuReducer,
});

const persistedReducer = persistReducer(persistConfig, reducer);
Expand Down
Loading

0 comments on commit 71e1592

Please sign in to comment.