"use client"; import { useState } from "react"; import { Button, Group, Stack } from "@mantine/core"; import type { WidgetKind } from "@homarr/definitions"; import { createModal, useModalAction } from "@homarr/modals"; import { useI18n } from "@homarr/translation/client"; import { widgetImports } from ".."; import { getInputForType } from "../_inputs"; import { FormProvider, useForm } from "../_inputs/form"; import type { BoardItemAdvancedOptions } from "../../../validation/src/shared"; import type { OptionsBuilderResult } from "../options"; import type { IntegrationSelectOption } from "../widget-integration-select"; import { WidgetIntegrationSelect } from "../widget-integration-select"; import { WidgetAdvancedOptionsModal } from "./widget-advanced-options-modal"; export interface WidgetEditModalState { options: Record; integrationIds: string[]; advancedOptions: BoardItemAdvancedOptions; } interface ModalProps { kind: TSort; value: WidgetEditModalState; onSuccessfulEdit: (value: WidgetEditModalState) => void; integrationData: IntegrationSelectOption[]; integrationSupport: boolean; } export const WidgetEditModal = createModal>(({ actions, innerProps }) => { const t = useI18n(); const [advancedOptions, setAdvancedOptions] = useState(innerProps.value.advancedOptions); const form = useForm({ initialValues: innerProps.value, }); const { openModal } = useModalAction(WidgetAdvancedOptionsModal); const { definition } = widgetImports[innerProps.kind]; return (
{ innerProps.onSuccessfulEdit({ ...values, advancedOptions, }); actions.closeModal(); })} > {innerProps.integrationSupport && ( )} {Object.entries(definition.options).map(([key, value]: [string, OptionsBuilderResult[string]]) => { const Input = getInputForType(value.type); // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!Input || value.shouldHide?.(form.values.options as never)) { return null; } return ; })}
); }).withOptions({ keepMounted: true, defaultTitle(t) { return t("item.edit.title"); }, size: "lg", });