UNPKG

raonkupload-react

Version:

React component for RAON K Upload

540 lines (528 loc) 23.5 kB
/** * @license Copyright (c) 2003-2022, RAONWIZ DevTeam. All rights reserved. */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var raonwizIntegrationsCommon = require('raonwiz-integrations-common'); var PropTypes = require('prop-types'); function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n["default"] = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespace(React); var PropTypes__namespace = /*#__PURE__*/_interopNamespace(PropTypes); var __assign = function() { __assign = Object.assign || function __assign(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; function __rest(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; } function __spreadArray(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); } typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }; var events = [ 'loaded', 'creationComplete', 'destroy', 'beforeAddFile', 'afterAddFile', 'afterAddAllFile', 'beforeDeleteFile', 'afterDeleteFile', 'deleteAllFile', 'beforeUpload', 'uploadComplete', 'beforeDownloadFile', 'beforeOpenFile', 'downloadCompleteFile', 'downloadCompleteAllFile', 'onError', 'uploadingCancel', 'downloadCancel', 'selectItem', 'customAction', 'alert' ]; var namespaceEvents = ['beforeLoad', 'namespaceLoaded']; var defaultEvents = __spreadArray(__spreadArray([], events, true), namespaceEvents, true); var EVENT_PREFIX = '__RKU__'; function prefixEventName(evtName) { return "".concat(EVENT_PREFIX).concat(evtName); } function stripPrefix(prefixedEventName) { return prefixedEventName.substr(EVENT_PREFIX.length); } function eventNameToHandlerName(evtName) { var cap = evtName.substr(0, 1).toUpperCase() + evtName.substr(1); return "on".concat(cap); } function handlerNameToEventName(handlerName) { return handlerName.substr(2, 1).toLowerCase() + handlerName.substr(3); } var ComponentEventAction = __spreadArray(__spreadArray([], events, true), namespaceEvents, true).reduce(function (acc, evtName) { var _a; return __assign(__assign({}, acc), (_a = {}, _a[evtName] = prefixEventName(evtName), _a)); }, {}); function uniqueName() { return Math.random() .toString(36) .replace(/[^a-z]+/g, '') .substr(0, 5); } function registerComponentEventHandler(_a) { var debug = _a.debug, component = _a.component, evtName = _a.evtName, handler = _a.handler; var handlerId = debug && uniqueName(); var _handler = handler; if (debug) { _handler = function (args) { console.log({ logType: "RAONWIZ Log - invoke", operation: 'invoke', component: component, componentName: component.object.ID, evtName: evtName, handlerId: handlerId, eventInfo: args.eventInfo }); return handler(args); }; } if (debug) { console.log({ logType: "RAONWIZ Log - register", operation: 'register', component: component, componentName: component.object.ID, evtName: evtName, handlerId: handlerId }); } RAONKUPLOAD._ExternalAttachEvents(component.object, evtName, _handler); return function () { if (debug) { console.log({ logType: "RAONWIZ Log - unregister", operation: 'unregister', component: component, componentName: component.object.ID, evtName: evtName, handlerId: handlerId }); } }; } var useEffect$1 = React__namespace.useEffect, useReducer = React__namespace.useReducer, useRef$1 = React__namespace.useRef; var defComponentType = 'RAONKUPLOAD'; var defComponentUrl = '/raonkupload/js/raonkupload.js'; var defConfig = {}; function useRaonkUpload(_a) { var debug = _a.debug, element = _a.element, config = _a.config, componentUrl = _a.componentUrl, runtimes = _a.runtimes, dispatchEvent = _a.dispatchEvent, _b = _a.subscribeTo, subscribeTo = _b === void 0 ? defaultEvents : _b; var componentUrlRef = useRef$1(componentUrl || defComponentUrl); var subscribeToRef = useRef$1(subscribeTo !== null && subscribeTo !== void 0 ? subscribeTo : defaultEvents); var debugRef = useRef$1(debug); var dispatchEventRef = useRef$1(dispatchEvent); var configRef = useRef$1(config || defConfig); var runtimesRef = useRef$1(runtimes); var _c = useReducer(reducer, { component: undefined, hookStatus: 'init' }), _d = _c[0], component = _d.component, hookStatus = _d.hookStatus, dispatch = _c[1]; useEffect$1(function () { if (element && !component) { dispatch({ type: 'loading' }); var onNamespaceLoaded = function (namespace) { var _a; if (subscribeToRef.current.indexOf('namespaceLoaded') !== -1) { (_a = dispatchEventRef.current) === null || _a === void 0 ? void 0 : _a.call(dispatchEventRef, { type: ComponentEventAction.namespaceLoaded, payload: namespace }); } }; var initComponent = function (namespace) { var _a; if (subscribeToRef.current.indexOf('beforeLoad') !== -1) { (_a = dispatchEventRef.current) === null || _a === void 0 ? void 0 : _a.call(dispatchEventRef, { type: ComponentEventAction.beforeLoad, payload: namespace }); } if (typeof namespace['_ExternalMakeComponent'] === 'undefined') { _ExternalMakeComponent(namespace); } if (typeof namespace['_ExternalSetDestroyEvent'] === 'undefined') { _ExternalSetDestroyEvent(namespace); } if (typeof namespace['_ExternalAttachEvents'] === 'undefined') { _ExternalAttachEvents(namespace); } (typeof runtimesRef.current !== 'undefined') && (configRef.current.Runtimes = runtimesRef.current); if (debug) { console.log({ logType: "RAONWIZ Log - initComponent", operation: 'makeComponent config', configRef: configRef.current, runtimesRef: runtimesRef.current, componentName: element.id, }); } var component = namespace['_ExternalMakeComponent'](element, configRef.current); var subscribedComponentEvents = subscribeToRef.current.filter(function (evtName) { return namespaceEvents.indexOf(evtName) === -1; }); subscribedComponentEvents.forEach(function (evtName) { registerComponentEventHandler({ debug: debugRef.current, component: component, evtName: evtName, handler: function (payload) { var _a; return (_a = dispatchEventRef.current) === null || _a === void 0 ? void 0 : _a.call(dispatchEventRef, { type: "".concat(EVENT_PREFIX).concat(evtName), payload: payload }); } }); }); registerComponentEventHandler({ debug: debugRef.current, component: component, evtName: 'loaded', handler: function () { dispatch({ type: 'loaded' }); } }); registerComponentEventHandler({ debug: debugRef.current, component: component, evtName: 'creationComplete', handler: function (_a) { _a.component; dispatch({ type: 'ready' }); } }); registerComponentEventHandler({ debug: debugRef.current, component: component, evtName: 'destroy', handler: function () { dispatch({ type: 'destroyed' }); } }); dispatch({ type: 'unloaded', payload: component }); }; raonwizIntegrationsCommon.getRaonwizComponentNamespace(defComponentType, componentUrlRef.current, onNamespaceLoaded) .then(initComponent) .catch(function (error) { if (process.env.NODE_ENV !== 'test') { console.error(error); } dispatch({ type: 'error' }); }); } return function () { if (component && component.object && component.object.ID && document.getElementById(component.object.ID) === null && RAONKUPLOAD) { if (RAONKUPLOAD._ExternalLoadedEventMap.has(component.object.ID)) { RAONKUPLOAD._ExternalLoadedEventMap.delete(component.object.ID); } if (RAONKUPLOAD._ExternalCreationCompleteEventMap.has(component.object.ID)) { RAONKUPLOAD._ExternalCreationCompleteEventMap.delete(component.object.ID); } if (RAONKUPLOAD._ExternalDestroyEventMap.has(component.object.ID)) { RAONKUPLOAD._ExternalDestroyEventMap.delete(component.object.ID); } RAONKUPLOAD.Destroy(component.object.ID, true); } }; }, [component, element]); return { component: component, status: component === null || component === void 0 ? void 0 : component.status, error: hookStatus === 'error', loading: hookStatus === 'loading' }; } function reducer(state, action) { switch (action.type) { case 'init': return __assign(__assign({}, state), { hookStatus: 'init' }); case 'loading': return __assign(__assign({}, state), { hookStatus: 'loading' }); case 'unloaded': return { component: action.payload, hookStatus: 'unloaded' }; case 'loaded': return __assign(__assign({}, state), { hookStatus: 'loaded' }); case 'ready': return __assign(__assign({}, state), { hookStatus: 'ready' }); case 'destroyed': return { component: undefined, hookStatus: 'destroyed' }; case 'error': return { component: undefined, hookStatus: 'error' }; default: return state; } } function _ExternalMakeComponent(namespace) { namespace['_ExternalMakeComponent'] = function (element, options) { if (typeof RAONKUPLOAD._ExternalCreationCompleteEventMap === 'undefined') { RAONKUPLOAD._ExternalLoadedEventMap = new Map(); } if (typeof RAONKUPLOAD._ExternalCreationCompleteEventMap === 'undefined') { RAONKUPLOAD._ExternalCreationCompleteEventMap = new Map(); } if (typeof RAONKUPLOAD._ExternalDestroyEventMap === 'undefined') { RAONKUPLOAD._ExternalDestroyEventMap = new Map(); } RAONKUPLOAD._ExternalLoadedEventMap.set(element.id, []); RAONKUPLOAD._ExternalCreationCompleteEventMap.set(element.id, []); RAONKUPLOAD._ExternalDestroyEventMap.set(element.id, []); namespace._ExternalDestroy = true; var _compConfig = { Id: element.id, UploadHolder: element.id }; _compConfig = namespace.util.objectExtend(true, options, _compConfig); var _componentObject = new RAONKUpload(_compConfig); return { object: _componentObject, status: 'ready' }; }; } function _ExternalAttachEvents(namespace) { namespace['_ExternalAttachEvents'] = function (componentObj, eventName, callbackFn) { var _componentConfig = componentObj._config; var _callbackFn = callbackFn; switch (eventName) { case "loaded": var _tempExternalLoadedEventListHT = RAONKUPLOAD._ExternalLoadedEventMap.get(componentObj.ID); _tempExternalLoadedEventListHT.push(_callbackFn); RAONKUPLOAD._ExternalLoadedEventMap.set(componentObj.ID, _tempExternalLoadedEventListHT); break; case "creationComplete": if (typeof (_componentConfig.event[eventName]) == 'function') { break; } var _tempExternalCreationCompleteEventListHT = RAONKUPLOAD._ExternalCreationCompleteEventMap.get(componentObj.ID); _tempExternalCreationCompleteEventListHT.push(_callbackFn); RAONKUPLOAD._ExternalCreationCompleteEventMap.set(componentObj.ID, _tempExternalCreationCompleteEventListHT); var _dummyFn1 = function (componentName, paramObj) { var _tempLoaded = RAONKUPLOAD._ExternalLoadedEventMap.get(componentObj.ID); for (var _idx = 0, _len = _tempLoaded.length; _idx < _len; _idx++) { try { _tempLoaded[_idx]({ eventInfo: { componentName: componentName, paramObj: paramObj } }); } catch (e) { } } var _tempCreationComplete = RAONKUPLOAD._ExternalCreationCompleteEventMap.get(componentObj.ID); for (var _idx = 0, _len = _tempCreationComplete.length; _idx < _len; _idx++) { try { _tempCreationComplete[_idx]({ eventInfo: { componentName: componentName, paramObj: paramObj } }); } catch (e) { } } namespace._ExternalSetDestroyEvent(componentObj.ID); }; _componentConfig.event[eventName] = _dummyFn1; break; default: var _dummyFn2 = function (componentName, paramObj) { if (_callbackFn) { try { return _callbackFn({ eventInfo: { componentName: componentName, paramObj: paramObj } }); } catch (e) { } } }; _componentConfig.event[eventName] = _dummyFn2; } }; } function _ExternalSetDestroyEvent(namespace) { namespace['_ExternalSetDestroyEvent'] = function (componentName) { var _domNodeRemovedTargetNode; var _targetElem; if (typeof MutationObserver === 'function') { _targetElem = document.getElementById("raonkuploader_holder_" + componentName); if (_targetElem) { _domNodeRemovedTargetNode = _targetElem; } else { _domNodeRemovedTargetNode = document.getElementById("raonkuploader_frame_" + componentName); } if (_domNodeRemovedTargetNode) { new MutationObserver(function () { var _tempDestroy = RAONKUPLOAD._ExternalDestroyEventMap.get(componentName); var uploader = RAONKUPLOAD.GetUploadByName(componentName); if (typeof _tempDestroy !== 'undefined' && _tempDestroy.length > 0) { for (var _idx = 0, _len = _tempDestroy.length; _idx < _len; _idx++) { try { _tempDestroy[_idx]({ eventInfo: { componentName: componentName, paramObj: undefined } }); } catch (e) { } } } else if (!!uploader && typeof uploader._config !== 'undefined' && typeof uploader._config.event.destroy === 'function') { try { uploader._config.event.destroy({ eventInfo: { componentName: componentName, paramObj: undefined } }); } catch (e) { } } else if (typeof KUPLOADTOP.KUPLOADWIN.RAONKUPLOAD_Destroy === 'function') { try { KUPLOADTOP.KUPLOADWIN.RAONKUPLOAD_Destroy({ eventInfo: { componentName: componentName, paramObj: undefined } }); } catch (e) { } } }).observe(_domNodeRemovedTargetNode, { childList: true }); } } else { _targetElem = document.getElementById("raonkuploader_frame_" + componentName); if (_targetElem) { _domNodeRemovedTargetNode = _targetElem; } if (_domNodeRemovedTargetNode) { _domNodeRemovedTargetNode.addEventListener('DOMNodeRemoved', function (e) { var _tempDestroy = RAONKUPLOAD._ExternalDestroyEventMap.get(componentName); if (typeof _tempDestroy !== 'undefined' && _tempDestroy.length > 0) { for (var _idx = 0, _len = _tempDestroy.length; _idx < _len; _idx++) { try { _tempDestroy[_idx]({ eventInfo: { componentName: componentName, paramObj: undefined } }); } catch (e) { } } } else if (!!KUPLOADTOP.G_CURRKUPLOADER && typeof KUPLOADTOP.G_CURRKUPLOADER._config !== 'undefined' && typeof KUPLOADTOP.G_CURRKUPLOADER._config.event.destroy === 'function') { try { KUPLOADTOP.G_CURRKUPLOADER._config.event.destroy({ eventInfo: { componentName: componentName, paramObj: undefined } }); } catch (e) { } } else if (typeof KUPLOADTOP.KUPLOADWIN.RAONKUPLOAD_Destroy === 'function') { try { KUPLOADTOP.KUPLOADWIN.RAONKUPLOAD_Destroy({ eventInfo: { componentName: componentName, paramObj: undefined } }); } catch (e) { } } }, false); } } }; } var useEffect = React__namespace.useEffect, useRef = React__namespace.useRef, useState = React__namespace.useState; function getComponentUniqueName() { return 'raonkupload_' + Math.random() .toString(36) .replace(/[^a-z]+/g, '') .substr(0, 5); } function RaonkUpload(_a) { var debug = _a.debug, _b = _a.id, id = _b === void 0 ? getComponentUniqueName() : _b, _c = _a.config, config = _c === void 0 ? {} : _c, componentUrl = _a.componentUrl, runtimes = _a.runtimes, mode = _a.mode, handlers = __rest(_a, ["debug", "id", "config", "componentUrl", "runtimes", "mode"]); var _d = useState(null), element = _d[0], setElement = _d[1]; var refs = useRef(handlers); var dispatchEvent = function (_a) { var type = _a.type, payload = _a.payload; var handlerName = eventNameToHandlerName(stripPrefix(type)); var handler = refs.current[handlerName]; if (handler) { return handler(payload); } }; if (config && typeof mode === 'string') { config.Mode = mode; } var _e = useRaonkUpload({ debug: debug, element: element, config: config, componentUrl: componentUrl, runtimes: runtimes, dispatchEvent: dispatchEvent, subscribeTo: Object.keys(handlers) .filter(function (key) { return key.indexOf('on') === 0; }) .map(handlerNameToEventName) }), component = _e.component, status = _e.status; useEffect(function () { if (component && status === 'ready' && typeof mode === 'string') { var _isLoadedComponent = RAONKUPLOAD.IsLoadedUploadEx(component.object.ID); if (debug) { console.log({ logType: 'RAONWIZ Log - useEffect', operation: 'useEffect', component: component, componentName: component.object.ID, mode: mode, status: status, IsLoadedComponentEx: _isLoadedComponent }); } (_isLoadedComponent) && (RAONKUPLOAD.SetUploadMode(mode, component.object.ID)); } }, [component, status, mode]); return (React__namespace.createElement("div", { id: id !== null && id !== void 0 ? id : undefined, ref: setElement })); } var propTypes = __assign({ config: PropTypes__namespace.object, debug: PropTypes__namespace.bool, componentUrl: PropTypes__namespace.string, id: PropTypes__namespace.string, mode: PropTypes__namespace.oneOf(['edit', 'view']), runtimes: PropTypes__namespace.oneOf(['html5', 'agent']) }, defaultEvents.reduce(function (acc, key) { var _a; return __assign(__assign({}, acc), (_a = {}, _a[eventNameToHandlerName(key)] = PropTypes__namespace.func, _a)); }, {})); RaonkUpload.propTypes = propTypes; exports.ComponentEventAction = ComponentEventAction; exports.RaonkUpload = RaonkUpload; exports.prefixEventName = prefixEventName; exports.registerComponentEventHandler = registerComponentEventHandler; exports.stripPrefix = stripPrefix; exports.useRaonkUpload = useRaonkUpload;