Provisioning: Always show list page (#103246)

This commit is contained in:
Alex Khomenko
2025-04-02 21:51:14 +03:00
committed by GitHub
parent 88d54892bd
commit 147ae64136
3 changed files with 18 additions and 83 deletions

View File

@ -7,24 +7,16 @@ import { useDeletecollectionRepositoryMutation, useGetFrontendSettingsQuery } fr
import { Page } from 'app/core/components/Page/Page';
import { t, Trans } from 'app/core/internationalization';
import { FilesView } from './File/FilesView';
import GettingStarted from './GettingStarted/GettingStarted';
import GettingStartedPage from './GettingStarted/GettingStartedPage';
import { RepositoryActions } from './Repository/RepositoryActions';
import { RepositoryOverview } from './Repository/RepositoryOverview';
import { RepositoryResources } from './Repository/RepositoryResources';
import { FolderRepositoryList } from './Shared/FolderRepositoryList';
import { useRepositoryList } from './hooks';
import { checkSyncSettings } from './utils/checkSyncSettings';
const appEvents = getAppEvents();
enum TabSelection {
Overview = 'overview',
Resources = 'resources',
Files = 'files',
GettingStarted = 'getting-started',
Repositories = 'repositories',
GettingStarted = 'getting-started',
}
export default function HomePage() {
@ -32,38 +24,9 @@ export default function HomePage() {
const settings = useGetFrontendSettingsQuery();
const [deleteAll, deleteAllResult] = useDeletecollectionRepositoryMutation();
const [showDeleteModal, setShowDeleteModal] = useState(false);
const { instanceConnected } = checkSyncSettings(items);
const [activeTab, setActiveTab] = useState<TabSelection>(
instanceConnected ? TabSelection.Overview : TabSelection.Repositories
);
const [activeTab, setActiveTab] = useState<TabSelection>(TabSelection.Repositories);
const connectedTabInfo = useMemo(
() => [
{
value: TabSelection.Overview,
label: t('provisioning.home-page.tab-overview', 'Overview'),
title: t('provisioning.home-page.tab-overview-title', 'Repository overview'),
},
{
value: TabSelection.Resources,
label: t('provisioning.home-page.tab-resources', 'Resources'),
title: t('provisioning.home-page.tab-resources-title', 'Resources saved in Grafana database'),
},
{
value: TabSelection.Files,
label: t('provisioning.home-page.tab-files', 'Files'),
title: t('provisioning.home-page.tab-files-title', 'The raw file list from the repository'),
},
{
value: TabSelection.GettingStarted,
label: t('provisioning.home-page.tab-getting-started', 'Getting started'),
title: t('provisioning.home-page.tab-getting-started-title', 'Getting started'),
},
],
[]
);
const disconnectedTabInfo = useMemo(
const tabInfo = useMemo(
() => [
{
value: TabSelection.Repositories,
@ -88,10 +51,6 @@ export default function HomePage() {
}
}, [deleteAllResult.isSuccess]);
useEffect(() => {
setActiveTab(instanceConnected ? TabSelection.Overview : TabSelection.Repositories);
}, [instanceConnected]);
// Early return for onboarding
if (!items?.length && !isLoading) {
return <GettingStartedPage items={items ?? []} />;
@ -103,29 +62,9 @@ export default function HomePage() {
};
const renderTabContent = () => {
if (!instanceConnected) {
switch (activeTab) {
case TabSelection.Repositories:
return <FolderRepositoryList items={items ?? []} />;
case TabSelection.GettingStarted:
return <GettingStarted items={items ?? []} />;
default:
return null;
}
}
const repo = items?.[0];
if (!repo) {
return null;
}
switch (activeTab) {
case TabSelection.Overview:
return <RepositoryOverview repo={repo} />;
case TabSelection.Resources:
return <RepositoryResources repo={repo} />;
case TabSelection.Files:
return <FilesView repo={repo} />;
case TabSelection.Repositories:
return <FolderRepositoryList items={items ?? []} />;
case TabSelection.GettingStarted:
return <GettingStarted items={items ?? []} />;
default:
@ -137,7 +76,6 @@ export default function HomePage() {
<Page
navId="provisioning"
subTitle={t('provisioning.home-page.subtitle', 'View and manage your configured repositories')}
actions={instanceConnected && items?.length ? <RepositoryActions repository={items[0]} /> : undefined}
>
<Page.Contents isLoading={isLoading}>
{settings.data?.legacyStorage && (
@ -174,7 +112,7 @@ export default function HomePage() {
/>
<Stack direction="column" gap={2}>
<TabsBar>
{(instanceConnected ? connectedTabInfo : disconnectedTabInfo).map((t) => (
{tabInfo.map((t) => (
<Tab
key={t.value}
label={t.label}

View File

@ -5,6 +5,7 @@ import { Repository } from 'app/api/clients/provisioning';
import { t, Trans } from 'app/core/internationalization';
import { RepositoryCard } from '../Repository/RepositoryCard';
import { checkSyncSettings } from '../utils/checkSyncSettings';
import { ConnectRepositoryButton } from './ConnectRepositoryButton';
@ -15,17 +16,19 @@ interface Props {
export function FolderRepositoryList({ items }: Props) {
const [query, setQuery] = useState('');
const filteredItems = items.filter((item) => item.metadata?.name?.includes(query));
const instanceProvisioned = checkSyncSettings(items);
return (
<Stack direction={'column'} gap={3}>
<Stack gap={2}>
<FilterInput
placeholder={t('provisioning.folder-repository-list.placeholder-search', 'Search')}
value={query}
onChange={setQuery}
/>
<ConnectRepositoryButton items={items} />
</Stack>
{!instanceProvisioned && (
<Stack gap={2}>
<FilterInput
placeholder={t('provisioning.folder-repository-list.placeholder-search', 'Search')}
value={query}
onChange={setQuery}
/>
<ConnectRepositoryButton items={items} />
</Stack>
)}
<Stack direction={'column'}>
{filteredItems.length ? (
filteredItems.map((item) => <RepositoryCard key={item.metadata?.name} repository={item} />)

View File

@ -5001,16 +5001,10 @@
"remove-all-configured-repositories": "Remove all configured repositories",
"subtitle": "View and manage your configured repositories",
"success-all-repositories-deleted": "All configured repositories deleted",
"tab-files": "Files",
"tab-files-title": "The raw file list from the repository",
"tab-getting-started": "Getting started",
"tab-getting-started-title": "Getting started",
"tab-overview": "Overview",
"tab-overview-title": "Repository overview",
"tab-repositories": "Repositories",
"tab-repositories-title": "List of repositories",
"tab-resources": "Resources",
"tab-resources-title": "Resources saved in Grafana database",
"title-delete-all-configured-repositories": "Delete all configured repositories",
"title-legacy-storage-detected": "Legacy storage detected"
},