Skip to content

Commit b5b98c4

Browse files
change: [M3-9939] - Akamai Design System: Switch (Toggle) Component (#12303)
* change: [M3-9939] - Akamai Design System: Switch (Toggle) Component * added size prop and checkmarkIcon * Added changeset: Add `Toggle` design tokens and update styles to match Akamai Design System * fixed small checkbox styling and added story for disabled * fix transition for checkMark Icon and added story for disabled state * cleanup in styles and added story for label and disabled * fixed couple of unit tests * fixed unit tests
1 parent 94f338c commit b5b98c4

File tree

13 files changed

+239
-81
lines changed

13 files changed

+239
-81
lines changed

packages/manager/src/features/Kubernetes/CreateCluster/ControlPlaneACLPane.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ export const ControlPlaneACLPane = (props: ControlPlaneACLProps) => {
7272
control={
7373
<StyledACLToggle
7474
checked={enableControlPlaneACL}
75-
disabled={isEnterpriseCluster}
7675
name="ipacl-checkbox"
7776
onChange={() => setControlPlaneACL(!enableControlPlaneACL)}
77+
toggleDisabled={isEnterpriseCluster}
7878
/>
7979
}
8080
label="Enable Control Plane ACL"

packages/manager/src/features/Kubernetes/KubernetesClusterDetail/KubeControlPaneACLDrawer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,6 @@ export const KubeControlPlaneACLDrawer = (
239239
checked={
240240
isEnterpriseCluster ? true : (field.value ?? false)
241241
}
242-
disabled={isEnterpriseCluster}
243242
name="ipacl-checkbox"
244243
onBlur={field.onBlur}
245244
onChange={() => {
@@ -270,6 +269,7 @@ export const KubeControlPlaneACLDrawer = (
270269
);
271270
}
272271
}}
272+
toggleDisabled={isEnterpriseCluster}
273273
/>
274274
}
275275
label="Enable Control Plane ACL"

packages/manager/src/features/Profile/Settings/MaskSensitiveData.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ describe('MaskSensitiveData', () => {
2525

2626
await waitFor(() => {
2727
expect(getByRole('checkbox')).toBeEnabled();
28+
expect(getByRole('checkbox')).toBeChecked();
2829
});
2930

30-
expect(getByRole('checkbox')).toBeChecked();
3131
expect(getByText('Sensitive data is masked')).toBeVisible();
3232
});
3333

packages/manager/src/features/Profile/Settings/Notifications.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ describe('Notifications', () => {
2525

2626
await waitFor(() => {
2727
expect(getByRole('checkbox')).toBeEnabled();
28+
expect(getByRole('checkbox')).toBeChecked();
2829
});
2930

30-
expect(getByRole('checkbox')).toBeChecked();
3131
expect(
3232
getByText('Email alerts for account activity are enabled')
3333
).toBeVisible();

packages/manager/src/features/Profile/Settings/TypeToConfirm.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ describe('TypeToConfirm', () => {
2323

2424
await waitFor(() => {
2525
expect(getByRole('checkbox')).toBeEnabled();
26+
expect(getByRole('checkbox')).toBeChecked();
2627
});
2728

28-
expect(getByRole('checkbox')).toBeChecked();
2929
expect(getByText('Type-to-confirm is enabled')).toBeVisible();
3030
});
3131

@@ -40,9 +40,9 @@ describe('TypeToConfirm', () => {
4040

4141
await waitFor(() => {
4242
expect(getByRole('checkbox')).toBeEnabled();
43+
expect(getByRole('checkbox')).toBeChecked();
4344
});
4445

45-
expect(getByRole('checkbox')).toBeChecked();
4646
expect(getByText('Type-to-confirm is enabled')).toBeVisible();
4747
});
4848

packages/manager/src/features/Profile/Settings/TypeToConfirm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export const TypeToConfirm = () => {
2222
<FormControlLabel
2323
control={
2424
<Toggle
25-
checked={typeToConfirmPreference}
25+
checked={!!typeToConfirmPreference}
2626
onChange={(_, checked) =>
2727
updatePreferences({ type_to_confirm: checked })
2828
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/ui": Changed
3+
---
4+
5+
Add `Toggle` design tokens and update styles to match Akamai Design System ([#12303](https://github.com/linode/manager/pull/12303))
Lines changed: 4 additions & 0 deletions
Loading

packages/ui/src/assets/icons/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export { default as CheckIcon } from './check.svg';
33
export { default as CheckboxIcon } from './checkbox.svg';
44
export { default as CheckboxCheckedIcon } from './checkboxChecked.svg';
55
export { default as CheckboxIndeterminateIcon } from './checkboxIndeterminate.svg';
6+
export { default as CheckMarkIcon } from './checkmark.svg';
67
export { default as ChevronDownIcon } from './chevron-down.svg';
78
export { default as ChevronUpIcon } from './chevron-up.svg';
89
export { default as CloseIcon } from './close.svg';

packages/ui/src/components/Toggle/Toggle.stories.tsx

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,94 @@
11
import React from 'react';
22

3+
import { FormControlLabel } from '../FormControlLabel';
34
import { Toggle } from './Toggle';
45

56
import type { ToggleProps } from './Toggle';
67
import type { Meta, StoryObj } from '@storybook/react';
78

89
const EXAMPLE_TEXT = "This is some example text for the toggle's tooltip";
910

11+
const ToggleWrapper = ({
12+
children,
13+
}: {
14+
children: (state: {
15+
checked: boolean;
16+
onChange: (
17+
event: React.ChangeEvent<HTMLInputElement>,
18+
checked: boolean,
19+
) => void;
20+
}) => React.ReactNode;
21+
}) => {
22+
const [checked, setChecked] = React.useState(true);
23+
24+
return (
25+
<>
26+
{children({
27+
checked,
28+
onChange: (_, newChecked) => setChecked(newChecked),
29+
})}
30+
</>
31+
);
32+
};
33+
1034
export const Default: StoryObj<ToggleProps> = {
11-
render: (args) => <Toggle {...args} tooltipText={EXAMPLE_TEXT} />,
35+
render: (args) => (
36+
<ToggleWrapper>
37+
{({ checked, onChange }) => (
38+
<Toggle
39+
{...args}
40+
checked={checked}
41+
onChange={onChange}
42+
tooltipText={EXAMPLE_TEXT}
43+
/>
44+
)}
45+
</ToggleWrapper>
46+
),
47+
};
48+
49+
export const Disabled: StoryObj<ToggleProps> = {
50+
render: (args) => (
51+
<ToggleWrapper>
52+
{({ checked, onChange }) => (
53+
<Toggle
54+
{...args}
55+
checked={checked}
56+
onChange={onChange}
57+
toggleDisabled
58+
tooltipText={EXAMPLE_TEXT}
59+
/>
60+
)}
61+
</ToggleWrapper>
62+
),
63+
};
64+
65+
export const ToggleWithLabel: StoryObj<ToggleProps> = {
66+
render: (args) => (
67+
<ToggleWrapper>
68+
{({ checked, onChange }) => (
69+
<FormControlLabel
70+
control={<Toggle {...args} checked={checked} onChange={onChange} />}
71+
label={'Label'}
72+
/>
73+
)}
74+
</ToggleWrapper>
75+
),
76+
};
77+
78+
export const ToggleWithSmallSize: StoryObj<ToggleProps> = {
79+
render: (args) => (
80+
<ToggleWrapper>
81+
{({ checked, onChange }) => (
82+
<Toggle
83+
{...args}
84+
checked={checked}
85+
onChange={onChange}
86+
size="small"
87+
tooltipText={EXAMPLE_TEXT}
88+
/>
89+
)}
90+
</ToggleWrapper>
91+
),
1292
};
1393

1494
const meta: Meta<ToggleProps> = {

0 commit comments

Comments
 (0)