import { head } from "lodash"; import { observer } from "mobx-react"; import { BuildingBlocksIcon } from "outline-icons"; import * as React from "react"; import { useForm } from "react-hook-form"; import { useTranslation, Trans } from "react-i18next"; import { IntegrationType } from "@shared/types"; import Integration from "~/models/Integration"; import Button from "~/components/Button"; import Heading from "~/components/Heading"; import { ReactHookWrappedInput as Input } from "~/components/Input"; import Scene from "~/components/Scene"; import Text from "~/components/Text"; import useStores from "~/hooks/useStores"; import useToasts from "~/hooks/useToasts"; type FormData = { url: string; }; const SERVICE_NAME = "diagrams"; function Drawio() { const { integrations } = useStores(); const { t } = useTranslation(); const { showToast } = useToasts(); React.useEffect(() => { integrations.fetchPage({ service: SERVICE_NAME, type: IntegrationType.Embed, }); }, [integrations]); const integration = head(integrations.orderedData) as | Integration | undefined; const { register, handleSubmit: formHandleSubmit, formState } = useForm< FormData >({ mode: "all", defaultValues: { url: integration?.settings.url, }, }); const handleSubmit = React.useCallback( async (data: FormData) => { try { await integrations.save({ id: integration?.id, type: IntegrationType.Embed, service: SERVICE_NAME, settings: { url: data.url, }, }); showToast(t("Settings saved"), { type: "success", }); } catch (err) { showToast(err.message, { type: "error", }); } }, [integrations, integration, t, showToast] ); return ( }> Draw.io Add your self-hosted draw.io installation url here to enable automatic embedding of diagrams within documents.

); } export default observer(Drawio);