Skip to content

Commit 95f91eb

Browse files
author
Laurie T. Malau
committed
[dashboard] Personal Access Token empty page
1 parent b110f7b commit 95f91eb

File tree

7 files changed

+60
-2
lines changed

7 files changed

+60
-2
lines changed

components/dashboard/src/App.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
settingsPathVariables,
3737
settingsPathSSHKeys,
3838
usagePathMain,
39+
settingsPathPersonalAccessTokens,
3940
} from "./settings/settings.routes";
4041
import {
4142
projectsPathInstallGitHubApp,
@@ -54,6 +55,7 @@ import { BlockedRepositories } from "./admin/BlockedRepositories";
5455
import { AppNotifications } from "./AppNotifications";
5556
import { publicApiTeamsToProtocol, teamsService } from "./service/public-api";
5657
import { FeatureFlagContext } from "./contexts/FeatureFlagContext";
58+
import PersonalAccessTokens from "./settings/PersonalAccessTokens";
5759

5860
const Setup = React.lazy(() => import(/* webpackPrefetch: true */ "./Setup"));
5961
const Workspaces = React.lazy(() => import(/* webpackPrefetch: true */ "./workspaces/Workspaces"));
@@ -395,6 +397,7 @@ function App() {
395397
<Route path={settingsPathNotifications} exact component={Notifications} />
396398
<Route path={settingsPathBilling} exact component={Billing} />
397399
<Route path={settingsPathPlans} exact component={Plans} />
400+
<Route path={settingsPathPersonalAccessTokens} exact component={PersonalAccessTokens} />
398401
<Route path={settingsPathVariables} exact component={EnvironmentVariables} />
399402
<Route path={settingsPathSSHKeys} exact component={SSHKeys} />
400403
<Route path={settingsPathPreferences} exact component={Preferences} />

components/dashboard/src/Menu.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ export default function Menu() {
113113
"keys",
114114
"integrations",
115115
"preferences",
116+
"personal-tokens",
116117
]);
117118
const isAdminUI = inResource(window.location.pathname, ["admin"]);
118119

components/dashboard/src/contexts/FeatureFlagContext.tsx

+5
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ const FeatureFlagContext = createContext<{
2020
showUsageView: boolean;
2121
showUseLastSuccessfulPrebuild: boolean;
2222
usePublicApiTeamsService: boolean;
23+
enablePersonalAccessTokens: boolean;
2324
}>({
2425
showPersistentVolumeClaimUI: false,
2526
showUsageView: false,
2627
showUseLastSuccessfulPrebuild: false,
2728
usePublicApiTeamsService: false,
29+
enablePersonalAccessTokens: false,
2830
});
2931

3032
const FeatureFlagContextProvider: React.FC = ({ children }) => {
@@ -37,6 +39,7 @@ const FeatureFlagContextProvider: React.FC = ({ children }) => {
3739
const [showUsageView, setShowUsageView] = useState<boolean>(false);
3840
const [showUseLastSuccessfulPrebuild, setShowUseLastSuccessfulPrebuild] = useState<boolean>(false);
3941
const [usePublicApiTeamsService, setUsePublicApiTeamsService] = useState<boolean>(false);
42+
const [enablePersonalAccessTokens, setPersonalAccessTokensEnabled] = useState<boolean>(false);
4043

4144
useEffect(() => {
4245
if (!user) return;
@@ -46,6 +49,7 @@ const FeatureFlagContextProvider: React.FC = ({ children }) => {
4649
usage_view: { defaultValue: false, setter: setShowUsageView },
4750
showUseLastSuccessfulPrebuild: { defaultValue: false, setter: setShowUseLastSuccessfulPrebuild },
4851
publicApiExperimentalTeamsService: { defaultValue: false, setter: setUsePublicApiTeamsService },
52+
personalAccessTokensEnabled: { defaultValue: false, setter: setPersonalAccessTokensEnabled },
4953
};
5054
for (const [flagName, config] of Object.entries(featureFlags)) {
5155
if (teams) {
@@ -83,6 +87,7 @@ const FeatureFlagContextProvider: React.FC = ({ children }) => {
8387
showUsageView,
8488
showUseLastSuccessfulPrebuild,
8589
usePublicApiTeamsService,
90+
enablePersonalAccessTokens,
8691
}}
8792
>
8893
{children}

components/dashboard/src/settings/PageWithSettingsSubMenu.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import { useContext } from "react";
88
import { PageWithSubMenu } from "../components/PageWithSubMenu";
9+
import { FeatureFlagContext } from "../contexts/FeatureFlagContext";
910
import { UserContext } from "../user-context";
1011
import getSettingsMenu from "./settings-menu";
1112

@@ -17,9 +18,14 @@ export interface PageWithAdminSubMenuProps {
1718

1819
export function PageWithSettingsSubMenu({ title, subtitle, children }: PageWithAdminSubMenuProps) {
1920
const { userBillingMode } = useContext(UserContext);
21+
const { enablePersonalAccessTokens } = useContext(FeatureFlagContext);
2022

2123
return (
22-
<PageWithSubMenu subMenu={getSettingsMenu({ userBillingMode })} title={title} subtitle={subtitle}>
24+
<PageWithSubMenu
25+
subMenu={getSettingsMenu({ userBillingMode, enablePersonalAccessTokens })}
26+
title={title}
27+
subtitle={subtitle}
28+
>
2329
{children}
2430
</PageWithSubMenu>
2531
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3+
* Licensed under the GNU Affero General Public License (AGPL).
4+
* See License-AGPL.txt in the project root for license information.
5+
*/
6+
7+
import { useContext } from "react";
8+
import { Redirect } from "react-router";
9+
import { FeatureFlagContext } from "../contexts/FeatureFlagContext";
10+
import { PageWithSettingsSubMenu } from "./PageWithSettingsSubMenu";
11+
12+
function PersonalAccessTokens() {
13+
const { enablePersonalAccessTokens } = useContext(FeatureFlagContext);
14+
15+
if (!enablePersonalAccessTokens) {
16+
return <Redirect to="/" />;
17+
}
18+
19+
return (
20+
<div>
21+
<PageWithSettingsSubMenu
22+
title="Preferences"
23+
subtitle="Manage your Personal Access Tokens to access the Gitpod API."
24+
children={undefined}
25+
></PageWithSettingsSubMenu>
26+
</div>
27+
);
28+
}
29+
30+
export default PersonalAccessTokens;

components/dashboard/src/settings/settings-menu.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ import {
1616
settingsPathTeams,
1717
settingsPathVariables,
1818
settingsPathSSHKeys,
19+
settingsPathPersonalAccessTokens,
1920
} from "./settings.routes";
2021

21-
export default function getSettingsMenu(params: { userBillingMode?: BillingMode }) {
22+
export default function getSettingsMenu(params: {
23+
userBillingMode?: BillingMode;
24+
enablePersonalAccessTokens?: boolean;
25+
}) {
2226
return [
2327
{
2428
title: "Account",
@@ -29,6 +33,14 @@ export default function getSettingsMenu(params: { userBillingMode?: BillingMode
2933
link: [settingsPathNotifications],
3034
},
3135
...renderBillingMenuEntries(params.userBillingMode),
36+
...(params.enablePersonalAccessTokens
37+
? [
38+
{
39+
title: "Personal Access Tokens",
40+
link: [settingsPathPersonalAccessTokens],
41+
},
42+
]
43+
: []),
3244
{
3345
title: "Variables",
3446
link: [settingsPathVariables],

components/dashboard/src/settings/settings.routes.ts

+1
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ export const settingsPathTeamsJoin = [settingsPathTeams, "join"].join("/");
1919
export const settingsPathTeamsNew = [settingsPathTeams, "new"].join("/");
2020

2121
export const settingsPathVariables = "/variables";
22+
export const settingsPathPersonalAccessTokens = "/personal-tokens";
2223

2324
export const settingsPathSSHKeys = "/keys";

0 commit comments

Comments
 (0)