oxen-website/state/navigation.ts

95 lines
2.3 KiB
TypeScript

import { ISplitPage } from '@/types/cms';
export enum SideMenuItem {
BUILD = 'BUILD',
BUY_OXEN = 'BUY_OXEN',
WHO_ARE_WE = 'WHO_ARE_WE',
STAKE = 'STAKE',
USES = 'USES',
SESSION_LOKINET = 'SESSION_LOKINET',
GET_INVOLVED = 'GET_INVOLVED',
ROADMAP = 'ROADMAP',
AIRDROP = 'AIRDROP',
FAQ = 'FAQ',
}
export type TPages = {
[name: string]: ISplitPage;
};
export interface INavigation {
pageType: PageType;
postTitle?: string;
headerCollapsed: boolean;
sideMenuExpanded: boolean;
headerMobileMenuExpanded: boolean;
pages?: TPages;
}
export enum PageType {
NORMAL = 'NORMAL',
BLOG = 'BLOG',
POST = 'POST',
}
export const initialNavigationState: INavigation = {
// Side menu expanded only toggles for mobile.
// On desktop it's always open (if it fits).
pageType: PageType.NORMAL,
postTitle: undefined,
headerCollapsed: true,
sideMenuExpanded: false,
headerMobileMenuExpanded: false,
};
export enum NavigationActions {
SET_HEADER_COLLAPSED = 'SET_HEADER_COLLAPSED',
SET_PAGE_TYPE = 'SET_PAGE_TYPE',
SET_POST_TITLE = 'SET_POST_TITLE',
EXPAND_SIDE_MENU = 'EXPAND_SIDE_MENU',
COLLAPSE_SIDE_MENU = 'COLLAPSE_SIDE_MENU',
SET_SPLIT_PAGES_CONTENT = 'SET_SPLIT_PAGES_CONTENT',
EXPAND_MOBILE_HEADER_MENU = 'EXPAND_MOBILE_HEADER_MENU',
COLLAPSE_MOBILE_HEADER_MENU = 'COLLAPSE_MOBILE_HEADER_MENU',
}
// ////////////////////////////// //
// Action Creators //
// ////////////////////////////// //
export const setHeaderCollapsed = (collapsed: boolean) => ({
type: NavigationActions.SET_HEADER_COLLAPSED,
payload: collapsed,
});
export const setPageType = (type: PageType) => ({
type: NavigationActions.SET_PAGE_TYPE,
payload: type,
});
// For sidebar title
export const setPostTitle = (title: string) => ({
type: NavigationActions.SET_POST_TITLE,
payload: title,
});
export const expandSideMenu = () => ({
type: NavigationActions.EXPAND_SIDE_MENU,
});
export const collapseSideMenu = () => ({
type: NavigationActions.COLLAPSE_SIDE_MENU,
});
export const setSplitPagesContent = (pages: TPages) => ({
type: NavigationActions.SET_SPLIT_PAGES_CONTENT,
payload: pages,
});
export const expandMobileHeaderMenu = () => ({
type: NavigationActions.EXPAND_MOBILE_HEADER_MENU,
});
export const collapseMobileHeader = () => ({
type: NavigationActions.COLLAPSE_MOBILE_HEADER_MENU,
});