mirror of
https://github.com/grafana/grafana.git
synced 2025-08-02 03:02:18 +08:00
Provisioning: Always show list page (#103246)
This commit is contained in:
@ -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}
|
||||
|
@ -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} />)
|
||||
|
@ -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"
|
||||
},
|
||||
|
Reference in New Issue
Block a user