1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Move routes to the correct apps

This commit is contained in:
Bill Thornton 2023-05-01 16:50:41 -04:00
parent f96166657d
commit 1224ba7ec4
20 changed files with 170 additions and 158 deletions

View file

@ -1,10 +1,10 @@
import { AsyncRoute } from '../../../../components/router/AsyncRoute'; import { AsyncRoute, AsyncRouteType } from '../../../../components/router/AsyncRoute';
export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [
{ path: 'usernew.html', page: 'user/usernew' }, { path: 'usernew.html', page: 'user/usernew', type: AsyncRouteType.Experimental },
{ path: 'userprofiles.html', page: 'user/userprofiles' }, { path: 'userprofiles.html', page: 'user/userprofiles', type: AsyncRouteType.Experimental },
{ path: 'useredit.html', page: 'user/useredit' }, { path: 'useredit.html', page: 'user/useredit', type: AsyncRouteType.Experimental },
{ path: 'userlibraryaccess.html', page: 'user/userlibraryaccess' }, { path: 'userlibraryaccess.html', page: 'user/userlibraryaccess', type: AsyncRouteType.Experimental },
{ path: 'userparentalcontrol.html', page: 'user/userparentalcontrol' }, { path: 'userparentalcontrol.html', page: 'user/userparentalcontrol', type: AsyncRouteType.Experimental },
{ path: 'userpassword.html', page: 'user/userpassword' } { path: 'userpassword.html', page: 'user/userpassword', type: AsyncRouteType.Experimental }
]; ];

View file

@ -1,8 +1,8 @@
import { AsyncRoute } from '../../../../components/router/AsyncRoute'; import { AsyncRoute, AsyncRouteType } from '../../../../components/router/AsyncRoute';
export const ASYNC_USER_ROUTES: AsyncRoute[] = [ export const ASYNC_USER_ROUTES: AsyncRoute[] = [
{ path: 'search.html', page: 'search' }, { path: 'search.html', page: 'search' },
{ path: 'userprofile.html', page: 'user/userprofile' }, { path: 'userprofile.html', page: 'user/userprofile', type: AsyncRouteType.Experimental },
{ path: 'home.html', page: 'home' }, { path: 'home.html', page: 'home', type: AsyncRouteType.Experimental },
{ path: 'movies.html', page: 'movies' } { path: 'movies.html', page: 'movies', type: AsyncRouteType.Experimental }
]; ];

View file

