@r/platform
Version:
A set of tools to enable easy universal rendering and page navigation on a React + Redux stack
89 lines (76 loc) • 2.07 kB
JavaScript
import { METHODS } from './router';
export const SET_PAGE = 'PLATFORM__SET_PAGE';
export const SET_STATUS = 'PLATFORM__SET_STATUS';
export const GOTO_PAGE_INDEX = 'PLATFORM__GOTO_PAGE_INDEX';
export const NAVIGATE_TO_URL = 'PLATFORM__NAVIGATE_TO_URL';
export const SET_SHELL = 'PLATFORM__SET_SHELL';
export const REDIRECT = 'PLATFORM__REDIRECT';
export const REROUTE_PAGE = 'PLATFORM__REROUTE_PAGE'; // re-run the handlers for the page
export const setPage = (url, { urlParams={}, queryParams={}, hashParams={}, referrer='' }={}) => ({
type: SET_PAGE,
payload: { url, urlParams, queryParams, hashParams, referrer },
});
export const gotoPageIndex = (
pageIndex,
pathName,
{
queryParams={},
hashParams={},
referrer='',
}={}
) => ({
type: GOTO_PAGE_INDEX,
payload: { pageIndex, pathName, queryParams, hashParams, referrer },
});
export const navigateToUrl = (
method,
pathName,
{
queryParams={},
hashParams={},
bodyParams={},
referrer='',
}={}
) => ({
type: NAVIGATE_TO_URL,
payload: { method, pathName, queryParams, hashParams, bodyParams, referrer },
});
export const setShell = shell => ({ type: SET_SHELL, shell });
export const redirect = url => ({ type: REDIRECT, url });
export const reroutePage = () => async (dispatch, getState) => {
const { currentPage } = getState().platform;
dispatch(navigateToUrl(
METHODS.GET,
currentPage.url,
{
queryParams: currentPage.queryParams,
hashParams: currentPage.hashParams,
bodyParams: {},
referrer: currentPage.referrer,
}
));
};
export const activateClient = () => async (dispatch, getState) => {
const { platform } = getState();
if (!platform.shell) { return; }
dispatch(setShell(false));
dispatch(reroutePage());
};
export const setStatus = status => ({
type: SET_STATUS,
payload: { status },
});
export default {
SET_PAGE,
SET_STATUS,
GOTO_PAGE_INDEX,
NAVIGATE_TO_URL,
SET_SHELL,
REROUTE_PAGE,
setPage,
setStatus,
gotoPageIndex,
navigateToUrl,
setShell,
reroutePage,
};