pdf-log-entry.stories.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import PdfLogEntry from '@/features/pdf-preview/components/pdf-log-entry'
  2. import type { Meta, StoryObj } from '@storybook/react-webpack5'
  3. import { ruleIds } from '@/ide/human-readable-logs/HumanReadableLogsHints'
  4. import { ScopeDecorator } from './decorators/scope'
  5. import { useMeta } from './hooks/use-meta'
  6. import { FC, ReactNode } from 'react'
  7. import { EditorViewContext } from '@/features/ide-react/context/editor-view-context'
  8. import { EditorView } from '@codemirror/view'
  9. import { LogEntry } from '@/features/pdf-preview/util/types'
  10. const fakeSourceLocation = {
  11. file: 'file.tex',
  12. line: 12,
  13. column: 5,
  14. }
  15. const fakeLogEntry: LogEntry = {
  16. key: 'fake',
  17. ruleId: 'hint_misplaced_alignment_tab_character',
  18. message: 'Fake message',
  19. messageComponent: 'Fake message component',
  20. content: 'Fake content',
  21. type: 'Error: ',
  22. level: 'error',
  23. contentDetails: ['Fake detail 1', 'Fake detail 2'],
  24. file: 'fake.tex',
  25. line: 12,
  26. column: 5,
  27. raw: 'Fake raw',
  28. }
  29. const fakeArgs = {
  30. headerTitle: 'PDF Preview',
  31. formattedContent: 'This is a log entry',
  32. level: 'error' as const,
  33. extraInfoURL: 'https://example.com',
  34. showSourceLocationLink: true,
  35. rawContent: 'This is a raw log entry',
  36. contentDetails: ['detail 1', 'detail 2'],
  37. ruleId: 'hint_misplaced_alignment_tab_character' as const,
  38. sourceLocation: fakeSourceLocation,
  39. logEntry: fakeLogEntry,
  40. logType: 'Fake type',
  41. }
  42. const meta: Meta<typeof PdfLogEntry> = {
  43. title: 'Editor / PDF Preview / Logs',
  44. component: PdfLogEntry,
  45. // @ts-ignore
  46. decorators: [ScopeDecorator],
  47. argTypes: {
  48. ruleId: { control: 'select', options: [...ruleIds, 'other'] },
  49. },
  50. args: fakeArgs,
  51. }
  52. export default meta
  53. type Story = StoryObj<typeof PdfLogEntry>
  54. const MockEditorViewProvider: FC<React.PropsWithChildren> = ({ children }) => {
  55. const value = {
  56. view: new EditorView({
  57. doc: '\\begin{document',
  58. }),
  59. setView: () => {},
  60. }
  61. return (
  62. <EditorViewContext.Provider value={value}>
  63. {children}
  64. </EditorViewContext.Provider>
  65. )
  66. }
  67. const Provider: FC<React.PropsWithChildren<{ children: ReactNode }>> = ({
  68. children,
  69. }) => {
  70. useMeta({ 'ol-showAiFeatures': true })
  71. return (
  72. <MockEditorViewProvider>
  73. <div className="logs-pane p-2">{children}</div>
  74. </MockEditorViewProvider>
  75. )
  76. }
  77. export const PdfLogEntryWithControls: Story = {
  78. render: args => (
  79. <Provider>
  80. <PdfLogEntry {...args} />
  81. </Provider>
  82. ),
  83. }