diff --git a/webapp/packages/core-app/public/icons/icons.svg b/webapp/packages/core-app/public/icons/icons.svg
index 8bd9e9de6f..d617d669ec 100644
--- a/webapp/packages/core-app/public/icons/icons.svg
+++ b/webapp/packages/core-app/public/icons/icons.svg
@@ -299,4 +299,11 @@
+
+
+
+
+
+
+
diff --git a/webapp/packages/core-blocks/src/FormControls/InputFieldNew.tsx b/webapp/packages/core-blocks/src/FormControls/InputFieldNew.tsx
index fb2fe67919..55f2a57fc6 100644
--- a/webapp/packages/core-blocks/src/FormControls/InputFieldNew.tsx
+++ b/webapp/packages/core-blocks/src/FormControls/InputFieldNew.tsx
@@ -65,6 +65,7 @@ type BaseProps = Omit, 'onChange' |
mod?: 'surface';
ref?: React.Ref;
style?: ComponentStyle;
+ onCustomCopy?: () => void;
};
type ControlledProps = BaseProps & {
@@ -112,6 +113,7 @@ export const InputFieldNew: InputFieldType = observer(function InputFieldNew({
tiny,
autoHide,
onChange,
+ onCustomCopy,
...rest
}: ControlledProps | ObjectProps, ref: React.Ref) {
const [passwordRevealed, setPasswordRevealed] = useState(false);
@@ -183,6 +185,11 @@ export const InputFieldNew: InputFieldType = observer(function InputFieldNew({
/>
)}
+ {onCustomCopy && (
+
+
+
+ )}
{description && (
diff --git a/webapp/packages/core-utils/src/copyToClipboard.ts b/webapp/packages/core-utils/src/copyToClipboard.ts
index 5ae1c37cc4..6763612c75 100644
--- a/webapp/packages/core-utils/src/copyToClipboard.ts
+++ b/webapp/packages/core-utils/src/copyToClipboard.ts
@@ -23,6 +23,6 @@ export function copyToClipboard(data: string): void {
document.body.removeChild(shadowElement);
if (activeElement instanceof HTMLElement) {
- activeElement.focus();
+ activeElement.focus({ preventScroll: true });
}
}
diff --git a/webapp/packages/plugin-authentication/src/Administration/IdentityProviders/Options/AuthConfigurationOptions.tsx b/webapp/packages/plugin-authentication/src/Administration/IdentityProviders/Options/AuthConfigurationOptions.tsx
index 131a818b0a..b29f48d6ba 100644
--- a/webapp/packages/plugin-authentication/src/Administration/IdentityProviders/Options/AuthConfigurationOptions.tsx
+++ b/webapp/packages/plugin-authentication/src/Administration/IdentityProviders/Options/AuthConfigurationOptions.tsx
@@ -14,7 +14,7 @@ import { AuthConfigurationParametersResource, AuthProvidersResource } from '@clo
import {
BASE_CONTAINERS_STYLES, ColoredContainer, ComboboxNew, FieldCheckboxNew, Group, GroupTitle,
InputFieldNew, Link, ObjectPropertyInfoFormNew, SubmittingForm, TabContainerPanelComponent,
- TextareaNew, useMapResource, useObjectPropertyCategories
+ TextareaNew, useClipboard, useMapResource, useObjectPropertyCategories
} from '@cloudbeaver/core-blocks';
import { useTranslate } from '@cloudbeaver/core-localization';
import { AuthProviderConfigurationParametersFragment, CachedMapAllKey } from '@cloudbeaver/core-sdk';
@@ -37,6 +37,7 @@ export const AuthConfigurationOptions: TabContainerPanelComponent(null);
const translate = useTranslate();
+ const copy = useClipboard();
const style = useStyles(BASE_CONTAINERS_STYLES, styles);
const providers = useMapResource(AuthConfigurationOptions, AuthProvidersResource, CachedMapAllKey);
@@ -156,7 +157,9 @@ export const AuthConfigurationOptions: TabContainerPanelComponent copy(state.config.signInLink!, true)}
>
Sign in
@@ -165,7 +168,9 @@ export const AuthConfigurationOptions: TabContainerPanelComponent copy(state.config.signOutLink!, true)}
>
Sign out