Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@
useTheme,
} from '@linode/ui';
import useMediaQuery from '@mui/material/useMediaQuery';
import { Pagination } from 'akamai-cds-react-components/Pagination';
import { Pagination } from '@akamai/cds-components/react/Pagination';

Check failure on line 20 in packages/manager/src/components/ImageSelect/ImageSelectTable.tsx

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Pagination" to come before "@mui/material/useMediaQuery"

Check failure on line 20 in packages/manager/src/components/ImageSelect/ImageSelectTable.tsx

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Expected "@akamai/cds-components/react/Pagination" to come before "@mui/material/useMediaQuery". Raw Output: {"ruleId":"perfectionist/sort-imports","severity":2,"message":"Expected \"@akamai/cds-components/react/Pagination\" to come before \"@mui/material/useMediaQuery\".","line":20,"column":1,"nodeType":"ImportDeclaration","messageId":"unexpectedImportsOrder","endLine":20,"endColumn":70,"fix":{"range":[0,564],"text":"import { Pagination } from '@akamai/cds-components/react/Pagination';
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeaderCell,
TableRow,
} from 'akamai-cds-react-components/Table';
} from '@akamai/cds-components/react/Table';
import React, { useState } from 'react';

import { DebouncedSearchTextField } from 'src/components/DebouncedSearchTextField';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
} from '@linode/ui';
import { convertStorageUnit, pluralize } from '@linode/utilities';
import useMediaQuery from '@mui/material/useMediaQuery';
import { TableCell, TableRow } from 'akamai-cds-react-components/Table';
import { TableCell, TableRow } from '@akamai/cds-components/react/Table';

Check failure on line 10 in packages/manager/src/components/ImageSelect/ImageSelectTableRow.tsx

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Table" to come before "@mui/material/useMediaQuery"

