diff --git a/redisinsight/ui/src/components/base/forms/FormField.tsx b/redisinsight/ui/src/components/base/forms/FormField.tsx
index 5c21b84509..265fd21cd4 100644
--- a/redisinsight/ui/src/components/base/forms/FormField.tsx
+++ b/redisinsight/ui/src/components/base/forms/FormField.tsx
@@ -1,16 +1,24 @@
import React, { ComponentProps } from 'react'
-import { FormField as RedisFormField, TooltipProvider } from '@redis-ui/components'
+import {
+ FormField as RedisFormField,
+ TooltipProvider,
+ LabelProps,
+} from '@redis-ui/components'
+
+export type RiInfoIconProps = LabelProps['infoIconProps']
export type RedisFormFieldProps = ComponentProps & {
- infoIconProps?: any
+ infoIconProps?: RiInfoIconProps
}
export function FormField(props: RedisFormFieldProps) {
// eslint-disable-next-line react/destructuring-assignment
if (props.infoIconProps) {
- return
-
-
+ return (
+
+
+
+ )
}
return
}
diff --git a/redisinsight/ui/src/components/divider/Divider.spec.tsx b/redisinsight/ui/src/components/divider/Divider.spec.tsx
index 1db4931603..9893551e5e 100644
--- a/redisinsight/ui/src/components/divider/Divider.spec.tsx
+++ b/redisinsight/ui/src/components/divider/Divider.spec.tsx
@@ -1,9 +1,9 @@
import React from 'react'
import { instance, mock } from 'ts-mockito'
import { render } from 'uiSrc/utils/test-utils'
-import Divider, { Props } from './Divider'
+import Divider, { DividerProps } from './Divider'
-const mockedProps = mock()
+const mockedProps = mock()
describe('Divider', () => {
it('should render', () => {
diff --git a/redisinsight/ui/src/components/divider/Divider.styles.ts b/redisinsight/ui/src/components/divider/Divider.styles.ts
new file mode 100644
index 0000000000..bd905a9e56
--- /dev/null
+++ b/redisinsight/ui/src/components/divider/Divider.styles.ts
@@ -0,0 +1,57 @@
+import { HTMLAttributes } from 'react'
+import styled, { css } from 'styled-components'
+
+export type DividerVariant = 'fullWidth' | 'half'
+export type DividerOrientation = 'horizontal' | 'vertical'
+
+const dividerStyles = {
+ orientation: {
+ horizontal: css`
+ width: 100%;
+ height: 1px;
+ `,
+ vertical: css`
+ width: 1px;
+ height: 100%;
+ `,
+ },
+ variant: {
+ fullWidth: {
+ horizontal: css``,
+ vertical: css``,
+ },
+ half: {
+ horizontal: css`
+ width: 50%;
+ `,
+ vertical: css`
+ height: 50%;
+ `,
+ },
+ },
+}
+
+export interface StyledDividerProps extends HTMLAttributes {
+ $color?: string
+ $orientation?: DividerOrientation
+ $variant?: DividerVariant
+}
+
+export const StyledDividerWrapper = styled.div>`
+ display: flex;
+ align-items: center;
+ justify-content: center;
+`
+
+export const StyledDivider = styled.hr`
+ border: none;
+ background-color: ${({
+ theme,
+ $color = theme.semantic.color.background.neutral500,
+ }) => $color};
+
+ ${({ $orientation = 'horizontal' }) =>
+ dividerStyles.orientation[$orientation]}
+ ${({ $variant = 'fullWidth', $orientation = 'horizontal' }) =>
+ dividerStyles.variant[$variant][$orientation]}
+`
diff --git a/redisinsight/ui/src/components/divider/Divider.tsx b/redisinsight/ui/src/components/divider/Divider.tsx
index 68129953cd..4c2bc0c67f 100644
--- a/redisinsight/ui/src/components/divider/Divider.tsx
+++ b/redisinsight/ui/src/components/divider/Divider.tsx
@@ -1,42 +1,33 @@
import React from 'react'
-import cx from 'classnames'
-import styles from './styles.module.scss'
+import {
+ StyledDividerWrapper,
+ StyledDivider,
+ DividerVariant,
+ DividerOrientation,
+} from './Divider.styles'
-export interface Props {
+export interface DividerProps {
+ orientation?: DividerOrientation
+ variant?: DividerVariant
color?: string
- colorVariable?: string
- orientation?: 'horizontal' | 'vertical'
- variant?: 'fullWidth' | 'middle' | 'half'
className?: string
- style?: any
}
const Divider = ({
orientation,
variant,
- className,
color,
- colorVariable,
+ className,
...props
-}: Props) => (
-
-
(
+
+
-
+
)
export default Divider
diff --git a/redisinsight/ui/src/components/divider/styles.module.scss b/redisinsight/ui/src/components/divider/styles.module.scss
deleted file mode 100644
index 43e89af5ca..0000000000
--- a/redisinsight/ui/src/components/divider/styles.module.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-.divider {
- display: flex;
- align-items: center;
- justify-content: center;
- hr {
- border: none;
- height: 1px;
- width: 100%;
- background-color: var(--tableLightestBorderColor)
- }
- &-vertical {
- height: auto;
- hr {
- height: 100%;
- width: 1px;
- }
- }
-
- &-middle {
- margin: 6px 12px;
- &.divider-vertical {
- margin: 12px 6px;
- }
- }
-
- &-half {
- hr {
- width: 50%;
- }
- &.divider-vertical {
- margin: 0 8px;
- hr {
- width: 1px;
- height: 50%;
- }
- }
- }
-}
-
diff --git a/redisinsight/ui/src/components/form-dialog/FormDialog.styles.ts b/redisinsight/ui/src/components/form-dialog/FormDialog.styles.ts
new file mode 100644
index 0000000000..0d1d2f65e2
--- /dev/null
+++ b/redisinsight/ui/src/components/form-dialog/FormDialog.styles.ts
@@ -0,0 +1,15 @@
+import styled from 'styled-components'
+import { Modal } from 'uiSrc/components/base/display/modal'
+
+export const StyledFormDialogContent = styled(Modal.Content.Compose)`
+ width: 900px;
+ height: 700px;
+
+ max-width: calc(100vw - 120px);
+ max-height: calc(100vh - 120px);
+`
+
+export const StyledFormDialogContentBody = styled(Modal.Content.Body)`
+ flex: 1;
+ min-height: 0;
+`
diff --git a/redisinsight/ui/src/components/form-dialog/FormDialog.tsx b/redisinsight/ui/src/components/form-dialog/FormDialog.tsx
index b35fa38eb6..186d9c74f6 100644
--- a/redisinsight/ui/src/components/form-dialog/FormDialog.tsx
+++ b/redisinsight/ui/src/components/form-dialog/FormDialog.tsx
@@ -1,10 +1,12 @@
import React from 'react'
-import cx from 'classnames'
import { Nullable } from 'uiSrc/utils'
import { CancelIcon } from 'uiSrc/components/base/icons'
import { Modal } from 'uiSrc/components/base/display'
-import styles from './styles.module.scss'
+import {
+ StyledFormDialogContent,
+ StyledFormDialogContentBody,
+} from './FormDialog.styles'
export interface Props {
isOpen: boolean
@@ -22,16 +24,16 @@ const FormDialog = (props: Props) => {
return (
-
{header}
-
+
{footer}
-
+
)
}
diff --git a/redisinsight/ui/src/components/form-dialog/styles.module.scss b/redisinsight/ui/src/components/form-dialog/styles.module.scss
deleted file mode 100644
index e537de63cc..0000000000
--- a/redisinsight/ui/src/components/form-dialog/styles.module.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-.modal {
- width: 900px !important;
- height: 700px !important;
-
- max-width: calc(100vw - 120px) !important;
- max-height: calc(100vh - 120px) !important;
-}
diff --git a/redisinsight/ui/src/components/notifications/components/infinite-messages/InfiniteMessages.tsx b/redisinsight/ui/src/components/notifications/components/infinite-messages/InfiniteMessages.tsx
index f64d5dd810..59ac8bb944 100644
--- a/redisinsight/ui/src/components/notifications/components/infinite-messages/InfiniteMessages.tsx
+++ b/redisinsight/ui/src/components/notifications/components/infinite-messages/InfiniteMessages.tsx
@@ -124,7 +124,7 @@ export const INFINITE_MESSAGES: InfiniteMessagesType = {
{!!details && (
<>
-
+
diff --git a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsInfo/BulkActionsInfo.tsx b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsInfo/BulkActionsInfo.tsx
index 6c3ade5519..89b71b963f 100644
--- a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsInfo/BulkActionsInfo.tsx
+++ b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsInfo/BulkActionsInfo.tsx
@@ -75,7 +75,7 @@ const BulkActionsInfo = (props: Props) => {
)}
-
+
{loading && (
diff --git a/redisinsight/ui/src/pages/browser/modules/key-details/components/hash-details/HashDetails.tsx b/redisinsight/ui/src/pages/browser/modules/key-details/components/hash-details/HashDetails.tsx
index 62ed972341..cefa537688 100644
--- a/redisinsight/ui/src/pages/browser/modules/key-details/components/hash-details/HashDetails.tsx
+++ b/redisinsight/ui/src/pages/browser/modules/key-details/components/hash-details/HashDetails.tsx
@@ -83,7 +83,6 @@ const HashDetails = (props: Props) => {
/>
>
diff --git a/redisinsight/ui/src/pages/browser/modules/key-details/components/key-details-subheader/KeyDetailsSubheader.tsx b/redisinsight/ui/src/pages/browser/modules/key-details/components/key-details-subheader/KeyDetailsSubheader.tsx
index 4751db41d6..1a365c65d5 100644
--- a/redisinsight/ui/src/pages/browser/modules/key-details/components/key-details-subheader/KeyDetailsSubheader.tsx
+++ b/redisinsight/ui/src/pages/browser/modules/key-details/components/key-details-subheader/KeyDetailsSubheader.tsx
@@ -26,7 +26,6 @@ export const KeyDetailsSubheader = ({ keyType, Actions }: Props) => (
>
diff --git a/redisinsight/ui/src/pages/home/components/add-database-screen/components/connection-url/ConnectionUrl.tsx b/redisinsight/ui/src/pages/home/components/add-database-screen/components/connection-url/ConnectionUrl.tsx
index 870e458749..6b2b6d1fb3 100644
--- a/redisinsight/ui/src/pages/home/components/add-database-screen/components/connection-url/ConnectionUrl.tsx
+++ b/redisinsight/ui/src/pages/home/components/add-database-screen/components/connection-url/ConnectionUrl.tsx
@@ -1,54 +1,28 @@
import React from 'react'
-import styled from 'styled-components'
-import { FormField } from 'uiSrc/components/base/forms/FormField'
+import {
+ FormField,
+ RiInfoIconProps,
+} from 'uiSrc/components/base/forms/FormField'
import { TextArea } from 'uiSrc/components/base/inputs'
-import { RiIcon } from 'uiSrc/components/base/icons/RiIcon'
-import { RiTooltip } from 'uiSrc/components'
-import { FlexGroup, FlexItem } from 'uiSrc/components/base/layout/flex'
import { Text } from 'uiSrc/components/base/text'
-
-const PointerIcon = styled(RiIcon)`
- cursor: pointer;
-`
+import { HostInfoTooltipContent } from '../../../host-info-tooltip-content/HostInfoTooltipContent'
export interface Props {
value: string
onChange: (e: React.ChangeEvent) => void
}
+const connectionUrlInfo: RiInfoIconProps = {
+ content: HostInfoTooltipContent({ includeAutofillInfo: false }),
+ placement: 'right',
+ maxWidth: '100%',
+}
+
const ConnectionUrl = ({ value, onChange }: Props) => (
- Connection URL
-
-
-
- redis://[[username]:[password]]@host:port
-
-
-
- rediss://[[username]:[password]]@host:port
-
-
-
- host:port
-
-
- }
- >
-
-
-
-
-
- }
+ label={Connection URL}
+ infoIconProps={connectionUrlInfo}
>
+
}
>
-
+
+
+
- >
+
)
const ForceStandalone = (props: Props) => {
const { formik } = props
diff --git a/redisinsight/ui/src/pages/home/components/form/SSHDetails.tsx b/redisinsight/ui/src/pages/home/components/form/SSHDetails.tsx
index 3c75278920..94b8910871 100644
--- a/redisinsight/ui/src/pages/home/components/form/SSHDetails.tsx
+++ b/redisinsight/ui/src/pages/home/components/form/SSHDetails.tsx
@@ -17,6 +17,8 @@ import {
} from 'uiSrc/components/base/inputs'
import { Checkbox } from 'uiSrc/components/base/forms/checkbox/Checkbox'
import { RiRadioGroup } from 'uiSrc/components/base/forms/radio-group/RadioGroup'
+import { Spacer } from 'uiSrc/components/base/layout'
+import { Text } from 'uiSrc/components/base/text/Text'
import { useGenerateId } from 'uiSrc/components/base/utils/hooks/generate-id'
export interface Props {
@@ -51,168 +53,114 @@ const SSHDetails = (props: Props) => {
align={!flexGroupClassName ? 'end' : undefined}
>
-
+
+ Use SSH Tunnel}
+ checked={!!formik.values.ssh}
+ onChange={formik.handleChange}
+ data-testid="use-ssh"
+ />
+
{formik.values.ssh && (
-
-
-
-
- {
- formik.setFieldValue(
- 'sshHost',
- validateField(value.trim()),
- )
- }}
- />
-
-
-
-
- formik.setFieldValue('sshPort', value)}
- onFocus={selectOnFocus}
- />
-
-
-
-
-
-
- {
- formik.setFieldValue(
- 'sshUsername',
- validateField(value.trim()),
- )
- }}
- />
-
-
-
-
-
- formik.setFieldValue('sshPassType', id)}
- data-testid="ssh-pass-type"
- />
-
-
-
- {formik.values.sshPassType === SshPassType.Password && (
+ <>
+
+
+
+
+
+ {
+ formik.setFieldValue(
+ 'sshHost',
+ validateField(value.trim()),
+ )
+ }}
+ />
+
+
+
+
+ formik.setFieldValue('sshPort', value)}
+ onFocus={selectOnFocus}
+ />
+
+
+
-
- {
- if (formik.values.sshPassword === true) {
- formik.setFieldValue('sshPassword', '')
- }
+
+ {
+ formik.setFieldValue(
+ 'sshUsername',
+ validateField(value.trim()),
+ )
}}
- autoComplete="new-password"
/>
- )}
-
- {formik.values.sshPassType === SshPassType.PrivateKey && (
-
-
-
-
-
-
-
+
+
+
+ formik.setFieldValue('sshPassType', id)}
+ data-testid="ssh-pass-type"
+ />
+
+
+
+ {formik.values.sshPassType === SshPassType.Password && (
-
+
{
- if (formik.values.sshPassphrase === true) {
- formik.setFieldValue('sshPassphrase', '')
+ if (formik.values.sshPassword === true) {
+ formik.setFieldValue('sshPassword', '')
}
}}
autoComplete="new-password"
@@ -220,9 +168,66 @@ const SSHDetails = (props: Props) => {
-
- )}
-
+ )}
+
+ {formik.values.sshPassType === SshPassType.PrivateKey && (
+
+
+
+
+
+
+
+
+
+
+ {
+ if (formik.values.sshPassphrase === true) {
+ formik.setFieldValue('sshPassphrase', '')
+ }
+ }}
+ autoComplete="new-password"
+ />
+
+
+
+
+ )}
+
+ >
)}
)
diff --git a/redisinsight/ui/src/pages/home/components/form/TlsDetails.tsx b/redisinsight/ui/src/pages/home/components/form/TlsDetails.tsx
index e5cd5e06b6..6296f046a9 100644
--- a/redisinsight/ui/src/pages/home/components/form/TlsDetails.tsx
+++ b/redisinsight/ui/src/pages/home/components/form/TlsDetails.tsx
@@ -31,6 +31,7 @@ import {
RiSelectOption,
} from 'uiSrc/components/base/forms/select/RiSelect'
import { useGenerateId } from 'uiSrc/components/base/utils/hooks/generate-id'
+import { Text } from 'uiSrc/components/base/text/Text'
import styles from '../styles.module.scss'
const suffix = '_tls_details'
@@ -186,15 +187,17 @@ const TlsDetails = (props: Props) => {
return (
<>
-
-
+
+
+ Use TLS}
+ checked={!!formik.values.tls}
+ onChange={formik.handleChange}
+ data-testid="tls"
+ />
+
@@ -224,14 +227,14 @@ const TlsDetails = (props: Props) => {
-
+
+ onChange={(value) =>
formik.setFieldValue(
'servername',
validateField(value.trim()),
@@ -268,9 +271,8 @@ const TlsDetails = (props: Props) => {
{
{formik.values.tls &&
formik.values.selectedCaCertName === ADD_NEW_CA_CERT && (
-
+
+ onChange={(value) =>
formik.setFieldValue(
'newCaCertName',
validateCertName(value),
@@ -314,38 +316,47 @@ const TlsDetails = (props: Props) => {
{formik.values.tls &&
formik.values.selectedCaCertName === ADD_NEW_CA_CERT && (
-
-
-
-
-
-
-
+ <>
+
+
+
+
+
+
+
+
+ >
)}
)}
{formik.values.tls && (
-
-
- ) =>
- formik.setFieldValue('tlsClientAuthRequired', e.target.checked)
- }
- data-testid="tls-required-checkbox"
- />
-
-
+ <>
+
+
+
+ ) =>
+ formik.setFieldValue(
+ 'tlsClientAuthRequired',
+ e.target.checked,
+ )
+ }
+ data-testid="tls-required-checkbox"
+ />
+
+
+ >
)}
{formik.values.tls && formik.values.tlsClientAuthRequired && (
{
>
-
+
{
formik.values.tlsClientAuthRequired &&
formik.values.selectedTlsClientCertId === 'ADD_NEW' && (
-
+
+ onChange={(value) =>
formik.setFieldValue(
'newTlsCertPairName', // same as the name prop passed a few lines above
validateCertName(value),
@@ -396,9 +407,10 @@ const TlsDetails = (props: Props) => {
formik.values.tlsClientAuthRequired &&
formik.values.selectedTlsClientCertId === 'ADD_NEW' && (
<>
+
-
+
-
+
-
+