1
0
Fork 0
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:
Chaim Lev-Ari 2022-06-17 19:18:42 +03:00 committed by GitHub
parent 212400c283
commit 18252ab854
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
346 changed files with 642 additions and 644 deletions

View file

@ -0,0 +1,19 @@
.code {
display: block;
white-space: pre-wrap;
word-break: break-word;
padding: 20px;
}
.root {
position: relative;
}
.copy-button {
position: absolute;
top: min(20px, 25%);
right: 20px;
padding: 0;
outline: none !important;
margin: 0;
}

View file

@ -0,0 +1,34 @@
import { Meta, Story } from '@storybook/react';
import { Code } from './Code';
export default {
component: Code,
title: 'Components/Code',
} as Meta;
interface Args {
text: string;
showCopyButton?: boolean;
}
function Template({ text, showCopyButton }: Args) {
return <Code showCopyButton={showCopyButton}>{text}</Code>;
}
export const Primary: Story<Args> = Template.bind({});
Primary.args = {
text: 'curl -X GET http://ultra-sound-money.eth',
showCopyButton: true,
};
export const MultiLine: Story<Args> = Template.bind({});
MultiLine.args = {
text: 'curl -X\n GET http://example-with-children.crypto',
};
export const MultiLineWithIcon: Story<Args> = Template.bind({});
MultiLineWithIcon.args = {
text: 'curl -X\n GET http://example-with-children.crypto',
showCopyButton: true,
};

View file

@ -0,0 +1,11 @@
import { render } from '@testing-library/react';
import { Code } from './Code';
test('should display a Code with children', async () => {
const children = 'test text code component';
const { findByText } = render(<Code>{children}</Code>);
const heading = await findByText(children);
expect(heading).toBeTruthy();
});

View file

@ -0,0 +1,33 @@
import clsx from 'clsx';
import { Button } from '@@/buttons';
import { useCopy } from '@@/buttons/CopyButton/useCopy';
import styles from './Code.module.css';
interface Props {
showCopyButton?: boolean;
children: string;
}
export function Code({ children, showCopyButton }: Props) {
const { handleCopy, copiedSuccessfully } = useCopy(children);
return (
<div className={styles.root}>
<code className={styles.code}>{children}</code>
{showCopyButton && (
<Button color="link" className={styles.copyButton} onClick={handleCopy}>
<i
className={clsx(
'fa',
copiedSuccessfully ? 'fa-check green-icon' : 'fa-copy '
)}
aria-hidden="true"
/>
</Button>
)}
</div>
);
}

View file

@ -0,0 +1 @@
export { Code } from './Code';