95 lines
2.3 KiB
TypeScript
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,
|
|
});
|