diff --git a/types/markdown-draft-js/index.d.ts b/types/markdown-draft-js/index.d.ts index 83f8737cb4..49fbbd9f5e 100644 --- a/types/markdown-draft-js/index.d.ts +++ b/types/markdown-draft-js/index.d.ts @@ -4,8 +4,48 @@ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 3.0 -import { RawDraftContentState } from 'draft-js'; +import { RawDraftContentState, Entity } from 'draft-js'; -export function markdownToDraft(markdown: string): RawDraftContentState; +export interface BlockEntitiesParam { + [key: string]: (item?: { [key: string]: any }) => Entity; +} -export function draftToMarkdown(RawDraft: RawDraftContentState): string; +export interface BlockTypesParam { + [key: string]: (item?: { + [key: string]: any; + }) => { + [key: string]: any; + }; +} + +export interface MarkdownToDraftOptions { + blockEntities?: BlockEntitiesParam; + blockStyles?: { + [key: string]: string; + }; + blockTypes?: BlockTypesParam; + remarkableOptions?: { + [key: string]: boolean | {}; + }; + remarkablePlugins?: any[]; + remarkablePreset?: string; +} + +export interface DraftToMarkdownOptions { + entityItems?: { + [key: string]: { + open: (entity?: Entity) => string; + close: (entity?: Entity) => string; + }; + }; + styleItems?: { + [key: string]: { + open: () => string; + close: () => string; + }; + }; +} + +export function markdownToDraft(markdown: string, options?: MarkdownToDraftOptions): RawDraftContentState; + +export function draftToMarkdown(RawDraft: RawDraftContentState, options?: DraftToMarkdownOptions): string; diff --git a/types/markdown-draft-js/markdown-draft-js-tests.ts b/types/markdown-draft-js/markdown-draft-js-tests.ts index c4bb5256f0..68a6311cf0 100644 --- a/types/markdown-draft-js/markdown-draft-js-tests.ts +++ b/types/markdown-draft-js/markdown-draft-js-tests.ts @@ -4,5 +4,116 @@ import { draftToMarkdown, markdownToDraft } from 'markdown-draft-js'; const rawContent = convertToRaw(EditorState.createEmpty().getCurrentContent()); draftToMarkdown(rawContent); +// Handle options.styleItems +draftToMarkdown(rawContent, { + styleItems: { + RED: { + open() { + return ''; + }, + + close() { + return ''; + }, + }, + }, +}); + +// Handle options.entityItems +draftToMarkdown(rawContent, { + entityItems: { + mention: { + open: () => { + return ''; + }, + + close: () => { + return ''; + }, + }, + }, +}); + +// Handle markdown param const rawDraft = markdownToDraft('# Test'); convertFromRaw(rawDraft); + +// Handle options.blockEntities without arguments and options.remarkablePlugins +const rawDraftWithBlockEntities = markdownToDraft('# Test', { + blockEntities: { + link_open: () => { + return { + type: 'LINK', + mutability: 'MUTABLE', + }; + }, + }, + remarkablePlugins: [{}], +}); +convertFromRaw(rawDraftWithBlockEntities); + +// Handle options.blockEntities with argument +const rawDraftWithBlockEntitiesArguments = markdownToDraft('# Test', { + blockEntities: { + link_open: item => { + const data = item && { + url: item.href, + href: item.href, + }; + return { + type: 'LINK', + mutability: 'MUTABLE', + data, + }; + }, + }, +}); +convertFromRaw(rawDraftWithBlockEntitiesArguments); + +// Handle options.blockStyles +const rawDraftWithBlockStyles = markdownToDraft('# Test', { + blockStyles: { + code: 'CODE', + }, +}); +convertFromRaw(rawDraftWithBlockStyles); + +// Handle options.blockTypes without arguments +const rawDraftWithBlockTypes = markdownToDraft('# Test', { + blockTypes: { + paragraph_open: () => { + return { + type: 'unstyled', + text: '', + entityRanges: [], + inlineStyleRanges: [], + }; + }, + }, +}); +convertFromRaw(rawDraftWithBlockTypes); + +// Handle options.blockTypes with argument +const rawDraftWithBlockTypesArguments = markdownToDraft('# Test', { + blockTypes: { + paragraph_open: item => { + const text = item ? item.text : ''; + return { + type: 'unstyled', + text, + entityRanges: [], + inlineStyleRanges: [], + }; + }, + }, +}); +convertFromRaw(rawDraftWithBlockTypesArguments); + +// Handle options.remarkablePreset and options.remarkableOptions +const rawDraftWithRemarkablePreset = markdownToDraft('# Test', { + remarkablePreset: 'commonmark', + remarkableOptions: { + html: true, + }, +}); +convertFromRaw(rawDraftWithRemarkablePreset);