import { useState } from 'react'; import { IoAdd } from 'react-icons/io5'; import { restoreDemoView } from '../../../../common/api/customViews'; import { maybeAxiosError } from '../../../../common/api/utils'; import Button from '../../../../common/components/buttons/Button'; import Info from '../../../../common/components/info/Info'; import ExternalLink from '../../../../common/components/link/external-link/ExternalLink'; import useCustomViews from '../../../../common/hooks-query/useCustomViews'; import * as Panel from '../../panel-utils/PanelUtils'; import CustomViewForm from './CustomViewForm'; import { customViewsDocs } from './customViews.utils'; import CustomViewsList from './CustomViewsList'; export default function CustomViews() { const { data, refetch, status } = useCustomViews(); const [isUploadOpen, setIsUploadOpen] = useState(false); const [actionError, setActionError] = useState(null); const hasDemoView = data.views.some((view) => view.slug === 'demo'); const handleUploadComplete = async () => { setIsUploadOpen(false); await refetch(); }; const handleRestoreDemo = async () => { try { setActionError(null); await restoreDemoView(); await refetch(); } catch (error) { setActionError(maybeAxiosError(error)); } }; return ( {isUploadOpen && setIsUploadOpen(false)} />} Custom views Upload one index.html per view to /external/<name>/. External imports are not allowed, include all assets inside the html file. See the docs {actionError && {actionError}} setIsUploadOpen(true)} onMutate={() => refetch()} onError={setActionError} /> ); }