Skip to content
Open
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
34 changes: 13 additions & 21 deletions public/svg/symbio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/components/organisms/Navbar/Navbar.module.scss
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
height: var(--logo-height);
width: var(--logo-width);
align-self: center;
color: var(--logo-color);
}

.languageSelector {
Expand Down
47 changes: 40 additions & 7 deletions src/components/organisms/Navbar/Navbar.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,57 @@
import { useRouter } from 'next/router';
import React, { ReactElement, useContext, useState } from 'react';
import { AppContext } from '../../../contexts/app-context/AppContext';
import { Image, ImageLayout } from '../../primitives/Image/Image';
import { webSettingQueryResponse } from '../../../relay/__generated__/webSettingQuery.graphql';
import { Image } from '../../primitives/Image/Image';
import styles from './Navbar.module.scss';
import { Link } from '../../primitives/Link/Link';
import { MainMenu } from '../MainMenu/MainMenu';

const Logo = ({
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nebylo by lepsi (prehlednejsi) to udelat jako samostatnou komponentu?

logo,
svg,
homepage,
className,
}: {
logo: NonNullable<webSettingQueryResponse['item']>['logo'] | undefined;
svg?: string;
homepage?: {
readonly title: string | null;
readonly url: string | null;
} | null;
className?: string;
}): ReactElement | null => {
if (!logo) {
return null;
}

let result = null;
if (svg) {
result = <span dangerouslySetInnerHTML={{ __html: svg }}></span>;
} else if (logo.width && logo.height) {
result = <Image image={logo} />;
}

if (homepage) {
return (
<Link page={homepage} className={className}>
{result}
</Link>
);
}

return <span className={className}>{result}</span>;
};

const Navbar = (): ReactElement<null, 'div'> | null => {
const { mainMenu, logo, homepage } = useContext(AppContext);
const { mainMenu, logo, homepage, svgLogo } = useContext(AppContext);
const { locale, locales } = useRouter();

const [languageSelectorOpen, setLanguageSelectorOpen] = useState<boolean>(false);

return (
<div className={styles.navbar}>
{logo && logo.width && logo.height && (
<Link page={homepage || undefined} className={styles.logo}>
<Image image={logo} sizes={'3rem'} />
</Link>
)}
<Logo logo={logo} svg={svgLogo} homepage={homepage} className={styles.logo} />
{mainMenu && <MainMenu menu={mainMenu} />}
{Array.isArray(locales) && locales.length > 1 ? (
<div className={styles.languageSelector}>
Expand Down
1 change: 0 additions & 1 deletion src/components/primitives/Link/Link.module.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
.wrapper {
color: inherit;
text-decoration: underline;

&:hover {
Expand Down
19 changes: 15 additions & 4 deletions src/components/primitives/Link/Link.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ const Link = ({ className, href, page, params, children, target, plain, ...rest
}

return (
<NextLink href={href}>
<NextLink href={href} passHref>
<a className={condCls(styles.wrapper, className)} target={target} {...rest}>
{children}
</a>
Expand All @@ -54,14 +54,25 @@ const Link = ({ className, href, page, params, children, target, plain, ...rest

if (plain) {
return (
<a href={href} className={className}>
<a
href={href}
className={className}
target={target}
{...rest}
title={rest.title || page.title || undefined}
>
{children || page.title}
</a>
);
}
return (
<NextLink href={'/[[...slug]]'} as={href}>
<a className={condCls(styles.wrapper, className)} target={target} {...rest}>
<NextLink href={'/[[...slug]]'} as={href} passHref>
<a
className={condCls(styles.wrapper, className)}
target={target}
{...rest}
title={rest.title || page.title || undefined}
>
{children || page.title}
</a>
</NextLink>
Expand Down
3 changes: 2 additions & 1 deletion src/pages/[[...slug]].tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const PreviewToolbar = dynamic<PreviewToolbarProps>(() =>
);

const Page = (props: MyPageProps): ReactElement => {
const { hostname, site, page, webSetting, blocksProps, preview } = props;
const { hostname, site, page, webSetting, blocksProps, preview, svgLogo } = props;
const router = useRouter();
const locale = router.locale || router.defaultLocale;
const currentUrl =
Expand Down Expand Up @@ -59,6 +59,7 @@ const Page = (props: MyPageProps): ReactElement => {
page,
site,
absoluteLinks: false,
svgLogo,
...webSetting,
},
}}
Expand Down
10 changes: 7 additions & 3 deletions src/providers/datocms/PageProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,9 @@ import { appQuery } from '../../relay/__generated__/appQuery.graphql';
import { AppQuery } from '../../relay/app';
import { getPagePattern } from '../../lib/routing/getPagePattern';
import { AppData } from '../../types/app';
import { blocksContent } from '../../blocks/__generated__/blocksContent.graphql';
import { ParsedUrlQuery } from 'querystring';
import { getStaticParamsFromBlocks } from '../../lib/blocks/getStaticParamsFromBlocks';
import providers from '../../providers';
import blocks from '../../blocks';
import { BlockType } from '../../types/block';

class PageProvider extends AbstractDatoCMSProvider<
Expand Down Expand Up @@ -49,7 +47,13 @@ class PageProvider extends AbstractDatoCMSProvider<
redirectPattern,
});

return data;
return {
...data,
svgLogo:
data.webSetting?.logo?.format === 'svg'
? await (await fetch(data.webSetting.logo.url)).text()
: undefined,
};
}

async getStaticPaths(locale: string, blocks: Record<string, BlockType>): Promise<GetStaticPathsResult['paths']> {
Expand Down
1 change: 1 addition & 0 deletions src/relay/webSetting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { graphql } from 'react-relay';
graphql`
fragment webSettingFragment on WebSettingRecord {
logo {
format
...appImageBaseFragment @relay(mask: false)
responsiveImage(imgixParams: { w: 32 }) {
...appResponsiveImageFragment @relay(mask: false)
Expand Down
1 change: 1 addition & 0 deletions src/styles/global.scss
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ html, body {
--navbar-height: 5rem;
--logo-width: 3rem;
--logo-height: 3rem;
--logo-color: #f60;
--white: #fff;
--black: #000;
--red: #ff0000;
Expand Down
4 changes: 3 additions & 1 deletion src/types/app.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { ResponsiveImageType } from 'react-datocms';
import { appQueryResponse } from '../relay/__generated__/appQuery.graphql';

export type AppData = appQueryResponse;
export type AppData = appQueryResponse & {
svgLogo?: string;
};

export type BaseDatoCMSProps =
| '_createdAt'
Expand Down
1 change: 1 addition & 0 deletions src/types/appContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ export type AppContextProps = Partial<WebSetting> & {
currentUrl?: string;
site?: AppData['site'];
page?: AppData['page'];
svgLogo?: string;
};