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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 1x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 3x 18x 10x 2x 2x 18x 44x 10x 18x 3x 3x 18x 1x 1x 18x 13x 18x 2x 1x 1x 1x 1x 18x | import { useCallback, useEffect, useMemo, useState } from 'react';
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import {
useTimeOffActionsSelector,
useTimeOffStateSelector,
} from '../TimeOff/context';
import { TimeOffStackParamList, TimeOffStep } from '../TimeOff/types';
import { canSubmitReason, quickReasons } from './utils';
export const useChooseReason = () => {
const form = useTimeOffStateSelector(state => state.form);
const isReasonInputOpen = useTimeOffStateSelector(
state => state.isReasonInputOpen,
);
const changeReason = useTimeOffActionsSelector(
actions => actions.changeReason,
);
const setReasonInputOpen = useTimeOffActionsSelector(
actions => actions.setReasonInputOpen,
);
const registerCloseReasonInput = useTimeOffActionsSelector(
actions => actions.registerCloseReasonInput,
);
const navigation =
useNavigation<NativeStackNavigationProp<TimeOffStackParamList>>();
const [quickReason, setQuickReason] = useState<string | null>(
form.note || null,
);
const [reasonInputValue, setReasonInputValue] = useState<string | null>(
form.note || null,
);
const closeReasonInput = useCallback(() => {
setReasonInputOpen(false);
}, [setReasonInputOpen]);
useEffect(() => {
registerCloseReasonInput(() => {
closeReasonInput();
setReasonInputValue(form.note || null);
});
}, [closeReasonInput, form.note, registerCloseReasonInput]);
useEffect(() => {
const isQuickReason = quickReasons.some(item => item.label === form.note);
setQuickReason(isQuickReason ? form.note || null : null);
}, [form.note]);
const openReasonInput = useCallback(() => {
setReasonInputOpen(true);
setReasonInputValue(form.note === quickReason ? null : form.note || null);
}, [form.note, quickReason, setReasonInputOpen]);
const handleChangeQuickReason = useCallback(
(value: string) => {
setQuickReason(value);
changeReason(value);
},
[changeReason],
);
const canSubmitReasonInput = useMemo(
() => canSubmitReason(reasonInputValue),
[reasonInputValue],
);
const handleSubmitTextInput = useCallback(() => {
if (!canSubmitReasonInput || !reasonInputValue) {
return;
}
changeReason(reasonInputValue);
closeReasonInput();
navigation.navigate(TimeOffStep.PREVIEW);
}, [
canSubmitReasonInput,
reasonInputValue,
changeReason,
closeReasonInput,
navigation,
]);
return {
state: {
isOpenReasonInput: isReasonInputOpen,
quickReason,
reasonInputValue,
canSubmitReasonInput,
},
actions: {
setReasonInputValue,
openReasonInput,
handleChangeQuickReason,
handleSubmitTextInput,
},
};
};
|