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 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 2x 17x 8x 1x 1x 17x 34x 8x 17x 2x 2x 17x 1x 1x 17x 11x 17x 2x 1x 1x 1x 1x 17x | import { useCallback, useEffect, useMemo, useState } from 'react';
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import {
useTimeOffV2ActionsSelector,
useTimeOffV2StateSelector,
} from '../TimeOffV2/context';
import { TimeOffStep, TimeOffV2StackParamList } from '../TimeOffV2/types';
import { canSubmitReason, quickReasons } from './utils';
export const useChooseReason = () => {
const form = useTimeOffV2StateSelector(state => state.form);
const isReasonInputOpen = useTimeOffV2StateSelector(
state => state.isReasonInputOpen,
);
const changeReason = useTimeOffV2ActionsSelector(
actions => actions.changeReason,
);
const setReasonInputOpen = useTimeOffV2ActionsSelector(
actions => actions.setReasonInputOpen,
);
const registerCloseReasonInput = useTimeOffV2ActionsSelector(
actions => actions.registerCloseReasonInput,
);
const navigation =
useNavigation<NativeStackNavigationProp<TimeOffV2StackParamList>>();
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,
},
};
};
|