import { useMutation, useSuspenseQuery } from "@tanstack/react-query"; import { createFileRoute, redirect } from "@tanstack/react-router"; import { createColumnHelper } from "@tanstack/react-table"; import axios from "axios"; import { Suspense, useMemo } from "react"; import { toast } from "sonner"; import { Card, CardContent, CardHeader, CardTitle, } from "../../components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger, } from "../../components/ui/tabs"; import { Tooltip, TooltipContent, TooltipTrigger, } from "../../components/ui/tooltip"; import { authClient } from "../../lib/auth-client"; import { getSettings } from "../../lib/queries/getSettings"; import EditableCellInput from "../../lib/tableStuff/EditableCellInput"; import LstTable from "../../lib/tableStuff/LstTable"; import SearchableHeader from "../../lib/tableStuff/SearchableHeader"; import SkellyTable from "../../lib/tableStuff/SkellyTable"; import FeatureSettings from "./-components/FeatureSettings"; type Settings = { settings_id: string; name: string; active: boolean; value: string; description: string; moduleName: string; roles: string[]; }; const updateSettings = async ( id: string, data: Record, ) => { //console.log(id, data); try { const res = await axios.patch(`/lst/api/settings/${id}`, data, { withCredentials: true, }); toast.success(`Setting just updated`); return res; } catch (err) { toast.error("Error in updating the settings"); return err; } }; export const Route = createFileRoute("/admin/settings")({ beforeLoad: async ({ location }) => { const { data: session } = await authClient.getSession(); const allowedRole = ["systemAdmin"]; if (!session?.user) { throw redirect({ to: "/", search: { redirect: location.href, }, }); } if (!allowedRole.includes(session.user.role as string)) { throw redirect({ to: "/", }); } return { user: session.user }; }, component: RouteComponent, }); function SettingsTableCard() { const { data, refetch } = useSuspenseQuery(getSettings()); const columnHelper = createColumnHelper(); const updateSetting = useMutation({ mutationFn: ({ id, field, value, }: { id: string; field: string; value: string | number | boolean | null; }) => updateSettings(id, { [field]: value }), onSuccess: () => { // refetch or update cache refetch(); }, }); const column = [ columnHelper.accessor("name", { header: ({ column }) => ( ), filterFn: "includesString", cell: (i) => i.getValue(), }), columnHelper.accessor("description", { header: ({ column }) => ( ), cell: (i) => ( {i.getValue().length > 25 ? ( {i.getValue().slice(0, 25)}... ) : ( {i.getValue()} )} {i.getValue()} ), }), columnHelper.accessor("value", { header: ({ column }) => ( ), filterFn: "includesString", cell: ({ row, getValue }) => ( { updateSetting.mutate({ id, field, value }); }} /> ), }), ]; const { standardSettings, featureSettings, systemSetting } = useMemo(() => { return { standardSettings: data.filter( (setting: any) => setting.settingType === "standard", ), featureSettings: data.filter( (setting: any) => setting.settingType === "feature", ), systemSetting: data.filter( (setting: any) => setting.settingType === "system", ), }; }, [data]); return ( <> ); } function RouteComponent() { return (

Settings

Manage your settings and related data.

System Settings Features System Standard }>
); }