From 5bb09a88bcb10ea61727ca0d18e55ae512e22840 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 17 Mar 2025 20:08:32 +0300 Subject: [PATCH] fix: dont confuse with incorrect version display, allow to use config values as params in real time --- src/api/mcStatusApi.ts | 4 ++-- src/appParams.ts | 5 +++-- src/globalState.ts | 7 +------ src/react/ServersListProvider.tsx | 13 ++++++++----- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/api/mcStatusApi.ts b/src/api/mcStatusApi.ts index 20d27813..8ac429dd 100644 --- a/src/api/mcStatusApi.ts +++ b/src/api/mcStatusApi.ts @@ -15,7 +15,7 @@ export const isServerValid = (ip: string) => { return !isInLocalNetwork && VALID_IP_OR_DOMAIN } -export async function fetchServerStatus (ip: string, signal?: AbortSignal) { +export async function fetchServerStatus (ip: string, signal?: AbortSignal, versionOverride?: string) { if (!isServerValid(ip)) return const response = await fetch(`https://api.mcstatus.io/v2/status/java/${ip}`, { signal }) @@ -25,7 +25,7 @@ export async function fetchServerStatus (ip: string, signal?: AbortSignal) { return { formattedText: data.motd?.raw ?? '', textNameRight: data.online ? - `${versionClean} ${data.players?.online ?? '??'}/${data.players?.max ?? '??'}` : + `${versionOverride ?? versionClean} ${data.players?.online ?? '??'}/${data.players?.max ?? '??'}` : '', icon: data.icon, offline: !data.online, diff --git a/src/appParams.ts b/src/appParams.ts index 98d6ff62..b550ea02 100644 --- a/src/appParams.ts +++ b/src/appParams.ts @@ -1,4 +1,5 @@ import type { AppConfig } from './appConfig' +import { miscUiState } from './globalState' const qsParams = new URLSearchParams(window.location?.search ?? '') @@ -73,7 +74,7 @@ export const appQueryParams = new Proxy({} as AppQsParams, { } const qsParam = qsParams.get(property) if (qsParam) return qsParam - return initialAppConfig.appParams?.[property] + return miscUiState.appConfig?.appParams?.[property] }, }) @@ -84,7 +85,7 @@ export const appQueryParamsArray = new Proxy({} as AppQsParamsArrayTransformed, } const qsParam = qsParams.getAll(property) if (qsParam.length) return qsParam - return initialAppConfig.appParams?.[property] ?? [] + return miscUiState.appConfig?.appParams?.[property] ?? [] }, }) diff --git a/src/globalState.ts b/src/globalState.ts index 0ee8671d..2d77b720 100644 --- a/src/globalState.ts +++ b/src/globalState.ts @@ -3,17 +3,12 @@ import { proxy, ref, subscribe } from 'valtio' import type { WorldWarp } from 'flying-squid/dist/lib/modules/warps' import type { OptionsGroupType } from './optionsGuiScheme' -import { appQueryParams } from './appParams' import { options, disabledSettings } from './optionsStorage' import { AppConfig } from './appConfig' // todo: refactor structure with support of hideNext=false -const notHideableModalsWithoutForce = new Set(['app-status']) - -if (appQueryParams.lockConnect) { - notHideableModalsWithoutForce.add('editServer') -} +export const notHideableModalsWithoutForce = new Set(['app-status']) type Modal = ({ elem?: HTMLElement & Record } & { reactType: string }) diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index d107770f..2d1628a9 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -2,7 +2,7 @@ import { useEffect, useMemo, useState } from 'react' import { useUtilsEffect } from '@zardoy/react-util' import { useSnapshot } from 'valtio' import { ConnectOptions } from '../connect' -import { activeModalStack, hideCurrentModal, miscUiState, showModal } from '../globalState' +import { activeModalStack, hideCurrentModal, miscUiState, notHideableModalsWithoutForce, showModal } from '../globalState' import supportedVersions from '../supportedVersions.mjs' import { appQueryParams } from '../appParams' import { fetchServerStatus, isServerValid } from '../api/mcStatusApi' @@ -17,6 +17,10 @@ import { useCopyKeybinding } from './simpleHooks' import { AuthenticatedAccount, getInitialServersList, getServerConnectionHistory, setNewServersList } from './serversStorage' import { appStorage, StoreServerItem } from './appStorageProvider' +if (appQueryParams.lockConnect) { + notHideableModalsWithoutForce.add('editServer') +} + type AdditionalDisplayData = { textNameRightGrayed: string formattedText: string @@ -25,8 +29,6 @@ type AdditionalDisplayData = { offline?: boolean } -const serversListQs = appQueryParams.serversList - // todo move to base const normalizeIp = (ip: string) => ip.replace(/https?:\/\//, '').replace(/\/(:|$)/, '') @@ -137,7 +139,7 @@ const Inner = ({ hidden, customServersList }: { hidden?: boolean, customServersL offline: false } } else { - data = await fetchServerStatus(server.ip/* , signal */) // DONT ADD SIGNAL IT WILL CRUSH JS RUNTIME + data = await fetchServerStatus(server.ip, /* signal */undefined, server.versionOverride) // DONT ADD SIGNAL IT WILL CRUSH JS RUNTIME } if (data) { setAdditionalServerData(old => ({ @@ -370,6 +372,7 @@ const Inner = ({ hidden, customServersList }: { hidden?: boolean, customServersL } export default () => { + const serversListQs = appQueryParams.serversList const [customServersList, setCustomServersList] = useState(serversListQs ? [] : undefined) useEffect(() => { @@ -386,7 +389,7 @@ export default () => { setCustomServersList(serversListQs.split(',')) } } - }, []) + }, [serversListQs]) const modalStack = useSnapshot(activeModalStack) const hasServersListModal = modalStack.some(x => x.reactType === 'serversList')