Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

react-components: Add Autocomplete component #161

Merged
merged 28 commits into from
Oct 24, 2024
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
a4e6143
chore(react-components): rename Select
MarikTar Sep 18, 2024
8a50c4a
chore(react-components): rename Autocomplete
MarikTar Sep 18, 2024
9e47708
chore(react-components): add new Autocomplete
MarikTar Sep 25, 2024
7b33998
chore(react-components): fix storybook
MarikTar Sep 25, 2024
fd0c61e
chore(react-components): update snapshot
MarikTar Sep 26, 2024
391b062
Merge branch 'mariktar/add-pv-designe-system-autocompleate' of https:…
MarikTar Sep 26, 2024
2667d50
chore(react-components): removed extra changes
MarikTar Sep 26, 2024
f5beeae
Merge branch 'main' of https://github.com/PeculiarVentures/peculiar-u…
MarikTar Sep 30, 2024
762fbf2
Merge branch 'main' of https://github.com/PeculiarVentures/peculiar-u…
MarikTar Sep 30, 2024
ba1ff6d
Merge branches 'mariktar/add-new-autocoplete-component' and 'mariktar…
donskov Sep 30, 2024
c2d0dea
chore(react-components): added showing chip in multiple mode
MarikTar Sep 30, 2024
df76065
chore(react-components): fix label
MarikTar Oct 4, 2024
3296c16
chore(react-components): replace handleDeleteAllValues
MarikTar Oct 7, 2024
6566488
chore(react-components): add disabled state
MarikTar Oct 7, 2024
c817825
chore(react-components): add disabled state
MarikTar Oct 7, 2024
b71e62b
chore(react-components): fix focus trap
MarikTar Oct 7, 2024
0bc7f3b
chore(react-components): fix focus trap
MarikTar Oct 11, 2024
5d4d8a6
chore(react-components): fix console error
MarikTar Oct 11, 2024
17483ae
Merge https://github.com/PeculiarVentures/peculiar-ui into mariktar/a…
donskov Oct 16, 2024
b51b456
chore(react-components): add arrow up/down control
MarikTar Oct 17, 2024
396e2e6
chore(react-components): fix jumping in medium size
MarikTar Oct 17, 2024
51b9b63
chore(react-components): add focus trap
MarikTar Oct 17, 2024
d072459
chore(react-components): add simple unit test
MarikTar Oct 21, 2024
6c71cff
chore(react-components): update test
MarikTar Oct 21, 2024
a246c07
chore(react-components): fix clear in read only mode
MarikTar Oct 21, 2024
7fc1742
Merge branch 'main' of https://github.com/PeculiarVentures/peculiar-u…
MarikTar Oct 24, 2024
92bd209
chore(react-components): remove max-width in tags
MarikTar Oct 24, 2024
4ab4023
Merge https://github.com/PeculiarVentures/peculiar-ui into mariktar/a…
donskov Oct 24, 2024
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
131 changes: 131 additions & 0 deletions packages/react-components/src/Autocomplete/autocomplete.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import type { Meta, StoryObj } from '@storybook/react';
import { Autocomplete } from './index';

