implement ui feature flags and pipelines and secrets skeleton pages

This commit is contained in:
Dan Wilson 2023-08-01 16:27:57 +01:00
parent f58fa8c676
commit 02060ea4a7
12 changed files with 115 additions and 1 deletions

View File

@ -37,6 +37,8 @@ export interface CODERoutes {
toCODESpaceAccessControl: (args: Required<Pick<CODEProps, 'space'>>) => string toCODESpaceAccessControl: (args: Required<Pick<CODEProps, 'space'>>) => string
toCODESpaceSettings: (args: Required<Pick<CODEProps, 'space'>>) => string toCODESpaceSettings: (args: Required<Pick<CODEProps, 'space'>>) => string
toCODEPipelines: (args: Required<Pick<CODEProps, 'space'>>) => string
toCODESecrets: (args: Required<Pick<CODEProps, 'space'>>) => string
toCODEGlobalSettings: () => string toCODEGlobalSettings: () => string
toCODEUsers: () => string toCODEUsers: () => string
@ -72,6 +74,8 @@ export const routes: CODERoutes = {
toCODESpaceAccessControl: ({ space }) => `/access-control/${space}`, toCODESpaceAccessControl: ({ space }) => `/access-control/${space}`,
toCODESpaceSettings: ({ space }) => `/settings/${space}`, toCODESpaceSettings: ({ space }) => `/settings/${space}`,
toCODEPipelines: ({ space }) => `/pipelines/${space}`,
toCODESecrets: ({ space }) => `/secrets/${space}`,
toCODEGlobalSettings: () => '/settings', toCODEGlobalSettings: () => '/settings',
toCODEUsers: () => '/users', toCODEUsers: () => '/users',

View File

@ -5,6 +5,8 @@ import { SignUp } from 'pages/SignUp/SignUp'
import Repository from 'pages/Repository/Repository' import Repository from 'pages/Repository/Repository'
import { routes, pathProps } from 'RouteDefinitions' import { routes, pathProps } from 'RouteDefinitions'
import RepositoriesListing from 'pages/RepositoriesListing/RepositoriesListing' import RepositoriesListing from 'pages/RepositoriesListing/RepositoriesListing'
import PipelineList from 'pages/PipelineList/PipelineList'
import SecretList from 'pages/SecretList/SecretList'
import { LayoutWithSideNav, LayoutWithoutSideNav } from 'layouts/layout' import { LayoutWithSideNav, LayoutWithoutSideNav } from 'layouts/layout'
import RepositoryFileEdit from 'pages/RepositoryFileEdit/RepositoryFileEdit' import RepositoryFileEdit from 'pages/RepositoryFileEdit/RepositoryFileEdit'
import RepositoryCommits from 'pages/RepositoryCommits/RepositoryCommits' import RepositoryCommits from 'pages/RepositoryCommits/RepositoryCommits'
@ -25,11 +27,14 @@ import ChangePassword from 'pages/ChangePassword/ChangePassword'
import SpaceAccessControl from 'pages/SpaceAccessControl/SpaceAccessControl' import SpaceAccessControl from 'pages/SpaceAccessControl/SpaceAccessControl'
import SpaceSettings from 'pages/SpaceSettings/SpaceSettings' import SpaceSettings from 'pages/SpaceSettings/SpaceSettings'
import { useStrings } from 'framework/strings' import { useStrings } from 'framework/strings'
import { useFeatureFlag } from 'hooks/useFeatureFlag'
export const RouteDestinations: React.FC = React.memo(function RouteDestinations() { export const RouteDestinations: React.FC = React.memo(function RouteDestinations() {
const { getString } = useStrings() const { getString } = useStrings()
const repoPath = `${pathProps.space}/${pathProps.repoName}` const repoPath = `${pathProps.space}/${pathProps.repoName}`
const { OPEN_SOURCE_PIPELINES, OPEN_SOURCE_SECRETS } = useFeatureFlag()
return ( return (
<BrowserRouter> <BrowserRouter>
<Switch> <Switch>
@ -143,12 +148,28 @@ export const RouteDestinations: React.FC = React.memo(function RouteDestinations
</LayoutWithSideNav> </LayoutWithSideNav>
</Route> </Route>
<Route path={routes.toCODERepositories({ space: pathProps.space })} exact> <Route path={routes.toCODERepositories({ space: pathProps.space })}>
<LayoutWithSideNav title={getString('pageTitle.repositories')}> <LayoutWithSideNav title={getString('pageTitle.repositories')}>
<RepositoriesListing /> <RepositoriesListing />
</LayoutWithSideNav> </LayoutWithSideNav>
</Route> </Route>
{OPEN_SOURCE_PIPELINES && (
<Route path={routes.toCODEPipelines({ space: pathProps.space })} exact>
<LayoutWithSideNav title={getString('pageTitle.pipelines')}>
<PipelineList />
</LayoutWithSideNav>
</Route>
)}
{OPEN_SOURCE_SECRETS && (
<Route path={routes.toCODESecrets({ space: pathProps.space })} exact>
<LayoutWithSideNav title={getString('pageTitle.secrets')}>
<SecretList />
</LayoutWithSideNav>
</Route>
)}
<Route <Route
path={routes.toCODECommit({ path={routes.toCODECommit({
repoPath, repoPath,

View File

@ -277,12 +277,14 @@ export interface StringsMap {
'pageTitle.createWebhook': string 'pageTitle.createWebhook': string
'pageTitle.editFile': string 'pageTitle.editFile': string
'pageTitle.home': string 'pageTitle.home': string
'pageTitle.pipelines': string
'pageTitle.pullRequest': string 'pageTitle.pullRequest': string
'pageTitle.pullRequests': string 'pageTitle.pullRequests': string
'pageTitle.register': string 'pageTitle.register': string
'pageTitle.repositories': string 'pageTitle.repositories': string
'pageTitle.repository': string 'pageTitle.repository': string
'pageTitle.repositorySettings': string 'pageTitle.repositorySettings': string
'pageTitle.secrets': string
'pageTitle.signin': string 'pageTitle.signin': string
'pageTitle.spaceSettings': string 'pageTitle.spaceSettings': string
'pageTitle.tags': string 'pageTitle.tags': string

View File

@ -0,0 +1,8 @@
// temp file to hide open source pipelines and secrets - can be extended if needs be
const featureFlags = {
OPEN_SOURCE_PIPELINES: false,
OPEN_SOURCE_SECRETS: false
}
export const useFeatureFlag = (): Record<keyof typeof featureFlags, boolean> => featureFlags

View File

@ -90,6 +90,8 @@ pageTitle:
users: Users users: Users
userProfile: User Profile userProfile: User Profile
changePassword: Change Password changePassword: Change Password
pipelines: Pipelines
secrets: Secrets
repos: repos:
name: Repo Name name: Repo Name
data: Repo Data data: Repo Data

View File

@ -7,6 +7,7 @@ import { useStrings } from 'framework/strings'
import { routes } from 'RouteDefinitions' import { routes } from 'RouteDefinitions'
import type { TypesSpace } from 'services/code' import type { TypesSpace } from 'services/code'
import { SpaceSelector } from 'components/SpaceSelector/SpaceSelector' import { SpaceSelector } from 'components/SpaceSelector/SpaceSelector'
import { useFeatureFlag } from 'hooks/useFeatureFlag'
import { NavMenuItem } from './NavMenuItem' import { NavMenuItem } from './NavMenuItem'
import css from './DefaultMenu.module.scss' import css from './DefaultMenu.module.scss'
@ -22,6 +23,8 @@ export const DefaultMenu: React.FC = () => {
[routeMatch] [routeMatch]
) )
const { OPEN_SOURCE_PIPELINES, OPEN_SOURCE_SECRETS } = useFeatureFlag()
return ( return (
<Container className={css.main}> <Container className={css.main}>
<Layout.Vertical spacing="small"> <Layout.Vertical spacing="small">
@ -125,6 +128,28 @@ export const DefaultMenu: React.FC = () => {
</Container> </Container>
</Render> </Render>
{OPEN_SOURCE_PIPELINES && (
<Render when={selectedSpace}>
{/* icon is placeholder */}
<NavMenuItem
icon="pipeline"
label={getString('pageTitle.pipelines')}
to={routes.toCODEPipelines({ space: selectedSpace?.path as string })}
/>
</Render>
)}
{OPEN_SOURCE_SECRETS && (
<Render when={selectedSpace}>
{/* icon is placeholder */}
<NavMenuItem
icon="lock"
label={getString('pageTitle.secrets')}
to={routes.toCODESecrets({ space: selectedSpace?.path as string })}
/>
</Render>
)}
<Render when={selectedSpace}> <Render when={selectedSpace}>
<NavMenuItem <NavMenuItem
icon="nav-project" icon="nav-project"

View File

@ -0,0 +1,4 @@
.main {
min-height: var(--page-min-height, 100%);
background-color: var(--primary-bg) !important;
}

View File

@ -0,0 +1,6 @@
/* eslint-disable */
// this is an auto-generated file
declare const styles: {
readonly main: string
}
export default styles

View File

@ -0,0 +1,16 @@
import React from 'react'
import { Container, PageHeader } from '@harness/uicore'
import { useStrings } from 'framework/strings'
import css from './PipelineList.module.scss'
const PipelineList = () => {
const { getString } = useStrings()
return (
<Container className={css.main}>
<PageHeader title={getString('pageTitle.pipelines')} />
</Container>
)
}
export default PipelineList

View File

@ -0,0 +1,4 @@
.main {
min-height: var(--page-min-height, 100%);
background-color: var(--primary-bg) !important;
}

View File

@ -0,0 +1,6 @@
/* eslint-disable */
// this is an auto-generated file
declare const styles: {
readonly main: string
}
export default styles

View File

@ -0,0 +1,16 @@
import React from 'react'
import { Container, PageHeader } from '@harness/uicore'
import { useStrings } from 'framework/strings'
import css from './SecretList.module.scss'
const PipelineList = () => {
const { getString } = useStrings()
return (
<Container className={css.main}>
<PageHeader title={getString('pageTitle.secrets')} />
</Container>
)
}
export default PipelineList