overleaf-cep/services/web/frontend/stories/word-count-modal.stories.tsx
Alf Eaton c6ac06b51c Start adding client-side word count (#24892)
GitOrigin-RevId: 6c17d7bf7095794c003e17939a8302fc6b059262
2025-04-28 08:05:38 +00:00

80 lines
1.7 KiB
TypeScript

import { Meta, StoryObj } from '@storybook/react'
import WordCountModal from '@/features/word-count-modal/components/word-count-modal'
import { ScopeDecorator } from './decorators/scope'
import useFetchMock from './hooks/use-fetch-mock'
export default {
title: 'Editor / Modals / Word Count',
component: WordCountModal,
args: {
show: true,
},
argTypes: {
handleHide: {
action: 'close modal',
},
},
decorators: [Story => ScopeDecorator(Story)],
} satisfies Meta
type Story = StoryObj<typeof WordCountModal>
const counts = {
headers: 4,
mathDisplay: 40,
mathInline: 400,
textWords: 4000,
}
const messages = [
'Lorem ipsum dolor sit amet.',
'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
].join('\n')
export const WordCount: Story = {
decorators: [
Story => {
useFetchMock(fetchMock => {
fetchMock.get(
'express:/project/:projectId/wordcount',
{ status: 200, body: { texcount: counts } },
{ delay: 500 }
)
})
return <Story />
},
],
}
export const WordCountWithMessages: Story = {
decorators: [
Story => {
useFetchMock(fetchMock => {
fetchMock.get(
'express:/project/:projectId/wordcount',
{ status: 200, body: { texcount: { ...counts, messages } } },
{ delay: 500 }
)
})
return <Story />
},
],
}
export const ErrorResponse: Story = {
decorators: [
Story => {
useFetchMock(fetchMock => {
fetchMock.get(
'express:/project/:projectId/wordcount',
{ status: 500 },
{ delay: 500 }
)
})
return <Story />
},
],
}