{results.map(repo => (
@@ -244,30 +241,29 @@ const RepositoriesPage = () => {
}, [showCreateRepositoryModal, setShowCreateRepositoryModal, loading, err, response, createRepo]);
return (
-
-
- {showActionsBar &&
-
-
-
-
-
-
- setPrefix(event.target.value)}
- />
-
-
-
-
-
-
-
- }
+
+ {showActionsBar &&
+
+
+
+
+
+
+ setPrefix(event.target.value)}
+ />
+
+
+
+
+
+
+
+ }
{
createRepoError={createRepoError}
/>
- {
- setShowCreateRepositoryModal(false);
- setCreateRepoError(null);
- }}
- show={showCreateRepositoryModal}
- error={createRepoError}
- onSubmit={(repo) => createRepo(repo, true)}
- samlpleRepoChecked={sampleRepoChecked}
- inProgress={creatingRepo}
- />
+ {
+ setShowCreateRepositoryModal(false);
+ setCreateRepoError(null);
+ }}
+ show={showCreateRepositoryModal}
+ error={createRepoError}
+ onSubmit={(repo) => createRepo(repo, true)}
+ samlpleRepoChecked={sampleRepoChecked}
+ inProgress={creatingRepo}
+ />
-
-
+
);
}
-const RepositoriesIndex = () => {
- return (
-
- } />
- } />
-
- );
-};
-
-export default RepositoriesIndex;
+export default RepositoriesPage;
diff --git a/webui/src/pages/repositories/repository/actions/index.jsx b/webui/src/pages/repositories/repository/actions/index.jsx
index c370c1bc89a..c1c9dab93c5 100644
--- a/webui/src/pages/repositories/repository/actions/index.jsx
+++ b/webui/src/pages/repositories/repository/actions/index.jsx
@@ -1,5 +1,5 @@
-import React, {useState} from "react";
-import {RepositoryPageLayout} from "../../../../lib/components/repository/layout";
+import React, {useEffect, useState} from "react";
+import { useOutletContext } from "react-router-dom";
import {
ActionGroup,
ActionsBar,
@@ -18,10 +18,8 @@ import {
import {Table} from "react-bootstrap";
import {Paginator} from "../../../../lib/components/pagination";
import {ActionStatusIcon} from "../../../../lib/components/repository/actions";
-import {Route, Routes} from "react-router-dom";
import {Link} from "../../../../lib/components/nav";
import {useRouter} from "../../../../lib/hooks/router";
-import RepositoryActionPage from "./run";
import Alert from "react-bootstrap/Alert";
import {RepoError} from "../error";
@@ -211,21 +209,10 @@ const ActionsContainer = () => {
);
};
-const RepositoryActionsPage = () => {
- return (
-
-
-
- );
-};
-
-const RepositoryActionsIndexPage = () => {
- return (
-
- } />
- } />
-
- );
+export const RepositoryActionsPage = () => {
+ const [setActivePage] = useOutletContext();
+ useEffect(() => setActivePage("actions"), [setActivePage]);
+ return
;
};
-export default RepositoryActionsIndexPage;
+export default RepositoryActionsPage;
diff --git a/webui/src/pages/repositories/repository/branches.jsx b/webui/src/pages/repositories/repository/branches.jsx
index 92a0b571de2..4dbc5d37c0b 100644
--- a/webui/src/pages/repositories/repository/branches.jsx
+++ b/webui/src/pages/repositories/repository/branches.jsx
@@ -1,5 +1,5 @@
-import React, {useMemo, useRef, useState} from "react";
-
+import React, {useEffect, useMemo, useRef, useState} from "react";
+import { useOutletContext } from "react-router-dom";
import {
GitBranchIcon,
LinkIcon,
@@ -19,7 +19,6 @@ import {
AlertError, LinkButton,
Loading, PrefixSearchWidget, RefreshButton
} from "../../../lib/components/controls";
-import {RepositoryPageLayout} from "../../../lib/components/repository/layout";
import {useRefs} from "../../../lib/hooks/repo";
import {useAPIWithPagination} from "../../../lib/hooks/api";
import {Paginator} from "../../../lib/components/pagination";
@@ -278,11 +277,9 @@ const BranchesContainer = () => {
const RepositoryBranchesPage = () => {
- return (
-
-
-
- )
+ const [setActivePage] = useOutletContext();
+ useEffect(() => setActivePage("branches"), [setActivePage]);
+ return
;
}
export default RepositoryBranchesPage;
diff --git a/webui/src/pages/repositories/repository/changes.jsx b/webui/src/pages/repositories/repository/changes.jsx
index 1723fb0d11f..ddaf1090c2d 100644
--- a/webui/src/pages/repositories/repository/changes.jsx
+++ b/webui/src/pages/repositories/repository/changes.jsx
@@ -1,5 +1,5 @@
-import React, {useRef, useState} from "react";
-
+import React, {useEffect, useRef, useState} from "react";
+import { useOutletContext } from "react-router-dom";
import {GitCommitIcon, HistoryIcon,} from "@primer/octicons-react";
import Modal from "react-bootstrap/Modal";
@@ -14,7 +14,6 @@ import {useRefs} from "../../../lib/hooks/repo";
import {ConfirmationModal} from "../../../lib/components/modals";
import {ActionGroup, ActionsBar, AlertError, Loading, RefreshButton} from "../../../lib/components/controls";
import RefDropdown from "../../../lib/components/repository/refDropdown";
-import {RepositoryPageLayout} from "../../../lib/components/repository/layout";
import {formatAlertText} from "../../../lib/components/repository/errors";
import {ChangesTreeContainer, MetadataFields} from "../../../lib/components/repository/changes";
import {useRouter} from "../../../lib/hooks/router";
@@ -257,11 +256,9 @@ const ChangesContainer = () => {
}
const RepositoryChangesPage = () => {
- return (
-
-
-
- )
+ const [setActivePage] = useOutletContext();
+ useEffect(() => setActivePage('changes'), [setActivePage]);
+ return
;
}
-export default RepositoryChangesPage;
+export default RepositoryChangesPage;
\ No newline at end of file
diff --git a/webui/src/pages/repositories/repository/commits/commit/index.jsx b/webui/src/pages/repositories/repository/commits/commit/index.jsx
index 832556d2c3c..24faa52d739 100644
--- a/webui/src/pages/repositories/repository/commits/commit/index.jsx
+++ b/webui/src/pages/repositories/repository/commits/commit/index.jsx
@@ -1,5 +1,4 @@
-import React, {useState} from "react";
-import {RepositoryPageLayout} from "../../../../../lib/components/repository/layout";
+import React, {useEffect, useState} from "react";
import {AlertError, Loading} from "../../../../../lib/components/controls";
import {useRefs} from "../../../../../lib/hooks/repo";
import {useAPI, useAPIWithPagination} from "../../../../../lib/hooks/api";
@@ -9,6 +8,7 @@ import {useRouter} from "../../../../../lib/hooks/router";
import {URINavigator} from "../../../../../lib/components/repository/tree";
import {appendMoreResults} from "../../changes";
import {CommitInfoCard} from "../../../../../lib/components/repository/commits";
+import { useOutletContext } from "react-router-dom";
@@ -113,11 +113,10 @@ const CommitContainer = () => {
}
const RepositoryCommitPage = () => {
- return (
-
-
-
- )
+ const [setActivePage] = useOutletContext();
+ useEffect(() => setActivePage('commits'), [setActivePage]);
+
+ return
;
}
export default RepositoryCommitPage;
diff --git a/webui/src/pages/repositories/repository/commits/index.jsx b/webui/src/pages/repositories/repository/commits/index.jsx
index 87985ddfbaf..479a02b06cc 100644
--- a/webui/src/pages/repositories/repository/commits/index.jsx
+++ b/webui/src/pages/repositories/repository/commits/index.jsx
@@ -1,5 +1,5 @@
-import React, {useState} from "react";
-
+import React, {useEffect, useState} from "react";
+import { useOutletContext } from "react-router-dom";
import dayjs from "dayjs";
import {BrowserIcon, LinkIcon, PackageIcon, PlayIcon} from "@primer/octicons-react";
@@ -16,15 +16,12 @@ import {
LinkButton,
Loading, RefreshButton
} from "../../../../lib/components/controls";
-import {RepositoryPageLayout} from "../../../../lib/components/repository/layout";
import {useRefs} from "../../../../lib/hooks/repo";
import {useAPIWithPagination} from "../../../../lib/hooks/api";
import {Paginator} from "../../../../lib/components/pagination";
import RefDropdown from "../../../../lib/components/repository/refDropdown";
import {Link} from "../../../../lib/components/nav";
import {useRouter} from "../../../../lib/hooks/router";
-import {Route, Routes} from "react-router-dom";
-import RepositoryCommitPage from "./commit";
import {RepoError} from "../error";
@@ -159,20 +156,9 @@ const CommitsContainer = () => {
const RepositoryCommitsPage = () => {
- return (
-
-
-
- );
+ const [setActivePage] = useOutletContext();
+ useEffect(() => setActivePage('commits'), [setActivePage]);
+ return
;
};
-const RepositoryCommitsIndexPage = () => {
- return (
-
- } />
- } />
-
- )
-}
-
-export default RepositoryCommitsIndexPage;
+export default RepositoryCommitsPage;
diff --git a/webui/src/pages/repositories/repository/compare.jsx b/webui/src/pages/repositories/repository/compare.jsx
index 2a350853977..0f95c669c1f 100644
--- a/webui/src/pages/repositories/repository/compare.jsx
+++ b/webui/src/pages/repositories/repository/compare.jsx
@@ -1,6 +1,5 @@
-import React, {useCallback, useRef, useState} from "react";
-
-import {RepositoryPageLayout} from "../../../lib/components/repository/layout";
+import React, {useCallback, useEffect, useState, useRef} from "react";
+import { useOutletContext } from "react-router-dom";
import {ActionGroup, ActionsBar, AlertError, Loading, RefreshButton} from "../../../lib/components/controls";
import {useRefs} from "../../../lib/hooks/repo";
import RefDropdown from "../../../lib/components/repository/refDropdown";
@@ -330,11 +329,9 @@ const CompareContainer = () => {
};
const RepositoryComparePage = () => {
- return (
-
-
-
- );
+ const [setActivePage] = useOutletContext();
+ useEffect(() => setActivePage("compare"), [setActivePage]);
+ return
;
};
export default RepositoryComparePage;
diff --git a/webui/src/pages/repositories/repository/index.jsx b/webui/src/pages/repositories/repository/index.jsx
deleted file mode 100644
index abe95d9816a..00000000000
--- a/webui/src/pages/repositories/repository/index.jsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import React from "react";
-
-import { Navigate, Route, Routes } from "react-router-dom";
-import RepositoryObjectsPage from "./objects";
-import RepositoryChangesPage from "./changes";
-import RepositoryBranchesPage from "./branches";
-import RepositoryTagsPage from "./tags";
-import RepositoryComparePage from "./compare";
-import RepositoryCommitsIndexPage from "./commits";
-import RepositoryActionsIndexPage from "./actions";
-import RepositoryGeneralSettingsPage from "./settings/general";
-import RepositoryRetentionPage from "./settings/retention";
-import RepositorySettingsBranchesPage from "./settings/branches";
-import RepositoryObjectsViewPage from "./objectViewer";
-import { RefContextProvider } from "../../../lib/hooks/repo";
-import { StorageConfigProvider } from "../../../lib/hooks/storageConfig";
-
-const RepositoryPage = () => {
- return (
-
-
-
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- }
- />
- }
- />
- }
- />
- }
- />
- } />
-
-
-
- );
-};
-
-export default RepositoryPage;
diff --git a/webui/src/pages/repositories/repository/objectViewer.tsx b/webui/src/pages/repositories/repository/objectViewer.tsx
index 5767d55ff28..9f2ebcda5fb 100644
--- a/webui/src/pages/repositories/repository/objectViewer.tsx
+++ b/webui/src/pages/repositories/repository/objectViewer.tsx
@@ -11,7 +11,6 @@ import { ObjectRenderer } from "./fileRenderers";
import { AlertError } from "../../../lib/components/controls";
import { URINavigator } from "../../../lib/components/repository/tree";
import { RefTypeBranch } from "../../../constants";
-import { RepositoryPageLayout } from "../../../lib/components/repository/layout";
import { RefContextProvider } from "../../../lib/hooks/repo";
import { useStorageConfig } from "../../../lib/hooks/storageConfig";
import { linkToPath } from "../../../lib/api";
@@ -101,9 +100,7 @@ const FileObjectsViewerPage = () => {
return (
-
{content}
-
);
};
diff --git a/webui/src/pages/repositories/repository/objects.jsx b/webui/src/pages/repositories/repository/objects.jsx
index ae1783d98b4..7f3d4c8b719 100644
--- a/webui/src/pages/repositories/repository/objects.jsx
+++ b/webui/src/pages/repositories/repository/objects.jsx
@@ -1,7 +1,7 @@
import React, { useCallback, useEffect, useRef, useState } from "react";
import dayjs from "dayjs";
+import { useOutletContext } from "react-router-dom";
import {CheckboxIcon, UploadIcon, XIcon} from "@primer/octicons-react";
-import { RepositoryPageLayout } from "../../../lib/components/repository/layout";
import RefDropdown from "../../../lib/components/repository/refDropdown";
import {
ActionGroup,
@@ -775,13 +775,10 @@ const ObjectsBrowser = ({ config, configError }) => {
const RepositoryObjectsPage = () => {
const config = useStorageConfig();
+ const [setActivePage] = useOutletContext();
+ useEffect(() => setActivePage("objects"), [setActivePage]);
- return (
-
- {config.loading && }
-
-
- );
+ return
;
};
export default RepositoryObjectsPage;
diff --git a/webui/src/pages/repositories/repository/settings/branches.jsx b/webui/src/pages/repositories/repository/settings/branches.jsx
index 5f93e841c54..fcfdc83cc37 100644
--- a/webui/src/pages/repositories/repository/settings/branches.jsx
+++ b/webui/src/pages/repositories/repository/settings/branches.jsx
@@ -1,9 +1,8 @@
-import React, {useRef, useState} from "react";
-import {RepositoryPageLayout} from "../../../../lib/components/repository/layout";
+import React, {useEffect, useRef, useState} from "react";
+import { useOutletContext } from "react-router-dom";
import {AlertError, Loading, RefreshButton} from "../../../../lib/components/controls";
import {useRefs} from "../../../../lib/hooks/repo";
import Card from "react-bootstrap/Card";
-import {SettingsLayout} from "./layout";
import {Button, ListGroup, Row} from "react-bootstrap";
import Col from "react-bootstrap/Col";
import {useAPI} from "../../../../lib/hooks/api";
@@ -134,13 +133,9 @@ const CreateRuleModal = ({show, hideFn, onSuccess, repoID, currentRulesResponse}
}
const RepositorySettingsBranchesPage = () => {
- return (
-
-
-
-
-
- );
+ const [setActiveTab] = useOutletContext();
+ useEffect(() => setActiveTab("branches"), [setActiveTab]);
+ return
;
};
export default RepositorySettingsBranchesPage;
diff --git a/webui/src/pages/repositories/repository/settings/general.jsx b/webui/src/pages/repositories/repository/settings/general.jsx
index 73dc2863002..3e30d402f00 100644
--- a/webui/src/pages/repositories/repository/settings/general.jsx
+++ b/webui/src/pages/repositories/repository/settings/general.jsx
@@ -1,5 +1,5 @@
-import React, {useRef, useState} from "react";
-
+import React, {useEffect, useRef, useState} from "react";
+import { useOutletContext } from "react-router-dom";
import {useRefs} from "../../../../lib/hooks/repo";
import Container from "react-bootstrap/Container";
import Row from "react-bootstrap/Row";
@@ -11,8 +11,6 @@ import {AlertError, Loading} from "../../../../lib/components/controls";
import Modal from "react-bootstrap/Modal";
import {repositories} from "../../../../lib/api";
import {useRouter} from "../../../../lib/hooks/router";
-import {SettingsLayout} from "./layout";
-import {RepositoryPageLayout} from "../../../../lib/components/repository/layout";
const DeleteRepositoryModal = ({repo, show, onSubmit, onCancel}) => {
const [isDisabled, setIsDisabled] = useState(true);
@@ -119,13 +117,9 @@ const SettingsContainer = () => {
const RepositoryGeneralSettingsPage = () => {
- return (
-
-
-
-
-
- )
+ const [setActiveTab] = useOutletContext();
+ useEffect(() => setActiveTab("general"), [setActiveTab]);
+ return
;
}
diff --git a/webui/src/pages/repositories/repository/settings/layout.jsx b/webui/src/pages/repositories/repository/settings/layout.jsx
index ee469b03309..2359f1cdf96 100644
--- a/webui/src/pages/repositories/repository/settings/layout.jsx
+++ b/webui/src/pages/repositories/repository/settings/layout.jsx
@@ -1,5 +1,5 @@
-import React from "react";
-
+import React, {useEffect, useState} from "react";
+import { Outlet, useOutletContext } from "react-router-dom";
import Container from "react-bootstrap/Container";
import Row from "react-bootstrap/Row";
import Col from "react-bootstrap/Col";
@@ -11,8 +11,13 @@ import {Loading} from "../../../../lib/components/controls";
import {RepoError} from "../error";
-export const SettingsLayout = ({ children, activeTab }) => {
+export const SettingsLayout = () => {
+ const [activeTab, setActiveTab] = useState("general");
const { repo, loading, error} = useRefs();
+ const [setActivePage] = useOutletContext();
+ useEffect(() => {
+ setActivePage("settings");
+ }, [setActivePage]);
if (loading) return
;
if (error) return
;
const repoId = repo.id
@@ -44,10 +49,9 @@ export const SettingsLayout = ({ children, activeTab }) => {
- {children}
+
);
};
-
diff --git a/webui/src/pages/repositories/repository/settings/retention.jsx b/webui/src/pages/repositories/repository/settings/retention.jsx
index 061858bd5d6..7903bf23ccb 100644
--- a/webui/src/pages/repositories/repository/settings/retention.jsx
+++ b/webui/src/pages/repositories/repository/settings/retention.jsx
@@ -1,5 +1,5 @@
-import React, {useState} from "react";
-import {RepositoryPageLayout} from "../../../../lib/components/repository/layout";
+import React, {useEffect, useState} from "react";
+import { useOutletContext } from "react-router-dom";
import {
ActionGroup,
ActionsBar,
@@ -14,7 +14,6 @@ import {useAPI} from "../../../../lib/hooks/api";
import {useRefs} from "../../../../lib/hooks/repo";
import Card from "react-bootstrap/Card";
import Table from "react-bootstrap/Table";
-import {SettingsLayout} from "./layout";
import {PolicyEditor} from "../../../../lib/components/policy";
import Alert from "react-bootstrap/Alert";
@@ -168,13 +167,9 @@ const RetentionContainer = () => {
}
const RepositoryRetentionPage = () => {
- return (
-
-
-
-
-
- );
+ const [setActiveTab] = useOutletContext();
+ useEffect(() => setActiveTab("retention"), [setActiveTab]);
+ return ;
};
export default RepositoryRetentionPage;
diff --git a/webui/src/pages/repositories/repository/tags.jsx b/webui/src/pages/repositories/repository/tags.jsx
index dd060cf0ea4..112559d615a 100644
--- a/webui/src/pages/repositories/repository/tags.jsx
+++ b/webui/src/pages/repositories/repository/tags.jsx
@@ -1,5 +1,5 @@
-import React, { useMemo, useRef, useState } from "react";
-
+import React, { useEffect, useMemo, useRef, useState } from "react";
+import { useOutletContext } from "react-router-dom";
import {
TagIcon,
LinkIcon,
@@ -19,7 +19,6 @@ import {
AlertError, LinkButton,
Loading, PrefixSearchWidget, RefreshButton
} from "../../../lib/components/controls";
-import { RepositoryPageLayout } from "../../../lib/components/repository/layout";
import { useRefs } from "../../../lib/hooks/repo";
import { useAPIWithPagination } from "../../../lib/hooks/api";
import { Paginator } from "../../../lib/components/pagination";
@@ -255,11 +254,9 @@ const TagsContainer = () => {
const RepositoryTagsPage = () => {
- return (
-
-
-
- )
+ const [setActivePage] = useOutletContext();
+ useEffect(() => setActivePage("tags"), [setActivePage]);
+ return ;
}
export default RepositoryTagsPage;
diff --git a/webui/src/pages/setup/index.jsx b/webui/src/pages/setup/index.jsx
index 2e35754c3f7..c475c48a889 100644
--- a/webui/src/pages/setup/index.jsx
+++ b/webui/src/pages/setup/index.jsx
@@ -1,5 +1,4 @@
import React, {useCallback, useEffect} from "react";
-import Layout from "../../lib/components/layout";
import {useState} from "react";
import {API_ENDPOINT, setup, SETUP_STATE_NOT_INITIALIZED, SETUP_STATE_INITIALIZED} from "../../lib/api";
import {useRouter} from "../../lib/hooks/router";
@@ -61,28 +60,24 @@ const SetupContents = () => {
if (setupData && setupData.access_key_id) {
return (
-
-
-
+
);
}
const notInitialized = currentStep !== SETUP_STATE_INITIALIZED;
if (notInitialized || commPrefsMissing) {
return (
-
-
-
+
);
}