const top100Films = [
{ title: 'The Shawshank Redemption', year: 1994 },
{ title: 'The Godfather', year: 1972 },
{ title: 'The Godfather: Part II', year: 1974 },
{ title: 'The Dark Knight', year: 2008 },
{ title: '12 Angry Men', year: 1957 },
{ title: "Schindler's List", year: 1993 },
{ title: 'Pulp Fiction', year: 1994 },
{ title: 'The Lord of the Rings: The Return of the King', year: 2003 },
{ title: 'The Good, the Bad and the Ugly', year: 1966 },
{ title: 'Fight Club', year: 1999 },
{ title: 'The Lord of the Rings: The Fellowship of the Ring', year: 2001 },
{ title: 'Star Wars: Episode V - The Empire Strikes Back', year: 1980 },
{ title: 'Forrest Gump', year: 1994 },
{ title: 'Inception', year: 2010 },
{ title: 'The Lord of the Rings: The Two Towers', year: 2002 },
{ title: "One Flew Over the Cuckoo's Nest", year: 1975 },
{ title: 'Goodfellas', year: 1990 },
{ title: 'The Matrix', year: 1999 },
{ title: 'Seven Samurai', year: 1954 },
{ title: 'Star Wars: Episode IV - A New Hope', year: 1977 },
{ title: 'City of God', year: 2002 },
{ title: 'Se7en', year: 1995 },
{ title: 'The Silence of the Lambs', year: 1991 },
{ title: "It's a Wonderful Life", year: 1946 },
{ title: 'Life Is Beautiful', year: 1997 },
{ title: 'The Usual Suspects', year: 1995 },
{ title: 'Léon: The Professional', year: 1994 },
{ title: 'Spirited Away', year: 2001 },
{ title: 'Saving Private Ryan', year: 1998 },
{ title: 'Once Upon a Time in the West', year: 1968 },
{ title: 'American History X', year: 1998 },
{ title: 'Interstellar', year: 2014 },
{ title: 'Casablanca', year: 1942 },
{ title: 'City Lights', year: 1931 },
{ title: 'Psycho', year: 1960 },
{ title: 'The Green Mile', year: 1999 },
{ title: 'The Intouchables', year: 2011 },
{ title: 'Modern Times', year: 1936 },
{ title: 'Raiders of the Lost Ark', year: 1981 },
{ title: 'Rear Window', year: 1954 },
{ title: 'The Pianist', year: 2002 },
{ title: 'The Departed', year: 2006 },
{ title: 'Terminator 2: Judgment Day', year: 1991 },
{ title: 'Back to the Future', year: 1985 },
{ title: 'Whiplash', year: 2014 },
{ title: 'Gladiator', year: 2000 },
{ title: 'Memento', year: 2000 },
{ title: 'The Prestige', year: 2006 },
{ title: 'The Lion King', year: 1994 },
{ title: 'Apocalypse Now', year: 1979 },
{ title: 'Alien', year: 1979 },
{ title: 'Sunset Boulevard', year: 1950 },
{ title: 'Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb', year: 1964 },
{ title: 'The Great Dictator', year: 1940 },
{ title: 'Cinema Paradiso', year: 1988 },
{ title: 'The Lives of Others', year: 2006 },
{ title: 'Grave of the Fireflies', year: 1988 },
{ title: 'Paths of Glory', year: 1957 },
{ title: 'Django Unchained', year: 2012 },
{ title: 'The Shining', year: 1980 },
{ title: 'WALL·E', year: 2008 },
{ title: 'American Beauty', year: 1999 },
{ title: 'The Dark Knight Rises', year: 2012 },
{ title: 'Princess Mononoke', year: 1997 },
{ title: 'Aliens', year: 1986 },
{ title: 'Oldboy', year: 2003 },
{ title: 'Once Upon a Time in America', year: 1984 },
{ title: 'Witness for the Prosecution', year: 1957 },
{ title: 'Das Boot', year: 1981 },
{ title: 'Citizen Kane', year: 1941 },
{ title: 'North by Northwest', year: 1959 },
{ title: 'Vertigo', year: 1958 },
{ title: 'Star Wars: Episode VI - Return of the Jedi', year: 1983 },
{ title: 'Reservoir Dogs', year: 1992 },
{ title: 'Braveheart', year: 1995 },
{ title: 'M', year: 1931 },
{ title: 'Requiem for a Dream', year: 2000 },
{ title: 'Amélie', year: 2001 },
{ title: 'A Clockwork Orange', year: 1971 },
{ title: 'Like Stars on Earth', year: 2007 },
{ title: 'Taxi Driver', year: 1976 },
{ title: 'Lawrence of Arabia', year: 1962 },
{ title: 'Double Indemnity', year: 1944 },
{ title: 'Eternal Sunshine of the Spotless Mind', year: 2004 },
{ title: 'Amadeus', year: 1984 },
{ title: 'To Kill a Mockingbird', year: 1962 },
{ title: 'Toy Story 3', year: 2010 },
{ title: 'Logan', year: 2017 },
{ title: 'Full Metal Jacket', year: 1987 },
{ title: 'Dangal', year: 2016 },
{ title: 'The Sting', year: 1973 },
{ title: '2001: A Space Odyssey', year: 1968 },
{ title: "Singin' in the Rain", year: 1952 },
{ title: 'Toy Story', year: 1995 },
{ title: 'Bicycle Thieves', year: 1948 },
{ title: 'The Kid', year: 1921 },
{ title: 'Inglourious Basterds', year: 2009 },
{ title: 'Snatch', year: 2000 },
{ title: '3 Idiots', year: 2009 },
{ title: 'Monty Python and the Holy Grail', year: 1975 },
];

const meta: Meta<typeof Autocomplete> = {
title: 'Components/Autocomplete',
// @ts-ignore
component: Autocomplete,
args: {
options: top100Films,
placeholder: 'Select a movie',
getOptionLabel: (option: any) => option.title,
},
tags: ['autodocs'],
argTypes: {
options: { control: false },
getOptionLabel: { control: false },
defaultValue: { control: false },
value: { control: false },
filterOptions: { control: false },
popoverProps: { control: false },
},
};

export default meta;

type Story = StoryObj<typeof Autocomplete>;

export const Playground: Story = {};
107 changes: 107 additions & 0 deletions packages/react-components/src/Autocomplete/autocomplete.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
import React from 'react';
import { renderWithWrapper as render, screen, fireEvent } from '../test-utils';
import { Autocomplete } from './index';

describe('<Autocomplete />', () => {
const options = ['test-1', 'test-2'];

it('should render with default styles', () => {
const { asFragment } = render(
<Autocomplete
options={options}
id="test-id"
/>,
);

expect(asFragment()).toMatchSnapshot();
});

it('should render with default multiple styles', () => {
const { asFragment } = render(
<Autocomplete
options={options}
id="test-id"
multiple
/>,
);

expect(asFragment()).toMatchSnapshot();
});

it('should pass className', () => {
const { asFragment } = render(
<Autocomplete
options={options}
id="test-id"
className="my-class-name"
/>,
);

expect(asFragment()).toMatchSnapshot();
});

describe('sizes', () => {
const sizes: Array<React.ComponentProps<typeof Autocomplete>['size']> = [
'small',
'medium',
'large',
];

sizes.forEach((size) => {
it(`size "${size}"`, () => {
const { asFragment } = render(
<Autocomplete
options={options}
id="test-id"
size={size}
/>,
);

expect(asFragment()).toMatchSnapshot();
});
});
});

it('should pass loading', () => {
const { baseElement } = render(
<Autocomplete
options={[]}
id="test-id"
loading
loadingText="Loading..."
/>,
);

fireEvent.click(screen.getByRole('combobox'));

expect(baseElement).toMatchSnapshot();
});

it('should pass error', () => {
const { baseElement } = render(
<Autocomplete
options={[]}
id="test-id"
error
errorText="Error text"
/>,
);

fireEvent.click(screen.getByRole('combobox'));

expect(baseElement).toMatchSnapshot();
});

it('should pass options', () => {
const { baseElement } = render(
<Autocomplete
id="test-id"
options={options}
/>,
);

fireEvent.click(screen.getByRole('combobox'));

expect(baseElement).toMatchSnapshot();
});
});
Loading
Loading