Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | 1x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 5x 5x 14x 5x 10x 5x 14x 1x 1x 14x 1x 14x 1x 1x 14x 7x 14x 2x 1x 1x 1x 14x | import { useCallback, useEffect, useMemo, useState } from 'react';
import {
useReallocationV2ActionsSelector,
useReallocationV2StateSelector,
} from '../ReallocationV2/context';
import { canSubmitReason, quickReasonOptions } from './utils';
export const useChooseReason = () => {
const form = useReallocationV2StateSelector(state => state.form);
const isReasonInputOpen = useReallocationV2StateSelector(
state => state.isReasonInputOpen,
);
const changeReason = useReallocationV2ActionsSelector(
actions => actions.changeReason,
);
const setReasonInputOpen = useReallocationV2ActionsSelector(
actions => actions.setReasonInputOpen,
);
const [quickReason, setQuickReason] = useState<string | null>(
form.reason || null,
);
const [reasonInputValue, setReasonInputValue] = useState(form.reason || '');
useEffect(() => {
Iif (isReasonInputOpen) {
return;
}
setReasonInputValue(form.reason || '');
}, [form.reason, isReasonInputOpen]);
useEffect(() => {
const isQuickReason = quickReasonOptions.some(
item => item.value === form.reason,
);
setQuickReason(isQuickReason ? form.reason || null : null);
}, [form.reason]);
const openReasonInput = useCallback(() => {
setReasonInputOpen(true);
setReasonInputValue(form.reason === quickReason ? '' : form.reason || '');
}, [form.reason, quickReason, setReasonInputOpen]);
const closeReasonInput = useCallback(() => {
setReasonInputOpen(false);
}, [setReasonInputOpen]);
const handleChangeQuickReason = useCallback(
(value: string) => {
setQuickReason(value);
changeReason(value);
},
[changeReason],
);
const canSubmitReasonInput = useMemo(
() => canSubmitReason(reasonInputValue),
[reasonInputValue],
);
const handleSubmitTextInput = useCallback(() => {
if (!canSubmitReasonInput) {
return;
}
changeReason(reasonInputValue.trim());
closeReasonInput();
}, [canSubmitReasonInput, changeReason, closeReasonInput, reasonInputValue]);
return {
state: {
isOpenReasonInput: isReasonInputOpen,
quickReason,
reasonInputValue,
canSubmitReasonInput,
},
actions: {
setReasonInputValue,
openReasonInput,
handleChangeQuickReason,
handleSubmitTextInput,
},
};
};
|