import type { ScheduleFrequency, ScheduleMode, ScheduleTriggerNodeType } from './types' import { useQuery } from '@tanstack/react-query' import { useCallback, useMemo } from 'react' import { useNodesReadOnly } from '@/app/components/workflow/hooks' import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud' import { userProfileQueryOptions } from '@/features/account-profile/client' import { getDefaultVisualConfig } from './constants' const useConfig = (id: string, payload: ScheduleTriggerNodeType) => { const { nodesReadOnly: readOnly } = useNodesReadOnly() const { data: timezone } = useQuery({ ...userProfileQueryOptions(), select: (data) => data.profile.timezone ?? undefined, }) const frontendPayload = useMemo(() => { return { ...payload, mode: payload.mode || 'visual', frequency: payload.frequency || 'daily', timezone: payload.timezone || timezone || 'UTC', visual_config: { ...getDefaultVisualConfig(), ...payload.visual_config, }, } }, [payload, timezone]) const { inputs, setInputs } = useNodeCrud(id, frontendPayload) const handleModeChange = useCallback( (mode: ScheduleMode) => { const newInputs = { ...inputs, mode, } setInputs(newInputs) }, [inputs, setInputs], ) const handleFrequencyChange = useCallback( (frequency: ScheduleFrequency) => { const newInputs = { ...inputs, frequency, visual_config: { ...inputs.visual_config, ...(frequency === 'hourly' && { on_minute: inputs.visual_config?.on_minute ?? 0, }), }, cron_expression: undefined, } setInputs(newInputs) }, [inputs, setInputs], ) const handleCronExpressionChange = useCallback( (value: string) => { const newInputs = { ...inputs, cron_expression: value, frequency: undefined, visual_config: undefined, } setInputs(newInputs) }, [inputs, setInputs], ) const handleWeekdaysChange = useCallback( (weekdays: string[]) => { const newInputs = { ...inputs, visual_config: { ...inputs.visual_config, weekdays, }, cron_expression: undefined, } setInputs(newInputs) }, [inputs, setInputs], ) const handleTimeChange = useCallback( (time: string) => { const newInputs = { ...inputs, visual_config: { ...inputs.visual_config, time, }, cron_expression: undefined, } setInputs(newInputs) }, [inputs, setInputs], ) const handleOnMinuteChange = useCallback( (on_minute: number) => { const newInputs = { ...inputs, visual_config: { ...inputs.visual_config, on_minute, }, cron_expression: undefined, } setInputs(newInputs) }, [inputs, setInputs], ) return { readOnly, inputs, setInputs, handleModeChange, handleFrequencyChange, handleCronExpressionChange, handleWeekdaysChange, handleTimeChange, handleOnMinuteChange, } } export default useConfig