Check failure on line 10 in packages/manager/src/components/ImageSelect/ImageSelectTableRow.tsx

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Expected "@akamai/cds-components/react/Table" to come before "@mui/material/useMediaQuery". Raw Output: {"ruleId":"perfectionist/sort-imports","severity":2,"message":"Expected \"@akamai/cds-components/react/Table\" to come before \"@mui/material/useMediaQuery\".","line":10,"column":1,"nodeType":"ImportDeclaration","messageId":"unexpectedImportsOrder","endLine":10,"endColumn":74,"fix":{"range":[0,293],"text":"import { TableCell, TableRow } from '@akamai/cds-components/react/Table';
import React from 'react';

import CloudInitIcon from 'src/assets/icons/cloud-init.svg';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Box, CircleProgress, LinkButton, useTheme } from '@linode/ui';
import { Pagination } from 'akamai-cds-react-components/Pagination';
import { Pagination } from '@akamai/cds-components/react/Pagination';

Check failure on line 2 in packages/manager/src/features/Account/SwitchAccounts/ChildAccountsTable.tsx

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Pagination" to come before "@linode/ui"

Check failure on line 2 in packages/manager/src/features/Account/SwitchAccounts/ChildAccountsTable.tsx

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Expected "@akamai/cds-components/react/Pagination" to come before "@linode/ui". Raw Output: {"ruleId":"perfectionist/sort-imports","severity":2,"message":"Expected \"@akamai/cds-components/react/Pagination\" to come before \"@linode/ui\".","line":2,"column":1,"nodeType":"ImportDeclaration","messageId":"unexpectedImportsOrder","endLine":2,"endColumn":70,"fix":{"range":[0,242],"text":"import { Pagination } from '@akamai/cds-components/react/Pagination';
import {
Table,
TableBody,
TableCell,
TableRow,
} from 'akamai-cds-react-components/Table';
} from '@akamai/cds-components/react/Table';
import React from 'react';

import { MIN_PAGE_SIZE } from 'src/components/PaginationFooter/PaginationFooter.constants';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Box, TextField, Typography } from '@linode/ui';
import { Grid, styled } from '@mui/material';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';

Check failure on line 3 in packages/manager/src/features/Databases/DatabaseCreate/DatabaseCreate.style.ts

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Button" to come before "@mui/material"

Check failure on line 3 in packages/manager/src/features/Databases/DatabaseCreate/DatabaseCreate.style.ts

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Expected "@akamai/cds-components/react/Button" to come before "@mui/material". Raw Output: {"ruleId":"perfectionist/sort-imports","severity":2,"message":"Expected \"@akamai/cds-components/react/Button\" to come before \"@mui/material\".","line":3,"column":1,"nodeType":"ImportDeclaration","messageId":"unexpectedImportsOrder","endLine":3,"endColumn":62,"fix":{"range":[0,164],"text":"import { Button } from '@akamai/cds-components/react/Button';

import { PlansPanel } from 'src/features/components/PlansPanel/PlansPanel';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useDatabaseMutation } from '@linode/queries';
import { ActionsPanel, Notice, Typography } from '@linode/ui';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';

Check failure on line 3 in packages/manager/src/features/Databases/DatabaseDetail/AccessControls.tsx

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Button" to come before "@linode/ui"

Check failure on line 3 in packages/manager/src/features/Databases/DatabaseDetail/AccessControls.tsx

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Expected "@akamai/cds-components/react/Button" to come before "@linode/ui". Raw Output: {"ruleId":"perfectionist/sort-imports","severity":2,"message":"Expected \"@akamai/cds-components/react/Button\" to come before \"@linode/ui\".","line":3,"column":1,"nodeType":"ImportDeclaration","messageId":"unexpectedImportsOrder","endLine":3,"endColumn":62,"fix":{"range":[0,179],"text":"import { Button } from '@akamai/cds-components/react/Button';
import * as React from 'react';
import type { JSX } from 'react';
import { makeStyles } from 'tss-react/mui';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Box, Paper, Typography } from '@linode/ui';
import Grid from '@mui/material/Grid';
import { useNavigate } from '@tanstack/react-router';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';

Check failure on line 4 in packages/manager/src/features/Databases/DatabaseDetail/DatabaseAdvancedConfiguration/DatabaseAdvancedConfiguration.tsx

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Button" to come before "@tanstack/react-router"

Check failure on line 4 in packages/manager/src/features/Databases/DatabaseDetail/DatabaseAdvancedConfiguration/DatabaseAdvancedConfiguration.tsx

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Expected "@akamai/cds-components/react/Button" to come before "@tanstack/react-router". Raw Output: {"ruleId":"perfectionist/sort-imports","severity":2,"message":"Expected \"@akamai/cds-components/react/Button\" to come before \"@tanstack/react-router\".","line":4,"column":1,"nodeType":"ImportDeclaration","messageId":"unexpectedImportsOrder","endLine":4,"endColumn":62,"fix":{"range":[0,207],"text":"import { Button } from '@akamai/cds-components/react/Button';
import React from 'react';

import { Link } from 'src/components/Link';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import { scrollErrorIntoViewV2 } from '@linode/utilities';
import { createDynamicAdvancedConfigSchema } from '@linode/validation';
import Grid from '@mui/material/Grid';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';

Check failure on line 15 in packages/manager/src/features/Databases/DatabaseDetail/DatabaseAdvancedConfiguration/DatabaseAdvancedConfigurationDrawer.tsx

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Button" to come before "@mui/material/Grid"

Check failure on line 15 in packages/manager/src/features/Databases/DatabaseDetail/DatabaseAdvancedConfiguration/DatabaseAdvancedConfigurationDrawer.tsx

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Expected "@akamai/cds-components/react/Button" to come before "@mui/material/Grid". Raw Output: {"ruleId":"perfectionist/sort-imports","severity":2,"message":"Expected \"@akamai/cds-components/react/Button\" to come before \"@mui/material/Grid\".","line":15,"column":1,"nodeType":"ImportDeclaration","messageId":"unexpectedImportsOrder","endLine":15,"endColumn":62,"fix":{"range":[0,484],"text":"import { Button } from '@akamai/cds-components/react/Button';
import { enqueueSnackbar } from 'notistack';
import React, { useEffect, useMemo, useState } from 'react';
import { Controller, get, useFieldArray, useForm } from 'react-hook-form';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
Toggle,
Typography,
} from '@linode/ui';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';

Check failure on line 9 in packages/manager/src/features/Databases/DatabaseDetail/DatabaseAdvancedConfiguration/DatabaseConfigurationItem.tsx

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Button" to come before "@linode/ui"

Check failure on line 9 in packages/manager/src/features/Databases/DatabaseDetail/DatabaseAdvancedConfiguration/DatabaseConfigurationItem.tsx

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Expected "@akamai/cds-components/react/Button" to come before "@linode/ui". Raw Output: {"ruleId":"perfectionist/sort-imports","severity":2,"message":"Expected \"@akamai/cds-components/react/Button\" to come before \"@linode/ui\".","line":9,"column":1,"nodeType":"ImportDeclaration","messageId":"unexpectedImportsOrder","endLine":9,"endColumn":62,"fix":{"range":[0,177],"text":"import { Button } from '@akamai/cds-components/react/Button';
import React from 'react';

import {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Hidden } from '@linode/ui';
import { TableCell, TableRow } from 'akamai-cds-react-components/Table';
import { TableCell, TableRow } from '@akamai/cds-components/react/Table';

Check failure on line 2 in packages/manager/src/features/Databases/DatabaseDetail/DatabaseNetworking/DatabaseConnectionPoolRow.tsx

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Table" to come before "@linode/ui"

Check failure on line 2 in packages/manager/src/features/Databases/DatabaseDetail/DatabaseNetworking/DatabaseConnectionPoolRow.tsx

View workflow job for this annotation

GitHub Actions / ESLint Review (manager)

[eslint] reported by reviewdog 🐢 Expected "@akamai/cds-components/react/Table" to come before "@linode/ui". Raw Output: {"ruleId":"perfectionist/sort-imports","severity":2,"message":"Expected \"@akamai/cds-components/react/Table\" to come before \"@linode/ui\".","line":2,"column":1,"nodeType":"ImportDeclaration","messageId":"unexpectedImportsOrder","endLine":2,"endColumn":74,"fix":{"range":[0,110],"text":"import { TableCell, TableRow } from '@akamai/cds-components/react/Table';
import * as React from 'react';

import { ActionMenu } from 'src/components/ActionMenu/ActionMenu';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@
} from '@linode/ui';
import Grid from '@mui/material/Grid';
import { useTheme } from '@mui/material/styles';
import { Pagination } from 'akamai-cds-react-components/Pagination';
import { Pagination } from '@akamai/cds-components/react/Pagination';

Check failure on line 12 in packages/manager/src/features/Databases/DatabaseDetail/DatabaseNetworking/DatabaseConnectionPools.tsx

View workflow job for this annotation

GitHub Actions / lint (linode-manager)

Expected "@akamai/cds-components/react/Pagination" to come before "@mui/material/styles"
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeaderCell,
TableRow,
} from 'akamai-cds-react-components/Table';
} from '@akamai/cds-components/react/Table';
import React from 'react';

import { Link } from 'src/components/Link';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Grid from '@mui/material/Grid';
import { styled } from '@mui/material/styles';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';

import { PlansPanel } from 'src/features/components/PlansPanel/PlansPanel';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useDatabaseEnginesQuery } from '@linode/queries';
import { TooltipIcon, Typography } from '@linode/ui';
import { GridLegacy, styled } from '@mui/material';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';
import * as React from 'react';

import {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Typography } from '@linode/ui';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';
import * as React from 'react';
import { makeStyles } from 'tss-react/mui';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import {
} from '@linode/ui';
import { updateMaintenanceSchema } from '@linode/validation';
import { styled } from '@mui/material/styles';
import { Button, Select } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';
import { Select } from '@akamai/cds-components/react/Select';
import { DateTime } from 'luxon';
import { useSnackbar } from 'notistack';
import * as React from 'react';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { getSSLFields } from '@linode/api-v4/lib/databases/databases';
import { TooltipIcon } from '@linode/ui';
import { downloadFile } from '@linode/utilities';
import { styled } from '@mui/material/styles';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';
import { useSnackbar } from 'notistack';
import * as React from 'react';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useDatabaseCredentialsQuery } from '@linode/queries';
import { Box, CircleProgress, TooltipIcon, Typography } from '@linode/ui';
import { Button } from 'akamai-cds-react-components';
import { Button } from '@akamai/cds-components/react/Button';
import { enqueueSnackbar } from 'notistack';
import * as React from 'react';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Hidden } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import { Pagination } from 'akamai-cds-react-components/Pagination';
import { Pagination } from '@akamai/cds-components/react/Pagination';
import {
Table,
TableBody,
TableHead,
TableHeaderCell,
TableRow,
} from 'akamai-cds-react-components/Table';
} from '@akamai/cds-components/react/Table';
import React from 'react';

import { MIN_PAGE_SIZE } from 'src/components/PaginationFooter/PaginationFooter.constants';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
} from '@linode/queries';
import { Chip, Hidden } from '@linode/ui';
import { formatStorageUnits } from '@linode/utilities';
import { TableCell, TableRow } from 'akamai-cds-react-components/Table';
import { TableCell, TableRow } from '@akamai/cds-components/react/Table';
import * as React from 'react';

import { Link } from 'src/components/Link';
Expand Down
2 changes: 1 addition & 1 deletion packages/manager/src/features/Databases/shared.styles.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { styled } from '@linode/ui';
import { TableCell } from 'akamai-cds-react-components/Table';
import { TableCell } from '@akamai/cds-components/react/Table';
import { makeStyles } from 'tss-react/mui';

import type { Theme } from '@mui/material';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useTheme } from '@mui/material';
import Grid from '@mui/material/Grid';
import Paper from '@mui/material/Paper';
import { useLocation, useNavigate, useSearch } from '@tanstack/react-router';
import { Pagination } from 'akamai-cds-react-components/Pagination';
import { Pagination } from '@akamai/cds-components/react/Pagination';
import {
sortRows,
Table,
Expand All @@ -14,7 +14,7 @@ import {
TableHeaderCell,
TableRow,
TableRowExpanded,
} from 'akamai-cds-react-components/Table';
} from '@akamai/cds-components/react/Table';
import React, { useState } from 'react';

import { DebouncedSearchTextField } from 'src/components/DebouncedSearchTextField';
Expand All @@ -38,7 +38,7 @@ import {

import type { RoleView } from '../../Shared/types';
import type { SelectOption } from '@linode/ui';
import type { Order } from 'akamai-cds-react-components/Table';
import type { Order } from '@akamai/cds-components/react/Table';

const ALL_ROLES_OPTION: SelectOption = {
label: 'All Roles',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { Button } from '@akamai/cds-components/react/Button';
import { Icon } from '@akamai/cds-components/react/Icon';
import { styled } from '@mui/material/styles';

export const StyledWrapper = styled('div', {
label: 'StyledWrapper',
})(() => ({
alignItems: 'center',
display: 'flex',
flexDirection: 'row',
justifyContent: 'flex-start',
height: '20px',
}));

export const StyledToggleButton = styled(Button, {
label: 'StyledToggleButton',
})(({ theme }) => ({
marginLeft: theme.tokens.spacing.S8,
minHeight: 'auto',
minWidth: 'auto',
padding: 0,
display: 'flex',
}));

export const StyledIcon = styled(Icon, {
label: 'StyledIcon',
})(({ theme }) => ({
color: theme.palette.grey[500],
'&:hover': {
color: theme.palette.primary.main,
},
}));
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import { screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React from 'react';

import { renderWithTheme } from 'src/utilities/testHelpers';

import { MaskableText } from './MaskableText';

const SECRET_TEXT = 'text-to-be-masked';
const TOGGLE_TEST_ID = 'maskable-text-toggle';

const queryMocks = vi.hoisted(() => ({
usePreferences: vi.fn(),
}));

vi.mock('@linode/queries', async () => {
const actual = await vi.importActual('@linode/queries');
return { ...actual, usePreferences: queryMocks.usePreferences };
});

describe('MaskableText', () => {
describe('when masking is disabled', () => {
beforeEach(() => {
queryMocks.usePreferences.mockReturnValue({ data: false });
});

it('renders the plain text unmasked', () => {
renderWithTheme(<MaskableText text={SECRET_TEXT} />);
expect(screen.getByText(SECRET_TEXT)).toBeVisible();
});

it('renders children instead of text when provided', () => {
renderWithTheme(
<MaskableText text={SECRET_TEXT}>
<span>custom child</span>
</MaskableText>
);
expect(screen.getByText('custom child')).toBeVisible();
expect(screen.queryByText(SECRET_TEXT)).not.toBeInTheDocument();
});

it('renders nothing when text is empty', () => {
const { container } = renderWithTheme(<MaskableText text="" />);
expect(container).toBeEmptyDOMElement();
});

it('does not render the toggle button', () => {
renderWithTheme(<MaskableText isToggleable text={SECRET_TEXT} />);
expect(screen.queryByTestId(TOGGLE_TEST_ID)).not.toBeInTheDocument();
});
});

describe('when masking is enabled', () => {
beforeEach(() => {
queryMocks.usePreferences.mockReturnValue({ data: true });
});

it('renders masked dots instead of plain text by default', () => {
renderWithTheme(<MaskableText text="secret-value" />);
expect(screen.queryByText('secret-value')).not.toBeInTheDocument();
expect(screen.getByText('β€’'.repeat(12))).toBeVisible();
});

it('renders masked dots with custom length', () => {
renderWithTheme(<MaskableText length={6} text="secret-value" />);
expect(screen.getByText('β€’'.repeat(6))).toBeVisible();
});

it('renders nothing when text is empty', () => {
const { container } = renderWithTheme(<MaskableText text="" />);
expect(container).toBeEmptyDOMElement();
});

describe('toggle behavior', () => {
it('does not render toggle button when isToggleable is false', () => {
renderWithTheme(<MaskableText text={SECRET_TEXT} />);
expect(screen.queryByTestId(TOGGLE_TEST_ID)).not.toBeInTheDocument();
});

it('renders toggle button when isToggleable is true', () => {
renderWithTheme(<MaskableText isToggleable text={SECRET_TEXT} />);
screen.getByTestId(TOGGLE_TEST_ID);
});

it('reveals text when toggle button is clicked', async () => {
renderWithTheme(<MaskableText isToggleable text={SECRET_TEXT} />);
expect(screen.queryByText(SECRET_TEXT)).not.toBeInTheDocument();

await userEvent.click(screen.getByTestId(TOGGLE_TEST_ID));

expect(screen.getByText(SECRET_TEXT)).toBeVisible();
});

it('masks text again when toggle button is clicked twice', async () => {
renderWithTheme(<MaskableText isToggleable text={SECRET_TEXT} />);

await userEvent.click(screen.getByTestId(TOGGLE_TEST_ID));
await userEvent.click(screen.getByTestId(TOGGLE_TEST_ID));

expect(screen.queryByText(SECRET_TEXT)).not.toBeInTheDocument();
expect(screen.getByText('β€’'.repeat(12))).toBeVisible();
});
});
});
});
Loading
Loading