This commit is contained in:
Gavin McDonald
2025-04-16 09:18:41 -04:00
parent 4c5eb541bc
commit 3018cd7c10
2 changed files with 51 additions and 0 deletions

44
components/Settings.tsx Normal file
View File

@@ -0,0 +1,44 @@
'use client';
import { useState } from 'react';
import { Settings as Gear } from 'lucide-react';
import { Settings } from '@/types';
type PermissionTogglePanelProps = {
settings: Settings;
changeAction: (updatedSettings: Settings) => void;
};
export default function PermissionTogglePanel({
settings,
changeAction,
}: PermissionTogglePanelProps) {
const [open, setOpen] = useState(false);
const togglePermission = (key: string) => {
changeAction({ ...settings, [key]: !settings[key] });
};
return (
<div className="fixed top-4 right-4 z-50">
<button
className="p-2 rounded-full bg-gray-100 hover:bg-gray-200 shadow"
onClick={() => setOpen((prev) => !prev)}
>
<Gear className="w-5 h-5" />
</button>
{open && (
<div className="mt-2 bg-white border border-gray-300 shadow-lg rounded p-4 space-y-2">
{Object.entries(settings).map(([key, value]) => (
<label key={key} className="flex items-center justify-between">
<span className="text-sm capitalize">{key}</span>
<input type="checkbox" checked={value} onChange={() => togglePermission(key)} />
</label>
))}
</div>
)}
</div>
);
}

7
tools/omit.ts Normal file
View File

@@ -0,0 +1,7 @@
export default function omit<T extends Record<string, any>>(
obj: T,
propToRemove: keyof T,
): Omit<T, typeof propToRemove> {
const { [propToRemove]: _, ...rest } = obj;
return rest;
}