Skip to content
This repository was archived by the owner on Feb 10, 2025. It is now read-only.

Commit 37eb4bc

Browse files
committed
fix: navigation styling and functionality as discussed
1 parent 8dd2444 commit 37eb4bc

6 files changed

Lines changed: 186 additions & 96 deletions

File tree

apps/admin-ui/src/component/Navigation.tsx

Lines changed: 69 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,89 @@
11
import { useTranslation } from "react-i18next";
22
import { signIn, signOut } from "common/src/browserHelpers";
33
import { useSession } from "@/hooks/auth";
4-
import { Header, IconStar, IconUser, Logo, TitleStyleType } from "hds-react";
4+
import {
5+
Header,
6+
IconSignout,
7+
IconStar,
8+
IconUser,
9+
TitleStyleType,
10+
} from "hds-react";
511
import React from "react";
612
import styled from "styled-components";
713
import { useLocation } from "react-router-dom";
814
import useHandling from "@/hooks/useHandling";
915
import usePermission from "@/hooks/usePermission";
1016
import { Permission } from "@/modules/permissionHelper";
11-
import IconPremises from "common/src/icons/IconPremises";
17+
import Logo from "common/src/components/Logo";
1218
import { env } from "@/env.mjs";
1319

1420
type Props = {
1521
apiBaseUrl: string;
1622
};
1723

