UNPKG

merchi_product_form

Version:
228 lines (227 loc) 33 kB
'use client'; function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } import * as React from 'react'; import { useState } from 'react'; import { isBoolean, isArray } from 'lodash'; import { IconFile } from './icons'; import { allowedFileTypes } from './utils'; import DropzoneInput from './DropzoneInput'; import InputHiddenStatic from './InputHiddenStatic'; import VariationError from './VariationError'; import VariationLabel from './VariationLabel'; import Collapse from './Collapse'; import { useFieldArray } from 'react-hook-form'; import { FaChevronDown, FaChevronUp, FaDownload, FaTimes, FaTrash } from 'react-icons/fa'; import { CgSpinner } from 'react-icons/cg'; import { useMerchiFormContext } from '../context/MerchiProductFormProvider'; import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; var LoadingIcon = function LoadingIcon() { return /*#__PURE__*/_jsx(CgSpinner, { className: "animate_spin" }); }; function FileListItem(_ref) { var file = _ref.file, disabled = _ref.disabled, doDelete = _ref.doDelete, loading = _ref.loading; var _useMerchiFormContext = useMerchiFormContext(), classNameFileListItem = _useMerchiFormContext.classNameFileListItem, classNameFileButtonDownload = _useMerchiFormContext.classNameFileButtonDownload, classNameFileButtonDelete = _useMerchiFormContext.classNameFileButtonDelete; return /*#__PURE__*/_jsx("li", { className: classNameFileListItem, children: /*#__PURE__*/_jsxs("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '2.5rem' }, children: [/*#__PURE__*/_jsx("span", { className: "ml-3", children: file.name }), !disabled && /*#__PURE__*/_jsxs("div", { style: { marginLeft: 'auto' }, children: [/*#__PURE__*/_jsx("a", { className: classNameFileButtonDownload, href: file.downloadUrl, download: true, children: /*#__PURE__*/_jsx(FaDownload, {}) }), doDelete && /*#__PURE__*/_jsx("button", { className: classNameFileButtonDelete, onClick: doDelete, disabled: Boolean(loading), children: loading ? /*#__PURE__*/_jsx(LoadingIcon, {}) : /*#__PURE__*/_jsx(FaTrash, {}) })] })] }) }); } function VariationFilesList(_ref2) { var files = _ref2.files; var _useMerchiFormContext2 = useMerchiFormContext(), classNameFileListItemContainer = _useMerchiFormContext2.classNameFileListItemContainer; return /*#__PURE__*/_jsx("ul", { className: classNameFileListItemContainer, children: files.map(function (f, i) { return /*#__PURE__*/_jsx(FileListItem, { file: f }, "".concat(i, "-publicfile")); }) }); } function determineBoolean(value) { return isBoolean(value) ? value : value === 'true' ? true : false; } function VariationFile(_ref3) { var deleteVariationFile = _ref3.deleteVariationFile, file = _ref3.file, index = _ref3.index, inputName = _ref3.inputName; var _useMerchiFormContext3 = useMerchiFormContext(), classNameFilePreviewContainer = _useMerchiFormContext3.classNameFilePreviewContainer, classNameFilePreviewIconWrapper = _useMerchiFormContext3.classNameFilePreviewIconWrapper; return /*#__PURE__*/_jsxs("div", { className: classNameFilePreviewContainer, onClick: function onClick() { return deleteVariationFile(file); }, children: [/*#__PURE__*/_jsx("div", { className: classNameFilePreviewIconWrapper, onClick: function onClick() { return deleteVariationFile(file); }, children: /*#__PURE__*/_jsx(FaTimes, { className: "close-icon" }) }), /*#__PURE__*/_jsx(IconFile, { file: file }), /*#__PURE__*/_jsx(InputHiddenStatic, { name: "".concat(inputName, "[").concat(index, "].id"), rules: { required: true }, value: file.id })] }); } function ButtonUploadedFiles(_ref4) { var files = _ref4.files, isOpen = _ref4.isOpen, onClick = _ref4.onClick; var hasFiles = Array.isArray(files) && files.length > 0; var text = files.length !== 1 ? "".concat(files.length, " files selected") : '1 file selected'; var Icon = isOpen ? FaChevronUp : FaChevronDown; var _useMerchiFormContext4 = useMerchiFormContext(), classNameFileUploadButton = _useMerchiFormContext4.classNameFileUploadButton; return /*#__PURE__*/_jsxs("button", { type: "button", className: classNameFileUploadButton, disabled: files.length === 0, onClick: onClick, children: [hasFiles ? text : 'No files selected', ' ', hasFiles && /*#__PURE__*/_jsx(Icon, {})] }); } function VariationFileInput(_ref5) { var disabled = _ref5.disabled, name = _ref5.name, variation = _ref5.variation; var _useMerchiFormContext5 = useMerchiFormContext(), classNameFileUploadContainer = _useMerchiFormContext5.classNameFileUploadContainer, control = _useMerchiFormContext5.control; var inputName = "".concat(name, ".variationFiles"); var variationField = variation.variationField; var allowFileMultiple = variationField.allowFileMultiple, placeholder = variationField.placeholder, required = variationField.required, showFilePreview = variationField.showFilePreview; var _useFieldArray = useFieldArray({ control: control, keyName: 'fileId', name: inputName, rules: { required: required } }), append = _useFieldArray.append, fields = _useFieldArray.fields, remove = _useFieldArray.remove; var hasFiles = isArray(fields) && fields.length; var _useState = useState(Boolean(hasFiles)), _useState2 = _slicedToArray(_useState, 2), isOpen = _useState2[0], setIsOpen = _useState2[1]; var toggle = function toggle() { return setIsOpen(!isOpen); }; var _allowFileMultiple = determineBoolean(allowFileMultiple); var _showFilePreview = determineBoolean(showFilePreview); function handleUploadSuccess(fs) { if (_allowFileMultiple) { append(fs); } else { if (hasFiles) remove(0); append(fs); } } return /*#__PURE__*/_jsxs("div", { className: classNameFileUploadContainer, children: [/*#__PURE__*/_jsx(VariationLabel, { variationClassName: "merchi-embed-form_input-file", variation: variation }), /*#__PURE__*/_jsx(DropzoneInput, { accept: allowedFileTypes(variationField), disabled: disabled, multiple: allowFileMultiple, onUploadSuccess: handleUploadSuccess, placeholder: placeholder }), /*#__PURE__*/_jsx(VariationError, { name: name }), /*#__PURE__*/_jsx("div", { className: "uploaded-variation-files", children: fields.map(function (file, index) { return _showFilePreview ? /*#__PURE__*/_jsx("fieldset", { className: "d-inline-block mr-2", children: /*#__PURE__*/_jsx(VariationFile, { deleteVariationFile: function deleteVariationFile() { return remove(index); }, file: file, index: index, inputName: inputName }, "".concat(name, "-file-key-").concat(index)) }, file.fileId) : /*#__PURE__*/_jsx(InputHiddenStatic, { name: "".concat(inputName, "[").concat(index, "].id"), rules: { required: true }, value: file.id }, "".concat(name, "-file-key-").concat(index)); }) }), !_showFilePreview && /*#__PURE__*/_jsxs(_Fragment, { children: [/*#__PURE__*/_jsx(Collapse, { isOpen: Boolean(isOpen), children: /*#__PURE__*/_jsx(VariationFilesList, { files: fields }) }), /*#__PURE__*/_jsx("div", { className: "clearfix mb-3", children: /*#__PURE__*/_jsx(ButtonUploadedFiles, { files: fields, isOpen: isOpen, onClick: toggle }) })] })] }); } export default VariationFileInput; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsInIiLCJlIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJsZW5ndGgiLCJuIiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaSIsInUiLCJmIiwibyIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiaXNBcnJheSIsIlJlYWN0IiwidXNlU3RhdGUiLCJpc0Jvb2xlYW4iLCJJY29uRmlsZSIsImFsbG93ZWRGaWxlVHlwZXMiLCJEcm9wem9uZUlucHV0IiwiSW5wdXRIaWRkZW5TdGF0aWMiLCJWYXJpYXRpb25FcnJvciIsIlZhcmlhdGlvbkxhYmVsIiwiQ29sbGFwc2UiLCJ1c2VGaWVsZEFycmF5IiwiRmFDaGV2cm9uRG93biIsIkZhQ2hldnJvblVwIiwiRmFEb3dubG9hZCIsIkZhVGltZXMiLCJGYVRyYXNoIiwiQ2dTcGlubmVyIiwidXNlTWVyY2hpRm9ybUNvbnRleHQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJMb2FkaW5nSWNvbiIsImNsYXNzTmFtZSIsIkZpbGVMaXN0SXRlbSIsIl9yZWYiLCJmaWxlIiwiZGlzYWJsZWQiLCJkb0RlbGV0ZSIsImxvYWRpbmciLCJfdXNlTWVyY2hpRm9ybUNvbnRleHQiLCJjbGFzc05hbWVGaWxlTGlzdEl0ZW0iLCJjbGFzc05hbWVGaWxlQnV0dG9uRG93bmxvYWQiLCJjbGFzc05hbWVGaWxlQnV0dG9uRGVsZXRlIiwiY2hpbGRyZW4iLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJtaW5IZWlnaHQiLCJtYXJnaW5MZWZ0IiwiaHJlZiIsImRvd25sb2FkVXJsIiwiZG93bmxvYWQiLCJvbkNsaWNrIiwiQm9vbGVhbiIsIlZhcmlhdGlvbkZpbGVzTGlzdCIsIl9yZWYyIiwiZmlsZXMiLCJfdXNlTWVyY2hpRm9ybUNvbnRleHQyIiwiY2xhc3NOYW1lRmlsZUxpc3RJdGVtQ29udGFpbmVyIiwibWFwIiwiY29uY2F0IiwiZGV0ZXJtaW5lQm9vbGVhbiIsIlZhcmlhdGlvbkZpbGUiLCJfcmVmMyIsImRlbGV0ZVZhcmlhdGlvbkZpbGUiLCJpbmRleCIsImlucHV0TmFtZSIsIl91c2VNZXJjaGlGb3JtQ29udGV4dDMiLCJjbGFzc05hbWVGaWxlUHJldmlld0NvbnRhaW5lciIsImNsYXNzTmFtZUZpbGVQcmV2aWV3SWNvbldyYXBwZXIiLCJydWxlcyIsInJlcXVpcmVkIiwiaWQiLCJCdXR0b25VcGxvYWRlZEZpbGVzIiwiX3JlZjQiLCJpc09wZW4iLCJoYXNGaWxlcyIsInRleHQiLCJJY29uIiwiX3VzZU1lcmNoaUZvcm1Db250ZXh0NCIsImNsYXNzTmFtZUZpbGVVcGxvYWRCdXR0b24iLCJ0eXBlIiwiVmFyaWF0aW9uRmlsZUlucHV0IiwiX3JlZjUiLCJ2YXJpYXRpb24iLCJfdXNlTWVyY2hpRm9ybUNvbnRleHQ1IiwiY2xhc3NOYW1lRmlsZVVwbG9hZENvbnRhaW5lciIsImNvbnRyb2wiLCJ2YXJpYXRpb25GaWVsZCIsImFsbG93RmlsZU11bHRpcGxlIiwicGxhY2Vob2xkZXIiLCJzaG93RmlsZVByZXZpZXciLCJfdXNlRmllbGRBcnJheSIsImtleU5hbWUiLCJhcHBlbmQiLCJmaWVsZHMiLCJyZW1vdmUiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwic2V0SXNPcGVuIiwidG9nZ2xlIiwiX2FsbG93RmlsZU11bHRpcGxlIiwiX3Nob3dGaWxlUHJldmlldyIsImhhbmRsZVVwbG9hZFN1Y2Nlc3MiLCJmcyIsInZhcmlhdGlvbkNsYXNzTmFtZSIsImFjY2VwdCIsIm11bHRpcGxlIiwib25VcGxvYWRTdWNjZXNzIiwiZmlsZUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvVmFyaWF0aW9uRmlsZUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xyXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgaXNCb29sZWFuLCBpc0FycmF5IH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgSWNvbkZpbGUgfSBmcm9tICcuL2ljb25zJztcclxuaW1wb3J0IHsgYWxsb3dlZEZpbGVUeXBlcyB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgRHJvcHpvbmVJbnB1dCBmcm9tICcuL0Ryb3B6b25lSW5wdXQnO1xyXG5pbXBvcnQgSW5wdXRIaWRkZW5TdGF0aWMgZnJvbSAnLi9JbnB1dEhpZGRlblN0YXRpYyc7XHJcbmltcG9ydCBWYXJpYXRpb25FcnJvciBmcm9tICcuL1ZhcmlhdGlvbkVycm9yJztcclxuaW1wb3J0IFZhcmlhdGlvbkxhYmVsIGZyb20gJy4vVmFyaWF0aW9uTGFiZWwnO1xyXG5pbXBvcnQgQ29sbGFwc2UgZnJvbSAnLi9Db2xsYXBzZSc7XHJcbmltcG9ydCB7IHVzZUZpZWxkQXJyYXkgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xyXG5pbXBvcnQge1xyXG4gIEZhQ2hldnJvbkRvd24sXHJcbiAgRmFDaGV2cm9uVXAsXHJcbiAgRmFEb3dubG9hZCxcclxuICBGYVRpbWVzLFxyXG4gIEZhVHJhc2gsXHJcbn0gZnJvbSAncmVhY3QtaWNvbnMvZmEnO1xyXG5pbXBvcnQgeyBDZ1NwaW5uZXIgfSBmcm9tICdyZWFjdC1pY29ucy9jZyc7XHJcbmltcG9ydCB7IHVzZU1lcmNoaUZvcm1Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9NZXJjaGlQcm9kdWN0Rm9ybVByb3ZpZGVyJztcclxuXHJcbmNvbnN0IExvYWRpbmdJY29uID0gKCkgPT4gPENnU3Bpbm5lciBjbGFzc05hbWU9J2FuaW1hdGVfc3BpbicgLz47XHJcblxyXG5pbnRlcmZhY2UgUHJvcHNGaWxlTGlzdEl0ZW0ge1xyXG4gIGZpbGU6IGFueTtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgZG9EZWxldGU/OiAoKSA9PiB2b2lkO1xyXG4gIGxvYWRpbmc/OiBib29sZWFuO1xyXG59XHJcblxyXG5mdW5jdGlvbiBGaWxlTGlzdEl0ZW0oe1xyXG4gIGZpbGUsXHJcbiAgZGlzYWJsZWQsXHJcbiAgZG9EZWxldGUsXHJcbiAgbG9hZGluZyxcclxufTogUHJvcHNGaWxlTGlzdEl0ZW0pIHtcclxuICBjb25zdCB7XHJcbiAgICBjbGFzc05hbWVGaWxlTGlzdEl0ZW0sXHJcbiAgICBjbGFzc05hbWVGaWxlQnV0dG9uRG93bmxvYWQsXHJcbiAgICBjbGFzc05hbWVGaWxlQnV0dG9uRGVsZXRlLFxyXG4gIH0gPSB1c2VNZXJjaGlGb3JtQ29udGV4dCgpO1xyXG4gIHJldHVybiAoXHJcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc05hbWVGaWxlTGlzdEl0ZW19PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgICAgbWluSGVpZ2h0OiAnMi41cmVtJyxcclxuICAgICAgICB9fVxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdtbC0zJz57ZmlsZS5uYW1lfTwvc3Bhbj5cclxuICAgICAgICB7IWRpc2FibGVkICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luTGVmdDogJ2F1dG8nIH19PlxyXG4gICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lRmlsZUJ1dHRvbkRvd25sb2FkfVxyXG4gICAgICAgICAgICAgIGhyZWY9e2ZpbGUuZG93bmxvYWRVcmx9XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxGYURvd25sb2FkIC8+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAge2RvRGVsZXRlICYmIChcclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZUZpbGVCdXR0b25EZWxldGV9XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtkb0RlbGV0ZX1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxvYWRpbmcpfVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtsb2FkaW5nID8gKFxyXG4gICAgICAgICAgICAgICAgICA8TG9hZGluZ0ljb24gLz5cclxuICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgIDxGYVRyYXNoIC8+XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2xpPlxyXG4gICk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBWYXJpYXRpb25GaWxlc0xpc3RQcm9wcyB7XHJcbiAgZmlsZXM6IEFycmF5PGFueT47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFZhcmlhdGlvbkZpbGVzTGlzdCh7IGZpbGVzIH06IFZhcmlhdGlvbkZpbGVzTGlzdFByb3BzKSB7XHJcbiAgY29uc3QgeyBjbGFzc05hbWVGaWxlTGlzdEl0ZW1Db250YWluZXIgfSA9IHVzZU1lcmNoaUZvcm1Db250ZXh0KCk7XHJcbiAgcmV0dXJuIChcclxuICAgIDx1bCBjbGFzc05hbWU9e2NsYXNzTmFtZUZpbGVMaXN0SXRlbUNvbnRhaW5lcn0+XHJcbiAgICAgIHtmaWxlcy5tYXAoKGY6IGFueSwgaTogbnVtYmVyKSA9PiAoXHJcbiAgICAgICAgPEZpbGVMaXN0SXRlbSBrZXk9e2Ake2l9LXB1YmxpY2ZpbGVgfSBmaWxlPXtmfSAvPlxyXG4gICAgICApKX1cclxuICAgIDwvdWw+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGV0ZXJtaW5lQm9vbGVhbih2YWx1ZTogYW55KSB7XHJcbiAgcmV0dXJuIGlzQm9vbGVhbih2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbn1cclxuXHJcbmludGVyZmFjZSBWYXJpYXRpb25GaWxlUHJvcHMge1xyXG4gIGRlbGV0ZVZhcmlhdGlvbkZpbGU6IChmaWxlOiBhbnkpID0+IHZvaWQ7XHJcbiAgZmlsZTogYW55O1xyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgaW5wdXROYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFZhcmlhdGlvbkZpbGUoe1xyXG4gIGRlbGV0ZVZhcmlhdGlvbkZpbGUsXHJcbiAgZmlsZSxcclxuICBpbmRleCxcclxuICBpbnB1dE5hbWUsXHJcbn06IFZhcmlhdGlvbkZpbGVQcm9wcykge1xyXG4gIGNvbnN0IHtcclxuICAgIGNsYXNzTmFtZUZpbGVQcmV2aWV3Q29udGFpbmVyLFxyXG4gICAgY2xhc3NOYW1lRmlsZVByZXZpZXdJY29uV3JhcHBlcixcclxuICB9ID0gdXNlTWVyY2hpRm9ybUNvbnRleHQoKTtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZUZpbGVQcmV2aWV3Q29udGFpbmVyfVxyXG4gICAgICBvbkNsaWNrPXsoKSA9PiBkZWxldGVWYXJpYXRpb25GaWxlKGZpbGUpfVxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVGaWxlUHJldmlld0ljb25XcmFwcGVyfVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IGRlbGV0ZVZhcmlhdGlvbkZpbGUoZmlsZSl9XHJcbiAgICAgID5cclxuICAgICAgICA8RmFUaW1lcyBjbGFzc05hbWU9J2Nsb3NlLWljb24nIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8SWNvbkZpbGUgZmlsZT17ZmlsZX0gLz5cclxuICAgICAgPElucHV0SGlkZGVuU3RhdGljXHJcbiAgICAgICAgbmFtZT17YCR7aW5wdXROYW1lfVske2luZGV4fV0uaWRgfVxyXG4gICAgICAgIHJ1bGVzPXt7IHJlcXVpcmVkOiB0cnVlIH19XHJcbiAgICAgICAgdmFsdWU9e2ZpbGUuaWR9XHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQnV0dG9uVXBsb2FkZWRGaWxlc1Byb3BzIHtcclxuICBmaWxlczogQXJyYXk8YW55PjtcclxuICBpc09wZW4/OiBib29sZWFuO1xyXG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJ1dHRvblVwbG9hZGVkRmlsZXMoe1xyXG4gIGZpbGVzLFxyXG4gIGlzT3BlbixcclxuICBvbkNsaWNrLFxyXG59OiBCdXR0b25VcGxvYWRlZEZpbGVzUHJvcHMpIHtcclxuICBjb25zdCBoYXNGaWxlcyA9IEFycmF5LmlzQXJyYXkoZmlsZXMpICYmIGZpbGVzLmxlbmd0aCA+IDA7XHJcbiAgY29uc3QgdGV4dCA9XHJcbiAgICBmaWxlcy5sZW5ndGggIT09IDEgPyBgJHtmaWxlcy5sZW5ndGh9IGZpbGVzIHNlbGVjdGVkYCA6ICcxIGZpbGUgc2VsZWN0ZWQnO1xyXG4gIGNvbnN0IEljb24gPSBpc09wZW4gPyBGYUNoZXZyb25VcCA6IEZhQ2hldnJvbkRvd247XHJcbiAgY29uc3QgeyBjbGFzc05hbWVGaWxlVXBsb2FkQnV0dG9uIH0gPSB1c2VNZXJjaGlGb3JtQ29udGV4dCgpO1xyXG4gIHJldHVybiAoXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9J2J1dHRvbidcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVGaWxlVXBsb2FkQnV0dG9ufVxyXG4gICAgICBkaXNhYmxlZD17ZmlsZXMubGVuZ3RoID09PSAwfVxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgPlxyXG4gICAgICB7aGFzRmlsZXMgPyB0ZXh0IDogJ05vIGZpbGVzIHNlbGVjdGVkJ317JyAnfVxyXG4gICAgICB7aGFzRmlsZXMgJiYgPEljb24gLz59XHJcbiAgICA8L2J1dHRvbj5cclxuICApO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdmFyaWF0aW9uOiBhbnk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFZhcmlhdGlvbkZpbGVJbnB1dCh7IGRpc2FibGVkLCBuYW1lLCB2YXJpYXRpb24gfTogUHJvcHMpIHtcclxuICBjb25zdCB7IGNsYXNzTmFtZUZpbGVVcGxvYWRDb250YWluZXIsIGNvbnRyb2wgfSA9IHVzZU1lcmNoaUZvcm1Db250ZXh0KCk7XHJcbiAgY29uc3QgaW5wdXROYW1lID0gYCR7bmFtZX0udmFyaWF0aW9uRmlsZXNgO1xyXG4gIGNvbnN0IHsgdmFyaWF0aW9uRmllbGQgfSA9IHZhcmlhdGlvbjtcclxuICBjb25zdCB7IGFsbG93RmlsZU11bHRpcGxlLCBwbGFjZWhvbGRlciwgcmVxdWlyZWQsIHNob3dGaWxlUHJldmlldyB9ID1cclxuICAgIHZhcmlhdGlvbkZpZWxkO1xyXG4gIGNvbnN0IHsgYXBwZW5kLCBmaWVsZHMsIHJlbW92ZSB9ID0gdXNlRmllbGRBcnJheSh7XHJcbiAgICBjb250cm9sLFxyXG4gICAga2V5TmFtZTogJ2ZpbGVJZCcsXHJcbiAgICBuYW1lOiBpbnB1dE5hbWUsXHJcbiAgICBydWxlczogeyByZXF1aXJlZCB9LFxyXG4gIH0pO1xyXG4gIGNvbnN0IGhhc0ZpbGVzID0gaXNBcnJheShmaWVsZHMpICYmIGZpZWxkcy5sZW5ndGg7XHJcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKEJvb2xlYW4oaGFzRmlsZXMpKTtcclxuICBjb25zdCB0b2dnbGUgPSAoKSA9PiBzZXRJc09wZW4oIWlzT3Blbik7XHJcbiAgY29uc3QgX2FsbG93RmlsZU11bHRpcGxlID0gZGV0ZXJtaW5lQm9vbGVhbihhbGxvd0ZpbGVNdWx0aXBsZSk7XHJcbiAgY29uc3QgX3Nob3dGaWxlUHJldmlldyA9IGRldGVybWluZUJvb2xlYW4oc2hvd0ZpbGVQcmV2aWV3KTtcclxuICBmdW5jdGlvbiBoYW5kbGVVcGxvYWRTdWNjZXNzKGZzOiBhbnkpIHtcclxuICAgIGlmIChfYWxsb3dGaWxlTXVsdGlwbGUpIHtcclxuICAgICAgYXBwZW5kKGZzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChoYXNGaWxlcykgcmVtb3ZlKDApO1xyXG4gICAgICBhcHBlbmQoZnMpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZUZpbGVVcGxvYWRDb250YWluZXJ9PlxyXG4gICAgICA8VmFyaWF0aW9uTGFiZWxcclxuICAgICAgICB2YXJpYXRpb25DbGFzc05hbWU9J21lcmNoaS1lbWJlZC1mb3JtX2lucHV0LWZpbGUnXHJcbiAgICAgICAgdmFyaWF0aW9uPXt2YXJpYXRpb259XHJcbiAgICAgIC8+XHJcbiAgICAgIDxEcm9wem9uZUlucHV0XHJcbiAgICAgICAgYWNjZXB0PXthbGxvd2VkRmlsZVR5cGVzKHZhcmlhdGlvbkZpZWxkKX1cclxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgbXVsdGlwbGU9e2FsbG93RmlsZU11bHRpcGxlfVxyXG4gICAgICAgIG9uVXBsb2FkU3VjY2Vzcz17aGFuZGxlVXBsb2FkU3VjY2Vzc31cclxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XHJcbiAgICAgIC8+XHJcbiAgICAgIDxWYXJpYXRpb25FcnJvciBuYW1lPXtuYW1lfSAvPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ndXBsb2FkZWQtdmFyaWF0aW9uLWZpbGVzJz5cclxuICAgICAgICB7ZmllbGRzLm1hcCgoZmlsZTogYW55LCBpbmRleDogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgX3Nob3dGaWxlUHJldmlldyA/IChcclxuICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzTmFtZT0nZC1pbmxpbmUtYmxvY2sgbXItMicga2V5PXtmaWxlLmZpbGVJZH0+XHJcbiAgICAgICAgICAgICAgPFZhcmlhdGlvbkZpbGVcclxuICAgICAgICAgICAgICAgIGtleT17YCR7bmFtZX0tZmlsZS1rZXktJHtpbmRleH1gfVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlVmFyaWF0aW9uRmlsZT17KCkgPT4gcmVtb3ZlKGluZGV4KX1cclxuICAgICAgICAgICAgICAgIGZpbGU9e2ZpbGV9XHJcbiAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICBpbnB1dE5hbWU9e2lucHV0TmFtZX1cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgPElucHV0SGlkZGVuU3RhdGljXHJcbiAgICAgICAgICAgICAga2V5PXtgJHtuYW1lfS1maWxlLWtleS0ke2luZGV4fWB9XHJcbiAgICAgICAgICAgICAgbmFtZT17YCR7aW5wdXROYW1lfVske2luZGV4fV0uaWRgfVxyXG4gICAgICAgICAgICAgIHJ1bGVzPXt7IHJlcXVpcmVkOiB0cnVlIH19XHJcbiAgICAgICAgICAgICAgdmFsdWU9e2ZpbGUuaWR9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIHshX3Nob3dGaWxlUHJldmlldyAmJiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgIDxDb2xsYXBzZSBpc09wZW49e0Jvb2xlYW4oaXNPcGVuKX0+XHJcbiAgICAgICAgICAgIDxWYXJpYXRpb25GaWxlc0xpc3QgZmlsZXM9e2ZpZWxkc30gLz5cclxuICAgICAgICAgIDwvQ29sbGFwc2U+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY2xlYXJmaXggbWItMyc+XHJcbiAgICAgICAgICAgIDxCdXR0b25VcGxvYWRlZEZpbGVzXHJcbiAgICAgICAgICAgICAgZmlsZXM9e2ZpZWxkc31cclxuICAgICAgICAgICAgICBpc09wZW49e2lzT3Blbn1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGV9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8Lz5cclxuICAgICAgKX1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZhcmlhdGlvbkZpbGVJbnB1dDtcclxuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUFDLFNBQUFBLGVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBQyxlQUFBLENBQUFGLENBQUEsS0FBQUcscUJBQUEsQ0FBQUgsQ0FBQSxFQUFBQyxDQUFBLEtBQUFHLDJCQUFBLENBQUFKLENBQUEsRUFBQUMsQ0FBQSxLQUFBSSxnQkFBQTtBQUFBLFNBQUFBLGlCQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBRiw0QkFBQUosQ0FBQSxFQUFBTyxDQUFBLFFBQUFQLENBQUEsMkJBQUFBLENBQUEsU0FBQVEsaUJBQUEsQ0FBQVIsQ0FBQSxFQUFBTyxDQUFBLE9BQUFFLENBQUEsTUFBQUMsUUFBQSxDQUFBQyxJQUFBLENBQUFYLENBQUEsRUFBQVksS0FBQSw2QkFBQUgsQ0FBQSxJQUFBVCxDQUFBLENBQUFhLFdBQUEsS0FBQUosQ0FBQSxHQUFBVCxDQUFBLENBQUFhLFdBQUEsQ0FBQUMsSUFBQSxhQUFBTCxDQUFBLGNBQUFBLENBQUEsR0FBQU0sS0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLG9CQUFBUyxDQUFBLCtDQUFBUSxJQUFBLENBQUFSLENBQUEs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