@ -1,15 +1,15 @@
import React, { FunctionComponent, useCallback, useEffect, useMemo, useRef } from 'react'; import React, { FunctionComponent, useCallback, useEffect, useMemo, useRef } from 'react';
import { useSearchParams } from 'react-router-dom'; import { useSearchParams } from 'react-router-dom';
import globalize from '../scripts/globalize'; import globalize from '../../../scripts/globalize';
import LibraryMenu from '../scripts/libraryMenu'; import LibraryMenu from '../../../scripts/libraryMenu';
import { clearBackdrop } from '../components/backdrop/backdrop'; import { clearBackdrop } from '../../../components/backdrop/backdrop';
import layoutManager from '../components/layoutManager'; import layoutManager from '../../../components/layoutManager';
import * as mainTabsManager from '../components/maintabsmanager'; import * as mainTabsManager from '../../../components/maintabsmanager';
import '../elements/emby-tabs/emby-tabs'; import '../../../elements/emby-tabs/emby-tabs';
import '../elements/emby-button/emby-button'; import '../../../elements/emby-button/emby-button';
import '../elements/emby-scroller/emby-scroller'; import '../../../elements/emby-scroller/emby-scroller';
import Page from '../components/Page'; import Page from '../../../components/Page';
type OnResumeOptions = { type OnResumeOptions = {
autoFocus?: boolean; autoFocus?: boolean;
@ -65,7 +65,7 @@ const Home: FunctionComponent = () => {
depends = 'favorites'; depends = 'favorites';
} }
return import(/* webpackChunkName: "[request]" */ `../controllers/${depends}`).then(({ default: controllerFactory }) => { return import(/* webpackChunkName: "[request]" */ `../../../controllers/${depends}`).then(({ default: controllerFactory }) => {
let controller = tabControllers[index]; let controller = tabControllers[index];
if (!controller) { if (!controller) {

View file

@ -1,7 +1,7 @@
import React, { FC, useCallback } from 'react'; import React, { FC, useCallback } from 'react';
import ViewItemsContainer from '../../components/common/ViewItemsContainer'; import ViewItemsContainer from '../../../../components/common/ViewItemsContainer';
import { LibraryViewProps } from '../../types/interface'; import { LibraryViewProps } from '../../../../types/interface';
const CollectionsView: FC<LibraryViewProps> = ({ topParentId }) => { const CollectionsView: FC<LibraryViewProps> = ({ topParentId }) => {
const getBasekey = useCallback(() => { const getBasekey = useCallback(() => {

View file

@ -1,7 +1,7 @@
import React, { FC, useCallback } from 'react'; import React, { FC, useCallback } from 'react';
import ViewItemsContainer from '../../components/common/ViewItemsContainer'; import ViewItemsContainer from '../../../../components/common/ViewItemsContainer';
import { LibraryViewProps } from '../../types/interface'; import { LibraryViewProps } from '../../../../types/interface';
const FavoritesView: FC<LibraryViewProps> = ({ topParentId }) => { const FavoritesView: FC<LibraryViewProps> = ({ topParentId }) => {
const getBasekey = useCallback(() => { const getBasekey = useCallback(() => {

View file

@ -1,9 +1,9 @@
import type { BaseItemDtoQueryResult } from '@jellyfin/sdk/lib/generated-client'; import type { BaseItemDtoQueryResult } from '@jellyfin/sdk/lib/generated-client';
import React, { FC, useCallback, useEffect, useState } from 'react'; import React, { FC, useCallback, useEffect, useState } from 'react';
import loading from '../../components/loading/loading'; import loading from '../../../../components/loading/loading';
import GenresItemsContainer from '../../components/common/GenresItemsContainer'; import GenresItemsContainer from '../../../../components/common/GenresItemsContainer';
import { LibraryViewProps } from '../../types/interface'; import { LibraryViewProps } from '../../../../types/interface';
const GenresView: FC<LibraryViewProps> = ({ topParentId }) => { const GenresView: FC<LibraryViewProps> = ({ topParentId }) => {
const [ itemsResult, setItemsResult ] = useState<BaseItemDtoQueryResult>({}); const [ itemsResult, setItemsResult ] = useState<BaseItemDtoQueryResult>({});

View file

@ -1,7 +1,7 @@
import React, { FC, useCallback } from 'react'; import React, { FC, useCallback } from 'react';
import ViewItemsContainer from '../../components/common/ViewItemsContainer'; import ViewItemsContainer from '../../../../components/common/ViewItemsContainer';
import { LibraryViewProps } from '../../types/interface'; import { LibraryViewProps } from '../../../../types/interface';
const MoviesView: FC<LibraryViewProps> = ({ topParentId }) => { const MoviesView: FC<LibraryViewProps> = ({ topParentId }) => {
const getBasekey = useCallback(() => { const getBasekey = useCallback(() => {

View file

@ -1,13 +1,13 @@
import type { BaseItemDto, BaseItemDtoQueryResult, RecommendationDto } from '@jellyfin/sdk/lib/generated-client'; import type { BaseItemDto, BaseItemDtoQueryResult, RecommendationDto } from '@jellyfin/sdk/lib/generated-client';
import React, { FC, useCallback, useEffect, useRef, useState } from 'react'; import React, { FC, useCallback, useEffect, useRef, useState } from 'react';
import layoutManager from '../../components/layoutManager'; import layoutManager from '../../../../components/layoutManager';
import loading from '../../components/loading/loading'; import loading from '../../../../components/loading/loading';
import dom from '../../scripts/dom'; import dom from '../../../../scripts/dom';
import globalize from '../../scripts/globalize'; import globalize from '../../../../scripts/globalize';
import RecommendationContainer from '../../components/common/RecommendationContainer'; import RecommendationContainer from '../../../../components/common/RecommendationContainer';
import SectionContainer from '../../components/common/SectionContainer'; import SectionContainer from '../../../../components/common/SectionContainer';
import { LibraryViewProps } from '../../types/interface'; import { LibraryViewProps } from '../../../../types/interface';
const SuggestionsView: FC<LibraryViewProps> = ({ topParentId }) => { const SuggestionsView: FC<LibraryViewProps> = ({ topParentId }) => {
const [ latestItems, setLatestItems ] = useState<BaseItemDto[]>([]); const [ latestItems, setLatestItems ] = useState<BaseItemDto[]>([]);
@ -28,7 +28,7 @@ const SuggestionsView: FC<LibraryViewProps> = ({ topParentId }) => {
}, [enableScrollX]); }, [enableScrollX]);
const autoFocus = useCallback((page) => { const autoFocus = useCallback((page) => {
import('../../components/autoFocuser').then(({ default: autoFocuser }) => { import('../../../../components/autoFocuser').then(({ default: autoFocuser }) => {
autoFocuser.autoFocus(page); autoFocuser.autoFocus(page);
}); });
}, []); }, []);

View file

@ -1,8 +1,8 @@
import React, { FC, useCallback } from 'react'; import React, { FC, useCallback } from 'react';
import ViewItemsContainer from '../../components/common/ViewItemsContainer'; import ViewItemsContainer from '../../../../components/common/ViewItemsContainer';
import { LibraryViewProps } from '../../types/interface'; import { LibraryViewProps } from '../../../../types/interface';
const TrailersView: FC<LibraryViewProps> = ({ topParentId }) => { const TrailersView: FC<LibraryViewProps> = ({ topParentId }) => {
const getBasekey = useCallback(() => { const getBasekey = useCallback(() => {

View file

@ -1,16 +1,16 @@
import '../../elements/emby-scroller/emby-scroller'; import '../../../../elements/emby-scroller/emby-scroller';
import '../../elements/emby-itemscontainer/emby-itemscontainer'; import '../../../../elements/emby-itemscontainer/emby-itemscontainer';
import '../../elements/emby-tabs/emby-tabs'; import '../../../../elements/emby-tabs/emby-tabs';
import '../../elements/emby-button/emby-button'; import '../../../../elements/emby-button/emby-button';
import React, { FC, useCallback, useEffect, useRef, useState } from 'react'; import React, { FC, useCallback, useEffect, useRef, useState } from 'react';
import { useSearchParams } from 'react-router-dom'; import { useSearchParams } from 'react-router-dom';
import * as mainTabsManager from '../../components/maintabsmanager'; import * as mainTabsManager from '../../../../components/maintabsmanager';
import Page from '../../components/Page'; import Page from '../../../../components/Page';
import globalize from '../../scripts/globalize'; import globalize from '../../../../scripts/globalize';
import libraryMenu from '../../scripts/libraryMenu'; import libraryMenu from '../../../../scripts/libraryMenu';
import * as userSettings from '../../scripts/settings/userSettings'; import * as userSettings from '../../../../scripts/settings/userSettings';
import CollectionsView from './CollectionsView'; import CollectionsView from './CollectionsView';
import FavoritesView from './FavoritesView'; import FavoritesView from './FavoritesView';
import GenresView from './GenresView'; import GenresView from './GenresView';

View file

@ -1,20 +1,21 @@
import type { SyncPlayUserAccessType, UserDto } from '@jellyfin/sdk/lib/generated-client'; import type { SyncPlayUserAccessType, UserDto } from '@jellyfin/sdk/lib/generated-client';
import React, { FunctionComponent, useCallback, useEffect, useState, useRef } from 'react'; import React, { FunctionComponent, useCallback, useEffect, useState, useRef } from 'react';
import Dashboard from '../../utils/dashboard';
import globalize from '../../scripts/globalize';
import LibraryMenu from '../../scripts/libraryMenu';
import ButtonElement from '../../elements/ButtonElement';
import CheckBoxElement from '../../elements/CheckBoxElement';
import InputElement from '../../elements/InputElement';
import LinkEditUserPreferences from '../../components/dashboard/users/LinkEditUserPreferences';
import SectionTitleContainer from '../../elements/SectionTitleContainer';
import SectionTabs from '../../components/dashboard/users/SectionTabs';
import loading from '../../components/loading/loading';
import toast from '../../components/toast/toast';
import { getParameterByName } from '../../utils/url';
import escapeHTML from 'escape-html'; import escapeHTML from 'escape-html';
import SelectElement from '../../elements/SelectElement';
import Page from '../../components/Page'; import Dashboard from '../../../../utils/dashboard';
import globalize from '../../../../scripts/globalize';
import LibraryMenu from '../../../../scripts/libraryMenu';
import ButtonElement from '../../../../elements/ButtonElement';
import CheckBoxElement from '../../../../elements/CheckBoxElement';
import InputElement from '../../../../elements/InputElement';
import LinkEditUserPreferences from '../../../../components/dashboard/users/LinkEditUserPreferences';
import SectionTitleContainer from '../../../../elements/SectionTitleContainer';
import SectionTabs from '../../../../components/dashboard/users/SectionTabs';
import loading from '../../../../components/loading/loading';
import toast from '../../../../components/toast/toast';
import { getParameterByName } from '../../../../utils/url';
import SelectElement from '../../../../elements/SelectElement';
import Page from '../../../../components/Page';
type ResetProvider = AuthProvider & { type ResetProvider = AuthProvider & {
checkedAttribute: string checkedAttribute: string

View file

@ -1,17 +1,17 @@
import type { UserDto } from '@jellyfin/sdk/lib/generated-client'; import type { UserDto } from '@jellyfin/sdk/lib/generated-client';
import React, { FunctionComponent, useCallback, useEffect, useState, useRef } from 'react'; import React, { FunctionComponent, useCallback, useEffect, useState, useRef } from 'react';
import loading from '../../components/loading/loading'; import loading from '../../../../components/loading/loading';
import libraryMenu from '../../scripts/libraryMenu'; import libraryMenu from '../../../../scripts/libraryMenu';
import globalize from '../../scripts/globalize'; import globalize from '../../../../scripts/globalize';
import toast from '../../components/toast/toast'; import toast from '../../../../components/toast/toast';
import SectionTabs from '../../components/dashboard/users/SectionTabs'; import SectionTabs from '../../../../components/dashboard/users/SectionTabs';
import ButtonElement from '../../elements/ButtonElement'; import ButtonElement from '../../../../elements/ButtonElement';
import { getParameterByName } from '../../utils/url'; import { getParameterByName } from '../../../../utils/url';
import SectionTitleContainer from '../../elements/SectionTitleContainer'; import SectionTitleContainer from '../../../../elements/SectionTitleContainer';
import AccessContainer from '../../components/dashboard/users/AccessContainer'; import AccessContainer from '../../../../components/dashboard/users/AccessContainer';
import CheckBoxElement from '../../elements/CheckBoxElement'; import CheckBoxElement from '../../../../elements/CheckBoxElement';
import Page from '../../components/Page'; import Page from '../../../../components/Page';
type ItemsArr = { type ItemsArr = {
Name?: string; Name?: string;

View file

@ -1,15 +1,15 @@
import React, { FunctionComponent, useCallback, useEffect, useState, useRef } from 'react'; import React, { FunctionComponent, useCallback, useEffect, useState, useRef } from 'react';
import Dashboard from '../../utils/dashboard'; import Dashboard from '../../../../utils/dashboard';
import globalize from '../../scripts/globalize'; import globalize from '../../../../scripts/globalize';
import loading from '../../components/loading/loading'; import loading from '../../../../components/loading/loading';
import toast from '../../components/toast/toast'; import toast from '../../../../components/toast/toast';
import SectionTitleContainer from '../../elements/SectionTitleContainer'; import SectionTitleContainer from '../../../../elements/SectionTitleContainer';
import InputElement from '../../elements/InputElement'; import InputElement from '../../../../elements/InputElement';
import ButtonElement from '../../elements/ButtonElement'; import ButtonElement from '../../../../elements/ButtonElement';
import AccessContainer from '../../components/dashboard/users/AccessContainer'; import AccessContainer from '../../../../components/dashboard/users/AccessContainer';
import CheckBoxElement from '../../elements/CheckBoxElement'; import CheckBoxElement from '../../../../elements/CheckBoxElement';
import Page from '../../components/Page'; import Page from '../../../../components/Page';
type userInput = { type userInput = {
Name?: string; Name?: string;

View file

@ -1,20 +1,21 @@
import type { AccessSchedule, ParentalRating, UserDto } from '@jellyfin/sdk/lib/generated-client'; import type { AccessSchedule, ParentalRating, UserDto } from '@jellyfin/sdk/lib/generated-client';
import { DynamicDayOfWeek } from '@jellyfin/sdk/lib/generated-client/models/dynamic-day-of-week'; import { DynamicDayOfWeek } from '@jellyfin/sdk/lib/generated-client/models/dynamic-day-of-week';
import React, { FunctionComponent, useCallback, useEffect, useState, useRef } from 'react'; import React, { FunctionComponent, useCallback, useEffect, useState, useRef } from 'react';
import globalize from '../../scripts/globalize';
import LibraryMenu from '../../scripts/libraryMenu';
import AccessScheduleList from '../../components/dashboard/users/AccessScheduleList';
import BlockedTagList from '../../components/dashboard/users/BlockedTagList';
import ButtonElement from '../../elements/ButtonElement';
import SectionTitleContainer from '../../elements/SectionTitleContainer';
import SectionTabs from '../../components/dashboard/users/SectionTabs';
import loading from '../../components/loading/loading';
import toast from '../../components/toast/toast';
import { getParameterByName } from '../../utils/url';
import CheckBoxElement from '../../elements/CheckBoxElement';
import escapeHTML from 'escape-html'; import escapeHTML from 'escape-html';
import SelectElement from '../../elements/SelectElement';
import Page from '../../components/Page'; import globalize from '../../../../scripts/globalize';
import LibraryMenu from '../../../../scripts/libraryMenu';
import AccessScheduleList from '../../../../components/dashboard/users/AccessScheduleList';
import BlockedTagList from '../../../../components/dashboard/users/BlockedTagList';
import ButtonElement from '../../../../elements/ButtonElement';
import SectionTitleContainer from '../../../../elements/SectionTitleContainer';
import SectionTabs from '../../../../components/dashboard/users/SectionTabs';
import loading from '../../../../components/loading/loading';
import toast from '../../../../components/toast/toast';
import { getParameterByName } from '../../../../utils/url';
import CheckBoxElement from '../../../../elements/CheckBoxElement';
import SelectElement from '../../../../elements/SelectElement';
import Page from '../../../../components/Page';
type UnratedItem = { type UnratedItem = {
name: string; name: string;
@ -235,7 +236,7 @@ const UserParentalControl: FunctionComponent = () => {
const showSchedulePopup = (schedule: AccessSchedule, index: number) => { const showSchedulePopup = (schedule: AccessSchedule, index: number) => {
schedule = schedule || {}; schedule = schedule || {};
import('../../components/accessSchedule/accessSchedule').then(({ default: accessschedule }) => { import('../../../../components/accessSchedule/accessSchedule').then(({ default: accessschedule }) => {
accessschedule.show({ accessschedule.show({
schedule: schedule schedule: schedule
}).then(function (updatedSchedule) { }).then(function (updatedSchedule) {
@ -268,7 +269,7 @@ const UserParentalControl: FunctionComponent = () => {
}; };
const showBlockedTagPopup = () => { const showBlockedTagPopup = () => {
import('../../components/prompt/prompt').then(({ default: prompt }) => { import('../../../../components/prompt/prompt').then(({ default: prompt }) => {
prompt({ prompt({
label: globalize.translate('LabelTag') label: globalize.translate('LabelTag')
}).then(function (value) { }).then(function (value) {

View file

@ -1,10 +1,11 @@
import React, { FunctionComponent, useCallback, useEffect, useState } from 'react'; import React, { FunctionComponent, useCallback, useEffect, useState } from 'react';
import SectionTabs from '../../components/dashboard/users/SectionTabs';
import UserPasswordForm from '../../components/dashboard/users/UserPasswordForm'; import SectionTabs from '../../../../components/dashboard/users/SectionTabs';
import { getParameterByName } from '../../utils/url'; import UserPasswordForm from '../../../../components/dashboard/users/UserPasswordForm';
import SectionTitleContainer from '../../elements/SectionTitleContainer'; import { getParameterByName } from '../../../../utils/url';
import Page from '../../components/Page'; import SectionTitleContainer from '../../../../elements/SectionTitleContainer';
import loading from '../../components/loading/loading'; import Page from '../../../../components/Page';
import loading from '../../../../components/loading/loading';
const UserPassword: FunctionComponent = () => { const UserPassword: FunctionComponent = () => {
const userId = getParameterByName('userId'); const userId = getParameterByName('userId');

View file

@ -2,17 +2,17 @@ import type { UserDto } from '@jellyfin/sdk/lib/generated-client';
import { ImageType } from '@jellyfin/sdk/lib/generated-client/models/image-type'; import { ImageType } from '@jellyfin/sdk/lib/generated-client/models/image-type';
import React, { FunctionComponent, useEffect, useState, useRef, useCallback } from 'react'; import React, { FunctionComponent, useEffect, useState, useRef, useCallback } from 'react';
import Dashboard from '../../utils/dashboard'; import Dashboard from '../../../../utils/dashboard';
import globalize from '../../scripts/globalize'; import globalize from '../../../../scripts/globalize';
import LibraryMenu from '../../scripts/libraryMenu'; import LibraryMenu from '../../../../scripts/libraryMenu';
import { appHost } from '../../components/apphost'; import { appHost } from '../../../../components/apphost';
import confirm from '../../components/confirm/confirm'; import confirm from '../../../../components/confirm/confirm';
import ButtonElement from '../../elements/ButtonElement'; import ButtonElement from '../../../../elements/ButtonElement';
import UserPasswordForm from '../../components/dashboard/users/UserPasswordForm'; import UserPasswordForm from '../../../../components/dashboard/users/UserPasswordForm';
import loading from '../../components/loading/loading'; import loading from '../../../../components/loading/loading';
import toast from '../../components/toast/toast'; import toast from '../../../../components/toast/toast';
import { getParameterByName } from '../../utils/url'; import { getParameterByName } from '../../../../utils/url';
import Page from '../../components/Page'; import Page from '../../../../components/Page';
const UserProfile: FunctionComponent = () => { const UserProfile: FunctionComponent = () => {
const userId = getParameterByName('userId'); const userId = getParameterByName('userId');

View file

@ -1,18 +1,19 @@
import type { UserDto } from '@jellyfin/sdk/lib/generated-client'; import type { UserDto } from '@jellyfin/sdk/lib/generated-client';
import React, { FunctionComponent, useEffect, useState, useRef } from 'react'; import React, { FunctionComponent, useEffect, useState, useRef } from 'react';
import Dashboard from '../../utils/dashboard';
import globalize from '../../scripts/globalize'; import Dashboard from '../../../../utils/dashboard';
import loading from '../../components/loading/loading'; import globalize from '../../../../scripts/globalize';
import dom from '../../scripts/dom'; import loading from '../../../../components/loading/loading';
import confirm from '../../components/confirm/confirm'; import dom from '../../../../scripts/dom';
import UserCardBox from '../../components/dashboard/users/UserCardBox'; import confirm from '../../../../components/confirm/confirm';
import SectionTitleContainer from '../../elements/SectionTitleContainer'; import UserCardBox from '../../../../components/dashboard/users/UserCardBox';
import '../../elements/emby-button/emby-button'; import SectionTitleContainer from '../../../../elements/SectionTitleContainer';
import '../../elements/emby-button/paper-icon-button-light'; import '../../../../elements/emby-button/emby-button';
import '../../components/cardbuilder/card.scss'; import '../../../../elements/emby-button/paper-icon-button-light';
import '../../components/indicators/indicators.scss'; import '../../../../components/cardbuilder/card.scss';
import '../../styles/flexstyles.scss'; import '../../../../components/indicators/indicators.scss';
import Page from '../../components/Page'; import '../../../../styles/flexstyles.scss';
import Page from '../../../../components/Page';
type MenuEntry = { type MenuEntry = {
name?: string; name?: string;
@ -75,7 +76,7 @@ const UserProfiles: FunctionComponent = () => {
icon: 'delete' icon: 'delete'
}); });
import('../../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { import('../../../../components/actionSheet/actionSheet').then(({ default: actionsheet }) => {
actionsheet.show({ actionsheet.show({
items: menuItems, items: menuItems,
positionTo: card, positionTo: card,

View file

@ -1,12 +1,12 @@
import React, { FunctionComponent, useState } from 'react'; import React, { FunctionComponent, useState } from 'react';
import { useSearchParams } from 'react-router-dom'; import { useSearchParams } from 'react-router-dom';
import Page from '../components/Page'; import Page from '../../../components/Page';
import SearchFields from '../components/search/SearchFields'; import SearchFields from '../../../components/search/SearchFields';
import SearchResults from '../components/search/SearchResults'; import SearchResults from '../../../components/search/SearchResults';
import SearchSuggestions from '../components/search/SearchSuggestions'; import SearchSuggestions from '../../../components/search/SearchSuggestions';
import LiveTVSearchResults from '../components/search/LiveTVSearchResults'; import LiveTVSearchResults from '../../../components/search/LiveTVSearchResults';
import globalize from '../scripts/globalize'; import globalize from '../../../scripts/globalize';
const Search: FunctionComponent = () => { const Search: FunctionComponent = () => {
const [ query, setQuery ] = useState<string>(); const [ query, setQuery ] = useState<string>();

View file

@ -1,17 +0,0 @@
import loadable from '@loadable/component';
interface AsyncPageProps {
/** The relative path to the page component in the routes directory. */
page: string
}
/**
* Page component that uses the loadable component library to load pages defined in the routes directory asynchronously
* with code splitting.
*/
const AsyncPage = loadable(
(props: AsyncPageProps) => import(/* webpackChunkName: "[request]" */ `../routes/${props.page}`),
{ cacheKey: (props: AsyncPageProps) => props.page }
);
export default AsyncPage;

View file

@ -1,19 +1,44 @@
import loadable from '@loadable/component';
import React from 'react'; import React from 'react';
import { Route } from 'react-router-dom'; import { Route } from 'react-router-dom';
import AsyncPage from '../AsyncPage'; export enum AsyncRouteType {
Stable,
Experimental
}
export interface AsyncRoute { export interface AsyncRoute {
/** The URL path for this route. */ /** The URL path for this route. */
path: string path: string
/** The relative path to the page component in the routes directory. */ /** The relative path to the page component in the routes directory. */
page: string page: string
/** The route should use the page component from the experimental app. */
type?: AsyncRouteType
} }
export const toAsyncPageRoute = (route: AsyncRoute) => ( interface AsyncPageProps {
/** The relative path to the page component in the routes directory. */
page: string
}
const ExperimentalAsyncPage = loadable(
(props: { page: string }) => import(/* webpackChunkName: "[request]" */ `../../apps/experimental/routes/${props.page}`),
{ cacheKey: (props: AsyncPageProps) => props.page }
);
const StableAsyncPage = loadable(
(props: { page: string }) => import(/* webpackChunkName: "[request]" */ `../../apps/stable/routes/${props.page}`),
{ cacheKey: (props: AsyncPageProps) => props.page }
);
export const toAsyncPageRoute = ({ path, page, type = AsyncRouteType.Stable }: AsyncRoute) => (
<Route <Route
key={route.path} key={path}
path={route.path} path={path}
element={<AsyncPage page={route.page} />} element={(
type === AsyncRouteType.Experimental ?
<ExperimentalAsyncPage page={page} /> :
<StableAsyncPage page={page} />
)}
/> />
); );