Skip to content

Commit 4e6af24

Browse files
authored
Merge pull request #943 from devtron-labs/feat/backup-detail
feat: add new icons
2 parents bca68cf + 07caf7f commit 4e6af24

File tree

8 files changed

+77
-8
lines changed

8 files changed

+77
-8
lines changed
Lines changed: 6 additions & 0 deletions
Loading
Lines changed: 5 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading

src/Assets/IconV2/ic-pause.svg

Lines changed: 4 additions & 0 deletions
Loading

src/Common/ClipboardButton/ClipboardButton.tsx

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@
1717
import { useEffect, useRef, useState } from 'react'
1818

1919
import Tooltip from '@Common/Tooltip/Tooltip'
20+
import { Button, ButtonStyleType, ButtonVariantType } from '@Shared/Components/Button'
2021

2122
import { ReactComponent as Check } from '../../Assets/Icon/ic-check.svg'
2223
import { ReactComponent as ICCopy } from '../../Assets/Icon/ic-copy.svg'
2324
import { copyToClipboard, noop, stopPropagation } from '../Helper'
24-
import ClipboardProps from './types'
25+
import { ClipboardProps } from './types'
2526

2627
/**
2728
* @param content - Content to be copied
@@ -40,6 +41,8 @@ export const ClipboardButton = ({
4041
rootClassName = '',
4142
iconSize = 16,
4243
handleSuccess,
44+
variant = 'default',
45+
size,
4346
}: ClipboardProps) => {
4447
const [copied, setCopied] = useState<boolean>(false)
4548
const setCopiedFalseTimeoutRef = useRef<ReturnType<typeof setTimeout>>(-1)
@@ -96,18 +99,44 @@ export const ClipboardButton = ({
9699

97100
const iconClassName = `icon-dim-${iconSize} dc__no-shrink`
98101

102+
const ariaLabel = `Copy ${content}`
103+
104+
const renderIcon = () => (
105+
<div className="flex">
106+
{copied ? <Check className={iconClassName} /> : <ICCopy className={iconClassName} />}
107+
</div>
108+
)
109+
110+
const tooltipContent = copied ? copiedTippyText : initialTippyText
111+
112+
if (variant === 'button--secondary') {
113+
return (
114+
<Button
115+
variant={ButtonVariantType.secondary}
116+
dataTestId="clippy-button"
117+
icon={renderIcon()}
118+
size={size}
119+
onClick={handleCopyContent}
120+
tooltipProps={{
121+
content: tooltipContent,
122+
}}
123+
showTooltip
124+
ariaLabel={ariaLabel}
125+
style={ButtonStyleType.neutral}
126+
/>
127+
)
128+
}
129+
99130
return (
100-
<Tooltip content={copied ? copiedTippyText : initialTippyText} alwaysShowTippyOnHover>
131+
<Tooltip content={tooltipContent} alwaysShowTippyOnHover>
101132
{/* TODO: semantically buttons should not be nested; fix later */}
102133
<button
103134
type="button"
104135
className={`dc__outline-none-imp p-0 flex dc__transparent--unstyled dc__no-border ${rootClassName}`}
105-
aria-label={`Copy ${content}`}
136+
aria-label={ariaLabel}
106137
onClick={handleCopyContent}
107138
>
108-
<div className="flex">
109-
{copied ? <Check className={iconClassName} /> : <ICCopy className={iconClassName} />}
110-
</div>
139+
{renderIcon()}
111140
</button>
112141
</Tooltip>
113142
)

src/Common/ClipboardButton/types.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,21 @@
1414
* limitations under the License.
1515
*/
1616

