-
Notifications
You must be signed in to change notification settings - Fork 3
Feat: Complete Kubectl Dialog Across Project,Workspace,Delete #15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 8 commits
d0fffe5
b72dbf4
b44f4e2
73fe44d
e548ffe
24f0413
38de779
b0c7deb
bce63fe
ddb62dd
95a1e11
a37d028
c1c13e4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -49,9 +49,9 @@ | |
"messageHeader": "Message", | ||
"reasonHeader": "Reason", | ||
"transitionHeader": "Last transition time" | ||
}, | ||
}, | ||
"CopyKubeconfigButton": { | ||
"copiedMessage": "Copied to Clipboard", | ||
"copiedMessage": "Copied to Clipboard", | ||
"failedMessage": "Failed to copy, Error:", | ||
"menuDownload": "Download", | ||
"menuCopy": "Copy to clipboard" | ||
|
@@ -106,7 +106,6 @@ | |
"errorMessage": "useCopyButton must be used within a CopyButtonProvider" | ||
}, | ||
"CreateProjectWorkspaceDialog": { | ||
"learnButton": "Learn how to do this in code", | ||
"createButton": "Create", | ||
"cancelButton": "Cancel", | ||
"chargingTargetLabel": "Charging Target", | ||
|
@@ -139,6 +138,79 @@ | |
"copiedMessage": "Copied To Clipboard", | ||
"failedMessage": "Failed to copy" | ||
}, | ||
"DeleteWorkspaceDialog": { | ||
"title": "Delete a Workspace", | ||
"introSection1": "The below instructions will help you delete the workspace \"{{workspaceName}}\" from project namespace \"{{projectNamespace}}\" using kubectl.", | ||
"introSection2": "Remember that this action is <bold1>irreversible</bold1> and all resources within the workspace will be <bold2>permanently deleted</bold2>.", | ||
"mainCommandDescription": "Run this command to delete the workspace:", | ||
"verificationCommandDescription": "To verify the workspace has been deleted, run:" | ||
}, | ||
"DeleteMcpDialog": { | ||
"title": "Delete a Managed Control Plane", | ||
"introSection1": "The below will help you delete the Managed Control Plane \"{{mcpName}}\" from workspace \"{{workspaceNamespace}}\" using kubectl.", | ||
"introSection2": "Remember that this action is <bold1>irreversible</bold1> and all resources managed by this control plane will be <bold2>permanently deleted</bold2>.", | ||
"annotateCommand": "First, annotate the ManagedControlPlane to confirm deletion:", | ||
"deleteCommand": "Run this command to delete the Managed Control Plane:", | ||
"verificationCommandDescription": "To verify the MCP has been deleted, run:" | ||
}, | ||
"KubectlProjectDialog": { | ||
"title": "Create a Project", | ||
"introSection": "A Project is the starting point to our ManagedControlPlane offering. Projects are usually created for each Organization/Team or similar root setups.", | ||
"formFields": { | ||
"projectName": { | ||
"label": "Project Name", | ||
"placeholder": "Enter project name" | ||
}, | ||
"chargingTargetId": { | ||
"label": "BTP Global Account ID", | ||
"placeholder": "Enter your Global Account ID", | ||
"defaultValue": "<your-ga-id>" | ||
}, | ||
"userEmail": { | ||
"label": "User Email", | ||
"placeholder": "Enter your email address", | ||
"defaultValue": "<[email protected]>" | ||
} | ||
}, | ||
"mainCommandDescription": "Run this command to create a new project:", | ||
"resultCommandDescription": "To see the result of the project creation, run the below command:", | ||
"namespaceCommandDescription": "A namespace is automatically generated for your project:" | ||
}, | ||
"KubectlWorkspaceDialog": { | ||
"title": "Create a Workspace", | ||
"introSection": "Let's add a Workspace to our Project. We use workspaces to separate productive and non-productive ManagedControlPlanes.", | ||
"formFields": { | ||
"workspaceName": { | ||
"label": "Workspace Name", | ||
"placeholder": "Enter workspace name" | ||
}, | ||
"chargingTargetId": { | ||
"label": "BTP Global Account ID", | ||
"placeholder": "Enter your Global Account ID", | ||
"defaultValue": "<your-ga-id>" | ||
}, | ||
"userEmail": { | ||
"label": "User Email", | ||
"placeholder": "Enter your email address", | ||
"defaultValue": "<[email protected]>" | ||
} | ||
}, | ||
"mainCommandDescription": "Run this command to create a new workspace in your project:", | ||
"resultCommandDescription": "To see the result of the workspace creation, run the below command:" | ||
}, | ||
"KubectlBaseDialog": { | ||
"prerequisites": "Prerequisites", | ||
"prerequisitesText": "Make sure you have installed <bold1>kubectl</bold1> and the <bold2>kubelogin</bold2> plugin. We recommend using <bold3>krew</bold3> which is a plugin manager for kubectl.", | ||
"formFieldsNote": "<bold1>Important</bold1>: Before executing, modify the commands below:", | ||
"onboardingGuide": "You can also use our <link1>Onboarding Guide</link1> for more information." | ||
}, | ||
"CommonKubectl": { | ||
"emphasis": { | ||
"irreversible": "irreversible", | ||
"permanentlyDeleted": "permanently deleted" | ||
}, | ||
"learnButton": "Learn how to do this in code" | ||
}, | ||
"App": { | ||
"loading": "Loading..." | ||
}, | ||
|
@@ -160,4 +232,4 @@ | |
"userExists": "User with this email already exists!", | ||
"atLeastOneUser": "You need to have at least one member assigned." | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,13 +12,17 @@ import { | |
import { Member } from '../../lib/api/types/shared/members'; | ||
import { ErrorDialog, ErrorDialogHandle } from '../Shared/ErrorMessageBox.tsx'; | ||
|
||
import { FormEvent } from 'react'; | ||
import { KubectlInfoButton } from './KubectlCommandInfo/KubectlInfoButton.tsx'; | ||
import { KubectlWorkspaceDialog } from './KubectlCommandInfo/KubectlCreateWorkspaceDialog.tsx'; | ||
import { KubectlProjectDialog } from './KubectlCommandInfo/KubectlCreateProjectDialog.tsx'; | ||
|
||
import { EditMembers } from '../Members/EditMembers.tsx'; | ||
import ButtonDesign from '@ui5/webcomponents/dist/types/ButtonDesign.js'; | ||
import { useFrontendConfig } from '../../context/FrontendConfigContext.tsx'; | ||
// import { useFrontendConfig } from '../../context/FrontendConfigContext.tsx'; | ||
import { useTranslation } from 'react-i18next'; | ||
import { useDialog } from './UseDialog.tsx'; | ||
|
||
import { CreateDialogProps } from './CreateWorkspaceDialogContainer.tsx'; | ||
import { FormEvent } from 'react'; | ||
import { FieldErrors, UseFormRegister, UseFormSetValue } from 'react-hook-form'; | ||
|
||
export type OnCreatePayload = { | ||
|
@@ -38,6 +42,7 @@ export interface CreateProjectWorkspaceDialogProps { | |
register: UseFormRegister<CreateDialogProps>; | ||
errors: FieldErrors<CreateDialogProps>; | ||
setValue: UseFormSetValue<CreateDialogProps>; | ||
projectName?: string; | ||
} | ||
|
||
export function CreateProjectWorkspaceDialog({ | ||
|
@@ -50,10 +55,11 @@ export function CreateProjectWorkspaceDialog({ | |
register, | ||
errors, | ||
setValue, | ||
projectName, | ||
}: CreateProjectWorkspaceDialogProps) { | ||
const { links } = useFrontendConfig(); | ||
// const { links } = useFrontendConfig(); | ||
const { t } = useTranslation(); | ||
|
||
const kubectlDialog = useDialog(); | ||
return ( | ||
<> | ||
<Dialog | ||
|
@@ -65,24 +71,18 @@ export function CreateProjectWorkspaceDialog({ | |
<Bar | ||
design="Footer" | ||
endContent={ | ||
<> | ||
<Button | ||
design={ButtonDesign.Transparent} | ||
icon="sap-icon://question-mark" | ||
onClick={() => { | ||
window.open(links.COM_PAGE_GETTING_STARTED, '_blank'); | ||
}} | ||
> | ||
{t('CreateProjectWorkspaceDialog.learnButton')} | ||
</Button> | ||
<div | ||
style={{ display: 'flex', alignItems: 'center', gap: '8px' }} | ||
> | ||
<KubectlInfoButton onClick={kubectlDialog.open} /> | ||
<Button onClick={() => setIsOpen(false)}> | ||
{' '} | ||
{t('CreateProjectWorkspaceDialog.cancelButton')} | ||
</Button> | ||
<Button design="Emphasized" onClick={() => onCreate()}> | ||
{t('CreateProjectWorkspaceDialog.createButton')} | ||
</Button> | ||
</> | ||
</div> | ||
} | ||
/> | ||
} | ||
|
@@ -95,6 +95,15 @@ export function CreateProjectWorkspaceDialog({ | |
setValue={setValue} | ||
/> | ||
</Dialog> | ||
<KubectlWorkspaceDialog | ||
project={projectName} | ||
isOpen={kubectlDialog.isOpen && !!projectName} | ||
onClose={kubectlDialog.close} | ||
/> | ||
<KubectlProjectDialog | ||
isOpen={kubectlDialog.isOpen && !projectName} | ||
onClose={kubectlDialog.close} | ||
/> | ||
|
||
<ErrorDialog ref={errorDialogRef} /> | ||
</> | ||
); | ||
|
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,30 @@ | ||||||
import { DeleteMcpDialog } from '../KubectlDeleteMcpDialog'; | ||||||
import { KubectlInfoButton } from '../KubectlInfoButton'; | ||||||
import { useDialog } from '../../UseDialog'; | ||||||
|
||||||
interface KubectlDeleteMcpProps { | ||||||
projectName?: string; | ||||||
|
projectName?: string; | |
projectName: string; |
(also adjust ?
further down the line)
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import { DeleteWorkspaceDialog } from '../KubectlDeleteWorkspaceDialog'; | ||
import { KubectlInfoButton } from '../KubectlInfoButton'; | ||
import { useDialog } from '../../UseDialog'; | ||
|
||
interface KubectlDeleteWorkspaceProps { | ||
projectName?: string; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also here: Can’t we just assume that there’s always a |
||
resourceName: string; | ||
} | ||
|
||
export const KubectlDeleteWorkspace = ({ | ||
projectName, | ||
resourceName, | ||
}: KubectlDeleteWorkspaceProps) => { | ||
const infoDialog = useDialog(); | ||
|
||
return ( | ||
<> | ||
<KubectlInfoButton onClick={infoDialog.open} /> | ||
<DeleteWorkspaceDialog | ||
projectName={projectName} | ||
resourceName={resourceName} | ||
isOpen={infoDialog.isOpen} | ||
onClose={infoDialog.close} | ||
/> | ||
</> | ||
); | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Delete unused code
(Also further down)