"use client"; import { Button, Group, Stack } from "@mantine/core"; import type { WidgetKind } from "@homarr/definitions"; import { createModal } from "@homarr/modals"; import { useI18n } from "@homarr/translation/client"; import type { BoardItemIntegration } from "@homarr/validation"; import { widgetImports } from ".."; import { getInputForType } from "../_inputs"; import { FormProvider, useForm } from "../_inputs/form"; import type { OptionsBuilderResult } from "../options"; import type { IntegrationSelectOption } from "../widget-integration-select"; import { WidgetIntegrationSelect } from "../widget-integration-select"; export interface WidgetEditModalState { options: Record; integrations: BoardItemIntegration[]; } interface ModalProps { kind: TSort; value: WidgetEditModalState; onSuccessfulEdit: (value: WidgetEditModalState) => void; integrationData: IntegrationSelectOption[]; integrationSupport: boolean; } export const WidgetEditModal = createModal>(({ actions, innerProps }) => { const t = useI18n(); const form = useForm({ initialValues: innerProps.value, }); const { definition } = widgetImports[innerProps.kind]; return (
{ innerProps.onSuccessfulEdit(values); actions.closeModal(); })} > {innerProps.integrationSupport && ( )} {Object.entries(definition.options).map(([key, value]: [string, OptionsBuilderResult[string]]) => { const Input = getInputForType(value.type); if (!Input || value.shouldHide?.(form.values.options as never)) { return null; } return ; })}
); }).withOptions({ keepMounted: true, });