mirror of
https://github.com/Mail-0/Zero.git
synced 2026-03-03 02:57:02 +00:00
Ran oxc (https://oxc.rs/docs/guide/usage/linter.html#vscode-extension) and fixed all the issues that came up, set it up to run as a PR check and added steps to the README.md asking users to use it. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Introduced JavaScript linting using oxlint in development guidelines and CI workflow for improved code quality. * Added oxlint configuration and dependencies to the project. * **Bug Fixes** * Improved error logging in various components and utilities for better debugging. * Enhanced React list rendering by updating keys to use unique values instead of array indices, reducing rendering issues. * Replaced browser alerts with toast notifications for a smoother user experience. * **Refactor** * Simplified component logic and state management by removing unused code, imports, props, and components across multiple files. * Updated function and component signatures for clarity and maintainability. * Improved efficiency of certain operations by switching from arrays to sets for membership checks. * **Chores** * Cleaned up and reorganized import statements throughout the codebase. * Removed deprecated files, components, and middleware to streamline the codebase. * **Documentation** * Updated contribution guidelines to include linting requirements for code submissions. * **Style** * Minor formatting and readability improvements in JSX and code structure. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
107 lines
3.7 KiB
TypeScript
107 lines
3.7 KiB
TypeScript
import {
|
|
Form,
|
|
FormControl,
|
|
FormDescription,
|
|
FormField,
|
|
FormItem,
|
|
FormLabel,
|
|
} from '@/components/ui/form';
|
|
import { SettingsCard } from '@/components/settings/settings-card';
|
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
import { Switch } from '@/components/ui/switch';
|
|
import { Button } from '@/components/ui/button';
|
|
import { m } from '@/paraglide/messages';
|
|
import { useForm } from 'react-hook-form';
|
|
|
|
import { useState } from 'react';
|
|
import * as z from 'zod';
|
|
|
|
const formSchema = z.object({
|
|
twoFactorAuth: z.boolean(),
|
|
loginNotifications: z.boolean(),
|
|
});
|
|
|
|
export default function SecurityPage() {
|
|
const [isSaving, setIsSaving] = useState(false);
|
|
|
|
const form = useForm<z.infer<typeof formSchema>>({
|
|
resolver: zodResolver(formSchema),
|
|
defaultValues: {
|
|
twoFactorAuth: false,
|
|
loginNotifications: true,
|
|
},
|
|
});
|
|
|
|
function onSubmit(values: z.infer<typeof formSchema>) {
|
|
setIsSaving(true);
|
|
|
|
// TODO: Save settings in user's account
|
|
setTimeout(() => {
|
|
console.log(values);
|
|
setIsSaving(false);
|
|
}, 1000);
|
|
}
|
|
|
|
return (
|
|
<div className="grid gap-6">
|
|
<SettingsCard
|
|
title={m['pages.settings.security.title']()}
|
|
description={m['pages.settings.security.description']()}
|
|
footer={
|
|
<div className="flex gap-4">
|
|
<Button variant="destructive">{m['pages.settings.security.deleteAccount']()}</Button>
|
|
<Button type="submit" form="security-form" disabled={isSaving}>
|
|
{isSaving ? m['common.actions.saving']() : m['common.actions.saveChanges']()}
|
|
</Button>
|
|
</div>
|
|
}
|
|
>
|
|
<Form {...form}>
|
|
<form id="security-form" onSubmit={form.handleSubmit(onSubmit)} className="space-y-8">
|
|
<div className="flex w-full flex-col items-center gap-5 md:flex-row">
|
|
<FormField
|
|
control={form.control}
|
|
name="twoFactorAuth"
|
|
render={({ field }) => (
|
|
<FormItem className="bg-popover flex w-full flex-row items-center justify-between rounded-lg border p-4 md:w-auto">
|
|
<div className="space-y-0.5">
|
|
<FormLabel className="text-base">
|
|
{m['pages.settings.security.twoFactorAuth']()}
|
|
</FormLabel>
|
|
<FormDescription>
|
|
{m['pages.settings.security.twoFactorAuthDescription']()}
|
|
</FormDescription>
|
|
</div>
|
|
<FormControl className="ml-4">
|
|
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
|
</FormControl>
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
<FormField
|
|
control={form.control}
|
|
name="loginNotifications"
|
|
render={({ field }) => (
|
|
<FormItem className="bg-popover flex w-full flex-row items-center justify-between rounded-lg border p-4 md:w-auto">
|
|
<div className="space-y-0.5">
|
|
<FormLabel className="text-base">
|
|
{m['pages.settings.security.loginNotifications']()}
|
|
</FormLabel>
|
|
<FormDescription>
|
|
{m['pages.settings.security.loginNotificationsDescription']()}
|
|
</FormDescription>
|
|
</div>
|
|
<FormControl className="ml-4">
|
|
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
|
</FormControl>
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
</div>
|
|
</form>
|
|
</Form>
|
|
</SettingsCard>
|
|
</div>
|
|
);
|
|
}
|