import { Button, Group, Text, Modal, TextInput } from "@mantine/core"; import * as z from "zod"; import { useState } from "react"; import { useDisclosure } from "@mantine/hooks"; import * as React from "react"; import { useForm, zodResolver } from "@mantine/form"; import { notifications } from "@mantine/notifications"; import { useTranslation } from "react-i18next"; import { getSubdomainHost } from "@/lib/config.ts"; import { IWorkspace } from "@/features/workspace/types/workspace.types.ts"; import { updateWorkspace } from "@/features/workspace/services/workspace-service.ts"; import { getHostnameUrl } from "@/ee/utils.ts"; import { useAtom } from "jotai/index"; import { currentUserAtom, workspaceAtom, } from "@/features/user/atoms/current-user-atom.ts"; import useUserRole from "@/hooks/use-user-role.tsx"; import { RESET } from "jotai/utils"; export default function ManageHostname() { const { t } = useTranslation(); const [opened, { open, close }] = useDisclosure(false); const [workspace] = useAtom(workspaceAtom); const { isAdmin } = useUserRole(); return ( {t("Hostname")} {workspace?.hostname}.{getSubdomainHost()} {isAdmin && ( {t("Change hostname")} )} ); } const formSchema = z.object({ hostname: z.string().min(4), }); type FormValues = z.infer; interface ChangeHostnameFormProps { onClose?: () => void; } function ChangeHostnameForm({ onClose }: ChangeHostnameFormProps) { const { t } = useTranslation(); const [isLoading, setIsLoading] = useState(false); const [currentUser, setCurrentUser] = useAtom(currentUserAtom); const form = useForm({ validate: zodResolver(formSchema), initialValues: { hostname: currentUser?.workspace?.hostname, }, }); async function handleSubmit(data: Partial) { setIsLoading(true); if (data.hostname === currentUser?.workspace?.hostname) { onClose(); return; } try { await updateWorkspace({ hostname: data.hostname, }); setCurrentUser(RESET); window.location.href = getHostnameUrl(data.hostname.toLowerCase()); } catch (err) { notifications.show({ message: err?.response?.data?.message, color: "red", }); } setIsLoading(false); } return ( .{getSubdomainHost()}} rightSectionWidth={150} withErrorStyles={false} width={200} {...form.getInputProps("hostname")} /> {t("Change hostname")} ); }