From ae32077d2487e40a7d8ee95a0ef38e96a1a91f2a Mon Sep 17 00:00:00 2001 From: Gaxeer <44334376+Gaxeer@users.noreply.github.com> Date: Mon, 27 May 2024 13:59:03 +0300 Subject: [PATCH] refactor: use `VirtualList` for TTS items (#280) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request Use `VirtualList` for Voice tab in Preference to make it load ~10 times faster ## Why It's Good For The Game QoL ## Changelog :cl: refactor: используем `VirtualList` для вкладки `Voice` в Настройках персонажа дабы она загружалась в разы быстрее /:cl: --- .../interfaces/PreferencesMenu/VoicePage.tsx | 182 ++++++++++-------- .../tgui/interfaces/PreferencesMenu/data.ts | 21 +- 2 files changed, 113 insertions(+), 90 deletions(-) diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/VoicePage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/VoicePage.tsx index 999b5c35eac5d..25a6ab8805d11 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/VoicePage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/VoicePage.tsx @@ -11,8 +11,9 @@ import { Section, Stack, Table, + VirtualList, } from '../../components'; -import { PreferencesMenuData } from './data'; +import { PreferencesMenuData, Seed } from './data'; const donatorTiers = { 0: 'Free', @@ -68,7 +69,7 @@ const getCheckboxGroup = ( }; export const VoicePage = (props) => { - const { act, data } = useBackend(); + const { data } = useBackend(); const { providers, @@ -160,80 +161,6 @@ export const VoicePage = (props) => { seed.name.toLowerCase().includes(searchtext.toLowerCase()), ); - let seedsRow = availableSeeds.map((seed) => { - return ( - - - } > @@ -303,10 +232,101 @@ export const VoicePage = (props) => { scrollable title={`Голоса (${availableSeeds.length}/${seeds.length})`} > - {seedsRow}
+ + + {availableSeeds.map((seed) => { + return ( + + ); + })} + +
); }; + +const SeedRow = (props: { + seed: Seed; + selected_seed: string; + selected_phrase: string; + donator_level: number; +}) => { + const { seed, selected_seed, selected_phrase, donator_level } = props; + const { act } = useBackend(); + return ( + + + + + +