import { Middleware } from '@reduxjs/toolkit' import { initializeApp } from 'domains/app/actions' import { initializeConfig } from 'domains/config/actions' import { setLocale } from 'domains/i18n/actions' import type { RootState } from 'domains/store' import { addEvent } from 'domains/store/slice' const createI18nMiddleware: Middleware = ({ dispatch, }) => { return (next) => { return (action) => { const result = next(action) if (initializeConfig.fulfilled.match(action)) { if (action.payload.defaultUserLocale) { dispatch(setLocale(action.payload.defaultUserLocale)) return result } } if (initializeApp.fulfilled.match(action)) { if (action.payload.userLocale) { dispatch(setLocale(action.payload.userLocale)) } return result } if ( addEvent.match(action) && action.payload.type === 'info' && action.payload.payload.body && 'subtype' in action.payload.payload.body && action.payload.payload.body.subtype === 'new_translation' ) { const { body } = action.payload.payload if (body.translationLocale && body.translationEnabled) { dispatch(setLocale(body.translationLocale)) return result } } return result } } } export default createI18nMiddleware