import { Channels } from "@app/components/PageComponents/Channels/Channels"; import { LoRa } from "@components/PageComponents/Settings/LoRa.tsx"; import { Security } from "@components/PageComponents/Settings/Security/Security.tsx"; import { Spinner } from "@components/UI/Spinner.tsx"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@components/UI/Tabs.tsx"; import { useDevice, type ValidConfigType } from "@core/stores"; import { type ComponentType, Suspense, useMemo } from "react"; import type { UseFormReturn } from "react-hook-form"; import { useTranslation } from "react-i18next"; interface ConfigProps { onFormInit: (methods: UseFormReturn) => void; } type TabItem = { case: ValidConfigType | "channels"; label: string; element: ComponentType; count?: number; }; export const RadioConfig = ({ onFormInit }: ConfigProps) => { const { hasConfigChange } = useDevice(); const { t } = useTranslation("config"); const tabs: TabItem[] = useMemo( () => [ { case: "lora", label: t("page.tabLora"), element: LoRa, }, { case: "channels", label: t("page.tabChannels"), element: Channels, }, { case: "security", label: t("page.tabSecurity"), element: Security, }, ], [t], ); const flags = useMemo( () => new Map(tabs.map((tab) => [tab.case, tab.case !== "channels" && hasConfigChange(tab.case)])), [tabs, hasConfigChange], ); return ( {tabs.map((tab) => ( {tab.label} {flags.get(tab.case) && ( )} ))} {tabs.map((tab) => ( }> ))} ); };