From 250ca7985ff8567ce314f34220ea331448ef0da9 Mon Sep 17 00:00:00 2001 From: Alex Khomenko Date: Tue, 13 Jan 2026 08:25:40 +0200 Subject: [PATCH] Provisioning: Add Connections page (#116060) * Provisioning: Add connections page * Provisioning: Add connections form * Provisioning: Add connections form * Update fields * Fix generated name * Update connection name * Add edit page * error handling * Form validation * Add Connections button * Cleanup * Extract ConnectionFormData type * Add list test and separate empty states * Add form test * Update tests * i18n * Cleanup * Use SecretTextArea from grafana-ui * Fix breadcrumbs * tweaks * Add missing URL * Switch to ShowConfirmModalEvent * i18n * redirect to list on success * add timeout * Fix tags invalidation --- .../SecretTextArea/SecretTextArea.tsx | 6 +- .../clients/provisioning/v0alpha1/index.ts | 125 ++++++-- .../provisioning/Config/ConfigForm.tsx | 19 +- .../Connection/ConnectionForm.test.tsx | 277 ++++++++++++++++++ .../Connection/ConnectionForm.tsx | 199 +++++++++++++ .../Connection/ConnectionFormPage.tsx | 59 ++++ .../Connection/ConnectionList.test.tsx | 165 +++++++++++ .../Connection/ConnectionList.tsx | 51 ++++ .../Connection/ConnectionListItem.tsx | 49 ++++ .../Connection/ConnectionStatusBadge.tsx | 42 +++ .../Connection/ConnectionsPage.tsx | 55 ++++ .../Connection/DeleteConnectionButton.tsx | 53 ++++ .../Repository/DeleteRepositoryButton.tsx | 182 ++++++------ .../Repository/RepositoryActions.tsx | 5 +- public/app/features/provisioning/constants.ts | 1 + .../provisioning/hooks/useConnectionList.ts | 17 ++ .../hooks/useCreateOrUpdateConnection.ts | 40 +++ public/app/features/provisioning/types.ts | 11 + .../provisioning/utils/getFormErrors.ts | 19 +- .../app/features/provisioning/utils/routes.ts | 22 +- public/locales/en-US/grafana.json | 47 +++ 21 files changed, 1301 insertions(+), 143 deletions(-) create mode 100644 public/app/features/provisioning/Connection/ConnectionForm.test.tsx create mode 100644 public/app/features/provisioning/Connection/ConnectionForm.tsx create mode 100644 public/app/features/provisioning/Connection/ConnectionFormPage.tsx create mode 100644 public/app/features/provisioning/Connection/ConnectionList.test.tsx create mode 100644 public/app/features/provisioning/Connection/ConnectionList.tsx create mode 100644 public/app/features/provisioning/Connection/ConnectionListItem.tsx create mode 100644 public/app/features/provisioning/Connection/ConnectionStatusBadge.tsx create mode 100644 public/app/features/provisioning/Connection/ConnectionsPage.tsx create mode 100644 public/app/features/provisioning/Connection/DeleteConnectionButton.tsx create mode 100644 public/app/features/provisioning/hooks/useConnectionList.ts create mode 100644 public/app/features/provisioning/hooks/useCreateOrUpdateConnection.ts diff --git a/packages/grafana-ui/src/components/SecretTextArea/SecretTextArea.tsx b/packages/grafana-ui/src/components/SecretTextArea/SecretTextArea.tsx index a10ad157120..5b919c05ec2 100644 --- a/packages/grafana-ui/src/components/SecretTextArea/SecretTextArea.tsx +++ b/packages/grafana-ui/src/components/SecretTextArea/SecretTextArea.tsx @@ -14,6 +14,8 @@ export type Props = React.ComponentProps & { isConfigured: boolean; /** Called when the user clicks on the "Reset" button in order to clear the secret */ onReset: () => void; + /** If true, the text area will grow to fill available width. */ + grow?: boolean; }; export const CONFIGURED_TEXT = 'configured'; @@ -35,11 +37,11 @@ const getStyles = (theme: GrafanaTheme2) => { * * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-secrettextarea--docs */ -export const SecretTextArea = ({ isConfigured, onReset, ...props }: Props) => { +export const SecretTextArea = ({ isConfigured, onReset, grow, ...props }: Props) => { const styles = useStyles2(getStyles); return ( - + {!isConfigured &&