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:
parent
f96166657d
commit
1224ba7ec4
20 changed files with 170 additions and 158 deletions
|
@ -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 }
|
||||||
];
|
];
|
||||||
|
|
|
@ -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 }
|
||||||
];
|
];
|
||||||
|
|
|
@ -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) {
|
|
@ -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(() => {
|
|
@ -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(() => {
|
|
@ -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>({});
|
|
@ -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(() => {
|
|
@ -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);
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
|
@ -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(() => {
|
|
@ -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';
|
|
@ -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
|
|
@ -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;
|
|
@ -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;
|
|
@ -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) {
|
|
@ -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');
|
|
@ -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');
|
|
@ -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,
|
|
@ -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>();
|
|
@ -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;
|
|
|
@ -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} />
|
||||||
|
)}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue