UNPKG

merchi_product_form

Version:
238 lines (237 loc) 33.2 kB
'use client'; function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _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(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } 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(arr) { if (Array.isArray(arr)) return arr; } 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 { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faChevronDown, faChevronUp, faCircleNotch, faDownload, faTimes, faTrashAlt } from '@fortawesome/free-solid-svg-icons'; import { useMerchiFormContext } from '../context/MerchiProductFormProvider'; import { jsx as _jsx } from "react/jsx-runtime"; import { jsxs as _jsxs } from "react/jsx-runtime"; import { Fragment as _Fragment } from "react/jsx-runtime"; var LoadingIcon = function LoadingIcon() { return /*#__PURE__*/_jsx(FontAwesomeIcon, { icon: faCircleNotch, spin: true }); }; 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' }, 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(FontAwesomeIcon, { icon: faDownload }) }), doDelete && /*#__PURE__*/_jsx("button", { className: classNameFileButtonDelete, onClick: doDelete, disabled: Boolean(loading), children: loading ? /*#__PURE__*/_jsx(LoadingIcon, {}) : /*#__PURE__*/_jsx(FontAwesomeIcon, { icon: faTrashAlt }) })] })] }) }); } 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(FontAwesomeIcon, { icon: 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(FontAwesomeIcon, { icon: 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[0]); } } return /*#__PURE__*/_jsxs("div", { className: classNameFileUploadContainer, children: [/*#__PURE__*/_jsx(VariationLabel, { variationClassName: "merchi-embed-form_input-file", name: name, 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsImFyciIsImkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibyIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwibiIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbiIsImxlbmd0aCIsImFycjIiLCJyIiwibCIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsImUiLCJ1IiwiYSIsImYiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJSZWFjdCIsInVzZVN0YXRlIiwiaXNCb29sZWFuIiwiSWNvbkZpbGUiLCJhbGxvd2VkRmlsZVR5cGVzIiwiRHJvcHpvbmVJbnB1dCIsIklucHV0SGlkZGVuU3RhdGljIiwiVmFyaWF0aW9uRXJyb3IiLCJWYXJpYXRpb25MYWJlbCIsIkNvbGxhcHNlIiwidXNlRmllbGRBcnJheSIsIkZvbnRBd2Vzb21lSWNvbiIsImZhQ2hldnJvbkRvd24iLCJmYUNoZXZyb25VcCIsImZhQ2lyY2xlTm90Y2giLCJmYURvd25sb2FkIiwiZmFUaW1lcyIsImZhVHJhc2hBbHQiLCJ1c2VNZXJjaGlGb3JtQ29udGV4dCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkxvYWRpbmdJY29uIiwiaWNvbiIsInNwaW4iLCJGaWxlTGlzdEl0ZW0iLCJfcmVmIiwiZmlsZSIsImRpc2FibGVkIiwiZG9EZWxldGUiLCJsb2FkaW5nIiwiX3VzZU1lcmNoaUZvcm1Db250ZXh0IiwiY2xhc3NOYW1lRmlsZUxpc3RJdGVtIiwiY2xhc3NOYW1lRmlsZUJ1dHRvbkRvd25sb2FkIiwiY2xhc3NOYW1lRmlsZUJ1dHRvbkRlbGV0ZSIsImNsYXNzTmFtZSIsImNoaWxkcmVuIiwic3R5bGUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwibWFyZ2luTGVmdCIsImhyZWYiLCJkb3dubG9hZFVybCIsImRvd25sb2FkIiwib25DbGljayIsIkJvb2xlYW4iLCJWYXJpYXRpb25GaWxlc0xpc3QiLCJfcmVmMiIsImZpbGVzIiwiX3VzZU1lcmNoaUZvcm1Db250ZXh0MiIsImNsYXNzTmFtZUZpbGVMaXN0SXRlbUNvbnRhaW5lciIsIm1hcCIsImNvbmNhdCIsImRldGVybWluZUJvb2xlYW4iLCJWYXJpYXRpb25GaWxlIiwiX3JlZjMiLCJkZWxldGVWYXJpYXRpb25GaWxlIiwiaW5kZXgiLCJpbnB1dE5hbWUiLCJfdXNlTWVyY2hpRm9ybUNvbnRleHQzIiwiY2xhc3NOYW1lRmlsZVByZXZpZXdDb250YWluZXIiLCJjbGFzc05hbWVGaWxlUHJldmlld0ljb25XcmFwcGVyIiwicnVsZXMiLCJyZXF1aXJlZCIsImlkIiwiQnV0dG9uVXBsb2FkZWRGaWxlcyIsIl9yZWY0IiwiaXNPcGVuIiwiaGFzRmlsZXMiLCJ0ZXh0IiwiX3VzZU1lcmNoaUZvcm1Db250ZXh0NCIsImNsYXNzTmFtZUZpbGVVcGxvYWRCdXR0b24iLCJ0eXBlIiwiVmFyaWF0aW9uRmlsZUlucHV0IiwiX3JlZjUiLCJ2YXJpYXRpb24iLCJfdXNlTWVyY2hpRm9ybUNvbnRleHQ1IiwiY2xhc3NOYW1lRmlsZVVwbG9hZENvbnRhaW5lciIsImNvbnRyb2wiLCJ2YXJpYXRpb25GaWVsZCIsImFsbG93RmlsZU11bHRpcGxlIiwicGxhY2Vob2xkZXIiLCJzaG93RmlsZVByZXZpZXciLCJfdXNlRmllbGRBcnJheSIsImtleU5hbWUiLCJhcHBlbmQiLCJmaWVsZHMiLCJyZW1vdmUiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwic2V0SXNPcGVuIiwidG9nZ2xlIiwiX2FsbG93RmlsZU11bHRpcGxlIiwiX3Nob3dGaWxlUHJldmlldyIsImhhbmRsZVVwbG9hZFN1Y2Nlc3MiLCJmcyIsInZhcmlhdGlvbkNsYXNzTmFtZSIsImFjY2VwdCIsIm11bHRpcGxlIiwib25VcGxvYWRTdWNjZXNzIiwiZmlsZUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvVmFyaWF0aW9uRmlsZUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNCb29sZWFuLCBpc0FycmF5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEljb25GaWxlIH0gZnJvbSAnLi9pY29ucyc7XG5pbXBvcnQgeyBhbGxvd2VkRmlsZVR5cGVzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRHJvcHpvbmVJbnB1dCBmcm9tICcuL0Ryb3B6b25lSW5wdXQnO1xuaW1wb3J0IElucHV0SGlkZGVuU3RhdGljIGZyb20gJy4vSW5wdXRIaWRkZW5TdGF0aWMnO1xuaW1wb3J0IFZhcmlhdGlvbkVycm9yIGZyb20gJy4vVmFyaWF0aW9uRXJyb3InO1xuaW1wb3J0IFZhcmlhdGlvbkxhYmVsIGZyb20gJy4vVmFyaWF0aW9uTGFiZWwnO1xuaW1wb3J0IENvbGxhcHNlIGZyb20gJy4vQ29sbGFwc2UnO1xuaW1wb3J0IHsgdXNlRmllbGRBcnJheSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyBGb250QXdlc29tZUljb24gfSBmcm9tICdAZm9ydGF3ZXNvbWUvcmVhY3QtZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHtcbiAgZmFDaGV2cm9uRG93bixcbiAgZmFDaGV2cm9uVXAsXG4gIGZhQ2lyY2xlTm90Y2gsXG4gIGZhRG93bmxvYWQsXG4gIGZhVGltZXMsXG4gIGZhVHJhc2hBbHQsXG59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5pbXBvcnQgeyB1c2VNZXJjaGlGb3JtQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvTWVyY2hpUHJvZHVjdEZvcm1Qcm92aWRlcic7XG5cbmNvbnN0IExvYWRpbmdJY29uID0gKCkgPT4gPEZvbnRBd2Vzb21lSWNvbiBpY29uPXtmYUNpcmNsZU5vdGNofSBzcGluIC8+O1xuXG5pbnRlcmZhY2UgUHJvcHNGaWxlTGlzdEl0ZW0ge1xuICBmaWxlOiBhbnk7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZG9EZWxldGU/OiAoKSA9PiB2b2lkO1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gRmlsZUxpc3RJdGVtKHtcbiAgZmlsZSxcbiAgZGlzYWJsZWQsXG4gIGRvRGVsZXRlLFxuICBsb2FkaW5nLFxufTogUHJvcHNGaWxlTGlzdEl0ZW0pIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZUZpbGVMaXN0SXRlbSxcbiAgICBjbGFzc05hbWVGaWxlQnV0dG9uRG93bmxvYWQsXG4gICAgY2xhc3NOYW1lRmlsZUJ1dHRvbkRlbGV0ZSxcbiAgfSA9IHVzZU1lcmNoaUZvcm1Db250ZXh0KCk7XG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NOYW1lRmlsZUxpc3RJdGVtfT5cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9J21sLTMnPntmaWxlLm5hbWV9PC9zcGFuPlxuICAgICAgICB7IWRpc2FibGVkICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICdhdXRvJyB9fT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lRmlsZUJ1dHRvbkRvd25sb2FkfVxuICAgICAgICAgICAgICBocmVmPXtmaWxlLmRvd25sb2FkVXJsfVxuICAgICAgICAgICAgICBkb3dubG9hZFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIGljb249e2ZhRG93bmxvYWR9IC8+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICB7ZG9EZWxldGUgJiYgKFxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVGaWxlQnV0dG9uRGVsZXRlfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2RvRGVsZXRlfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxvYWRpbmcpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8TG9hZGluZ0ljb24gLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvbiBpY29uPXtmYVRyYXNoQWx0fSAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmludGVyZmFjZSBWYXJpYXRpb25GaWxlc0xpc3RQcm9wcyB7XG4gIGZpbGVzOiBBcnJheTxhbnk+O1xufVxuXG5mdW5jdGlvbiBWYXJpYXRpb25GaWxlc0xpc3QoeyBmaWxlcyB9OiBWYXJpYXRpb25GaWxlc0xpc3RQcm9wcykge1xuICBjb25zdCB7IGNsYXNzTmFtZUZpbGVMaXN0SXRlbUNvbnRhaW5lciB9ID0gdXNlTWVyY2hpRm9ybUNvbnRleHQoKTtcbiAgcmV0dXJuIChcbiAgICA8dWwgY2xhc3NOYW1lPXtjbGFzc05hbWVGaWxlTGlzdEl0ZW1Db250YWluZXJ9PlxuICAgICAge2ZpbGVzLm1hcCgoZjogYW55LCBpOiBudW1iZXIpID0+IChcbiAgICAgICAgPEZpbGVMaXN0SXRlbSBrZXk9e2Ake2l9LXB1YmxpY2ZpbGVgfSBmaWxlPXtmfSAvPlxuICAgICAgKSl9XG4gICAgPC91bD5cbiAgKTtcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiBpc0Jvb2xlYW4odmFsdWUpID8gdmFsdWUgOiB2YWx1ZSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5pbnRlcmZhY2UgVmFyaWF0aW9uRmlsZVByb3BzIHtcbiAgZGVsZXRlVmFyaWF0aW9uRmlsZTogKGZpbGU6IGFueSkgPT4gdm9pZDtcbiAgZmlsZTogYW55O1xuICBpbmRleDogbnVtYmVyO1xuICBpbnB1dE5hbWU6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gVmFyaWF0aW9uRmlsZSh7XG4gIGRlbGV0ZVZhcmlhdGlvbkZpbGUsXG4gIGZpbGUsXG4gIGluZGV4LFxuICBpbnB1dE5hbWUsXG59OiBWYXJpYXRpb25GaWxlUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZUZpbGVQcmV2aWV3Q29udGFpbmVyLFxuICAgIGNsYXNzTmFtZUZpbGVQcmV2aWV3SWNvbldyYXBwZXIsXG4gIH0gPSB1c2VNZXJjaGlGb3JtQ29udGV4dCgpO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lRmlsZVByZXZpZXdDb250YWluZXJ9XG4gICAgICBvbkNsaWNrPXsoKSA9PiBkZWxldGVWYXJpYXRpb25GaWxlKGZpbGUpfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVGaWxlUHJldmlld0ljb25XcmFwcGVyfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBkZWxldGVWYXJpYXRpb25GaWxlKGZpbGUpfVxuICAgICAgPlxuICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIGljb249e2ZhVGltZXN9IGNsYXNzTmFtZT0nY2xvc2UtaWNvbicgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPEljb25GaWxlIGZpbGU9e2ZpbGV9IC8+XG4gICAgICA8SW5wdXRIaWRkZW5TdGF0aWNcbiAgICAgICAgbmFtZT17YCR7aW5wdXROYW1lfVske2luZGV4fV0uaWRgfVxuICAgICAgICBydWxlcz17eyByZXF1aXJlZDogdHJ1ZSB9fVxuICAgICAgICB2YWx1ZT17ZmlsZS5pZH1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmludGVyZmFjZSBCdXR0b25VcGxvYWRlZEZpbGVzUHJvcHMge1xuICBmaWxlczogQXJyYXk8YW55PjtcbiAgaXNPcGVuPzogYm9vbGVhbjtcbiAgb25DbGljazogKCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gQnV0dG9uVXBsb2FkZWRGaWxlcyh7XG4gIGZpbGVzLFxuICBpc09wZW4sXG4gIG9uQ2xpY2ssXG59OiBCdXR0b25VcGxvYWRlZEZpbGVzUHJvcHMpIHtcbiAgY29uc3QgaGFzRmlsZXMgPSBBcnJheS5pc0FycmF5KGZpbGVzKSAmJiBmaWxlcy5sZW5ndGggPiAwO1xuICBjb25zdCB0ZXh0ID1cbiAgICBmaWxlcy5sZW5ndGggIT09IDEgPyBgJHtmaWxlcy5sZW5ndGh9IGZpbGVzIHNlbGVjdGVkYCA6ICcxIGZpbGUgc2VsZWN0ZWQnO1xuICBjb25zdCBpY29uID0gaXNPcGVuID8gZmFDaGV2cm9uVXAgOiBmYUNoZXZyb25Eb3duO1xuICBjb25zdCB7IGNsYXNzTmFtZUZpbGVVcGxvYWRCdXR0b24gfSA9IHVzZU1lcmNoaUZvcm1Db250ZXh0KCk7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVGaWxlVXBsb2FkQnV0dG9ufVxuICAgICAgZGlzYWJsZWQ9e2ZpbGVzLmxlbmd0aCA9PT0gMH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2hhc0ZpbGVzID8gdGV4dCA6ICdObyBmaWxlcyBzZWxlY3RlZCd9eycgJ31cbiAgICAgIHtoYXNGaWxlcyAmJiA8Rm9udEF3ZXNvbWVJY29uIGljb249e2ljb259IC8+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU6IHN0cmluZztcbiAgdmFyaWF0aW9uOiBhbnk7XG59XG5cbmZ1bmN0aW9uIFZhcmlhdGlvbkZpbGVJbnB1dCh7IGRpc2FibGVkLCBuYW1lLCB2YXJpYXRpb24gfTogUHJvcHMpIHtcbiAgY29uc3QgeyBjbGFzc05hbWVGaWxlVXBsb2FkQ29udGFpbmVyLCBjb250cm9sIH0gPSB1c2VNZXJjaGlGb3JtQ29udGV4dCgpO1xuICBjb25zdCBpbnB1dE5hbWUgPSBgJHtuYW1lfS52YXJpYXRpb25GaWxlc2A7XG4gIGNvbnN0IHsgdmFyaWF0aW9uRmllbGQgfSA9IHZhcmlhdGlvbjtcbiAgY29uc3QgeyBhbGxvd0ZpbGVNdWx0aXBsZSwgcGxhY2Vob2xkZXIsIHJlcXVpcmVkLCBzaG93RmlsZVByZXZpZXcgfSA9XG4gICAgdmFyaWF0aW9uRmllbGQ7XG4gIGNvbnN0IHsgYXBwZW5kLCBmaWVsZHMsIHJlbW92ZSB9ID0gdXNlRmllbGRBcnJheSh7XG4gICAgY29udHJvbCxcbiAgICBrZXlOYW1lOiAnZmlsZUlkJyxcbiAgICBuYW1lOiBpbnB1dE5hbWUsXG4gICAgcnVsZXM6IHsgcmVxdWlyZWQgfSxcbiAgfSk7XG4gIGNvbnN0IGhhc0ZpbGVzID0gaXNBcnJheShmaWVsZHMpICYmIGZpZWxkcy5sZW5ndGg7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShCb29sZWFuKGhhc0ZpbGVzKSk7XG4gIGNvbnN0IHRvZ2dsZSA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcbiAgY29uc3QgX2FsbG93RmlsZU11bHRpcGxlID0gZGV0ZXJtaW5lQm9vbGVhbihhbGxvd0ZpbGVNdWx0aXBsZSk7XG4gIGNvbnN0IF9zaG93RmlsZVByZXZpZXcgPSBkZXRlcm1pbmVCb29sZWFuKHNob3dGaWxlUHJldmlldyk7XG4gIGZ1bmN0aW9uIGhhbmRsZVVwbG9hZFN1Y2Nlc3MoZnM6IGFueSkge1xuICAgIGlmIChfYWxsb3dGaWxlTXVsdGlwbGUpIHtcbiAgICAgIGFwcGVuZChmcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNGaWxlcykgcmVtb3ZlKDApO1xuICAgICAgYXBwZW5kKGZzWzBdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lRmlsZVVwbG9hZENvbnRhaW5lcn0+XG4gICAgICA8VmFyaWF0aW9uTGFiZWxcbiAgICAgICAgdmFyaWF0aW9uQ2xhc3NOYW1lPSdtZXJjaGktZW1iZWQtZm9ybV9pbnB1dC1maWxlJ1xuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB2YXJpYXRpb249e3ZhcmlhdGlvbn1cbiAgICAgIC8+XG4gICAgICA8RHJvcHpvbmVJbnB1dFxuICAgICAgICBhY2NlcHQ9e2FsbG93ZWRGaWxlVHlwZXModmFyaWF0aW9uRmllbGQpfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG11bHRpcGxlPXthbGxvd0ZpbGVNdWx0aXBsZX1cbiAgICAgICAgb25VcGxvYWRTdWNjZXNzPXtoYW5kbGVVcGxvYWRTdWNjZXNzfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAvPlxuICAgICAgPFZhcmlhdGlvbkVycm9yIG5hbWU9e25hbWV9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ndXBsb2FkZWQtdmFyaWF0aW9uLWZpbGVzJz5cbiAgICAgICAge2ZpZWxkcy5tYXAoKGZpbGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgICBfc2hvd0ZpbGVQcmV2aWV3ID8gKFxuICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzTmFtZT0nZC1pbmxpbmUtYmxvY2sgbXItMicga2V5PXtmaWxlLmZpbGVJZH0+XG4gICAgICAgICAgICAgIDxWYXJpYXRpb25GaWxlXG4gICAgICAgICAgICAgICAga2V5PXtgJHtuYW1lfS1maWxlLWtleS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgZGVsZXRlVmFyaWF0aW9uRmlsZT17KCkgPT4gcmVtb3ZlKGluZGV4KX1cbiAgICAgICAgICAgICAgICBmaWxlPXtmaWxlfVxuICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICBpbnB1dE5hbWU9e2lucHV0TmFtZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxJbnB1dEhpZGRlblN0YXRpY1xuICAgICAgICAgICAgICBrZXk9e2Ake25hbWV9LWZpbGUta2V5LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgbmFtZT17YCR7aW5wdXROYW1lfVske2luZGV4fV0uaWRgfVxuICAgICAgICAgICAgICBydWxlcz17eyByZXF1aXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICB2YWx1ZT17ZmlsZS5pZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7IV9zaG93RmlsZVByZXZpZXcgJiYgKFxuICAgICAgICA8PlxuICAgICAgICAgIDxDb2xsYXBzZSBpc09wZW49e0Jvb2xlYW4oaXNPcGVuKX0+XG4gICAgICAgICAgICA8VmFyaWF0aW9uRmlsZXNMaXN0IGZpbGVzPXtmaWVsZHN9IC8+XG4gICAgICAgICAgPC9Db2xsYXBzZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY2xlYXJmaXggbWItMyc+XG4gICAgICAgICAgICA8QnV0dG9uVXBsb2FkZWRGaWxlc1xuICAgICAgICAgICAgICBmaWxlcz17ZmllbGRzfVxuICAgICAgICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWYXJpYXRpb25GaWxlSW5wdXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7O0FBQUMsU0FBQUEsZUFBQUMsR0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsR0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxHQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosR0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBRyxDQUFBLEVBQUFDLE1BQUEsU0FBQUQsQ0FBQSxxQkFBQUEsQ0FBQSxzQkFBQUUsaUJBQUEsQ0FBQUYsQ0FBQSxFQUFBQyxNQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLENBQUFDLFFBQUEsQ0FBQUMsSUFBQSxDQUFBUCxDQUFBLEVBQUFRLEtBQUEsYUFBQUwsQ0FBQSxpQkFBQUgsQ0FBQSxDQUFBUyxXQUFBLEVBQUFOLENBQUEsR0FBQUgsQ0FBQSxDQUFBUyxXQUFBLENBQUFDLElBQUEsTUFBQVAsQ0FBQSxjQUFBQSxDQUFBLG1CQUFBUSxLQUFBLENBQUFDLElBQUEsQ0FBQVosQ0FBQSxPQUFBRyxDQUFBLCtEQUFBVSxJQUFBLENBQUFWLENBQUEsVUFBQUQsaUJBQUEsQ0FBQUYsQ0FBQSxFQUFBQyxNQUFBO0FBQUEsU0FBQUMsa0JBQUFULEdBQUEsRUFBQXFCLEdBQUEsUUFBQUEsR0FBQSxZQUFBQSxHQUFBLEdBQUFyQixHQUFBLENBQUFzQixNQUFBLEVBQUFELEdBQUEsR0FBQXJCLEdBQUEsQ0FBQXNCLE1BQUEsV0FBQXJCLENBQUEsTUFBQXNCLElBQUEsT0FBQUwsS0FBQSxDQUFBRyxHQUFBLEdBQUFwQixDQUFBLEdBQUFvQixHQUFBLEVBQUFwQixDQUFBLElBQUFzQixJQUFBLENBQUF0QixDQUFBLElBQUFELEdBQUEsQ0FB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