payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
238 lines (237 loc) • 26.8 kB
JavaScript
;
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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