17-
export default interface ClipboardProps {
17+
import { ComponentSizeType } from '@Shared/constants'
18+
19+
export type ClipboardProps = (
20+
| {
21+
/**
22+
* @default 'default'
23+
*/
24+
variant?: 'default'
25+
size?: never
26+
}
27+
| {
28+
variant: 'button--secondary'
29+
size: ComponentSizeType
30+
}
31+
) & {
1832
content: string
1933
/**
2034
* tippy text before copying

src/Common/Constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export const URLS = {
131131
DATA_PROTECTION: DATA_PROTECTION_ROOT,
132132
DATA_PROTECTION_OVERVIEW: `${DATA_PROTECTION_ROOT}/overview`,
133133
DATA_PROTECTION_BACKUP_AND_SCHEDULE,
134-
DATA_PROTECTION_BACKUP_AND_SCHEDULE_DETAIL: `${DATA_PROTECTION_BACKUP_AND_SCHEDULE}/:name`,
134+
DATA_PROTECTION_BACKUP_AND_SCHEDULE_DETAIL: `${DATA_PROTECTION_BACKUP_AND_SCHEDULE}/detail/:id`,
135135
DATA_PROTECTION_RESTORES: `${DATA_PROTECTION_ROOT}/restores`,
136136
DATA_PROTECTION_RESTORES_DETAIL: `${DATA_PROTECTION_ROOT}/restores/:restoreId`,
137137
DATA_PROTECTION_BACKUP_LOCATIONS: `${DATA_PROTECTION_ROOT}/backup-locations/:type(${Object.values(BackupLocationsTypes).join('|')})`,

src/Shared/Components/Icon/Icon.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import { ReactComponent as ICAws } from '@IconsV2/ic-aws.svg'
2121
import { ReactComponent as ICAwsCodecommit } from '@IconsV2/ic-aws-codecommit.svg'
2222
import { ReactComponent as ICAzure } from '@IconsV2/ic-azure.svg'
2323
import { ReactComponent as ICAzureAks } from '@IconsV2/ic-azure-aks.svg'
24+
import { ReactComponent as ICBackupColor } from '@IconsV2/ic-backup-color.svg'
25+
import { ReactComponent as ICBackupScheduleColor } from '@IconsV2/ic-backup-schedule-color.svg'
2426
import { ReactComponent as ICBgBuild } from '@IconsV2/ic-bg-build.svg'
2527
import { ReactComponent as ICBgCluster } from '@IconsV2/ic-bg-cluster.svg'
2628
import { ReactComponent as ICBgCpu } from '@IconsV2/ic-bg-cpu.svg'
@@ -64,6 +66,7 @@ import { ReactComponent as ICClockCounterclockwise } from '@IconsV2/ic-clock-cou
6466
import { ReactComponent as ICCloseLarge } from '@IconsV2/ic-close-large.svg'
6567
import { ReactComponent as ICCloseSmall } from '@IconsV2/ic-close-small.svg'
6668
import { ReactComponent as ICCloud } from '@IconsV2/ic-cloud.svg'
69+
import { ReactComponent as ICCloudUpload } from '@IconsV2/ic-cloud-upload.svg'
6770
import { ReactComponent as ICCloudVms } from '@IconsV2/ic-cloud-vms.svg'
6871
import { ReactComponent as ICCluster } from '@IconsV2/ic-cluster.svg'
6972
import { ReactComponent as ICClusterIsolated } from '@IconsV2/ic-cluster-isolated.svg'
@@ -207,6 +210,7 @@ import { ReactComponent as ICPaperPlane } from '@IconsV2/ic-paper-plane.svg'
207210
import { ReactComponent as ICPaperPlaneColor } from '@IconsV2/ic-paper-plane-color.svg'
208211
import { ReactComponent as ICParty } from '@IconsV2/ic-party.svg'
209212
import { ReactComponent as ICPath } from '@IconsV2/ic-path.svg'
213+
import { ReactComponent as ICPause } from '@IconsV2/ic-pause.svg'
210214
import { ReactComponent as ICPauseCircle } from '@IconsV2/ic-pause-circle.svg'
211215
import { ReactComponent as ICPencil } from '@IconsV2/ic-pencil.svg'
212216
import { ReactComponent as ICPlayOutline } from '@IconsV2/ic-play-outline.svg'
@@ -302,6 +306,8 @@ export const iconMap = {
302306
'ic-aws': ICAws,
303307
'ic-azure-aks': ICAzureAks,
304308
'ic-azure': ICAzure,
309+
'ic-backup-color': ICBackupColor,
310+
'ic-backup-schedule-color': ICBackupScheduleColor,
305311
'ic-bg-build': ICBgBuild,
306312
'ic-bg-cluster': ICBgCluster,
307313
'ic-bg-cpu': ICBgCpu,
@@ -344,6 +350,7 @@ export const iconMap = {
344350
'ic-clock': ICClock,
345351
'ic-close-large': ICCloseLarge,
346352
'ic-close-small': ICCloseSmall,
353+
'ic-cloud-upload': ICCloudUpload,
347354
'ic-cloud-vms': ICCloudVms,
348355
'ic-cloud': ICCloud,
349356
'ic-cluster-isolated': ICClusterIsolated,
@@ -489,6 +496,7 @@ export const iconMap = {
489496
'ic-party': ICParty,
490497
'ic-path': ICPath,
491498
'ic-pause-circle': ICPauseCircle,
499+
'ic-pause': ICPause,
492500
'ic-pencil': ICPencil,
493501
'ic-play-outline': ICPlayOutline,
494502
'ic-priority-medium-fill': ICPriorityMediumFill,

0 commit comments

Comments
 (0)