mirror of
https://github.com/datahub-project/datahub.git
synced 2025-11-11 00:42:29 +00:00
96 lines
3.0 KiB
TypeScript
96 lines
3.0 KiB
TypeScript
import { MockedProvider } from '@apollo/client/testing';
|
|
import { Remirror, ThemeProvider, useRemirror } from '@remirror/react';
|
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
import React from 'react';
|
|
import { BoldExtension, ItalicExtension } from 'remirror/extensions';
|
|
|
|
import { Editor } from '@components/components/Editor/Editor';
|
|
import { EditorTheme } from '@components/components/Editor/EditorTheme';
|
|
|
|
import UserContextProvider from '@src/app/context/UserContextProvider';
|
|
|
|
const meta = {
|
|
title: 'Components / Editor',
|
|
component: Editor,
|
|
parameters: {
|
|
layout: 'centered',
|
|
docs: {
|
|
subtitle: 'A rich text editor with markdown support.',
|
|
},
|
|
},
|
|
decorators: [
|
|
(Story) => {
|
|
return (
|
|
<MockedProvider mocks={[]} addTypename={false}>
|
|
<ThemeProvider theme={EditorTheme}>
|
|
<UserContextProvider>
|
|
<Story />
|
|
</UserContextProvider>
|
|
</ThemeProvider>
|
|
</MockedProvider>
|
|
);
|
|
},
|
|
],
|
|
argTypes: {
|
|
readOnly: { description: 'Sets the editor to read-only mode.', control: { type: 'boolean' } },
|
|
content: { description: 'Initial content of the editor.', control: { type: 'text' } },
|
|
onChange: { description: 'Callback triggered when content changes.', action: 'contentChanged' },
|
|
placeholder: { description: 'Placeholder text.', control: { type: 'text' } },
|
|
className: { description: 'CSS class for editor container.', control: { type: 'text' } },
|
|
},
|
|
args: {
|
|
readOnly: false,
|
|
content: '',
|
|
placeholder: 'Type here...',
|
|
className: '',
|
|
},
|
|
} satisfies Meta<typeof Editor>;
|
|
|
|
export default meta;
|
|
|
|
type Story = StoryObj<typeof meta>;
|
|
|
|
/**
|
|
* A wrapper component to handle Remirror setup for the stories.
|
|
*/
|
|
const RemirrorWrapper = ({ children, content }: { children: React.ReactNode; content?: string }) => {
|
|
const { manager, state } = useRemirror({
|
|
extensions: () => [new BoldExtension({}), new ItalicExtension()],
|
|
stringHandler: 'markdown',
|
|
content,
|
|
});
|
|
|
|
return (
|
|
<Remirror manager={manager} initialContent={state}>
|
|
{children}
|
|
</Remirror>
|
|
);
|
|
};
|
|
|
|
// export const ReadOnlyEditor: Story = {
|
|
// tags: ['dev'],
|
|
// render: (props) => (
|
|
// <RemirrorWrapper content="# Read-Only Editor\nThis is demo content.">
|
|
// <Editor {...props} readOnly />
|
|
// </RemirrorWrapper>
|
|
// ),
|
|
// };
|
|
|
|
export const EditableEditor: Story = {
|
|
tags: ['dev'],
|
|
render: (props) => (
|
|
<RemirrorWrapper>
|
|
<Editor {...props} placeholder="Type your content here..." />
|
|
</RemirrorWrapper>
|
|
),
|
|
};
|
|
|
|
// export const EditorWithPreloadedContent: Story = {
|
|
// tags: ['dev'],
|
|
// render: (props) => (
|
|
// <RemirrorWrapper content="# Preloaded Content\nThis editor has some preloaded content.">
|
|
// <Editor {...props} />
|
|
// </RemirrorWrapper>
|
|
// ),
|
|
// };
|