diff --git a/public/i18n/en/common.json b/public/i18n/en/common.json
index 37696af99..3e7c7de2d 100644
--- a/public/i18n/en/common.json
+++ b/public/i18n/en/common.json
@@ -1,7 +1,6 @@
{
"App": "App",
"Apps": "Apps",
- "Build": "Build",
"BUTTON_NEW_RESOURCE": "Create {{model}}",
"CREATE_MODEL": "Create a {{model}}",
"CREATE_MODEL_FOR_TEAM": "Create a {{model}} for team {{teamName}}",
@@ -78,8 +77,6 @@
"TITLE_PROJECTS": "Projects",
"TITLE_PROJECT": "Project details",
"DELETE_PROJECT_WARNING": "Deleting this project will permanently remove all associated collections (build, workload, service) and their data. This action cannot be undone.",
- "TITLE_BUILDS": "Builds",
- "TITLE_BUILD": "Build details",
"Team_plural": "Teams",
"Teams": "Teams",
"Workload": "Workload",
@@ -90,7 +87,6 @@
"User": "User",
"User_plural": "Users",
"Project_plural": "Projects",
- "Build_plural": "Builds",
"WELCOME_DASHBOARD": "Team <1>{{teamName}}1> dashboard",
"add item": "add item",
"admin": "admin",
@@ -101,8 +97,12 @@
"enabled": "enabled",
"help": "help",
"submit": "submit",
- "CodeRepository": "Code Repository",
- "CodeRepository_plural": "Code Repositories",
- "TITLE_CODEREPOSITORY": "Code Repository Details",
- "TITLE_CODEREPOSITORIES": "Code Repositories - {{scope}}"
+ "Container-image": "Container Image",
+ "Container-image_plural": "Container Images",
+ "TITLE_CONTAINER_IMAGE": "Container image details",
+ "TITLE_CONTAINER_IMAGES": "Container images - {{scope}}",
+ "Code-repository": "Code Repository",
+ "Code-repository_plural": "Code Repositories",
+ "TITLE_CODE_REPOSITORY": "Code repository details",
+ "TITLE_CODE_REPOSITORIES": "Code repositories - {{scope}}"
}
diff --git a/public/logos/buildpacks_logo.svg b/public/logos/buildpacks_logo.svg
new file mode 100644
index 000000000..a6b6c064f
--- /dev/null
+++ b/public/logos/buildpacks_logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/logos/docker_logo.svg b/public/logos/docker_logo.svg
new file mode 100644
index 000000000..eba6cc41e
--- /dev/null
+++ b/public/logos/docker_logo.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/App.tsx b/src/App.tsx
index 3c72d96c8..84c3709bb 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -7,7 +7,8 @@ import cookie from 'cookie'
import Backups from 'pages/Backups'
import Netpols from 'pages/Netpols'
import Workloads from 'pages/Workloads'
-import Builds from 'pages/Builds'
+import Build from 'pages/builds/create-edit'
+import Builds from 'pages/builds/overview'
import OtomiApp from 'pages/App'
import Apps from 'pages/Apps'
import Cluster from 'pages/Cluster'
@@ -35,7 +36,6 @@ import { store } from 'redux/store'
import { IoProvider } from 'socket.io-react-hook'
import Backup from 'pages/Backup'
import Netpol from 'pages/Netpol'
-import Build from 'pages/Build'
import LoadingScreen from 'components/LoadingScreen'
import Dashboard from 'pages/Dashboard'
import Users from 'pages/Users'
@@ -51,9 +51,8 @@ import Policy from 'pages/Policy'
import Maintenance from 'pages/Maintenance'
import PrivateRoute from 'components/AuthzRoute'
import Logout from 'pages/Logout'
-// TODO: Uncomment the following line(s) when the new build page is ready
-// import CodeRepository from 'pages/code-repositories/create-edit'
-// import CodeRepositories from 'pages/code-repositories/overview'
+import CodeRepository from 'pages/code-repositories/create-edit'
+import CodeRepositories from 'pages/code-repositories/overview'
import { HttpErrorBadRequest } from './utils/error'
import { NotistackProvider, SnackbarUtilsConfigurator } from './utils/snack'
@@ -88,28 +87,27 @@ function App() {
- {/* TODO: Uncomment the following line(s) when the new build page is ready */}
- {/*
*/}
+ />
@@ -150,7 +148,7 @@ function App() {
-
+
@@ -164,7 +162,7 @@ function App() {
-
+
- {/* */}
-
-
+
+
diff --git a/src/components/Breadcrumb/Crumbs.tsx b/src/components/Breadcrumb/Crumbs.tsx
index 07a21a54c..c039a7227 100644
--- a/src/components/Breadcrumb/Crumbs.tsx
+++ b/src/components/Breadcrumb/Crumbs.tsx
@@ -56,7 +56,9 @@ export const Crumbs = React.memo((props: Props) => {
data-qa-link-text
data-testid='link-text'
>
- {crumbOverrides && override ? override.label ?? crumb : crumb}
+ {crumbOverrides && override
+ ? override.label.replaceAll('-', ' ') ?? crumb.replaceAll('-', ' ')
+ : crumb.replaceAll('-', ' ')}
/
diff --git a/src/components/Breadcrumb/FinalCrumb.styles.tsx b/src/components/Breadcrumb/FinalCrumb.styles.tsx
index 359bab3a8..ccd07f688 100644
--- a/src/components/Breadcrumb/FinalCrumb.styles.tsx
+++ b/src/components/Breadcrumb/FinalCrumb.styles.tsx
@@ -19,7 +19,7 @@ export const StyledEditableText = styled(EditableText, {
export const StyledH1Header = styled(H1Header, { label: 'StyledH1Header' })(({ theme }) => ({
color: theme.palette.cl.breadCrumb.lastCrumb,
- fontWeight: '400',
+ fontWeight: '600',
fontSize: '1.125rem',
textTransform: 'capitalize',
[theme.breakpoints.up('lg')]: {
diff --git a/src/components/Builds.tsx b/src/components/Builds.tsx
index 88caf4b00..049cc68b0 100644
--- a/src/components/Builds.tsx
+++ b/src/components/Builds.tsx
@@ -3,7 +3,7 @@ import React, { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { Link } from 'react-router-dom'
import { GetTeamBuildsApiResponse } from 'redux/otomiApi'
-import { Box, Tooltip } from '@mui/material'
+import { Box, Tooltip, Typography } from '@mui/material'
import ContentCopyIcon from '@mui/icons-material/ContentCopy'
import DoneIcon from '@mui/icons-material/Done'
import useStatus from 'hooks/useStatus'
@@ -177,5 +177,19 @@ export default function ({ builds, teamId }: Props): React.ReactElement {
if (!appsEnabled.harbor)
return
- return
+ const customButtonText = () => (
+
+ Add Build
+
+ )
+
+ return (
+
+ )
}
diff --git a/src/components/DeleteButton.tsx b/src/components/DeleteButton.tsx
index a4a898138..1a015d298 100644
--- a/src/components/DeleteButton.tsx
+++ b/src/components/DeleteButton.tsx
@@ -2,8 +2,20 @@ import DeleteIcon from '@mui/icons-material/Delete'
import { LoadingButton } from '@mui/lab'
import React, { useState } from 'react'
import { useTranslation } from 'react-i18next'
+import { darken, styled } from '@mui/material'
import DeleteDialog from './DeleteDialog'
+const StyledDeleteButton = styled(LoadingButton)(({ theme }) => ({
+ float: 'right',
+ textTransform: 'capitalize',
+ marginLeft: theme.spacing(2),
+ color: 'white',
+ backgroundColor: theme.palette.cm.red,
+ '&:hover': {
+ backgroundColor: darken(theme.palette.cm.red as string, 0.2),
+ },
+}))
+
interface DeleteButtonProps {
disabled?: boolean
loading?: boolean
@@ -17,18 +29,16 @@ export default function ({ loading, disabled, sx, ...other }: DeleteButtonProps)
const [dialogOpen, setDialogOpen] = useState(false)
const { t } = useTranslation()
// END HOOKS
-
const onButtonClick = () => {
setDialogOpen(true)
}
-
const onDialogCancel = () => {
setDialogOpen(false)
}
return (
<>
{dialogOpen && }
- }
onClick={onButtonClick}
@@ -37,7 +47,7 @@ export default function ({ loading, disabled, sx, ...other }: DeleteButtonProps)
sx={{ ...sx }}
>
{t('delete')}
-
+
>
)
}
diff --git a/src/components/DeleteDialog.tsx b/src/components/DeleteDialog.tsx
index d84d44597..31601915e 100644
--- a/src/components/DeleteDialog.tsx
+++ b/src/components/DeleteDialog.tsx
@@ -6,9 +6,31 @@ import DialogContentText from '@mui/material/DialogContentText'
import DialogTitle from '@mui/material/DialogTitle'
import TextField from '@mui/material/TextField'
import React, { useState } from 'react'
+import { darken, styled } from '@mui/material'
import { useTranslation } from 'react-i18next'
import { LoadingButton } from '@mui/lab'
+const StyledDeleteButton = styled(LoadingButton)(({ theme }) => ({
+ float: 'right',
+ textTransform: 'capitalize',
+ marginLeft: theme.spacing(2),
+ border: 'none',
+ color: 'white',
+ backgroundColor: theme.palette.cm.red,
+ '&:hover': {
+ border: 'none',
+ backgroundColor: darken(theme.palette.cm.red as string, 0.2),
+ },
+ '&.Mui-disabled': {
+ backgroundColor: theme.palette.grey[400],
+ border: 'none',
+ color: theme.palette.common.white,
+ '& .MuiSvgIcon-root': {
+ color: theme.palette.common.white,
+ },
+ },
+}))
+
interface DeleteDialogProps {
onCancel: () => void
onDelete: () => void
@@ -28,16 +50,18 @@ export default function ({
}: DeleteDialogProps): React.ReactElement {
const [buttonDisabled, setButtonDisabled] = useState(true)
const { t } = useTranslation()
- // END HOOKS
+
const onTextFieldChange = (event) => {
if (event.target.value === resourceName) setButtonDisabled(false)
else setButtonDisabled(true)
}
+
const dialogTitle = t('DELETE_RESOURCE', { resourceType, resourceName })
const dialogContent = t('DELETE_RESOURCE_CONFIRMATION', { resourceType, resourceName })
+
return (
-