Skip to content

Commit 1c499dd

Browse files
committed
generify modal props
1 parent 6957f21 commit 1c499dd

5 files changed

Lines changed: 32 additions & 25 deletions

File tree

apps/site/components/Downloads/ReleaseModal/index.tsx

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,25 @@ import { ReleaseOverview } from '#site/components/Downloads/ReleaseOverview';
88
import Link from '#site/components/Link';
99
import type { ModalProps, NodeRelease } from '#site/types';
1010

11-
const ReleaseModal: FC<ModalProps> = ({ open, closeModal, data }) => {
12-
const release = data as NodeRelease;
11+
const ReleaseModal: FC<ModalProps<NodeRelease>> = ({
12+
open,
13+
closeModal,
14+
data,
15+
}) => {
1316
const t = useTranslations();
1417

15-
const modalHeadingKey = release.codename
18+
const modalHeadingKey = data.codename
1619
? 'components.releaseModal.title'
1720
: 'components.releaseModal.titleWithoutCodename';
1821

1922
const modalHeading = t(modalHeadingKey, {
20-
version: release.major,
21-
codename: release.codename ?? '',
23+
version: data.major,
24+
codename: data.codename ?? '',
2225
});
2326

2427
return (
2528
<Modal open={open} onOpenChange={closeModal}>
26-
{release.status === 'End-of-life' && (
29+
{data.status === 'End-of-life' && (
2730
<div className="mb-4">
2831
<AlertBox
2932
title={t('components.common.alertBox.warning')}
@@ -41,7 +44,7 @@ const ReleaseModal: FC<ModalProps> = ({ open, closeModal, data }) => {
4144
</div>
4245
)}
4346

44-
{release.isLts && (
47+
{data.isLts && (
4548
<div className="mb-4">
4649
<AlertBox
4750
title={t('components.common.alertBox.info')}
@@ -58,11 +61,11 @@ const ReleaseModal: FC<ModalProps> = ({ open, closeModal, data }) => {
5861
<Title>{modalHeading}</Title>
5962

6063
<Content>
61-
<ReleaseOverview release={release} />
64+
<ReleaseOverview release={data} />
6265

6366
<h5>{t('components.releaseModal.minorVersions')}</h5>
6467

65-
<MinorReleasesTable releases={release.minorVersions} />
68+
<MinorReleasesTable releases={data.minorVersions} />
6669
</Content>
6770
</Modal>
6871
);

apps/site/components/EOL/EOLModal/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ import type {
1212
UnknownSeverityVulnerability,
1313
} from '#site/types/vulnerabilities';
1414

15-
const EOLModal: FC<ModalProps> = ({ open, closeModal, data }) => {
16-
const { release, vulnerabilities } = data as EOLModalData;
15+
const EOLModal: FC<ModalProps<EOLModalData>> = ({
16+
open,
17+
closeModal,
18+
data: { release, vulnerabilities },
19+
}) => {
1720
const t = useTranslations();
1821

1922
const modalHeading = release.codename

apps/site/components/withLayout.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ const layouts = {
2121
article: ArticlePageLayout,
2222
} satisfies Record<Layouts, FC>;
2323

24-
type WithLayoutProps<L = Layouts> = PropsWithChildren<{
25-
layout: L;
26-
}>;
24+
type WithLayoutProps<L = Layouts> = PropsWithChildren<{ layout: L }>;
2725

2826
const WithLayout: FC<WithLayoutProps<Layouts>> = ({ layout, children }) => {
2927
const LayoutComponent = layouts[layout] ?? DefaultLayout;

apps/site/providers/modalProvider.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use client';
22

33
import { createContext, useState } from 'react';
4-
import type { FC, ComponentType, PropsWithChildren } from 'react';
4+
import type { ComponentType, PropsWithChildren } from 'react';
55

66
import type { ModalContextType, ModalProps } from '#site/types/modal';
77

@@ -11,12 +11,13 @@ export const ModalContext = createContext<ModalContextType>({
1111
closeModal: () => {},
1212
});
1313

14-
export const ModalProvider: FC<
15-
PropsWithChildren<{ Component: ComponentType<ModalProps> }>
16-
> = ({ Component, children }) => {
17-
const [data, setData] = useState<unknown>(null);
14+
export const ModalProvider = <T,>({
15+
Component,
16+
children,
17+
}: PropsWithChildren<{ Component: ComponentType<ModalProps<T>> }>) => {
18+
const [data, setData] = useState<T | null>(null);
1819

19-
const openModal = (newData: unknown) => {
20+
const openModal = (newData: T) => {
2021
setData(newData);
2122
};
2223

@@ -25,7 +26,9 @@ export const ModalProvider: FC<
2526
};
2627

2728
return (
28-
<ModalContext.Provider value={{ data, openModal, closeModal }}>
29+
<ModalContext.Provider
30+
value={{ data, openModal, closeModal } as ModalContextType<T>}
31+
>
2932
{children}
3033
{!!data && (
3134
<Component open={!!data} closeModal={closeModal} data={data} />

apps/site/types/modal.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
export type ModalProps = {
1+
export type ModalProps<T = unknown> = {
22
open: boolean;
33
closeModal: () => void;
4-
data: unknown;
4+
data: T;
55
};
66

7-
export type ModalContextType = {
8-
data: unknown;
7+
export type ModalContextType<T = unknown> = {
8+
data: T;
99
openModal: (data: unknown) => void;
1010
closeModal: () => void;
1111
};

0 commit comments

Comments
 (0)