UNPKG

redraw-drawio

Version:

react component for drawio

1 lines 21 kB
{"version":3,"file":"index.cjs","sources":["../src/lib/getEmbedUrl.ts","../src/lib/handleEvents.ts","../src/hooks/use-actions.ts","../src/lib/drawio-embed.tsx"],"sourcesContent":["import { UrlParameters } from '../types';\n\nexport const getEmbedUrl = (\n urlParameters?: UrlParameters,\n addConfiguration?: boolean,\n) => {\n const url = new URL('/', 'https://embed.diagrams.net');\n const urlSearchParams = new URLSearchParams();\n\n urlSearchParams.append('proto', 'json');\n\n if (addConfiguration) {\n urlSearchParams.append('configure', '1');\n }\n\n if (urlParameters) {\n Object.keys(urlParameters).forEach((key) => {\n const value = urlParameters[key as keyof UrlParameters];\n\n if (value) {\n if (typeof value === 'boolean') {\n urlSearchParams.append(key, value ? '1' : '0');\n } else {\n urlSearchParams.append(key, value.toString());\n }\n }\n });\n }\n\n url.search = urlSearchParams.toString();\n\n return url.toString();\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EmbedEvents, EventHandlerMap } from '../types';\n\n/**\n * Type alias for a map of event handlers.\n * It maps each event name to its corresponding handler function,\n * which receives the event data typed to the specific event type.\n */\n// export type EventHandler = {\n// [E in EmbedEvents as E['event']]?: (data: E) => void;\n// };\n/**\n * Handles an incoming postMessage event by parsing the data\n * and invoking the appropriate event handler if available.\n *\n * @param event - The MessageEvent received from the postMessage listener.\n * @param handlers - A map of event handlers keyed by the event type.\n */\nexport function handleEvent(\n event: MessageEvent,\n handlers: EventHandlerMap,\n): void {\n // Validate the event origin to ensure it comes from 'embed.diagrams.net'.\n if (!event.origin.includes('embed.diagrams.net')) {\n return;\n }\n // export function handleEvent(event: MessageEvent, handlers: EventHandler) {\n\n try {\n // Attempt to parse the event data as an EmbedEvent.\n const data = JSON.parse(event.data) as EmbedEvents;\n\n // Check if there is a handler for the received event type.\n\n if (isEmbedEvent(data)) {\n const handler = handlers[data.event];\n\n if (handler) {\n // Invoke the handler with the correctly typed data.\n handler(data as any);\n }\n }\n } catch {\n // An empty catch block should be avoided, at least log the error.\n console.error('Failed to handle event');\n }\n}\n\n// Helper type guard function to discriminate the EmbedEvents type\nexport function isEmbedEvent(data: unknown): data is EmbedEvents {\n return typeof data === 'object' && data !== null && 'event' in data;\n}\n","'use client';\nimport { RefObject } from 'react';\nimport {\n ActionConfigure,\n ActionDialog,\n ActionDraft,\n ActionExport,\n ActionLayout,\n ActionLoad,\n ActionMerge,\n ActionPrompt,\n ActionSpinner,\n ActionStatus,\n ActionTemplate,\n EmbedActions,\n EventKey,\n UniqueActionProps,\n // ActionUnion\n} from '../types';\n/**\n * @description A hook to send actions to the draw.io editor\n * @param {RefObject<HTMLIFrameElement | null>} iframeRef\n * @returns {EmbedActions}\n */\nexport const useActions = (iframeRef: RefObject<HTMLIFrameElement | null>) => {\n function sendAction<A extends EventKey>(\n action: A,\n data: UniqueActionProps<EmbedActions>,\n ): void{\n iframeRef.current?.contentWindow?.postMessage(\n JSON.stringify({\n action,\n ...data,\n }),\n '*',\n );\n }\n\n /**\n * Loads the given XML into the editor\n * @param {UniqueActionProps<ActionLoad>} data\n * @returns {void}\n */\n const load = (data: UniqueActionProps<ActionLoad>): void => {\n sendAction('load', data);\n };\n/**\n * Configure the editor\n * @param {UniqueActionProps<ActionConfigure>} data\n * @returns {void}\n */\n const configure = (data: UniqueActionProps<ActionConfigure>): void => {\n sendAction('configure', data);\n };\n /**\n * Merge the contents of the given XML into the current file\n * @param {UniqueActionProps<ActionMerge>} data\n * @returns {void}\n */\n const merge = (data: UniqueActionProps<ActionMerge>): void => {\n sendAction('merge', data);\n };\n /**\n * Display a dialog in the editor window\n * @param {UniqueActionProps<ActionDialog>} data\n * @returns {void}\n */\n const dialog = (data: UniqueActionProps<ActionDialog>): void => {\n sendAction('dialog', data);\n };\n /**\n * Display a prompt in the editor window\n * @param {UniqueActionProps<ActionPrompt>} data\n * @returns {void}\n */\n const prompt = (data: UniqueActionProps<ActionPrompt>): void => {\n sendAction('prompt', data);\n };\n\n /**\n * Show the template dialog\n * @param {UniqueActionProps<ActionTemplate>} data\n * @returns {void}\n */\n const template = (data: UniqueActionProps<ActionTemplate>): void => {\n sendAction('template', data);\n };\n /**\n * Runs an array of layouts using the same format as Arrange > Layout > Apply.\n * @param {UniqueActionProps<ActionLayout>} data\n * @returns {void}\n */\n const layout = (data: UniqueActionProps<ActionLayout>): void => {\n sendAction('layout', data);\n };\n /**\n * Show a draft dialog\n * @param {UniqueActionProps<ActionDraft>} data\n * @returns {void}\n */\n const draft = (data: UniqueActionProps<ActionDraft>): void => {\n sendAction('draft', data);\n };\n /**\n * Display a message in the status bar\n * @param {UniqueActionProps<ActionStatus>} data\n * @returns {void}\n */\n const status = (data: UniqueActionProps<ActionStatus>): void => {\n sendAction('status', data);\n };\n /**\n * Display a spinner with a message or hide the current spinner if show is set to false\n * @param {UniqueActionProps<ActionSpinner>} data\n * @returns {void}\n */\n const spinner = (data: UniqueActionProps<ActionSpinner>): void => {\n sendAction('spinner', data);\n };\n /**\n * Export the current diagram\n * @param {UniqueActionProps<ActionExport>} data\n * @returns {void}\n */\n const exportDiagram = (data: UniqueActionProps<ActionExport>): void => {\n sendAction('export', data);\n };\n/**\n * @description A hook to send actions to the draw.io editor\n */\n return {\n load,\n configure,\n merge,\n dialog,\n prompt,\n template,\n layout,\n draft,\n status,\n spinner,\n exportDiagram,\n };\n};\n","'use client';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { DrawIoEmbedProps, DrawIoEmbedRef, EventUnion } from '../types';\nimport { getEmbedUrl } from './getEmbedUrl';\nimport { handleEvent } from './handleEvents';\nimport { useActions } from '../hooks/use-actions';\n/**\n * Draw.io embed component\n * @param {DrawIoEmbedProps} props\n * @param {string} props.urlParameters\n * @param {string} props.configuration\n * @param {string} props.xml\n * @param {(data: any) => void} props.onSave\n * @param {(data: any) => void} props.onClose\n * @param {(data: any) => void} props.onLoad\n * @param {(data: any) => void} props.onConfigure\n * @param {(data: any) => void} props.onDraft\n * @param {(data: any) => void} props.onExport\n * @param {(data: any) => void} props.onMerge\n * @param {(data: any) => void} props.onPrompt\n * @param {(data: any) => void} props.onTemplate\n * @param {React.Ref<DrawIoEmbedRef>} ref\n * @returns {JSX.Element}\n */\nexport const DrawIOEmbed = forwardRef<DrawIoEmbedRef, DrawIoEmbedProps>(\n function DrawIoEmbed(props, ref): JSX.Element {\n const {\n urlParameters,\n configuration,\n xml,\n onSave,\n onClose,\n onLoad,\n onConfigure,\n onDraft,\n onExport,\n onMerge,\n onPrompt,\n onTemplate,\n } = props;\n\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const action = useActions(iframeRef);\n const iframeUrl = getEmbedUrl(urlParameters, !!configuration);\n const [isInitialized, setIsInitialized] = useState(false);\n /**\n * @param {MessageEvent} evt\n * @returns {void}\n */\n const messageHandler = useCallback(\n (evt: MessageEvent) => {\n /**\n * @param {MessageEvent} evt\n * @returns {void}\n */\n handleEvent(evt, {\n /**\n * @returns {void}\n */\n init: (): void => {\n setIsInitialized(true);\n },\n /**\n * @param {EventUnion<\"load\">} data\n * @returns {void}\n */\n load: (data: EventUnion<\"load\">): void => {\n if (onLoad) {\n onLoad(data);\n }\n },\n /**\n * \n * @param {EventUnion<\"configure\">} data\n * @returns {void}\n */\n configure: (data: EventUnion<\"configure\">): void => {\n if (configuration) {\n action.configure({ config: configuration });\n }\n\n if (onConfigure) {\n onConfigure(data);\n }\n },\n /**\n * @param {EventUnion<\"save\">} data\n * @returns {void}\n */\n save: (data: EventUnion<\"save\">): void => {\n action.exportDiagram({\n format: 'xmlsvg',\n exit: data.exit,\n });\n },\n /**\n * @param {EventUnion<\"exit\">} data\n * @returns {void}\n */\n exit: (data: EventUnion<\"exit\">): void => {\n if (onClose) {\n onClose(data);\n }\n },\n /**\n * @param {EventUnion<\"draft\">} data\n * @returns {void}\n */ \n draft: (data: EventUnion<\"draft\">): void => {\n if (onDraft) {\n onDraft(data);\n }\n },\n /**\n * @param {EventUnion<\"export\">} data\n * @returns {void} \n */\n export: (data: EventUnion<\"export\">): void => {\n if (onSave) {\n onSave({\n event: 'save',\n xml: data.data,\n });\n }\n /**\n * Check if exit is true and call onClose\n * @returns {void}\n */\n if (onExport) {\n onExport(data);\n }\n if (data.message.exit && onClose) {\n onClose({\n event: 'exit',\n modified: true,\n });\n }\n },\n /**\n * @param {EventUnion<\"merge\">} data\n * @returns {void}\n */\n merge: (data: EventUnion<\"merge\">): void => {\n if (onMerge) {\n onMerge(data);\n }\n },\n /**\n * @param {EventUnion<'prompt'>} data\n * @returns {void}\n */\n prompt: (data: EventUnion<'prompt'>): void => {\n if (onPrompt) {\n onPrompt(data);\n }\n },\n /**\n * @param {EventUnion<'template'>} data\n * @returns {void}\n */\n template: (data: EventUnion<'template'>): void => {\n if (onTemplate) {\n onTemplate(data);\n }\n },\n });\n },\n [\n action,\n configuration,\n onClose,\n onSave,\n onLoad,\n onConfigure,\n onDraft,\n onExport,\n onMerge,\n onPrompt,\n onTemplate,\n ],\n );\n\n useImperativeHandle(\n /**\n * @param {React.Ref<DrawIoEmbedRef>} ref\n */\n ref,\n () => ({\n /**\n * @param {string} xml\n * @returns {void}\n */\n ...action,\n }),\n [action],\n );\n\n useEffect(() => {\n if (isInitialized) {\n if (xml) {\n action.load({ xml });\n } else {\n action.load({ xml: '' });\n }\n }\n }, [action, isInitialized, xml]);\n\n // Initial load\n useEffect(() => {\n /**\n * Add event listener for messages from iframe\n */\n window.addEventListener('message', messageHandler);\n /**\n * Remove event listener for messages from iframe\n */\n return () => {\n window.removeEventListener('message', messageHandler);\n };\n }, [messageHandler]);\n\n return (\n <iframe\n className=\"diagrams-iframe\"\n src={iframeUrl}\n ref={iframeRef}\n title=\"Diagrams.net\"\n style={{\n width: '100%',\n height: '100%',\n minWidth: '400px',\n minHeight: '400px',\n border: 'none',\n }}\n />\n );\n },\n);\n"],"names":["getEmbedUrl","urlParameters","addConfiguration","url","URL","urlSearchParams","URLSearchParams","append","Object","keys","forEach","key","value","toString","search","handleEvent","event","handlers","origin","includes","data","JSON","parse","isEmbedEvent","handler","console","error","useActions","iframeRef","sendAction","action","current","contentWindow","postMessage","stringify","load","configure","merge","dialog","prompt","template","layout","draft","status","spinner","exportDiagram","DrawIOEmbed","forwardRef","DrawIoEmbed","props","ref","configuration","xml","onSave","onClose","onLoad","onConfigure","onDraft","onExport","onMerge","onPrompt","onTemplate","useRef","iframeUrl","isInitialized","setIsInitialized","useState","messageHandler","useCallback","evt","init","config","save","format","exit","export","message","modified","useImperativeHandle","useEffect","window","addEventListener","removeEventListener","iframe","className","src","title","style","width","height","minWidth","minHeight","border"],"mappings":"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"}