diff --git a/packages/website/src/components/TankSearch/components/SearchBar.tsx b/packages/website/src/components/TankSearch/components/SearchBar.tsx index 36b05044a..d392fcaa9 100644 --- a/packages/website/src/components/TankSearch/components/SearchBar.tsx +++ b/packages/website/src/components/TankSearch/components/SearchBar.tsx @@ -6,15 +6,16 @@ import { debounce } from 'lodash-es'; import { type KeyboardEventHandler, useCallback, useRef } from 'react'; import { useLocale } from '../../../hooks/useLocale'; import { $tankFilters } from '../../../stores/tankFilters'; +import type { MaybeSkeletonComponentProps } from '../../../types/maybeSkeletonComponentProps'; import { QuickLink } from './QuickLink'; import { Sort } from './Sort'; -interface SearchBarProps { +type SearchBarProps = MaybeSkeletonComponentProps & { topResult?: TankDefinition; onSelect?: (tank: TankDefinition) => void; -} +}; -export function SearchBar({ topResult, onSelect }: SearchBarProps) { +export function SearchBar({ topResult, skeleton, onSelect }: SearchBarProps) { const { strings } = useLocale(); const tankFilters = useStore($tankFilters); const input = useRef(null); @@ -66,6 +67,7 @@ export function SearchBar({ topResult, onSelect }: SearchBarProps) { & { - compact?: boolean; - onSelect?: (tank: TankDefinition) => void; - onSelectAll?: (tanks: TankDefinition[]) => void; -}; +type TankSearchProps = MaybeSkeletonComponentProps & + Omit & { + compact?: boolean; + onSelect?: (tank: TankDefinition) => void; + onSelectAll?: (tanks: TankDefinition[]) => void; + }; const PREVIEW_COUNT = 20; const DEFAULT_LOADED_CARDS = 64; @@ -51,7 +53,7 @@ const [gameDefinitions, modelDefinitions, tankDefinitions, tankNames] = ]); export const TankSearch = memo( - ({ compact, onSelect, onSelectAll, ...props }) => { + ({ compact, onSelect, onSelectAll, skeleton, ...props }) => { const { strings, locale } = useLocale(); const mutateTankopediaPersistent = TankopediaPersistent.useMutation(); const awaitedTanksDefinitionsArray = Object.values(tankDefinitions.tanks); @@ -428,13 +430,17 @@ export const TankSearch = memo( return ( - + {!tankFilters.search && !tankFilters.searching && ( )} - {!compact && } + {!skeleton && !compact && } @@ -494,7 +500,7 @@ export const TankSearch = memo( )} - {!tankFilters.searching && ( + {!skeleton && !tankFilters.searching && ( <> {tanks.length > 0 && ( @@ -528,11 +534,16 @@ export const TankSearch = memo( )} - {tankFilters.searching && ( + {(skeleton || tankFilters.searching) && ( - {times(Math.round(10 + 10 * Math.random()), (index) => ( - - ))} + {times( + Math.round( + skeleton ? DEFAULT_LOADED_CARDS : 10 + 10 * Math.random(), + ), + (index) => ( + + ), + )} )} diff --git a/packages/website/src/pages/[...locale]/tools/tankopedia/_index.tsx b/packages/website/src/pages/[...locale]/tools/tankopedia/_index.tsx index 9586154a7..6b777368b 100644 --- a/packages/website/src/pages/[...locale]/tools/tankopedia/_index.tsx +++ b/packages/website/src/pages/[...locale]/tools/tankopedia/_index.tsx @@ -6,14 +6,18 @@ import { } from '../../../../hooks/useLocale'; import { App } from '../../../../stores/app'; import { TankopediaPersistent } from '../../../../stores/tankopediaPersistent'; +import type { MaybeSkeletonComponentProps } from '../../../../types/maybeSkeletonComponentProps'; -export function Page({ locale }: LocaleAcceptorProps) { +export function Page({ + locale, + skeleton, +}: LocaleAcceptorProps & MaybeSkeletonComponentProps) { return ( - + diff --git a/packages/website/src/pages/[...locale]/tools/tankopedia/index.astro b/packages/website/src/pages/[...locale]/tools/tankopedia/index.astro index 71a69ab5c..184fa85ea 100644 --- a/packages/website/src/pages/[...locale]/tools/tankopedia/index.astro +++ b/packages/website/src/pages/[...locale]/tools/tankopedia/index.astro @@ -10,6 +10,6 @@ const { locale } = Astro.params; - +