18-
const ActionBar = styled(Header.ActionBar)`
19-
background: var(--color-bus);
24+
const BackgroundHeader = styled(Header)`
25+
--header-color: black;
26+
--actionbar-background-color: var(--color-bus-dark);
27+
--notification-bubble-background-color: var(
28+
--tilavaraus-admin-handling-count-color
29+
);
30+
#user-menu-dropdown {
31+
color: black;
32+
button,
33+
span,
34+
div {
35+
display: flex;
36+
justify-content: space-between;
37+
width: 100%;
38+
}
39+
svg {
40+
color: var(--header-color);
41+
}
42+
}
43+
#user-menu {
44+
> button span {
45+
color: white !important;
46+
svg {
47+
color: white;
48+
}
49+
}
50+
}
51+
#hds-mobile-menu {
52+
#user-menu * {
53+
color: var(--header-color);
54+
box-sizing: border-box;
55+
}
56+
ul > li {
57+
> span {
58+
padding: var(--spacing-s);
59+
li {
60+
width: 100%;
61+
font-size: var(--fontsize-body-xl);
62+
}
63+
}
2064
21-
--action-bar-item-title-font-color: white;
65+
/* hide the big link to frontpage which HDS adds by default */
66+
&:first-child {
67+
display: none;
68+
}
69+
}
70+
}
71+
`;
72+
73+
const ActionBar = styled(Header.ActionBar)`
2274
[class*="HeaderActionBar-module_title"] {
2375
color: white;
2476
}
25-
#user-menu > button {
77+
[class*="icon_hds-icon"] {
2678
color: white;
2779
}
28-
#user-menu-dropdown {
29-
color: black;
30-
31-
--action-bar-item-title-font-color: black;
32-
}
3380
`;
3481

3582
const NavigationMenuWrapper = styled.div`
36-
--notification-bubble-background-color: var(
37-
--tilavaraus-admin-handling-count-color
38-
);
3983
span:has(.active) {
4084
/* using box-shadow for a bottom border inside of the element, without affecting text positioning */
4185
box-shadow: 0 -4px 0 0 var(--color-black) inset;
4286
}
43-
44-
/* We only want underline on the label text, not the text in the bubble */
45-
a:hover {
46-
text-decoration: none;
47-
span:first-child {
48-
text-decoration: underline;
49-
}
50-
}
5187
`;
5288

5389
interface IMenuChild {
@@ -62,12 +98,6 @@ const getFilteredMenu = (
6298
hasOwnUnits: boolean,
6399
hasPermission: (perm: Permission) => boolean
64100
): IMenuChild[] => [
65-
{
66-
title: "MainMenu.home",
67-
icon: <IconPremises aria-hidden />,
68-
route: "/",
69-
exact: true,
70-
},
71101
...(hasOwnUnits
72102
? [
73103
{
@@ -143,7 +173,6 @@ function NavigationLink({
143173
const shouldDisplayCount =
144174
title === t("MainMenu.requestedReservations") && count && count > 0;
145175
const isActive = exact ? pathname === href : pathname.startsWith(href);
146-
147176
return (
148177
<Header.ActionBarSubItem
149178
key={href}
@@ -171,26 +200,16 @@ const Navigation = ({ apiBaseUrl }: Props) => {
171200
(item) => item != null
172201
);
173202

174-
const base64Logo =
175-
"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNzggMzYiIHRpdGxlPSJIZWxzaW5naW4ga2F1cHVua2kiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoCiAgICAgICAgZD0iTTc1Ljc1MyAyLjI1MXYyMC43YzAgMy45NS0zLjI3NSA3LjE3OC03LjMxIDcuMTc4aC0yMi4yNmMtMi42NzQgMC01LjIwNS45Ni03LjE4MyAyLjczOWExMC43NDkgMTAuNzQ5IDAgMDAtNy4xODMtMi43NEg5LjUwOWMtNC4wMDMgMC03LjI0Ny0zLjIxLTcuMjQ3LTcuMTc3VjIuMjVoNzMuNDkxek00MC4xODcgMzQuODM1YTguNDcgOC40NyAwIDAxNi4wMTItMi40NzFoMjIuMjQ1YzUuMjY4IDAgOS41NTYtNC4yMTkgOS41NTYtOS40MTNWMEgwdjIyLjkzNWMwIDUuMTk0IDQuMjU2IDkuNDEzIDkuNTA5IDkuNDEzaDIyLjMwOGMyLjI2MyAwIDQuMzk4Ljg4MiA2LjAxMiAyLjQ3MUwzOS4wMTYgMzZsMS4xNy0xLjE2NXoiCiAgICAgICAgZmlsbD0iY3VycmVudENvbG9yIiAvPgogICAgPHBhdGgKICAgICAgICBkPSJNNjcuNTIyIDExLjY3NmMwIC42ODEtLjU1NiAxLjE3Ny0xLjI1NSAxLjE3Ny0uNyAwLTEuMjU1LS40OTYtMS4yNTUtMS4xNzcgMC0uNjgyLjU1Ni0xLjE3OCAxLjI1NS0xLjE3OC43LS4wMyAxLjI1NS40NjUgMS4yNTUgMS4xNzh6bS0yLjM1MiA5LjYyMmgyLjE3OHYtNy41NDZINjUuMTd2Ny41NDZ6bS0zLjkwOS00LjU1NmwyLjg0NSA0LjU1NmgtMi4zNjhsLTEuOTA3LTMuMDIyLTEuMDMzIDEuMjcxdjEuNzVoLTIuMTYxVjEwLjQ1M2gyLjE2djUuMDA0YzAgLjkzLS4xMSAxLjg2LS4xMSAxLjg2aC4wNDdzLjUwOS0uODIxLjkzOC0xLjQxbDEuNjUzLTIuMTU0aDIuNTQybC0yLjYwNiAyLjk5em0tNi44MTctLjI3OGMwLTEuODc1LS45MzgtMi44OTgtMi40MzItMi44OTgtMS4yNzEgMC0xLjkzOS43MjgtMi4zMiAxLjQyNmgtLjA0OGwuMTEyLTEuMjRoLTIuMTYydjcuNTQ2aDIuMTYyVjE2LjgyYzAtLjg2OC41MjQtMS40NzIgMS4zMzUtMS40NzIuODEgMCAxLjE2LjUyNyAxLjE2IDEuNTM0djQuNDE2aDIuMTc3bC4wMTYtNC44MzR6bS04LjkzMS00Ljc4OGMwIC42ODEtLjU1NyAxLjE3Ny0xLjI1NiAxLjE3Ny0uNyAwLTEuMjU1LS40OTYtMS4yNTUtMS4xNzcgMC0uNjgyLjU1Ni0xLjE3OCAxLjI1NS0xLjE3OC43MTUtLjAzIDEuMjU2LjQ2NSAxLjI1NiAxLjE3OHptLTIuMzUyIDkuNjIyaDIuMTc3di03LjU0Nkg0My4xNnY3LjU0NnptLTMuNzUtMi4xMDdjMC0uNjA1LS44NTktLjcyOS0xLjg2LTEuMDA4LTEuMTYtLjI5NC0yLjYyMi0uODY3LTIuNjIyLTIuMzA4IDAtMS40MjYgMS4zOTgtMi4zMjQgMy4wNTEtMi4zMjQgMS41NDEgMCAyLjk1Ni43MTIgMy41NDQgMS43MmwtMS44NiAxLjAyMmMtLjE5LS42NjYtLjc2Mi0xLjE5My0xLjYyLTEuMTkzLS41NTcgMC0xLjAxOC4yMzItMS4wMTguNjgyIDAgLjU3MyAxLjAxOC42MzUgMi4xNjIuOTkxIDEuMjA4LjM3MiAyLjMyLjkxNSAyLjMyIDIuMjk0IDAgMS41MTgtMS40NDYgMi40MTctMy4xMTUgMi40MTctMS44MTEgMC0zLjI0Mi0uNzQ0LTMuODc3LTEuOTUybDEuODktMS4wMzljLjI0LjgyMi45MjIgMS40NDEgMS45NTUgMS40NDEuNjIgMCAxLjA1LS4yNDggMS4wNS0uNzQzem0tNi44ODItOC42NzdoLTIuMTc3djguNjkyYzAgLjc3NS4xNzUgMS4zNDguNTA5IDEuNzA1LjM1LjM1Ni44OS41MjYgMS42MzYuNTI2LjI1NSAwIC41MjUtLjAzLjc4LS4wNzcuMjctLjA2Mi40NzYtLjE0LjY1LS4yMzNsLjE5MS0xLjQyNWEyLjA3IDIuMDcgMCAwMS0uNDYuMTI0Yy0uMTI4LjAzLS4yODcuMDMtLjQ2MS4wMy0uMjg2IDAtLjQxNC0uMDc3LS41MDktLjIxNi0uMTExLS4xNC0uMTU5LS4zODctLjE1OS0uNzQ0di04LjM4MnptLTcuMjQ2IDQuNTdjLS43OTUgMC0xLjQ0Ni41NTgtMS42MjEgMS41ODFoMy4wNWMuMDE3LS44OTktLjU4Ny0xLjU4LTEuNDMtMS41OHptMy4zNTMgMy4wMDdIMjMuNjNjLjA5NSAxLjIyNC43OTQgMS44MjggMS43IDEuODI4LjgxIDAgMS4zNjctLjUyNyAxLjQ5NC0xLjI0bDEuODI4IDEuMDA3Yy0uNTQuOTYxLTEuNyAxLjc5OC0zLjMyMiAxLjc5OC0yLjE2IDAtMy43NS0xLjQ3Mi0zLjc1LTMuOTUxIDAtMi40NjQgMS42Mi0zLjk1MSAzLjcwMy0zLjk1MSAyLjA4MSAwIDMuNDY0IDEuNDQgMy40NjQgMy40ODYtLjAxNi42MDQtLjExMSAxLjAyMy0uMTExIDEuMDIzem0tMTEuMDc3IDMuMjA3aDIuMjU3VjEwLjkxNmgtMi4yNTd2NC4xMDdoLTQuMjQzdi00LjA5MUgxMS4wNnYxMC4zNjZoMi4yNTZ2LTQuMjkyaDQuMjQzdjQuMjkyeiIKICAgICAgICBmaWxsPSJjdXJyZW50Q29sb3IiIC8+Cjwvc3ZnPg==";
176-
177203
return (
178-
<Header>
204+
<BackgroundHeader>
179205
<ActionBar
180206
title={t("common:applicationName")}
181207
titleAriaLabel={t("common:applicationName")}
182208
frontPageLabel={t("common:gotoFrontpage")}
183209
titleStyle={TitleStyleType.Bold}
184-
titleHref="/"
210+
titleHref={env.NEXT_PUBLIC_BASE_URL ?? "/"}
185211
openFrontPageLinksAriaLabel={t("common:applicationName")}
186-
logo={
187-
<Logo
188-
alt={t("common:applicationName")}
189-
size="large"
190-
src={base64Logo}
191-
style={{ filter: "invert(1)" }}
192-
/>
193-
}
212+
logo={<Logo size="large" style={{ filter: "invert(1)" }} />}
194213
logoAriaLabel={`${t("common:applicationName")} logo`}
195214
logoHref={env.NEXT_PUBLIC_BASE_URL}
196215
>
@@ -199,10 +218,15 @@ const Navigation = ({ apiBaseUrl }: Props) => {
199218
id="user-menu"
200219
label={name}
201220
icon={<IconUser />}
202-
style={{ color: "white" }}
221+
fixedRightPosition
203222
>
204223
<Header.ActionBarButton
205-
label={t("Navigation.logout")}
224+
label={
225+
<>
226+
<span>{t("Navigation.logout")}</span>
227+
<IconSignout />
228+
</>
229+
}
206230
onClick={() => signOut(apiBaseUrl)}
207231
/>
208232
</Header.ActionBarItem>
@@ -226,7 +250,7 @@ const Navigation = ({ apiBaseUrl }: Props) => {
226250
))}
227251
</Header.NavigationMenu>
228252
</NavigationMenuWrapper>
229-
</Header>
253+
</BackgroundHeader>
230254
);
231255
};
232256

0 commit comments

Comments
 (0)