78 lines
2.4 KiB
TypeScript

/* eslint-disable sonarjs/cognitive-complexity */
'use client';
import { useOrderStore } from './context';
import { type Steps } from './types';
import { useCustomerQuery, useIsMaster } from '@/hooks/api/customers';
import { type OrderFieldsFragment } from '@repo/graphql/types';
import { useEffect, useRef } from 'react';
const STEPS: Steps[] = [
'master-select',
'client-select',
'service-select',
'datetime-select',
'success',
];
export const MASTER_STEPS: Steps[] = STEPS.filter((step) => step !== 'master-select');
export const CLIENT_STEPS: Steps[] = STEPS.filter((step) => step !== 'client-select');
export function useInitOrderStore(initData: null | OrderFieldsFragment) {
const initialized = useRef(false);
const { data: { customer } = {} } = useCustomerQuery();
const isMaster = useIsMaster();
const setMasterId = useOrderStore((store) => store.setMasterId);
const setClientId = useOrderStore((store) => store.setClientId);
const setServiceId = useOrderStore((store) => store.setServiceId);
const setStep = useOrderStore((store) => store.setStep);
const setStepsSequence = useOrderStore((store) => store._setStepSequence);
const step = useOrderStore((store) => store.step);
useEffect(() => {
if (initialized.current || !customer || step !== 'loading') return;
const steps = isMaster ? MASTER_STEPS : CLIENT_STEPS;
setStepsSequence(steps);
// Инициализация из initData (например, для повторного заказа)
if (initData) {
const masterId = initData.slot?.master?.documentId;
const clientId = initData.client?.documentId;
const serviceId = initData.services?.[0]?.documentId;
if (masterId) setMasterId(masterId);
if (clientId) setClientId(clientId);
if (serviceId) setServiceId(serviceId);
if (masterId && clientId && serviceId) {
setStep('datetime-select');
} else if (masterId && clientId) {
setStep('service-select');
} else {
setStep(steps[0] ?? 'loading');
}
} else {
// Обычная инициализация (новый заказ)
if (isMaster) {
setMasterId(customer.documentId);
} else {
setClientId(customer.documentId);
}
setStep(steps[0] ?? 'loading');
}
initialized.current = true;
}, [
customer,
initData,
isMaster,
setClientId,
setMasterId,
setServiceId,
setStep,
setStepsSequence,
step,
]);
}