59e945562d
* Add page_hierarchy table * feat(ee): page-level permissions * pagination * rename migration fixes * fix * tabs * fix theme * cleanup * sync * page permissions notification * other fixes * sharing disbled * fix column nodes * toggle error handling
61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import { userAtom } from "@/features/user/atoms/current-user-atom.ts";
|
|
import { updateUser } from "@/features/user/services/user-service.ts";
|
|
import { MantineSize, Switch, Text } from "@mantine/core";
|
|
import { useAtom } from "jotai/index";
|
|
import React, { useState } from "react";
|
|
import { useTranslation } from "react-i18next";
|
|
import { ResponsiveSettingsRow, ResponsiveSettingsContent, ResponsiveSettingsControl } from "@/components/ui/responsive-settings-row";
|
|
|
|
export default function PageWidthPref() {
|
|
const { t } = useTranslation();
|
|
|
|
return (
|
|
<ResponsiveSettingsRow>
|
|
<ResponsiveSettingsContent>
|
|
<Text size="md">{t("Full page width")}</Text>
|
|
<Text size="sm" c="dimmed">
|
|
{t("Choose your preferred page width.")}
|
|
</Text>
|
|
</ResponsiveSettingsContent>
|
|
|
|
<ResponsiveSettingsControl>
|
|
<PageWidthToggle />
|
|
</ResponsiveSettingsControl>
|
|
</ResponsiveSettingsRow>
|
|
);
|
|
}
|
|
|
|
interface PageWidthToggleProps {
|
|
size?: MantineSize;
|
|
label?: string;
|
|
}
|
|
|
|
export function PageWidthToggle({ size, label }: PageWidthToggleProps) {
|
|
const { t } = useTranslation();
|
|
const [user, setUser] = useAtom(userAtom);
|
|
const [checked, setChecked] = useState(
|
|
user.settings?.preferences?.fullPageWidth,
|
|
);
|
|
|
|
const handleChange = async (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
const value = event.currentTarget.checked;
|
|
setChecked(value);
|
|
try {
|
|
const updatedUser = await updateUser({ fullPageWidth: value });
|
|
setUser(updatedUser);
|
|
} catch {
|
|
setChecked(!value);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<Switch
|
|
size={size}
|
|
label={label}
|
|
labelPosition="left"
|
|
defaultChecked={checked}
|
|
onChange={handleChange}
|
|
aria-label={t("Toggle full page width")}
|
|
/>
|
|
);
|
|
} |