react-router#Navigate TypeScript Examples
The following examples show how to use
react-router#Navigate.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: App.tsx From backstage with Apache License 2.0 | 6 votes |
routes = ( <FlatRoutes> <Navigate key="/" to="catalog" /> <Route path="/catalog" element={<CatalogIndexPage />} /> <Route path="/catalog/:namespace/:kind/:name" element={<CatalogEntityPage />} > {entityPage} </Route> <Route path="/docs" element={<TechDocsIndexPage />} /> <Route path="/docs/:namespace/:kind/:name/*" element={<TechDocsReaderPage />} > <TechDocsAddons> <ReportIssue /> </TechDocsAddons> </Route> <Route path="/create" element={<ScaffolderPage />} /> <Route path="/api-docs" element={<ApiExplorerPage />} /> <Route path="/tech-radar" element={<TechRadarPage width={1500} height={800} />} /> <PermissionedRoute path="/catalog-import" permission={catalogEntityCreatePermission} element={<CatalogImportPage />} /> <Route path="/search" element={<SearchPage />}> {searchPage} </Route> <Route path="/settings" element={<UserSettingsPage />} /> <Route path="/catalog-graph" element={<CatalogGraphPage />} /> </FlatRoutes> )
Example #2
Source File: App.tsx From backstage with Apache License 2.0 | 6 votes |
routes = ( <FlatRoutes> <Navigate key="/" to="/docs/default/component/local/" /> {/* we need this route as TechDocs header links relies on it */} <Route path="/catalog/:namespace/:kind/:name" element={<CatalogEntityPage />} /> <Route path="/docs" element={<TechDocsIndexPage />}> <DefaultTechDocsHome /> </Route> <Route path="/docs/:namespace/:kind/:name/*" element={<TechDocsReaderPage />} > {techDocsPage} <TechDocsAddons> <ThemeToggleAddon /> </TechDocsAddons> </Route> </FlatRoutes> )
Example #3
Source File: Router.tsx From backstage with Apache License 2.0 | 6 votes |
Router = (props: RouterProps) => {
const { groups, components = {}, defaultPreviewTemplate } = props;
const { TemplateCardComponent, TaskPageComponent } = components;
const outlet = useOutlet();
const TaskPageElement = TaskPageComponent ?? TaskPage;
const customFieldExtensions = useElementFilter(outlet, elements =>
elements
.selectByComponentData({
key: FIELD_EXTENSION_WRAPPER_KEY,
})
.findComponentData<FieldExtensionOptions>({
key: FIELD_EXTENSION_KEY,
}),
);
const fieldExtensions = [
...customFieldExtensions,
...DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS.filter(
({ name }) =>
!customFieldExtensions.some(
customFieldExtension => customFieldExtension.name === name,
),
),
];
return (
<Routes>
<Route
element={
<ScaffolderPage
groups={groups}
TemplateCardComponent={TemplateCardComponent}
contextMenu={props.contextMenu}
/>
}
/>
<Route
path={selectedTemplateRouteRef.path}
element={
<SecretsContextProvider>
<TemplatePage customFieldExtensions={fieldExtensions} />
</SecretsContextProvider>
}
/>
<Route
path={scaffolderListTaskRouteRef.path}
element={<ListTasksPage />}
/>
<Route path={scaffolderTaskRouteRef.path} element={<TaskPageElement />} />
<Route path={actionsRouteRef.path} element={<ActionsPage />} />
<Route
path={editRouteRef.path}
element={
<SecretsContextProvider>
<TemplateEditorPage
defaultPreviewTemplate={defaultPreviewTemplate}
customFieldExtensions={fieldExtensions}
/>
</SecretsContextProvider>
}
/>
<Route path="preview" element={<Navigate to="../edit" />} />
</Routes>
);
}
Example #4
Source File: App.tsx From Riakuto-StartingReact-ja3.1 with Apache License 2.0 | 6 votes |
App: VFC = () => {
const { hash, pathname } = useLocation();
useEffect(() => {
if (!hash) window.scrollTo(0, 0);
}, [hash, pathname]);
return (
<div className="container">
<Routes>
<Route path="/" element={<Home />} />
<Route path="characters" element={<Characters />}>
<Route path="" element={<AllCharacters />} />
<Route path=":schoolCode" element={<SchoolCharacters />} />
</Route>
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</div>
);
}
Example #5
Source File: App.tsx From Riakuto-StartingReact-ja3.1 with Apache License 2.0 | 6 votes |
App: VFC = () => (
<>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/:orgCode/members" element={<Members />} />
<Route path="*" element={<Navigate to="/" />} />
</Routes>
</>
)
Example #6
Source File: App.tsx From backstage with Apache License 2.0 | 4 votes |
routes = ( <FlatRoutes> <Navigate key="/" to="catalog" /> {/* TODO(rubenl): Move this to / once its more mature and components exist */} <Route path="/home" element={<HomepageCompositionRoot />}> {homePage} </Route> <Route path="/catalog" element={<CatalogIndexPage />} /> <Route path="/catalog/:namespace/:kind/:name" element={<CatalogEntityPage />} > {entityPage} </Route> <PermissionedRoute path="/catalog-import" permission={catalogEntityCreatePermission} element={<CatalogImportPage />} /> <Route path="/catalog-graph" element={ <CatalogGraphPage initialState={{ selectedKinds: ['component', 'domain', 'system', 'api', 'group'], selectedRelations: [ RELATION_OWNER_OF, RELATION_OWNED_BY, RELATION_CONSUMES_API, RELATION_API_CONSUMED_BY, RELATION_PROVIDES_API, RELATION_API_PROVIDED_BY, RELATION_HAS_PART, RELATION_PART_OF, RELATION_DEPENDS_ON, RELATION_DEPENDENCY_OF, ], }} /> } /> <Route path="/docs" element={<TechDocsIndexPage />} /> <Route path="/docs/:namespace/:kind/:name/*" element={<TechDocsReaderPage />} > {techDocsPage} <TechDocsAddons> <ExpandableNavigation /> <ReportIssue /> <TextSize /> </TechDocsAddons> </Route> <Route path="/create" element={ <ScaffolderPage defaultPreviewTemplate={defaultPreviewTemplate} groups={[ { title: 'Recommended', filter: entity => entity?.metadata?.tags?.includes('recommended') ?? false, }, ]} /> } > <ScaffolderFieldExtensions> <LowerCaseValuePickerFieldExtension /> </ScaffolderFieldExtensions> </Route> <Route path="/explore" element={<ExplorePage />} /> <Route path="/tech-radar" element={<TechRadarPage width={1500} height={800} />} /> <Route path="/graphiql" element={<GraphiQLPage />} /> <Route path="/lighthouse" element={<LighthousePage />} /> <Route path="/api-docs" element={<ApiExplorerPage />} /> <Route path="/gcp-projects" element={<GcpProjectsPage />} /> <Route path="/newrelic" element={<NewRelicPage />} /> <Route path="/search" element={<SearchPage />}> {searchPage} </Route> <Route path="/cost-insights" element={<CostInsightsPage />} /> <Route path="/cost-insights/investigating-growth" element={<CostInsightsProjectGrowthInstructionsPage />} /> <Route path="/cost-insights/labeling-jobs" element={<CostInsightsLabelDataflowInstructionsPage />} /> <Route path="/settings" element={<UserSettingsPage />}> <UserSettingsTab path="/advanced" title="Advanced"> <AdvancedSettings /> </UserSettingsTab> </Route> <Route path="/azure-pull-requests" element={<AzurePullRequestsPage />} /> <Route path="/apache-airflow" element={<ApacheAirflowPage />} /> </FlatRoutes> )
Example #7
Source File: TemplatePage.tsx From backstage with Apache License 2.0 | 4 votes |
TemplatePage = ({
customFieldExtensions = [],
}: {
customFieldExtensions?: FieldExtensionOptions<any, any>[];
}) => {
const apiHolder = useApiHolder();
const secretsContext = useContext(SecretsContext);
const errorApi = useApi(errorApiRef);
const scaffolderApi = useApi(scaffolderApiRef);
const { templateName } = useParams();
const navigate = useNavigate();
const scaffolderTaskRoute = useRouteRef(scaffolderTaskRouteRef);
const rootRoute = useRouteRef(rootRouteRef);
const { schema, loading, error } = useTemplateParameterSchema(templateName);
const [formState, setFormState] = useState<Record<string, any>>(() => {
const query = qs.parse(window.location.search, {
ignoreQueryPrefix: true,
});
try {
return JSON.parse(query.formData as string);
} catch (e) {
return query.formData ?? {};
}
});
const handleFormReset = () => setFormState({});
const handleChange = useCallback(
(e: IChangeEvent) => setFormState(e.formData),
[setFormState],
);
const handleCreate = async () => {
const { taskId } = await scaffolderApi.scaffold({
templateRef: stringifyEntityRef({
name: templateName,
kind: 'template',
namespace: 'default',
}),
values: formState,
secrets: secretsContext?.secrets,
});
const formParams = qs.stringify(
{ formData: formState },
{ addQueryPrefix: true },
);
const newUrl = `${window.location.pathname}${formParams}`;
// We use direct history manipulation since useSearchParams and
// useNavigate in react-router-dom cause unnecessary extra rerenders.
// Also make sure to replace the state rather than pushing to avoid
// extra back/forward slots.
window.history?.replaceState(null, document.title, newUrl);
navigate(scaffolderTaskRoute({ taskId }));
};
if (error) {
errorApi.post(new Error(`Failed to load template, ${error}`));
return <Navigate to={rootRoute()} />;
}
if (!loading && !schema) {
errorApi.post(new Error('Template was not found.'));
return <Navigate to={rootRoute()} />;
}
const customFieldComponents = Object.fromEntries(
customFieldExtensions.map(({ name, component }) => [name, component]),
);
const customFieldValidators = Object.fromEntries(
customFieldExtensions.map(({ name, validation }) => [name, validation]),
);
return (
<Page themeId="home">
<Header
pageTitleOverride="Create a New Component"
title="Create a New Component"
subtitle="Create new software components using standard templates"
/>
<Content>
{loading && <LinearProgress data-testid="loading-progress" />}
{schema && (
<InfoCard
title={schema.title}
noPadding
titleTypographyProps={{ component: 'h2' }}
>
<MultistepJsonForm
formData={formState}
fields={customFieldComponents}
onChange={handleChange}
onReset={handleFormReset}
onFinish={handleCreate}
steps={schema.steps.map(step => {
return {
...step,
validate: createValidator(
step.schema,
customFieldValidators,
{ apiHolder },
),
};
})}
/>
</InfoCard>
)}
</Content>
</Page>
);
}