mirror of
https://github.com/diced/zipline.git
synced 2025-12-05 20:40:12 -08:00
fix: faulty domains code + errorboundary
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
import { Container, Paper, Stack, Text, Title } from '@mantine/core';
|
||||
import { useRouteError } from 'react-router-dom';
|
||||
import FourOhFour from '../pages/404';
|
||||
|
||||
export default function GenericError({
|
||||
title,
|
||||
@@ -9,6 +11,10 @@ export default function GenericError({
|
||||
message?: string;
|
||||
details?: Record<string, any>;
|
||||
}) {
|
||||
const routeError: any = useRouteError();
|
||||
|
||||
if (routeError?.status === 404) return <FourOhFour />;
|
||||
|
||||
return (
|
||||
<Container my='lg'>
|
||||
<Stack gap='xs'>
|
||||
@@ -18,7 +24,7 @@ export default function GenericError({
|
||||
</Text>
|
||||
{details && (
|
||||
<Paper withBorder px={3} py={3}>
|
||||
<pre style={{ margin: 0 }}>{JSON.stringify(details, null, 2)}</pre>
|
||||
<pre style={{ margin: 0 }}>{JSON.stringify({ routeError, details }, null, 2)}</pre>
|
||||
</Paper>
|
||||
)}
|
||||
</Stack>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { useRouteError } from 'react-router-dom';
|
||||
import GenericError from './GenericError';
|
||||
|
||||
export default function RootErrorBoundary(props: Record<string, any>) {
|
||||
|
||||
@@ -3,14 +3,15 @@ import UploadFile from '@/components/pages/upload/File';
|
||||
import { type Response } from '@/lib/api/response';
|
||||
import { SafeConfig } from '@/lib/config/safe';
|
||||
import { Anchor, Center, Container, Text } from '@mantine/core';
|
||||
import { Link, Params, useLoaderData } from 'react-router-dom';
|
||||
import { data, Link, Params, useLoaderData } from 'react-router-dom';
|
||||
import useSWR from 'swr';
|
||||
|
||||
export async function loader({ params }: { params: Params<string> }) {
|
||||
const res = await fetch(`/api/server/folder/${params.id}?upload=true`);
|
||||
if (!res.ok) {
|
||||
throw new Response('Folder not found', { status: 404 });
|
||||
throw data('Folder not found', { status: 404 });
|
||||
}
|
||||
|
||||
return {
|
||||
folder: (await res.json()) as Response['/api/server/folder/[id]'],
|
||||
};
|
||||
|
||||
@@ -35,6 +35,15 @@ import { Link } from 'react-router-dom';
|
||||
import useSWR from 'swr';
|
||||
import { useShallow } from 'zustand/shallow';
|
||||
|
||||
type SettingsDomains = { settings?: { domains?: string[] }; domains?: string[] };
|
||||
|
||||
function checkDomains(domains?: unknown): string[] {
|
||||
if (!domains) return [];
|
||||
if (!Array.isArray(domains)) return [];
|
||||
|
||||
return domains;
|
||||
}
|
||||
|
||||
export default function UploadOptionsButton({ folder, numFiles }: { folder?: string; numFiles: number }) {
|
||||
const config = useConfig();
|
||||
|
||||
@@ -61,12 +70,17 @@ export default function UploadOptionsButton({ folder, numFiles }: { folder?: str
|
||||
const { data: folders } = useSWR<Extract<Response['/api/user/folders'], Folder[]>>(
|
||||
'/api/user/folders?noincl=true',
|
||||
);
|
||||
const { data: settingsData } = useSWR<Response['/api/server/settings']>('/api/server/settings');
|
||||
const { data: settingsData } = useSWR<SettingsDomains>(
|
||||
folder ? '/api/server/public' : '/api/server/settings',
|
||||
);
|
||||
|
||||
const combobox = useCombobox();
|
||||
const [folderSearch, setFolderSearch] = useState('');
|
||||
|
||||
const domains = Array.isArray(settingsData?.settings.domains) ? settingsData.settings.domains : [];
|
||||
const domains = folder
|
||||
? checkDomains(settingsData?.domains)
|
||||
: checkDomains(settingsData?.settings?.domains);
|
||||
|
||||
const domainOptions = [
|
||||
{ value: '', label: 'Default Domain' },
|
||||
...domains.map((domain) => ({
|
||||
|
||||
@@ -51,7 +51,6 @@ export const DATABASE_TO_PROP = {
|
||||
|
||||
invitesEnabled: 'invites.enabled',
|
||||
invitesLength: 'invites.length',
|
||||
domains: 'domains',
|
||||
|
||||
websiteTitle: 'website.title',
|
||||
websiteTitleLogo: 'website.titleLogo',
|
||||
@@ -61,6 +60,8 @@ export const DATABASE_TO_PROP = {
|
||||
websiteDefaultAvatar: 'website.defaultAvatar',
|
||||
websiteTos: 'website.tos',
|
||||
|
||||
domains: 'domains',
|
||||
|
||||
websiteThemeDefault: 'website.theme.default',
|
||||
websiteThemeDark: 'website.theme.dark',
|
||||
websiteThemeLight: 'website.theme.light',
|
||||
|
||||
@@ -75,6 +75,8 @@ export const ENVS = [
|
||||
env('features.versionChecking', 'FEATURES_VERSION_CHECKING', 'boolean', true),
|
||||
env('features.versionAPI', 'FEATURES_VERSION_API', 'string', true),
|
||||
|
||||
env('domains', 'DOMAINS', 'string[]', true),
|
||||
|
||||
env('invites.enabled', 'INVITES_ENABLED', 'boolean', true),
|
||||
env('invites.length', 'INVITES_LENGTH', 'number', true),
|
||||
|
||||
|
||||
@@ -164,6 +164,7 @@ export const schema = z.object({
|
||||
versionChecking: z.boolean().default(true),
|
||||
versionAPI: z.string().url().default('https://zipline-version.diced.sh/'),
|
||||
}),
|
||||
domains: z.array(z.string()).default([]),
|
||||
invites: z.object({
|
||||
enabled: z.boolean().default(true),
|
||||
length: z.number().default(8),
|
||||
|
||||
@@ -33,9 +33,11 @@ export type ApiServerPublicResponse = {
|
||||
tos?: string | null;
|
||||
files: {
|
||||
maxFileSize: string;
|
||||
defaultFormat: Config['files']['defaultFormat'];
|
||||
};
|
||||
chunks: Config['chunks'];
|
||||
firstSetup: boolean;
|
||||
domains?: string[];
|
||||
};
|
||||
|
||||
const logger = log('api').c('server').c('public');
|
||||
@@ -69,9 +71,11 @@ export default fastifyPlugin(
|
||||
},
|
||||
files: {
|
||||
maxFileSize: config.files.maxFileSize,
|
||||
defaultFormat: config.files.defaultFormat,
|
||||
},
|
||||
chunks: config.chunks,
|
||||
firstSetup: zipline.firstSetup,
|
||||
domains: config.domains,
|
||||
};
|
||||
|
||||
if (config.website.tos) {
|
||||
|
||||
Reference in New Issue
Block a user