From 10b7b8ccc7e54feb406d02b2819772c4be9fabdc Mon Sep 17 00:00:00 2001 From: "ThetaLog(n)" Date: Mon, 19 Jan 2026 11:51:36 +0100 Subject: [PATCH 1/2] refactor: mark props as read-only in multiple frontend components --- frontend/src/app/global-error.tsx | 2 +- frontend/src/app/members/[memberKey]/layout.tsx | 4 ++-- frontend/src/app/projects/layout.tsx | 6 +++++- frontend/src/components/LogoCarousel.tsx | 4 +++- frontend/src/components/MarkdownWrapper.tsx | 8 +++++++- frontend/src/components/NavDropDown.tsx | 5 ++++- frontend/src/wrappers/provider.tsx | 6 +++++- 7 files changed, 27 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/global-error.tsx b/frontend/src/app/global-error.tsx index 975d86d2f4..6b0c5442b9 100644 --- a/frontend/src/app/global-error.tsx +++ b/frontend/src/app/global-error.tsx @@ -102,7 +102,7 @@ export const ErrorWrapper: React.FC<{ children: React.ReactNode }> = ({ children ) } -export default function GlobalError({ error }: { error: Error }) { +export default function GlobalError({ error }: Readonly<{ error: Error }>) { Sentry.captureException(error) const errorConfig = ERROR_CONFIGS['500'] return diff --git a/frontend/src/app/members/[memberKey]/layout.tsx b/frontend/src/app/members/[memberKey]/layout.tsx index f71eb14531..b633c69a32 100644 --- a/frontend/src/app/members/[memberKey]/layout.tsx +++ b/frontend/src/app/members/[memberKey]/layout.tsx @@ -38,10 +38,10 @@ export async function generateMetadata({ export default async function UserDetailsLayout({ children, params, -}: { +}: Readonly<{ children: React.ReactNode params: Promise<{ memberKey: string }> -}) { +}>) { const { memberKey } = await params const { data } = await apolloClient.query({ diff --git a/frontend/src/app/projects/layout.tsx b/frontend/src/app/projects/layout.tsx index 4698d0d43b..eb36cdc080 100644 --- a/frontend/src/app/projects/layout.tsx +++ b/frontend/src/app/projects/layout.tsx @@ -3,6 +3,10 @@ import React from 'react' import { getStaticMetadata } from 'utils/metaconfig' export const metadata: Metadata = getStaticMetadata('projects', '/projects') -export default function ProjectsLayout({ children }: { children: React.ReactNode }) { +export default function ProjectsLayout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { return <>{children} } diff --git a/frontend/src/components/LogoCarousel.tsx b/frontend/src/components/LogoCarousel.tsx index 4eaae45ed5..0fbbca5b5a 100644 --- a/frontend/src/components/LogoCarousel.tsx +++ b/frontend/src/components/LogoCarousel.tsx @@ -7,7 +7,9 @@ interface MovingLogosProps { sponsors: Sponsor[] } -export default function MovingLogos({ sponsors }: MovingLogosProps) { +export default function MovingLogos({ + sponsors, +}: Readonly) { const scrollerRef = useRef(null) useEffect(() => { diff --git a/frontend/src/components/MarkdownWrapper.tsx b/frontend/src/components/MarkdownWrapper.tsx index 2eb8dbfee4..729a2fd662 100644 --- a/frontend/src/components/MarkdownWrapper.tsx +++ b/frontend/src/components/MarkdownWrapper.tsx @@ -2,7 +2,13 @@ import DOMPurify from 'dompurify' import markdownit from 'markdown-it' import taskLists from 'markdown-it-task-lists' -export default function Markdown({ content, className }: { content: string; className?: string }) { +export default function Markdown({ + content, + className, +}: Readonly<{ + content: string + className?: string +}>) { // prettier-ignore const md = markdownit({ // NOSONAR - Safe to use markdown-it as we use DOMPurify to sanitize the content. breaks: true, diff --git a/frontend/src/components/NavDropDown.tsx b/frontend/src/components/NavDropDown.tsx index 687e45e6f8..27a691520e 100644 --- a/frontend/src/components/NavDropDown.tsx +++ b/frontend/src/components/NavDropDown.tsx @@ -8,8 +8,11 @@ interface NavDropDownProps { pathname: string link: LinkType } +export default function NavDropdown({ + link, + pathname, +}: Readonly) { -export default function NavDropdown({ link, pathname }: NavDropDownProps) { const [isOpen, setIsOpen] = useState(false) const dropdownRef = useRef(null) const dropdownId = useId() diff --git a/frontend/src/wrappers/provider.tsx b/frontend/src/wrappers/provider.tsx index ef0590ab8d..0d935724c9 100644 --- a/frontend/src/wrappers/provider.tsx +++ b/frontend/src/wrappers/provider.tsx @@ -17,7 +17,11 @@ function AppInitializer() { return null } -export function Providers({ children }: { children: React.ReactNode }) { +export function Providers({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { return ( From 3766f637e98622e1bfa4cf8dc6db54fefe86dd25 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets Date: Mon, 19 Jan 2026 19:29:39 -0800 Subject: [PATCH 2/2] Run make-check --- frontend/src/components/LogoCarousel.tsx | 4 +--- frontend/src/components/NavDropDown.tsx | 6 +----- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/frontend/src/components/LogoCarousel.tsx b/frontend/src/components/LogoCarousel.tsx index 0fbbca5b5a..9b99cf7766 100644 --- a/frontend/src/components/LogoCarousel.tsx +++ b/frontend/src/components/LogoCarousel.tsx @@ -7,9 +7,7 @@ interface MovingLogosProps { sponsors: Sponsor[] } -export default function MovingLogos({ - sponsors, -}: Readonly) { +export default function MovingLogos({ sponsors }: Readonly) { const scrollerRef = useRef(null) useEffect(() => { diff --git a/frontend/src/components/NavDropDown.tsx b/frontend/src/components/NavDropDown.tsx index 27a691520e..4a19b8b9bf 100644 --- a/frontend/src/components/NavDropDown.tsx +++ b/frontend/src/components/NavDropDown.tsx @@ -8,11 +8,7 @@ interface NavDropDownProps { pathname: string link: LinkType } -export default function NavDropdown({ - link, - pathname, -}: Readonly) { - +export default function NavDropdown({ link, pathname }: Readonly) { const [isOpen, setIsOpen] = useState(false) const dropdownRef = useRef(null) const dropdownId = useId()