diff --git a/src/main/main.ts b/src/main/main.ts index 07bd8328..1e5c20d6 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -46,7 +46,7 @@ const installExtensions = async () => { const forceDownload = !!process.env.UPGRADE_EXTENSIONS; const extensions = ['REACT_DEVELOPER_TOOLS']; - return installer.default(extensions.map((name) => installer[name]), forceDownload).catch(console.log); + return installer.default(extensions.map((name) => installer[name]), forceDownload).catch(console.error); }; const createWindow = async (window: AppWindow = "launcher.html") => { diff --git a/src/renderer/components/maps-mangement-components/local-maps-list-panel.component.tsx b/src/renderer/components/maps-mangement-components/local-maps-list-panel.component.tsx index e8ac25cf..e723f89e 100644 --- a/src/renderer/components/maps-mangement-components/local-maps-list-panel.component.tsx +++ b/src/renderer/components/maps-mangement-components/local-maps-list-panel.component.tsx @@ -4,7 +4,6 @@ import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useSta import { BsmLocalMap } from "shared/models/maps/bsm-local-map.interface" import { Subscription } from "rxjs" import { MapFilter } from "shared/models/maps/beat-saver.model" -import { useInView } from "framer-motion" import { MapsDownloaderService } from "renderer/services/maps-downloader.service" import { VariableSizeList } from "react-window" import { MapsRow } from "./maps-row.component" @@ -18,16 +17,18 @@ import BeatConflict from "../../../../assets/images/apngs/beat-conflict.png" import { BsmImage } from "../shared/bsm-image.component" import { BsmButton } from "../shared/bsm-button.component" import TextProgressBar from "../progress-bar/text-progress-bar.component" +import { useChangeOnce } from "renderer/hooks/use-change-once.hook" type Props = { version: BSVersion, className?: string, filter?: MapFilter search?: string, - linked?: boolean + linked?: boolean, + isActive?: boolean } -export const LocalMapsListPanel = forwardRef(({version, className, filter, search, linked} : Props, forwardRef) => { +export const LocalMapsListPanel = forwardRef(({version, className, filter, search, linked, isActive} : Props, forwardRef) => { const mapsManager = MapsManagerService.getInstance(); const mapsDownloader = MapsDownloaderService.getInstance(); @@ -35,13 +36,13 @@ export const LocalMapsListPanel = forwardRef(({version, className, filter, searc const os = OsDiagnosticService.getInstance(); const t = useTranslation(); - const ref = useRef(null) - const isVisible = useInView(ref, {once: true, amount: .5}); + const ref = useRef(null); const [maps, setMaps] = useState(null); const [subs] = useState([]); const [selectedMaps$] = useState(new BehaviorSubject([])); const [itemPerRow, setItemPerRow] = useState(2); const [listHeight, setListHeight] = useState(0); + const isActiveOnce = useChangeOnce(isActive); const [loadPercent$] = useState(new BehaviorSubject(0)); @@ -64,7 +65,7 @@ export const LocalMapsListPanel = forwardRef(({version, className, filter, searc useEffect(() => { - if(isVisible){ + if(isActiveOnce){ loadMaps(); mapsDownloader.addOnMapDownloadedListener((map, targerVersion) => { if(targerVersion !== version){ return; } @@ -78,11 +79,11 @@ export const LocalMapsListPanel = forwardRef(({version, className, filter, searc subs.forEach(s => s.unsubscribe()); mapsDownloader.removeOnMapDownloadedListener(loadMaps); } - }, [isVisible, version, linked]); + }, [isActiveOnce, version, linked]); useEffect(() => { - if(!isVisible){ return () => {}; } + if(!isActiveOnce){ return; } const updateItemPerRow = (listWidth: number) => { const newPerRow = Math.min(Math.floor(listWidth / 400), 3); @@ -106,7 +107,7 @@ export const LocalMapsListPanel = forwardRef(({version, className, filter, searc sub.unsubscribe(); } - }, [isVisible, itemPerRow]) + }, [isActiveOnce, itemPerRow]) const loadMaps = () => { diff --git a/src/renderer/components/maps-mangement-components/maps-playlists-panel.component.tsx b/src/renderer/components/maps-mangement-components/maps-playlists-panel.component.tsx index cd847b2d..6b515763 100644 --- a/src/renderer/components/maps-mangement-components/maps-playlists-panel.component.tsx +++ b/src/renderer/components/maps-mangement-components/maps-playlists-panel.component.tsx @@ -21,10 +21,11 @@ import { VersionFolderLinkerService, VersionLinkerActionListener } from "rendere type Props = { - version?: BSVersion + version?: BSVersion, + isActive?: boolean } -export function MapsPlaylistsPanel({version}: Props) { +export function MapsPlaylistsPanel({version, isActive}: Props) { const mapsService = MapsManagerService.getInstance(); const mapsDownloader = MapsDownloaderService.getInstance(); @@ -63,7 +64,7 @@ export function MapsPlaylistsPanel({version}: Props) { linker.removeVersionFolderUnlinkedListener(onMapsLinked); } - }, [version]); + }, [version, isActive]); const loadMapIsLinked = () => { mapsService.versionHaveMapsLinked(version).then(setMapsLinked); @@ -160,7 +161,7 @@ export function MapsPlaylistsPanel({version}: Props) {
- +
Coming soon diff --git a/src/renderer/components/shared/bsm-button.component.tsx b/src/renderer/components/shared/bsm-button.component.tsx index 797e7961..76aae513 100644 --- a/src/renderer/components/shared/bsm-button.component.tsx +++ b/src/renderer/components/shared/bsm-button.component.tsx @@ -41,7 +41,6 @@ export function BsmButton({className, style, imgClassName, iconClassName, icon, const textColor = (() => { if(primaryColor){ - console.log(getCorrectTextColor(primaryColor), text); return getCorrectTextColor(primaryColor); } return typeColor ? "white" : undefined; diff --git a/src/renderer/hooks/use-change-once.hook.ts b/src/renderer/hooks/use-change-once.hook.ts new file mode 100644 index 00000000..09e64190 --- /dev/null +++ b/src/renderer/hooks/use-change-once.hook.ts @@ -0,0 +1,17 @@ +import equal from "fast-deep-equal"; +import { useEffect, useRef, useState } from "react"; + +export function useChangeOnce(initialValue: T): T { + const [trackedValue, setTrackedValue] = useState(initialValue); + const didChangeOnceRef = useRef(false); + + useEffect(() => { + if(didChangeOnceRef.current || equal(initialValue, trackedValue)){ return; } + + setTrackedValue(() => initialValue); + didChangeOnceRef.current = true; + + }, [initialValue]); + + return trackedValue; +} \ No newline at end of file diff --git a/src/renderer/pages/version-viewer.component.tsx b/src/renderer/pages/version-viewer.component.tsx index 00594411..9aa22553 100644 --- a/src/renderer/pages/version-viewer.component.tsx +++ b/src/renderer/pages/version-viewer.component.tsx @@ -80,7 +80,7 @@ export function VersionViewer() {
- +
setCurrentTabIndex(() => 3)}/>