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

Commit 26c98de

Browse files
committed
refactor: prev link component
1 parent 16f2544 commit 26c98de

4 files changed

Lines changed: 53 additions & 55 deletions

File tree

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

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,6 @@ import { IconAngleLeft } from "hds-react";
55
import { useNavigate } from "react-router-dom";
66
import { BasicLink } from "../styles/util";
77

8-
interface IProps {
9-
route?: string;
10-
style?: React.CSSProperties;
11-
className?: string;
12-
}
13-
148
const StyledLink = styled(BasicLink)`
159
display: inline-flex;
1610
align-items: center;
@@ -20,7 +14,13 @@ const StyledLink = styled(BasicLink)`
2014
gap: var(--spacing-2-xs);
2115
`;
2216

23-
function LinkPrev({ route, style, className }: IProps): JSX.Element {
17+
type Props = {
18+
route?: string;
19+
style?: React.CSSProperties;
20+
className?: string;
21+
};
22+
23+
function LinkPrevInner({ route, style, className }: Props): JSX.Element {
2424
const { t } = useTranslation();
2525
const navigate = useNavigate();
2626
return (
@@ -43,4 +43,14 @@ function LinkPrev({ route, style, className }: IProps): JSX.Element {
4343
);
4444
}
4545

46-
export default LinkPrev;
46+
const PreviousLinkWrapper = styled.div`
47+
padding: var(--spacing-s);
48+
`;
49+
50+
export function LinkPrev(props: Props): JSX.Element {
51+
return (
52+
<PreviousLinkWrapper>
53+
<LinkPrevInner {...props} />
54+
</PreviousLinkWrapper>
55+
);
56+
}

apps/admin-ui/src/component/reservations/EditPageWrapper.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
11
import React from "react";
22
import { useTranslation } from "react-i18next";
33
import { type ReservationQuery } from "@gql/gql-types";
4-
import styled from "styled-components";
5-
import LinkPrev from "../LinkPrev";
4+
import { LinkPrev } from "../LinkPrev";
65
import { Container } from "../../styles/layout";
76
import ReservationTitleSection from "./requested/ReservationTitleSection";
87
import { createTagString } from "./requested/util";
98

10-
const PreviousLinkWrapper = styled.div`
11-
padding: var(--spacing-s);
12-
`;
13-
149
type ReservationType = NonNullable<ReservationQuery["reservation"]>;
1510
const EditPageWrapper = ({
1611
children,
@@ -26,9 +21,7 @@ const EditPageWrapper = ({
2621

2722
return (
2823
<>
29-
<PreviousLinkWrapper>
30-
<LinkPrev />
31-
</PreviousLinkWrapper>
24+
<LinkPrev />
3225
<Container>
3326
{reservation && (
3427
<ReservationTitleSection

apps/admin-ui/src/spa/my-units/recurring/RecurringReservation.tsx

Lines changed: 25 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,17 @@ import { H1 } from "common/src/common/typography";
22
import React from "react";
33
import { useTranslation } from "react-i18next";
44
import { useParams } from "react-router-dom";
5-
import styled from "styled-components";
65
import { Container } from "@/styles/layout";
76
import Loader from "@/component/Loader";
87
import { RecurringReservationForm } from "./RecurringReservationForm";
98
import { useRecurringReservationsUnits } from "./hooks";
10-
import LinkPrev from "@/component/LinkPrev";
11-
12-
const PreviousLinkWrapper = styled.div`
13-
padding: var(--spacing-s);
14-
`;
9+
import { LinkPrev } from "@/component/LinkPrev";
1510

1611
type Params = {
1712
unitId: string;
1813
reservationUnitId: string;
1914
};
2015

21-
function BackLinkHeader() {
22-
return (
23-
<PreviousLinkWrapper>
24-
<LinkPrev />
25-
</PreviousLinkWrapper>
26-
);
27-
}
28-
2916
function RecurringReservationInner({ unitId }: { unitId: number }) {
3017
const { t } = useTranslation();
3118

@@ -37,35 +24,36 @@ function RecurringReservationInner({ unitId }: { unitId: number }) {
3724

3825
return (
3926
<>
40-
<BackLinkHeader />
41-
<Container>
42-
<H1 $legacy>{t("MyUnits.RecurringReservation.pageTitle")}</H1>
43-
{reservationUnits !== undefined && reservationUnits?.length > 0 ? (
44-
<RecurringReservationForm reservationUnits={reservationUnits} />
45-
) : (
46-
<p>
47-
{t("MyUnits.RecurringReservation.error.notPossibleForThisUnit")}
48-
</p>
49-
)}
50-
</Container>
27+
<H1 $legacy>{t("MyUnits.RecurringReservation.pageTitle")}</H1>
28+
{reservationUnits !== undefined && reservationUnits?.length > 0 ? (
29+
<RecurringReservationForm reservationUnits={reservationUnits} />
30+
) : (
31+
<p>{t("MyUnits.RecurringReservation.error.notPossibleForThisUnit")}</p>
32+
)}
5133
</>
5234
);
5335
}
5436

37+
function RecurringErrorPage() {
38+
const { t } = useTranslation();
39+
return <div>{t("MyUnits.RecurringReservation.error.invalidUnitId")}</div>;
40+
}
41+
5542
// Handle invalid route params
5643
export function RecurringReservation() {
57-
const { t } = useTranslation();
5844
const { unitId } = useParams<Params>();
5945

60-
if (unitId == null || Number.isNaN(Number(unitId))) {
61-
return (
62-
<>
63-
<BackLinkHeader />
64-
<Container>
65-
<div>{t("MyUnits.RecurringReservation.error.invalidUnitId")}</div>
66-
</Container>
67-
</>
68-
);
69-
}
70-
return <RecurringReservationInner unitId={Number(unitId)} />;
46+
const isError = unitId == null || Number.isNaN(Number(unitId));
47+
return (
48+
<>
49+
<LinkPrev />
50+
<Container>
51+
{isError ? (
52+
<RecurringErrorPage />
53+
) : (
54+
<RecurringReservationInner unitId={Number(unitId)} />
55+
)}
56+
</Container>
57+
</>
58+
);
7159
}

apps/admin-ui/src/spa/recurring-reservations/application-rounds/[id]/allocation/index.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { AllocationPageContent } from "./ApplicationEvents";
3535
import { ComboboxFilter, SearchFilter } from "@/component/QueryParamFilters";
3636
import { convertPriorityFilter } from "./modules/applicationRoundAllocation";
3737
import { ApplicationRoundNode } from "common/gql/gql-types";
38+
import { LinkPrev } from "@/component/LinkPrev";
3839

3940
const MAX_RES_UNIT_NAME_LENGTH = 35;
4041

@@ -192,6 +193,7 @@ type ApplicationRoundFilterQueryType =
192193
type ReservationUnitFilterQueryType =
193194
NonNullable<ApplicationRoundFilterQueryType>["reservationUnits"][0];
194195
type UnitFilterQueryType = NonNullable<ReservationUnitFilterQueryType>["unit"];
196+
195197
function ApplicationRoundAllocation({
196198
applicationRound,
197199
applicationRoundPk,
@@ -655,7 +657,12 @@ function ApplicationRoundAllocationRouted(): JSX.Element {
655657
if (!applicationRoundPk || Number.isNaN(Number(applicationRoundPk))) {
656658
return <div>{t("errors.router.invalidApplicationRoundNumber")}</div>;
657659
}
658-
return <AllocationWrapper applicationRoundPk={Number(applicationRoundPk)} />;
660+
return (
661+
<>
662+
<LinkPrev />
663+
<AllocationWrapper applicationRoundPk={Number(applicationRoundPk)} />*
664+
</>
665+
);
659666
}
660667

661668
export default ApplicationRoundAllocationRouted;

0 commit comments

Comments
 (0)