123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import React from 'react';
- import {InjectedRouter} from 'react-router/lib/Router';
- import {Location} from 'history';
- import {openModal} from 'app/actionCreators/modal';
- import NavigationActions from 'app/actions/navigationActions';
- import ContextPickerModal from 'app/components/contextPickerModal';
- import ProjectsStore from 'app/stores/projectsStore';
- // TODO(ts): figure out better typing for react-router here
- export function navigateTo(to: string, router: InjectedRouter & {location?: Location}) {
- // Check for placeholder params
- const needOrg = to.indexOf(':orgId') > -1;
- const needProject = to.indexOf(':projectId') > -1;
- const comingFromProjectId = router?.location?.query?.project;
- const needProjectId = !comingFromProjectId || Array.isArray(comingFromProjectId);
- const projectById = ProjectsStore.getById(comingFromProjectId);
- if (needOrg || (needProject && (needProjectId || !projectById))) {
- openModal(
- modalProps => (
- <ContextPickerModal
- {...modalProps}
- nextPath={to}
- needOrg={needOrg}
- needProject={needProject}
- comingFromProjectId={
- Array.isArray(comingFromProjectId) ? '' : comingFromProjectId || ''
- }
- onFinish={path => {
- modalProps.closeModal();
- setTimeout(() => router.push(path), 0);
- }}
- />
- ),
- {}
- );
- } else {
- projectById
- ? router.push(to.replace(':projectId', projectById.slug))
- : router.push(to);
- }
- }
- export function setLastRoute(route: string) {
- NavigationActions.setLastRoute(route);
- }
|