mirror of
https://github.com/portainer/portainer.git
synced 2025-07-23 15:29:42 +02:00
refactor(app): move react components to react codebase [EE-3179] (#6971)
This commit is contained in:
parent
212400c283
commit
18252ab854
346 changed files with 642 additions and 644 deletions
32
app/react/components/form-components/Input/Input.stories.tsx
Normal file
32
app/react/components/form-components/Input/Input.stories.tsx
Normal file
|
@ -0,0 +1,32 @@
|
|||
import { Meta, Story } from '@storybook/react';
|
||||
import { useState } from 'react';
|
||||
|
||||
import { Input } from './Input';
|
||||
|
||||
export default {
|
||||
title: 'Components/Form/Input',
|
||||
args: {
|
||||
disabled: false,
|
||||
},
|
||||
} as Meta;
|
||||
|
||||
interface Args {
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
export function TextField({ disabled }: Args) {
|
||||
const [value, setValue] = useState('');
|
||||
return (
|
||||
<Input
|
||||
type="text"
|
||||
value={value}
|
||||
onChange={(e) => setValue(e.target.value)}
|
||||
disabled={disabled}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export const DisabledTextField: Story<Args> = TextField.bind({});
|
||||
DisabledTextField.args = {
|
||||
disabled: true,
|
||||
};
|
15
app/react/components/form-components/Input/Input.tsx
Normal file
15
app/react/components/form-components/Input/Input.tsx
Normal file
|
@ -0,0 +1,15 @@
|
|||
import clsx from 'clsx';
|
||||
import { InputHTMLAttributes } from 'react';
|
||||
|
||||
export function Input({
|
||||
className,
|
||||
...props
|
||||
}: InputHTMLAttributes<HTMLInputElement>) {
|
||||
return (
|
||||
<input
|
||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
||||
{...props}
|
||||
className={clsx('form-control', className)}
|
||||
/>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
import { Meta, Story } from '@storybook/react';
|
||||
import { useState } from 'react';
|
||||
|
||||
import { Select } from './Select';
|
||||
|
||||
export default {
|
||||
title: 'Components/Form/Select',
|
||||
args: {
|
||||
disabled: false,
|
||||
},
|
||||
} as Meta;
|
||||
|
||||
interface Args {
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
export function Example({ disabled }: Args) {
|
||||
const [value, setValue] = useState(0);
|
||||
const options = [
|
||||
{ value: 1, label: 'one' },
|
||||
{ value: 2, label: 'two' },
|
||||
];
|
||||
return (
|
||||
<Select
|
||||
value={value}
|
||||
onChange={(e) => setValue(parseInt(e.target.value, 10))}
|
||||
disabled={disabled}
|
||||
options={options}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export const DisabledSelect: Story<Args> = Example.bind({});
|
||||
DisabledSelect.args = {
|
||||
disabled: true,
|
||||
};
|
31
app/react/components/form-components/Input/Select.tsx
Normal file
31
app/react/components/form-components/Input/Select.tsx
Normal file
|
@ -0,0 +1,31 @@
|
|||
import clsx from 'clsx';
|
||||
import { SelectHTMLAttributes } from 'react';
|
||||
|
||||
export interface Option<T extends string | number> {
|
||||
value: T;
|
||||
label: string;
|
||||
}
|
||||
|
||||
interface Props<T extends string | number> {
|
||||
options: Option<T>[];
|
||||
}
|
||||
|
||||
export function Select<T extends number | string>({
|
||||
options,
|
||||
className,
|
||||
...props
|
||||
}: Props<T> & SelectHTMLAttributes<HTMLSelectElement>) {
|
||||
return (
|
||||
<select
|
||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
||||
{...props}
|
||||
className={clsx('form-control', className)}
|
||||
>
|
||||
{options.map((item) => (
|
||||
<option value={item.value} key={item.value}>
|
||||
{item.label}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
);
|
||||
}
|
15
app/react/components/form-components/Input/Textarea.tsx
Normal file
15
app/react/components/form-components/Input/Textarea.tsx
Normal file
|
@ -0,0 +1,15 @@
|
|||
import clsx from 'clsx';
|
||||
import { TextareaHTMLAttributes } from 'react';
|
||||
|
||||
export function TextArea({
|
||||
className,
|
||||
...props
|
||||
}: TextareaHTMLAttributes<HTMLTextAreaElement>) {
|
||||
return (
|
||||
<textarea
|
||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
||||
{...props}
|
||||
className={clsx('form-control', className)}
|
||||
/>
|
||||
);
|
||||
}
|
2
app/react/components/form-components/Input/index.ts
Normal file
2
app/react/components/form-components/Input/index.ts
Normal file
|
@ -0,0 +1,2 @@
|
|||
export { Input } from './Input';
|
||||
export { Select } from './Select';
|
Loading…
Add table
Add a link
Reference in a new issue