/* eslint-disable canonical/id-match */ 'use client'; import { type ProfileProps } from '../types'; import { CheckboxWithText, TextField } from '@/components/shared/data-fields'; import { CardSectionHeader } from '@/components/ui'; import { useCustomerMutation, useCustomerQuery } from '@/hooks/api/customers'; import { Enum_Customer_Role } from '@repo/graphql/types'; import { Button } from '@repo/ui/components/ui/button'; import { Card } from '@repo/ui/components/ui/card'; import Link from 'next/link'; import { useState } from 'react'; export function ContactDataCard({ telegramId }: Readonly) { const { data: { customer } = {} } = useCustomerQuery({ telegramId }); if (!customer) return null; return (
); } export function ProfileDataCard() { const { data: { customer } = {} } = useCustomerQuery(); const { cancelChanges, hasChanges, isPending, resetTrigger, saveChanges, updateField } = useProfileEdit(); if (!customer) return null; return (
updateField('name', value)} value={customer?.name ?? ''} /> updateField('role', checked ? Enum_Customer_Role.Master : Enum_Customer_Role.Client) } text="Быть мастером" /> {hasChanges && (
)}
); } function useProfileEdit() { const { isPending, mutate } = useCustomerMutation(); const [pendingChanges, setPendingChanges] = useState>({}); const [resetTrigger, setResetTrigger] = useState(0); const updateField = (field: string, value: unknown) => { setPendingChanges((previous) => ({ ...previous, [field]: value })); }; const saveChanges = () => { if (Object.keys(pendingChanges).length === 0) return; mutate({ data: pendingChanges }); setPendingChanges({}); }; const cancelChanges = () => { setPendingChanges({}); setResetTrigger((previous) => previous + 1); }; const hasChanges = Object.keys(pendingChanges).length > 0; return { cancelChanges, hasChanges, isPending, resetTrigger, saveChanges, updateField, }; }