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

Fix useState TypeScript errors

This commit is contained in:
Dmitry Lyzo 2022-02-15 23:49:46 +03:00
parent 9423041ef1
commit 23d321d426
10 changed files with 62 additions and 59 deletions

View file

@ -9,7 +9,7 @@ type AlphaPickerProps = {
// React compatibility wrapper component for alphaPicker.js // React compatibility wrapper component for alphaPicker.js
// eslint-disable-next-line @typescript-eslint/no-empty-function // eslint-disable-next-line @typescript-eslint/no-empty-function
const AlphaPickerComponent: FunctionComponent<AlphaPickerProps> = ({ onAlphaPicked = () => {} }: AlphaPickerProps) => { const AlphaPickerComponent: FunctionComponent<AlphaPickerProps> = ({ onAlphaPicked = () => {} }: AlphaPickerProps) => {
const [ alphaPicker, setAlphaPicker ] = useState(null); const [ alphaPicker, setAlphaPicker ] = useState<AlphaPicker>();
const element = useRef<HTMLDivElement>(null); const element = useRef<HTMLDivElement>(null);
useEffect(() => { useEffect(() => {

View file

@ -22,8 +22,8 @@ type ItemsArr = {
} }
const NewUserPage: FunctionComponent = () => { const NewUserPage: FunctionComponent = () => {
const [ channelsItems, setChannelsItems ] = useState([]); const [ channelsItems, setChannelsItems ] = useState<ItemsArr[]>([]);
const [ mediaFoldersItems, setMediaFoldersItems ] = useState([]); const [ mediaFoldersItems, setMediaFoldersItems ] = useState<ItemsArr[]>([]);
const element = useRef<HTMLDivElement>(null); const element = useRef<HTMLDivElement>(null);
const getItemsResult = (items: ItemsArr[]) => { const getItemsResult = (items: ItemsArr[]) => {

View file

@ -12,7 +12,7 @@ type SearchProps = {
}; };
const SearchPage: FunctionComponent<SearchProps> = ({ serverId, parentId, collectionType }: SearchProps) => { const SearchPage: FunctionComponent<SearchProps> = ({ serverId, parentId, collectionType }: SearchProps) => {
const [ query, setQuery ] = useState(null); const [ query, setQuery ] = useState<string>();
return ( return (
<> <>

View file

@ -24,7 +24,7 @@ type ItemsArr = {
const UserEditPage: FunctionComponent = () => { const UserEditPage: FunctionComponent = () => {
const [ userName, setUserName ] = useState(''); const [ userName, setUserName ] = useState('');
const [ deleteFoldersAccess, setDeleteFoldersAccess ] = useState([]); const [ deleteFoldersAccess, setDeleteFoldersAccess ] = useState<ItemsArr[]>([]);
const [ authProviders, setAuthProviders ] = useState([]); const [ authProviders, setAuthProviders ] = useState([]);
const [ passwordResetProviders, setPasswordResetProviders ] = useState([]); const [ passwordResetProviders, setPasswordResetProviders ] = useState([]);

View file

@ -21,9 +21,9 @@ type ItemsArr = {
const UserLibraryAccessPage: FunctionComponent = () => { const UserLibraryAccessPage: FunctionComponent = () => {
const [ userName, setUserName ] = useState(''); const [ userName, setUserName ] = useState('');
const [channelsItems, setChannelsItems] = useState([]); const [channelsItems, setChannelsItems] = useState<ItemsArr[]>([]);
const [mediaFoldersItems, setMediaFoldersItems] = useState([]); const [mediaFoldersItems, setMediaFoldersItems] = useState<ItemsArr[]>([]);
const [devicesItems, setDevicesItems] = useState([]); const [devicesItems, setDevicesItems] = useState<ItemsArr[]>([]);
const element = useRef<HTMLDivElement>(null); const element = useRef<HTMLDivElement>(null);

View file

@ -27,9 +27,9 @@ type ItemsArr = {
const UserParentalControl: FunctionComponent = () => { const UserParentalControl: FunctionComponent = () => {
const [ userName, setUserName ] = useState(''); const [ userName, setUserName ] = useState('');
const [ parentalRatings, setParentalRatings ] = useState([]); const [ parentalRatings, setParentalRatings ] = useState<RatingsArr[]>([]);
const [ unratedItems, setUnratedItems ] = useState([]); const [ unratedItems, setUnratedItems ] = useState<ItemsArr[]>([]);
const [ accessSchedules, setAccessSchedules ] = useState([]); const [ accessSchedules, setAccessSchedules ] = useState<AccessSchedule[]>([]);
const [ blockedTags, setBlockedTags ] = useState([]); const [ blockedTags, setBlockedTags ] = useState([]);
const element = useRef<HTMLDivElement>(null); const element = useRef<HTMLDivElement>(null);

View file

@ -1,4 +1,4 @@
import { UserDto } from '@thornbill/jellyfin-sdk/dist/generated-client';
import React, {FunctionComponent, useEffect, useState, useRef} from 'react'; import React, {FunctionComponent, useEffect, useState, useRef} from 'react';
import Dashboard from '../../scripts/clientUtils'; import Dashboard from '../../scripts/clientUtils';
import globalize from '../../scripts/globalize'; import globalize from '../../scripts/globalize';
@ -21,7 +21,7 @@ type MenuEntry = {
} }
const UserProfilesPage: FunctionComponent = () => { const UserProfilesPage: FunctionComponent = () => {
const [ users, setUsers ] = useState([]); const [ users, setUsers ] = useState<UserDto[]>([]);
const element = useRef<HTMLDivElement>(null); const element = useRef<HTMLDivElement>(null);

View file

@ -1,3 +1,4 @@
import { BaseItemDto } from '@thornbill/jellyfin-sdk/dist/generated-client';
import classNames from 'classnames'; import classNames from 'classnames';
import { ApiClient } from 'jellyfin-apiclient'; import { ApiClient } from 'jellyfin-apiclient';
import React, { FunctionComponent, useEffect, useState } from 'react'; import React, { FunctionComponent, useEffect, useState } from 'react';
@ -29,13 +30,13 @@ type LiveTVSearchResultsProps = {
* React component to display search result rows for live tv library search * React component to display search result rows for live tv library search
*/ */
const LiveTVSearchResults: FunctionComponent<LiveTVSearchResultsProps> = ({ serverId = window.ApiClient.serverId(), parentId, collectionType, query }: LiveTVSearchResultsProps) => { const LiveTVSearchResults: FunctionComponent<LiveTVSearchResultsProps> = ({ serverId = window.ApiClient.serverId(), parentId, collectionType, query }: LiveTVSearchResultsProps) => {
const [ movies, setMovies ] = useState([]); const [ movies, setMovies ] = useState<BaseItemDto[]>([]);
const [ episodes, setEpisodes ] = useState([]); const [ episodes, setEpisodes ] = useState<BaseItemDto[]>([]);
const [ sports, setSports ] = useState([]); const [ sports, setSports ] = useState<BaseItemDto[]>([]);
const [ kids, setKids ] = useState([]); const [ kids, setKids ] = useState<BaseItemDto[]>([]);
const [ news, setNews ] = useState([]); const [ news, setNews ] = useState<BaseItemDto[]>([]);
const [ programs, setPrograms ] = useState([]); const [ programs, setPrograms ] = useState<BaseItemDto[]>([]);
const [ channels, setChannels ] = useState([]); const [ channels, setChannels ] = useState<BaseItemDto[]>([]);
useEffect(() => { useEffect(() => {
const getDefaultParameters = () => ({ const getDefaultParameters = () => ({
@ -83,7 +84,7 @@ const LiveTVSearchResults: FunctionComponent<LiveTVSearchResultsProps> = ({ serv
IsSports: false, IsSports: false,
IsKids: false, IsKids: false,
IsNews: false IsNews: false
}).then(result => setMovies(result.Items)); }).then(result => setMovies(result.Items || []));
// Episodes row // Episodes row
fetchItems(apiClient, { fetchItems(apiClient, {
IncludeItemTypes: 'LiveTvProgram', IncludeItemTypes: 'LiveTvProgram',
@ -92,7 +93,7 @@ const LiveTVSearchResults: FunctionComponent<LiveTVSearchResultsProps> = ({ serv
IsSports: false, IsSports: false,
IsKids: false, IsKids: false,
IsNews: false IsNews: false
}).then(result => setEpisodes(result.Items)); }).then(result => setEpisodes(result.Items || []));
// Sports row // Sports row
fetchItems(apiClient, { fetchItems(apiClient, {
IncludeItemTypes: 'LiveTvProgram', IncludeItemTypes: 'LiveTvProgram',
@ -101,7 +102,7 @@ const LiveTVSearchResults: FunctionComponent<LiveTVSearchResultsProps> = ({ serv
IsSports: true, IsSports: true,
IsKids: false, IsKids: false,
IsNews: false IsNews: false
}).then(result => setSports(result.Items)); }).then(result => setSports(result.Items || []));
// Kids row // Kids row
fetchItems(apiClient, { fetchItems(apiClient, {
IncludeItemTypes: 'LiveTvProgram', IncludeItemTypes: 'LiveTvProgram',
@ -110,7 +111,7 @@ const LiveTVSearchResults: FunctionComponent<LiveTVSearchResultsProps> = ({ serv
IsSports: false, IsSports: false,
IsKids: true, IsKids: true,
IsNews: false IsNews: false
}).then(result => setKids(result.Items)); }).then(result => setKids(result.Items || []));
// News row // News row
fetchItems(apiClient, { fetchItems(apiClient, {
IncludeItemTypes: 'LiveTvProgram', IncludeItemTypes: 'LiveTvProgram',
@ -119,7 +120,7 @@ const LiveTVSearchResults: FunctionComponent<LiveTVSearchResultsProps> = ({ serv
IsSports: false, IsSports: false,
IsKids: false, IsKids: false,
IsNews: true IsNews: true
}).then(result => setNews(result.Items)); }).then(result => setNews(result.Items || []));
// Programs row // Programs row
fetchItems(apiClient, { fetchItems(apiClient, {
IncludeItemTypes: 'LiveTvProgram', IncludeItemTypes: 'LiveTvProgram',
@ -128,10 +129,10 @@ const LiveTVSearchResults: FunctionComponent<LiveTVSearchResultsProps> = ({ serv
IsSports: false, IsSports: false,
IsKids: false, IsKids: false,
IsNews: false IsNews: false
}).then(result => setPrograms(result.Items)); }).then(result => setPrograms(result.Items || []));
// Channels row // Channels row
fetchItems(apiClient, { IncludeItemTypes: 'TvChannel' }) fetchItems(apiClient, { IncludeItemTypes: 'TvChannel' })
.then(result => setChannels(result.Items)); .then(result => setChannels(result.Items || []));
} }
}, [collectionType, parentId, query, serverId]); }, [collectionType, parentId, query, serverId]);

View file

@ -1,3 +1,4 @@
import { BaseItemDto } from '@thornbill/jellyfin-sdk/dist/generated-client';
import classNames from 'classnames'; import classNames from 'classnames';
import { ApiClient } from 'jellyfin-apiclient'; import { ApiClient } from 'jellyfin-apiclient';
import React, { FunctionComponent, useEffect, useState } from 'react'; import React, { FunctionComponent, useEffect, useState } from 'react';
@ -17,21 +18,21 @@ type SearchResultsProps = {
* React component to display search result rows for global search and non-live tv library search * React component to display search result rows for global search and non-live tv library search
*/ */
const SearchResults: FunctionComponent<SearchResultsProps> = ({ serverId = window.ApiClient.serverId(), parentId, collectionType, query }: SearchResultsProps) => { const SearchResults: FunctionComponent<SearchResultsProps> = ({ serverId = window.ApiClient.serverId(), parentId, collectionType, query }: SearchResultsProps) => {
const [ movies, setMovies ] = useState([]); const [ movies, setMovies ] = useState<BaseItemDto[]>([]);
const [ shows, setShows ] = useState([]); const [ shows, setShows ] = useState<BaseItemDto[]>([]);
const [ episodes, setEpisodes ] = useState([]); const [ episodes, setEpisodes ] = useState<BaseItemDto[]>([]);
const [ videos, setVideos ] = useState([]); const [ videos, setVideos ] = useState<BaseItemDto[]>([]);
const [ programs, setPrograms ] = useState([]); const [ programs, setPrograms ] = useState<BaseItemDto[]>([]);
const [ channels, setChannels ] = useState([]); const [ channels, setChannels ] = useState<BaseItemDto[]>([]);
const [ playlists, setPlaylists ] = useState([]); const [ playlists, setPlaylists ] = useState<BaseItemDto[]>([]);
const [ artists, setArtists ] = useState([]); const [ artists, setArtists ] = useState<BaseItemDto[]>([]);
const [ albums, setAlbums ] = useState([]); const [ albums, setAlbums ] = useState<BaseItemDto[]>([]);
const [ songs, setSongs ] = useState([]); const [ songs, setSongs ] = useState<BaseItemDto[]>([]);
const [ photoAlbums, setPhotoAlbums ] = useState([]); const [ photoAlbums, setPhotoAlbums ] = useState<BaseItemDto[]>([]);
const [ photos, setPhotos ] = useState([]); const [ photos, setPhotos ] = useState<BaseItemDto[]>([]);
const [ audioBooks, setAudioBooks ] = useState([]); const [ audioBooks, setAudioBooks ] = useState<BaseItemDto[]>([]);
const [ books, setBooks ] = useState([]); const [ books, setBooks ] = useState<BaseItemDto[]>([]);
const [ people, setPeople ] = useState([]); const [ people, setPeople ] = useState<BaseItemDto[]>([]);
useEffect(() => { useEffect(() => {
const getDefaultParameters = () => ({ const getDefaultParameters = () => ({
@ -106,38 +107,38 @@ const SearchResults: FunctionComponent<SearchResultsProps> = ({ serverId = windo
if (!collectionType || isMovies()) { if (!collectionType || isMovies()) {
// Movies row // Movies row
fetchItems(apiClient, { IncludeItemTypes: 'Movie' }) fetchItems(apiClient, { IncludeItemTypes: 'Movie' })
.then(result => setMovies(result.Items)); .then(result => setMovies(result.Items || []));
} }
// TV Show libraries // TV Show libraries
if (!collectionType || isTVShows()) { if (!collectionType || isTVShows()) {
// Shows row // Shows row
fetchItems(apiClient, { IncludeItemTypes: 'Series' }) fetchItems(apiClient, { IncludeItemTypes: 'Series' })
.then(result => setShows(result.Items)); .then(result => setShows(result.Items || []));
// Episodes row // Episodes row
fetchItems(apiClient, { IncludeItemTypes: 'Episode' }) fetchItems(apiClient, { IncludeItemTypes: 'Episode' })
.then(result => setEpisodes(result.Items)); .then(result => setEpisodes(result.Items || []));
} }
// People are included for Movies and TV Shows // People are included for Movies and TV Shows
if (!collectionType || isMovies() || isTVShows()) { if (!collectionType || isMovies() || isTVShows()) {
// People row // People row
fetchPeople(apiClient).then(result => setPeople(result.Items)); fetchPeople(apiClient).then(result => setPeople(result.Items || []));
} }
// Music libraries // Music libraries
if (!collectionType || isMusic()) { if (!collectionType || isMusic()) {
// Playlists row // Playlists row
fetchItems(apiClient, { IncludeItemTypes: 'Playlist' }) fetchItems(apiClient, { IncludeItemTypes: 'Playlist' })
.then(results => setPlaylists(results.Items)); .then(results => setPlaylists(results.Items || []));
// Artists row // Artists row
fetchArtists(apiClient).then(result => setArtists(result.Items)); fetchArtists(apiClient).then(result => setArtists(result.Items || []));
// Albums row // Albums row
fetchItems(apiClient, { IncludeItemTypes: 'MusicAlbum' }) fetchItems(apiClient, { IncludeItemTypes: 'MusicAlbum' })
.then(result => setAlbums(result.Items)); .then(result => setAlbums(result.Items || []));
// Songs row // Songs row
fetchItems(apiClient, { IncludeItemTypes: 'Audio' }) fetchItems(apiClient, { IncludeItemTypes: 'Audio' })
.then(result => setSongs(result.Items)); .then(result => setSongs(result.Items || []));
} }
// Other libraries do not support in-library search currently // Other libraries do not support in-library search currently
@ -146,25 +147,25 @@ const SearchResults: FunctionComponent<SearchResultsProps> = ({ serverId = windo
fetchItems(apiClient, { fetchItems(apiClient, {
MediaTypes: 'Video', MediaTypes: 'Video',
ExcludeItemTypes: 'Movie,Episode,TvChannel' ExcludeItemTypes: 'Movie,Episode,TvChannel'
}).then(result => setVideos(result.Items)); }).then(result => setVideos(result.Items || []));
// Programs row // Programs row
fetchItems(apiClient, { IncludeItemTypes: 'LiveTvProgram' }) fetchItems(apiClient, { IncludeItemTypes: 'LiveTvProgram' })
.then(result => setPrograms(result.Items)); .then(result => setPrograms(result.Items || []));
// Channels row // Channels row
fetchItems(apiClient, { IncludeItemTypes: 'TvChannel' }) fetchItems(apiClient, { IncludeItemTypes: 'TvChannel' })
.then(result => setChannels(result.Items)); .then(result => setChannels(result.Items || []));
// Photo Albums row // Photo Albums row
fetchItems(apiClient, { IncludeItemTypes: 'PhotoAlbum' }) fetchItems(apiClient, { IncludeItemTypes: 'PhotoAlbum' })
.then(results => setPhotoAlbums(results.Items)); .then(results => setPhotoAlbums(results.Items || []));
// Photos row // Photos row
fetchItems(apiClient, { IncludeItemTypes: 'Photo' }) fetchItems(apiClient, { IncludeItemTypes: 'Photo' })
.then(results => setPhotos(results.Items)); .then(results => setPhotos(results.Items || []));
// Audio Books row // Audio Books row
fetchItems(apiClient, { IncludeItemTypes: 'AudioBook' }) fetchItems(apiClient, { IncludeItemTypes: 'AudioBook' })
.then(results => setAudioBooks(results.Items)); .then(results => setAudioBooks(results.Items || []));
// Books row // Books row
fetchItems(apiClient, { IncludeItemTypes: 'Book' }) fetchItems(apiClient, { IncludeItemTypes: 'Book' })
.then(results => setBooks(results.Items)); .then(results => setBooks(results.Items || []));
} }
} }
}, [collectionType, parentId, query, serverId]); }, [collectionType, parentId, query, serverId]);

View file

@ -1,3 +1,4 @@
import { BaseItemDto } from '@thornbill/jellyfin-sdk/dist/generated-client';
import React, { FunctionComponent, useEffect, useState } from 'react'; import React, { FunctionComponent, useEffect, useState } from 'react';
import { appRouter } from '../appRouter'; import { appRouter } from '../appRouter';
@ -24,7 +25,7 @@ type SearchSuggestionsProps = {
} }
const SearchSuggestions: FunctionComponent<SearchSuggestionsProps> = ({ serverId = window.ApiClient.serverId(), parentId }: SearchSuggestionsProps) => { const SearchSuggestions: FunctionComponent<SearchSuggestionsProps> = ({ serverId = window.ApiClient.serverId(), parentId }: SearchSuggestionsProps) => {
const [ suggestions, setSuggestions ] = useState([]); const [ suggestions, setSuggestions ] = useState<BaseItemDto[]>([]);
useEffect(() => { useEffect(() => {
const apiClient = ServerConnections.getApiClient(serverId); const apiClient = ServerConnections.getApiClient(serverId);
@ -38,7 +39,7 @@ const SearchSuggestions: FunctionComponent<SearchSuggestionsProps> = ({ serverId
EnableImages: false, EnableImages: false,
ParentId: parentId, ParentId: parentId,
EnableTotalRecordCount: false EnableTotalRecordCount: false
}).then(result => setSuggestions(result.Items)); }).then(result => setSuggestions(result.Items || []));
}, [parentId, serverId]); }, [parentId, serverId]);
return ( return (