app/src/store/index.tstypescript
import AuthService from "@/services/AuthService";
import FeatureFlagService, {
FeatureFlagKeys,
} from "@/services/FeatureFlagService";
import { createStore } from "vuex";
import type { UserAccess, User } from "@/types";
const tokenStorageKey = "choreo-planer-token";
export interface State {
loggedIn: boolean;
clubId: string | null;
isMobile: boolean;
owners: UserAccess[];
ownersLoaded: boolean;
me: User | null;
}
export default createStore({
state: {
loggedIn: localStorage.getItem(tokenStorageKey) != null,
clubId: null,
isMobile: true,
owners: [],
ownersLoaded: false,
me: null,
},
getters: {
isChristmasTime(): boolean {
const now = new Date();
const currentYear = now.getFullYear();
const christmasStart = new Date("12/01").setFullYear(currentYear);
const christmasEnd = new Date("12/27").setFullYear(currentYear);
return christmasStart < now.getTime() && now.getTime() < christmasEnd;
},
isEasterTime(): boolean {
const now = new Date();
const currentYear = now.getFullYear();
const easterStart = new Date("03/20").setFullYear(currentYear);
const easterEnd = new Date("04/30").setFullYear(currentYear);
return easterStart < now.getTime() && now.getTime() < easterEnd;
},
},
mutations: {
setLoginState(state: State, loginState: boolean) {
state.loggedIn = loginState;
if (!loginState) {
state.clubId = null;
state.owners = [];
state.ownersLoaded = false;
}
},
setClubId(state: State, id: string) {
state.clubId = id;
},
setMobile(state: State, isMobile: boolean) {
state.isMobile = isMobile;
},
setOwners(state: State, owners: UserAccess[]) {
state.owners = owners;
state.ownersLoaded = true;
},
clearOwners(state: State) {
state.owners = [];
state.ownersLoaded = false;
},
setMe(state: State, me: User) {
state.me = me;
},
clearMe(state: State) {
state.me = null;
},
},
actions: {
async loadUserInfo({
commit,
}: {
commit: (type: string, payload?: unknown) => void;
}) {
try {
const me = (await AuthService.getUserInfo(true)) as User & {
childAccess?: UserAccess[];
};
commit("setMe", me);
const accessSharingEnabled = await FeatureFlagService.isEnabled(
FeatureFlagKeys.ACCESS_SHARING
);
commit(
"setOwners",
accessSharingEnabled
? (me.childAccess || []).filter(
(access: UserAccess) => access.enabled
)
: []
);
} catch {
commit("clearMe");
commit("clearOwners");
}
},
},
modules: {},
});