tocco-admin 1.0.20 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/changelog.md +7 -0
  2. package/dist/{chunk-229.e12c5922ff4247f8e928.js → chunk-229.2ea952f1867a78801d4b.js} +1 -2
  3. package/dist/{chunk-314.06fbc31e051912aa797d.js → chunk-314.fd36699dbd136490aa1f.js} +1 -2
  4. package/dist/{chunk-333.94430ae53118a015e8b6.js → chunk-333.6e7bb6ee20346be796e1.js} +1 -2
  5. package/dist/{chunk-335.fdc7bbdeec181e5348b5.js → chunk-335.7cef6cf94cd9ea8910eb.js} +1 -2
  6. package/dist/{chunk-342.662b51c5da9667aa463c.js → chunk-342.8f3c7176df159e2a140e.js} +1 -2
  7. package/dist/{chunk-404.9cfbbb274fd39911d8ca.js → chunk-404.34b136a50b9cf1357c4f.js} +1 -2
  8. package/dist/{chunk-413.a87d7653543f87fb986b.js → chunk-413.8f9875231f3ea3dc91b3.js} +1 -2
  9. package/dist/{chunk-51.6b8c9d2c2b4f89de46ce.js → chunk-51.ff992f4a4488d7d44357.js} +1 -2
  10. package/dist/{chunk-696.c28466168bbf1bd96ac6.js → chunk-696.4246384f89ce1ee8933f.js} +1 -2
  11. package/dist/{chunk-82.31084b7daa6e3ae23a98.js → chunk-82.fe992385267f6eb716e8.js} +1 -2
  12. package/dist/{chunk-actions.a3c953c898ab2901a5b6.js → chunk-actions.66c72d85dd44315566fe.js} +1 -2
  13. package/dist/{chunk-code-editor.24492a0a1c34a4a13233.js → chunk-code-editor.64a44ea8d4fed4580847.js} +1 -2
  14. package/dist/chunk-vendor-icons.c1cc12e8f9e141eb191b.js +1 -0
  15. package/dist/index.js +2 -3
  16. package/package.json +1 -1
  17. package/dist/chunk-229.e12c5922ff4247f8e928.js.map +0 -1
  18. package/dist/chunk-314.06fbc31e051912aa797d.js.map +0 -1
  19. package/dist/chunk-333.94430ae53118a015e8b6.js.map +0 -1
  20. package/dist/chunk-335.fdc7bbdeec181e5348b5.js.map +0 -1
  21. package/dist/chunk-342.662b51c5da9667aa463c.js.map +0 -1
  22. package/dist/chunk-404.9cfbbb274fd39911d8ca.js.map +0 -1
  23. package/dist/chunk-413.a87d7653543f87fb986b.js.map +0 -1
  24. package/dist/chunk-51.6b8c9d2c2b4f89de46ce.js.map +0 -1
  25. package/dist/chunk-696.c28466168bbf1bd96ac6.js.map +0 -1
  26. package/dist/chunk-82.31084b7daa6e3ae23a98.js.map +0 -1
  27. package/dist/chunk-actions.a3c953c898ab2901a5b6.js.map +0 -1
  28. package/dist/chunk-code-editor.24492a0a1c34a4a13233.js.map +0 -1
  29. package/dist/chunk-vendor-icons.2dfa9e40ce8cf6fce5bd.js +0 -1
  30. package/dist/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///./packages/admin/src/routes/docs/components/DocsBrowserApp/DocsBrowserApp.js","webpack:///./packages/admin/src/routes/docs/components/DocsBrowserApp/DocsBrowserAppContainer.js","webpack:///./packages/admin/src/routes/docs/route.js","webpack:///./packages/app-extensions/src/selection/selectionTypes.js","webpack:///./packages/app-extensions/src/selection/proptype.js","webpack:///./packages/app-extensions/src/selection/selection.js","webpack:///./packages/app-extensions/src/selection/index.js","webpack:///./packages/delete/src/modules/delete/actions.js","webpack:///./packages/delete/src/components/InfoPart/LinkPopOver.js","webpack:///./packages/delete/src/components/InfoPart/InfoPart.js","webpack:///./packages/delete/src/components/DeleteProgress/StyledComponents.js","webpack:///./packages/delete/src/components/DeleteProgress/DeleteProgress.js","webpack:///./packages/delete/src/components/DeleteProgress/DeleteProgressContainer.js","webpack:///./packages/delete/src/components/DeleteProgress/index.js","webpack:///./packages/tocco-ui/src/SignalBox/StyledSignalBox.js","webpack:///./packages/tocco-ui/src/SignalBox/SignalBox.js","webpack:///./packages/delete/src/components/Dialog/StyledComponents.js","webpack:///./packages/delete/src/components/Dialog/Dialog.js","webpack:///./packages/delete/src/components/Dialog/DialogContainer.js","webpack:///./packages/delete/src/components/Delete/Delete.js","webpack:///./packages/delete/src/components/Delete/DeleteContainer.js","webpack:///./packages/delete/src/components/Delete/index.js","webpack:///./packages/delete/src/modules/delete/reducer.js","webpack:///./packages/delete/src/utils/deleteRequestParser.js","webpack:///./packages/delete/src/modules/delete/sagas.js","webpack:///./packages/delete/src/modules/reducers.js","webpack:///./packages/delete/src/main.js","webpack:///./packages/docs-browser/src/components/Action/actions/CreateDomain.js","webpack:///./packages/docs-browser/src/components/Action/actions/CreateFolder.js","webpack:///./packages/docs-browser/src/components/Action/actions/Delete.js","webpack:///./packages/docs-browser/src/components/Action/actions/Edit.js","webpack:///./packages/docs-browser/src/components/Action/actions/Move.js","webpack:///./packages/docs-browser/src/components/Action/actions/MoveContainer.js","webpack:///./packages/docs-browser/src/utils/getDetailFormName.js","webpack:///./packages/entity-list/src/util/searchFormTypes.js","webpack:///./packages/entity-list/src/util/selectionStyles.js","webpack:///./packages/tocco-ui/src/AdminLink/linkStyle.js","webpack:///./packages/tocco-ui/src/AdminLink/StyledLink.js","webpack:///./packages/tocco-ui/src/Breadcrumbs/StyledBreadcrumbs.js","webpack:///./packages/tocco-ui/src/Breadcrumbs/Breadcrumbs.js","webpack:///./packages/tocco-ui/src/CodeEditor/requestHelper.js","webpack:///./packages/tocco-ui/src/CodeEditor/TqlConstants.js","webpack:///./packages/tocco-ui/src/CodeEditor/TqlHighlighter.js","webpack:///./packages/tocco-ui/src/CodeEditor/FtlHighlighter.js","webpack:///./packages/tocco-ui/src/CodeEditor/TqlAutoCompleter.js","webpack:///./packages/tocco-ui/src/CodeEditor/ToccoFtlMode.js","webpack:///./packages/tocco-ui/src/CodeEditor/TqlMode.js","webpack:///./packages/tocco-ui/src/CodeEditor/AceEditor.js","webpack:///./packages/tocco-ui/src/DatePicker/StyledDatePicker.js","webpack:///./packages/tocco-ui/src/DatePicker/DatePicker.js","webpack:///./packages/tocco-ui/src/DatePicker/useDatePickr.js","webpack:///./packages/tocco-ui/src/EditableValue/typeEditors/StyledDatePicker.js","webpack:///./packages/tocco-ui/src/EditableValue/typeEditors/DatePicker.js","webpack:///./packages/tocco-ui/src/DatePicker/GlobalDatePickerStyles.js","webpack:///./packages/tocco-ui/src/GlobalStyles/GlobalStyles.js","webpack:///./packages/tocco-ui/src/LoadingSpinner/LoadingSpinner.js","webpack:///./packages/tocco-ui/src/Table/propTypes.js","webpack:///./packages/tocco-ui/src/Table/scrollBehaviour.js","webpack:///./packages/tocco-util/src/route/path.js","webpack:///./packages/tocco-util/src/route/route.js","webpack:///./packages/tocco-util/src/route/RouteWithSubRoutes.js","webpack:///./packages/tocco-util/src/route/Router.js","webpack:///./packages/tocco-util/src/route/index.js","webpack:///./packages/tocco-util/src/route/asyncRoute.js","webpack:///./packages/tocco-util/src/route/input.js","webpack:///./packages/tocco-util/src/validation/validation.js","webpack:///./packages/tocco-util/src/validation/index.js","webpack:///./packages/tocco-util/src/viewPersistor/viewPersistor.js","webpack:///./packages/tocco-util/src/viewPersistor/index.js","webpack:///./node_modules/history/DOMUtils.js","webpack:///./node_modules/history/LocationUtils.js","webpack:///./node_modules/history/PathUtils.js","webpack:///./node_modules/history/createHashHistory.js","webpack:///./node_modules/history/createTransitionManager.js","webpack:///./node_modules/redux-form/es/getFormAsyncErrors.js","webpack:///./node_modules/redux-form/es/selectors/getFormAsyncErrors.js","webpack:///./node_modules/redux-form/es/getFormInitialValues.js","webpack:///./node_modules/redux-form/es/selectors/getFormInitialValues.js","webpack:///./node_modules/redux-form/es/getFormSubmitErrors.js","webpack:///./node_modules/redux-form/es/selectors/getFormSubmitErrors.js","webpack:///./node_modules/redux-form/es/getFormSyncErrors.js","webpack:///./node_modules/redux-form/es/selectors/getFormSyncErrors.js"],"names":["ListLink","entityName","entityKeys","children","rootNodes","map","key","StyledLink","to","JSON","stringify","target","props","queryParams","queryString","history","location","search","routerType","navigationStrategy","DetailLink","parse","searchFormCollapsed","onSearchFormCollapsedChange","collapsed","saveUserPreferences","scrollBehaviour","mapActionCreators","container","connect","state","_get","preferences","userPreferences","injectIntl","DocsBrowserApp","ID","QUERY","PropTypes","ids","propName","componentName","selection","type","selectionTypes","Error","query","Object","keys","isRequired","count","getEntities","fetchEntities","call","limit","entities","length","consoleLogger","e","getSingleKey","expectedEntityName","propType","setDeleteDialogInfo","dialogInfo","payload","doDelete","setEntitiesToDelete","entitiesToDelete","Typography","id","relatedEntity","maxCountLink","keysOtherBu","content","values","Popover","placement","NonBreakingText","styled","rootEntities","relatedEntities","entries","rootEntityName","rootEntity","entityLabel","reduce","prev","curr","linkText","Count","slice","Content","StyledIconWrapper","scale","size","rootEntitiesDeletable","relatedDeletable","del","input","DeleteProgress","ALLOWED_CONDITIONS","design","COLORS","theme","shadeColor","StyledSignalBox","condition","getColor","StyledSignalListItem","propTypes","SignalBox","title","React","child","meta","defaultProps","StyledSectionWrapper","StyledButtonsWrapper","StyledButton","rootEntitiesNotDeletable","relatedNotDeletable","hasUnreadableEntities","onCancel","Button","onClick","disabled","every","entity","ink","Dialog","loadDialogInfo","deletingInProgress","intl","useEffect","LoadMask","required","loadingText","formatMessage","Delete","ACTION_HANDLERS","reducerUtil","initialState","deleteStatus","transformRootEntity","applyKeys","includes","split","entityNameReal","keyReal","isEntityDeletable","entityToDelete","affectedEntities","find","affectedEntity","getDialogInfo","response","currentBuId","acc","deletable","relatedAttr","businessUnitId","Array","from","Set","transformRelatedEntities","unreadableEntities","getEntitiesToDelete","deleteEntityPropType","getDeleteBodyFromSelection","getDeleteEndpoint","mainSagas","inputSelector","textResourceSelector","messages","entitiesToDeleteSelector","select","selectionUtil","rest","entityModel","customDeleteEndpoint","body","deleteEndpoint","all","method","deleteResponse","principal","currentBusinessUnit","put","actions","acceptedStatusCodes","textResources","ok","deletedEntities","remoteEvents","externalEvents","message","status","information","takeLatest","action","handler","sagas","deleteSagas","EXTERNAL_EVENTS","initApp","events","publicPath","store","appFactory","reducers","actionEmitter","emitAction","handleNotifications","notification","textResourceModules","DeleteApp","packageName","component","withRouterTypeCompProvider","path","context","onSuccess","locale","parent","getNode","defaultValues","model","value","formName","getDetailFormName","mode","onEntityCreated","toaster","isActionBlocked","navigate","entityKey","entityId","onEntityUpdated","onEntityDeleted","StyledLoadMask","initialize","moveElements","isWaiting","docs","move","domainTypes","businessUnit","onError","initialNode","initialParent","useState","setParent","getCustomLocation","initialLocation","getInitialLocation","listLimit","selectionStyle","searchFormType","disableViewPersistor","getListFormName","onListParentChange","embedded","noLeftPadding","sortable","look","_isEqual","detailFormNames","searchFormTypes","NONE","FULLTEXT","SIMPLE","SIMPLE_ADVANCED","ADVANCED","ADMIN","searchFormTypePropTypes","selectionStyles","SINGLE","MULTI","MULTI_EXPLICIT","selectionStylePropType","linkStyle","css","declareFont","neutral","Link","withConfig","shouldForwardProp","prop","defaultValidatorFn","StyledBreadcrumbs","backgroundColor","StyledBreadcrumbsLink","active","StyledBreadcrumbsTitle","icon","Breadcrumbs","pathPrefix","breadcrumbsInfo","currentView","LinkComp","linkComp","breadcrumbs","Helmet","defer","breadcrumb","display","reverse","join","getTitle","b","idx","breadcrumbsItem","Comp","sendRequest","endpoint","request","extractBody","json","operators","atoms","types","placeholders","functions","implicitModel","commonWhere","token","regex","caseInsensitive","push","customRules","start","next","rootwhere","comparison","exists","existswhere","countwhere","order","$rules","_mergeWith","objValue","srcValue","_isArray","concat","undefined","normalizeRules","ace","TextHighlightRules","ToccoFtlLangHighlightRules","match","qstring","defaultToken","ToccoFtlHighlightRules","tqlDirectives","startRules","unshift","apply","embedRules","addRules","tqlEndRules","TqlHighlighter","mergingRules","HtmlHighlightRules","TokenIterator","getTokenType","substring","lastIndexOf","isCurrentTokenOfType","iterator","getCurrentToken","findLastPathStep","stepBackward","modelToken","trim","stepBackUntilToken","handleParentheses","parenCount","findLastModelScope","findCurrentPath","stepForward","backtrack","stepBack","steps","lastStep","isArray","forEach","step","findCurrentModelScope","determineAvailablePaths","createIterator","callback","baseModel","modelScope","determineModelScope","currentPath","relationSteps","sourceModel","resolvePart","buildResolveUrl","then","fields","relations","f","label","fieldName","r","relation","relationName","targetEntity","resolvePath","paths","pathCompletions","caption","score","errors","loadAllAvailableModels","models","modelCompletions","getAvailableFunctions","toUpperCase","defaultScore","getCompletions","editor","session","pos","prefix","createIteratorAtCurrentPosition","row","column","currentToken","previousToken","placeholder","ToccoFtlMode","HighlightRules","completer","TqlAutoCompleter","Mode","TqlMode","implicitModelName","snippedIdField","StyledEditor","modeMappings","groovy","GroovyMode","html","HtmlMode","xml","XmlMode","properties","PropertiesMode","JsonMode","htmlmixed","freemarkermixed","ftl","tql","less","LessMode","drools","DroolsMode","text","TextMode","setEditorConfiguration","showGutter","editorOptions","_isString","Promise","resolve","_isObject","field","moduleEntity","loadImplicitModel","getMode","editorMode","getSession","setMode","setTheme","k","v","setOption","renderer","setShowGutter","resize","onChange","containerReference","useRef","editorReference","editorConfig","useMemo","aceEditor","current","setValue","on","getValue","destroy","ref","StyledWrapper","DatePicker","wrapperElement","fontFamily","initializeFlatPickr","useDatePickr","flatpickrOptions","shouldAppend","data-wrap","data-toggle","style","data-input","aria-label","withTheme","localeMap","German","de","fr","French","it","Italian","handleOnChange","selectedDates","toISOString","element","config","flatpickr","prevFlatpickrOptions","react","setDate","redraw","calendarLocale","l10ns","en","localize","set","optionsDiff","js","options","wrap","altInput","enableTime","defaultDate","appendTo","flatpickrInstance","calendarContainer","StyledDatePickerInput","StyledInputCss","StyledDatePickerValue","StyledDatePickerOuterWrapper","immutable","StyledDatePickerWrapper","StyledEditableWrapperCss","focusFlatpickrInput","wrapper","inputElement","querySelector","focus","parseDate","formatDate","initialized","setInitialized","altInputClass","clickOpens","val","handleOnBlur","parsed","focusInput","classList","add","addEventListener","handleConfirmKey","setTimeout","contains","shiftKey","close","preventDefault","stopPropagation","hasValue","tabIndex","onFocus","open","onKeyDown","onBlur","className","placeholderText","Ball","msg","onMouseDown","secondaryLight","secondary","paper","regular","baseSpace","GlobalDatePickerStyles","createGlobalStyle","fontSize","spin","faCircleNotch","keyPropType","rowDataPropType","__key","scrollBehaviourPropType","ScrollBehaviour","sorting","sortRank","resizable","width","HeaderRenderer","CellRenderer","rightAligned","INLINE","loadedComponents","getRenderFn","route","router","routes","render","exact","loadRoute","importRouteDependencies","Component","getComponent","imported","saga","sagaUtil","inputDispatches","inputDispatch","actionCreator","mandatory","defaultValue","logger","prototype","hasOwnProperty","dispatch","dispatchInput","setComponent","mounted","result","Router","i","RouteWithSubRoutes","extractParamsFromPath","pathRegex","pathParts","res","pathToRegexp","exec","pathPart","name","getFirstElement","obj","getErrorCompact","error","entityValidatorErrors","persistedViews","persistViewInfo","info","level","viewInfoSelector","clearPersistedViews","persistedView","exports","__esModule","canUseDOM","window","document","createElement","node","event","listener","attachEvent","removeEventListener","detachEvent","getConfirmation","confirm","supportsHistory","ua","navigator","userAgent","indexOf","supportsPopStateOnHashChange","supportsGoWithoutReloadUsingHash","isExtraneousPopstateEvent","locationsAreEqual","createLocation","_extends","assign","arguments","source","_resolvePathname2","_interopRequireDefault","_valueEqual2","_PathUtils","default","currentLocation","parsePath","pathname","charAt","hash","decodeURI","URIError","a","addLeadingSlash","stripLeadingSlash","substr","hasBasename","RegExp","test","stripBasename","stripTrailingSlash","hashIndex","searchIndex","createPath","_warning2","_invariant2","_LocationUtils","_createTransitionManager2","_DOMUtils","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","getHashPath","href","pushHashPath","replaceHashPath","replace","globalHistory","canGoWithoutReload","_props$getUserConfirm","getUserConfirmation","_props$hashType","hashType","basename","_HashPathCoders$hashT","getDOMLocation","transitionManager","setState","nextState","notifyListeners","forceNextPop","ignorePath","handleHashChange","encodedPath","prevLocation","handlePop","confirmTransitionTo","revertPop","fromLocation","toLocation","toIndex","allPaths","fromIndex","delta","go","createHref","prevIndex","nextPaths","n","goBack","goForward","listenerCount","checkDOMListeners","isBlocked","block","prompt","unblock","setPrompt","listen","unlisten","appendListener","_warning","listeners","nextPrompt","fn","isActive","filter","item","_len","args","_key","_ref","plain","getIn","form","getFormState","nonNullGetFormState","empty"],"mappings":"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","file":"chunk-code-editor.24492a0a1c34a4a13233.js","sourcesContent":["import PropTypes from 'prop-types'\nimport queryString from 'query-string'\nimport React from 'react'\nimport DocsBrowser from 'tocco-docs-browser/src/main'\nimport {AdminLink as StyledLink} from 'tocco-ui'\n\nimport {DetailLink} from '../../../entities/utils/navigationStrategy'\n\nexport const ListLink = ({entityName, entityKeys, children}) => {\n const rootNodes = entityKeys.map(key => ({entityName, key}))\n return (\n <StyledLink to={`/docs?rootNodes=${JSON.stringify(rootNodes)}`} target=\"_blank\">\n {children}\n </StyledLink>\n )\n}\n\nListLink.propTypes = {\n entityName: PropTypes.string.isRequired,\n children: PropTypes.any.isRequired,\n entityKeys: PropTypes.arrayOf(PropTypes.string)\n}\n\nconst DocsBrowserApp = props => {\n const queryParams = queryString.parse(props.history.location.search)\n\n return (\n <DocsBrowser\n {...props}\n routerType=\"inherit\"\n navigationStrategy={{\n ListLink,\n DetailLink\n }}\n {...(queryParams.rootNodes && {rootNodes: JSON.parse(queryParams.rootNodes)})}\n searchFormCollapsed={props.searchFormCollapsed}\n onSearchFormCollapsedChange={({collapsed}) => {\n props.saveUserPreferences({'admin.list.searchFormCollapsed': collapsed})\n }}\n scrollBehaviour=\"inline\"\n />\n )\n}\n\nDocsBrowserApp.propTypes = {\n history: PropTypes.object.isRequired,\n searchFormCollapsed: PropTypes.bool,\n saveUserPreferences: PropTypes.func\n}\n\nexport default DocsBrowserApp\n","import _get from 'lodash/get'\nimport {injectIntl} from 'react-intl'\nimport {connect} from 'react-redux'\n\nimport {saveUserPreferences} from '../../../../modules/preferences/actions'\nimport DocsBrowserApp from './DocsBrowserApp'\n\nconst mapActionCreators = {\n saveUserPreferences\n}\n\nconst mapStateToProps = (state, props) => ({\n searchFormCollapsed: _get(state.preferences.userPreferences, 'admin.list.searchFormCollapsed', null)\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(DocsBrowserApp))\n","import DocsBrowserApp from './components/DocsBrowserApp'\n\nexport default {\n container: DocsBrowserApp\n}\n","export default {\n ID: 'ID',\n QUERY: 'QUERY'\n}\n","import PropTypes from 'prop-types'\n\nimport selectionTypes from './selectionTypes'\n\nexport default PropTypes.shape({\n entityName: PropTypes.string.isRequired,\n ids: (props, propName, componentName) => {\n if (props.selection && props.selection.type === selectionTypes.ID && !props.selection[propName]) {\n return new Error(`Selection.ids prop not defined. Component: ${componentName}'.`)\n }\n },\n query: (props, propName, componentName) => {\n if (props.selection && props.selection.type === selectionTypes.QUERY && !props.selection[propName]) {\n return new Error(`Selection.query prop not defined. Component: ${componentName}'.`)\n }\n },\n type: PropTypes.oneOf(Object.keys(selectionTypes)).isRequired,\n count: PropTypes.number\n})\n","import {call} from 'redux-saga/effects'\nimport {consoleLogger} from 'tocco-util'\n\nimport selectionTypes from './selectionTypes'\n\nconst limit = 100000\n/**\n * Helper to get all entitiy keys of a selection.\n * @param {object} selection - selection object\n * @param {function} fetchEntities - rest helper function\n * @returns {object} Object containing entityName and an array of keys (limited if selection is query)\n */\nexport function* getEntities(selection, fetchEntities) {\n const {entityName} = selection\n if (selection.type === selectionTypes.QUERY) {\n const entities = yield call(fetchEntities, selection.entityName, {...selection.query, limit})\n\n if (entities.length > limit) {\n yield call(consoleLogger.logError, `Selected records exceed limit of ${limit}`)\n }\n\n return {\n entityName,\n keys: entities.map(e => e.key)\n }\n }\n\n return {\n entityName,\n keys: selection.ids\n }\n}\n\n/**\n * Helper to get single entity key of a seletion.\n * Throws error\n * - if wront entity is selected\n * - if `selection.type` is not `ID`\n * - if none or more than one entity is selected\n * @param {object} selection - selection object\n * @param {string} expectedEntityName - selected entityName\n * @returns {string} ID of single selected entity\n */\nexport const getSingleKey = (selection, expectedEntityName) => {\n if (selection.entityName !== expectedEntityName) {\n throw new Error(`Only selection of ${expectedEntityName} supported`)\n }\n if (selection.type !== 'ID') {\n throw new Error('Only ID selection type supported')\n }\n if (!selection.ids || selection.ids.length !== 1) {\n throw new Error(`Exactly one ${expectedEntityName} must be selected`)\n }\n return selection.ids[0]\n}\n","import propType from './proptype'\nimport {getEntities, getSingleKey} from './selection'\nimport selectionTypes from './selectionTypes'\nexport default {\n getEntities,\n getSingleKey,\n propType,\n selectionTypes\n}\n","export const LOAD_DIALOG_INFO = 'root/LOAD_DIALOG_INFO'\nexport const SET_DIALOG_INFO = 'delete/SET_DELETE_DIALOG_INFO'\nexport const DO_DELETE = 'delete/DO_DELETE'\nexport const SET_DELETING_IN_PROGRESS = 'delete/SET_DELETING_IN_PROGRESS'\nexport const ON_CANCEL = 'delete/ON_CANCEL'\nexport const SET_ENTITIES_TO_DELETE = 'delete/SET_ENTITIES_TO_DELETE'\n\nexport const loadDialogInfo = () => ({\n type: LOAD_DIALOG_INFO\n})\n\nexport const setDeleteDialogInfo = dialogInfo => ({\n type: SET_DIALOG_INFO,\n payload: {\n dialogInfo\n }\n})\n\nexport const doDelete = () => ({\n type: DO_DELETE\n})\n\nexport const setDeletingInProgress = deletingInProgress => ({\n type: SET_DELETING_IN_PROGRESS,\n payload: {\n deletingInProgress\n }\n})\n\nexport const onCancel = () => ({\n type: ON_CANCEL\n})\n\nexport const setEntitiesToDelete = entitiesToDelete => ({\n type: SET_ENTITIES_TO_DELETE,\n payload: {\n entitiesToDelete\n }\n})\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {FormattedMessage} from 'react-intl'\nimport {Popover, Typography} from 'tocco-ui'\n\nimport {deleteEntityPropType} from '../../utils/deleteRequestParser'\n\nconst LinkPopOver = ({relatedEntity, children, maxCountLink}) => {\n if (relatedEntity.keys.length < maxCountLink && relatedEntity.keysOtherBu.length === 0) {\n return children\n }\n\n const content = (\n <>\n {relatedEntity.keys.length > maxCountLink && (\n <Typography.P>\n <FormattedMessage id=\"client.delete.tooManyRecords\" />\n </Typography.P>\n )}\n {relatedEntity.keysOtherBu.length > 0 && (\n <Typography.P>\n <FormattedMessage id=\"client.delete.recordInOtherBU\" values={{count: relatedEntity.keysOtherBu.length}} />\n </Typography.P>\n )}\n </>\n )\n\n return (\n <Popover content={content} placement=\"top\">\n {children}\n </Popover>\n )\n}\n\nLinkPopOver.propTypes = {\n relatedEntity: deleteEntityPropType.isRequired,\n maxCountLink: PropTypes.number.isRequired,\n children: PropTypes.element\n}\n\nexport default LinkPopOver\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {Typography} from 'tocco-ui'\nimport {navigationStrategy} from 'tocco-util'\n\nimport {deleteEntityPropType} from '../../utils/deleteRequestParser'\nimport LinkPopOver from './LinkPopOver'\n\nconst NonBreakingText = styled.span`\n white-space: nowrap;\n`\n\nconst InfoPart = ({rootEntities, relatedEntities, maxCountLink, navigationStrategy}) => (\n <Typography.Span>\n <Typography.B>\n {Object.entries(rootEntities)\n .map(([rootEntityName, rootEntity]) => (\n <span key={`root-entity-${rootEntityName}`}>\n {rootEntity.entityLabel} (\n {rootEntity.keys.length > 0 && navigationStrategy.ListLink ? (\n <navigationStrategy.ListLink entityName={rootEntityName} entityKeys={rootEntity.keys}>\n {rootEntity.keys.length}\n </navigationStrategy.ListLink>\n ) : (\n <Typography.Span>{rootEntity.keys.length}</Typography.Span>\n )}\n )\n </span>\n ))\n .reduce((prev, curr) => [prev, ', ', curr])}\n </Typography.B>\n {Object.keys(relatedEntities).length > 0 && (\n <>\n <span> / </span>\n {Object.keys(relatedEntities)\n .map(entityName => {\n const relatedEntity = relatedEntities[entityName]\n const linkText = [...relatedEntity.keys, ...relatedEntity.keysOtherBu].length\n\n const Count =\n relatedEntity.keys.length > 0 && navigationStrategy.ListLink ? (\n <navigationStrategy.ListLink\n entityName={entityName}\n entityKeys={relatedEntity.keys.slice(0, maxCountLink)}\n >\n {linkText}\n </navigationStrategy.ListLink>\n ) : (\n <Typography.Span>{linkText}</Typography.Span>\n )\n\n const Content = (\n <LinkPopOver relatedEntity={relatedEntity} maxCountLink={maxCountLink}>\n {Count}\n </LinkPopOver>\n )\n\n return (\n <React.Fragment key={'entity-info-' + entityName}>\n <NonBreakingText>\n {relatedEntity.entityLabel} ({Content})\n </NonBreakingText>\n </React.Fragment>\n )\n })\n .reduce((prev, curr) => [prev, ', ', curr])}\n </>\n )}\n </Typography.Span>\n)\n\nInfoPart.propTypes = {\n rootEntities: PropTypes.objectOf(\n PropTypes.shape({\n entityLabel: PropTypes.string.isRequired,\n keys: PropTypes.arrayOf(PropTypes.string).isRequired\n })\n ).isRequired,\n relatedEntities: PropTypes.objectOf(deleteEntityPropType).isRequired,\n maxCountLink: PropTypes.number,\n navigationStrategy: navigationStrategy.propTypes\n}\n\nexport default InfoPart\n","import styled from 'styled-components'\nimport {scale} from 'tocco-ui'\n\nexport const StyledIconWrapper = styled.div`\n margin-bottom: ${scale.space(0.2)};\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {FormattedMessage} from 'react-intl'\nimport {LoadingSpinner, Typography} from 'tocco-ui'\nimport {navigationStrategy} from 'tocco-util'\n\nimport {deleteInfoPropType} from '../../utils/deleteRequestParser'\nimport InfoPart from '../InfoPart'\nimport {StyledIconWrapper} from './StyledComponents'\n\nconst DeleteProgress = ({dialogInfo, navigationStrategy}) => {\n return (\n <>\n <StyledIconWrapper>\n <LoadingSpinner size=\"30px\" />\n </StyledIconWrapper>\n <Typography.P>\n <FormattedMessage id=\"client.delete.deleteInProgress\" />\n </Typography.P>\n <InfoPart\n key=\"infopart-deletable\"\n rootEntities={dialogInfo.rootEntitiesDeletable}\n relatedEntities={dialogInfo.relatedDeletable}\n maxCountLink={100}\n navigationStrategy={navigationStrategy}\n />\n </>\n )\n}\n\nDeleteProgress.propTypes = {\n dialogInfo: deleteInfoPropType.isRequired,\n intl: PropTypes.object.isRequired,\n navigationStrategy: navigationStrategy.propTypes\n}\n\nexport default DeleteProgress\n","import {injectIntl} from 'react-intl'\nimport {connect} from 'react-redux'\n\nimport {doDelete} from '../../modules/delete/actions'\nimport DeleteProgress from './DeleteProgress'\n\nconst mapActionCreators = {\n doDelete\n}\n\nconst mapStateToProps = (state, props) => ({\n dialogInfo: state.del.dialogInfo,\n navigationStrategy: state.input.navigationStrategy\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(DeleteProgress))\n","import DeleteProgress from './DeleteProgressContainer'\n\nexport default DeleteProgress\n","import _get from 'lodash/get'\nimport styled from 'styled-components'\n\nimport {StyledSignalListItem} from '../SignalList'\nimport {design, scale, shadeColor, theme} from '../utilStyles'\n\nconst ALLOWED_CONDITIONS = [\n design.condition.BASE,\n design.condition.DANGER,\n design.condition.SUCCESS,\n design.condition.WARNING\n]\n\nconst COLORS = {\n [design.condition.DANGER]: theme.color('signal.danger.paper'),\n [design.condition.SUCCESS]: theme.color('signal.success.paper'),\n [design.condition.WARNING]: theme.color('signal.warning.paper'),\n [design.condition.BASE]: props => shadeColor(_get(props.theme, 'colors.paper'), 1)\n}\n\nconst getColor = props => {\n const color = COLORS[props.condition]\n return color || shadeColor(_get(props.theme, 'colors.paper'), 1)\n}\n\nconst StyledSignalBox = styled.div`\n && {\n background-color: ${props => getColor(props)};\n padding: ${scale.space(-1)};\n margin-bottom: ${scale.space(-1)};\n border-radius: ${theme.radii('radii.regular')};\n\n &:last-child {\n margin-bottom: 0;\n }\n\n ${StyledSignalListItem} {\n color: inherit;\n }\n }\n`\n\nStyledSignalBox.propTypes = {\n condition: design.oneOfPropTypeAndCompletelyMapped(ALLOWED_CONDITIONS, COLORS)\n}\n\nexport {ALLOWED_CONDITIONS, StyledSignalBox as default}\n","import PropTypes from 'prop-types'\nimport React from 'react'\n\nimport Typography from '../Typography'\nimport {design} from '../utilStyles'\nimport StyledSignalBox, {ALLOWED_CONDITIONS} from './StyledSignalBox'\n\n/**\n * Emphasize important information by context. Group them by utilizing several instances of <SignalBox/>.\n */\nconst SignalBox = props => (\n <StyledSignalBox condition={props.condition}>\n {props.title && <Typography.H5>{props.title}</Typography.H5>}\n {React.Children.map(props.children, child => React.cloneElement(child))}\n {props.meta && <Typography.Small>{props.meta}</Typography.Small>}\n </StyledSignalBox>\n)\n\nSignalBox.defaultProps = {\n condition: design.condition.BASE\n}\n\nSignalBox.propTypes = {\n /**\n * Prefer <SignalList.List/> and <SignalList.Item/> to list items over any other typographic component.\n */\n children: PropTypes.node,\n /**\n * Background is colorized according condition. Default value is 'base'.\n * Possible values: base|danger|success|warning\n */\n condition: PropTypes.oneOf(ALLOWED_CONDITIONS),\n /**\n * Add loosely related but still important information as meta text (e.g. date, id, type).\n */\n meta: PropTypes.string,\n /**\n * Summarize information from whole signal box concise.\n */\n title: PropTypes.string\n}\n\nexport default SignalBox\n","import styled from 'styled-components'\nimport {StyledButton, scale} from 'tocco-ui'\n\nexport const StyledSectionWrapper = styled.div`\n padding-top: ${scale.space(0.6)};\n`\n\nexport const StyledButtonsWrapper = styled.div`\n display: flex;\n justify-content: flex-end;\n\n ${StyledButton} {\n margin-right: 0;\n }\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {FormattedMessage} from 'react-intl'\nimport {Button, Typography, SignalBox} from 'tocco-ui'\nimport {navigationStrategy} from 'tocco-util'\n\nimport {deleteInfoPropType} from '../../utils/deleteRequestParser'\nimport InfoPart from '../InfoPart'\nimport {StyledSectionWrapper, StyledButtonsWrapper} from './StyledComponents'\n\nconst Dialog = ({\n dialogInfo: {\n rootEntitiesDeletable,\n rootEntitiesNotDeletable,\n relatedDeletable,\n relatedNotDeletable,\n hasUnreadableEntities\n },\n doDelete,\n onCancel,\n navigationStrategy\n}) => (\n <>\n <Typography.P>\n <FormattedMessage id=\"client.delete.confirmText\" />\n </Typography.P>\n <InfoPart\n key=\"infopart-deletable\"\n rootEntities={rootEntitiesDeletable}\n relatedEntities={relatedDeletable}\n maxCountLink={100}\n navigationStrategy={navigationStrategy}\n />\n {Object.keys(rootEntitiesNotDeletable).length > 0 && (\n <StyledSectionWrapper>\n <Typography.P>\n <FormattedMessage id=\"client.delete.textNotDeletable\" />\n </Typography.P>\n <InfoPart\n key=\"infopart-notdeletable\"\n rootEntities={rootEntitiesNotDeletable}\n relatedEntities={relatedNotDeletable}\n maxCountLink={100}\n navigationStrategy={navigationStrategy}\n />\n </StyledSectionWrapper>\n )}\n {hasUnreadableEntities && (\n <StyledSectionWrapper>\n <SignalBox condition=\"warning\">\n <Typography.Span>\n <FormattedMessage id=\"client.delete.unreadableEntities\" />\n </Typography.Span>\n </SignalBox>\n </StyledSectionWrapper>\n )}\n <StyledSectionWrapper>\n <StyledButtonsWrapper>\n <Button\n onClick={doDelete}\n disabled={Object.keys(rootEntitiesDeletable).every(entity => rootEntitiesDeletable[entity].keys.length === 0)}\n >\n <FormattedMessage id=\"client.delete.deleteButton\" />\n </Button>\n <Button ink=\"primary\" onClick={onCancel}>\n <FormattedMessage id=\"client.delete.cancelButton\" />\n </Button>\n </StyledButtonsWrapper>\n </StyledSectionWrapper>\n </>\n)\n\nDialog.propTypes = {\n onCancel: PropTypes.func.isRequired,\n doDelete: PropTypes.func.isRequired,\n dialogInfo: deleteInfoPropType.isRequired,\n navigationStrategy: navigationStrategy.propTypes\n}\n\nexport default Dialog\n","import {injectIntl} from 'react-intl'\nimport {connect} from 'react-redux'\n\nimport {doDelete, onCancel} from '../../modules/delete/actions'\nimport Dialog from './Dialog'\n\nconst mapActionCreators = {\n doDelete,\n onCancel\n}\n\nconst mapStateToProps = (state, props) => ({\n dialogInfo: state.del.dialogInfo,\n navigationStrategy: state.input.navigationStrategy\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(Dialog))\n","import PropTypes from 'prop-types'\nimport React, {useEffect} from 'react'\nimport {LoadMask} from 'tocco-ui'\n\nimport {deleteInfoPropType} from '../../utils/deleteRequestParser'\nimport DeleteProgress from '../DeleteProgress'\nimport Dialog from '../Dialog'\n\nconst Delete = ({loadDialogInfo, dialogInfo, deletingInProgress, intl}) => {\n useEffect(() => {\n loadDialogInfo()\n }, [loadDialogInfo])\n\n const msg = id => intl.formatMessage({id})\n\n if (deletingInProgress) {\n return <DeleteProgress />\n }\n\n return (\n <LoadMask required={[dialogInfo]} loadingText={msg('client.delete.loadingText')}>\n {dialogInfo && <Dialog />}\n </LoadMask>\n )\n}\n\nDelete.propTypes = {\n loadDialogInfo: PropTypes.func.isRequired,\n dialogInfo: deleteInfoPropType,\n deletingInProgress: PropTypes.bool,\n intl: PropTypes.object.isRequired\n}\n\nexport default Delete\n","import {injectIntl} from 'react-intl'\nimport {connect} from 'react-redux'\n\nimport {loadDialogInfo} from '../../modules/delete/actions'\nimport Delete from './Delete'\n\nconst mapActionCreators = {\n loadDialogInfo\n}\n\nconst mapStateToProps = (state, props) => ({\n dialogInfo: state.del.dialogInfo,\n deletingInProgress: state.del.deletingInProgress\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(Delete))\n","import Delete from './DeleteContainer'\n\nexport default Delete\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst ACTION_HANDLERS = {\n [actions.SET_DIALOG_INFO]: reducerUtil.singleTransferReducer('dialogInfo'),\n [actions.SET_ENTITIES_TO_DELETE]: reducerUtil.singleTransferReducer('entitiesToDelete'),\n [actions.SET_DELETING_IN_PROGRESS]: reducerUtil.singleTransferReducer('deletingInProgress')\n}\n\nconst initialState = {\n dialogInfo: null,\n entitiesToDelete: null,\n deletingInProgress: false\n}\n\nexport default function reducer(state = initialState, action) {\n const handler = ACTION_HANDLERS[action.type]\n return handler ? handler(state, action) : state\n}\n","import _get from 'lodash/get'\nimport PropTypes from 'prop-types'\n\nconst deleteStatus = {\n DELETABLE: 'DELETABLE',\n DENIED_BY_CASCADE: 'DENIED_BY_CASCADE',\n NO_DELETE_PERMISSION: 'NO_DELETE_PERMISSION'\n}\n\nconst transformRelatedEntities = (relatedEntities, entityToDelete, deletable, currentBuId) => ({\n ...entityToDelete.affectedEntities.reduce(\n (acc, affectedEntity) => ({\n ...acc,\n ...(deletable || affectedEntity.deleteStatus !== deleteStatus.DELETABLE\n ? {\n [affectedEntity.entityName]: {\n ..._get(acc, affectedEntity.entityName, {\n keys: [],\n keysOtherBu: [],\n entityLabel: affectedEntity.entityLabel\n }),\n ...(affectedEntity.businessUnitId === null || affectedEntity.businessUnitId === currentBuId\n ? {\n keys: Array.from(\n new Set([..._get(acc, [affectedEntity.entityName, 'keys'], []), affectedEntity.key])\n )\n }\n : {\n keysOtherBu: Array.from(\n new Set([..._get(acc, [affectedEntity.entityName, 'keysOtherBu'], []), affectedEntity.key])\n )\n })\n }\n }\n : {})\n }),\n {...relatedEntities}\n )\n})\n\nconst transformRootEntity = (rootEntities, entity, applyKeys = true) => {\n const {entityName, entityLabel, key} = entity.rootEntity\n if (key.includes('/')) {\n const [entityNameReal, keyReal] = key.split('/')\n return {\n ...rootEntities,\n [entityNameReal]: {\n entityLabel,\n keys: [..._get(rootEntities, [entityNameReal, 'keys'], []), ...(applyKeys ? [keyReal] : [])]\n }\n }\n } else {\n return {\n ...rootEntities,\n [entityName]: {\n entityLabel,\n keys: [..._get(rootEntities, [entityName, 'keys'], []), ...(applyKeys ? [key] : [])]\n }\n }\n }\n}\n\nconst isEntityDeletable = entityToDelete =>\n entityToDelete.rootEntity.deleteStatus === deleteStatus.DELETABLE &&\n !entityToDelete.affectedEntities.find(affectedEntity => affectedEntity.deleteStatus !== deleteStatus.DELETABLE)\n\nexport const getDialogInfo = (response, currentBuId) => {\n const {entitiesToDelete} = response\n\n return entitiesToDelete.reduce(\n (acc, entityToDelete) => {\n const deletable = isEntityDeletable(entityToDelete)\n const relatedAttr = deletable ? 'relatedDeletable' : 'relatedNotDeletable'\n return {\n ...acc,\n rootEntitiesDeletable: transformRootEntity(acc.rootEntitiesDeletable, entityToDelete, deletable),\n ...(!deletable && {\n rootEntitiesNotDeletable: transformRootEntity(acc.rootEntitiesNotDeletable, entityToDelete)\n }),\n [relatedAttr]: transformRelatedEntities(acc[relatedAttr], entityToDelete, deletable, currentBuId)\n }\n },\n {\n rootEntitiesDeletable: {},\n rootEntitiesNotDeletable: {},\n relatedDeletable: {},\n relatedNotDeletable: {},\n hasUnreadableEntities: !!entitiesToDelete.find(e => e.unreadableEntities)\n }\n )\n}\n\nexport const getEntitiesToDelete = ({entitiesToDelete}) => ({\n entityName: _get(entitiesToDelete, '[0].rootEntity.entityName'),\n keys: entitiesToDelete.reduce(\n (acc, entityToDelete) => [...acc, ...(isEntityDeletable(entityToDelete) ? [entityToDelete.rootEntity.key] : [])],\n []\n )\n})\n\nexport const deleteEntityPropType = PropTypes.shape({\n entityLabel: PropTypes.string,\n keys: PropTypes.arrayOf(PropTypes.string),\n keysOtherBu: PropTypes.arrayOf(PropTypes.string)\n})\n\nexport const deleteInfoPropType = PropTypes.shape({\n rootEntitiesDeletable: PropTypes.objectOf(deleteEntityPropType).isRequired,\n rootEntitiesNotDeletable: PropTypes.objectOf(deleteEntityPropType).isRequired,\n relatedDeletable: PropTypes.objectOf(deleteEntityPropType).isRequired,\n relatedNotDeletable: PropTypes.objectOf(deleteEntityPropType).isRequired,\n hasUnreadableEntities: PropTypes.bool\n})\n","import {takeLatest, all, call, put, select} from 'redux-saga/effects'\nimport {rest, externalEvents, selection as selectionUtil} from 'tocco-app-extensions'\n\nimport {getDialogInfo, getEntitiesToDelete} from '../../utils/deleteRequestParser'\nimport * as actions from './actions'\n\nexport const inputSelector = state => state.input\nexport const textResourceSelector = state => state.intl.messages\nexport const entitiesToDeleteSelector = state => state.del.entitiesToDelete\n\nexport function* getDeleteBodyFromSelection() {\n const {selection} = yield select(inputSelector)\n\n const entities = yield call(selectionUtil.getEntities, selection, rest.fetchEntities)\n\n return {\n entityModel: entities.entityName,\n keys: entities.keys\n }\n}\n\nexport function* getDeleteEndpoint() {\n const {customDeleteEndpoint} = yield select(inputSelector)\n return customDeleteEndpoint || 'client/delete'\n}\n\nexport function* loadDialogInfo() {\n const body = yield call(getDeleteBodyFromSelection)\n const deleteEndpoint = yield call(getDeleteEndpoint)\n\n const [deleteResponse, principal] = yield all([\n call(rest.requestSaga, `${deleteEndpoint}/dialog`, {method: 'POST', body}),\n call(rest.fetchPrincipal)\n ])\n\n const dialogInfo = yield call(getDialogInfo, deleteResponse.body, principal.currentBusinessUnit.id)\n yield put(actions.setDeleteDialogInfo(dialogInfo))\n\n const entitiesToDelete = yield call(getEntitiesToDelete, deleteResponse.body)\n yield put(actions.setEntitiesToDelete(entitiesToDelete))\n}\n\nexport function* doDelete() {\n const entitiesToDelete = yield select(entitiesToDeleteSelector)\n\n yield put(actions.setDeletingInProgress(true))\n const body = {\n entityModel: entitiesToDelete.entityName,\n keys: entitiesToDelete.keys\n }\n\n const deleteEndpoint = yield call(getDeleteEndpoint)\n\n const response = yield call(rest.requestSaga, deleteEndpoint, {\n method: 'POST',\n body,\n acceptedStatusCodes: [409]\n })\n\n const textResources = yield select(textResourceSelector)\n if (response.ok) {\n const {body} = response\n\n const entities = Object.keys(body.deletedEntities).reduce((acc, entityName) => {\n return [...acc, ...body.deletedEntities[entityName].map(key => ({entityName, key}))]\n }, [])\n\n const remoteEvents = [\n {\n type: 'entity-delete-event',\n payload: {\n entities\n }\n }\n ]\n\n yield put(\n externalEvents.fireExternalEvent('onSuccess', {\n message: textResources['client.delete.successfullyMessage'],\n remoteEvents\n })\n )\n } else {\n if (response.status === 409 && response.body.information) {\n yield put(externalEvents.fireExternalEvent('onError', {message: response.body.information}))\n } else {\n yield put(externalEvents.fireExternalEvent('onError', {message: textResources['client.delete.errorMessage']}))\n }\n }\n}\n\nexport function* onCancel() {\n yield put(externalEvents.fireExternalEvent('onCancel'))\n}\n\nexport default function* mainSagas() {\n yield all([\n takeLatest(actions.LOAD_DIALOG_INFO, loadDialogInfo),\n takeLatest(actions.DO_DELETE, doDelete),\n takeLatest(actions.ON_CANCEL, onCancel)\n ])\n}\n","import del, {sagas as deleteSagas} from './delete'\n\nexport default {\n del\n}\n\nexport const sagas = [deleteSagas]\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {actionEmitter, appFactory, externalEvents, notification, selection} from 'tocco-app-extensions'\nimport {reducer as reducerUtil} from 'tocco-util'\n\nimport Delete from './components/Delete'\nimport reducers, {sagas} from './modules/reducers'\n\nconst packageName = 'delete'\n\nconst EXTERNAL_EVENTS = ['onSuccess', 'onCancel', 'onError', 'emitAction']\n\nconst initApp = (id, input, events, publicPath) => {\n const content = <Delete />\n\n const store = appFactory.createStore(reducers, sagas, input, packageName)\n actionEmitter.addToStore(store, events.emitAction)\n const handleNotifications = !events.emitAction\n notification.addToStore(store, handleNotifications)\n externalEvents.addToStore(store, events)\n\n return appFactory.createApp(packageName, content, store, {\n input,\n events,\n actions: [],\n publicPath,\n textResourceModules: ['component', 'common', packageName]\n })\n}\n\n;(() => {\n if (__DEV__ && __PACKAGE_NAME__ === packageName) {\n const input = require('./dev/input.json')\n\n if (!__NO_MOCK__) {\n const fetchMock = require('fetch-mock').default\n fetchMock.config.overwriteRoutes = false\n const setupFetchMocks = require('./dev/fetchMocks').default\n setupFetchMocks(packageName, fetchMock)\n fetchMock.spy()\n }\n\n const app = initApp(packageName, input)\n\n if (module.hot) {\n module.hot.accept('./modules/reducers', () => {\n const reducers = require('./modules/reducers').default\n reducerUtil.hotReloadReducers(app.store, reducers)\n })\n }\n\n appFactory.renderApp(app.component)\n } else {\n appFactory.registerAppInRegistry(packageName, initApp)\n }\n})()\n\nconst DeleteApp = props => {\n const {component} = appFactory.useApp({initApp, props, packageName, externalEvents: EXTERNAL_EVENTS})\n return component\n}\n\nDeleteApp.propTypes = {\n selection: selection.propType.isRequired,\n customDeleteEndpoint: PropTypes.string\n}\n\nexport default DeleteApp\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {injectIntl} from 'react-intl'\nimport EntityDetailApp from 'tocco-entity-detail/src/main'\n\nimport getDetailFormName from '../../../utils/getDetailFormName'\nimport getNode from '../../../utils/getNode'\nimport {withRouterTypeCompProvider} from '../../../utils/withRouterTypeCompProvider'\n\nconst CreateDomain = ({path, context, onSuccess, intl, locale, emitAction}) => {\n const isActionBlocked = action => action.payload?.toaster?.title === 'client.entity-detail.createSuccessfulTitle'\n\n const emitActionBarrier = action => {\n if (!isActionBlocked(action)) {\n emitAction(action)\n }\n }\n\n const handleEntityCreated = ({id}) => {\n const remoteEvents = [\n {\n type: 'entity-create-event',\n payload: {\n entities: [\n {\n entityName: 'Docs_list_item',\n key: `Domain/${id}`\n }\n ]\n }\n }\n ]\n\n onSuccess({\n title: intl.formatMessage({id: 'client.docs-browser.createDomainSuccessful'}),\n remoteEvents\n })\n }\n\n const parent = getNode(path)\n const defaultValues = parent ? [{id: `rel${parent.model}`, value: parent.key}] : []\n\n const formName = getDetailFormName(context, 'Domain')\n\n return (\n <EntityDetailApp\n entityName=\"Domain\"\n formName={formName}\n mode=\"create\"\n defaultValues={defaultValues}\n locale={locale}\n onEntityCreated={handleEntityCreated}\n emitAction={emitActionBarrier}\n />\n )\n}\n\nCreateDomain.propTypes = {\n path: PropTypes.string.isRequired,\n context: PropTypes.shape({\n detailFormNames: PropTypes.object.isRequired\n }).isRequired,\n onSuccess: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n locale: PropTypes.string,\n emitAction: PropTypes.func.isRequired\n}\n\nexport default withRouterTypeCompProvider(injectIntl(CreateDomain))\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {injectIntl} from 'react-intl'\nimport EntityDetailApp from 'tocco-entity-detail/src/main'\n\nimport getDetailFormName from '../../../utils/getDetailFormName'\nimport getNode from '../../../utils/getNode'\nimport {withRouterTypeCompProvider} from '../../../utils/withRouterTypeCompProvider'\n\nconst CreateFolder = ({context, path, onSuccess, intl, locale, emitAction}) => {\n const isActionBlocked = action => action.payload?.toaster?.title === 'client.entity-detail.createSuccessfulTitle'\n\n const emitActionBarrier = action => {\n if (!isActionBlocked(action)) {\n emitAction(action)\n }\n }\n\n const handleEntityCreated = ({id}) => {\n const remoteEvents = [\n {\n type: 'entity-create-event',\n payload: {\n entities: [\n {\n entityName: 'Docs_list_item',\n key: `Folder/${id}`\n }\n ]\n }\n }\n ]\n\n onSuccess({\n title: intl.formatMessage({id: 'client.docs-browser.createFolderSuccessful'}),\n remoteEvents\n })\n }\n\n const parent = getNode(path)\n const defaultValues = parent ? [{id: `rel${parent.model}`, value: parent.key}] : []\n\n const formName = getDetailFormName(context, 'Folder')\n\n return (\n <EntityDetailApp\n entityName=\"Folder\"\n formName={formName}\n mode=\"create\"\n defaultValues={defaultValues}\n locale={locale}\n onEntityCreated={handleEntityCreated}\n emitAction={emitActionBarrier}\n />\n )\n}\n\nCreateFolder.propTypes = {\n path: PropTypes.string.isRequired,\n context: PropTypes.shape({\n detailFormNames: PropTypes.object.isRequired\n }).isRequired,\n onSuccess: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n locale: PropTypes.string,\n emitAction: PropTypes.func.isRequired\n}\n\nexport default withRouterTypeCompProvider(injectIntl(CreateFolder))\n","import React from 'react'\nimport DeleteApp from 'tocco-delete/src/main'\n\nexport default props => <DeleteApp {...props} customDeleteEndpoint={'documents/delete'} />\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {selection} from 'tocco-app-extensions'\nimport EntityDetailApp from 'tocco-entity-detail/src/main'\n\nimport getDetailFormName from '../../../utils/getDetailFormName'\nimport {withRouterTypeCompProvider} from '../../../utils/withRouterTypeCompProvider'\n\nconst EditAction = ({selection, onSuccess, onCancel, locale, context, emitAction, navigate}) => {\n const isActionBlocked = action => action.payload?.toaster?.title === 'client.entity-detail.createSuccessfulTitle'\n\n const emitActionBarrier = action => {\n if (!isActionBlocked(action)) {\n emitAction(action)\n }\n }\n\n const [entityName, entityKey] = selection.ids[0].split('/')\n\n if (entityName === 'Resource') {\n navigate(`/docs/doc/${entityKey}/detail`)\n onCancel()\n }\n\n const handleEntityUpdated = () => {\n const remoteEvents = [\n {\n type: 'entity-update-event',\n payload: {\n entities: [\n {\n entityName: 'Docs_list_item',\n key: selection.ids[0]\n }\n ]\n }\n }\n ]\n\n onSuccess({\n title: null,\n remoteEvents\n })\n }\n\n const handleEntityDeleted = () => {\n const remoteEvents = [\n {\n type: 'entity-delete-event',\n payload: {\n entities: [\n {\n entityName: 'Docs_list_item',\n key: selection.ids[0]\n }\n ]\n }\n }\n ]\n\n onSuccess({\n title: null,\n remoteEvents\n })\n }\n\n const formName = getDetailFormName(context, entityName)\n\n return (\n <EntityDetailApp\n entityName={entityName}\n formName={formName}\n entityId={entityKey}\n mode=\"update\"\n locale={locale}\n onEntityUpdated={handleEntityUpdated}\n onEntityDeleted={handleEntityDeleted}\n emitAction={emitActionBarrier}\n />\n )\n}\n\nEditAction.propTypes = {\n selection: selection.propType,\n context: PropTypes.object.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n locale: PropTypes.string,\n emitAction: PropTypes.func.isRequired,\n navigate: PropTypes.func.isRequired\n}\n\nexport default withRouterTypeCompProvider(EditAction)\n","import _isEqual from 'lodash/isEqual'\nimport PropTypes from 'prop-types'\nimport React, {useEffect, useState} from 'react'\nimport {FormattedMessage} from 'react-intl'\nimport styled from 'styled-components'\nimport {selection} from 'tocco-app-extensions'\nimport {Button, LoadMask, StyledButton} from 'tocco-ui'\n\nimport DocsBrowser from '../../../main'\nimport getNode from '../../../utils/getNode'\n\nconst StyledButtonsWrapper = styled.div`\n display: flex;\n justify-content: flex-end;\n\n ${StyledButton} {\n margin-right: 0;\n }\n`\n\n/* for being able to scroll whole modal content on smaller screens */\nconst StyledLoadMask = styled(LoadMask)`\n height: auto;\n`\n\nexport const MoveAction = ({\n selection,\n onSuccess,\n onError,\n path,\n initialize,\n moveElements,\n isWaiting,\n domainTypes,\n rootNodes,\n businessUnit,\n locale,\n emitAction\n}) => {\n const initialNode = getNode(path)\n const initialParent = {model: 'Docs_list_item', key: `${initialNode.model}/${initialNode.key}`}\n const [parent, setParent] = useState(initialParent)\n\n // call only on mount\n useEffect(() => {\n initialize(selection, onSuccess, onError)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const getCustomLocation = (model, key) => {\n switch (model) {\n case 'Domain':\n return `/docs/domain/${key}/list`\n case 'Folder':\n return `/docs/folder/${key}/list`\n case 'Resource':\n return\n default:\n throw new Error(`Unexpected model: ${model}`)\n }\n }\n\n const getInitialLocation = () => {\n if (parent === null) {\n return null\n }\n const [model, key] = parent.key.split('/')\n return getCustomLocation(model, key)\n }\n\n return (\n <StyledLoadMask required={[!isWaiting]}>\n <DocsBrowser\n routerType=\"routerless\"\n initialLocation={getInitialLocation()}\n listLimit={10}\n selectionStyle=\"none\"\n searchFormType=\"none\"\n disableViewPersistor={true}\n getListFormName={parent => (parent === null ? 'Move_root_docs_list_item' : 'Move_docs_list_item')}\n onListParentChange={parent => setParent(parent)}\n getCustomLocation={getCustomLocation}\n navigationStrategy={{}}\n embedded={true}\n emitAction={emitAction}\n noLeftPadding={true}\n domainTypes={domainTypes}\n rootNodes={rootNodes}\n businessUnit={businessUnit}\n sortable={false}\n scrollBehaviour=\"none\"\n locale={locale}\n />\n <StyledButtonsWrapper>\n <Button\n onClick={() => moveElements(parent.key, selection.ids)}\n look=\"raised\"\n ink=\"primary\"\n disabled={parent === null || _isEqual(parent, initialParent)}\n >\n <FormattedMessage id=\"client.actions.dms-move.button\" />\n </Button>\n </StyledButtonsWrapper>\n </StyledLoadMask>\n )\n}\n\nMoveAction.propTypes = {\n selection: selection.propType,\n onSuccess: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n path: PropTypes.string.isRequired,\n initialize: PropTypes.func.isRequired,\n moveElements: PropTypes.func.isRequired,\n isWaiting: PropTypes.bool.isRequired,\n domainTypes: PropTypes.arrayOf(PropTypes.string),\n rootNodes: PropTypes.arrayOf(\n PropTypes.shape({\n entityName: PropTypes.string,\n key: PropTypes.string\n })\n ),\n businessUnit: PropTypes.string,\n locale: PropTypes.string,\n emitAction: PropTypes.func.isRequired\n}\n","import {injectIntl} from 'react-intl'\nimport {connect} from 'react-redux'\n\nimport {initialize, moveElements} from '../../../modules/move/actions'\nimport {withRouterTypeCompProvider} from '../../../utils/withRouterTypeCompProvider'\nimport {MoveAction} from './Move'\n\nconst mapActionCreators = {\n initialize,\n moveElements\n}\n\nconst mapStateToProps = state => ({\n isWaiting: state.docs.move.isWaiting,\n domainTypes: state.input.domainTypes,\n rootNodes: state.input.rootNodes,\n businessUnit: state.input.businessUnit,\n locale: state.intl.locale\n})\n\nexport default withRouterTypeCompProvider(connect(mapStateToProps, mapActionCreators)(injectIntl(MoveAction)))\n","const getDetailFormName = (context, entityName) =>\n context.detailFormNames && context.detailFormNames[entityName]\n ? context.detailFormNames[entityName]\n : `Dms${entityName}`\n\nexport default getDetailFormName\n","import PropTypes from 'prop-types'\nconst searchFormTypes = {\n NONE: 'none',\n FULLTEXT: 'fulltext',\n SIMPLE: 'simple',\n SIMPLE_ADVANCED: 'simple_advanced',\n ADVANCED: 'advanced',\n ADMIN: 'admin'\n}\n\nexport const searchFormTypePropTypes = PropTypes.oneOf(Object.values(searchFormTypes))\n\nexport default searchFormTypes\n","import PropTypes from 'prop-types'\n\nconst selectionStyles = {\n SINGLE: 'single',\n MULTI: 'multi',\n MULTI_EXPLICIT: 'multi_explicit',\n NONE: 'none'\n}\n\nconst selectionStylePropType = PropTypes.oneOf(Object.keys(selectionStyles).map(key => selectionStyles[key]))\n\nexport {selectionStyles as default, selectionStylePropType}\n","import {css} from 'styled-components'\n\nimport {declareFont, theme} from '../utilStyles'\n\nexport const linkStyle = css`\n ${declareFont()}\n color: ${theme.color('text')};\n\n * {\n color: ${theme.color('text')};\n text-decoration: ${({neutral}) => (neutral ? 'none' : 'underline')};\n }\n\n &:hover,\n &:hover *,\n &:focus,\n &:focus * {\n text-decoration: ${({neutral}) => (neutral ? 'none' : 'underline')};\n }\n\n &:active,\n &:active * {\n text-decoration: ${({neutral}) => (neutral ? 'none' : 'underline')};\n }\n`\n","import {Link} from 'react-router-dom'\nimport styled from 'styled-components'\n\nimport {linkStyle} from './linkStyle'\n\nexport default styled(Link).withConfig({\n // do not forward `neutral` prop to HTML\n shouldForwardProp: (prop, defaultValidatorFn) => !['neutral'].includes(prop) && defaultValidatorFn(prop)\n})`\n ${linkStyle}\n`\n","/* stylelint-disable no-descending-specificity */\nimport React from 'react'\nimport styled from 'styled-components'\n\nimport {theme} from '../utilStyles'\n\nexport const StyledBreadcrumbs = styled.div`\n background-color: ${props => props.backgroundColor || theme.color('backgroundBreadcrumbs')(props)};\n width: 100%;\n padding: 0.8rem 1.7rem;\n position: relative;\n z-index: 2; // higher than StyledTether to prevent cover on scroll\n\n span:nth-child(even) {\n margin-left: 0.9rem;\n margin-right: 0.9rem;\n }\n`\n\nexport const StyledBreadcrumbsLink = styled(({component, ...props}) => React.cloneElement(component, props))`\n font-weight: ${theme.fontWeight('bold')};\n text-decoration: none;\n color: ${({active}) => active && theme.color('primary')};\n cursor: pointer;\n\n & * {\n font-weight: ${theme.fontWeight('bold')};\n text-decoration: none;\n color: ${({active}) => active && theme.color('primary')};\n margin-right: 0.5rem;\n }\n\n &:hover,\n &:hover * {\n color: ${theme.color('secondaryLight')};\n }\n\n &:focus,\n &:active,\n &:focus *,\n &:active * {\n color: ${theme.color('primary')};\n }\n`\n\n// noinspection Stylelint\nexport const StyledBreadcrumbsTitle = styled.span`\n font-weight: ${theme.fontWeight('bold')};\n text-decoration: none;\n color: ${({active}) => active && theme.color('primary')};\n\n & * {\n font-weight: ${theme.fontWeight('bold')};\n text-decoration: none;\n color: ${({active}) => active && theme.color('primary')};\n margin-right: 0.5rem;\n }\n\n &:active * {\n color: ${theme.color('primary')};\n }\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Helmet} from 'react-helmet'\n\nimport {AdminLink as StyledLink} from '../AdminLink'\nimport Icon from '../Icon'\nimport Typography from '../Typography'\nimport {StyledBreadcrumbs, StyledBreadcrumbsLink, StyledBreadcrumbsTitle} from './StyledBreadcrumbs'\n\nconst getTitle = breadcrumbsInfo =>\n breadcrumbsInfo\n .slice(breadcrumbsInfo.length - 2)\n .map(breadcrumb => breadcrumb.title || breadcrumb.display)\n .reverse()\n .join(' - ')\n\nconst Breadcrumbs = ({pathPrefix, breadcrumbsInfo, currentView, backgroundColor, onClick, linkComp: LinkComp}) => {\n const breadcrumbs = [...(breadcrumbsInfo || []), ...(currentView ? [currentView] : [])]\n\n if (breadcrumbs.length === 0) {\n return null\n }\n\n const handleClick = breadcrumbsItem => () => {\n if (onClick) {\n onClick(breadcrumbsItem)\n }\n }\n\n return (\n <StyledBreadcrumbs backgroundColor={backgroundColor}>\n <Helmet defer={false}>\n <title>{getTitle(breadcrumbs)}</title>\n </Helmet>\n <div>\n {' '}\n {breadcrumbs\n .map((b, idx) => {\n const display = b.display || ''\n const Comp = idx === breadcrumbs.length - 1 ? StyledBreadcrumbsTitle : StyledBreadcrumbsLink\n return (\n <Typography.Span key={`breadcrumbItem-${idx}`}>\n <Comp\n neutral\n {...(idx === breadcrumbs.length - 1 && {active: 'true'})}\n {...(typeof b.path !== 'undefined' ? {to: `${pathPrefix}/${b.path}`} : {})}\n onClick={handleClick(b)}\n component={LinkComp ? <LinkComp /> : <StyledLink />}\n >\n {b.type === 'list' && <Icon icon=\"list\" />}\n {b.type === 'error' && <Icon icon=\"exclamation-circle\" />}\n {display}\n </Comp>\n </Typography.Span>\n )\n })\n .reduce((prev, curr, idx) => [\n prev,\n <Typography.Span key={'icon' + idx}>\n {' '}\n <Icon icon=\"chevron-right\" />{' '}\n </Typography.Span>,\n curr\n ])}\n </div>\n </StyledBreadcrumbs>\n )\n}\n\nBreadcrumbs.defaultProps = {\n pathPrefix: ''\n}\n\nBreadcrumbs.propTypes = {\n pathPrefix: PropTypes.string,\n match: PropTypes.object,\n breadcrumbsInfo: PropTypes.arrayOf(\n PropTypes.shape({\n display: PropTypes.string,\n title: PropTypes.string,\n path: PropTypes.string,\n type: PropTypes.string\n })\n ),\n currentView: PropTypes.shape({\n display: PropTypes.string,\n title: PropTypes.string\n }),\n backgroundColor: PropTypes.string,\n onClick: PropTypes.func,\n linkComp: PropTypes.any,\n}\n\nexport default Breadcrumbs\n","import {request} from 'tocco-util'\n\nexport const sendRequest = endpoint => request.executeRequest(`rest/${endpoint}`)\n\nexport const extractBody = response => (response.status === 200 ? response.json() : null)\n","export const operators = ['==', '!=', '<=', '>=', '<', '>', '~=']\nexport const atoms = ['true', 'false', 'null']\nexport const types = [\n 'string',\n 'long',\n 'serial',\n 'bool',\n 'boolean',\n 'double',\n 'float',\n 'time',\n 'timestamp',\n 'char',\n 'varchar',\n 'date',\n 'datetime'\n]\nexport const placeholders = [\n 'now_date',\n 'yesterday_date',\n 'tomorrow_date',\n 'today_date',\n 'now_start',\n 'yesterday_start',\n 'tomorrow_start',\n 'today_start',\n 'now',\n 'yesterday',\n 'tomorrow',\n 'today',\n 'currentUsername',\n 'currentUser',\n 'currentBu'\n]\nexport const functions = [\n 'in',\n 'dateadd',\n 'datetimeadd',\n 'duedate',\n 'birthdayin',\n 'fulltext',\n 'likeall',\n 'distance',\n 'inboundingbox'\n]\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport _isArray from 'lodash/isArray'\nimport _mergeWith from 'lodash/mergeWith'\n\nimport {atoms, functions, operators, placeholders, types} from './TqlConstants'\n\nexport default implicitModel =>\n class TqlHighlightRules extends ace.require('ace/mode/text_highlight_rules').TextHighlightRules {\n constructor() {\n super()\n\n const commonWhere = [\n {\n token: 'keyword.operator.conjunction',\n regex: /(\\s*)(and|or|not)($|\\s+)/,\n caseInsensitive: true\n },\n {\n token: 'support.class.relation',\n regex: /rel/,\n push: 'model'\n },\n {\n token: 'keyword.exists',\n regex: /exists\\s*/,\n push: 'exists',\n caseInsensitive: true\n },\n {\n token: 'keyword.count',\n regex: /count\\s*/,\n push: 'count',\n caseInsensitive: true\n },\n {\n token: [\n 'keyword.function.nice_function',\n 'paren.lparen.function_arguments',\n 'text.function_arguments',\n 'paren.rparen',\n 'text.whitespace'\n ],\n regex: `((?:${functions.join('|')})\\\\s*)(\\\\()(.*?)(\\\\))($|\\\\s+)`,\n caseInsensitive: true\n },\n {\n token: 'keyword.other.chaining',\n regex: /\\./\n },\n {\n token: 'support.function.field',\n regex: /([a-z_]+)($|\\s+)/,\n push: 'comparison'\n }\n ]\n\n const customRules = {\n start: implicitModel\n ? [\n {\n token: 'keyword.where',\n regex: /\\s*/,\n next: 'rootwhere',\n caseInsensitive: true\n }\n ]\n : [\n {\n token: 'keyword.find',\n regex: /find($|\\s+)/,\n push: 'model',\n caseInsensitive: true\n },\n {\n token: 'keyword.where',\n regex: /where($|\\s+)/,\n next: 'rootwhere',\n caseInsensitive: true\n }\n ],\n model: [\n {\n token: 'support.class.model',\n regex: /[A-Z][a-z_0-9]*\\s*/,\n next: 'pop'\n }\n ],\n rootwhere: [\n {\n token: 'keyword.order_by',\n regex: /order by($|\\s+)/,\n next: 'order',\n caseInsensitive: true\n },\n ...commonWhere\n ],\n comparison: [\n {\n token: 'keyword.operator.comparison',\n regex: `(${operators.join('|')})\\\\s*`,\n next: 'value'\n }\n ],\n value: [\n {\n token: 'string',\n regex: /\".*?\"\\s*/,\n next: 'pop'\n },\n {\n token: 'constant.numeric',\n regex: /\\d+(.\\d+)?\\s*/,\n next: 'pop'\n },\n {\n token: 'constant.language.tocco_placeholder',\n regex: `\\\\:(${placeholders.join('|')})\\\\s*`,\n next: 'pop',\n caseInsensitive: true\n },\n {\n token: 'constant.language',\n regex: `(${atoms.join('|')})\\\\s*`,\n next: 'pop',\n caseInsensitive: true\n },\n {\n token: 'support.type',\n regex: `(${types.join('|')}):\\\\s*`,\n caseInsensitive: true\n }\n ],\n exists: [\n {\n token: 'paren.lparen',\n regex: /\\(\\s*/\n },\n {\n token: 'support.class.relation',\n regex: /rel/,\n push: 'model'\n },\n {\n token: 'keyword.other.chaining',\n regex: /\\./\n },\n {\n token: 'keyword.where',\n regex: /where($|\\s+)/,\n next: 'existswhere',\n caseInsensitive: true\n },\n {\n token: 'paren.rparen',\n regex: /\\)\\s*/,\n next: 'pop'\n }\n ],\n existswhere: [\n ...commonWhere,\n {\n token: 'paren.rparen',\n regex: /\\)\\s*/,\n next: 'pop'\n }\n ],\n count: [\n {\n token: 'paren.lparen',\n regex: /\\(\\s*/\n },\n {\n token: 'support.class.relation',\n regex: /rel/,\n push: 'model'\n },\n {\n token: 'keyword.other.chaining',\n regex: /\\./\n },\n {\n token: 'keyword.where',\n regex: /where($|\\s+)/,\n next: 'countwhere',\n caseInsensitive: true\n },\n {\n token: 'paren.rparen',\n regex: /\\)\\s*/,\n next: 'comparison'\n }\n ],\n countwhere: [\n ...commonWhere,\n {\n token: 'paren.rparen',\n regex: /\\)\\s*/,\n next: 'comparison'\n }\n ],\n order: [\n {\n token: 'support.class.relation',\n regex: /rel/,\n push: 'model'\n },\n {\n token: 'keyword.other.chaining',\n regex: /\\./\n },\n {\n token: ['support.function.field', 'keyword.direction', 'separator'],\n regex: /([a-z_]+\\s*)(asc|desc)?($|,|\\s+)/\n }\n ]\n }\n this.$rules = _mergeWith(this.$rules, customRules, (objValue, srcValue) =>\n _isArray(objValue) ? objValue.concat(srcValue) : undefined\n )\n\n this.normalizeRules()\n }\n }\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/mode-html'\nimport _isArray from 'lodash/isArray'\nimport _mergeWith from 'lodash/mergeWith'\n\nimport TqlHighlighter from './TqlHighlighter'\n\n/** this is a copy from https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/ftl_highlight_rules.js but with angled\n * brackets replaced with square brackets as described in\n * https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html\n *\n * TODO add auto-complete? only for tocco functions? TOCDEV-4496\n * TODO implement possibility to switch between the two and open PR with ACE repository? TOCDEV-4495\n **/\nexport class ToccoFtlLangHighlightRules extends ace.require('ace/mode/text_highlight_rules').TextHighlightRules {\n constructor() {\n super()\n\n const stringBuiltIns =\n '\\\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|' +\n 'ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|' +\n 'left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|' +\n 'upper_case|word_list|xhtml|xml'\n const numberBuiltIns = 'c|round|floor|ceiling'\n const dateBuiltIns = 'iso_[a-z_]+'\n const seqBuiltIns = 'first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk'\n const hashBuiltIns = 'keys|values'\n const xmlBuiltIns = 'children|parent|root|ancestors|node_name|node_type|node_namespace'\n const expertBuiltIns =\n 'byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|' +\n 'eval|has_content|interpret|is_[a-z_]+|namespacenew'\n const allBuiltIns =\n stringBuiltIns + numberBuiltIns + dateBuiltIns + seqBuiltIns + hashBuiltIns + xmlBuiltIns + expertBuiltIns\n\n const deprecatedBuiltIns = 'default|exists|if_exists|web_safe'\n\n const variables =\n 'data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|' +\n 'now|output_encoding|template_name|url_escaping_charset|vars|version'\n\n const operators = 'gt|gte|lt|lte|as|in|using'\n\n const reserved = 'true|false'\n\n const attributes =\n 'encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|' +\n 'url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|' +\n 'attributes'\n\n this.$rules = {\n start: [\n {\n token: 'constant.character.entity',\n regex: /&[^;]+;/\n },\n {\n token: 'support.function',\n regex: '\\\\?(' + allBuiltIns + ')'\n },\n {\n token: 'support.function.deprecated',\n regex: '\\\\?(' + deprecatedBuiltIns + ')'\n },\n {\n token: 'language.variable',\n regex: '\\\\.(?:' + variables + ')'\n },\n {\n token: 'constant.language',\n regex: '\\\\b(' + reserved + ')\\\\b'\n },\n {\n token: 'keyword.operator',\n regex: '\\\\b(?:' + operators + ')\\\\b'\n },\n {\n token: 'entity.other.attribute-name',\n regex: attributes\n },\n {\n token: 'string', //\n regex: /['\"]/,\n next: 'qstring'\n },\n {\n // Deal with variable names that contains number\n // e.g. <#if var42 == 42 >\n token: function (value) {\n if (value.match('^[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?$')) {\n return 'constant.numeric'\n } else {\n return 'variable'\n }\n },\n regex: /[\\w.+-]+/\n },\n {\n token: 'keyword.operator',\n regex:\n '!|\\\\.|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\\\|\\\\||\\\\?\\\\:' +\n '|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^='\n },\n {\n token: 'paren.lparen',\n regex: '[[({]'\n },\n {\n token: 'paren.rparen',\n regex: '[\\\\])}]'\n },\n {\n token: 'text',\n regex: '\\\\s+'\n }\n ],\n\n qstring: [\n {\n token: 'constant.character.escape',\n regex: '\\\\\\\\[nrtvef\\\\\\\\\"$]'\n },\n {\n token: 'string',\n regex: /['\"]/,\n next: 'start'\n },\n {\n defaultToken: 'string'\n }\n ]\n }\n }\n}\n\nexport default class ToccoFtlHighlightRules extends ace.require('ace/mode/html_highlight_rules').HtmlHighlightRules {\n constructor() {\n super()\n\n const directives =\n 'assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|' +\n 'ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|' +\n 'setting|stop|switch|t|visit'\n\n const tqlDirectives = ['query', 'queryCount']\n\n const startRules = [\n {\n token: 'keyword.function',\n regex: `\\\\[@(${tqlDirectives.join('|')}).*?]`,\n push: 'tql-start'\n },\n {\n token: 'comment',\n regex: '\\\\[#--',\n next: 'ftl-dcomment'\n },\n {\n token: 'string.interpolated',\n regex: '\\\\${',\n push: 'ftl-start'\n },\n {\n token: 'keyword.function',\n regex: '\\\\[/?#(' + directives + ')',\n push: 'ftl-start'\n },\n {\n token: 'keyword.other',\n regex: '\\\\[/?@[a-zA-Z\\\\.]+',\n push: 'ftl-start'\n }\n ]\n\n const endRules = [\n {\n token: 'keyword',\n regex: '/?\\\\]',\n next: 'pop'\n },\n {\n token: 'string.interpolated',\n regex: '}',\n next: 'pop'\n }\n ]\n\n for (const key in this.$rules) {\n this.$rules[key].unshift.apply(this.$rules[key], startRules)\n }\n\n this.embedRules(ToccoFtlLangHighlightRules, 'ftl-', endRules, ['start'])\n\n this.addRules({\n 'ftl-dcomment': [\n {\n token: 'comment',\n regex: '--\\\\]',\n next: 'pop'\n },\n {\n defaultToken: 'comment'\n }\n ]\n })\n\n const tqlEndRules = [\n {\n token: 'keyword.function',\n regex: `\\\\[/@(${tqlDirectives.join('|')})]`,\n next: 'pop'\n }\n ]\n\n this.embedRules(TqlHighlighter(), 'tql-', tqlEndRules, ['start'])\n\n const mergingRules = {\n 'tql-rootwhere': [\n {\n token: 'keyword.function',\n regex: `\\\\[/@(${tqlDirectives.join('|')})]`,\n next: 'pop'\n }\n ],\n 'tql-order': [\n {\n token: 'keyword.function',\n regex: `\\\\[/@(${tqlDirectives.join('|')})]`,\n next: 'pop'\n }\n ]\n }\n this.$rules = _mergeWith(this.$rules, mergingRules, (objValue, srcValue) =>\n _isArray(objValue) ? objValue.concat(srcValue) : undefined\n )\n\n this.normalizeRules()\n }\n}\n","import ace from 'ace-builds/src-min-noconflict/ace'\n\nimport {extractBody, sendRequest} from './requestHelper'\nimport {functions, placeholders, types} from './TqlConstants'\n\nconst TokenIterator = ace.require('ace/token_iterator').TokenIterator\nconst getTokenType = token => (token ? token.type.substring(token.type.lastIndexOf('.') + 1) : null)\n\nconst isCurrentTokenOfType = (iterator, type) => getTokenType(iterator.getCurrentToken()) === type\n\nconst findLastPathStep = iterator => {\n if (isCurrentTokenOfType(iterator, 'model')) {\n iterator.stepBackward()\n }\n if (isCurrentTokenOfType(iterator, 'field') || isCurrentTokenOfType(iterator, 'relation')) {\n iterator.stepBackward()\n }\n if (isCurrentTokenOfType(iterator, 'chaining')) {\n iterator.stepBackward()\n } else {\n return null\n }\n\n if (isCurrentTokenOfType(iterator, 'model')) {\n const modelToken = iterator.getCurrentToken()\n iterator.stepBackward()\n iterator.stepBackward()\n return modelToken ? modelToken.value.trim() : null\n } else {\n return null\n }\n}\n\nconst stepBackUntilToken = (iterator, type) => {\n while (!isCurrentTokenOfType(iterator, type)) {\n if (!iterator.stepBackward()) {\n return false\n }\n }\n return true\n}\n\nconst handleParentheses = (iterator, parenCount) => {\n if (isCurrentTokenOfType(iterator, 'rparen')) {\n return 1\n } else if (parenCount > 0 && isCurrentTokenOfType(iterator, 'lparen')) {\n iterator.stepBackward()\n return -1\n } else {\n return 0\n }\n}\n\nconst findLastModelScope = iterator => {\n let parenCount = 0\n while (iterator.getCurrentToken()) {\n if (parenCount === 0 && isCurrentTokenOfType(iterator, 'where')) {\n const modelToken = iterator.stepBackward()\n return modelToken ? [modelToken.value.trim(), ...findCurrentPath(iterator)] : []\n }\n if (isCurrentTokenOfType(iterator, 'order_by')) {\n if (stepBackUntilToken(iterator, 'find')) {\n const modelToken = iterator.stepForward()\n return modelToken ? modelToken.value.trim() : []\n } else {\n return []\n }\n }\n parenCount += handleParentheses(iterator, parenCount)\n if (!iterator.stepBackward()) {\n return null\n }\n }\n return null\n}\n\nconst backtrack = (iterator, stepBack) => {\n const steps = []\n let lastStep = stepBack(iterator)\n while (lastStep) {\n if (Array.isArray(lastStep)) {\n lastStep.forEach(step => steps.unshift(step))\n } else {\n steps.unshift(lastStep)\n }\n lastStep = stepBack(iterator)\n }\n return steps\n}\n\nexport const findCurrentPath = iterator => backtrack(iterator, findLastPathStep)\nexport const findCurrentModelScope = iterator => backtrack(iterator, findLastModelScope)\n\n/**\n * built-in language completions use 1000000, which also seems to just be some magic number\n * keyword and local completions seem to be somewhere around 100 based on some experiments with ordering\n **/\nconst defaultScore = 1000\n\nconst loadModels = () =>\n sendRequest('entities')\n .then(extractBody)\n .then(body => (body ? body.entities : {}))\n .then(entities => (entities ? Object.keys(entities) : []))\n\nconst buildRelationLabel = relation =>\n relation.relationName.substring(3) !== relation.targetEntity\n ? `${relation.relationName} (${relation.targetEntity})`\n : relation.relationName\n\nconst buildResolveUrl = (sourceModel, relationSteps) => {\n const resolvePart = relationSteps.length > 0 ? '/resolve?path=' + relationSteps.join('.') : ''\n return `entities/${sourceModel}/model${resolvePart}`\n}\n\nconst resolvePath = ([sourceModel, ...relationSteps]) =>\n sendRequest(buildResolveUrl(sourceModel, relationSteps))\n .then(extractBody)\n .then(body => {\n if (!body) {\n return []\n }\n const fields = body.fields || []\n const relations = body.relations || []\n return [\n ...fields.map(f => ({\n label: `${f.fieldName} (${f.type})`,\n value: f.fieldName,\n type: 'field'\n })),\n ...relations.map(r => ({\n label: buildRelationLabel(r),\n value: r.relationName,\n type: 'relation'\n }))\n ]\n })\n\nconst determineModelScope = (createIterator, implicitModel) => {\n if (implicitModel) {\n const [...modelScope] = findCurrentModelScope(createIterator())\n return {baseModel: implicitModel, modelScope}\n } else {\n const [baseModel, ...modelScope] = findCurrentModelScope(createIterator())\n return {baseModel, modelScope}\n }\n}\n\nconst determineAvailablePaths = (createIterator, callback, implicitModel) => {\n const {baseModel, modelScope} = determineModelScope(createIterator, implicitModel)\n if (!baseModel) {\n return\n }\n const currentPath = findCurrentPath(createIterator())\n const relationSteps = [...modelScope, ...currentPath].map(model => `rel${model}`)\n const fullPath = [baseModel, ...relationSteps]\n resolvePath(fullPath)\n .then(paths => {\n const pathCompletions = paths.map(path => ({\n caption: path.label,\n value: path.value,\n meta: path.type,\n score: defaultScore\n }))\n callback(null, pathCompletions)\n })\n .catch(errors => callback(errors))\n}\n\nconst loadAllAvailableModels = callback =>\n loadModels()\n .then(models => {\n const modelCompletions = models.map(model => ({\n caption: model,\n value: model,\n meta: 'model',\n score: defaultScore\n }))\n callback(null, modelCompletions)\n })\n .catch(errors => callback(errors))\n\nconst getAvailableFunctions = () =>\n functions\n .map(f => f.toUpperCase())\n .map(f => ({\n caption: f,\n value: `${f}()`,\n meta: 'function',\n score: defaultScore - 30\n }))\n\nconst getAvailableTypes = () =>\n types.map(type => ({\n caption: type,\n value: `${type}:`,\n meta: 'type',\n score: defaultScore - 20\n }))\n\nconst getAvailablePlaceholders = () =>\n placeholders.map(placeholder => ({\n caption: placeholder,\n value: `:${placeholder}`,\n meta: 'placeholder',\n score: defaultScore - 10\n }))\n\nexport default implicitModel => ({\n getCompletions: (editor, session, pos, prefix, callback) => {\n const createIteratorAtCurrentPosition = () => new TokenIterator(session, pos.row, pos.column)\n\n const iterator = createIteratorAtCurrentPosition()\n const currentToken = iterator.getCurrentToken()\n const previousToken = iterator.stepBackward() ? iterator.getCurrentToken() : null\n switch (getTokenType(currentToken)) {\n case 'chaining':\n case 'relation':\n case 'separator':\n case 'order_by':\n case 'count':\n case 'exists':\n case 'field':\n case 'function_arguments':\n determineAvailablePaths(createIteratorAtCurrentPosition, callback, implicitModel)\n break\n case 'where':\n case 'conjunction':\n determineAvailablePaths(createIteratorAtCurrentPosition, callback, implicitModel)\n callback(null, getAvailableFunctions())\n break\n case 'nice_function':\n callback(null, getAvailableFunctions())\n break\n case 'find':\n loadAllAvailableModels(callback)\n break\n case 'type':\n case 'tocco_placeholder':\n case 'comparison':\n callback(null, getAvailableTypes())\n callback(null, getAvailablePlaceholders())\n break\n case 'model':\n determineAvailablePaths(createIteratorAtCurrentPosition, callback, implicitModel)\n if (previousToken && getTokenType(previousToken) !== 'relation') {\n loadAllAvailableModels(callback)\n }\n break\n case null:\n // this happens when nothing has been entered, which is a valid start with an implicit model, treat like where\n if (implicitModel) {\n determineAvailablePaths(createIteratorAtCurrentPosition, callback, implicitModel)\n }\n callback(null, getAvailableFunctions())\n break\n }\n }\n})\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/src-min-noconflict/mode-ftl'\n\nimport ToccoFtlHighlightRules from './FtlHighlighter'\nimport TqlAutoCompleter from './TqlAutoCompleter'\n\nexport default class ToccoFtlMode extends ace.require('ace/mode/ftl').Mode {\n constructor() {\n super()\n this.HighlightRules = ToccoFtlHighlightRules\n this.completer = TqlAutoCompleter()\n }\n}\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/src-min-noconflict/mode-text'\n\nimport TqlAutoCompleter from './TqlAutoCompleter'\nimport TqlHighlighter from './TqlHighlighter'\n\nexport default class TqlMode extends ace.require('ace/mode/text').Mode {\n constructor({implicitModelName}) {\n super()\n this.HighlightRules = TqlHighlighter(implicitModelName)\n this.completer = TqlAutoCompleter(implicitModelName)\n this.snippedIdField = null // TODO implement? TOCDEV-4499\n }\n}\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/webpack-resolver'\nimport {Mode as DroolsMode} from 'ace-builds/src-min-noconflict/mode-drools'\nimport {Mode as GroovyMode} from 'ace-builds/src-min-noconflict/mode-groovy'\nimport {Mode as HtmlMode} from 'ace-builds/src-min-noconflict/mode-html'\nimport {Mode as JsonMode} from 'ace-builds/src-min-noconflict/mode-json'\nimport {Mode as LessMode} from 'ace-builds/src-min-noconflict/mode-less'\nimport {Mode as PropertiesMode} from 'ace-builds/src-min-noconflict/mode-properties'\nimport {Mode as TextMode} from 'ace-builds/src-min-noconflict/mode-text'\nimport {Mode as XmlMode} from 'ace-builds/src-min-noconflict/mode-xml'\nimport _get from 'lodash/get'\nimport _isObject from 'lodash/isObject'\nimport _isString from 'lodash/isString'\nimport React, {useEffect, useMemo, useRef} from 'react'\nimport styled from 'styled-components'\n\nimport AceEditorPropTypes from './AceEditorPropTypes'\nimport 'ace-builds/src-min-noconflict/snippets/ftl'\nimport 'ace-builds/src-min-noconflict/snippets/groovy'\nimport 'ace-builds/src-min-noconflict/snippets/html'\nimport 'ace-builds/src-min-noconflict/snippets/less'\nimport 'ace-builds/src-min-noconflict/snippets/xml'\nimport 'ace-builds/src-min-noconflict/snippets/properties'\nimport 'ace-builds/src-min-noconflict/snippets/json'\nimport 'ace-builds/src-min-noconflict/snippets/drools'\nimport 'ace-builds/src-min-noconflict/theme-textmate'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport {extractBody, sendRequest} from './requestHelper'\nimport ToccoFtlMode from './ToccoFtlMode'\nimport TqlMode from './TqlMode'\n\nconst StyledEditor = styled.div`\n width: 100%;\n z-index: 0; /* gutter lays over menu otherwise */\n`\n\nconst modeMappings = {\n groovy: () => new GroovyMode(),\n html: () => new HtmlMode(),\n xml: () => new XmlMode(),\n properties: () => new PropertiesMode(),\n json: () => new JsonMode(),\n htmlmixed: () => new ToccoFtlMode(),\n freemarkermixed: () => new ToccoFtlMode(),\n ftl: () => new ToccoFtlMode(),\n tql: props => new TqlMode(props),\n less: () => new LessMode(),\n drools: () => new DroolsMode(),\n text: () => new TextMode()\n}\n\nconst getMode = (mode, props) => _get(modeMappings, mode, mode)(props)\n\nconst loadImplicitModel = implicitModel => {\n if (_isString(implicitModel)) {\n return Promise.resolve(implicitModel)\n } else if (_isObject(implicitModel)) {\n return sendRequest(`entities/2.0/${implicitModel.entityModel}/${implicitModel.key}?_paths=${implicitModel.field}`)\n .then(extractBody)\n .then(moduleEntity => _get(moduleEntity, ['paths', 'entity_name', 'value'], null))\n } else {\n return Promise.resolve(null)\n }\n}\n\nconst setEditorConfiguration = (editor, {mode, theme, showGutter, editorOptions = {}, implicitModel}) => {\n loadImplicitModel(implicitModel)\n .then(implicitModelName => getMode(mode, {implicitModelName}))\n .then(editorMode => editor.getSession().setMode(editorMode))\n editor.setTheme(`ace/theme/${theme}`)\n Object.entries(editorOptions).forEach(([k, v]) => {\n editor.setOption(k, v)\n })\n editor.renderer.setShowGutter(showGutter)\n editor.resize()\n}\n\nconst AceEditor = props => {\n const {mode, theme = 'textmate', value, onChange, showGutter = true, editorOptions = {}, implicitModel} = props\n const containerReference = useRef(null)\n const editorReference = useRef(null)\n\n const editorConfig = useMemo(\n () => ({mode, theme, showGutter, editorOptions, implicitModel}),\n [mode, theme, showGutter, editorOptions, implicitModel]\n )\n\n // only on mount\n useEffect(() => {\n const aceEditor = ace.edit(containerReference.current)\n aceEditor.getSession().setValue(value || '')\n aceEditor.on('change', () => onChange(aceEditor.getValue()))\n setEditorConfiguration(aceEditor, editorConfig)\n editorReference.current = aceEditor\n\n return () => aceEditor.destroy()\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (editorReference.current) {\n setEditorConfiguration(editorReference.current, editorConfig)\n }\n }, [editorConfig])\n useEffect(() => {\n /* ace handles its state internally, always resetting the value confuses it.\n * this way we only set the value when it is different from the current state, i.e. when it is overwritten through\n * code. feel free to rewrite this with better ideas.\n */\n if (editorReference.current && value !== editorReference.current.getValue()) {\n editorReference.current.getSession().setValue(value)\n }\n }, [value])\n\n return <StyledEditor ref={containerReference} />\n}\n\nAceEditor.propTypes = AceEditorPropTypes\n\nexport default AceEditor\n","import styled from 'styled-components'\n\nimport {scale} from '../utilStyles'\n\nexport const StyledWrapper = styled.div`\n cursor: pointer;\n\n .flatpickr-calendar.open {\n margin-top: ${scale.space(1.2)};\n }\n\n .flatpickr-calendar.arrowTop:before,\n .flatpickr-calendar.arrowTop:after {\n left: 83%;\n }\n`\n","import PropTypes from 'prop-types'\nimport React, {useEffect, useRef} from 'react'\nimport {injectIntl} from 'react-intl'\nimport {withTheme} from 'styled-components'\n\nimport {theme} from '../utilStyles'\nimport {StyledWrapper} from './StyledDatePicker'\nimport {useDatePickr} from './useDatePickr'\n\nexport const DatePicker = props => {\n const {value, children, intl, onChange} = props\n const wrapperElement = useRef(null)\n const locale = intl.locale\n const msg = id => intl.formatMessage({id})\n\n const fontFamily = theme.fontFamily('regular')(props)\n\n const flatpickrOptions = {}\n const initializeFlatPickr = useDatePickr(wrapperElement, {\n value,\n onChange,\n fontFamily,\n locale,\n flatpickrOptions,\n shouldAppend: true\n })\n\n // only on mount\n useEffect(() => {\n if (wrapperElement.current) {\n initializeFlatPickr()\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <>\n <StyledWrapper data-wrap ref={wrapperElement}>\n <div data-toggle>\n <input\n style={{display: 'none'}}\n type=\"text\"\n data-input\n aria-label={msg('client.component.datePicker.label')}\n />\n {children}\n </div>\n </StyledWrapper>\n </>\n )\n}\n\nDatePicker.propTypes = {\n /**\n * Any content to wrap a onclick around to open a calendar\n */\n children: PropTypes.node.isRequired,\n /**\n * Function triggered on every date selection. First parameter is the picked date as iso string.\n */\n onChange: PropTypes.func.isRequired,\n /**\n * To set the selected date from outside the component.\n */\n value: PropTypes.any,\n intl: PropTypes.object.isRequired\n}\n\nexport default withTheme(injectIntl(DatePicker))\n","import '!style-loader!css-loader!flatpickr/dist/themes/light.css'\nimport flatpickr from 'flatpickr'\nimport {German} from 'flatpickr/dist/l10n/de.js'\nimport {French} from 'flatpickr/dist/l10n/fr.js'\nimport {Italian} from 'flatpickr/dist/l10n/it.js'\nimport {useEffect, useRef} from 'react'\nimport {react, js} from 'tocco-util'\n\nconst localeMap = {\n 'de-CH': German,\n de: German,\n fr: French,\n it: Italian\n}\n\nconst handleOnChange = onChange => selectedDates => {\n if (selectedDates && selectedDates.length > 0) {\n onChange(selectedDates[0].toISOString())\n } else {\n onChange(null)\n }\n}\n\nconst initializeFlatPickr = (element, {shouldAppend, onChange, value, fontFamily, locale, flatpickrOptions}) => {\n const calendarLocale = localeMap[locale]\n\n const options = {\n wrap: true,\n onChange: handleOnChange(onChange),\n altInput: false,\n enableTime: false,\n defaultDate: value,\n\n ...(shouldAppend ? {appendTo: element.current} : {}),\n ...(calendarLocale ? {locale: calendarLocale} : {}),\n ...flatpickrOptions\n }\n\n const flatpickrInstance = flatpickr(element.current, options)\n\n if (fontFamily) {\n flatpickrInstance.calendarContainer.style.fontFamily = fontFamily\n }\n\n return flatpickrInstance\n}\n\nexport const useDatePickr = (element, config) => {\n const {value, locale, flatpickrOptions} = config\n const flatpickr = useRef(null)\n\n const prevFlatpickrOptions = react.usePrevious(flatpickrOptions)\n\n const init = () => {\n flatpickr.current = initializeFlatPickr(element, config)\n return flatpickr.current\n }\n\n useEffect(() => {\n return () => {\n if (flatpickr.current) {\n flatpickr.current.destroy()\n }\n }\n }, []) // only on unmount\n\n // only trigger useEffect when value array changed (deep comparison workaround)\n useEffect(() => {\n if (flatpickr.current) {\n flatpickr.current.setDate(value, false)\n flatpickr.current.redraw()\n }\n }, [JSON.stringify(value)]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const calendarLocale = localeMap[locale] || flatpickr.current?.l10ns?.en // fallback to english\n if (flatpickr.current && calendarLocale) {\n flatpickr.current.localize(calendarLocale)\n flatpickr.current.set('locale', calendarLocale)\n flatpickr.current.redraw()\n }\n }, [locale])\n\n // prevFlatpickrOptions can be ignored\n useEffect(() => {\n if (flatpickr.current) {\n const optionsDiff = js.difference(flatpickrOptions, prevFlatpickrOptions)\n if (Object.keys(optionsDiff).length > 0) {\n Object.entries(optionsDiff).forEach(([key, value]) => {\n flatpickr.current.set(key, value)\n })\n flatpickr.current.redraw()\n }\n }\n }, [flatpickrOptions]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return init\n}\n","import styled from 'styled-components'\n\nimport {StyledEditableWrapperCss, StyledInputCss} from '../StyledEditableValue'\n\nexport const StyledDatePickerInput = styled.input`\n &&& {\n ${StyledInputCss}\n margin: 0;\n }\n`\n\nexport const StyledDatePickerValue = styled.div`\n && {\n ${StyledInputCss}\n display: flex;\n align-items: center;\n }\n`\n\nexport const StyledDatePickerOuterWrapper = styled.div`\n outline: ${({immutable}) => (immutable ? 0 : 'initial')};\n`\n\nexport const StyledDatePickerWrapper = styled.div`\n && {\n ${StyledEditableWrapperCss}\n\n input {\n display: ${({immutable}) => (immutable ? 'none' : 'block')};\n\n &:last-of-type {\n display: ${({immutable}) => (immutable ? 'block' : 'none')};\n }\n }\n }\n`\n","import PropTypes from 'prop-types'\nimport React, {useRef, useState} from 'react'\nimport {injectIntl} from 'react-intl'\nimport {withTheme} from 'styled-components'\n\nimport Ball from '../../Ball'\nimport {useDatePickr} from '../../DatePicker/useDatePickr'\nimport {theme} from '../../utilStyles'\nimport {\n StyledDatePickerInput,\n StyledDatePickerWrapper,\n StyledDatePickerOuterWrapper,\n StyledDatePickerValue\n} from './StyledDatePicker'\n\nconst focusFlatpickrInput = wrapper => {\n // flatpickr add two input in the DOM. One for the actual value (hidden) and one for the altInput\n const inputElement = wrapper.querySelector('input.flatpickr-input:not([type=\"hidden\"])')\n if (inputElement) {\n inputElement.focus()\n }\n}\n\nconst DatePicker = props => {\n const {immutable, id, options, value, onChange, parseDate, formatDate, intl} = props\n const [initialized, setInitialized] = useState(false)\n const flatpickr = useRef(null)\n const wrapper = useRef(null)\n const locale = intl.locale\n const msg = id => intl.formatMessage({id})\n\n const fontFamily = theme.fontFamily('regular')(props)\n\n const handleOnChange = val => {\n if (val) {\n onChange([val])\n }\n }\n\n const flatpickrOptions = {\n altInput: true,\n altInputClass: '',\n clickOpens: !immutable,\n ...(options ? options.flatpickrOptions : {})\n }\n const initializeFlatPickr = useDatePickr(wrapper, {\n value,\n onChange: handleOnChange,\n fontFamily,\n locale,\n flatpickrOptions\n })\n\n const init = () => {\n flatpickr.current = initializeFlatPickr()\n\n flatpickr.current.calendarContainer.classList.add('tocco-ui-theme')\n flatpickr.current.calendarContainer.addEventListener('keydown', handleConfirmKey)\n setInitialized(true)\n }\n\n const altInput = flatpickr.current?.altInput?.value || ''\n\n const handleOnBlur = () => {\n const parsed = parseDate(flatpickr.current.altInput.value)\n flatpickr.current.setDate(parsed, true)\n }\n\n const focusInput = () => {\n if (!initialized) {\n init()\n\n /**\n * Workaround:\n * To be sure that the initialized state has been updated\n * before we change the focus we delay this to the next tick.\n */\n setTimeout(() => {\n focusFlatpickrInput(wrapper.current)\n })\n } else {\n focusFlatpickrInput(wrapper.current)\n }\n }\n\n const handleConfirmKey = e => {\n if ((!e.target.classList.contains('flatpickr-hour') && e.key === 'Tab' && !e.shiftKey) || e.key === 'Enter') {\n handleOnBlur()\n setTimeout(() => {\n flatpickr.current.close()\n })\n }\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n }\n\n const hasValue = value && value.length > 0 && value.every(v => v)\n\n return (\n <>\n <StyledDatePickerOuterWrapper\n immutable={immutable}\n id={id}\n tabIndex=\"-1\"\n onFocus={() => {\n focusInput()\n\n if (flatpickr.current) {\n flatpickr.current.open()\n }\n }}\n onKeyDown={handleConfirmKey}\n >\n <StyledDatePickerWrapper data-wrap onBlur={handleOnBlur} immutable={immutable} ref={wrapper}>\n <StyledDatePickerInput\n {...(immutable ? {disabled: 'disabled'} : {})}\n type=\"hidden\"\n data-input\n immutable={immutable}\n className=\"flatpickr-input\"\n {...(options ? {placeholder: options.placeholderText} : {})}\n />\n {!initialized && (\n <StyledDatePickerValue tabIndex={0}>{hasValue ? formatDate(value[0]) : ''}</StyledDatePickerValue>\n )}\n <StyledDatePickerInput disabled immutable={immutable} value={altInput} />\n {!immutable && hasValue && (\n <Ball\n icon=\"times\"\n tabIndex={-1}\n aria-label={msg('client.component.dateAbstract.clearDateLabel')}\n onMouseDown={e => {\n e.preventDefault()\n onChange(null)\n }}\n />\n )}\n </StyledDatePickerWrapper>\n </StyledDatePickerOuterWrapper>\n </>\n )\n}\n\nDatePicker.propTypes = {\n id: PropTypes.string,\n intl: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.arrayOf(PropTypes.string),\n options: PropTypes.shape({\n placeholderText: PropTypes.string,\n flatpickrOptions: PropTypes.object\n }),\n parseDate: PropTypes.func,\n formatDate: PropTypes.func,\n immutable: PropTypes.bool,\n initialized: PropTypes.func,\n events: PropTypes.shape({\n onFocus: PropTypes.func\n })\n}\n\nexport default withTheme(injectIntl(DatePicker))\n","import {createGlobalStyle} from 'styled-components'\n\nimport {theme, declareFont, scale} from '../utilStyles'\n\nconst calendarWidth = 270\nconst secondaryLight = theme.color('secondaryLight')\nconst secondary = theme.color('secondary')\nconst paper = theme.color('paper')\nconst text = theme.color('text')\nconst regular = theme.fontWeight('regular')\nconst baseSpace = scale.space(-2)\n\nexport const GlobalDatePickerStyles = createGlobalStyle`\n .flatpickr-calendar {\n && {\n ${declareFont()}\n width: ${calendarWidth}px;\n border: 1px solid ${secondaryLight};\n border-radius: 0;\n }\n\n &.open {\n z-index: 999999 !important; // higher than StyledModalHolder\n }\n\n &.arrowTop:before,\n &.arrowTop:after {\n border-bottom-color: ${secondaryLight} !important;\n }\n\n &.arrowBottom:before,\n &.arrowBottom:after {\n border-top-color: ${secondaryLight} !important;\n }\n\n .flatpickr-rContainer {\n width: 100%;\n }\n\n .dayContainer {\n padding-top: ${baseSpace};\n padding-right: ${baseSpace};\n padding-bottom: ${baseSpace};\n width: ${calendarWidth}px;\n min-width: ${calendarWidth}px;\n max-width: ${calendarWidth}px;\n }\n\n .numInput.cur-year,\n .flatpickr-current-month span.cur-month{\n font-weight: ${regular};\n }\n\n .flatpickr-current-month .numInputWrapper {\n span.arrowUp:after {\n border-bottom-color: ${paper};\n }\n\n span.arrowDown:after {\n border-top-color: ${paper};\n }\n }\n\n .flatpickr-weekday {\n font-size: ${scale.font(-2)};\n font-weight: ${regular};\n }\n\n .flatpickr-days {\n width: ${calendarWidth}px;\n }\n\n .flatpickr-day.today {\n border-color: ${secondary};\n font-weight: ${theme.fontWeight('bold')};\n }\n\n .flatpickr-day {\n max-width: 34px;\n height: 34px;\n line-height: 34px;\n margin-bottom: ${baseSpace};\n font-weight: ${regular};\n }\n\n .flatpickr-months .flatpickr-month {\n border-radius: 0;\n }\n\n .flatpickr-months .flatpickr-month,\n .flatpickr-months .flatpickr-monthDropdown-months,\n .flatpickr-weekdays,\n .flatpickr-weekday {\n background-color: ${secondaryLight};\n color: ${paper};\n }\n\n // month select options in Firefox\n .flatpickr-months .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {\n color: ${text};\n }\n\n .flatpickr-day.selected,\n .flatpickr-day.startRange,\n .flatpickr-day.endRange,\n .flatpickr-day.selected.inRange,\n .flatpickr-day.startRange.inRange,\n .flatpickr-day.endRange.inRange,\n .flatpickr-day.selected:focus,\n .flatpickr-day.startRange:focus,\n .flatpickr-day.endRange:focus,\n .flatpickr-day.selected:hover,\n .flatpickr-day.startRange:hover,\n .flatpickr-day.endRange:hover,\n .flatpickr-day.selected.prevMonthDay,\n .flatpickr-day.startRange.prevMonthDay,\n .flatpickr-day.endRange.prevMonthDay,\n .flatpickr-day.selected.nextMonthDay,\n .flatpickr-day.startRange.nextMonthDay,\n .flatpickr-day.endRange.nextMonthDay,\n .flatpickr-day.today:hover,\n .flatpickr-day.today:focus {\n background-color: ${secondary};\n border-color: ${secondary};\n }\n\n .flatpickr-day.inRange,\n .flatpickr-day.prevMonthDay.inRange,\n .flatpickr-day.nextMonthDay.inRange,\n .flatpickr-day.today.inRange,\n .flatpickr-day.prevMonthDay.today.inRange,\n .flatpickr-day.nextMonthDay.today.inRange,\n .flatpickr-day:hover,\n .flatpickr-day.prevMonthDay:hover,\n .flatpickr-day.nextMonthDay:hover,\n .flatpickr-day:focus,\n .flatpickr-day.prevMonthDay:focus,\n .flatpickr-day.nextMonthDay:focus {\n background-color: ${secondaryLight};\n border-color: ${secondaryLight};\n color: ${paper};\n }\n\n .flatpickr-months .flatpickr-prev-month,\n .flatpickr-months .flatpickr-next-month {\n color: ${paper};\n fill: ${paper};\n\n &:hover svg {\n color: ${secondary};\n fill: ${secondary};\n }\n }\n }\n`\n","import React from 'react'\n\nimport {GlobalDatePickerStyles} from '../DatePicker'\n\nconst GlobalStyles = () => {\n return (\n <>\n <GlobalDatePickerStyles />\n </>\n )\n}\n\nexport default GlobalStyles\n","import {faCircleNotch} from '@fortawesome/pro-solid-svg-icons'\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome'\nimport PropTypes from 'prop-types'\nimport React from 'react'\n\n/**\n * Spinner that indicates a loading process\n */\nconst LoadingSpinner = ({size, style}) => (\n <FontAwesomeIcon {...style} style={{fontSize: size}} spin icon={faCircleNotch} />\n)\n\nLoadingSpinner.propTypes = {\n /**\n * Specify width and height.\n */\n size: PropTypes.string,\n /**\n * css properties object. color can be used to set the color of the spinner\n */\n style: PropTypes.object\n}\n\nexport default LoadingSpinner\n","import PropTypes from 'prop-types'\n\nimport {ScrollBehaviour} from './scrollBehaviour'\n\nexport const keyPropType = PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n\nexport const rowDataPropType = PropTypes.shape({\n __key: keyPropType\n})\n\nexport const dataPropType = PropTypes.arrayOf(rowDataPropType)\n\nexport const scrollBehaviourPropType = PropTypes.oneOf(Object.keys(ScrollBehaviour).map(key => ScrollBehaviour[key]))\n\nexport const columnPropType = PropTypes.shape({\n id: PropTypes.string.isRequired,\n label: PropTypes.string,\n sorting: PropTypes.shape({\n sortable: PropTypes.bool,\n sortRank: PropTypes.number,\n order: PropTypes.oneOf(['asc', 'desc'])\n }),\n resizable: PropTypes.bool,\n width: PropTypes.number,\n HeaderRenderer: PropTypes.elementType,\n CellRenderer: PropTypes.elementType,\n rightAligned: PropTypes.bool\n})\n","export const ScrollBehaviour = {\n INLINE: 'inline',\n NONE: 'none'\n}\n","import pathToRegexp from 'path-to-regexp'\n\nexport const extractParamsFromPath = (pathRegex, path) => {\n const pathParts = []\n const re = pathToRegexp(pathRegex, pathParts)\n const res = re.exec(path)\n\n if (res !== null) {\n return pathParts.reduce(\n (acc, pathPart, idx) => ({\n ...acc,\n [pathPart.name]: res[idx + 1]\n }),\n {}\n )\n }\n\n return null\n}\n","import React from 'react'\n\nimport reducerUtil from '../reducer'\nimport sagaUtil from '../saga'\nimport asyncRoute from './asyncRoute'\nimport {dispatchInput} from './input'\n\nconst loadedComponents = {}\n\nexport const loadRoute = (store, input, importRouteDependencies, key) => props => {\n if (key && loadedComponents[key]) {\n const Component = loadedComponents[key]\n return <Component {...props} />\n }\n\n const Component = asyncRoute(\n () =>\n new Promise(resolve => {\n importRouteDependencies().then(imported => {\n const route = imported.default\n\n if (route.reducers) {\n reducerUtil.injectReducers(store, route.reducers)\n }\n\n if (route.sagas) {\n route.sagas.forEach(saga => {\n sagaUtil.injectSaga(store, saga)\n })\n }\n\n if (route.inputDispatches) {\n route.inputDispatches.forEach(inputDispatch => {\n dispatchInput(store, input, inputDispatch)\n })\n }\n\n resolve(route.container)\n })\n })\n )\n\n if (key) {\n loadedComponents[key] = Component\n }\n\n return <Component {...props} />\n}\n","import React from 'react'\nimport {Route} from 'react-router'\n\nconst getRenderFn = route => router => {\n if (route.component) {\n return <route.component router={router} routes={route.routes} />\n }\n\n if (route.render) {\n const props = {\n router,\n routes: route.routes\n }\n return route.render(props)\n }\n}\n\nconst RouteWithSubRoutes = route => <Route path={route.path} exact={route.exact} render={getRenderFn(route)} />\n\nexport default RouteWithSubRoutes\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Router as ReactRouter} from 'react-router'\n\nimport RouteWithSubRoutes from './RouteWithSubRoutes'\n\nconst Router = ({history, routes}) => (\n <ReactRouter history={history}>\n <React.Fragment>\n {routes.map((route, i) => (\n <RouteWithSubRoutes key={i} {...route} />\n ))}\n </React.Fragment>\n </ReactRouter>\n)\n\nRouter.propTypes = {\n routes: PropTypes.array.isRequired,\n history: PropTypes.object\n}\n\nexport default Router\n","import {extractParamsFromPath} from './path'\nimport {loadRoute} from './route'\nimport Router from './Router'\nimport RouteWithSubRoutes from './RouteWithSubRoutes'\n\nexport default {\n loadRoute,\n Router,\n RouteWithSubRoutes,\n extractParamsFromPath\n}\n","import React, {useEffect, useRef, useState} from 'react'\n\nexport default function asyncRoute(getComponent) {\n return props => {\n const [Component, setComponent] = useState(null)\n const mounted = useRef(true)\n\n useEffect(() => {\n getComponent().then(result => (mounted.current ? setComponent(() => result) : null))\n return () => {\n mounted.current = false\n }\n }, [])\n\n if (Component !== null) {\n return <Component {...props} />\n }\n\n return null\n }\n}\n","import consoleLogger from '../consoleLogger'\n\nexport const dispatchInput = (\n store,\n input,\n {key, actionCreator, mandatory = false, defaultValue},\n logger = consoleLogger.logError\n) => {\n if (Object.prototype.hasOwnProperty.call(input, key) || defaultValue) {\n const action = actionCreator(input[key] || defaultValue)\n store.dispatch(action)\n } else if (mandatory === true) {\n logger(`EntityBrowser: Mandatory field '${key}' not set in input`)\n }\n}\n","/**\n * extracts the first error message of a validation failed response object\n */\nexport const getErrorCompact = errors => {\n for (const error of errors) {\n if (error.entityValidatorErrors) {\n return getFirstElement(error.entityValidatorErrors)[0]\n }\n\n if (error.paths) {\n return getFirstElement(getFirstElement(error.paths))[0]\n }\n }\n\n return null\n}\n\nconst getFirstElement = obj => (Object.keys(obj).length >= 1 ? obj[Object.keys(obj)[0]] : undefined)\n","import {getErrorCompact} from './validation'\n\nexport default {getErrorCompact}\n","import _get from 'lodash/get'\n\nlet persistedViews = {}\n\nexport const viewInfoSelector = location => _get(persistedViews, [location, 'info'], {})\n\nexport const persistViewInfo = (location, info, level = 0) => {\n persistedViews = {\n ...persistedViews,\n [location]: {\n level,\n info: {..._get(persistedViews, [location, 'info'], {}), ...info}\n }\n }\n}\n\nexport const clearPersistedViews = (level = 0) => {\n persistedViews = {\n ...Object.keys(persistedViews).reduce((acc, key) => {\n const persistedView = persistedViews[key]\n return {...acc, ...(persistedView.level < level && {[key]: persistedView})}\n }, {})\n }\n}\n","import {viewInfoSelector, persistViewInfo, clearPersistedViews} from './viewPersistor'\n\nexport default {persistViewInfo, viewInfoSelector, clearPersistedViews}\n","'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = exports.canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nvar addEventListener = exports.addEventListener = function addEventListener(node, event, listener) {\n return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener);\n};\n\nvar removeEventListener = exports.removeEventListener = function removeEventListener(node, event, listener) {\n return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener);\n};\n\nvar getConfirmation = exports.getConfirmation = function getConfirmation(message, callback) {\n return callback(window.confirm(message));\n}; // eslint-disable-line no-alert\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\nvar supportsHistory = exports.supportsHistory = function supportsHistory() {\n var ua = window.navigator.userAgent;\n\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n\n return window.history && 'pushState' in window.history;\n};\n\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\nvar supportsPopStateOnHashChange = exports.supportsPopStateOnHashChange = function supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n};\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\nvar supportsGoWithoutReloadUsingHash = exports.supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n};\n\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\nvar isExtraneousPopstateEvent = exports.isExtraneousPopstateEvent = function isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n};","'use strict';\n\nexports.__esModule = true;\nexports.locationsAreEqual = exports.createLocation = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _resolvePathname = require('resolve-pathname');\n\nvar _resolvePathname2 = _interopRequireDefault(_resolvePathname);\n\nvar _valueEqual = require('value-equal');\n\nvar _valueEqual2 = _interopRequireDefault(_valueEqual);\n\nvar _PathUtils = require('./PathUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createLocation = exports.createLocation = function createLocation(path, state, key, currentLocation) {\n var location = void 0;\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = (0, _PathUtils.parsePath)(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = (0, _resolvePathname2.default)(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n};\n\nvar locationsAreEqual = exports.locationsAreEqual = function locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && (0, _valueEqual2.default)(a.state, b.state);\n};","'use strict';\n\nexports.__esModule = true;\nvar addLeadingSlash = exports.addLeadingSlash = function addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n};\n\nvar stripLeadingSlash = exports.stripLeadingSlash = function stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n};\n\nvar hasBasename = exports.hasBasename = function hasBasename(path, prefix) {\n return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n};\n\nvar stripBasename = exports.stripBasename = function stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n};\n\nvar stripTrailingSlash = exports.stripTrailingSlash = function stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n};\n\nvar parsePath = exports.parsePath = function parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n\n var hashIndex = pathname.indexOf('#');\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n};\n\nvar createPath = exports.createPath = function createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n\n\n var path = pathname || '/';\n\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : '?' + search;\n\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : '#' + hash;\n\n return path;\n};","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _createTransitionManager = require('./createTransitionManager');\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nvar _DOMUtils = require('./DOMUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar HashChangeEvent = 'hashchange';\n\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + (0, _PathUtils.stripLeadingSlash)(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: _PathUtils.stripLeadingSlash,\n decodePath: _PathUtils.addLeadingSlash\n },\n slash: {\n encodePath: _PathUtils.addLeadingSlash,\n decodePath: _PathUtils.addLeadingSlash\n }\n};\n\nvar getHashPath = function getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n};\n\nvar pushHashPath = function pushHashPath(path) {\n return window.location.hash = path;\n};\n\nvar replaceHashPath = function replaceHashPath(path) {\n var hashIndex = window.location.href.indexOf('#');\n\n window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path);\n};\n\nvar createHashHistory = function createHashHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n (0, _invariant2.default)(_DOMUtils.canUseDOM, 'Hash history needs a DOM');\n\n var globalHistory = window.history;\n var canGoWithoutReload = (0, _DOMUtils.supportsGoWithoutReloadUsingHash)();\n\n var _props$getUserConfirm = props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === undefined ? _DOMUtils.getConfirmation : _props$getUserConfirm,\n _props$hashType = props.hashType,\n hashType = _props$hashType === undefined ? 'slash' : _props$hashType;\n\n var basename = props.basename ? (0, _PathUtils.stripTrailingSlash)((0, _PathUtils.addLeadingSlash)(props.basename)) : '';\n\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n\n var getDOMLocation = function getDOMLocation() {\n var path = decodePath(getHashPath());\n\n (0, _warning2.default)(!basename || (0, _PathUtils.hasBasename)(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n if (basename) path = (0, _PathUtils.stripBasename)(path, basename);\n\n return (0, _LocationUtils.createLocation)(path);\n };\n\n var transitionManager = (0, _createTransitionManager2.default)();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var forceNextPop = false;\n var ignorePath = null;\n\n var handleHashChange = function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n\n if (!forceNextPop && (0, _LocationUtils.locationsAreEqual)(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === (0, _PathUtils.createPath)(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n\n handlePop(location);\n }\n };\n\n var handlePop = function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({ action: action, location: location });\n } else {\n revertPop(location);\n }\n });\n }\n };\n\n var revertPop = function revertPop(fromLocation) {\n var toLocation = history.location;\n\n // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf((0, _PathUtils.createPath)(toLocation));\n\n if (toIndex === -1) toIndex = 0;\n\n var fromIndex = allPaths.lastIndexOf((0, _PathUtils.createPath)(fromLocation));\n\n if (fromIndex === -1) fromIndex = 0;\n\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n };\n\n // Ensure the hash is encoded properly before doing anything else.\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) replaceHashPath(encodedPath);\n\n var initialLocation = getDOMLocation();\n var allPaths = [(0, _PathUtils.createPath)(initialLocation)];\n\n // Public interface\n\n var createHref = function createHref(location) {\n return '#' + encodePath(basename + (0, _PathUtils.createPath)(location));\n };\n\n var push = function push(path, state) {\n (0, _warning2.default)(state === undefined, 'Hash history cannot push state; it is ignored');\n\n var action = 'PUSH';\n var location = (0, _LocationUtils.createLocation)(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = (0, _PathUtils.createPath)(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n\n var prevIndex = allPaths.lastIndexOf((0, _PathUtils.createPath)(history.location));\n var nextPaths = allPaths.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n nextPaths.push(path);\n allPaths = nextPaths;\n\n setState({ action: action, location: location });\n } else {\n (0, _warning2.default)(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack');\n\n setState();\n }\n });\n };\n\n var replace = function replace(path, state) {\n (0, _warning2.default)(state === undefined, 'Hash history cannot replace state; it is ignored');\n\n var action = 'REPLACE';\n var location = (0, _LocationUtils.createLocation)(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = (0, _PathUtils.createPath)(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf((0, _PathUtils.createPath)(history.location));\n\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n\n setState({ action: action, location: location });\n });\n };\n\n var go = function go(n) {\n (0, _warning2.default)(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser');\n\n globalHistory.go(n);\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var listenerCount = 0;\n\n var checkDOMListeners = function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1) {\n (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleHashChange);\n }\n };\n\n var isBlocked = false;\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n };\n\n var listen = function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n };\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexports.default = createHashHistory;","'use strict';\n\nexports.__esModule = true;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createTransitionManager = function createTransitionManager() {\n var prompt = null;\n\n var setPrompt = function setPrompt(nextPrompt) {\n (0, _warning2.default)(prompt == null, 'A history supports only one prompt at a time');\n\n prompt = nextPrompt;\n\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n };\n\n var confirmTransitionTo = function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n (0, _warning2.default)(false, 'A history needs a getUserConfirmation function in order to use a prompt message');\n\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n };\n\n var listeners = [];\n\n var appendListener = function appendListener(fn) {\n var isActive = true;\n\n var listener = function listener() {\n if (isActive) fn.apply(undefined, arguments);\n };\n\n listeners.push(listener);\n\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n };\n\n var notifyListeners = function notifyListeners() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(undefined, args);\n });\n };\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n};\n\nexports.default = createTransitionManager;","import createGetFormAsyncErrors from './selectors/getFormAsyncErrors';\nimport plain from './structure/plain';\nexport default createGetFormAsyncErrors(plain);","export default function createGetFormAsyncErrors(_ref) {\n var getIn = _ref.getIn;\n return function (form, getFormState) {\n return function (state) {\n var nonNullGetFormState = getFormState || function (state) {\n return getIn(state, 'form');\n };\n\n return getIn(nonNullGetFormState(state), form + \".asyncErrors\");\n };\n };\n}","import createGetFormInitialValues from './selectors/getFormInitialValues';\nimport plain from './structure/plain';\nexport default createGetFormInitialValues(plain);","export default function createGetFormInitialValues(_ref) {\n var getIn = _ref.getIn;\n return function (form, getFormState) {\n return function (state) {\n var nonNullGetFormState = getFormState || function (state) {\n return getIn(state, 'form');\n };\n\n return getIn(nonNullGetFormState(state), form + \".initial\");\n };\n };\n}","import createGetFormSubmitErrors from './selectors/getFormSubmitErrors';\nimport plain from './structure/plain';\nexport default createGetFormSubmitErrors(plain);","export default function createGetFormSubmitErrors(_ref) {\n var getIn = _ref.getIn,\n empty = _ref.empty;\n return function (form, getFormState) {\n return function (state) {\n var nonNullGetFormState = getFormState || function (state) {\n return getIn(state, 'form');\n };\n\n return getIn(nonNullGetFormState(state), form + \".submitErrors\") || empty;\n };\n };\n}","import createGetFormSyncErrors from './selectors/getFormSyncErrors';\nimport plain from './structure/plain';\nexport default createGetFormSyncErrors(plain);","export default function createGetFormSyncErrors(_ref) {\n var getIn = _ref.getIn,\n empty = _ref.empty;\n return function (form, getFormState) {\n return function (state) {\n var nonNullGetFormState = getFormState || function (state) {\n return getIn(state, 'form');\n };\n\n return getIn(nonNullGetFormState(state), form + \".syncErrors\") || empty;\n };\n };\n}"],"sourceRoot":""}