2025-05-28 15:36:51 -07:00

110 lines
2.4 KiB
TypeScript

import {
DESKTOP_COMPONENT_START_WIDTH,
DESKTOP_LARGE_COMPONENT_START_WIDTH,
TABLET_COMPONENT_START_WIDTH,
} from "../../CharacterSheet/config";
import * as actionTypes from "../actions/appEnv/actionTypes";
import { AppEnvAction } from "../actions/appEnv/typings";
import { AppEnvState } from "../stores/typings";
export enum StyleSizeTypeEnum {
NONE = 0,
MOBILE = 1,
TABLET = 2,
DESKTOP = 3,
DESKTOP_LARGE = 4,
}
export const initialEnvState: AppEnvState = {
authEndpoint: null,
username: null,
userId: -1,
userRoles: [],
characterId: null,
characterEndpoint: "",
characterServiceBaseUrl: null,
isMobile: true,
isReadonly: true,
canOverrideReadOnly: false,
redirect: "",
diceEnabled: false,
diceFeatureConfiguration: {
enabled: true,
menu: true,
assetBaseLocation: "",
trackingId: "",
apiEndpoint: "",
},
gameLog: {
isOpen: false,
lastMessageTime: 0,
apiEndpoint: "",
ddbApiEndpoint: "",
},
dimensions: {
styleSizeType: StyleSizeTypeEnum.NONE,
window: {
width: 0,
height: 0,
},
sheet: {
width: 0,
height: 0,
},
},
characterSlots: {
characterSlotLimit: null,
activeCharacterCount: 0,
lockedCharacterCount: 0,
allCharactersLocked: false,
},
};
function appEnv(
state: AppEnvState = initialEnvState,
action: AppEnvAction
): AppEnvState {
switch (action.type) {
case actionTypes.DATA_SET:
return {
...state,
...action.payload,
};
case actionTypes.MOBILE_SET:
return {
...state,
isMobile: action.payload.isMobile,
};
case actionTypes.DIMENSIONS_SET: {
let styleSizeType: StyleSizeTypeEnum = StyleSizeTypeEnum.NONE;
const windowWidth = action.payload.dimensions.window.width;
if (windowWidth >= DESKTOP_LARGE_COMPONENT_START_WIDTH) {
styleSizeType = StyleSizeTypeEnum.DESKTOP_LARGE;
} else if (windowWidth >= DESKTOP_COMPONENT_START_WIDTH) {
styleSizeType = StyleSizeTypeEnum.DESKTOP;
} else if (windowWidth >= TABLET_COMPONENT_START_WIDTH) {
styleSizeType = StyleSizeTypeEnum.TABLET;
} else {
styleSizeType = StyleSizeTypeEnum.MOBILE;
}
return {
...state,
dimensions: {
...action.payload.dimensions,
styleSizeType,
},
};
}
default:
// not implemented
}
return state;
}
export default appEnv;