import { getEstimated } from '~/utils/format'; import * as ACTIONS from '~/redux/editor/actions'; import { EDITOR_ACTIONS } from '~/redux/editor/constants'; import { IEditorState } from '~/redux/editor'; import { TIPS } from '~/constants/tips'; const setEditing = ( state, { editing }: ReturnType ): IEditorState => ({ ...state, editing, }); const setChanged = ( state, { changed }: ReturnType ): IEditorState => ({ ...state, changed, }); const setMode = (state, { mode }: ReturnType): IEditorState => ({ ...state, mode, }); const setDistance = ( state, { distance }: ReturnType ): IEditorState => ({ ...state, distance, estimated: getEstimated(distance, state.speed), }); const setRouterPoints = ( state, { routerPoints }: ReturnType ): IEditorState => ({ ...state, routerPoints, }); const setActiveSticker = ( state, { activeSticker }: ReturnType ): IEditorState => ({ ...state, activeSticker: activeSticker || { set: null, sticker: null }, }); const hideRenderer = (state): IEditorState => ({ ...state, renderer: { ...state.renderer, renderer_active: false }, }); const setRenderer = ( state, { payload }: ReturnType ): IEditorState => ({ ...state, renderer: { ...state.renderer, ...payload }, }); const sendSaveRequest = (state): IEditorState => ({ ...state, save_processing: true, }); const setSaveError = ( state, { save_error }: ReturnType ): IEditorState => ({ ...state, save_error, save_finished: false, save_processing: false, }); const setSaveLoading = ( state, { save_loading }: ReturnType ): IEditorState => ({ ...state, save_loading, }); const setSaveOverwrite = (state): IEditorState => ({ ...state, save_overwriting: true, save_finished: false, save_processing: false, save_error: TIPS.SAVE_OVERWRITE, }); const setSaveSuccess = ( state, { save_error }: ReturnType ): IEditorState => ({ ...state, save_overwriting: false, save_finished: true, save_processing: false, save_error, }); const resetSaveDialog = (state): IEditorState => ({ ...state, save_overwriting: false, save_finished: false, save_processing: false, save_error: '', }); const setDialog = (state, { dialog }: ReturnType): IEditorState => ({ ...state, dialog, }); const setDialogActive = ( state, { dialog_active }: ReturnType ): IEditorState => ({ ...state, dialog_active: dialog_active || !state.dialog_active, }); const setReady = (state, { ready = true }: ReturnType): IEditorState => ({ ...state, ready, }); const setSpeed = ( state, { speed = 15 }: ReturnType ): IEditorState => ({ ...state, speed, estimated: getEstimated(state.distance, speed), }); const setMarkersShown = ( state, { markers_shown = true }: ReturnType ): IEditorState => ({ ...state, markers_shown }); const setIsEmpty = ( state, { is_empty = true }: ReturnType ): IEditorState => ({ ...state, is_empty }); const setFeature = ( state, { features }: ReturnType ): IEditorState => ({ ...state, features: { ...state.features, ...features, }, }); const setIsRouting = ( state, { is_routing }: ReturnType ): IEditorState => ({ ...state, is_routing, }); export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_EDITING]: setEditing, [EDITOR_ACTIONS.SET_CHANGED]: setChanged, [EDITOR_ACTIONS.SET_MODE]: setMode, [EDITOR_ACTIONS.SET_DISTANCE]: setDistance, [EDITOR_ACTIONS.SET_ROUTER_POINTS]: setRouterPoints, [EDITOR_ACTIONS.SET_ACTIVE_STICKER]: setActiveSticker, [EDITOR_ACTIONS.SET_SAVE_ERROR]: setSaveError, [EDITOR_ACTIONS.SET_SAVE_LOADING]: setSaveLoading, [EDITOR_ACTIONS.SET_SAVE_OVERWRITE]: setSaveOverwrite, [EDITOR_ACTIONS.SET_SAVE_SUCCESS]: setSaveSuccess, [EDITOR_ACTIONS.SEND_SAVE_REQUEST]: sendSaveRequest, [EDITOR_ACTIONS.RESET_SAVE_DIALOG]: resetSaveDialog, [EDITOR_ACTIONS.HIDE_RENDERER]: hideRenderer, [EDITOR_ACTIONS.SET_RENDERER]: setRenderer, [EDITOR_ACTIONS.SET_DIALOG]: setDialog, [EDITOR_ACTIONS.SET_DIALOG_ACTIVE]: setDialogActive, [EDITOR_ACTIONS.SET_READY]: setReady, [EDITOR_ACTIONS.SET_SPEED]: setSpeed, [EDITOR_ACTIONS.SET_MARKERS_SHOWN]: setMarkersShown, [EDITOR_ACTIONS.SET_IS_EMPTY]: setIsEmpty, [EDITOR_ACTIONS.SET_FEATURE]: setFeature, [EDITOR_ACTIONS.SET_IS_ROUTING]: setIsRouting, };