import find from "lodash/find"; import { observer } from "mobx-react"; import * as React from "react"; import { useForm } from "react-hook-form"; import { useTranslation, Trans } from "react-i18next"; import { toast } from "sonner"; import { IntegrationType, IntegrationService } from "@shared/types"; import Integration from "~/models/Integration"; import { IntegrationScene } from "~/scenes/Settings/components/IntegrationScene"; import SettingRow from "~/scenes/Settings/components/SettingRow"; import Button from "~/components/Button"; import Heading from "~/components/Heading"; import Input from "~/components/Input"; import Text from "~/components/Text"; import useStores from "~/hooks/useStores"; import Icon from "./Icon"; type FormData = { umamiDomain: string; umamiScriptName: string; umamiWebsiteId: string; }; function Umami() { const { integrations } = useStores(); const { t } = useTranslation(); const integration = find(integrations.orderedData, { type: IntegrationType.Analytics, service: IntegrationService.Umami, }) as Integration | undefined; const { register, reset, handleSubmit: formHandleSubmit, formState, } = useForm({ mode: "all", defaultValues: { umamiDomain: integration?.settings.instanceUrl, umamiScriptName: integration?.settings.scriptName, umamiWebsiteId: integration?.settings.measurementId, }, }); React.useEffect(() => { void integrations.fetchPage({ type: IntegrationType.Analytics, }); }, [integrations]); React.useEffect(() => { reset({ umamiWebsiteId: integration?.settings.measurementId, umamiDomain: integration?.settings.instanceUrl, umamiScriptName: integration?.settings.scriptName, }); }, [integration, reset]); const handleSubmit = React.useCallback( async (data: FormData) => { try { if (data.umamiDomain && data.umamiScriptName && data.umamiWebsiteId) { await integrations.save({ id: integration?.id, type: IntegrationType.Analytics, service: IntegrationService.Umami, settings: { measurementId: data.umamiWebsiteId, instanceUrl: data.umamiDomain.replace(/\/?$/, "/"), scriptName: data.umamiScriptName, } as Integration["settings"], }); } else { await integration?.delete(); } toast.success(t("Settings saved")); } catch (err) { toast.error(err.message); } }, [integrations, integration, t] ); return ( }> Umami Configure a Umami installation to send views and analytics from the workspace to your own Umami instance.
); } export default observer(Umami);