UNPKG

@chief-editor/editor

Version:

FlowEditor Editor

1 lines 2.4 kB
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});var core_1=require("@chief-editor/core"),dom_1=require("@co-hooks/dom"),use_1=require("@rc-hooks/use"),copy_to_clipboard_1=__importDefault(require("copy-to-clipboard")),react_1=require("react"),useEditor_1=require("./useEditor");function useCopyAndPaste(e){var t=e.pasteFile,r=use_1.useRefCallback(t),o=useEditor_1.useEditor(),i=react_1.useCallback((function(e){var t=o.getActiveBricks(),r=o.getActiveBoard();if(!detectEditableElement(e.target||e.srcElement)&&t.length&&r){var i=t.map((function(e){return e.getBrickData(!0)})),a=core_1.LayerMark.getBrickGroupRect(t.map((function(e){return e.id})),r);if(!a)return;var n=a.offset,d=a.sizeOffset,c=n.get(),s=c[0],u=c[1],l=d.get(),p={rect:{left:s,top:u,width:l[0],height:l[1]},data:i};console.log("copy",p),copy_to_clipboard_1.default(JSON.stringify(p),{format:"editorCopy"})}}),[]),a=react_1.useCallback((function(e){var t;if(!detectEditableElement(e.target||e.srcElement)){var i=(null===(t=e.clipboardData)||void 0===t?void 0:t.items)||[];i.length&&i.forEach((function(e){if("string"===e.kind&&"editorcopy"===e.type)e.getAsString((function(e){pasteBrick(o,e)}));else if("file"===e.kind&&e.type.indexOf("image")>-1){var t=e.getAsFile();if(!t)return;console.log(t),r(t,(function(e){var t=o.getHistory(),r=o.getActiveTemplateId(),i=o.getActiveBoard();r&&i&&t.execCommand({name:core_1.CommandType.CREATE_BRICK,templateId:r,options:{bricks:[e],boardId:i.id,index:i.getNode().getChildNodes().length}})}))}}))}}),[]);react_1.useEffect((function(){return dom_1.addEventListener(window,"copy",i),dom_1.addEventListener(window,"paste",a),function(){dom_1.removeEventListener(window,"copy",i),dom_1.removeEventListener(window,"paste",a)}}),[])}function detectEditableElement(e){if(!e)return!1;var t=e.tagName.toUpperCase();return"INPUT"===t||"SELECT"===t||"TEXTAREA"===t||e.isContentEditable}function pasteBrick(e,t){if(t)try{var r=JSON.parse(t),o=r.data,i=r.rect;if(console.log("paste",o),Array.isArray(o)&&o.length&&i){var a=e.getHistory(),n=e.getActiveTemplateId(),d=e.getActiveBoard();if(!n||!d)return;a.execCommand({name:core_1.CommandType.CREATE_BRICK,templateId:n,options:{bricks:o,boardId:d.id,index:d.getNode().getChildNodes().length}})}}catch(e){}}exports.useCopyAndPaste=useCopyAndPaste;