Условное модальное закрытие на основе состояния компонента

#javascript #reactjs #redux

Вопрос:

В моем приложении react мне нужна возможность закрывать модал в зависимости от состояния компонента.

В первом случае, если состояние не изменено, модал закрывается без второго модала подтверждения.

     closeAllModals(state) {
      return {
        ...state,
        modalsArray: [],
      };
    },
 

Во втором случае, если состояние изменилось
(т. е. выбран раскрывающийся список, текст, введенный в поле и т.д.), Открывается режим подтверждения:

 export const ModalStore = createSlice({
  name: 'modal',
  initialState: {
    modalsArray: [],
    callbackState: { state: ModalCallbackState.UNDEFINED, modalId: '' },
    loaderQueue: [],
    loaderQueueConfig: {},
  } as ModalState,
  reducers: {
    openModal(state, action: PayloadAction<IOpenModal>) {
      const { modalWithCallback, modalDescriptionId } = action.payload;
      return {
        ...state,
        modalsArray: [
          ...state.modalsArray,
          {
            modalDisplayFlex: true,
            ...action.payload,
          },
        ],
        ...(modalWithCallback amp;amp; { callbackState: { state: ModalCallbackState.UNDEFINED, modalId: modalDescriptionId } }),
      };
    },
 

В компоненте второй модальный регистр отображается с помощью этого кода:

    const handleCloseFlow = (): void => {
    if (step === 'hour' || step === 'material' || step === 'class') {
      const idschool = stepInfo.school?.school.idschool;
      if (idschool) {
        const school = getschoolByIdschool(institute, idschool);
        if (school) {
          dispatch(
            openModal({
              modalComponent: 'Alert',
              modalFullscreen: true,
              modalDescriptionId: 'AlertModal',
              modalInfo: {
                modalTitle: t('lessonPlan.title'),
                firstSubTitle: t('lessonPlan.classHours', {
                  classe: t('lessonPlan.classroomName', { name: stepInfo.school?.classe?.descriptionClasse || '' }),
                  totHours: stepInfo.totHours || '',
                }),
                secondSubTitle: `${school.ordineschool?.descriptionOrdineschool} ${school.schoolName}`,
              },
            }),
          );
        }
      }
    } else {
      dispatch(closeAllModals());
    }
  };
 

Второй случай работает, когда вводятся данные. Однако в первом случае модальное значение никогда не закрывается без появления модального значения во втором случае.

Как я могу объединить эти два разных метода закрытия в handleCloseFlow функции?