Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LIIKUNTA-582, LIIKUNTA-585 | feat: add support for hierarchical menus & universal bar menu in header #552

Merged
merged 1 commit into from
Nov 21, 2023
Merged
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
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ ARG NEXT_PUBLIC_DEFAULT_ISR_REVALIDATE_SECONDS
ARG NEXT_PUBLIC_CMS_HEADER_MENU_NAME_FI
ARG NEXT_PUBLIC_CMS_HEADER_MENU_NAME_EN
ARG NEXT_PUBLIC_CMS_HEADER_MENU_NAME_SV
ARG NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_FI
ARG NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_EN
ARG NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_SV
ARG NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_FI
ARG NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_EN
ARG NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_SV
Expand Down
3 changes: 3 additions & 0 deletions DockerfileCache
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ ARG NEXT_PUBLIC_DEFAULT_ISR_REVALIDATE_SECONDS
ARG NEXT_PUBLIC_CMS_HEADER_MENU_NAME_FI
ARG NEXT_PUBLIC_CMS_HEADER_MENU_NAME_EN
ARG NEXT_PUBLIC_CMS_HEADER_MENU_NAME_SV
ARG NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_FI
ARG NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_EN
ARG NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_SV
ARG NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_FI
ARG NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_EN
ARG NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_SV
Expand Down
3 changes: 3 additions & 0 deletions apps/events-helsinki/.env.local.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ NEXT_PUBLIC_SENTRY_TRACE_SAMPLE_RATE="1.0"
NEXT_PUBLIC_CMS_HEADER_MENU_NAME_FI="Events Helsinki Header FI"
NEXT_PUBLIC_CMS_HEADER_MENU_NAME_EN="Events Helsinki Header EN"
NEXT_PUBLIC_CMS_HEADER_MENU_NAME_SV="Events Helsinki Header SV"
NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_FI="Events Helsinki Universal bar FI"
NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_EN="Events Helsinki Universal bar EN"
NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_SV="Events Helsinki Universal bar SV"
NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_FI="Events Helsinki Footer FI"
NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_EN="Events Helsinki Footer EN"
NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_SV="Events Helsinki Footer SV"
Expand Down
2 changes: 1 addition & 1 deletion apps/events-helsinki/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
"react-datepicker": "^4.14.1",
"react-dom": "18.2.0",
"react-error-boundary": "4.0.10",
"react-helsinki-headless-cms": "1.0.0-alpha229-canary-98a672e",
"react-helsinki-headless-cms": "1.0.0-alpha230",
"react-i18next": "13.0.1",
"react-scroll": "^1.8.9",
"react-toastify": "^9.1.3",
Expand Down
42 changes: 21 additions & 21 deletions apps/events-helsinki/src/domain/app/getEventsStaticProps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
DEFAULT_HEADER_MENU_NAME,
HARDCODED_LANGUAGES,
getLanguageOrDefault,
DEFAULT_HEADER_UNIVERSAL_BAR_MENU_NAME,
} from '@events-helsinki/components';
import type { GetStaticPropsContext, GetStaticPropsResult } from 'next';
import { MenuDocument } from 'react-helsinki-headless-cms/apollo';
Expand Down Expand Up @@ -75,39 +76,38 @@ type GetGlobalCMSDataParams = {

type ReturnedGlobalCMSData = {
headerMenu?: Menu;
headerUniversalBarMenu?: Menu;
footerMenu?: Menu;
languages?: Language[];
};

const getMenu = async (
menuName: string,
client: GetGlobalCMSDataParams['client']
): Promise<Menu | undefined> =>
(
await client.query({
query: MenuDocument,
variables: { id: menuName },
fetchPolicy: 'network-only', // Always fetch new, but update the cache.
})
)?.data?.menu;

// Get CMS data that's required on every page
async function getGlobalCMSData({
client,
context,
}: GetGlobalCMSDataParams): Promise<ReturnedGlobalCMSData> {
const language = getLanguageOrDefault(context.locale);
const headerNavigationMenuName = DEFAULT_HEADER_MENU_NAME[language];
const fetchPolicy = 'network-only'; // Always fetch new, but update the cache.
const { data: headerMenuData } = await client.query({
query: MenuDocument,
variables: {
id: headerNavigationMenuName,
// idType: 'URI'
},
fetchPolicy,
});
const footerNavigationMenuName = DEFAULT_FOOTER_MENU_NAME[language];
const { data: footerMenuData } = await client.query({
query: MenuDocument,
variables: {
id: footerNavigationMenuName,
// idType: 'URI'
},
fetchPolicy,
});
const headerMenuName = DEFAULT_HEADER_MENU_NAME[language];
const headerUniversalBarMenuName =
DEFAULT_HEADER_UNIVERSAL_BAR_MENU_NAME[language];
const footerMenuName = DEFAULT_FOOTER_MENU_NAME[language];

return {
headerMenu: headerMenuData?.menu,
footerMenu: footerMenuData?.menu,
headerMenu: await getMenu(headerMenuName, client),
headerUniversalBarMenu: await getMenu(headerUniversalBarMenuName, client),
footerMenu: await getMenu(footerMenuName, client),
languages: HARDCODED_LANGUAGES,
};
}
3 changes: 3 additions & 0 deletions apps/hobbies-helsinki/.env.local.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ NEXT_PUBLIC_SENTRY_TRACE_SAMPLE_RATE="1.0"
NEXT_PUBLIC_CMS_HEADER_MENU_NAME_FI="Hobbies Helsinki Header FI"
NEXT_PUBLIC_CMS_HEADER_MENU_NAME_EN="Hobbies Helsinki Header EN"
NEXT_PUBLIC_CMS_HEADER_MENU_NAME_SV="Hobbies Helsinki Header SV"
NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_FI="Hobbies Helsinki Universal bar FI"
NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_EN="Hobbies Helsinki Universal bar EN"
NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_SV="Hobbies Helsinki Universal bar SV"
NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_FI="Hobbies Helsinki Footer FI"
NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_EN="Hobbies Helsinki Footer EN"
NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_SV="Hobbies Helsinki Footer SV"
Expand Down
2 changes: 1 addition & 1 deletion apps/hobbies-helsinki/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
"react-datepicker": "^4.14.1",
"react-dom": "18.2.0",
"react-error-boundary": "4.0.10",
"react-helsinki-headless-cms": "1.0.0-alpha229-canary-98a672e",
"react-helsinki-headless-cms": "1.0.0-alpha230",
"react-i18next": "13.0.1",
"react-scroll": "^1.8.9",
"react-toastify": "^9.1.3",
Expand Down
42 changes: 21 additions & 21 deletions apps/hobbies-helsinki/src/domain/app/getHobbiesStaticProps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
DEFAULT_HEADER_MENU_NAME,
HARDCODED_LANGUAGES,
getLanguageOrDefault,
DEFAULT_HEADER_UNIVERSAL_BAR_MENU_NAME,
} from '@events-helsinki/components';
import type { GetStaticPropsContext, GetStaticPropsResult } from 'next';
import { MenuDocument } from 'react-helsinki-headless-cms/apollo';
Expand Down Expand Up @@ -75,39 +76,38 @@ type GetGlobalCMSDataParams = {

type ReturnedGlobalCMSData = {
headerMenu?: Menu;
headerUniversalBarMenu?: Menu;
footerMenu?: Menu;
languages?: Language[];
};

const getMenu = async (
menuName: string,
client: GetGlobalCMSDataParams['client']
): Promise<Menu | undefined> =>
(
await client.query({
query: MenuDocument,
variables: { id: menuName },
fetchPolicy: 'network-only', // Always fetch new, but update the cache.
})
)?.data?.menu;

// Get CMS data that's required on every page
async function getGlobalCMSData({
client,
context,
}: GetGlobalCMSDataParams): Promise<ReturnedGlobalCMSData> {
const language = getLanguageOrDefault(context.locale);
const headerNavigationMenuName = DEFAULT_HEADER_MENU_NAME[language];
const fetchPolicy = 'network-only'; // Always fetch new, but update the cache.
const { data: headerMenuData } = await client.query({
query: MenuDocument,
variables: {
id: headerNavigationMenuName,
// idType: 'URI'
},
fetchPolicy,
});
const footerNavigationMenuName = DEFAULT_FOOTER_MENU_NAME[language];
const { data: footerMenuData } = await client.query({
query: MenuDocument,
variables: {
id: footerNavigationMenuName,
// idType: 'URI'
},
fetchPolicy,
});
const headerMenuName = DEFAULT_HEADER_MENU_NAME[language];
const headerUniversalBarMenuName =
DEFAULT_HEADER_UNIVERSAL_BAR_MENU_NAME[language];
const footerMenuName = DEFAULT_FOOTER_MENU_NAME[language];

return {
headerMenu: headerMenuData?.menu,
footerMenu: footerMenuData?.menu,
headerMenu: await getMenu(headerMenuName, client),
headerUniversalBarMenu: await getMenu(headerUniversalBarMenuName, client),
footerMenu: await getMenu(footerMenuName, client),
languages: HARDCODED_LANGUAGES,
};
}
3 changes: 3 additions & 0 deletions apps/sports-helsinki/.env.local.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ NEXT_PUBLIC_SENTRY_TRACE_SAMPLE_RATE="1.0"
NEXT_PUBLIC_CMS_HEADER_MENU_NAME_FI="Sports Helsinki Header FI"
NEXT_PUBLIC_CMS_HEADER_MENU_NAME_EN="Sports Helsinki Header EN"
NEXT_PUBLIC_CMS_HEADER_MENU_NAME_SV="Sports Helsinki Header SV"
NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_FI="Sports Helsinki Universal bar FI"
NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_EN="Sports Helsinki Universal bar EN"
NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_SV="Sports Helsinki Universal bar SV"
NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_FI="Sports Helsinki Footer FI"
NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_EN="Sports Helsinki Footer EN"
NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_SV="Sports Helsinki Footer SV"
Expand Down
2 changes: 1 addition & 1 deletion apps/sports-helsinki/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
"react-datepicker": "^4.14.1",
"react-dom": "18.2.0",
"react-error-boundary": "4.0.10",
"react-helsinki-headless-cms": "1.0.0-alpha229-canary-98a672e",
"react-helsinki-headless-cms": "1.0.0-alpha230",
"react-i18next": "13.0.1",
"react-leaflet": "4.2.1",
"react-scroll": "^1.8.9",
Expand Down
42 changes: 21 additions & 21 deletions apps/sports-helsinki/src/domain/app/getSportsStaticProps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
DEFAULT_HEADER_MENU_NAME,
HARDCODED_LANGUAGES,
getLanguageOrDefault,
DEFAULT_HEADER_UNIVERSAL_BAR_MENU_NAME,
} from '@events-helsinki/components';
import type { GetStaticPropsContext, GetStaticPropsResult } from 'next';
import { MenuDocument } from 'react-helsinki-headless-cms/apollo';
Expand Down Expand Up @@ -73,39 +74,38 @@ type GetGlobalCMSDataParams = {

type ReturnedGlobalCMSData = {
headerMenu?: Menu;
headerUniversalBarMenu?: Menu;
footerMenu?: Menu;
languages?: Language[];
};

const getMenu = async (
menuName: string,
client: GetGlobalCMSDataParams['client']
): Promise<Menu | undefined> =>
(
await client.query({
query: MenuDocument,
variables: { id: menuName },
fetchPolicy: 'network-only', // Always fetch new, but update the cache.
})
)?.data?.menu;

// Get CMS data that's required on every page
async function getGlobalCMSData({
client,
context,
}: GetGlobalCMSDataParams): Promise<ReturnedGlobalCMSData> {
const language = getLanguageOrDefault(context.locale);
const headerNavigationMenuName = DEFAULT_HEADER_MENU_NAME[language];
const fetchPolicy = 'network-only'; // Always fetch new, but update the cache.
const { data: headerMenuData } = await client.query({
query: MenuDocument,
variables: {
id: headerNavigationMenuName,
// idType: 'URI'
},
fetchPolicy,
});
const footerNavigationMenuName = DEFAULT_FOOTER_MENU_NAME[language];
const { data: footerMenuData } = await client.query({
query: MenuDocument,
variables: {
id: footerNavigationMenuName,
// idType: 'URI'
},
fetchPolicy,
});
const headerMenuName = DEFAULT_HEADER_MENU_NAME[language];
const headerUniversalBarMenuName =
DEFAULT_HEADER_UNIVERSAL_BAR_MENU_NAME[language];
const footerMenuName = DEFAULT_FOOTER_MENU_NAME[language];

return {
headerMenu: headerMenuData?.menu,
footerMenu: footerMenuData?.menu,
headerMenu: await getMenu(headerMenuName, client),
headerUniversalBarMenu: await getMenu(headerUniversalBarMenuName, client),
footerMenu: await getMenu(footerMenuName, client),
languages: HARDCODED_LANGUAGES,
};
}
3 changes: 3 additions & 0 deletions docker-compose.events.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ services:
- NEXT_PUBLIC_CMS_HEADER_MENU_NAME_FI
- NEXT_PUBLIC_CMS_HEADER_MENU_NAME_EN
- NEXT_PUBLIC_CMS_HEADER_MENU_NAME_SV
- NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_FI
- NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_EN
- NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_SV
- NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_FI
- NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_EN
- NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_SV
Expand Down
3 changes: 3 additions & 0 deletions docker-compose.hobbies.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ services:
- NEXT_PUBLIC_CMS_HEADER_MENU_NAME_FI
- NEXT_PUBLIC_CMS_HEADER_MENU_NAME_EN
- NEXT_PUBLIC_CMS_HEADER_MENU_NAME_SV
- NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_FI
- NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_EN
- NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_SV
- NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_FI
- NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_EN
- NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_SV
Expand Down
3 changes: 3 additions & 0 deletions docker-compose.sports.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ services:
- NEXT_PUBLIC_CMS_HEADER_MENU_NAME_FI
- NEXT_PUBLIC_CMS_HEADER_MENU_NAME_EN
- NEXT_PUBLIC_CMS_HEADER_MENU_NAME_SV
- NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_FI
- NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_EN
- NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_SV
- NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_FI
- NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_EN
- NEXT_PUBLIC_CMS_FOOTER_MENU_NAME_SV
Expand Down
2 changes: 1 addition & 1 deletion packages/components/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
"react-datepicker": "^4.14.1",
"react-dom": "18.2.0",
"react-error-boundary": "4.0.10",
"react-helsinki-headless-cms": "1.0.0-alpha229-canary-98a672e",
"react-helsinki-headless-cms": "1.0.0-alpha230",
"react-i18next": "13.0.1",
"react-leaflet": "4.2.1",
"react-toastify": "^9.1.3",
Expand Down
2 changes: 2 additions & 0 deletions packages/components/src/app/BaseApp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ export const FallbackComponent = ({
function BaseApp({
children,
headerMenu,
headerUniversalBarMenu,
footerMenu,
languages,
appName,
Expand Down Expand Up @@ -127,6 +128,7 @@ function BaseApp({
<GeolocationProvider>
<NavigationProvider
headerMenu={headerMenu}
headerUniversalBarMenu={headerUniversalBarMenu}
footerMenu={footerMenu}
languages={languages}
>
Expand Down
6 changes: 5 additions & 1 deletion packages/components/src/components/navigation/Navigation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,18 @@ import styles from './navigation.module.scss';
type NavigationProps = {
page?: PageType | ArticleType;
menu?: Menu;
universalBarMenu?: Menu;
languages?: Language[];
};

export default function Navigation({
page,
menu,
universalBarMenu,
languages: forcedLanguages, // FIXME: This is here only to skip the Apollo query and so the issues in the Error page
}: NavigationProps) {
const { headerMenu, languages } = useContext(NavigationContext);
const { headerMenu, headerUniversalBarMenu, languages } =
useContext(NavigationContext);
const router = useRouter();
const locale = useLocale();
const cmsHelper = useCmsHelper();
Expand All @@ -41,6 +44,7 @@ export default function Navigation({
<RHHCNavigation
languages={languageOptions}
menu={menu ?? headerMenu}
universalBarMenu={universalBarMenu ?? headerUniversalBarMenu}
className={styles.topNavigation}
onTitleClick={() => {
router.push('/');
Expand Down
15 changes: 15 additions & 0 deletions packages/components/src/constants/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,21 @@ export const DEFAULT_FOOTER_MENU_NAME: Record<AppLanguage, string> = {
'Events Helsinki Footer SV',
};

export const DEFAULT_HEADER_UNIVERSAL_BAR_MENU_NAME: Record<
AppLanguage,
string
> = {
fi:
process.env.NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_FI ??
'Events Helsinki Universal bar FI',
en:
process.env.NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_EN ??
'Events Helsinki Universal bar EN',
sv:
process.env.NEXT_PUBLIC_CMS_HEADER_UNIVERSAL_BAR_MENU_NAME_SV ??
'Events Helsinki Universal bar SV',
};

/**
* This is just a mock of list of Languages.
* The react-helsinki-headless-cms needs typeof `Language[]` in a list of lanugages,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type { Language, Menu } from '../types/generated/graphql';

export type NavigationContextProps = {
headerMenu?: Menu;
headerUniversalBarMenu?: Menu;
footerMenu?: Menu;
languages?: Language[];
};
Expand Down
Loading
Loading