React 18 and Vite (#4510)
This commit is contained in:
parent
1bb1b13f6d
commit
21613fa602
244 changed files with 4547 additions and 8933 deletions
|
@ -1,21 +1,23 @@
|
|||
import React, { useMemo } from 'react';
|
||||
import type { ComponentType } from 'react';
|
||||
import { Suspense, useMemo } from 'react';
|
||||
|
||||
import features from './index';
|
||||
import { getObjectKeys } from '@/lib/objects';
|
||||
|
||||
type ListItems = [string, React.ComponentType][];
|
||||
type ListItems = [string, ComponentType][];
|
||||
|
||||
export default ({ enabled }: { enabled: string[] }) => {
|
||||
const mapped: ListItems = useMemo(() => {
|
||||
return getObjectKeys(features)
|
||||
.filter((key) => enabled.map((v) => v.toLowerCase()).includes(key.toLowerCase()))
|
||||
.reduce((arr, key) => [...arr, [key, features[key]]], [] as ListItems);
|
||||
.filter(key => enabled.map(v => v.toLowerCase()).includes(key.toLowerCase()))
|
||||
.reduce((arr, key) => [...arr, [key, features[key]]] as ListItems, [] as ListItems);
|
||||
}, [enabled]);
|
||||
|
||||
return (
|
||||
<React.Suspense fallback={null}>
|
||||
<Suspense fallback={null}>
|
||||
{mapped.map(([key, Component]) => (
|
||||
<Component key={key} />
|
||||
))}
|
||||
</React.Suspense>
|
||||
</Suspense>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { ServerContext } from '@/state/server';
|
||||
import Modal from '@/components/elements/Modal';
|
||||
import tw from 'twin.macro';
|
||||
|
@ -18,10 +18,10 @@ const GSLTokenModalFeature = () => {
|
|||
const [visible, setVisible] = useState(false);
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid);
|
||||
const status = ServerContext.useStoreState((state) => state.status.value);
|
||||
const uuid = ServerContext.useStoreState(state => state.server.data!.uuid);
|
||||
const status = ServerContext.useStoreState(state => state.status.value);
|
||||
const { clearFlashes, clearAndAddHttpError } = useFlash();
|
||||
const { connected, instance } = ServerContext.useStoreState((state) => state.socket);
|
||||
const { connected, instance } = ServerContext.useStoreState(state => state.socket);
|
||||
|
||||
useEffect(() => {
|
||||
if (!connected || !instance || status === 'running') return;
|
||||
|
@ -29,7 +29,7 @@ const GSLTokenModalFeature = () => {
|
|||
const errors = ['(gsl token expired)', '(account not found)'];
|
||||
|
||||
const listener = (line: string) => {
|
||||
if (errors.some((p) => line.toLowerCase().includes(p))) {
|
||||
if (errors.some(p => line.toLowerCase().includes(p))) {
|
||||
setVisible(true);
|
||||
}
|
||||
};
|
||||
|
@ -54,7 +54,7 @@ const GSLTokenModalFeature = () => {
|
|||
setLoading(false);
|
||||
setVisible(false);
|
||||
})
|
||||
.catch((error) => {
|
||||
.catch(error => {
|
||||
console.error(error);
|
||||
clearAndAddHttpError({ key: 'feature:gslToken', error });
|
||||
})
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { ServerContext } from '@/state/server';
|
||||
import Modal from '@/components/elements/Modal';
|
||||
import tw from 'twin.macro';
|
||||
|
@ -26,25 +26,25 @@ const JavaVersionModalFeature = () => {
|
|||
const [loading, setLoading] = useState(false);
|
||||
const [selectedVersion, setSelectedVersion] = useState('');
|
||||
|
||||
const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid);
|
||||
const status = ServerContext.useStoreState((state) => state.status.value);
|
||||
const uuid = ServerContext.useStoreState(state => state.server.data!.uuid);
|
||||
const status = ServerContext.useStoreState(state => state.status.value);
|
||||
const { clearFlashes, clearAndAddHttpError } = useFlash();
|
||||
const { instance } = ServerContext.useStoreState((state) => state.socket);
|
||||
const { instance } = ServerContext.useStoreState(state => state.socket);
|
||||
|
||||
const { data, isValidating, mutate } = getServerStartup(uuid, null, { revalidateOnMount: false });
|
||||
const { data, isValidating, mutate } = getServerStartup(uuid, undefined, { revalidateOnMount: false });
|
||||
|
||||
useEffect(() => {
|
||||
if (!visible) return;
|
||||
|
||||
mutate().then((value) => {
|
||||
mutate().then(value => {
|
||||
setSelectedVersion(Object.values(value?.dockerImages || [])[0] || '');
|
||||
});
|
||||
}, [visible]);
|
||||
|
||||
useWebsocketEvent(SocketEvent.CONSOLE_OUTPUT, (data) => {
|
||||
useWebsocketEvent(SocketEvent.CONSOLE_OUTPUT, data => {
|
||||
if (status === 'running') return;
|
||||
|
||||
if (MATCH_ERRORS.some((p) => data.toLowerCase().includes(p.toLowerCase()))) {
|
||||
if (MATCH_ERRORS.some(p => data.toLowerCase().includes(p.toLowerCase()))) {
|
||||
setVisible(true);
|
||||
}
|
||||
});
|
||||
|
@ -60,7 +60,7 @@ const JavaVersionModalFeature = () => {
|
|||
}
|
||||
setVisible(false);
|
||||
})
|
||||
.catch((error) => clearAndAddHttpError({ key: 'feature:javaVersion', error }))
|
||||
.catch(error => clearAndAddHttpError({ key: 'feature:javaVersion', error }))
|
||||
.then(() => setLoading(false));
|
||||
};
|
||||
|
||||
|
@ -86,11 +86,11 @@ const JavaVersionModalFeature = () => {
|
|||
<Can action={'startup.docker-image'}>
|
||||
<div css={tw`mt-4`}>
|
||||
<InputSpinner visible={!data || isValidating}>
|
||||
<Select disabled={!data} onChange={(e) => setSelectedVersion(e.target.value)}>
|
||||
<Select disabled={!data} onChange={e => setSelectedVersion(e.target.value)}>
|
||||
{!data ? (
|
||||
<option disabled />
|
||||
) : (
|
||||
Object.keys(data.dockerImages).map((key) => (
|
||||
Object.keys(data.dockerImages).map(key => (
|
||||
<option key={key} value={data.dockerImages[key]}>
|
||||
{key}
|
||||
</option>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { ServerContext } from '@/state/server';
|
||||
import Modal from '@/components/elements/Modal';
|
||||
import tw from 'twin.macro';
|
||||
|
@ -14,10 +14,10 @@ const PIDLimitModalFeature = () => {
|
|||
const [visible, setVisible] = useState(false);
|
||||
const [loading] = useState(false);
|
||||
|
||||
const status = ServerContext.useStoreState((state) => state.status.value);
|
||||
const status = ServerContext.useStoreState(state => state.status.value);
|
||||
const { clearFlashes } = useFlash();
|
||||
const { connected, instance } = ServerContext.useStoreState((state) => state.socket);
|
||||
const isAdmin = useStoreState((state) => state.user.data!.rootAdmin);
|
||||
const { connected, instance } = ServerContext.useStoreState(state => state.socket);
|
||||
const isAdmin = useStoreState(state => state.user.data!.rootAdmin);
|
||||
|
||||
useEffect(() => {
|
||||
if (!connected || !instance || status === 'running') return;
|
||||
|
@ -32,7 +32,7 @@ const PIDLimitModalFeature = () => {
|
|||
];
|
||||
|
||||
const listener = (line: string) => {
|
||||
if (errors.some((p) => line.toLowerCase().includes(p))) {
|
||||
if (errors.some(p => line.toLowerCase().includes(p))) {
|
||||
setVisible(true);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { ServerContext } from '@/state/server';
|
||||
import Modal from '@/components/elements/Modal';
|
||||
import tw from 'twin.macro';
|
||||
|
@ -12,10 +12,10 @@ const SteamDiskSpaceFeature = () => {
|
|||
const [visible, setVisible] = useState(false);
|
||||
const [loading] = useState(false);
|
||||
|
||||
const status = ServerContext.useStoreState((state) => state.status.value);
|
||||
const status = ServerContext.useStoreState(state => state.status.value);
|
||||
const { clearFlashes } = useFlash();
|
||||
const { connected, instance } = ServerContext.useStoreState((state) => state.socket);
|
||||
const isAdmin = useStoreState((state) => state.user.data!.rootAdmin);
|
||||
const { connected, instance } = ServerContext.useStoreState(state => state.socket);
|
||||
const isAdmin = useStoreState(state => state.user.data!.rootAdmin);
|
||||
|
||||
useEffect(() => {
|
||||
if (!connected || !instance || status === 'running') return;
|
||||
|
@ -23,7 +23,7 @@ const SteamDiskSpaceFeature = () => {
|
|||
const errors = ['steamcmd needs 250mb of free disk space to update', '0x202 after update job'];
|
||||
|
||||
const listener = (line: string) => {
|
||||
if (errors.some((p) => line.toLowerCase().includes(p))) {
|
||||
if (errors.some(p => line.toLowerCase().includes(p))) {
|
||||
setVisible(true);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { ServerContext } from '@/state/server';
|
||||
import Modal from '@/components/elements/Modal';
|
||||
import tw from 'twin.macro';
|
||||
|
@ -12,10 +12,10 @@ const EulaModalFeature = () => {
|
|||
const [visible, setVisible] = useState(false);
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid);
|
||||
const status = ServerContext.useStoreState((state) => state.status.value);
|
||||
const uuid = ServerContext.useStoreState(state => state.server.data!.uuid);
|
||||
const status = ServerContext.useStoreState(state => state.status.value);
|
||||
const { clearFlashes, clearAndAddHttpError } = useFlash();
|
||||
const { connected, instance } = ServerContext.useStoreState((state) => state.socket);
|
||||
const { connected, instance } = ServerContext.useStoreState(state => state.socket);
|
||||
|
||||
useEffect(() => {
|
||||
if (!connected || !instance || status === 'running') return;
|
||||
|
@ -46,7 +46,7 @@ const EulaModalFeature = () => {
|
|||
setLoading(false);
|
||||
setVisible(false);
|
||||
})
|
||||
.catch((error) => {
|
||||
.catch(error => {
|
||||
console.error(error);
|
||||
clearAndAddHttpError({ key: 'feature:eula', error });
|
||||
})
|
||||
|
@ -72,7 +72,7 @@ const EulaModalFeature = () => {
|
|||
target={'_blank'}
|
||||
css={tw`text-primary-300 underline transition-colors duration-150 hover:text-primary-400`}
|
||||
rel={'noreferrer noopener'}
|
||||
href='https://account.mojang.com/documents/minecraft_eula'
|
||||
href="https://account.mojang.com/documents/minecraft_eula"
|
||||
>
|
||||
Minecraft® EULA
|
||||
</a>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue