import { useStore } from "zustand"; import { settingsDialog } from "../stores/dialogs"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "~/components/ui/dialog"; import { useMemo, useState } from "react"; import { useProjectContext } from "../context/project"; import { useForm, useFormReturn } from "~/hooks/useForm"; import Input from "~/components/ui/input"; import Select from "~/components/ui/select"; import { Button } from "~/components/ui/button"; import { ProjectSettingsSchema, projectSettingsSchema } from "../lib/schema"; import { cssPreprocessorList, jsTranspilerList, visibilityList, } from "../lib/consts"; import trpc from "~/lib/trpc"; import { toast } from "~/lib/utils"; import Checkbox from "~/components/ui/checkbox"; import Tabs, { Tab } from "~/components/ui/tabs"; import { navigate } from "vike/client/router"; const defaultValues: ProjectSettingsSchema = { title: "", // slug: "", visibility: "private", settings: { css: { preprocessor: null, tailwindcss: false, }, js: { transpiler: null, packages: [], }, }, }; const SettingsDialog = () => { const { project } = useProjectContext(); const [tab, setTab] = useState(0); const initialValues = useMemo(() => { return Object.assign(defaultValues, { title: project.title, settings: project.settings, visibility: project.visibility, }); }, [project]); const open = useStore(settingsDialog); const form = useForm(projectSettingsSchema, initialValues); const save = trpc.project.update.useMutation({ onSuccess(data) { toast.success("Project updated!"); onClose(); if (data.slug !== project.slug) { navigate(`/${data.slug}`); } }, }); const onClose = () => { settingsDialog.setState(false); }; const onSubmit = form.handleSubmit((values) => { save.mutate({ ...values, id: project.id }); }); const tabs: Tab[] = useMemo( () => [ { title: "General", render: () => , }, { title: "CSS", render: () => , }, { title: "Javascript", render: () => , }, ], [] ); return ( Project Settings Cancel Save Settings ); }; type TabProps = { form: useFormReturn; }; const GeneralTab = ({ form }: TabProps) => { return ( {/* */} ); }; const CSSTab = ({ form }: TabProps) => { return ( ); }; const JSTab = ({ form }: TabProps) => { return ( * Set transpiler to SWC to use JSX ); }; export default SettingsDialog;
* Set transpiler to SWC to use JSX