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 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 10x 1x 9x 22x 10x 18x 10x 22x 3x 3x 22x 1x 22x 1x 1x 22x 14x 22x 2x 1x 1x 1x 22x | import { useCallback, useEffect, useMemo, useState } from 'react';
import {
useReallocationActionsSelector,
useReallocationStateSelector,
} from '../Reallocation/context';
import { canSubmitReason, quickReasonOptions } from './utils';
export const useChooseReason = () => {
const form = useReallocationStateSelector(state => state.form);
const isReasonInputOpen = useReallocationStateSelector(
state => state.isReasonInputOpen,
);
const changeReason = useReallocationActionsSelector(
actions => actions.changeReason,
);
const setReasonInputOpen = useReallocationActionsSelector(
actions => actions.setReasonInputOpen,
);
const [quickReason, setQuickReason] = useState<string | null>(
form.reason || null,
);
const [reasonInputValue, setReasonInputValue] = useState(form.reason || '');
useEffect(() => {
if (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,
},
};
};
|