/* eslint-disable canonical/id-match */ /* eslint-disable promise/prefer-await-to-then */ 'use client'; import { Enum_Customer_Role } from '@repo/graphql/types'; import { Checkbox, type CheckboxProps } from '@repo/ui/components/ui/checkbox'; import { useState } from 'react'; import { useDebouncedCallback } from 'use-debounce'; type Props = Pick & { readonly description?: string; readonly onChange?: (value: Enum_Customer_Role) => Promise | void; readonly text: string; }; export function CheckboxWithText({ checked: initialValue, description, onChange, text }: Props) { const [checked, setChecked] = useState(initialValue); const { debouncedCallback, isPending } = useDebouncedOnChangeCallback(onChange); const handleChange = () => { const newValue = !checked; setChecked(newValue); debouncedCallback(newValue); }; return (
{description ?

{description}

: false}
); } function useDebouncedOnChangeCallback( callback: ((value: Enum_Customer_Role) => Promise | void) | undefined, ) { const [isPending, setIsPending] = useState(false); const debouncedCallback = useDebouncedCallback((checked: boolean) => { if (!callback) return; setIsPending(true); const result = callback(checked ? Enum_Customer_Role.Master : Enum_Customer_Role.Client); if (result instanceof Promise) { result.finally(() => setIsPending(false)); } else { setIsPending(false); } }, 300); return { debouncedCallback, isPending, }; }