UNPKG

payload

Version:

Node, React and MongoDB Headless CMS and Application Framework

238 lines (237 loc) • 26.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "DocumentDrawerContent", { enumerable: true, get: function() { return DocumentDrawerContent; } }); const _modal = require("@faceless-ui/modal"); const _qs = /*#__PURE__*/ _interop_require_default(require("qs")); const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); const _reacti18next = require("react-i18next"); const _reacttoastify = require("react-toastify"); const _ = require("."); const _getTranslation = require("../../../../utilities/getTranslation"); const _usePayloadAPI = /*#__PURE__*/ _interop_require_default(require("../../../hooks/usePayloadAPI")); const _buildStateFromSchema = /*#__PURE__*/ _interop_require_default(require("../../forms/Form/buildStateFromSchema")); const _fieldtypes = require("../../forms/field-types"); const _useRelatedCollections = require("../../forms/field-types/Relationship/AddNew/useRelatedCollections"); const _X = /*#__PURE__*/ _interop_require_default(require("../../icons/X")); const _Auth = require("../../utilities/Auth"); const _Config = require("../../utilities/Config"); const _DocumentInfo = require("../../utilities/DocumentInfo"); const _FormQueryParams = require("../../utilities/FormQueryParams"); const _Locale = require("../../utilities/Locale"); const _RenderCustomComponent = /*#__PURE__*/ _interop_require_default(require("../../utilities/RenderCustomComponent")); const _Default = /*#__PURE__*/ _interop_require_default(require("../../views/collections/Edit/Default")); const _formatFields = /*#__PURE__*/ _interop_require_default(require("../../views/collections/Edit/formatFields")); const _Button = /*#__PURE__*/ _interop_require_default(require("../Button")); const _IDLabel = /*#__PURE__*/ _interop_require_default(require("../IDLabel")); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const Content = ({ collectionSlug, customHeader, drawerSlug, onSave })=>{ const { routes: { api }, serverURL } = (0, _Config.useConfig)(); const { closeModal, modalState, toggleModal } = (0, _modal.useModal)(); const { code: locale } = (0, _Locale.useLocale)(); const { user } = (0, _Auth.useAuth)(); const [internalState, setInternalState] = (0, _react.useState)(); const { i18n, t } = (0, _reacti18next.useTranslation)([ 'fields', 'general' ]); const hasInitializedState = (0, _react.useRef)(false); const [isOpen, setIsOpen] = (0, _react.useState)(false); const [collectionConfig] = (0, _useRelatedCollections.useRelatedCollections)(collectionSlug); const config = (0, _Config.useConfig)(); const { formQueryParams } = (0, _FormQueryParams.useFormQueryParams)(); const formattedQueryParams = _qs.default.stringify(formQueryParams); const { admin: { components: { views: { Edit } = {} } = {} } = {} } = collectionConfig; const { id, docPermissions, getDocPreferences } = (0, _DocumentInfo.useDocumentInfo)(); // If they are replacing the entire edit view, use that. // Else let the DefaultEdit determine what to render. const CustomEditView = typeof Edit === 'function' ? Edit : undefined; const [fields, setFields] = (0, _react.useState)(()=>(0, _formatFields.default)(collectionConfig, true)); // no need to an additional requests when creating new documents const initialID = (0, _react.useRef)(id); const [{ data, isError, isLoading: isLoadingDocument }] = (0, _usePayloadAPI.default)(initialID.current ? `${serverURL}${api}/${collectionSlug}/${initialID.current}` : null, { initialParams: { depth: 0, draft: 'true', 'fallback-locale': 'null' } }); (0, _react.useEffect)(()=>{ setFields((0, _formatFields.default)(collectionConfig, true)); }, [ collectionSlug, collectionConfig ]); (0, _react.useEffect)(()=>{ if (isLoadingDocument || hasInitializedState.current) { return; } const awaitInitialState = async ()=>{ const preferences = await getDocPreferences(); const state = await (0, _buildStateFromSchema.default)({ id, config, data, fieldSchema: fields, locale, operation: id ? 'update' : 'create', preferences, t, user }); setInternalState(state); }; awaitInitialState(); hasInitializedState.current = true; }, [ data, fields, id, user, locale, isLoadingDocument, t, getDocPreferences, config ]); (0, _react.useEffect)(()=>{ setIsOpen(Boolean(modalState[drawerSlug]?.isOpen)); }, [ modalState, drawerSlug ]); (0, _react.useEffect)(()=>{ if (isOpen && !isLoadingDocument && isError) { closeModal(drawerSlug); _reacttoastify.toast.error(data.errors?.[0].message || t('error:unspecific')); } }, [ isError, t, isOpen, data, drawerSlug, closeModal, isLoadingDocument ]); if (isError) return null; const isEditing = Boolean(id); const apiURL = id ? `${serverURL}${api}/${collectionSlug}/${id}?locale=${locale}` : null; const action = `${serverURL}${api}/${collectionSlug}${isEditing ? `/${id}` : ''}?${formattedQueryParams}`; const hasSavePermission = isEditing && docPermissions?.update?.permission || !isEditing && docPermissions?.create?.permission; const isLoading = !internalState || !docPermissions || isLoadingDocument; return /*#__PURE__*/ _react.default.createElement(_RenderCustomComponent.default, { CustomComponent: CustomEditView, DefaultComponent: _Default.default, componentProps: { id, action, apiURL, collection: collectionConfig, customHeader: /*#__PURE__*/ _react.default.createElement("div", { className: `${_.baseClass}__header` }, /*#__PURE__*/ _react.default.createElement("div", { className: `${_.baseClass}__header-content` }, /*#__PURE__*/ _react.default.createElement("h2", { className: `${_.baseClass}__header-text` }, !customHeader ? t(!id ? 'fields:addNewLabel' : 'general:editLabel', { label: (0, _getTranslation.getTranslation)(collectionConfig.labels.singular, i18n) }) : customHeader), /*#__PURE__*/ _react.default.createElement(_Button.default, { "aria-label": t('general:close'), buttonStyle: "none", className: `${_.baseClass}__header-close`, onClick: ()=>toggleModal(drawerSlug) }, /*#__PURE__*/ _react.default.createElement(_X.default, null))), id && /*#__PURE__*/ _react.default.createElement(_IDLabel.default, { id: id.toString() })), data, disableActions: true, disableLeaveWithoutSaving: true, disableRoutes: true, fieldTypes: _fieldtypes.fieldTypes, hasSavePermission, internalState, isEditing, isLoading, me: true, onSave, permissions: docPermissions } }); }; const DocumentDrawerContent = (props)=>{ const { id: idFromProps, collectionSlug, onSave: onSaveFromProps } = props; const [collectionConfig] = (0, _useRelatedCollections.useRelatedCollections)(collectionSlug); const [id, setId] = (0, _react.useState)(idFromProps); const onSave = (0, _react.useCallback)((args)=>{ setId(args.doc.id); if (typeof onSaveFromProps === 'function') { onSaveFromProps({ ...args, collectionConfig }); } }, [ onSaveFromProps, collectionConfig ]); return /*#__PURE__*/ _react.default.createElement(_DocumentInfo.DocumentInfoProvider, { collection: collectionConfig, id: id }, /*#__PURE__*/ _react.default.createElement(Content, { ...props, onSave: onSave })); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2VsZW1lbnRzL0RvY3VtZW50RHJhd2VyL0RyYXdlckNvbnRlbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHF1ZXJ5U3RyaW5nIGZyb20gJ3FzJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAncmVhY3QtdG9hc3RpZnknXG5cbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvblBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdXRoJ1xuaW1wb3J0IHR5cGUgeyBGaWVsZHMgfSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudERyYXdlclByb3BzIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgYmFzZUNsYXNzIH0gZnJvbSAnLidcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzL2dldFRyYW5zbGF0aW9uJ1xuaW1wb3J0IHVzZVBheWxvYWRBUEkgZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUGF5bG9hZEFQSSdcbmltcG9ydCBidWlsZFN0YXRlRnJvbVNjaGVtYSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL2J1aWxkU3RhdGVGcm9tU2NoZW1hJ1xuaW1wb3J0IHsgZmllbGRUeXBlcyB9IGZyb20gJy4uLy4uL2Zvcm1zL2ZpZWxkLXR5cGVzJ1xuaW1wb3J0IHsgdXNlUmVsYXRlZENvbGxlY3Rpb25zIH0gZnJvbSAnLi4vLi4vZm9ybXMvZmllbGQtdHlwZXMvUmVsYXRpb25zaGlwL0FkZE5ldy91c2VSZWxhdGVkQ29sbGVjdGlvbnMnXG5pbXBvcnQgWCBmcm9tICcuLi8uLi9pY29ucy9YJ1xuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9BdXRoJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0NvbmZpZydcbmltcG9ydCB7IERvY3VtZW50SW5mb1Byb3ZpZGVyLCB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvRG9jdW1lbnRJbmZvJ1xuaW1wb3J0IHsgdXNlRm9ybVF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0Zvcm1RdWVyeVBhcmFtcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Mb2NhbGUnXG5pbXBvcnQgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IGZyb20gJy4uLy4uL3V0aWxpdGllcy9SZW5kZXJDdXN0b21Db21wb25lbnQnXG5pbXBvcnQgRGVmYXVsdEVkaXQgZnJvbSAnLi4vLi4vdmlld3MvY29sbGVjdGlvbnMvRWRpdC9EZWZhdWx0J1xuaW1wb3J0IGZvcm1hdEZpZWxkcyBmcm9tICcuLi8uLi92aWV3cy9jb2xsZWN0aW9ucy9FZGl0L2Zvcm1hdEZpZWxkcydcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vQnV0dG9uJ1xuaW1wb3J0IElETGFiZWwgZnJvbSAnLi4vSURMYWJlbCdcblxuY29uc3QgQ29udGVudDogUmVhY3QuRkM8RG9jdW1lbnREcmF3ZXJQcm9wcz4gPSAoe1xuICBjb2xsZWN0aW9uU2x1ZyxcbiAgY3VzdG9tSGVhZGVyLFxuICBkcmF3ZXJTbHVnLFxuICBvblNhdmUsXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgc2VydmVyVVJMLFxuICB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBjbG9zZU1vZGFsLCBtb2RhbFN0YXRlLCB0b2dnbGVNb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCB7IGNvZGU6IGxvY2FsZSB9ID0gdXNlTG9jYWxlKClcbiAgY29uc3QgeyB1c2VyIH0gPSB1c2VBdXRoKClcbiAgY29uc3QgW2ludGVybmFsU3RhdGUsIHNldEludGVybmFsU3RhdGVdID0gdXNlU3RhdGU8RmllbGRzPigpXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oWydmaWVsZHMnLCAnZ2VuZXJhbCddKVxuICBjb25zdCBoYXNJbml0aWFsaXplZFN0YXRlID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjb2xsZWN0aW9uQ29uZmlnXSA9IHVzZVJlbGF0ZWRDb2xsZWN0aW9ucyhjb2xsZWN0aW9uU2x1ZylcbiAgY29uc3QgY29uZmlnID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBmb3JtUXVlcnlQYXJhbXMgfSA9IHVzZUZvcm1RdWVyeVBhcmFtcygpXG4gIGNvbnN0IGZvcm1hdHRlZFF1ZXJ5UGFyYW1zID0gcXVlcnlTdHJpbmcuc3RyaW5naWZ5KGZvcm1RdWVyeVBhcmFtcylcblxuICBjb25zdCB7IGFkbWluOiB7IGNvbXBvbmVudHM6IHsgdmlld3M6IHsgRWRpdCB9ID0ge30gfSA9IHt9IH0gPSB7fSB9ID0gY29sbGVjdGlvbkNvbmZpZ1xuXG4gIGNvbnN0IHsgaWQsIGRvY1Blcm1pc3Npb25zLCBnZXREb2NQcmVmZXJlbmNlcyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcblxuICAvLyBJZiB0aGV5IGFyZSByZXBsYWNpbmcgdGhlIGVudGlyZSBlZGl0IHZpZXcsIHVzZSB0aGF0LlxuICAvLyBFbHNlIGxldCB0aGUgRGVmYXVsdEVkaXQgZGV0ZXJtaW5lIHdoYXQgdG8gcmVuZGVyLlxuICBjb25zdCBDdXN0b21FZGl0VmlldyA9IHR5cGVvZiBFZGl0ID09PSAnZnVuY3Rpb24nID8gRWRpdCA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IFtmaWVsZHMsIHNldEZpZWxkc10gPSB1c2VTdGF0ZSgoKSA9PiBmb3JtYXRGaWVsZHMoY29sbGVjdGlvbkNvbmZpZywgdHJ1ZSkpXG5cbiAgLy8gbm8gbmVlZCB0byBhbiBhZGRpdGlvbmFsIHJlcXVlc3RzIHdoZW4gY3JlYXRpbmcgbmV3IGRvY3VtZW50c1xuICBjb25zdCBpbml0aWFsSUQgPSB1c2VSZWYoaWQpXG4gIGNvbnN0IFt7IGRhdGEsIGlzRXJyb3IsIGlzTG9hZGluZzogaXNMb2FkaW5nRG9jdW1lbnQgfV0gPSB1c2VQYXlsb2FkQVBJKFxuICAgIGluaXRpYWxJRC5jdXJyZW50ID8gYCR7c2VydmVyVVJMfSR7YXBpfS8ke2NvbGxlY3Rpb25TbHVnfS8ke2luaXRpYWxJRC5jdXJyZW50fWAgOiBudWxsLFxuICAgIHsgaW5pdGlhbFBhcmFtczogeyBkZXB0aDogMCwgZHJhZnQ6ICd0cnVlJywgJ2ZhbGxiYWNrLWxvY2FsZSc6ICdudWxsJyB9IH0sXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEZpZWxkcyhmb3JtYXRGaWVsZHMoY29sbGVjdGlvbkNvbmZpZywgdHJ1ZSkpXG4gIH0sIFtjb2xsZWN0aW9uU2x1ZywgY29sbGVjdGlvbkNvbmZpZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nRG9jdW1lbnQgfHwgaGFzSW5pdGlhbGl6ZWRTdGF0ZS5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhd2FpdEluaXRpYWxTdGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByZWZlcmVuY2VzID0gYXdhaXQgZ2V0RG9jUHJlZmVyZW5jZXMoKVxuICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCBidWlsZFN0YXRlRnJvbVNjaGVtYSh7XG4gICAgICAgIGlkLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkU2NoZW1hOiBmaWVsZHMsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgb3BlcmF0aW9uOiBpZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZScsXG4gICAgICAgIHByZWZlcmVuY2VzLFxuICAgICAgICB0LFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcbiAgICAgIHNldEludGVybmFsU3RhdGUoc3RhdGUpXG4gICAgfVxuXG4gICAgYXdhaXRJbml0aWFsU3RhdGUoKVxuICAgIGhhc0luaXRpYWxpemVkU3RhdGUuY3VycmVudCA9IHRydWVcbiAgfSwgW2RhdGEsIGZpZWxkcywgaWQsIHVzZXIsIGxvY2FsZSwgaXNMb2FkaW5nRG9jdW1lbnQsIHQsIGdldERvY1ByZWZlcmVuY2VzLCBjb25maWddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0SXNPcGVuKEJvb2xlYW4obW9kYWxTdGF0ZVtkcmF3ZXJTbHVnXT8uaXNPcGVuKSlcbiAgfSwgW21vZGFsU3RhdGUsIGRyYXdlclNsdWddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiAhaXNMb2FkaW5nRG9jdW1lbnQgJiYgaXNFcnJvcikge1xuICAgICAgY2xvc2VNb2RhbChkcmF3ZXJTbHVnKVxuICAgICAgdG9hc3QuZXJyb3IoZGF0YS5lcnJvcnM/LlswXS5tZXNzYWdlIHx8IHQoJ2Vycm9yOnVuc3BlY2lmaWMnKSlcbiAgICB9XG4gIH0sIFtpc0Vycm9yLCB0LCBpc09wZW4sIGRhdGEsIGRyYXdlclNsdWcsIGNsb3NlTW9kYWwsIGlzTG9hZGluZ0RvY3VtZW50XSlcblxuICBpZiAoaXNFcnJvcikgcmV0dXJuIG51bGxcblxuICBjb25zdCBpc0VkaXRpbmcgPSBCb29sZWFuKGlkKVxuXG4gIGNvbnN0IGFwaVVSTCA9IGlkID8gYCR7c2VydmVyVVJMfSR7YXBpfS8ke2NvbGxlY3Rpb25TbHVnfS8ke2lkfT9sb2NhbGU9JHtsb2NhbGV9YCA6IG51bGxcblxuICBjb25zdCBhY3Rpb24gPSBgJHtzZXJ2ZXJVUkx9JHthcGl9LyR7Y29sbGVjdGlvblNsdWd9JHtcbiAgICBpc0VkaXRpbmcgPyBgLyR7aWR9YCA6ICcnXG4gIH0/JHtmb3JtYXR0ZWRRdWVyeVBhcmFtc31gXG5cbiAgY29uc3QgaGFzU2F2ZVBlcm1pc3Npb24gPVxuICAgIChpc0VkaXRpbmcgJiYgZG9jUGVybWlzc2lvbnM/LnVwZGF0ZT8ucGVybWlzc2lvbikgfHxcbiAgICAoIWlzRWRpdGluZyAmJiAoZG9jUGVybWlzc2lvbnMgYXMgQ29sbGVjdGlvblBlcm1pc3Npb24pPy5jcmVhdGU/LnBlcm1pc3Npb24pXG5cbiAgY29uc3QgaXNMb2FkaW5nID0gIWludGVybmFsU3RhdGUgfHwgIWRvY1Blcm1pc3Npb25zIHx8IGlzTG9hZGluZ0RvY3VtZW50XG5cbiAgcmV0dXJuIChcbiAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICBDdXN0b21Db21wb25lbnQ9e0N1c3RvbUVkaXRWaWV3fVxuICAgICAgRGVmYXVsdENvbXBvbmVudD17RGVmYXVsdEVkaXR9XG4gICAgICBjb21wb25lbnRQcm9wcz17e1xuICAgICAgICBpZCxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBhcGlVUkwsXG4gICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgIGN1c3RvbUhlYWRlcjogKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXJgfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXItY29udGVudGB9PlxuICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXItdGV4dGB9PlxuICAgICAgICAgICAgICAgIHshY3VzdG9tSGVhZGVyXG4gICAgICAgICAgICAgICAgICA/IHQoIWlkID8gJ2ZpZWxkczphZGROZXdMYWJlbCcgOiAnZ2VuZXJhbDplZGl0TGFiZWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGNvbGxlY3Rpb25Db25maWcubGFiZWxzLnNpbmd1bGFyLCBpMThuKSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIDogY3VzdG9tSGVhZGVyfVxuICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDpjbG9zZScpfVxuICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXItY2xvc2VgfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRvZ2dsZU1vZGFsKGRyYXdlclNsdWcpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFggLz5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtpZCAmJiA8SURMYWJlbCBpZD17aWQudG9TdHJpbmcoKX0gLz59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRpc2FibGVBY3Rpb25zOiB0cnVlLFxuICAgICAgICBkaXNhYmxlTGVhdmVXaXRob3V0U2F2aW5nOiB0cnVlLFxuICAgICAgICBkaXNhYmxlUm91dGVzOiB0cnVlLFxuICAgICAgICBmaWVsZFR5cGVzLFxuICAgICAgICBoYXNTYXZlUGVybWlzc2lvbixcbiAgICAgICAgaW50ZXJuYWxTdGF0ZSxcbiAgICAgICAgaXNFZGl0aW5nLFxuICAgICAgICBpc0xvYWRpbmcsXG4gICAgICAgIG1lOiB0cnVlLFxuICAgICAgICBvblNhdmUsXG4gICAgICAgIHBlcm1pc3Npb25zOiBkb2NQZXJtaXNzaW9ucyxcbiAgICAgIH19XG4gICAgLz5cbiAgKVxufVxuXG4vLyBGaXJzdCBwcm92aWRlIHRoZSBkb2N1bWVudCBjb250ZXh0IHVzaW5nIGBEb2N1bWVudEluZm9Qcm92aWRlcmBcbi8vIHRoaXMgaXMgc28gd2UgY2FuIHV0aWxpemUgdGhlIGB1c2VEb2N1bWVudEluZm9gIGhvb2sgaW4gdGhlIGBDb250ZW50YCBjb21wb25lbnRcbi8vIHRoaXMgZHJhd2VyIGlzIHVzZWQgZm9yIGJvdGggY3JlYXRpbmcgYW5kIGVkaXRpbmcgZG9jdW1lbnRzXG4vLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGBpZGAgbWF5IGJlIHVua25vd24gdW50aWwgdGhlIGRvY3VtZW50IGlzIGNyZWF0ZWRcbmV4cG9ydCBjb25zdCBEb2N1bWVudERyYXdlckNvbnRlbnQ6IFJlYWN0LkZDPERvY3VtZW50RHJhd2VyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgaWQ6IGlkRnJvbVByb3BzLCBjb2xsZWN0aW9uU2x1Zywgb25TYXZlOiBvblNhdmVGcm9tUHJvcHMgfSA9IHByb3BzXG4gIGNvbnN0IFtjb2xsZWN0aW9uQ29uZmlnXSA9IHVzZVJlbGF0ZWRDb2xsZWN0aW9ucyhjb2xsZWN0aW9uU2x1ZylcbiAgY29uc3QgW2lkLCBzZXRJZF0gPSB1c2VTdGF0ZTxudWxsIHwgc3RyaW5nPihpZEZyb21Qcm9wcylcblxuICBjb25zdCBvblNhdmUgPSB1c2VDYWxsYmFjazxEb2N1bWVudERyYXdlclByb3BzWydvblNhdmUnXT4oXG4gICAgKGFyZ3MpID0+IHtcbiAgICAgIHNldElkKGFyZ3MuZG9jLmlkKVxuXG4gICAgICBpZiAodHlwZW9mIG9uU2F2ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvblNhdmVGcm9tUHJvcHMoe1xuICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvblNhdmVGcm9tUHJvcHMsIGNvbGxlY3Rpb25Db25maWddLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8RG9jdW1lbnRJbmZvUHJvdmlkZXIgY29sbGVjdGlvbj17Y29sbGVjdGlvbkNvbmZpZ30gaWQ9e2lkfT5cbiAgICAgIDxDb250ZW50IHsuLi5wcm9wc30gb25TYXZlPXtvblNhdmV9IC8+XG4gICAgPC9Eb2N1bWVudEluZm9Qcm92aWRlcj5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIkRvY3VtZW50RHJhd2VyQ29udGVudCIsIkNvbnRlbnQiLCJjb2xsZWN0aW9uU2x1ZyIsImN1c3RvbUhlYWRlciIsImRyYXdlclNsdWciLCJvblNhdmUiLCJyb3V0ZXMiLCJhcGkiLCJzZXJ2ZXJVUkwiLCJ1c2VDb25maWciLCJjbG9zZU1vZGFsIiwibW9kYWxTdGF0ZSIsInRvZ2dsZU1vZGFsIiwidXNlTW9kYWwiLCJjb2RlIiwibG9jYWxlIiwidXNlTG9jYWxlIiwidXNlciIsInVzZUF1dGgiLCJpbnRlcm5hbFN0YXRlIiwic2V0SW50ZXJuYWxTdGF0ZSIsInVzZVN0YXRlIiwiaTE4biIsInQiLCJ1c2VUcmFuc2xhdGlvbiIsImhhc0luaXRpYWxpemVkU3RhdGUiLCJ1c2VSZWYiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJjb2xsZWN0aW9uQ29uZmlnIiwidXNlUmVsYXRlZENvbGxlY3Rpb25zIiwiY29uZmlnIiwiZm9ybVF1ZXJ5UGFyYW1zIiwidXNlRm9ybVF1ZXJ5UGFyYW1zIiwiZm9ybWF0dGVkUXVlcnlQYXJhbXMiLCJxdWVyeVN0cmluZyIsInN0cmluZ2lmeSIsImFkbWluIiwiY29tcG9uZW50cyIsInZpZXdzIiwiRWRpdCIsImlkIiwiZG9jUGVybWlzc2lvbnMiLCJnZXREb2NQcmVmZXJlbmNlcyIsInVzZURvY3VtZW50SW5mbyIsIkN1c3RvbUVkaXRWaWV3IiwidW5kZWZpbmVkIiwiZmllbGRzIiwic2V0RmllbGRzIiwiZm9ybWF0RmllbGRzIiwiaW5pdGlhbElEIiwiZGF0YSIsImlzRXJyb3IiLCJpc0xvYWRpbmciLCJpc0xvYWRpbmdEb2N1bWVudCIsInVzZVBheWxvYWRBUEkiLCJjdXJyZW50IiwiaW5pdGlhbFBhcmFtcyIsImRlcHRoIiwiZHJhZnQiLCJ1c2VFZmZlY3QiLCJhd2FpdEluaXRpYWxTdGF0ZSIsInByZWZlcmVuY2VzIiwic3RhdGUiLCJidWlsZFN0YXRlRnJvbVNjaGVtYSIsImZpZWxkU2NoZW1hIiwib3BlcmF0aW9uIiwiQm9vbGVhbiIsInRvYXN0IiwiZXJyb3IiLCJlcnJvcnMiLCJtZXNzYWdlIiwiaXNFZGl0aW5nIiwiYXBpVVJMIiwiYWN0aW9uIiwiaGFzU2F2ZVBlcm1pc3Npb24iLCJ1cGRhdGUiLCJwZXJtaXNzaW9uIiwiY3JlYXRlIiwiUmVuZGVyQ3VzdG9tQ29tcG9uZW50IiwiQ3VzdG9tQ29tcG9uZW50IiwiRGVmYXVsdENvbXBvbmVudCIsIkRlZmF1bHRFZGl0IiwiY29tcG9uZW50UHJvcHMiLCJjb2xsZWN0aW9uIiwiZGl2IiwiY2xhc3NOYW1lIiwiYmFzZUNsYXNzIiwiaDIiLCJsYWJlbCIsImdldFRyYW5zbGF0aW9uIiwibGFiZWxzIiwic2luZ3VsYXIiLCJCdXR0b24iLCJhcmlhLWxhYmVsIiwiYnV0dG9uU3R5bGUiLCJvbkNsaWNrIiwiWCIsIklETGFiZWwiLCJ0b1N0cmluZyIsImRpc2FibGVBY3Rpb25zIiwiZGlzYWJsZUxlYXZlV2l0aG91dFNhdmluZyIsImRpc2FibGVSb3V0ZXMiLCJmaWVsZFR5cGVzIiwibWUiLCJwZXJtaXNzaW9ucyIsInByb3BzIiwiaWRGcm9tUHJvcHMiLCJvblNhdmVGcm9tUHJvcHMiLCJzZXRJZCIsInVzZUNhbGxiYWNrIiwiYXJncyIsImRvYyIsIkRvY3VtZW50SW5mb1Byb3ZpZGVyIl0sIm1hcHBpbmdzIjoiOzs7OytCQStLYUE7OztlQUFBQTs7O3VCQS9LWTsyREFDRDsrREFDd0M7OEJBQ2pDOytCQUNUO2tCQU1JO2dDQUNLO3NFQUNMOzZFQUNPOzRCQUNOO3VDQUNXOzBEQUN4QjtzQkFDVTt3QkFDRTs4QkFDNEI7aUNBQ25CO3dCQUNUOzhFQUNRO2dFQUNWO3FFQUNDOytEQUNOO2dFQUNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVwQixNQUFNQyxVQUF5QyxDQUFDLEVBQzlDQyxjQUFjLEVBQ2RDLFlBQVksRUFDWkMsVUFBVSxFQUNWQyxNQUFNLEVBQ1A7SUFD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