tocco-admin 0.3.29 → 0.3.30-hotfix227.2

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 (32) hide show
  1. package/changelog.md +21 -0
  2. package/dist/{1-chunk-796b5d.js → 1-chunk-c4ec4f.js} +1 -2
  3. package/dist/10-chunk-cfa27b.js +1 -0
  4. package/dist/{14-chunk-89abff.js → 14-chunk-3ac0b4.js} +1 -2
  5. package/dist/15-chunk-72ed2f.js +1 -0
  6. package/dist/{7-chunk-a2ff23.js → 7-chunk-c15594.js} +4 -5
  7. package/dist/8-chunk-c9a515.js +1 -0
  8. package/dist/{8-chunk-f59d64.js → 9-chunk-d34475.js} +1 -2
  9. package/dist/actions-chunk-bb07dc.js +1 -0
  10. package/dist/{icons-chunk-e6d666.js → icons-chunk-9db2b5.js} +1 -2
  11. package/dist/index.js +5 -6
  12. package/dist/{vendors~actions-chunk-91cb58.js → vendors~actions-chunk-99d13a.js} +7 -7
  13. package/dist/{vendors~flatpickr~icons-chunk-beee50.js → vendors~flatpickr~icons-chunk-2d2c62.js} +2 -2
  14. package/dist/{vendors~fontawesome-chunk-01d8d7.js → vendors~fontawesome-chunk-17113f.js} +1 -1
  15. package/dist/{vendors~icons-chunk-18d429.js → vendors~icons-chunk-560138.js} +1 -1
  16. package/dist/{vendors~libphonenumber-js-chunk-d2a574.js → vendors~libphonenumber-js-chunk-3d5efd.js} +1 -1
  17. package/dist/{vendors~quill-chunk-dbb538.js → vendors~quill-chunk-723db0.js} +6 -6
  18. package/package.json +1 -1
  19. package/dist/1-chunk-796b5d.js.map +0 -1
  20. package/dist/10-chunk-714f9d.js +0 -2
  21. package/dist/10-chunk-714f9d.js.map +0 -1
  22. package/dist/14-chunk-89abff.js.map +0 -1
  23. package/dist/15-chunk-e4f10b.js +0 -2
  24. package/dist/15-chunk-e4f10b.js.map +0 -1
  25. package/dist/7-chunk-a2ff23.js.map +0 -1
  26. package/dist/8-chunk-f59d64.js.map +0 -1
  27. package/dist/9-chunk-0fc57a.js +0 -2
  28. package/dist/9-chunk-0fc57a.js.map +0 -1
  29. package/dist/actions-chunk-46d61a.js +0 -2
  30. package/dist/actions-chunk-46d61a.js.map +0 -1
  31. package/dist/icons-chunk-e6d666.js.map +0 -1
  32. package/dist/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///./packages/app-extensions/src/form/formErrors.js","webpack:///./packages/app-extensions/src/formField/formField.js","webpack:///./packages/app-extensions/src/formField/index.js","webpack:///./packages/app-extensions/src/form/ReduxFormFieldAdapter.js","webpack:///./packages/app-extensions/src/form/enums/componentTypes.js","webpack:///./packages/app-extensions/src/form/formDefinition.js","webpack:///./packages/app-extensions/src/form/reduxForm.js","webpack:///./packages/app-extensions/src/form/enums/layoutTypes.js","webpack:///./packages/app-extensions/src/form/FormBuilder.js","webpack:///./packages/app-extensions/src/form/validators/syncValidators.js","webpack:///./packages/app-extensions/src/form/validators/asyncValidators.js","webpack:///./packages/app-extensions/src/form/validators/index.js","webpack:///./packages/app-extensions/src/form/validators/mandatory.js","webpack:///./packages/app-extensions/src/form/asyncValidation.js","webpack:///./packages/app-extensions/src/form/enums/scopes.js","webpack:///./packages/app-extensions/src/form/transformInputValues.js","webpack:///./packages/app-extensions/src/form/index.js","webpack:///./packages/app-extensions/src/form/syncValidation.js","webpack:///./packages/tocco-util/src/api/entities.js","webpack:///./packages/tocco-util/src/api/table.js","webpack:///./packages/tocco-util/src/api/index.js","webpack:///./packages/tocco-util/src/api/display.js","webpack:///./packages/app-extensions/src/actions/modules/reducer.js","webpack:///./packages/app-extensions/src/actions/modules/actions.js","webpack:///./packages/app-extensions/src/actions/actionTypes.js","webpack:///./packages/app-extensions/src/actions/modules/actionHandlers/simpleAction.js","webpack:///./packages/app-extensions/src/actions/utils/report.js","webpack:///./packages/app-extensions/src/actions/containers/simpleFormConnector.js","webpack:///./packages/app-extensions/src/actions/components/StyledReportSettings.js","webpack:///./packages/app-extensions/src/actions/components/ReportSettings.js","webpack:///./packages/app-extensions/src/actions/modules/actionHandlers/report.js","webpack:///./packages/app-extensions/src/actions/modules/actionHandlers/customAction.js","webpack:///./packages/app-extensions/src/actions/modules/actionHandlers/legacyAction.js","webpack:///./packages/app-extensions/src/actions/modules/actionHandlers/index.js","webpack:///./packages/app-extensions/src/actions/modules/prepare/preCheckHandler.js","webpack:///./packages/app-extensions/src/actions/modules/prepare/confirmHandler.js","webpack:///./packages/app-extensions/src/actions/modules/prepare/initialFormHandler.js","webpack:///./packages/app-extensions/src/actions/modules/prepare/prepare.js","webpack:///./packages/app-extensions/src/actions/modules/prepare/index.js","webpack:///./packages/app-extensions/src/actions/modules/sagas.js","webpack:///./packages/app-extensions/src/actions/addToStore.js","webpack:///./packages/app-extensions/src/actions/components/selectionHelper.js","webpack:///./packages/app-extensions/src/actions/components/ActionGroup.js","webpack:///./packages/app-extensions/src/actions/components/SingleAction.js","webpack:///./packages/app-extensions/src/actions/components/Action.js","webpack:///./packages/app-extensions/src/actions/containers/ActionContainer.js","webpack:///./packages/app-extensions/src/actions/index.js","webpack:///./packages/app-extensions/src/actions/utils/selection.js","webpack:///./packages/admin/src/utils/routing.js","webpack:///./packages/entity-list/src/modules/entityList/actions.js","webpack:///./packages/entity-list/src/util/searchFormTypes.js","webpack:///./packages/entity-list/src/modules/entityList/reducer.js","webpack:///./packages/entity-list/src/modules/entityList/sagas.js","webpack:///./packages/entity-list/src/modules/entityList/index.js","webpack:///./packages/entity-list/src/modules/list/actions.js","webpack:///./packages/entity-list/src/modules/list/reducer.js","webpack:///./packages/entity-list/src/util/api/fetchOptions.js","webpack:///./packages/entity-list/src/modules/searchForm/actions.js","webpack:///./packages/entity-list/src/modules/selection/actions.js","webpack:///./packages/entity-list/src/components/LazyDataEnhancer/LazyDataEnhancer.js","webpack:///./packages/entity-list/src/util/lazyLoading.js","webpack:///./packages/entity-list/src/components/LazyDataEnhancer/index.js","webpack:///./packages/entity-list/src/components/LazyDataEnhancer/LazyDataEnhancerContainer.js","webpack:///./packages/entity-list/src/util/fieldFactory.js","webpack:///./packages/entity-list/src/util/cellRenderer.js","webpack:///./packages/entity-list/src/util/api/forms.js","webpack:///./packages/entity-list/src/util/searchFormValidation.js","webpack:///./packages/entity-list/src/modules/searchForm/sagas.js","webpack:///./packages/entity-list/src/util/api/entities.js","webpack:///./packages/entity-list/src/modules/preferences/actions.js","webpack:///./packages/entity-list/src/modules/list/sagas.js","webpack:///./packages/entity-list/src/modules/list/index.js","webpack:///./packages/entity-list/src/modules/searchForm/reducer.js","webpack:///./packages/entity-list/src/modules/searchForm/index.js","webpack:///./packages/entity-list/src/modules/selection/reducer.js","webpack:///./packages/entity-list/src/util/selectionStyles.js","webpack:///./packages/entity-list/src/util/selection.js","webpack:///./packages/entity-list/src/modules/selection/sagas.js","webpack:///./packages/entity-list/src/modules/selection/index.js","webpack:///./packages/entity-list/src/modules/preferences/reducer.js","webpack:///./packages/entity-list/src/util/preferences.js","webpack:///./packages/entity-list/src/components/ColumnPicker/StyledColumnPicker.js","webpack:///./packages/entity-list/src/components/ColumnPicker/ColumnPicker.js","webpack:///./packages/entity-list/src/components/ColumnPicker/index.js","webpack:///./packages/entity-list/src/components/ColumnPicker/ColumnPickerContainer.js","webpack:///./packages/entity-list/src/modules/preferences/sagas.js","webpack:///./packages/entity-list/src/modules/preferences/index.js","webpack:///./packages/entity-list/src/modules/reducers.js","webpack:///./packages/entity-list/src/components/FullTextSearchForm/FullTextSearchForm.js","webpack:///./packages/entity-list/src/components/FullTextSearchForm/index.js","webpack:///./packages/entity-list/src/containers/FullTextSearchFormContainer.js","webpack:///./packages/entity-list/src/components/BasicSearchForm/StyledBasicSearchForm.js","webpack:///./packages/entity-list/src/components/BasicSearchForm/index.js","webpack:///./packages/entity-list/src/components/BasicSearchForm/BasicSearchForm.js","webpack:///./packages/entity-list/src/containers/BasicSearchFormContainer.js","webpack:///./packages/entity-list/src/components/AdminSearchForm/StyedComponents.js","webpack:///./packages/entity-list/src/components/SearchFilterList/utils.js","webpack:///./packages/entity-list/src/components/SearchFilterList/StyledComponents.js","webpack:///./packages/entity-list/src/components/SearchFilterList/SearchFilterList.js","webpack:///./packages/entity-list/src/components/SearchFilterList/SearchFilterListContainer.js","webpack:///./packages/entity-list/src/components/SearchFilterList/index.js","webpack:///./packages/entity-list/src/components/AdminSearchForm/AdminSearchForm.js","webpack:///./packages/entity-list/src/components/AdminSearchForm/AdminSearchFormContainer.js","webpack:///./packages/entity-list/src/components/AdminSearchForm/index.js","webpack:///./packages/entity-list/src/components/SearchView/SearchView.js","webpack:///./packages/entity-list/src/components/SearchView/index.js","webpack:///./packages/entity-list/src/containers/SearchViewContainer.js","webpack:///./packages/entity-list/src/components/SelectionController/StyledSelectionController.js","webpack:///./packages/entity-list/src/components/SelectionController/index.js","webpack:///./packages/entity-list/src/components/SelectionController/SelectionController.js","webpack:///./packages/entity-list/src/containers/SelectionControllerContainer.js","webpack:///./packages/entity-list/src/components/Table/NavigationCellHeader.js","webpack:///./packages/entity-list/src/components/Table/navigationCell.js","webpack:///./packages/entity-list/src/components/Table/index.js","webpack:///./packages/entity-list/src/components/Table/Table.js","webpack:///./packages/entity-list/src/containers/TableContainer.js","webpack:///./packages/entity-list/src/util/actions.js","webpack:///./packages/entity-list/src/containers/ActionContainer.js","webpack:///./packages/entity-list/src/components/ListView/ListView.js","webpack:///./packages/entity-list/src/components/ListView/index.js","webpack:///./packages/entity-list/src/containers/ListViewContainer.js","webpack:///./packages/entity-list/src/components/EntityList/StyledComponents.js","webpack:///./packages/entity-list/src/components/EntityList/EntityList.js","webpack:///./packages/entity-list/src/components/EntityList/EntityListContainer.js","webpack:///./packages/entity-list/src/components/EntityList/index.js","webpack:///./packages/entity-list/src/input.js","webpack:///./packages/entity-list/src/customActions.js","webpack:///./packages/entity-list/src/main.js","webpack:///./packages/app-extensions/src/formData/relationEntities/actions.js","webpack:///./packages/app-extensions/src/formData/relationEntities/reducer.js","webpack:///./packages/app-extensions/src/formData/tooltips/actions.js","webpack:///./packages/app-extensions/src/formData/tooltips/reducer.js","webpack:///./packages/app-extensions/src/formData/relationEntities/sagas.js","webpack:///./packages/app-extensions/src/formData/tooltips/sagas.js","webpack:///./packages/app-extensions/src/formData/advancedSearch/actions.js","webpack:///./packages/app-extensions/src/formData/values/actions.js","webpack:///./packages/app-extensions/src/formData/advancedSearch/StyledAdvancedSearch.js","webpack:///./packages/app-extensions/src/formData/advancedSearch/AdvancedSearch.js","webpack:///./packages/app-extensions/src/formData/advancedSearch/AdvancedSearchContainer.js","webpack:///./packages/app-extensions/src/formData/advancedSearch/utils.js","webpack:///./packages/app-extensions/src/formData/advancedSearch/sagas.js","webpack:///./packages/app-extensions/src/formData/values/sagas.js","webpack:///./packages/app-extensions/src/formData/upload/documents.js","webpack:///./packages/app-extensions/src/formData/upload/actions.js","webpack:///./packages/app-extensions/src/formData/upload/sagas.js","webpack:///./packages/app-extensions/src/formData/searchFilters/actions.js","webpack:///./packages/app-extensions/src/formData/searchFilters/reducer.js","webpack:///./packages/app-extensions/src/formData/searchFilters/utils.js","webpack:///./packages/app-extensions/src/formData/searchFilters/sagas.js","webpack:///./packages/app-extensions/src/formData/locations/actions.js","webpack:///./packages/app-extensions/src/formData/locations/utils.js","webpack:///./packages/app-extensions/src/formData/locations/sagas.js","webpack:///./packages/app-extensions/src/formData/locations/reducer.js","webpack:///./packages/app-extensions/src/formData/linkFactory/reducer.js","webpack:///./packages/app-extensions/src/formData/linkFactory/actions.js","webpack:///./packages/app-extensions/src/formData/formData.js","webpack:///./packages/app-extensions/src/formData/FormDataContainer.js","webpack:///./packages/app-extensions/src/formData/index.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/coordinate.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/decimal.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/document.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/integer.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/location.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/number.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/remote.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/select.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/index.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/boolean.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/duration.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/moneyamount.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/phone.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/searchFilter.js","webpack:///./packages/app-extensions/src/field/editableTypeConfigs/percent.js","webpack:///./packages/app-extensions/src/field/editableValueFactory.js","webpack:///./packages/app-extensions/src/field/formattedTypeConfigs/remote.js","webpack:///./packages/app-extensions/src/field/formattedTypeConfigs/index.js","webpack:///./packages/app-extensions/src/field/formattedTypeConfigs/document.js","webpack:///./packages/app-extensions/src/field/formattedTypeConfigs/description.js","webpack:///./packages/app-extensions/src/field/formattedValueFactory.js","webpack:///./packages/app-extensions/src/field/mappings.js","webpack:///./packages/app-extensions/src/field/fieldFactory.js","webpack:///./packages/app-extensions/src/field/index.js","webpack:///./packages/app-extensions/src/remoteEvents/index.js","webpack:///./packages/app-extensions/src/remoteEvents/actions.js","webpack:///./packages/app-extensions/src/actions/actions.js","webpack:///./packages/simple-form/src/modules/simpleForm/actions.js","webpack:///./packages/simple-form/src/modules/simpleForm/reducer.js","webpack:///./packages/simple-form/src/modules/simpleForm/sagas.js","webpack:///./packages/simple-form/src/modules/simpleForm/index.js","webpack:///./packages/simple-form/src/modules/reducers.js","webpack:///./packages/simple-form/src/components/Form/Form.js","webpack:///./packages/simple-form/src/components/Form/index.js","webpack:///./packages/simple-form/src/containers/FormContainer.js","webpack:///./packages/simple-form/src/main.js","webpack:///./packages/app-extensions/src/actions/actionComponentTypes.js","webpack:///./packages/tocco-util/src/tqlBuilder/tqlBuilder.js","webpack:///./packages/tocco-util/src/tqlBuilder/index.js","webpack:///./packages/admin/src/routes/entities/modules/path/actions.js","webpack:///./packages/admin/src/routes/entities/utils/url.js","webpack:///./packages/admin/src/routes/entities/modules/path/sagas.js","webpack:///./packages/admin/src/routes/entities/modules/path/reducer.js","webpack:///./packages/admin/src/routes/entities/modules/path/index.js","webpack:///./packages/admin/src/components/StyledLink/linkStyle.js","webpack:///./packages/admin/src/components/StyledLink/StyledNavLink.js","webpack:///./packages/admin/src/components/StyledLink/StyledLink.js","webpack:///./packages/admin/src/routes/entities/components/EntitiesOverview/EntitiesOverview.js","webpack:///./packages/admin/src/routes/entities/components/EntitiesOverview/index.js","webpack:///./packages/admin/src/routes/entities/components/RelationsView/StyledComponents.js","webpack:///./packages/admin/src/routes/entities/utils/propTypes.js","webpack:///./packages/admin/src/routes/entities/components/RelationsView/RelationsView.js","webpack:///./packages/admin/src/routes/entities/components/RelationsView/RelationViewContainer.js","webpack:///./packages/admin/src/routes/entities/components/RelationsView/index.js","webpack:///./packages/entity-detail/src/modules/entityDetail/actions.js","webpack:///./packages/entity-detail/src/modules/entityDetail/reducer.js","webpack:///./packages/entity-detail/src/util/api/entities.js","webpack:///./packages/entity-detail/src/util/modes.js","webpack:///./packages/entity-detail/src/modules/entityDetail/sagas.js","webpack:///./packages/entity-detail/src/modules/entityDetail/index.js","webpack:///./packages/entity-detail/src/modules/reducers.js","webpack:///./packages/entity-detail/src/components/SubGrid/SubGrid.js","webpack:///./packages/entity-detail/src/components/SubGrid/index.js","webpack:///./packages/entity-detail/src/containers/SubGridContainer.js","webpack:///./packages/entity-detail/src/util/detailView/fromFieldFactories/subGrid.js","webpack:///./packages/entity-detail/src/components/ErrorBox/ErrorBox.js","webpack:///./packages/entity-detail/src/components/ErrorBox/index.js","webpack:///./packages/entity-detail/src/components/DetailForm/SaveButton.js","webpack:///./packages/entity-detail/src/components/DetailForm/DetailForm.js","webpack:///./packages/entity-detail/src/containers/DetailFormContainer.js","webpack:///./packages/entity-detail/src/components/DetailView/DetailView.js","webpack:///./packages/entity-detail/src/containers/DetailViewContainer.js","webpack:///./packages/entity-detail/src/input.js","webpack:///./packages/entity-detail/src/customActions.js","webpack:///./packages/entity-detail/src/shortcuts.js","webpack:///./packages/entity-detail/src/main.js","webpack:///./packages/tocco-util/src/queryString/queryString.js","webpack:///./packages/tocco-util/src/queryString/index.js","webpack:///./packages/admin/src/routes/entities/components/Action/LazyAction.js","webpack:///./packages/admin/src/routes/entities/components/EditView/EditView.js","webpack:///./packages/admin/src/routes/entities/components/EditView/EditViewContainer.js","webpack:///./packages/admin/src/components/ErrorView/ErrorView.js","webpack:///./packages/admin/src/routes/entities/components/DetailView/DetailView.js","webpack:///./packages/admin/src/routes/entities/components/DetailView/DetaiViewContainer.js","webpack:///./packages/admin/src/routes/entities/components/ActionView/ActionView.js","webpack:///./packages/admin/src/routes/entities/components/ActionView/ActionViewContainer.js","webpack:///./packages/admin/src/routes/entities/components/EntityRecordRoute/EntityRecordRoute.js","webpack:///./packages/admin/src/routes/entities/components/EntityRecordRoute/index.js","webpack:///./packages/admin/src/routes/entities/components/CreateView/CreateView.js","webpack:///./packages/admin/src/routes/entities/components/CreateView/CreateViewContainer.js","webpack:///./packages/admin/src/routes/entities/components/ListView/ListView.js","webpack:///./packages/admin/src/routes/entities/components/ListView/ListViewContainer.js","webpack:///./packages/admin/src/routes/entities/components/EntityRoute/index.js","webpack:///./packages/admin/src/routes/entities/components/EntityRoute/EntityRoute.js","webpack:///./packages/admin/src/routes/entities/components/Breadcrumbs/StyledBreadcrumbs.js","webpack:///./packages/admin/src/routes/entities/components/Breadcrumbs/Breadcrumbs.js","webpack:///./packages/admin/src/routes/entities/components/Breadcrumbs/BreadcrumbsContainer.js","webpack:///./packages/admin/src/routes/entities/components/EntitiesRoute/EntitiesRoute.js","webpack:///./packages/admin/src/routes/entities/components/EntitiesRoute/EntitiesRouteContainer.js","webpack:///./packages/admin/src/routes/entities/components/EntitiesRoute/index.js","webpack:///./packages/admin/src/routes/entities/route.js"],"names":["getFieldErrors","formErrors","fieldErrors","getGeneralErrors","hasFieldErrors","Object","keys","length","getValidatorErrors","errors","_reduce","result","value","hasValidatorErrors","hasRelatedEntityErrors","getFirstErrorField","getRelatedEntityErrorsCompact","relatedEntityErrors","relatedEntityError","key","model","paths","entityValidatorErrors","r","_forOwn","values","fieldName","errorKey","push","map","e","addErrors","field","FormFieldWrapper","props","hasValueOverwrite","typeEditable","hasValue","formData","formValues","formField","dirty","isDirty","error","React","cloneElement","children","displayFieldTypes","multiTypes","isMultipleFields","dataType","Array","isArray","includes","displayFieldAsDisplayOnly","componentType","parentReadOnly","Span","MultiSeparator","ValueField","fieldMappingType","formName","info","events","Field","useMemo","factory","v","idx","id","reduce","prev","curr","data","resources","requestedFromData","formDefinitionField","entityField","touched","submitting","mode","readonly","readOnly","_get","mandatory","undefined","isDisplay","type","editableTypeConfigs","dataContainerProps","fixLabel","FormDataContainer","immutable","label","mandatoryTitle","exception","consoleLogger","logError","ReduxFormFieldAdapter","input","meta","_omit","extractEventsFromInput","fomFieldData","intl","formatMessage","propTypes","intlShape","isRequired","PropTypes","string","shape","any","name","onChange","func","bool","objectOf","arrayOf","oneOfType","node","object","injectIntl","freeze","FIELD_SET","FIELD","ACTION","ACTION_BAR","LAYOUT","TABLE","SUB_TABLE","DISPLAY","getFieldId","validFieldTypes","componentTypes","getFieldsOfChildren","definition","i","typePathsHandlers","location","fieldDefinition","locationMapping","filter","validationErrorToFormError","entity","forEach","prototype","hasOwnProperty","call","transformFieldName","replace","transformFieldNameBack","formValuesToFlattenEntity","acc","val","getDirtyFields","initialValues","isCreate","dirtyFields","_isEqual","VERTICAL_BOX","HORIZONTAL_BOX","memo","componentMapping","beforeRenderField","formDefinition","customActions","modeFitsScope","scopes","formTraverser","child","createLayoutComponent","layoutType","isAction","createAction","createFieldSet","createCustomComponent","fieldSet","find","_pick","path","split","join","hidden","writable","hasEmptyValue","shouldRenderField","component","format","action","entityName","entityKey","className","actions","Action","selection","getSingleEntitySelection","elements","Boolean","content","Wrapper","isFramed","isOpen","Header","H4","Body","LayoutComponent","layoutTypes","Layout","Container","Box","logWarning","prevProps","nextProps","js","difference","minLength","maxLength","minValue","maxNumber","maxValue","limit","toString","prePoint","pattern","RegExp","test","isEmail","isUrl","phone","a","phoneValidation","libphone","isValidCustomRegex","customRegex","match","isValidPhoneNumber","isValidNumber","defaultRegion","syncValidators","asyncValidators","mandatoryError","valueDefined","hasError","localeValidation","fieldDefinitions","validators","asyncValidatorKey","_has","validatorValue","validator","validatorErrors","validateRequest","flattenEntity","api","toEntity","options","queryParams","_validate","method","body","rest","simpleRequest","then","resp","valid","asyncValidation","localeValidationErrors","validateRequestErrors","CREATE","UPDATE","loadDisplays","transformInputValues","fields","entityModel","displayRequest","fieldModel","targetEntity","arrayValue","fetchDisplays","relationFieldTransformer","displays","display","fieldTypeTransformer","multi","formErrorsUtil","FormBuilder","getFieldDefinitions","getDefaultValues","f","defaultValue","valueObj","getUsedPaths","_uniq","accumulator","entityToFormValues","syncValidation","syncValidatorKey","validation","submitValidation","SubmissionError","metaFields","KEY","MODEL","VERSION","relevantRelationAttributes","typeValueExtractor","childValue","flattenPaths","currentPath","pathId","subPaths","flatten","combinedArrayVales","acc2","isDisplayableChild","getSortingAttributes","column","sorting","findIndex","s","sortRank","order","rightAlignedTypes","isRightAligned","relationFieldTypes","getFlattenEntity","version","some","dirtyField","startsWith","t","_set","valueSimplifier","_isObject","getPathDisplayRequest","entities","relationPaths","lazyData","request","fieldValue","alreadyLoaded","alreadyInRequest","getDisplayRequest","getColumnDefinition","columns","cellRenderer","args","c","sortable","resizable","widthFixed","rightAligned","CellRenderer","rowData","ACTION_HANDLERS","initialState","reducer","state","handler","ACTION_INVOKE","ACTION_IN_PROGRESS","ACTION_INVOKED","actionInvoke","parent","payload","actionInvoked","response","CUSTOM","SIMPLE","REPORT","DIVIDER","LEGACY","invokeRequest","params","randomId","Math","random","title","progressMsg","put","notifier","blockingInfo","removeBlockingInfo","remoteEvents","success","requestSaga","endpoint","formProperties","properties","acceptedErrorCodes","errorCode","validationErrorCompact","message","icon","ClientQuestionCancelledException","errorLogging","getFirstElement","obj","submitActions","DOWNLOAD","getGroupedValues","settingsDefinition","groupValues","transformValues","transform","getFormDataDefaults","extractDefaultValues","relationEntities","getFormDefinition","msg","extractFields","description","disabled","modelid","customSettings","form","generalSettings","array","recipient","mapActionCreators","emitAction","actionEmitter","dispatchEmittedAction","connect","StyledReportSettings","styled","div","ReportSettings","setState","customSettingsValid","groupedValues","onSubmit","customSettingsDefined","SimpleFormContainer","simpleFormConnector","formApp","this","listApp","noButtons","handleSettingsChange","handleCustomSettingsChange","download","downloadSupportedByBrowser","ink","onClick","handleButtonClick","look","Component","displayReportSettings","awaitSettingsSubmit","handleReportGenerations","handleSuccessfulReport","handleFailedReport","handleFailedGenerationsRequest","actionDefinition","config","channel","answerChannel","settingsModalId","ids","resource","reportId","submitAction","uuid","modalComponent","take","requestOptions","acceptedStatusCodes","generationsResponse","status","removeModalComponent","pollingUrl","headers","get","blockingInfoId","sagaUtil","checkStatusLoop","completed","getDownloadUrl","binaryLink","addParameterToURL","outputJobId","fetchEntity","outputJob","document","fileName","downloadLink","downloadUrl","openUrl","modalId","handleCustomActionModal","handleFullScreenActions","handleAppActionsFallback","appId","fullscreen","appComponent","actionStatus","OK","NOT_OK","CANCEL","ActionComponent","close","actionProperties","onSuccess","onError","onCancel","loadSequentially","readRemoteEvents","registerRemoteEventsListener","handleNotification","readNotifications","registerNotificationsListener","initLegacyActionsEnv","getSelection","getScope","loadScript","src","Promise","resolve","reject","createElement","onload","onerror","head","appendChild","loadCss","getElementsByTagName","link","rel","href","media","sources","currentEnv","window","legacyActionEnv","source","envs","channelFeedingCallback","arg","remoteEventsChannel","event","remoteEvent","app","getDataRegistry","dataRegistry","setNewClientCallback","callback","spawn","notification","level","Error","notificationsChannel","getGui","gui","getNotifier","legacyActionsEnvInitialized","setUpLegacyActionsEnv","listSelector","list","entityListSelector","entityList","entityDetailSelector","entityDetail","getManualQuery","listState","nice2","netui","ManualQuery","queryWhere","query","where","queryOrderBy","sortingArray","item","getListFormId","FormIdentifier","scope","legacySelection","selectedEntities","selectionType","select","manualQuery","listForm","searchFilters","detail","ClientActionDefinition","setEnabled","_isPlainObject","setPropertyEffects","entries","setProperty","all","entityExplorer","modules","NewClientLegacyActionsModule","init","ctx","entityexplorer","EntityExplorerActionContext","getRecord","situation","NetuiActionRegistry","newActionFromDefinition","getSelectionNumber","perform","actionTypes","handleSimpleAction","handleReportAction","handleCustomAction","handleLegacyAction","preCheckHandler","preparationResponse","preCheck","abort","abortMessage","confirmHandler","promptConfirm","confirmMessage","confirmResponse","onYes","confirm","initialFormHandler","handleInitialForm","initialFormValues","defaultValues","formTitle","formMessage","Date","valueOf","onSend","doRequest","run","getHandlers","handlers","handlerResponse","prepare","sagas","invokeAction","takeEvery","actionHandler","actionHandlers","actionType","isValidSelection","selectedCount","minSelection","maxSelection","notEnough","tooMany","selectionText","hasDefaultAction","defaultAction","onClickHandler","actionId","buttonProps","data-cy","childDefinition","getChildMenuItems","validSelection","isActionGroup","stopPropagation","useLabel","ActionVisual","modeFitsScopes","ActionType","ACTION_GROUP","ActionGroup","SingleAction","count","addToStore","store","reducerUtil","injectReducers","sagaMiddleware","sagasUtil","autoRestartSaga","errorLoging","goBack","url","amount","normalizedUrl","substring","lastIndexOf","SET_INITIALIZED","INITIALIZE","setInitialized","initialized","setEntityModel","setSearchFormType","searchFormType","searchFormTypes","NONE","BASIC","ADMIN","oneOf","singleTransferReducer","newSearchFormType","enumV","searchFormPosition","loadEntityModel","initialize","takeLatest","_isEmpty","fetchModel","loadedModel","SET_FORM_DEFINITION","SET_SORTING","SET_ENTITY_COUNT","RESET_DATA_SET","CHANGE_PAGE","REFRESH","ON_ROW_CLICK","NAVIGATE_TO_CREATE","SET_FORM_SELECTABLE","NAVIGATE_TO_ACTION","SET_SORTING_INTERACTIVE","setEntities","addEntitiesToStore","page","clearEntityStore","setEntityCount","entityCount","setFormDefinition","setSorting","setCurrentPage","currentPage","setInProgress","inProgress","refresh","setFormSelectable","formSelectable","setFormClickable","formClickable","setEndpoint","setConstriction","constriction","setLazyData","navigateToAction","getOpposite","add","contains","currentSorting","entityStore","showSearchForm","createPermission","showLink","getFilterArray","uniqueId","getFetchOptionsFromSearchForm","searchFormValues","formFields","addition","filters","fieldType","tql","tqlBuilder","getTql","EXECUTE_SEARCH","RESET_SEARCH","SUBMIT_SEARCH_FORM","SET_VALUES_INITIALIZED","executeSearch","submitSearchForm","setValuesInitialized","valuesInitialized","setFormFieldsFlat","formFieldsFlat","setSearchFilters","ON_SELECT_CHANGE","CLEAR_SELECTION","TOGGLE_SHOW_SELECTED_RECORDS","RELOAD_DATA","setSelection","onSelectChange","isSelected","setShowSelectionController","showSelectionController","setTableSelectionStyle","tableSelectionStyle","setQuery","setQueryCount","queryCount","reloadData","LazyDataEnhancer","multiRelationHandler","singleRelationHandler","typeHandlers","LazyDataEnhancerContainer","typeHandler","infos","FormattedValueWrapper","modelField","getOrFirst","breakWords","getAction","isMultiType","pathValue","style","marginRight","__key","linkFactory","fieldFactory","getDisplayExpression","__model","definitionCache","getTable","getSorting","table","getSelectable","selectable","getClickable","clickable","getEndpoint","getConstriction","columnDisplayPreferences","reverseRelationName","getFields","relationFields","displayExpressionFields","current","getFormFieldFlat","searchChildren","changeParentFieldType","formElement","parentPath","containsParentField","getTableColumns","validateSearchFields","fieldDefinitionCache","getFieldDefinition","validateField","typeValidator","typeValidators","getListFormDefinition","setInitialFormValues","transformFieldNames","submitSearchFrom","loadSearchFilter","loadSearchForm","getEntityModel","resetSearchFilters","resetSearch","getSearchFormValues","inputSelector","searchFormSelector","searchForm","listFromDefinitionSelector","searchValuesSelector","getFormValues","FORM_ID","formActionTypes","searchFormVisible","preselectedSearchFields","preselectedValues","listFormDefinition","fetchDisplay","fromDefaultValues","transformedFromValues","formActions","fetchSearchFilters","searchFilter","defaultFilter","active","fetchForm","LIST_SET_INITIALIZED","reset","searchValues","entitiesListTransformer","json","LOAD_PREFERENCES","CHANGE_POSITION","RESET_SORTING","RESET_COLUMNS","RESET_PREFERENCES","DISPLAY_COLUMN_MODAL","setPositions","positions","setColumns","resetSorting","queryChanged","loadData","getBasicQuery","prepareEndpointUrl","countEntities","changePage","getSearchFilter","loadDisplayExpressions","loadRelationDisplays","fetchEntitiesAndAddToStore","requestEntities","preloadNextPage","displayEntity","getPreferencesSorting","loadFormDefinition","onRowClick","navigateToCreate","selectionSelector","preferencesSelector","preferences","searchFormActions","selectionActions","REMOTE_EVENT","fork","regardSelection","inputSearchFilters","inputTql","showSelectedRecords","searchFormSearchFilter","searchFormFetchOptions","preparedEndpoint","fetchEntityCount","searchInputsFilters","adminSearchFormFilters","activeSearchFormFilters","_union","searchTql","fetchDisplayExpressions","columnPreferences","basicQuery","fetchEntities","nextPage","setCountAction","preferencesActions","FALLBACK_SORTING_FIELD","tableSorting","preferencesSorting","selectOnRowClick","selected","externalEvents","fireExternalEvent","relationName","containsEntityOfModel","deletedEntityKeys","fieldArray","simpleSearchFields","trim","searchFilterId","exclusive","showExtendedSearchForm","disableSimpleSearch","comparator","b","toggleReducer","sort","selectionStyles","SINGLE","MULTI","showSelectionComponent","inputSelectionStyle","disableSelectionController","getTableSelectionStyle","fromSelectable","ascendingNumberComparator","combineSelection","currentSelection","newSelection","slice","k","setTableStyle","selectionStyle","selectionMode","selectionControllerVisible","getPositions","endsWith","Number","getPositionsFromColumns","fixedPosition","changePosition","fieldAfterPosition","getPositionsPreferencesToSave","keyRegex","transformSortingKey","index","keyMatch","transformSortingField","parseInt","toLowerCase","getSortingPreferencesToSave","getAdditionalSortingPreferencesToSave","getColumns","getColumnPreferencesToSave","StyledColumnPickerWrapper","StyledUl","ul","scale","space","StyledCheckbox","StyledButtonWrapper","theme","color","ColumnPicker","onOk","useState","selectedColumns","setSelectedColumns","searchTerm","setSearchTerm","items","Li","checked","target","Label","for","placeholder","onSearch","hot","loadPreferences","saveSorting","resetPreferences","displayColumnModal","saveColumnPreferences","resetColumns","listActions","listSagas","fetchUserPreferences","util","afterFieldPosition","newPositions","deleteUserPreferences","positionPreferences","savePreferences","sortings","sortingPreferences","preferencesColumns","formColumns","entityListReducer","listReducer","searchFormReducer","selectionReducer","preferencesReducer","entityListSagas","searchFormSagas","selectionSagas","preferencesSaga","FullTextSearchForm","preventDefault","liveSearch","handleSubmit","reduxForm","destroyOnUnmount","StyledBasicSearchForm","StyledScrollbar","StyledLayoutBox","StyledSearchFormButtons","BasicSearchForm","searchFormDefinition","setShowExtendedSearchForm","hasExtendedOnlySearchFields","every","isHidden","searchInputs","StyledSplit","Split","StyledSplitWrapper","StyledHeader","AdminSearchGrid","StyledGutter","searchFilterCompare","SearchFilterListWrapper","StyledSpanSearchFilter","StyledSpan","StyledButton","Button","StyledSearchFilterButton","radii","StyledMessageWrapper","SearchFilterButton","setActive","dense","I","AdminSearchForm","setSearchFilterActive","SearchFilterList","BasicSearchFormContainer","withTheme","splitWrapperEl","useRef","size","setSize","searchFilterExpanded","setSearchFilterExpanded","showExpandSearchFilter","setShowExpandSearchFilter","useEffect","searchFilterHeight","splitWrapperHeight","clientHeight","searchFilterHeightPercentage","ceil","ref","direction","gutterSize","sizes","minSize","gutter","gutterEl","ReactDOM","render","AdminSearchFormContainer","AdminSearchFormWrapper","SearchView","isToggleable","span","SelectionController","selectionPossible","StyledSelectionController","toggleShowSelectedRecords","clearSelection","Table","width","dynamic","HeaderRenderer","NavigationCellHeader","columnDefinitions","dataLoadingInProgress","paginationInfo","totalCount","recordsPerPage","onPageChange","onSortingChange","setSortingInteractive","onSelectionChange","onColumnPositionChange","diff","deriveSelectionFromState","ListWrapper","ActionWrapper","StyledListView","SelectionControllerContainer","ListView","showActions","List","columnsDefinitions","TableContainer","ActionBar","actionBar","getActionBar","ActionContainer","required","loadingText","currentPageIds","TopPositioning","LeftPositioning","SearchGrid","ListGrid","ListViewContainer","SearchViewContainer","EntityList","initializeSearchForm","PositioningContainer","getDispatchActions","actionSettings","actionSetting","argsFactory","defaultInitalValue","setListFormDefinition","new","EXTERNAL_EVENTS","initApp","dispatchActions","publicPath","appFactory","createStore","reducers","SimpleFormApp","EntityListApp","actionAppComponent","dispatch","createApp","textResourceModules","registerAppInRegistry","changedProps","_pickBy","LOAD_RELATION_ENTITIES","setRelationEntityLoading","setRelationEntities","moreEntitiesAvailable","isLoading","LOAD_TOOLTIP","setToolTip","tooltip","enhanceEntitiesWithDisplays","loadRelationEntity","relationEntitiesActions","requestedDisplays","fieldDataSelector","fieldData","dataLoaded","forceReload","getQuery","splice","search","loadToolTip","tooltipActions","tooltipSelector","OPEN_ADVANCED_SEARCH","ADVANCED_SEARCH_UPDATE","ADVANCED_SEARCH_CLOSE","advancedSearchUpdate","advancedSearchClose","CHANGE_FIELD_VALUE","TOUCH_FIELD","changeFieldValue","StyledAdvancedSearch","AdvancedSearch","ListApp","onOkClick","getValue","getAdvancedSearchComponent","fieldId","AdvancedSearchContainer","openAdvancedSearch","closeAdvancedSearch","textResourceSelector","messages","advancedSearchActions","fieldFormBase","formBase","remoteFieldFormName","advancedSearchTitle","advancedSearchComponent","modalOpen","valueActions","changeValue","touchField","change","touch","UPLOAD_ENDPOINT_URL","__BACKEND_URL__","uploadRequest","file","FormData","append","fetch","credentials","documentToFormValueTransformer","uploadResponse","responseAttributes","mimeType","contentType","preview","thumbnailLink","UPLOAD_DOCUMENT","uploadDocument","documentFormValue","JSON","stringify","timestamp","now","LOAD_SEARCH_FILTERS","setSearchFilter","searchFilterResponseTransformer","searchFilterResponse","loadSearchFilters","searchFiltersSelector","group","LOAD_LOCATION_SUGGESTIONS","setLocationSuggestions","suggestions","setLocationSuggestionsLoading","getCountryCodeByKey","loadCountries","requestSuggestions","getCountry","LOCATION_ENDPOINT","countryCodeField","countryCache","prop","countryCode","suggestion","country","allCountries","allCountriesUniq","currentValue","notLoaded","conditions","countriesResponse","transformToSuggestions","countries","city","postcode","fieldCountries","loadLocations","searchInput","countryValue","suggestionsResponse","loadRelationEntities","loadTooltip","loadLocationsSuggestions","tooltips","locations","isDirtySelector","_merge","getFormSubmitErrors","getFormSyncErrors","getFormAsyncErrors","areStatePropsEqual","Fragment","combineReducers","relationEntitiesSagas","tooltipsSaga","advancedSearchSagas","valueSagas","uploadSagas","searchFilterSagas","locationSagas","relationEntitiesData","getOptions","allowNegative","postPointDigits","prePointDigits","upload","uploadText","uploadingText","downloadText","deleteText","settings","moreOptionsAvailable","fetchOptions","searchOptions","noResultsText","moreOptionsAvailableText","valueLinkFactory","number","decimal","hoursLabel","minutesLabel","integer","coordinate","filteredLocationData","renamedLocationData","locKey","filteredLocDataKey","getEvents","locationObject","onBlur","fetchSuggestions","mapButtonTitle","fixedDecimalScale","remote","customPhoneRegex","defaultCountry","isMulti","multiple","range","formType","Range","EditableValue","fromText","toText","downloadTitle","text","formattedTypeConfigs","overwrittenValue","editableMapping","editableValueFactory","formattedValueFactory","readOnlyMapping","editable","binary","image","birthdate","date","updatets","createts","datetime","moneyamount","percent","long","counter","time","mappingType","mappings","log","indexOf","INITIALIZE_QUESTION_FORM","SUBMIT","setFieldDefinitions","submit","cancel","getValues","CHANGE","UPDATE_SYNC_ERRORS","inputDefaultValues","formUtil","isValid","simpleForm","formSagas","Form","ms","setTimeout","sleep","submitText","pending","cancelText","handleCancel","initializeForm","validate","FormContainer","isDefined","handleRangeValue","from","to","comp","moment","guessType","isRangeValue","LOAD_CURRENT_ROUTE","setCurrentViewInfo","currentViewInfo","setBreadcrumbsInfo","breadcrumbsInfo","setRelations","relations","setRelationsInfo","relationsInfo","getPathInfo","pathname","pathParts","res","pathToRegexp","exec","pathPart","parseResult","mainSagas","loadRoute","loadRouteInfo","initMultiRelations","loadRelationInfos","isEven","n","routeInfo","deriveCurrentViewInfo","deriveBreadcrumbs","breadcrumbs","viewPersistor","clearPersistedViews","routeInfos","baseModel","relation","splittedRelation","relationStringPart","relationModel","view","lastEntry","parentKey","reverseRelation","parentModel","relationDisplay","show","relationsTransformed","relationInfoResponse","currentViewInfos","linkStyle","css","declareFont","neutral","shadeColor","NavLink","Link","H2","StyledLink","EntitiesOverview","StyledRelationsViewWrapper","StyledPreviewBox","StyledRelationBox","RelationLinks","RelationBox","RelationLabel","modelPropType","updateIgnoreProps","history","persistViewInfo","persistedViewInfo","selectedRelation","selectRelation","queryRelation","queryString","parse","hasCreateRights","entityBaseUrl","onNavigateToCreate","onStoreCreate","RelationsView","viewInfoSelector","LOAD_DETAIL_VIEW","SUBMIT_FORM","SET_LAST_SAVE","UNLOAD_DETAIL_VIEW","FIRE_TOUCHED","TOUCH_ALL_FIELDS","loadDetailView","modelPaths","entityId","setEntity","submitForm","setLastSave","lastSave","unloadDetailView","setTouched","updateEntity","createEntity","_paths","SUCCESSFUL_SAVED_STATUS","pop","loadDetailFormDefinition","loadEntity","updateFormSubmit","createFormSubmit","touchAllFields","handleSubmitError","getEntityForSubmit","fireTouched","showNotification","enhanceEntityWithDisplayExpressions","enhanceEntityWithDisplays","formInitialValueSelector","formId","initial","destroy","modes","formDefaultValues","defaultValuesFields","stopSubmit","createdEntityId","startSubmit","actionTouched","stateTouched","titleResourceName","messageResourceName","duration","displayExpressions","displayExpressionsL","dE","relationField","newValue","v2","keepDirty","keepValues","isCurrentEntity","entityDetailSagas","StyledListApp","SubGrid","detailFormName","gridName","defaultProps","showSubGridsCreateButton","showSubGridCreateButton","SubGridContainer","ErrorBox","showErrors","output","Item","condition","design","DANGER","el","SaveButton","StyledForm","anyTouched","save","firstErrorField","element","getElementById","focus","focusErrorFields","onKeyDown","tagName","_error","formInitialValues","getFormInitialValues","DetailForm","DetailView","validateSingleton","DetailFormContainer","getSyncValidation","asyncValidate","handledAsyncValidate","ctrl","DetailViewContainer","keyDown","shortcuts","EntityDetailApp","hasJsonStructure","str","parsed","err","queryStringUtil","_mapValues","stringifiedValues","lazy","LazyAction","fallback","EntityDetailAppWrapper","EditView","queryFormName","when","onTouchedChange","onNavigateToAction","onEntityDeleted","onSubGridRowClick","StyledErrorView","StyledIconWrapper","font","ErrorView","technicalReason","H1","DetailViewPart","setCurrentViewTitle","currentViewTitle","ActionView","EntityRecordRoute","word","exact","Detail","Edit","Relations","Entity","CreateView","isMultiReverseRelation","onEntityCreated","EntityRoute","Create","Record","StyledBreadcumbs","StyledBreadcrumbsLink","fontWeight","StyledBreadcrumbsTitle","Breadcrumbs","Helmet","defer","breadcrumb","reverse","getTitle","Comp","StyledWrapper","StyledContent","StyledBreadcrumbs","EntitiesRoute","loadCurrentRoute","Overview","container"],"mappings":"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","file":"15-chunk-e4f10b.js","sourcesContent":["import _forOwn from 'lodash/forOwn'\nimport _reduce from 'lodash/reduce'\n\nexport const generalErrorField = '_error'\nexport const entityValidatorErrorsField = 'entityValidatorErrors'\nexport const relatedEntityErrorsField = 'relatedEntityErrors'\n\nconst getFieldErrors = formErrors => {\n const fieldErrors = {...formErrors}\n delete fieldErrors[generalErrorField]\n return fieldErrors\n}\n\nconst hasFieldErrors = formErrors => (\n Object.keys(getFieldErrors(formErrors)).length >= 1\n)\n\nconst hasValidatorErrors = formErrors => {\n const errors = getGeneralErrors(formErrors)\n return !!(errors && errors[entityValidatorErrorsField] && Object.keys(errors[entityValidatorErrorsField]).length >= 1)\n}\n\nconst getValidatorErrors = formErrors => {\n const errors = getGeneralErrors(formErrors)\n return _reduce(errors[entityValidatorErrorsField], (result, value) => [...result, ...value], [])\n}\n\nconst hasRelatedEntityErrors = formErrors => {\n const errors = getGeneralErrors(formErrors)\n return !!(errors && errors[relatedEntityErrorsField] && errors[relatedEntityErrorsField].length >= 1)\n}\n\nconst getGeneralErrors = formErrors => (\n formErrors[generalErrorField]\n)\n\nconst getFirstErrorField = formErrors => (\n Object.keys(getFieldErrors(formErrors))[0]\n)\n\nconst getRelatedEntityErrorsCompact = formErrors => {\n const relatedEntityErrors = getGeneralErrors(formErrors).relatedEntityErrors\n\n return _reduce(relatedEntityErrors, (result, relatedEntityError) => {\n const {key, model, paths, entityValidatorErrors} = relatedEntityError\n\n const r = [...result]\n _forOwn(paths, (values, fieldName) => {\n _forOwn(values, (errors, errorKey) => {\n r.push(...(errors.map(e => `${e} (${fieldName}, ${model}, ${key})`)))\n })\n })\n\n if (entityValidatorErrors && Object.keys(entityValidatorErrors).length >= 1) {\n r.push(...(\n _reduce(\n entityValidatorErrors,\n (result, value) => [...result, ...(value.map(e => `${e} (${model}, ${key})`))],\n []))\n )\n }\n\n return r\n }, [])\n}\n\nconst addErrors = (errors, field, fieldErrors) => (\n {\n ...errors,\n [field]:\n {\n ...(errors[field] || {}),\n ...(fieldErrors || {})\n }\n }\n)\n\nexport default {\n hasFieldErrors,\n getFieldErrors,\n getValidatorErrors,\n hasValidatorErrors,\n hasRelatedEntityErrors,\n getFirstErrorField,\n getRelatedEntityErrorsCompact,\n addErrors\n}\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport _get from 'lodash/get'\nimport {StatedValue, Typography} from 'tocco-ui'\nimport {consoleLogger} from 'tocco-util'\n\nimport field from '../field'\nimport fromData from '../formData'\n\nconst FormFieldWrapper = props => {\n const hasValueOverwrite = props.typeEditable && props.typeEditable.hasValue\n && props.typeEditable.hasValue(props.formData.formValues, props.formField)\n\n return <StatedValue\n {...props}\n dirty={props.formData.isDirty || props.dirty}\n error={props.formData.errors || props.error}\n hasValue={hasValueOverwrite || props.hasValue}\n >\n {React.cloneElement(props.children, {formData: props.formData})}\n </StatedValue>\n}\n\nFormFieldWrapper.propTypes = {\n typeEditable: PropTypes.object,\n children: PropTypes.node,\n formData: PropTypes.object,\n formField: PropTypes.object,\n dirty: PropTypes.bool,\n error: PropTypes.object,\n hasValue: PropTypes.bool\n}\n\nconst displayFieldTypes = ['display', 'description']\nconst multiTypes = ['multi-select-box', 'multi-remote-field', 'search-filter']\n\nconst isMultipleFields = (value, dataType) =>\n Array.isArray(value) && !multiTypes.includes(dataType)\n\nconst displayFieldAsDisplayOnly = (value, componentType, dataType, parentReadOnly) => {\n if (parentReadOnly) {\n return true\n }\n\n if (displayFieldTypes.includes(componentType)) {\n return true\n }\n\n if (isMultipleFields(value, dataType)) {\n return true\n }\n\n return false\n}\n\nexport const formFieldFactory = (fieldMappingType, data, resources = {}) => {\n try {\n const {\n formDefinitionField,\n entityField,\n id,\n value,\n dirty,\n touched,\n events,\n error,\n submitting,\n parentReadOnly,\n formName,\n mode\n } = data\n\n const {\n componentType,\n dataType,\n readonly\n } = formDefinitionField\n\n const readOnly = (\n parentReadOnly\n || readonly\n || submitting\n || !_get(entityField, 'writable', true)\n )\n\n const mandatory = !readOnly && _get(formDefinitionField, 'validation.mandatory', false) && mode !== 'search'\n const hasValue = value !== null && value !== undefined && (value.length === undefined || value.length > 0)\n const isDisplay = displayFieldAsDisplayOnly(value, componentType, dataType, parentReadOnly)\n\n const type = formDefinitionField.dataType || formDefinitionField.componentType\n let requestedFromData\n\n const typeEditable = field.editableTypeConfigs[type]\n\n if (typeEditable && typeEditable.dataContainerProps) {\n requestedFromData = typeEditable.dataContainerProps({formField: formDefinitionField, formName})\n }\n\n const fixLabel = typeEditable && typeEditable.fixLabel && typeEditable.fixLabel()\n\n return (\n <fromData.FormDataContainer {...requestedFromData}>\n <FormFieldWrapper\n typeEditable={typeEditable}\n dirty={dirty}\n error={error}\n hasValue={hasValue}\n id={id}\n immutable={readOnly}\n isDisplay={isDisplay}\n key={id}\n label={formDefinitionField.label}\n mandatory={mandatory}\n mandatoryTitle={resources.mandatoryTitle}\n touched={touched}\n fixLabel={fixLabel}\n formField={formDefinitionField}\n >\n <ValueField\n fieldMappingType={isDisplay ? 'readOnly' : fieldMappingType}\n formName={formName}\n formField={formDefinitionField}\n value={value}\n info={{id, readOnly, mandatory}}\n events={events}\n />\n </FormFieldWrapper>\n </fromData.FormDataContainer>\n )\n } catch (exception) {\n consoleLogger.logError('Error creating formField', exception)\n return <span/>\n }\n}\n\nexport const MultiSeparator = () => (<Typography.Span>, </Typography.Span>)\n\nconst ValueField = ({\n fieldMappingType,\n formName,\n formField,\n value,\n info,\n events,\n formData\n}) => {\n const Field = useMemo(() =>\n field.factory(fieldMappingType, formField.dataType || formField.componentType), []\n )\n\n if (isMultipleFields(value, formField.dataType)) {\n return value\n .map((v, idx) => <Field\n formField={formField}\n formName={formName}\n value={v}\n info={info}\n events={events}\n formData={formData}\n key={'valueField-' + formField.id + idx}\n />)\n .reduce((prev, curr, idx) => [prev, <MultiSeparator key={'sep' + idx}/>, curr])\n }\n\n return <Field\n formField={formField}\n formName={formName}\n value={value}\n info={info}\n events={events}\n formData={formData}\n />\n}\n\nValueField.propTypes = {\n events: PropTypes.objectOf(PropTypes.func),\n fieldMappingType: PropTypes.string.isRequired,\n formData: PropTypes.object,\n formField: PropTypes.object,\n formName: PropTypes.string,\n info: PropTypes.object,\n value: PropTypes.any\n}\n","import {formFieldFactory} from './formField'\n\nexport default {formFieldFactory}\n","import PropTypes from 'prop-types'\nimport _omit from 'lodash/omit'\nimport {injectIntl, intlShape} from 'react-intl'\n\nimport formField from '../formField'\n\nconst extractEventsFromInput = input => (\n _omit(input, ['name', 'value'])\n)\n\nconst ReduxFormFieldAdapter = props => {\n const {\n input,\n meta: {dirty, touched, error, submitting},\n id,\n formDefinitionField,\n entityField,\n parentReadOnly,\n formName,\n mode\n } = props\n\n const events = extractEventsFromInput(input)\n\n const fomFieldData = {\n formDefinitionField,\n id,\n formName,\n value: input.value,\n dirty,\n touched,\n submitting,\n events,\n error,\n entityField,\n parentReadOnly,\n mode\n }\n const resources = {\n mandatoryTitle: props.intl.formatMessage({id: 'client.component.form.mandatoryFieldTitle'})\n }\n\n return formField.formFieldFactory(props.fieldMappingType, fomFieldData, resources)\n}\n\nReduxFormFieldAdapter.propTypes = {\n intl: intlShape.isRequired,\n id: PropTypes.string,\n input: PropTypes.shape({\n value: PropTypes.any,\n name: PropTypes.string,\n onChange: PropTypes.func\n }).isRequired,\n meta: PropTypes.shape({\n touched: PropTypes.bool,\n error: PropTypes.objectOf(\n PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.node, PropTypes.string]))\n ),\n dirty: PropTypes.bool,\n submitting: PropTypes.bool\n }).isRequired,\n formDefinitionField: PropTypes.object.isRequired,\n entityField: PropTypes.object,\n parentReadOnly: PropTypes.bool,\n fieldMappingType: PropTypes.string.isRequired,\n mode: PropTypes.string\n}\n\nexport default injectIntl(ReduxFormFieldAdapter)\n","export default Object.freeze({\n FIELD_SET: 'field-set',\n FIELD: 'field',\n ACTION: 'action',\n ACTION_BAR: 'action-bar',\n LAYOUT: 'layout',\n TABLE: 'table',\n SUB_TABLE: 'sub-table',\n DISPLAY: 'display'\n})\n","import _uniq from 'lodash/uniq'\n\nimport componentTypes from './enums/componentTypes'\nexport const getFieldId = (formName, fieldName) => (\n `input-${formName}-${fieldName}`\n)\n\nexport const getFieldDefinitions = formDefinition => {\n return getFieldsOfChildren(formDefinition)\n}\n\nconst validFieldTypes = [\n componentTypes.FIELD,\n componentTypes.DISPLAY\n]\n\nconst getFieldsOfChildren = definition => {\n const result = []\n\n for (let i = 0; i < definition.children.length; i++) {\n if (definition.children[i].children) {\n result.push(...getFieldsOfChildren(definition.children[i]))\n }\n\n const componentType = definition.children[i].componentType\n\n if (validFieldTypes.includes(componentType)) {\n result.push({\n ...definition.children[i],\n readonly: definition.readonly\n })\n }\n }\n\n return result\n}\n\nexport const getDefaultValues = fieldDefinitions =>\n fieldDefinitions\n .filter(f => f.defaultValue)\n .reduce((valueObj, field) => ({\n ...valueObj,\n [field.id]: field.defaultValue\n }), {})\n\nconst typePathsHandlers = {\n location: fieldDefinition => Object.values(fieldDefinition.locationMapping).filter(v => v)\n}\n\nexport const getUsedPaths = fieldDefinitions =>\n _uniq(\n fieldDefinitions\n .filter(field => field.componentType === componentTypes.FIELD)\n .reduce((accumulator, field) =>\n [\n ...accumulator,\n ...(typePathsHandlers[field.dataType] ? typePathsHandlers[field.dataType](field) : [field.path || field.id])\n ],\n [])\n )\n","import _forOwn from 'lodash/forOwn'\nimport _isEqual from 'lodash/isEqual'\nimport _reduce from 'lodash/reduce'\n\nimport {generalErrorField, entityValidatorErrorsField, relatedEntityErrorsField} from './formErrors'\n\nexport const validationErrorToFormError = (entity, errors) => {\n let result = {[generalErrorField]: {[relatedEntityErrorsField]: []}}\n\n if (!errors) return result\n errors.forEach(error => {\n if (error.model === entity.model && ((!entity.key && !error.key) || error.key === entity.key)) {\n result = {...result, ...error.paths}\n if (Object.prototype.hasOwnProperty.call(error, entityValidatorErrorsField)) {\n result[generalErrorField][entityValidatorErrorsField] = error[entityValidatorErrorsField]\n }\n } else {\n result[generalErrorField][relatedEntityErrorsField].push(error)\n }\n })\n return result\n}\n\n// workaround: redux-forms can't get the value of a field if the field-name contains a dot.\nexport const transformFieldName = fieldName => (fieldName.replace(/\\./g, '--'))\nexport const transformFieldNameBack = fieldName => (fieldName.replace(/--/g, '.'))\n\nexport const entityToFormValues = entity => {\n return _reduce(entity, (acc, val, key) => ({...acc, [transformFieldName(key)]: val}), {})\n}\n\nexport const formValuesToFlattenEntity = entity => {\n return _reduce(entity, (acc, val, key) => ({...acc, [transformFieldNameBack(key)]: val}), {})\n}\n\nexport const getDirtyFields = (initialValues, values, isCreate) => {\n const dirtyFields = []\n\n _forOwn(values, (value, key) => {\n if (isCreate || !_isEqual(value, initialValues[key])) {\n dirtyFields.push(key)\n }\n })\n\n return dirtyFields\n}\n","export default Object.freeze({\n VERTICAL_BOX: 'vertical-box',\n HORIZONTAL_BOX: 'horizontal-box'\n})\n","/* eslint-disable react/prop-types */\n// propTypes are not recognized properly in this file\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport {Field} from 'redux-form'\nimport _get from 'lodash/get'\nimport _pick from 'lodash/pick'\nimport {Layout, Panel, Typography} from 'tocco-ui'\nimport {consoleLogger, js} from 'tocco-util'\n\nimport ReduxFormFieldAdapter from './ReduxFormFieldAdapter'\nimport {getFieldId} from './formDefinition'\nimport {transformFieldName} from './reduxForm'\nimport actions from '../actions'\nimport componentTypes from './enums/componentTypes'\nimport layoutTypes from './enums/layoutTypes'\nimport {isAction} from '../actions/actions'\n\nconst FormBuilder = props => {\n const {\n componentMapping,\n entity,\n mode,\n beforeRenderField,\n formDefinition,\n formValues,\n formName,\n fieldMappingType,\n customActions\n } = props\n\n const modeFitsScope = (mode, scopes) => (\n !mode || !scopes || scopes.length === 0 || scopes.includes(mode)\n )\n\n const formTraverser = (children, parentReadOnly = false) => {\n const result = []\n for (const child of children) {\n if (child.componentType === componentTypes.LAYOUT) {\n result.push(createLayoutComponent(child, child.layoutType, parentReadOnly))\n } else if (isAction(child.componentType)) {\n result.push(createAction(child))\n } else if (child.componentType === componentTypes.FIELD_SET) {\n result.push(createFieldSet(child, parentReadOnly))\n } else if (componentMapping && componentMapping[child.componentType]) {\n return createCustomComponent(child)\n }\n }\n return result\n }\n\n const createFieldSet = (fieldSet, parentReadOnly) => {\n const fieldDefinition = fieldSet.children.find(child => !isAction(child.componentType))\n\n if (!fieldDefinition) {\n return null\n }\n\n const formDefinitionField = {\n ...fieldDefinition,\n ..._pick(fieldSet, ['label', 'hidden', 'readonly', 'scopes'])\n }\n\n const fieldName = formDefinitionField.path || formDefinitionField.id\n const entityField = _get(entity, 'paths.' + fieldName.split('.').join('.value.paths.'))\n\n const shouldRenderField = (formDefinitionField, entityField) => {\n if (!modeFitsScope(mode, formDefinitionField.scopes)) {\n return false\n }\n\n if (formDefinitionField.hidden) {\n return false\n }\n\n if (beforeRenderField && !beforeRenderField(fieldName)) {\n return false\n }\n\n const hasEmptyValue = (fieldName, formValues) => {\n if (!Object.prototype.hasOwnProperty.call(formValues || {}, fieldName)) {\n return true\n } else {\n const value = formValues[fieldName]\n return (value == null || value === '' || (Array.isArray(value) && value.length === 0))\n }\n }\n\n const readOnly = (\n parentReadOnly\n || formDefinition.readonly\n || (entityField && entityField.writable === false)\n || formDefinitionField.readonly || formDefinitionField.componentType === 'display'\n )\n\n return !(readOnly && hasEmptyValue(transformFieldName(fieldName), formValues))\n }\n\n if (shouldRenderField(formDefinitionField, entityField)) {\n return <Field\n key={`field-${fieldName}`}\n parentReadOnly={parentReadOnly}\n name={transformFieldName(fieldName)}\n id={getFieldId(formName, fieldName)}\n formName={formName}\n component={ReduxFormFieldAdapter}\n formDefinitionField={formDefinitionField}\n entityField={entityField}\n fieldMappingType={fieldMappingType}\n format={null}\n mode={mode}\n />\n }\n\n return null\n }\n\n const createAction = action => {\n const entityName = _get(props, 'entity.model')\n const entityKey = _get(props, 'entity.key')\n\n return <div\n key={`action-${action.id}`}\n className=\"StyledRelationsViewWrapper\"\n >\n <actions.Action\n definition={action}\n selection={actions.getSingleEntitySelection(entityName, entityKey)}\n mode={mode}\n customActions={customActions}\n />\n </div>\n }\n\n const createLayoutComponent = (field, type, parentReadOnly) => {\n let elements = formTraverser(field.children, parentReadOnly || field.readonly)\n\n if (Array.isArray(elements)) {\n elements = elements.filter(Boolean)\n }\n\n if (!elements || (Array.isArray(elements) && elements.length === 0)) {\n return null\n }\n\n const content = field.label\n ? <Panel.Wrapper isFramed={true} isOpen={true}>\n <Panel.Header><Typography.H4>{field.label}</Typography.H4></Panel.Header>\n <Panel.Body>{elements}</Panel.Body>\n </Panel.Wrapper>\n : elements\n\n const layoutMap = {\n [layoutTypes.HORIZONTAL_BOX]: Layout.Container,\n [layoutTypes.VERTICAL_BOX]: Layout.Box\n }\n\n const LayoutComponent = layoutMap[type]\n const key = `layoutcomponent-${field.id}-${field.layoutType}`\n\n if (LayoutComponent) {\n return <LayoutComponent key={key}>{content}</LayoutComponent>\n } else {\n consoleLogger.logWarning(`Layout type \"${type}\" for box \"${field.id}\" is unknown.`)\n return null\n }\n }\n\n const createCustomComponent = field => {\n if (!modeFitsScope(mode, field.scopes)) {\n return null\n }\n\n const key = `custom-component-${field.id}-${field.layoutType}`\n const component = componentMapping[field.componentType]\n\n return component(field, key)\n }\n\n return formTraverser(formDefinition.children, formDefinition.readonly)\n}\n\nFormBuilder.propTypes = {\n entity: PropTypes.object,\n formName: PropTypes.string.isRequired,\n formDefinition: PropTypes.object.isRequired,\n formValues: PropTypes.object,\n mode: PropTypes.string,\n componentMapping: PropTypes.objectOf(PropTypes.func),\n beforeRenderField: PropTypes.func,\n customActions: PropTypes.objectOf(PropTypes.func)\n}\n\nconst areEqual = (prevProps, nextProps) => {\n const diff = Object.keys(js.difference(prevProps, nextProps))\n return diff.length === 0\n}\n\nexport default React.memo(FormBuilder, areEqual)\n","import React from 'react'\nimport {FormattedMessage} from 'react-intl'\nimport isEmail from 'validator/lib/isEmail'\nimport isUrl from 'validator/lib/isURL'\n\nexport const minLengthValidator = (value, minLength) =>\n value.length < minLength\n ? {\n minLength: [\n <FormattedMessage\n key=\"syncValidationMinLength\"\n id=\"client.component.form.syncValidationMinLength\"\n values={{minLength}}\n />\n ]\n }\n : null\n\nexport const minNumberValidator = (value, minValue) =>\n value < minValue\n ? {\n maxNumber: [\n <FormattedMessage\n key=\"syncValidationMaxNumber\"\n id=\"client.component.form.syncValidationMinNumber\"\n values={{minValue}}\n />\n ]\n }\n : null\n\nexport const maxLengthValidator = (value, maxLength) =>\n value.length > maxLength\n ? {\n maxLength: [\n <FormattedMessage\n key=\"syncValidationMaxLength\"\n id=\"client.component.form.syncValidationMaxLength\"\n values={{maxLength}}\n />\n ]\n }\n : null\n\nexport const maxNumberValidator = (value, maxValue) =>\n value > maxValue\n ? {\n maxNumber: [\n <FormattedMessage\n key=\"syncValidationMaxNumber\"\n id=\"client.component.form.syncValidationMaxNumber\"\n values={{maxValue}}\n />\n ]\n }\n : null\n\nexport const postPointValidator = (value, limit) =>\n value.toString().includes('.') && value.toString().split('.')[1].length > limit\n ? {\n prePoint: [\n <FormattedMessage\n key=\"syncValidationPrePoint\"\n id=\"client.component.form.syncValidationPrePoint\"\n values={{limit}}\n />\n ]\n }\n : null\n\nexport const prePointValidator = (value, limit) =>\n limit > 0 && value.toString().split('.')[0].length > limit\n ? {\n prePoint: [\n <FormattedMessage\n key=\"syncValidationPrePoint\"\n id=\"client.component.form.syncValidationPrePoint\"\n values={{limit}}\n />\n ]\n }\n : null\n\nexport const regexValidator = (value, pattern) =>\n !RegExp(pattern).test(value)\n ? {\n prePoint: [\n <FormattedMessage\n key=\"syncValidationRegexPattern\"\n id=\"client.component.form.syncValidationRegexPattern\"\n values={{pattern}}\n />\n ]\n }\n : null\n\nexport const emailValidator = value =>\n !isEmail(value)\n ? {\n format: [<FormattedMessage\n key=\"invalidEmail\"\n id=\"client.component.form.invalidEmail\"\n />\n ]\n\n }\n : null\n\nexport const urlValidator = value =>\n !isUrl(value)\n ? {\n format: [<FormattedMessage\n key=\"invalidUrl\"\n id=\"client.component.form.invalidUrl\"\n />\n ]\n }\n : null\n\nexport default {\n 'length.fromIncluding': minLengthValidator,\n 'length.toIncluding': maxLengthValidator,\n 'numberRange.fromIncluding': minNumberValidator,\n 'numberRange.toIncluding': maxNumberValidator,\n 'decimalDigits.postPointDigits': postPointValidator,\n 'decimalDigits.prePointDigits': prePointValidator,\n 'regex.pattern': regexValidator,\n 'email': emailValidator,\n 'url': urlValidator\n}\n","import React from 'react'\nimport {FormattedMessage} from 'react-intl'\n\nconst DEFAULT_DEFAULT_REGION = 'CH'\nexport const phoneValidator = async(value, phoneValidation = {}) => {\n const libphone = await import(/* webpackChunkName: \"libphonenumber-js\" */ 'libphonenumber-js')\n const isValidCustomRegex = phoneValidation.customRegex && value.match(phoneValidation.customRegex)\n const isValidPhoneNumber = libphone.isValidNumber(\n value,\n (phoneValidation.defaultRegion) || DEFAULT_DEFAULT_REGION\n )\n\n return (isValidCustomRegex || isValidPhoneNumber)\n ? null\n : {\n phone: [<FormattedMessage\n key=\"invalidPhoneNumber\"\n id=\"client.component.form.invalidPhoneNumber\"\n />\n ]\n }\n}\n\nexport default {\n phone: phoneValidator\n}\n","import syncValidators from './syncValidators'\nimport asyncValidators from './asyncValidators'\nimport {mandatoryError, valueDefined} from './mandatory'\n\nexport default {syncValidators, asyncValidators, mandatoryError, valueDefined}\n","import React from 'react'\nimport {FormattedMessage} from 'react-intl'\n\nexport const valueDefined = value => !(\n value === null\n || value === undefined\n || value === ''\n || (Array.isArray(value) && value.length === 0)\n || (typeof value === 'object' && Object.keys(value).length === 0)\n)\n\nexport const mandatoryError = {\n mandatory: [\n <FormattedMessage\n key=\"syncValidationRequired\"\n id=\"client.component.form.syncValidationRequired\"\n />\n ]\n}\n","import {SubmissionError} from 'redux-form'\nimport {api} from 'tocco-util'\nimport _has from 'lodash/has'\nimport _get from 'lodash/get'\n\nimport rest from '../rest'\nimport validators from './validators'\nimport formErrors from './formErrors'\nimport {formValuesToFlattenEntity, getDirtyFields, validationErrorToFormError} from './reduxForm'\n\nconst hasError = errors => (\n errors && Object.keys(errors).length > 0\n)\n\nconst localeValidation = async(values, fieldDefinitions) => {\n let errors = {}\n for (const fieldDefinition of fieldDefinitions) {\n const value = values[fieldDefinition.path]\n if (validators.valueDefined(value)) {\n for (const asyncValidatorKey in validators.asyncValidators) {\n if (_has(fieldDefinition, ['validation', asyncValidatorKey])) {\n const validatorValue = _get(fieldDefinition, ['validation', asyncValidatorKey])\n const validator = validators.asyncValidators[asyncValidatorKey]\n const validatorErrors = await validator(value, validatorValue)\n if (validatorErrors) {\n errors = formErrors.addErrors(errors, fieldDefinition.path, validatorErrors)\n }\n }\n }\n }\n }\n return errors\n}\n\nconst validateRequest = (formValues, initialValues, mode) => {\n const dirtyFields = getDirtyFields(initialValues, formValues)\n const flattenEntity = formValuesToFlattenEntity(formValues)\n const entity = api.toEntity(flattenEntity, dirtyFields)\n const options = {\n queryParams: {_validate: true},\n method: mode === 'create' ? 'POST' : 'PATCH',\n body: entity\n }\n\n return rest.simpleRequest(`entities/2.0/${entity.model}${entity.key ? `/${entity.key}` : ''}`, options)\n .then(resp => resp.body)\n .then(body => {\n if (body.valid) {\n return {}\n }\n return validationErrorToFormError(entity, body.errors)\n })\n}\n\nexport const submitValidation = (formValues, initialValues, mode) =>\n validateRequest(formValues, initialValues, mode)\n .then(errors => {\n if (hasError(errors)) {\n throw new SubmissionError(errors)\n }\n })\n\nexport const asyncValidation = async(formValues, initialValues, fieldDefinitions, mode) => {\n const localeValidationErrors = await localeValidation(formValues, fieldDefinitions)\n if (hasError(localeValidationErrors)) {\n throw localeValidationErrors\n }\n\n const validateRequestErrors = await validateRequest(formValues, initialValues, mode)\n if (hasError(validateRequestErrors)) {\n throw validateRequestErrors\n }\n}\n","export default Object.freeze({\n CREATE: 'create',\n UPDATE: 'update'\n})\n","import _get from 'lodash/get'\nimport {call} from 'redux-saga/effects'\n\nimport rest from '../rest'\n\nfunction* loadDisplays(fields, entityModel) {\n const displayRequest = fields.reduce((acc, field) => {\n const {id, value} = field\n const fieldModel = _get(entityModel, ['paths', id])\n if (fieldModel && fieldModel.type === 'relation') {\n const targetEntity = fieldModel.targetEntity\n const arrayValue = Array.isArray(value) ? value : [value]\n\n return {\n ...acc,\n [targetEntity]: [\n ...(acc[targetEntity] || []),\n ...arrayValue\n ]\n }\n }\n return acc\n }\n , {})\n\n if (Object.keys(displayRequest).length === 0) {\n return null\n }\n\n return yield call(rest.fetchDisplays, displayRequest)\n}\n\nexport const NOT_FOUND_DISPLAY = '??'\nconst relationFieldTransformer = (value, displays, targetEntity) =>\n ({key: value, display: _get(displays, [targetEntity, value], NOT_FOUND_DISPLAY)})\n\nconst fieldTypeTransformer = (value, fieldModel, displays) => {\n if (fieldModel && fieldModel.type === 'relation') {\n const {targetEntity} = fieldModel\n\n if (fieldModel.multi) {\n return value.map(v => relationFieldTransformer(v, displays, targetEntity))\n } else {\n return relationFieldTransformer(value, displays, targetEntity)\n }\n }\n\n return value\n}\n\n/**\n * Takes an array of values and transforms it into usable form values and load displays where needed.\n *\n * @param {array} fields Input array with schema [{id: 'firstname', value: 'Donald'}, {id: 'relGender', value: '1'}]\n * @param {entityModel} entityModel\n *\n * @return {object} With schema {firstname: 'Donald', relGender: {key: '1', display: 'Male'}}\n */\nexport default function* transformInputValues(fields, entityModel) {\n const displays = yield call(loadDisplays, fields, entityModel)\n\n return fields.reduce((acc, field) => {\n const {id, value} = field\n const fieldModel = _get(entityModel, ['paths', id])\n\n return {\n ...acc,\n [id]: fieldTypeTransformer(value, fieldModel, displays)\n }\n }, {})\n}\n","import formErrorsUtil from './formErrors'\nimport FormBuilder from './FormBuilder'\nimport {getFieldId, getFieldDefinitions, getDefaultValues, getUsedPaths} from './formDefinition'\nimport syncValidation from './syncValidation'\nimport {asyncValidation, submitValidation} from './asyncValidation'\nimport {\n formValuesToFlattenEntity,\n entityToFormValues,\n getDirtyFields,\n validationErrorToFormError,\n transformFieldName,\n transformFieldNameBack\n} from './reduxForm'\nimport componentTypes from './enums/componentTypes'\nimport layoutTypes from './enums/layoutTypes'\nimport scopes from './enums/scopes'\nimport validators from './validators'\nimport transformInputValues from './transformInputValues'\n\nexport default {\n formErrorsUtil,\n FormBuilder,\n getFieldId,\n getFieldDefinitions,\n getDefaultValues,\n getUsedPaths,\n formValuesToFlattenEntity,\n entityToFormValues,\n getDirtyFields,\n validationErrorToFormError,\n transformFieldName,\n transformFieldNameBack,\n syncValidation,\n componentTypes,\n layoutTypes,\n scopes,\n validators,\n transformInputValues,\n asyncValidation,\n submitValidation\n}\n","import _has from 'lodash/has'\nimport _get from 'lodash/get'\n\nimport validators from './validators'\nimport formErrors from './formErrors'\n\nexport default fieldDefinitions => values => {\n let errors = {}\n\n fieldDefinitions.forEach(fieldDefinition => {\n const value = values[fieldDefinition.path]\n\n if (validators.valueDefined(value)) {\n Object.keys(validators.syncValidators).forEach(syncValidatorKey => {\n if (_has(fieldDefinition, ['validation', ...syncValidatorKey.split('.')])) {\n const validatorValue = _get(fieldDefinition, ['validation', ...syncValidatorKey.split('.')])\n const validator = validators.syncValidators[syncValidatorKey]\n const validatorErrors = validator(value, validatorValue)\n if (validatorErrors) {\n errors = formErrors.addErrors(errors, fieldDefinition.path, validatorErrors)\n }\n }\n })\n } else {\n if (fieldDefinition.validation && fieldDefinition.validation.mandatory) {\n errors = formErrors.addErrors(errors, fieldDefinition.path, validators.mandatoryError)\n }\n }\n })\n\n return errors\n}\n","import _pick from 'lodash/pick'\nimport _get from 'lodash/get'\nimport _set from 'lodash/set'\nimport _reduce from 'lodash/reduce'\nimport _isObject from 'lodash/isObject'\n\nconst metaFields = {\n KEY: '__key',\n MODEL: '__model',\n VERSION: '__version'\n}\n\nexport const relationFieldTypes = ['single-select-box', 'multi-select-box', 'single-remote-field', 'multi-remote-field']\nexport const relevantRelationAttributes = ['key', 'display', 'model', 'version']\n\nconst typeValueExtractor = (type, value) => {\n switch (type) {\n case 'entity':\n return value ? _pick(value, relevantRelationAttributes) : null\n case 'entity-list':\n return value.length > 0 ? value.map(childValue => _pick(childValue, relevantRelationAttributes)) : null\n case 'login':\n return _get(value, 'username')\n case 'longitude':\n case 'latitude':\n return _get(value, 'value')\n default:\n return value\n }\n}\n\n/**\n * Transforms a entity object into a flatten structure wil only one hierarchy of properties.\n * @param {object} entity - Entity as retrieved by the rest endpoint.\n */\nexport const getFlattenEntity = entity => ({\n [metaFields.KEY]: entity.key,\n [metaFields.MODEL]: entity.model,\n [metaFields.VERSION]: entity.version,\n ...flattenPaths(entity.paths)\n})\n\nexport const flattenPaths = (paths, currentPath = []) =>\n _reduce(\n paths,\n (acc, path, pathId) => {\n let subPaths = {}\n if (path.value) {\n if (Array.isArray(path.value)) {\n subPaths = path.value.reduce((acc, v) => {\n const flatten = flattenPaths(v.paths, [...currentPath, pathId])\n const combinedArrayVales = _reduce(flatten, (acc2, val, key) =>\n ({...acc2, [key]: [...(acc[key] || []), val]}), {})\n return {...acc, ...combinedArrayVales}\n }, {})\n } else {\n subPaths = flattenPaths(path.value.paths, [...currentPath, pathId])\n }\n }\n\n return {...acc, [[...currentPath, pathId].join('.')]: typeValueExtractor(path.type, path.value), ...subPaths}\n },\n {}\n )\n\n/**\n * Transforms a flatten entity back to a api compatible entity object. Only regards fields that are marked as dirty.\n * @param {object} flattenEntity - Entity that was prior transformed with 'getFlattenEntity'\n * @param {array} dirtyFields - List of dirty field names (paths)\n */\nexport const toEntity = (flattenEntity, dirtyFields) => {\n const ignoredPaths = fieldName => (Object.values(metaFields).includes(fieldName))\n || !(dirtyFields && dirtyFields.some(dirtyField => dirtyField.startsWith(fieldName)))\n\n const valueSimplifier = value => {\n if (Array.isArray(value)) {\n return value.map(v => valueSimplifier(v))\n }\n\n return _isObject(value) ? _pick(value, ['key', 'version', 'id']) : value\n }\n\n const paths = Object.keys(flattenEntity).reduce((acc, path) => {\n if (!ignoredPaths(path)) {\n const t = path.split('.').join('.paths.')\n return _set(acc, t, valueSimplifier(flattenEntity[path]))\n }\n return acc\n }, {})\n\n return {\n model: flattenEntity[metaFields.MODEL],\n key: flattenEntity[metaFields.KEY],\n version: flattenEntity[metaFields.VERSION],\n paths\n }\n}\n","const isDisplayableChild = child => !child.hidden\n\nconst getSortingAttributes = (column, sorting) => {\n const idx = sorting && sorting.findIndex(s => s.field === column.id)\n return idx >= 0\n ? {\n sortRank: idx + 1,\n order: sorting[idx].order\n } : null\n}\n\nconst rightAlignedTypes = ['counter', 'decimal', 'double', 'integer', 'latitude', 'long', 'longitude', 'moneyamount',\n 'percent', 'serial', 'sorting', 'version']\n\nconst isRightAligned = column =>\n column.children && column.children.length === 1 && rightAlignedTypes.includes(column.children[0].dataType)\n\n/**\n * Transforms nice form column definitions in a tocco-ui table compatible format.\n * @param {array} columns - columns from table form definition\n * @param {array} sorting - sorting array with field and order attributes\n * @param {function} cellRenderer - Function to return rendered cell given data and column definition\n */\nexport const getColumnDefinition = (columns, sorting, cellRenderer, ...args) => {\n if (!columns) {\n return []\n }\n return columns\n .filter(column => !column.hidden)\n .filter(column => column.children.filter(isDisplayableChild).length > 0)\n .map((c, idx) => (\n {\n idx: idx,\n id: c.id,\n label: c.label,\n sorting: {\n sortable: c.sortable,\n ...getSortingAttributes(c, sorting)\n },\n children: c.children.filter(isDisplayableChild),\n resizable: !c.widthFixed,\n rightAligned: isRightAligned(c),\n CellRenderer: ({rowData, column}) => column.children.map(child => cellRenderer(child, rowData, ...args))\n }\n ))\n}\n","import {getFlattenEntity, flattenPaths, toEntity, relationFieldTypes, relevantRelationAttributes} from './entities'\nimport {getDisplayRequest, getPathDisplayRequest} from './display'\nimport {getColumnDefinition} from './table'\n\nexport default {\n relationFieldTypes,\n relevantRelationAttributes,\n getFlattenEntity,\n flattenPaths,\n toEntity,\n getPathDisplayRequest,\n getDisplayRequest,\n getColumnDefinition\n}\n","import _get from 'lodash/get'\nimport _set from 'lodash/set'\n\nconst alreadyLoaded = (model, key, lazyData) => {\n return !!_get(lazyData, ['defaultDisplays', model, key], '')\n}\n\nconst alreadyInRequest = (model, key, request) => {\n return _get(request, [model], []).includes(key)\n}\n\n/**\n * Gets a request object to retrieve all the displays of the given paths within the entities.\n *\n * @param {array} entities - List of all entities.\n * @param {object} relationPaths - Field that need a display to be loaded\n * @param {object} lazyData - Optional object with the already loaded displays to shrink the request.\n */\nexport const getPathDisplayRequest = (entities, relationPaths, lazyData) => {\n const request = {}\n entities.forEach(entity => {\n relationPaths.forEach(field => {\n if (entity[field]) {\n const fieldValue = entity[field]\n const values = Array.isArray(fieldValue) ? fieldValue : [fieldValue]\n\n values.forEach(value => {\n const {model, key} = value\n\n if (!alreadyLoaded(model, key, lazyData) && !alreadyInRequest(model, key, request)) {\n _set(request, [model], [..._get(request, [model], []), key])\n }\n })\n }\n })\n })\n\n return request\n}\n\n/**\n * Gets a request object to retrieve all displays of the entities.\n *\n * @param {array} entities - List of all entities.\n */\nexport const getDisplayRequest = entities => (\n entities.reduce((acc, val) => ({\n ...acc,\n [val.model]: [...(acc[val.model] || []), val.key]\n }\n ), {})\n)\n","const ACTION_HANDLERS = {\n\n}\n\nconst initialState = {\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","export const ACTION_INVOKE = 'actions/ACTION_INVOKE'\nexport const ACTION_IN_PROGRESS = 'actions/ACTION_IN_PROGRESS'\nexport const ACTION_INVOKED = 'actions/ACTION_INVOKED'\n\nexport const actionInvoke = (definition, selection, parent) => ({\n type: ACTION_INVOKE,\n payload: {\n definition,\n selection,\n parent\n }\n})\n\nexport const actionInvoked = (definition, selection, response) => ({\n type: ACTION_INVOKED,\n payload: {\n definition,\n selection,\n response\n }\n})\n","export default Object.freeze({\n CUSTOM: 'custom',\n SIMPLE: 'simple',\n REPORT: 'report',\n DIVIDER: 'divider',\n LEGACY: 'legacy'\n})\n","import {put, call} from 'redux-saga/effects'\n\nimport errorLogging from '../../../errorLogging'\nimport rest from '../../../rest'\nimport notifier from '../../../notifier'\n\nexport default function* (definition, selection, parent, params) {\n const randomId = Math.random()\n const title = definition.progressMsg || 'client.component.actions.defaultProgressMessage'\n yield put(notifier.blockingInfo(randomId, title))\n const response = yield call(invokeRequest, definition, selection, parent, params)\n yield put(notifier.removeBlockingInfo(randomId))\n\n return {\n ...response,\n remoteEvents: [\n ...(response && response.success\n ? [{\n type: 'entity-update-event',\n payload: {\n parent,\n entities: [{entityName: selection.entityName}]\n }\n }]\n : []\n )\n ]\n }\n}\n\nexport function* invokeRequest(definition, selection, parent, params) {\n try {\n const response = yield call(rest.requestSaga, definition.endpoint, {\n method: 'POST',\n body: {\n entity: selection.entityName,\n selection,\n parent,\n ...params,\n formProperties: definition.properties\n },\n acceptedErrorCodes: ['VALIDATION_FAILED']\n })\n if (response.body && response.body.errorCode === 'VALIDATION_FAILED') {\n yield put(\n notifier.info('error', 'client.component.actions.validationError', validationErrorCompact(response.body.errors),\n 'exclamation')\n )\n } else {\n const success = response.body.success === true\n const type = success ? 'success' : 'warning'\n const title = response.body.message || 'client.component.actions.successDefault'\n const icon = success ? 'check' : 'exclamation'\n\n yield put(notifier.info(type, title, null, icon, 3000))\n }\n\n return response.body\n } catch (error) {\n if (!(error instanceof rest.ClientQuestionCancelledException)) {\n yield put(errorLogging.logError(\n 'client.common.unexpectedError',\n 'client.component.actions.errorText',\n error\n ))\n }\n }\n}\n\nexport const validationErrorCompact = 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 PropTypes from 'prop-types'\nimport _reduce from 'lodash/reduce'\n\nconst GROUP_GENERAL = 'generalSettings'\nconst GROUP_RECIPIENT = 'recipientSettings'\n\nexport const submitActions = Object.freeze({\n DISPLAY: 'display',\n DOWNLOAD: 'download'\n})\n\nexport const getGroupedValues = (settingsDefinition, values) => {\n const groupValues = name => (\n {\n [name]: (settingsDefinition[name] || []).reduce((result, field) => (\n {...result, [field.id]: values[field.id]}\n ), {})\n }\n )\n\n return {\n ...groupValues(GROUP_GENERAL),\n ...groupValues(GROUP_RECIPIENT)\n }\n}\n\nexport const transformValues = values => {\n const transform = v => {\n return v.key ? v.key : v\n }\n\n return _reduce(values, (result, value, key) => (\n {\n ...result,\n [key]: Array.isArray(value) ? value.map(transform) : transform(value)\n }\n ), {})\n}\n\nexport const getFormDataDefaults = settingsDefinition => {\n const extractDefaultValues = name =>\n (settingsDefinition[name] || []).reduce((result, field) => (\n {\n ...result,\n ...(field.options ? {[field.id]: field.options} : {})\n }\n ), {})\n\n return {\n relationEntities: {\n ...extractDefaultValues(GROUP_GENERAL),\n ...extractDefaultValues(GROUP_RECIPIENT)\n }\n }\n}\n\nexport const getFormDefinition = (settingsDefinition, intl) => {\n const msg = id => intl.formatMessage({id})\n\n const extractFields = name =>\n (settingsDefinition[name] || []).map(field => (\n {\n children: [\n {\n componentType: 'field',\n dataType: field.dataType,\n defaultValue: field.defaultValue,\n id: field.id,\n label: field.label || field.description,\n path: field.id,\n ...(field.targetEntity ? {targetEntity: field.targetEntity} : {}),\n ...(field.validation ? {validation: field.validation} : {})\n }\n ],\n componentType: 'field-set',\n hidden: false,\n id: field.id,\n label: field.label || field.description,\n readonly: field.disabled,\n scopes: []\n }\n ))\n\n return {\n componentType: 'form',\n label: null,\n modelid: 'Bill_report_settings',\n readonly: false,\n children: [\n {\n componentType: 'layout',\n id: 'generalSettings',\n label: msg('client.common.report.generalSettings'),\n layoutType: 'vertical-box',\n children: extractFields(GROUP_GENERAL)\n },\n {\n componentType: 'layout',\n id: 'recipientSettings',\n label: msg('client.common.report.recipientSettings'),\n layoutType: 'vertical-box',\n children: extractFields(GROUP_RECIPIENT)\n }\n ]\n }\n}\n\nexport const reportSettingsDefinitionPropType = PropTypes.shape({\n customSettings: PropTypes.shape({\n form: PropTypes.object,\n entity: PropTypes.object\n }),\n generalSettings: PropTypes.array,\n recipient: PropTypes.array,\n description: PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n})\n","import {connect} from 'react-redux'\n\nimport actionEmitter from '../../actionEmitter'\n\nconst mapActionCreators = {\n emitAction: action => actionEmitter.dispatchEmittedAction(action)\n}\n\nexport default connect(null, mapActionCreators)\n","import styled from 'styled-components'\n\nconst StyledReportSettings = styled.div`\n && {\n > div:first-of-type {\n margin-bottom: 10px;\n }\n }\n`\n\nexport default StyledReportSettings\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {Button} from 'tocco-ui'\nimport {FormattedMessage, injectIntl, intlShape} from 'react-intl'\nimport {download} from 'tocco-util'\n\nimport simpleFormConnector from '../containers/simpleFormConnector'\nimport {\n getFormDataDefaults,\n getFormDefinition,\n getGroupedValues,\n reportSettingsDefinitionPropType,\n transformValues,\n submitActions\n} from '../utils/report'\nimport StyledReportSettings from './StyledReportSettings'\n\nexport class ReportSettings extends React.Component {\n constructor(props) {\n super(props)\n this.customSettingsDefined\n = props.settingsDefinition.customSettings && props.settingsDefinition.customSettings.entity\n this.state = {\n valid: false,\n customSettingsValid: !this.customSettingsDefined\n }\n\n this.SimpleFormContainer = simpleFormConnector(props.formApp)\n }\n\n handleSettingsChange = (values, valid) => {\n this.setState({...this.state, values, valid})\n }\n\n handleCustomSettingsChange = (customSettings, customSettingsValid) => {\n this.setState({...this.state, customSettings, customSettingsValid})\n }\n\n handleButtonClick = action => () => {\n const groupedValues = {\n ...getGroupedValues(this.props.settingsDefinition, transformValues(this.state.values)),\n customSettings: this.state.customSettings\n }\n\n this.props.onSubmit(action, groupedValues)\n }\n\n render() {\n const {intl, settingsDefinition} = this.props\n return (\n <StyledReportSettings>\n <this.SimpleFormContainer\n listApp={this.props.listApp}\n form={getFormDefinition(settingsDefinition, intl)}\n noButtons\n onChange={({values, valid}) => { this.handleSettingsChange(values, valid) }}\n formData={getFormDataDefaults(settingsDefinition)}\n />\n {this.customSettingsDefined\n && <this.SimpleFormContainer\n listApp={this.props.listApp}\n form={settingsDefinition.customSettings.form.form}\n noButtons\n onChange={({values, valid}) => { this.handleCustomSettingsChange(values, valid) }}\n />\n }\n <div className=\"button-wrapper\">\n {download.downloadSupportedByBrowser()\n && <Button\n ink=\"primary\"\n disabled={!this.state.customSettingsValid || !this.state.valid}\n icon=\"download\"\n onClick={this.handleButtonClick(submitActions.DOWNLOAD)}\n look=\"raised\"\n >\n <FormattedMessage id=\"client.common.report.download\"/>\n </Button>\n }\n <Button\n disabled={!this.state.customSettingsValid || !this.state.valid}\n icon=\"file\"\n onClick={this.handleButtonClick(submitActions.DISPLAY)}\n look=\"raised\"\n >\n <FormattedMessage id=\"client.common.report.display\"/>\n </Button>\n </div>\n </StyledReportSettings>\n )\n }\n}\n\nReportSettings.propTypes = {\n intl: intlShape.isRequired,\n onSubmit: PropTypes.func.isRequired,\n listApp: PropTypes.func.isRequired,\n formApp: PropTypes.func.isRequired,\n settingsDefinition: reportSettingsDefinitionPropType.isRequired\n}\n\nexport default injectIntl(ReportSettings)\n","import React from 'react'\nimport {channel} from 'redux-saga'\nimport uuid from 'uuid/v4'\nimport {saga as sagaUtil, download} from 'tocco-util'\nimport {call, put, take} from 'redux-saga/effects'\n\nimport {submitActions} from '../../utils/report'\nimport rest from '../../../rest'\nimport notifier from '../../../notifier'\nimport ReportSettings from '../../components/ReportSettings'\n\nexport default function* (actionDefinition, selection, parent, params, config) {\n const answerChannel = yield call(channel)\n const settingsModalId = yield call(displayReportSettings, actionDefinition, selection, answerChannel, config)\n yield call(awaitSettingsSubmit, actionDefinition, answerChannel, settingsModalId, selection)\n}\n\nexport function* displayReportSettings(actionDefinition, selection, answerChannel, config) {\n const options = {\n queryParams: {\n model: selection.entityName,\n ...(selection.mode === 'ID' ? {keys: selection.ids.join(',')} : {})\n }\n }\n\n const resource = `report/${actionDefinition.reportId}/settings`\n const {body: settingsDefinition} = yield call(rest.requestSaga, resource, options)\n const onSubmit = (submitAction, formValues) => answerChannel.put({submitAction, formValues})\n const settingsModalId = yield call(uuid)\n\n yield put(notifier.modalComponent(\n settingsModalId,\n settingsDefinition.description.name,\n null,\n () => (\n <ReportSettings\n listApp={config.listApp}\n formApp={config.formApp}\n onSubmit={onSubmit}\n settingsDefinition={settingsDefinition}\n />\n ),\n true\n ))\n\n return settingsModalId\n}\n\nexport function* awaitSettingsSubmit(definition, answerChannel, settingsModalId, selection) {\n while (true) {\n const {submitAction, formValues} = yield take(answerChannel)\n const body = {\n entityModel: selection.entityName,\n selection,\n ...formValues\n }\n\n const requestOptions = {\n method: 'POST',\n body,\n acceptedStatusCodes: [400]\n }\n\n const resource = `report/${definition.reportId}/generations`\n const generationsResponse = yield call(rest.requestSaga, resource, requestOptions)\n\n if (generationsResponse.status === 400) {\n yield call(handleFailedGenerationsRequest, settingsModalId, generationsResponse)\n } else {\n yield call(handleReportGenerations, settingsModalId, generationsResponse, submitAction)\n }\n }\n}\n\nexport function* handleReportGenerations(settingsModalId, generationsResponse, submitAction) {\n yield put(notifier.removeModalComponent(settingsModalId))\n const pollingUrl = generationsResponse.headers.get('Location')\n const blockingInfoId = yield call(uuid)\n yield put(notifier.blockingInfo(blockingInfoId, 'client.common.report.inProgress', null, 'file-pdf'))\n\n const completed = yield call(sagaUtil.checkStatusLoop, rest.requestSaga, pollingUrl, 'in_progress')\n yield put(notifier.removeBlockingInfo(blockingInfoId))\n if (completed.body.status === 'completed') {\n yield call(handleSuccessfulReport, completed, submitAction)\n } else {\n yield call(handleFailedReport)\n }\n}\n\nexport const getDownloadUrl = binaryLink =>\n download.addParameterToURL(binaryLink, 'download', true)\n\nexport function* handleSuccessfulReport(completed, submitAction) {\n const outputJobId = completed.body.outputJobId\n const outputJob = yield call(rest.fetchEntity, 'Output_job', outputJobId, {paths: ['document']})\n const {fileName, binaryLink} = outputJob.paths.document.value\n\n if (submitAction === submitActions.DOWNLOAD) {\n const downloadLink = yield call(getDownloadUrl, binaryLink)\n yield call(download.downloadUrl, downloadLink, fileName)\n } else if (submitAction === submitActions.DISPLAY) {\n yield call(download.openUrl, binaryLink)\n }\n\n yield put(notifier.info('success', 'client.common.report.successful', null, null, 3000))\n}\n\nexport function* handleFailedReport() {\n yield put(notifier.info('error', 'client.common.report.failed', null))\n}\n\nexport function* handleFailedGenerationsRequest(modalId, generationsResponse) {\n const title = 'client.common.report.failedGenerationTitle'\n const message = generationsResponse.body.message || 'client.common.report.failedGenerationMessage'\n yield put(notifier.info('warning', title, message))\n}\n","import {call, put, take} from 'redux-saga/effects'\nimport React from 'react'\nimport {consoleLogger} from 'tocco-util'\nimport {channel} from 'redux-saga'\n\nimport notifier from '../../../notifier'\n\nexport default function* (definition, selection, parent, params, config) {\n if (definition.appId) {\n if (definition.fullscreen) {\n if (config.customActions && config.customActions.fullscreen) {\n yield call(handleFullScreenActions, {definition, selection, config})\n } else {\n yield call(consoleLogger.logError, 'Unable to render custom action: No fullscreen handler provided')\n }\n } else {\n if (config.appComponent) {\n return yield call(handleCustomActionModal, {definition, config, selection})\n } else {\n yield call(consoleLogger.logError, 'Unable to render custom action: No appComponent provided')\n }\n }\n } else {\n const handler = config && config.customActions && config.customActions[definition.id]\n if (handler) {\n yield call(handleAppActionsFallback, {definition, selection, parent, params, config, handler})\n } else {\n yield call(consoleLogger.logError, `Unable to load custom action with id ${definition.id}`)\n }\n }\n}\n\nconst actionStatus = {\n OK: 'ok',\n NOT_OK: 'not_ok',\n CANCEL: 'cancel'\n}\n\nexport function* handleCustomActionModal({definition, selection, config}) {\n const answerChannel = yield call(channel)\n\n const ActionComponent = config.appComponent\n yield put(notifier.modalComponent(\n `action-${definition.appId}`,\n `client.actions.${definition.appId}.title`,\n null,\n ({close}) => {\n const onSuccess = ({message, remoteEvents}) => {\n close()\n answerChannel.put({status: actionStatus.OK, message, remoteEvents})\n }\n\n const onError = ({message}) => {\n close()\n answerChannel.put({status: actionStatus.NOT_OK, message})\n }\n\n const onCancel = () => {\n close()\n answerChannel.put({status: actionStatus.CANCEL})\n }\n\n return <ActionComponent\n appId={definition.appId}\n actionProperties={definition.properties}\n selection={selection}\n onSuccess={onSuccess}\n onError={onError}\n onCancel={onCancel}\n />\n },\n true\n ))\n const response = yield take(answerChannel)\n if (response.status === actionStatus.CANCEL) {\n return null\n }\n\n const success = response.status === actionStatus.OK\n const type = success ? 'success' : 'warning'\n const icon = success ? 'check' : 'exclamation'\n const title = response.message || 'client.component.actions.successDefault'\n\n yield put(notifier.info(type, title, null, icon, 3000))\n return {success: success, remoteEvents: response.remoteEvents}\n}\n\nexport function* handleFullScreenActions({definition, selection, config}) {\n yield call(config.customActions.fullscreen, definition, selection)\n}\n\nexport function* handleAppActionsFallback({definition, selection, config, parent, params, handler}) {\n yield call(handler, definition, selection, parent, params, config)\n}\n","import _isPlainObject from 'lodash/isPlainObject'\nimport {channel} from 'redux-saga'\nimport {call, all, put, spawn, take, select} from 'redux-saga/effects'\n\nimport notifier from '../../../notifier'\nimport remoteEvents from '../../../remoteEvents'\n\nexport const loadScript = src => new Promise((resolve, reject) => {\n const s = document.createElement('script')\n s.src = src\n s.onload = resolve\n s.onerror = reject\n document.head.appendChild(s)\n})\n\nexport const loadCss = src => new Promise((resolve, reject) => {\n const head = document.getElementsByTagName('head')[0]\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.type = 'text/css'\n link.href = src\n link.media = 'all'\n link.onload = resolve\n link.onerror = reject\n head.appendChild(link)\n})\n\nexport function* loadSequentially(sources) {\n const currentEnv = window.legacyActionEnv || 'new'\n for (const source of sources) {\n if (source.envs.includes(currentEnv)) {\n yield call(source.handler, source.src)\n }\n }\n}\n\nexport const sources = [\n {src: '/nice2/javascript/lang.release.js', handler: loadScript, envs: ['new']},\n {src: '/nice2/javascript/nice2-ext-newclient-actions.release.js', handler: loadScript, envs: ['new']},\n {src: '/nice2/javascript/nice2-admin.release.js', handler: loadScript, envs: ['new']},\n {\n src: '/nice2/javascript/nice2-newclient-actions-public.release.js',\n handler: loadScript,\n envs: ['legacy-public']\n },\n {\n src: '/nice2/javascript/nice2-newclient-actions-setup.release.js',\n handler: loadScript,\n envs: ['legacy-public', 'legacy-admin', 'new']\n },\n {src: '/nice2/dwr-all.js', handler: loadScript, envs: ['new']},\n {src: '/js/ext-extensions/ckeditor/ckeditor/ckeditor.js', handler: loadScript, envs: ['new']},\n {src: '/css/themes/blue-medium.css', handler: loadCss, envs: ['new']},\n {src: '/css/nice2-admin.css', handler: loadCss, envs: ['new']},\n {src: '/css/nice2-new-client-legacy-actions.css', handler: loadCss, envs: ['new']}\n]\n\nexport const channelFeedingCallback = channel => arg => {\n channel.put(arg)\n}\n\nexport function* readRemoteEvents(remoteEventsChannel) {\n while (true) {\n const event = yield take(remoteEventsChannel)\n const action = remoteEvents.remoteEvent(event)\n yield put(action)\n }\n}\n\nexport function* registerRemoteEventsListener() {\n const dataRegistry = yield call([window.app, window.app.getDataRegistry])\n if (dataRegistry.setNewClientCallback) {\n const remoteEventsChannel = yield call(channel)\n const callback = yield call(channelFeedingCallback, remoteEventsChannel)\n yield call([dataRegistry, dataRegistry.setNewClientCallback], callback)\n yield spawn(readRemoteEvents, remoteEventsChannel)\n }\n}\n\nexport function* handleNotification(notification) {\n const message = notification.message.replace(/&nbsp;/g, ' ')\n\n let action\n\n switch (notification.level) {\n case 'ERROR':\n action = notifier.info('error', null, message)\n break\n case 'INFO':\n action = notifier.info('info', null, message)\n break\n default:\n throw new Error(`Unsupported notification level: ${notification.level}`)\n }\n\n if (action) {\n yield put(action)\n }\n}\n\nexport function* readNotifications(notificationsChannel) {\n while (true) {\n const notification = yield take(notificationsChannel)\n yield call(handleNotification, notification)\n }\n}\n\nexport function* registerNotificationsListener() {\n const gui = yield call([window.app, window.app.getGui])\n const notifier = yield call([gui, gui.getNotifier])\n if (notifier.setNewClientCallback) {\n const notificationsChannel = yield call(channel)\n const callback = yield call(channelFeedingCallback, notificationsChannel)\n yield call([notifier, notifier.setNewClientCallback], callback)\n yield spawn(readNotifications, notificationsChannel)\n }\n}\n\nexport function* initLegacyActionsEnv() {\n if (window.legacyActionsEnvInitialized !== true) {\n yield call(loadSequentially, sources)\n yield call(window.setUpLegacyActionsEnv)\n }\n yield call(registerRemoteEventsListener)\n yield call(registerNotificationsListener)\n}\n\nexport const listSelector = state => state.list\n\nexport const entityListSelector = state => state.entityList\nexport const entityDetailSelector = state => state.entityDetail\n\nexport const getOrderByString = sortingArray => sortingArray && sortingArray.length > 0\n ? sortingArray.map(item => `${item.field} ${item.order}`).join(', ')\n : null\n\nexport const getManualQuery = (selection, listState) => ({\n ...new window.nice2.netui.ManualQuery(),\n entityName: selection.entityName,\n queryWhere: selection.query.where,\n queryOrderBy: getOrderByString(listState.sorting)\n})\n\nexport const getListFormId = listState => ({\n ...new window.form.FormIdentifier(),\n scope: 'list',\n formName: listState.formDefinition.id\n})\n\nexport function* getSelection(selection) {\n const legacySelection = {\n entityName: selection.entityName\n }\n\n if (selection.type === 'ID') {\n legacySelection.selectedEntities = selection.ids\n legacySelection.selectionType = 'SELECTION'\n } else if (selection.type === 'QUERY') {\n const listState = yield select(listSelector)\n\n legacySelection.selectionType = 'NEW_CLIENT_QUERY'\n legacySelection.manualQuery = getManualQuery(selection, listState)\n legacySelection.listForm = getListFormId(listState)\n legacySelection.searchFilters = selection.query.filter\n } else {\n throw new Error(`Unsupported selection type: ${selection.type}`)\n }\n\n return legacySelection\n}\n\nexport function* getScope() {\n const list = yield select(entityListSelector)\n const detail = yield select(entityDetailSelector)\n\n if (list && detail) {\n throw new Error('Unable to get form scope. Unexpected state: entityList and entityDetail exist')\n }\n\n if (list) {\n return 'list'\n }\n\n if (detail) {\n if (detail.mode === 'update') {\n return 'detail'\n } else if (detail.mode === 'create') {\n return 'create'\n } else {\n throw new Error(`Unable to get form scope. Unexpected detail mode: ${detail.mode}`)\n }\n }\n\n throw new Error('Unable to get form scope. Expected to find either entityList or entityDetail in state')\n}\n\nexport default function* (definition, selection, parent, params, config) {\n yield call(initLegacyActionsEnv)\n\n const actionDefinition = new window.nice2.netui.actions.model.ClientActionDefinition(definition.path, definition.id)\n actionDefinition.setEnabled(!definition.readOnly)\n if (_isPlainObject(definition.properties)) {\n const setPropertyEffects = Object.entries(definition.properties)\n .map(([key, value]) => call([actionDefinition, actionDefinition.setProperty], key, value))\n yield all(setPropertyEffects)\n }\n\n const entityExplorer = new window.nice2.modules.NewClientLegacyActionsModule({\n entityName: selection.entityName,\n formName: selection.entityName\n })\n entityExplorer.init()\n\n const ctx = new window.nice2.modules.entityexplorer.EntityExplorerActionContext(entityExplorer, null)\n if (selection.type === 'ID' && selection.ids.length === 1) {\n ctx.getRecord = () => ({id: selection.ids[0]})\n }\n\n const situation = {\n entityName: selection.entityName,\n scope: definition.scope || (yield call(getScope))\n }\n\n const action = window.NetuiActionRegistry.newActionFromDefinition(actionDefinition, situation, ctx)\n\n const legacySelection = yield call(getSelection, selection)\n\n action.getSelectionNumber = () => selection.type === 'ID' ? selection.ids.length : 0\n action.getSelection = () => legacySelection\n\n action.perform()\n}\n","import actionTypes from '../../actionTypes'\nimport handleSimpleAction from './simpleAction'\nimport handleReportAction from './report'\nimport handleCustomAction from './customAction'\nimport handleLegacyAction from './legacyAction'\n\nexport default {\n [actionTypes.SIMPLE]: handleSimpleAction,\n [actionTypes.REPORT]: handleReportAction,\n [actionTypes.CUSTOM]: handleCustomAction,\n [actionTypes.LEGACY]: handleLegacyAction\n}\n","export default function* preCheckHandler(preparationResponse, params, definition, selection, config) {\n if (preparationResponse.preCheck && preparationResponse.preCheck.success === false) {\n return {\n abort: true,\n abortMessage: preparationResponse.preCheck.message || 'client.component.actions.errorText'\n }\n }\n\n return {\n abort: false\n }\n}\n","import {call, put, take} from 'redux-saga/effects'\nimport {channel} from 'redux-saga'\nimport {FormattedMessage} from 'react-intl'\nimport React from 'react'\n\nimport notifier from '../../../notifier'\n\nexport default function* confirmHandler(preparationResponse, params, definition, selection, config) {\n if (preparationResponse.preCheck && preparationResponse.preCheck.confirmMessage) {\n const confirmResponse = yield call(promptConfirm, preparationResponse.preCheck.confirmMessage)\n return {abort: !confirmResponse}\n }\n\n return {abort: false}\n}\n\nexport function* promptConfirm(message) {\n const answerChannel = yield call(channel)\n const onYes = () => answerChannel.put(true)\n const onCancel = () => answerChannel.put(false)\n\n yield put(\n notifier.confirm(\n 'client.component.actions.confirmTitle',\n <FormattedMessage id={message}/>,\n <FormattedMessage id=\"client.common.yes\"/>,\n <FormattedMessage id=\"client.common.cancel\"/>,\n onYes,\n onCancel\n )\n )\n return yield take(answerChannel)\n}\n","import {call, put, take} from 'redux-saga/effects'\nimport {channel} from 'redux-saga'\nimport React from 'react'\n\nimport simpleFormConnector from '../../containers/simpleFormConnector'\nimport notifier from '../../../notifier'\n\nexport default function* initialFormHandler(preparationResponse, params, definition, selection, config) {\n if (preparationResponse.initialFormValues) {\n const formValues = yield call(handleInitialForm, preparationResponse.initialFormValues, config)\n\n return {\n abort: formValues === null,\n params: {formData: formValues}\n }\n }\n return {\n abort: false\n }\n}\n\nexport const formValues = formValues => ({formValues})\n\nexport function* handleInitialForm({formDefinition, defaultValues, formTitle, formMessage}, config) {\n const answerChannel = yield call(channel)\n\n const id = new Date().valueOf()\n const onSend = ({values}) => answerChannel.put(formValues(values))\n const onCancel = () => answerChannel.put(formValues(null))\n const SimpleFormContainer = simpleFormConnector(config.formApp)\n yield put(notifier.modalComponent(id, formTitle, formMessage, () =>\n <SimpleFormContainer\n form={formDefinition.form}\n listApp={config.listApp}\n onSubmit={onSend}\n onCancel={onCancel}\n defaultValues={defaultValues}\n />\n ))\n\n const response = yield take(answerChannel)\n yield put(notifier.removeModalComponent(id))\n return response.formValues ? {model: formDefinition.model, paths: response.formValues} : null\n}\n","import {call} from 'redux-saga/effects'\n\nimport rest from '../../../rest'\nimport preCheckHandler from './preCheckHandler'\nimport confirmHandler from './confirmHandler'\nimport initialFormHandler from './initialFormHandler'\n\nexport function* doRequest(definition, selection, parent) {\n const response = yield call(rest.requestSaga, definition.endpoint + '/check', {\n method: 'POST',\n body: {\n selection,\n parent\n }\n })\n return response.body\n}\n\nexport const getHandlers = () => [preCheckHandler, confirmHandler, initialFormHandler]\n\nexport default function* run(definition, selection, parent, config) {\n let abort = false\n let abortMessage = null\n let params = {}\n\n if (definition.endpoint) {\n const preparationResponse = yield call(doRequest, definition, selection, parent)\n const handlers = yield call(getHandlers)\n\n let i = 0\n\n while (!abort && handlers[i]) {\n const handler = handlers[i]\n const handlerResponse = yield call(handler, preparationResponse, params, definition, selection, config)\n\n abort = handlerResponse.abort\n params = {...params, ...handlerResponse.params}\n if (handlerResponse.abortMessage) {\n abortMessage = handlerResponse.abortMessage\n }\n\n i++\n }\n }\n\n return {abort, abortMessage, params}\n}\n","import prepare from './prepare'\n\nexport default prepare\n","import {takeEvery, all, call, put} from 'redux-saga/effects'\n\nimport * as actions from './actions'\nimport actionHandlers from './actionHandlers'\nimport remoteEvents from '../../remoteEvents'\nimport prepare from './prepare'\nimport notifier from '../../notifier'\n\nexport default function* sagas(config) {\n yield all([\n takeEvery(actions.ACTION_INVOKE, invokeAction, config)\n ])\n}\n\nexport function* invokeAction(config, {payload}) {\n const {definition, selection, parent} = payload\n\n const {abort, abortMessage, params} = yield call(prepare, definition, selection, parent, config)\n\n if (!abort) {\n const actionHandler = actionHandlers[definition.actionType]\n const response = yield call(actionHandler, definition, selection, parent, params, config)\n\n if (response && response.remoteEvents) {\n yield all(response.remoteEvents.map(remoteEvent => put(remoteEvents.remoteEvent(remoteEvent))))\n }\n\n if (response && response.success) {\n yield put(actions.actionInvoked(definition, selection, response))\n }\n } else if (abortMessage) {\n yield put(notifier.info('INFO', abortMessage))\n }\n}\n","import {saga as sagasUtil, reducer as reducerUtil} from 'tocco-util'\n\nimport errorLoging from '../errorLogging'\nimport reducer from './modules/reducer'\nimport sagas from './modules/sagas'\n\nexport default (store, config) => {\n reducerUtil.injectReducers(store, {actions: reducer})\n store.sagaMiddleware.run(sagasUtil.autoRestartSaga(sagas, config, errorLoging.logError))\n}\n","export const isValidSelection = (selectedCount, {minSelection, maxSelection}) =>\n !(notEnough(selectedCount, minSelection) || tooMany(selectedCount, maxSelection))\n\nexport const selectionText = (selectedCount, {minSelection, maxSelection}, intl) => {\n if (notEnough(selectedCount, minSelection)) {\n return intl.formatMessage({id: 'client.component.actions.notEnoughSelected'}, {minSelection})\n }\n\n if (tooMany(selectedCount, maxSelection)) {\n return intl.formatMessage({id: 'client.component.actions.tooManySelected'}, {maxSelection})\n }\n\n return null\n}\n\nconst notEnough = (selectedCount, minSelection) => minSelection && selectedCount < minSelection\nconst tooMany = (selectedCount, maxSelection) => maxSelection && selectedCount > maxSelection\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {injectIntl, intlShape} from 'react-intl'\nimport {ButtonMenu, MenuItem, Icon} from 'tocco-ui'\n\nimport {isValidSelection, selectionText} from './selectionHelper'\n\nconst getChildMenuItems = input => {\n const {onClick, definition, selectedCount, intl} = input\n const validSelection = isValidSelection(selectedCount, definition)\n const disabled = definition.readonly === true || !validSelection\n const title = selectionText(selectedCount, definition, intl)\n const isActionGroup = definition.componentType === 'action-group'\n return <MenuItem\n {...(!isActionGroup && !disabled && {onClick: () => onClick(definition)})}\n disabled={disabled}\n title={title}\n key={`MenuItem-${definition.id}`}\n >\n <span>{definition.icon && <Icon icon={definition.icon}/>} {definition.label}</span>\n {\n definition.componentType === 'action-group'\n && definition.children.map(child => getChildMenuItems({...input, definition: child}))\n }\n </MenuItem>\n}\n\nconst ActionGroup = props => {\n const {definition, onClick} = props\n const hasDefaultAction = (definition.defaultAction && Object.keys(definition.defaultAction).length > 0)\n\n const label = hasDefaultAction ? definition.defaultAction.label : definition.label\n const onClickHandler = hasDefaultAction ? () => { onClick(definition.defaultAction) } : null\n const actionId = hasDefaultAction ? definition.defaultAction.id : definition.id\n return <ButtonMenu\n buttonProps={{look: 'raised'}}\n label={label}\n data-cy={`action-${actionId}`}\n onClick={onClickHandler}>\n {\n definition.children.map((childDefinition, idx) => getChildMenuItems({...props, definition: childDefinition}))\n }\n </ButtonMenu>\n}\n\nActionGroup.propTypes = {\n intl: intlShape.isRequired,\n definition: PropTypes.object.isRequired,\n onClick: PropTypes.func.isRequired,\n selectedCount: PropTypes.number,\n disabled: PropTypes.bool\n}\n\nexport default injectIntl(ActionGroup)\n","\nimport PropTypes from 'prop-types'\nimport React from 'react'\nimport {Button} from 'tocco-ui'\nimport {injectIntl, intlShape} from 'react-intl'\n\nimport {selectionText, isValidSelection} from './selectionHelper'\n\nexport const SingleAction = ({definition, onClick, selectedCount, disabled, intl}) => {\n const validSelection = isValidSelection(selectedCount, definition)\n const title = selectionText(selectedCount, definition, intl)\n return (\n <Button\n data-cy={`action-${definition.id}`}\n look=\"raised\"\n onClick={e => {\n onClick(definition)\n e.stopPropagation()\n }}\n icon={definition.icon}\n {...definition.label && definition.useLabel === 'NO' ? {title: definition.label} : {label: definition.label}}\n {...(definition.readonly === true || !validSelection || disabled) && {disabled: true}}\n title={title}\n />\n )\n}\n\nSingleAction.propTypes = {\n intl: intlShape.isRequired,\n definition: PropTypes.object.isRequired,\n onClick: PropTypes.func,\n selectedCount: PropTypes.number,\n disabled: PropTypes.bool\n}\n\nexport default injectIntl(SingleAction)\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport _omit from 'lodash/omit'\n\nimport componentTypes from '../actionComponentTypes'\nimport {modeFitsScopes} from '../actions'\nimport ActionGroup from './ActionGroup'\nimport SingleAction from './SingleAction'\n\nconst ActionVisual = ({definition, onClick, selection, parent, mode, callback, disabled, customActions}) => {\n if (customActions && customActions[definition.id]) {\n return customActions[definition.id]()\n }\n\n if (!modeFitsScopes(mode, definition.scopes)) return null\n\n const ActionType = definition.componentType === componentTypes.ACTION_GROUP ? ActionGroup : SingleAction\n\n return (\n <ActionType\n definition={definition}\n onClick={definition => {\n onClick(_omit(definition, ['label']), selection, parent, callback)\n }}\n selectedCount={selection.count}\n disabled={disabled}\n />\n )\n}\n\nActionVisual.propTypes = {\n definition: PropTypes.shape({\n id: PropTypes.string,\n type: PropTypes.string,\n useLabel: PropTypes.string,\n icon: PropTypes.string,\n label: PropTypes.string,\n config: PropTypes.object,\n scopes: PropTypes.arrayOf(PropTypes.string),\n componentType: PropTypes.string,\n children: PropTypes.Array\n }).isRequired,\n selection: PropTypes.shape({\n entityName: PropTypes.string.isRequired,\n ids: (props, propName, componentName) => {\n if (props.selection && props.selection.type === '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 === 'QUERY' && !props.selection[propName]) {\n return new Error(`Selection.query prop not defined. Component: ${componentName}'.`)\n }\n },\n type: PropTypes.oneOf(['ID', 'QUERY']).isRequired,\n count: PropTypes.number\n }).isRequired,\n onClick: PropTypes.func.isRequired,\n callback: PropTypes.func,\n mode: PropTypes.string,\n parent: PropTypes.shape({\n key: PropTypes.string.isRequired,\n model: PropTypes.string.isRequired,\n reverseRelationName: PropTypes.string\n }),\n disabled: PropTypes.bool,\n customActions: PropTypes.objectOf(PropTypes.func)\n}\n\nconst Action = props => {\n if (props.definition.componentType === componentTypes.ACTION_BAR) {\n return props.definition.children.map(child => (\n <ActionVisual key={`action-${props.definition.id}-${child.id}`} {...props} definition={child}/>\n )\n )\n }\n\n return <ActionVisual {...props}/>\n}\n\nAction.propTypes = {\n definition: PropTypes.shape({\n id: PropTypes.string,\n componentType: PropTypes.string,\n children: PropTypes.Array\n }).isRequired\n}\n\nexport default Action\n","import {connect} from 'react-redux'\n\nimport {actionInvoke} from '../modules/actions'\nimport Action from '../components/Action'\n\nconst mapActionCreators = {\n onClick: actionInvoke\n}\n\nexport default connect(null, mapActionCreators)(Action)\n","import {isAction} from './actions'\nimport addToStore from './addToStore'\nimport * as actions from './modules/actions'\nimport Action from './containers/ActionContainer'\nimport {getSingleEntitySelection} from './utils/selection'\n\nexport default {\n isAction,\n Action,\n addToStore,\n actions,\n getSingleEntitySelection\n}\n","export const getSingleEntitySelection = (entityName, key) => ({\n entityName,\n type: 'ID',\n ids: [key],\n count: 1\n})\n","export const goBack = (url, amount = 1) => {\n let normalizedUrl = url.replace(/\\/$/, '')\n\n for (let i = 0; i < amount; i++) {\n normalizedUrl = normalizedUrl.substring(0, normalizedUrl.lastIndexOf('/'))\n }\n\n return normalizedUrl\n}\n","export const SET_INITIALIZED = 'entityList/SET_INITIALIZED'\nexport const INITIALIZE = 'entityList/INITIALIZE'\nexport const SET_SEARCH_FORM_TYPE = 'entityList/SET_SEARCH_FORM_TYPE'\nexport const SET_ENTITY_NAME = 'entityList/SET_ENTITY_NAME'\nexport const SET_ENTITY_MODEL = 'entityList/SET_ENTITY_MODEL'\nexport const SET_PARENT = 'entityList/SET_PARENT'\nexport const SET_SEARCH_FORM_POSITION = 'entityList/SET_SEARCH_FORM_POSITION'\nexport const SET_FORM_NAME = 'entityList/SET_FORM_NAME'\r\n\nexport const setInitialized = (initialized = true) => ({\n type: SET_INITIALIZED,\n payload: {\n initialized\n }\n})\n\nexport const initialize = () => ({\n type: INITIALIZE\n})\n\nexport const setEntityModel = entityModel => ({\n type: SET_ENTITY_MODEL,\n payload: {\n entityModel\n }\n})\n\nexport const setSearchFormType = searchFormType => ({\n type: SET_SEARCH_FORM_TYPE,\n payload: {\n searchFormType\n }\n})\n\nexport const setEntityName = entityName => ({\n type: SET_ENTITY_NAME,\n payload: {\n entityName\n }\n})\n\nexport const setParent = parent => ({\n type: SET_PARENT,\n payload: {\n parent\n }\n})\n\nexport const setSearchFormPosition = searchFormPosition => ({\n type: SET_SEARCH_FORM_POSITION,\n payload: {\n searchFormPosition\n }\n})\n\nexport const setFormName = formName => ({\n type: SET_FORM_NAME,\n payload: {\n formName\n }\n})\n","import PropTypes from 'prop-types'\nconst searchFormTypes = {\n NONE: 'none',\n SIMPLE: 'simple',\n BASIC: 'basic',\n ADMIN: 'admin'\n}\n\nexport const searchFormTypePropTypes = PropTypes.oneOf(Object.values(searchFormTypes))\n\nexport default searchFormTypes\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\nimport searchFormTypes from '../../util/searchFormTypes'\n\nconst setSearchFormType = (state, {payload}) => {\n const {searchFormType: newSearchFormType} = payload\n\n const searchFormType = Object.values(searchFormTypes).find(enumV => enumV === newSearchFormType)\n || searchFormTypes.BASIC\n\n return {...state, searchFormType}\n}\n\nconst ACTION_HANDLERS = {\n [actions.SET_INITIALIZED]: reducerUtil.singleTransferReducer('initialized'),\n [actions.SET_ENTITY_NAME]: reducerUtil.singleTransferReducer('entityName'),\n [actions.SET_FORM_NAME]: reducerUtil.singleTransferReducer('formName'),\n [actions.SET_ENTITY_MODEL]: reducerUtil.singleTransferReducer('entityModel'),\n [actions.SET_SEARCH_FORM_TYPE]: setSearchFormType,\n [actions.SET_SEARCH_FORM_POSITION]: reducerUtil.singleTransferReducer('searchFormPosition'),\n [actions.SET_PARENT]: reducerUtil.singleTransferReducer('parent')\n}\n\nconst initialState = {\n initialized: false,\n entityName: '',\n formName: '',\n entityModel: {},\n searchFormType: searchFormTypes.BASIC,\n searchFormPosition: 'top',\n parent: null\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 _isEmpty from 'lodash/isEmpty'\nimport {put, select, call, takeLatest, all} from 'redux-saga/effects'\nimport {rest} from 'tocco-app-extensions'\n\nimport * as actions from './actions'\n\nexport const entityListSelector = state => state.entityList\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.INITIALIZE, initialize)\n ])\n}\n\nexport function* loadEntityModel(entityName, entityModel) {\n if (_isEmpty(entityModel)) {\n const loadedModel = yield call(rest.fetchModel, entityName)\n yield put(actions.setEntityModel(loadedModel))\n }\n}\n\nexport function* initialize() {\n const {entityModel, entityName, initialized} = yield select(entityListSelector)\n\n if (!initialized) {\n yield call(loadEntityModel, entityName, entityModel)\n yield put(actions.setInitialized())\n }\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","export const INITIALIZE = 'list/INITIALIZE'\nexport const SET_INITIALIZED = 'list/SET_INITIALIZED'\nexport const REQUEST_ENTITIES = 'list/REQUEST_ENTITIES'\nexport const SET_ENTITIES = 'list/SET_ENTITIES'\nexport const SET_FORM_DEFINITION = 'list/SET_FORM_DEFINITION'\nexport const SET_ENTITY_MODEL = 'list/SET_ENTITY_MODEL'\nexport const SET_SORTING = 'list/SET_SORTING'\nexport const SET_LIMIT = 'list/SET_LIMIT'\nexport const SET_CURRENT_PAGE = 'list/SET_CURRENT_PAGE'\nexport const SET_ENTITY_COUNT = 'list/SET_ENTITY_COUNT'\nexport const ADD_ENTITIES_TO_STORE = 'list/ADD_ENTITIES_TO_STORE'\nexport const CLEAR_ENTITY_STORE = 'list/CLEAR_ENTITIES_CACHE'\nexport const RESET_DATA_SET = 'list/RESET_DATA_SET'\nexport const SET_IN_PROGRESS = 'list/SET_IN_PROGRESS'\nexport const CHANGE_PAGE = 'list/CHANGE_PAGE'\nexport const REFRESH = 'list/REFRESH'\nexport const SET_SHOW_SEARCH_FORM = 'list/SET_SEARCH_FORM'\nexport const SET_SEARCH_FILTERS = 'list/SET_SEARCH_FILTERS'\nexport const SET_SIMPLE_SEARCH_FIELDS = 'list/SET_SIMPLE_SEARCH_FIELDS'\nexport const ON_ROW_CLICK = 'list/ON_ROW_CLICK'\nexport const NAVIGATE_TO_CREATE = 'entityList/NAVIGATE_TO_CREATE'\nexport const SET_FORM_SELECTABLE = 'list/SET_FORM_SELECTABLE'\nexport const SET_FORM_CLICKABLE = 'list/SET_FORM_CLICKABLE'\nexport const SET_ENDPOINT = 'list/SET_ENDPOINT'\nexport const SET_CONSTRICTION = 'list/SET_CONSTRICTION'\nexport const QUERY_CHANGED = 'list/QUERY_CHANGED'\nexport const SET_SHOW_LINK = 'list/SET_SHOW_LINK'\nexport const SET_LAZY_DATA = 'list/SET_LAZY_DATA'\nexport const NAVIGATE_TO_ACTION = 'list/NAVIGATE_TO_ACTION'\nexport const SET_SORTING_INTERACTIVE = 'list/SET_SORTING_INTERACTIVE'\n\nexport const initialize = () => ({\n type: INITIALIZE\n})\n\nexport const setInitialized = (initialized = true) => ({\n type: SET_INITIALIZED,\n payload: {\n initialized\n }\n})\n\nexport const requestEntities = (page, show) => ({\n type: REQUEST_ENTITIES,\n payload: {\n page,\n show\n }\n})\n\nexport const setEntities = entities => ({\n type: SET_ENTITIES,\n payload: {\n entities\n }\n})\n\nexport const addEntitiesToStore = (page, entities) => ({\n type: ADD_ENTITIES_TO_STORE,\n payload: {\n page,\n entities\n }\n})\n\nexport const clearEntityStore = () => ({\n type: CLEAR_ENTITY_STORE\n})\n\nexport const setEntityCount = entityCount => ({\n type: SET_ENTITY_COUNT,\n payload: {\n entityCount\n }\n})\n\nexport const setFormDefinition = formDefinition => ({\n type: SET_FORM_DEFINITION,\n payload: {\n formDefinition\n }\n})\n\nexport const setEntityModel = entityModel => ({\n type: SET_ENTITY_MODEL,\n payload: {\n entityModel\n }\n})\n\nexport const setSorting = sorting => ({\n type: SET_SORTING,\n payload: {\n sorting\n }\n})\n\nexport const setLimit = limit => ({\n type: SET_LIMIT,\n payload: {\n limit\n }\n})\n\nexport const resetDataSet = () => ({\n type: RESET_DATA_SET\n})\n\nexport const setCurrentPage = currentPage => ({\n type: SET_CURRENT_PAGE,\n payload: {\n currentPage\n }\n})\n\nexport const setInProgress = inProgress => ({\n type: SET_IN_PROGRESS,\n payload: {\n inProgress\n }\n})\n\nexport const changePage = page => ({\n type: CHANGE_PAGE,\n payload: {\n page\n }\n})\n\nexport const refresh = () => ({\n type: REFRESH\n})\n\nexport const setShowSearchForm = showSearchForm => ({\n type: SET_SHOW_SEARCH_FORM,\n payload: {\n showSearchForm\n }\n})\n\nexport const setSearchFilters = searchFilters => ({\n type: SET_SEARCH_FILTERS,\n payload: {\n searchFilters\n }\n})\n\nexport const onRowClick = id => ({\n type: ON_ROW_CLICK,\n payload: {\n id\n }\n})\n\nexport const navigateToCreate = relationName => ({\n type: NAVIGATE_TO_CREATE,\n payload: {\n relationName\n }\n})\n\nexport const setFormSelectable = formSelectable => ({\n type: SET_FORM_SELECTABLE,\n payload: {\n formSelectable\n }\n})\n\nexport const setFormClickable = formClickable => ({\n type: SET_FORM_CLICKABLE,\n payload: {\n formClickable\n }\n})\n\nexport const setEndpoint = endpoint => ({\n type: SET_ENDPOINT,\n payload: {\n endpoint\n }\n})\n\nexport const setConstriction = constriction => ({\n type: SET_CONSTRICTION,\n payload: {\n constriction\n }\n})\n\nexport const queryChanged = query => ({\n type: QUERY_CHANGED,\n payload: {\n query\n }\n})\n\nexport const setShowLink = showLink => ({\n type: SET_SHOW_LINK,\n payload: {\n showLink\n }\n})\n\nexport const setLazyData = (type, id, values) => ({\n type: SET_LAZY_DATA,\n payload: {\n type,\n id,\n values\n }\n})\n\nexport const navigateToAction = (definition, selection) => ({\n type: NAVIGATE_TO_ACTION,\n payload: {\n definition,\n selection\n }\n})\n\nexport const setSortingInteractive = (field, add) => ({\n type: SET_SORTING_INTERACTIVE,\n payload: {\n field,\n add\n }\n})\n","import {reducer as reducerUtil} from 'tocco-util'\nimport _get from 'lodash/get'\n\nimport * as actions from './actions'\n\nconst addEntityToStore = (state, {payload}) => ({\n ...state,\n entityStore: {\n ...state.entityStore,\n [payload.page]: payload.entities\n }\n})\n\nconst setLazyData = (state, {payload: {type, id, values}}) => ({\n ...state,\n lazyData: {\n ...state.lazyData,\n [type]: {\n ...state.lazyData[type],\n [id]: {..._get(state, ['lazyData', type, id], {}), ...values}\n }\n }\n})\n\nconst clearEntityStore = state => ({\n ...state,\n entityStore: {}\n})\n\nconst defaultOrder = 'asc'\nconst getOpposite = order => order === 'asc' ? 'desc' : 'asc'\nconst setSortingInteractive = (state, {payload: {field, add}}) => {\n if (!add) {\n const currentSorting = state.sorting\n const order = (currentSorting.length > 0 && currentSorting[0].field === field\n ? getOpposite(currentSorting[0].order)\n : defaultOrder)\n return {\n ...state,\n sorting: [{field, order}]\n }\n } else {\n const contains = state.sorting.filter(s => s.field === field)\n const order = contains.length > 0 ? getOpposite(contains[0].order) : defaultOrder\n\n return {\n ...state,\n sorting: [...state.sorting.filter(s => s.field !== field), {field, order}]\n }\n }\n}\n\nconst ACTION_HANDLERS = {\n [actions.SET_INITIALIZED]: reducerUtil.singleTransferReducer('initialized'),\n [actions.SET_ENTITIES]: reducerUtil.singleTransferReducer('entities'),\n [actions.SET_FORM_DEFINITION]: reducerUtil.singleTransferReducer('formDefinition'),\n [actions.SET_ENTITY_MODEL]: reducerUtil.singleTransferReducer('entityModel'),\n [actions.SET_LIMIT]: reducerUtil.singleTransferReducer('limit'),\n [actions.SET_CURRENT_PAGE]: reducerUtil.singleTransferReducer('currentPage'),\n [actions.SET_SORTING]: reducerUtil.singleTransferReducer('sorting'),\n [actions.SET_SORTING_INTERACTIVE]: setSortingInteractive,\n [actions.SET_ENTITY_COUNT]: reducerUtil.singleTransferReducer('entityCount'),\n [actions.ADD_ENTITIES_TO_STORE]: addEntityToStore,\n [actions.SET_LAZY_DATA]: setLazyData,\n [actions.CLEAR_ENTITY_STORE]: clearEntityStore,\n [actions.SET_IN_PROGRESS]: reducerUtil.singleTransferReducer('inProgress'),\n [actions.SET_SHOW_SEARCH_FORM]: reducerUtil.singleTransferReducer('showSearchForm'),\n [actions.SET_SEARCH_FILTERS]: reducerUtil.singleTransferReducer('searchFilters'),\n [actions.SET_FORM_SELECTABLE]: reducerUtil.singleTransferReducer('formSelectable'),\n [actions.SET_FORM_CLICKABLE]: reducerUtil.singleTransferReducer('formClickable'),\n [actions.SET_ENDPOINT]: reducerUtil.singleTransferReducer('endpoint'),\n [actions.SET_CONSTRICTION]: reducerUtil.singleTransferReducer('constriction'),\n [actions.SET_SHOW_LINK]: reducerUtil.singleTransferReducer('showLink')\n\n}\n\nconst initialState = {\n initialized: false,\n entityModel: {},\n entities: [],\n limit: 10,\n currentPage: 1,\n sorting: [],\n formDefinition: null,\n entityCount: null,\n entityStore: {},\n inProgress: false,\n showSearchForm: true,\n searchFilters: [],\n createPermission: false,\n formSelectable: false,\n formClickable: false,\n showLink: false,\n lazyData: {},\n endpoint: null,\n constriction: null\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 _reduce from 'lodash/reduce'\nimport {tqlBuilder} from 'tocco-util'\n\nconst getFilterArray = v =>\n Array.isArray(v) ? v.map(e => e.uniqueId) : [v.uniqueId]\n\nexport const getFetchOptionsFromSearchForm = (searchFormValues, formFields = {}) => (\n _reduce(searchFormValues, (acc, value, path) => {\n const addition = {}\n if (path === 'searchFilter') {\n addition.filters = getFilterArray(value)\n } else {\n const fieldType = formFields[path]\n const tql = tqlBuilder.getTql(path, value, fieldType)\n addition.tql = [...(acc.tql ? [acc.tql] : []), tql].filter(Boolean).join(' and ')\n }\n\n return {...acc, ...addition}\n }, {})\n)\n","export const SET_INITIALIZED = 'searchForm/SET_INITIALIZED'\nexport const INITIALIZE = 'searchForm/INITIALIZE'\nexport const SET_FORM_DEFINITION = 'searchForm/SET_FORM_DEFINITION'\nexport const EXECUTE_SEARCH = 'searchForm/EXECUTE_SEARCH'\nexport const RESET_SEARCH = 'searchForm/RESET_SEARCH'\nexport const SET_SHOW_EXTENDED_SEARCH_FORM = 'searchForm/SET_SHOW_EXTENDED_SEARCH_FORM'\nexport const SET_SIMPLE_SEARCH_FIELDS = 'searchForm/SET_SIMPLE_SEARCH_FIELDS'\nexport const SET_DISABLE_SIMPLE_SEARCH = 'searchForm/SET_DISABLE_SIMPLE_SEARCH'\nexport const SET_SEARCH_FORM_NAME = 'searchForm/SET_SEARCH_FORM_NAME'\nexport const SUBMIT_SEARCH_FORM = 'searchForm/SUBMIT_SEARCH_FORM'\nexport const SET_VALUES_INITIALIZED = 'searchForm/SET_VALUES_INITIALIZED'\nexport const ADVANCED_SEARCH_UPDATE = 'searchForm/ADVANCED_SEARCH_UPDATE'\nexport const SET_FORM_FIELDS_FLAT = 'searchForm/SET_FORM_FIELDS_FLAT'\nexport const SET_SEARCH_FILTERS = 'searchForm/SET_SEARCH_FILTERS'\nexport const SET_SEARCH_FILTER_ACTIVE = 'searchForm/SET_SEARCH_FILTER_ACTIVE'\n\nexport const setInitialized = (initialized = true) => ({\n type: SET_INITIALIZED,\n payload: {\n initialized\n }\n})\n\nexport const initialize = () => ({\n type: INITIALIZE\n})\n\nexport const setFormDefinition = formDefinition => ({\n type: SET_FORM_DEFINITION,\n payload: {\n formDefinition\n }\n})\n\nexport const executeSearch = () => ({\n type: EXECUTE_SEARCH\n})\n\nexport const resetSearch = () => ({\n type: RESET_SEARCH\n})\n\nexport const setShowExtendedSearchForm = showExtendedSearchForm => ({\n type: SET_SHOW_EXTENDED_SEARCH_FORM,\n payload: {\n showExtendedSearchForm\n }\n})\n\nexport const setSimpleSearchFields = simpleSearchFields => ({\n type: SET_SIMPLE_SEARCH_FIELDS,\n payload: {\n simpleSearchFields\n }\n})\n\nexport const setDisableSimpleSearch = disableSimpleSearch => ({\n type: SET_DISABLE_SIMPLE_SEARCH,\n payload: {\n disableSimpleSearch\n }\n})\n\nexport const submitSearchForm = () => ({\n type: SUBMIT_SEARCH_FORM\n})\n\nexport const setValuesInitialized = valuesInitialized => ({\n type: SET_VALUES_INITIALIZED,\n payload: {\n valuesInitialized\n }\n})\n\nexport const setFormFieldsFlat = formFieldsFlat => ({\n type: SET_FORM_FIELDS_FLAT,\n payload: {\n formFieldsFlat\n }\n})\n\nexport const setSearchFilters = searchFilters => ({\n type: SET_SEARCH_FILTERS,\n payload: {\n searchFilters\n }\n})\n\nexport const setSearchFilterActive = (searchFilterId, active, exclusive) => ({\n type: SET_SEARCH_FILTER_ACTIVE,\n payload: {\n searchFilterId,\n active,\n exclusive\n }\n})\n","export const ON_SELECT_CHANGE = 'list/ON_ROW_SELECT'\nexport const SET_SELECTION = 'list/SET_SELECTION'\nexport const CLEAR_SELECTION = 'selection/CLEAR_SELECTION'\nexport const SET_SHOW_SELECTION_CONTROLLER = 'selection/SET_SHOW_SELECTION_CONTROLLER'\nexport const SET_TABLE_SELECTION_STYLE = 'selection/SET_TABLE_SELECTION_STYLE'\nexport const SET_QUERY = 'selection/SET_QUERY'\nexport const SET_QUERY_COUNT = 'selection/SET_QUERY_COUNT'\nexport const TOGGLE_SHOW_SELECTED_RECORDS = 'selection/TOOGLE_SHOW_SELECTED_RECORDS'\nexport const RELOAD_DATA = 'selection/RELOAD_DATA'\n\nexport const setSelection = selection => ({\n type: SET_SELECTION,\n payload: {\n selection\n }\n})\n\nexport const onSelectChange = (keys, isSelected) => ({\n type: ON_SELECT_CHANGE,\n payload: {\n keys,\n isSelected\n }\n})\n\nexport const clearSelection = () => ({\n type: CLEAR_SELECTION\n})\n\nexport const setShowSelectionController = showSelectionController => ({\n type: SET_SHOW_SELECTION_CONTROLLER,\n payload: {\n showSelectionController\n }\n})\n\nexport const setTableSelectionStyle = tableSelectionStyle => ({\n type: SET_TABLE_SELECTION_STYLE,\n payload: {\n tableSelectionStyle\n }\n})\n\nexport const setQuery = query => ({\n type: SET_QUERY,\n payload: {\n query\n }\n})\n\nexport const setQueryCount = queryCount => ({\n type: SET_QUERY_COUNT,\n payload: {\n queryCount\n }\n})\n\nexport const toggleShowSelectedRecords = () => ({\n type: TOGGLE_SHOW_SELECTED_RECORDS\n})\n\nexport const reloadData = () => ({\n type: RELOAD_DATA\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst LazyDataEnhancer = ({value, children}) => React.cloneElement(children, {value})\n\nLazyDataEnhancer.propTypes = {\n children: PropTypes.node,\n value: PropTypes.any\n}\n\nexport default LazyDataEnhancer\n","import _get from 'lodash/get'\n\nconst multiRelationHandler = (value, lazyData) => {\n if (!value) {\n return value\n }\n\n return value.map(value => {\n const display = _get(lazyData, ['defaultDisplays', value.model, value.key], '')\n return {...value, display}\n })\n}\n\nconst singleRelationHandler = (value, lazyData) => {\n if (!value) {\n return value\n }\n const display = _get(lazyData, ['defaultDisplays', value.model, value.key], '')\n return {...value, display}\n}\n\nconst displayExpressionHandler = (value, lazyData, info) => (\n _get(lazyData, ['displayExpressions', info.formName, info.key, info.path], '')\n)\n\nconst typeHandlers = {\n 'multi-select-box': multiRelationHandler,\n 'multi-remote-field': multiRelationHandler,\n 'single-select-box': singleRelationHandler,\n 'single-remote-field': singleRelationHandler,\n 'displayExpression': displayExpressionHandler\n}\n\nexport const lazyValueEnhancer = (value, type, lazyData, info) => {\n const typeHandler = typeHandlers[type]\n\n if (!typeHandler) {\n return value\n }\n\n return typeHandler(value, lazyData, info)\n}\n","import LazyDataEnhancerContainer from './LazyDataEnhancerContainer'\n\nexport default LazyDataEnhancerContainer\n","import {connect} from 'react-redux'\n\nimport LazyDataEnhancer from './LazyDataEnhancer'\nimport {lazyValueEnhancer} from '../../util/lazyLoading'\n\nconst mapActionCreators = {}\n\nconst mapStateToProps = (state, props) => {\n const infos = {\n path: props.path,\n formName: state.entityList.formName,\n key: props.entityKey\n }\n\n return {\n value: lazyValueEnhancer(props.value, props.type, state.list.lazyData, infos)\n }\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(LazyDataEnhancer)\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {Typography} from 'tocco-ui'\nimport {formData, field} from 'tocco-app-extensions'\nimport {intlShape} from 'react-intl'\nimport {js} from 'tocco-util'\n\nimport LazyDataEnhancer from '../components/LazyDataEnhancer'\n\nexport const MultiSeparator = () => (<Typography.Span>, </Typography.Span>)\n\nconst multiTypes = ['multi-select-box', 'multi-remote-field']\n\nexport default (fieldDefinition, entity, intl) => {\n const {id, path, dataType} = fieldDefinition\n const isMultiType = multiTypes.includes(dataType)\n const pathValue = entity[path]\n const values = !isMultiType && Array.isArray(pathValue) ? pathValue : [pathValue]\n return <span key={id} style={{marginRight: '2px'}} onClick={e => e.stopPropagation()}>\n {values.map((v, idx) =>\n <formData.FormDataContainer key={`formDataContainer-${entity.__key}-${path}`} linkFactory={true}>\n <FormattedValueWrapper type={dataType} value={v} intl={intl} formField={fieldDefinition}/>\n </formData.FormDataContainer>\n ).reduce((prev, curr, idx) => [prev, <MultiSeparator key={'sep' + idx}/>, curr])\n }\n </span>\n}\n\nconst FormattedValueWrapper = ({value, type, formData, intl, formField}) => {\n const modelField = {\n targetEntity: value && js.getOrFirst(value).model\n }\n\n const Field = useMemo(() => field.factory('list', type), [])\n\n return <LazyDataEnhancer value={value} type={type}>\n <Field\n type={type}\n formField={formField}\n modelField={modelField}\n value={value}\n formData={formData}\n breakWords={false}\n />\n </LazyDataEnhancer>\n}\n\nFormattedValueWrapper.propTypes = {\n value: PropTypes.any,\n type: PropTypes.string.isRequired,\n formData: PropTypes.shape({\n linkFactory: PropTypes.object\n }),\n intl: intlShape.isRequired,\n formField: PropTypes.object.isRequired\n}\n","import React from 'react'\nimport {actions, form} from 'tocco-app-extensions'\nimport {FormattedValue} from 'tocco-ui'\n\nimport fieldFactory from './fieldFactory'\nimport LazyDataCell from '../components/LazyDataEnhancer'\n\nexport default (field, entity, parent, intl) => {\n const {componentType} = field\n\n if (actions.isAction(componentType)) {\n return getAction(field, entity, parent)\n } else if (componentType === form.componentTypes.FIELD) {\n return fieldFactory(field, entity, intl)\n } else if (componentType === form.componentTypes.DISPLAY) {\n return getDisplayExpression(field, entity)\n }\n}\n\nconst getDisplayExpression = (field, entity) =>\n <LazyDataCell\n path={field.id}\n entityKey={entity.__key}\n type={'displayExpression'}\n value={null}\n >\n <FormattedValue type=\"html\" breakWords={false} value={entity[field.id]}/>\n </LazyDataCell>\n\nconst getAction = (field, entity, parent) =>\n <div onClick={e => { e.stopPropagation() }}>\n <actions.Action\n key={'tableAction' + field.id}\n definition={field}\n selection={actions.getSingleEntitySelection(entity.__model, entity.__key)}\n parent={parent}\n />\n </div>\n","import _uniq from 'lodash/uniq'\nimport {actions, form} from 'tocco-app-extensions'\nimport {api} from 'tocco-util'\n\nimport cellRenderer from '../cellRenderer'\n\nexport const getTable = formDefinition =>\n formDefinition.children.find(child => child.componentType === form.componentTypes.TABLE)\n\nexport const getActionBar = formDefinition =>\n formDefinition.children.find(child => child.componentType === form.componentTypes.ACTION_BAR)\n\nexport const getSorting = formDefinition => {\n const table = getTable(formDefinition)\n return table.sorting ? table.sorting : []\n}\n\nexport const getSelectable = formDefinition => {\n const table = getTable(formDefinition)\n return table.selectable !== false\n}\n\nexport const getClickable = formDefinition => {\n const table = getTable(formDefinition)\n return table.clickable !== false\n}\n\nexport const getEndpoint = formDefinition => {\n const table = getTable(formDefinition)\n return table.endpoint || null\n}\n\nexport const getConstriction = formDefinition => {\n const table = getTable(formDefinition)\n return table.constriction || null\n}\n\nconst isDisplayableChild = child => !child.hidden\n\nconst getSortingAttributes = (column, sorting) => {\n const idx = sorting && sorting.findIndex(s => s.field === column.id)\n return idx >= 0\n ? {\n sortRank: idx + 1,\n order: sorting[idx].order\n } : null\n}\n\nconst rightAlignedTypes = ['counter', 'decimal', 'double', 'integer', 'latitude', 'long', 'longitude', 'moneyamount',\n 'percent', 'serial', 'sorting', 'version']\n\nconst isRightAligned = column =>\n column.children && column.children.length === 1 && rightAlignedTypes.includes(column.children[0].dataType)\n\nexport const getColumnDefinition = (table, sorting, parent, intl, columnDisplayPreferences = {}) => {\n return table.children\n .filter(column => Object.prototype.hasOwnProperty.call(columnDisplayPreferences, column.id)\n ? columnDisplayPreferences[column.id] : !column.hidden)\n .filter(column => !parent || column.children.length !== 1 || column.children[0].path !== parent.reverseRelationName)\n .filter(column => column.children.filter(isDisplayableChild).length > 0)\n .map(c => (\n {\n id: c.id,\n label: c.label,\n sorting: {\n sortable: c.sortable,\n ...getSortingAttributes(c, sorting)\n },\n children: c.children.filter(isDisplayableChild),\n resizable: !c.widthFixed,\n rightAligned: isRightAligned(c),\n CellRenderer: ({rowData, column}) => column.children.map(child => cellRenderer(child, rowData, parent, intl))\n }\n ))\n}\n\nexport const getFields = (formDefinition, columnDisplayPreferences) => {\n const relationFields = []\n const displayExpressionFields = []\n const columns = getColumnDefinition(\n getTable(formDefinition),\n undefined,\n undefined,\n undefined,\n columnDisplayPreferences\n )\n const fields = columns.reduce((accumulator, current) => (\n [\n ...accumulator,\n ...current.children\n .filter(child => !actions.isAction(child.componentType))\n .map(child => {\n if (api.relationFieldTypes.includes(child.dataType)) {\n relationFields.push(child.path)\n } else if (child.componentType === 'display') {\n displayExpressionFields.push(child.id)\n return null\n }\n\n return child.path\n }).filter(f => f)]\n ), [])\n\n return {paths: _uniq(fields), relationFields, displayExpressionFields}\n}\n\nexport const getFormFieldFlat = formDefinition =>\n searchChildren(formDefinition)\n\nconst searchChildren = node => {\n if (node.componentType === 'field-set') {\n return node.children.reduce((acc, value) => ({...acc, [value.path || value.id]: value.dataType}), {})\n } else if (node.children) {\n return node.children.reduce((acc, value) => ({\n ...acc,\n ...searchChildren(value)\n }), {})\n }\n}\n\n/**\n * If the search form contains a field pointing to the parent entity this must not be a full-text\n * search field and should be readonly. This function will search for the correct field and replace its\n * type and change the readonly attribute.\n */\nexport const changeParentFieldType = (formElement, parentPath) => {\n if (formElement.componentType === 'field-set') {\n const containsParentField = formElement.children.some(child => child.path === parentPath)\n\n return {\n ...formElement,\n ...(containsParentField && {readonly: true}),\n children: formElement.children.map(child =>\n child.path === parentPath\n ? {...child, dataType: 'single-select-box'}\n : child)\n }\n }\n if (formElement.children) {\n return {\n ...formElement,\n children: formElement.children.map(child => changeParentFieldType(child, parentPath))\n }\n }\n\n return formElement\n}\n\nexport const getTableColumns = (formDefinition, columnDisplayPreferences = {}) =>\n getTable(formDefinition)\n .children\n .map(column => ({\n ...column,\n hidden: Object.prototype.hasOwnProperty.call(columnDisplayPreferences, column.id)\n ? !columnDisplayPreferences[column.id] : column.hidden\n }))\n","import React from 'react'\nimport _forOwn from 'lodash/forOwn'\nimport {FormattedMessage} from 'react-intl'\nimport {form} from 'tocco-app-extensions'\n\nexport const validateSearchFields = (values, formDefinition) => {\n const errors = {}\n\n _forOwn(values, (value, fieldName) => {\n let fieldDefinition = fieldDefinitionCache.get(fieldName)\n if (!fieldDefinition) {\n fieldDefinition = getFieldDefinition(form.transformFieldNameBack(fieldName), formDefinition)\n fieldDefinitionCache.add(fieldName, fieldDefinition)\n }\n\n if (fieldDefinition) {\n const fieldErrors = validateField(value, fieldDefinition)\n if (fieldErrors) {\n errors[fieldName] = fieldErrors\n }\n }\n })\n\n return errors\n}\n\nconst validateField = (value, definition) => {\n const type = definition.dataType\n const typeValidator = typeValidators[type]\n\n if (typeValidator) {\n return typeValidator(value)\n }\n return null\n}\n\nconst fieldDefinitionCache = (() => {\n const definitionCache = {}\n\n const addToCache = (name, definition) => {\n definitionCache[name] = definition\n }\n const getFromCache = name => definitionCache[name]\n\n return {\n add: addToCache,\n get: getFromCache\n }\n})()\n\nconst getFieldDefinition = (fieldName, fieldDefinition) => {\n if (fieldDefinition.id === fieldName) {\n return fieldDefinition.children[0]\n }\n\n let result = null\n if (fieldDefinition.children) {\n fieldDefinition.children.forEach(child => {\n const fieldDefinition = getFieldDefinition(fieldName, child)\n if (fieldDefinition) {\n result = fieldDefinition\n }\n })\n }\n\n return result\n}\n\nconst typeValidators = {\n 'string': value => {\n const minLength = 2\n if (value.length > 0 && value.length < minLength) {\n return {\n minLength: [\n <FormattedMessage\n key=\"minLength\"\n id=\"client.entity-list.searchFormValidationMinLength\"\n values={{minLength}}\n />\n ]\n }\n }\n },\n 'fulltext-search': value => {\n const minLength = 2\n if (value.length > 0 && value.length < minLength) {\n return {\n minLength: [\n <FormattedMessage\n key=\"minLength\"\n id=\"client.entity-list.searchFormValidationMinLength\"\n values={{minLength}}\n />\n ]\n }\n }\n }\n}\n","import {form, rest} from 'tocco-app-extensions'\nimport _reduce from 'lodash/reduce'\nimport {\n actions as formActions,\n getFormValues,\n isDirty\n} from 'redux-form'\nimport * as formActionTypes from 'redux-form/es/actionTypes'\nimport {call, put, select, takeLatest, take, all} from 'redux-saga/effects'\n\nimport * as actions from './actions'\nimport {getFormFieldFlat, getEndpoint, changeParentFieldType} from '../../util/api/forms'\nimport {SET_INITIALIZED as LIST_SET_INITIALIZED, setSearchFormType} from '../entityList/actions'\nimport {validateSearchFields} from '../../util/searchFormValidation'\nimport {SET_FORM_DEFINITION} from '../list/actions'\nimport searchFormTypes from '../../util/searchFormTypes'\n\nexport const inputSelector = state => state.input\nexport const searchFormSelector = state => state.searchForm\nexport const entityListSelector = state => state.entityList\nexport const listFromDefinitionSelector = state => state.list.formDefinition\nexport const searchValuesSelector = getFormValues('searchForm')\nexport const isDirtySelector = isDirty('searchForm')\n\nconst FORM_ID = 'searchForm'\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.INITIALIZE, initialize),\n takeLatest(formActionTypes.CHANGE, submitSearchFrom),\n takeLatest(actions.SUBMIT_SEARCH_FORM, submitSearchFrom),\n takeLatest(actions.RESET_SEARCH, resetSearch)\n ])\n}\n\nexport function* initialize() {\n const {initialized} = yield select(searchFormSelector)\n const {searchFormType, entityName} = yield select(entityListSelector)\n const searchFormVisible = searchFormType !== searchFormTypes.NONE\n\n if (!initialized) {\n const formDefinition = searchFormVisible ? yield call(loadSearchForm) : null\n yield call(setInitialFormValues, searchFormVisible, formDefinition)\n if (searchFormType === searchFormTypes.ADMIN) {\n yield call(loadSearchFilter, entityName)\n }\n\n yield put(actions.setInitialized())\n }\n}\n\nexport function* getListFormDefinition() {\n const formDefinition = yield select(listFromDefinitionSelector)\n if (!formDefinition) {\n const action = yield take(SET_FORM_DEFINITION)\n return action.payload.formDefinition\n }\n\n return formDefinition\n}\n\nexport function* setInitialFormValues(searchFormVisible, formDefinition) {\n const {preselectedSearchFields, parent} = yield select(inputSelector)\n\n let formValues = {}\n\n if (preselectedSearchFields) {\n const model = yield call(getEntityModel)\n const preselectedValues = searchFormVisible\n ? yield call(form.transformInputValues, preselectedSearchFields, model)\n : preselectedSearchFields\n\n formValues = {...formValues, ...preselectedValues}\n }\n\n if (parent && !Object.prototype.hasOwnProperty.call(formValues, parent.reverseRelationName)) {\n const listFormDefinition = yield call(getListFormDefinition)\n const endpoint = yield call(getEndpoint, listFormDefinition)\n if (!endpoint) {\n const display = yield call(rest.fetchDisplay, parent.model, parent.key)\n formValues[parent.reverseRelationName] = {key: parent.key, display}\n }\n }\n\n if (searchFormVisible && formDefinition) {\n const fieldDefinitions = yield call(form.getFieldDefinitions, formDefinition)\n const fromDefaultValues = yield call(form.getDefaultValues, fieldDefinitions)\n formValues = {...fromDefaultValues, ...formValues}\n }\n\n const transformedFromValues = yield call(transformFieldNames, formValues)\n\n yield put(formActions.initialize(FORM_ID, transformedFromValues))\n yield put(actions.setValuesInitialized(true))\n}\n\nexport function* transformFieldNames(formValues) {\n return _reduce(formValues, (acc, val, key) => (\n {...acc, [form.transformFieldName(key)]: val}\n ), {})\n}\n\nexport function* submitSearchFrom() {\n const values = yield select(getFormValues(FORM_ID))\n const {formDefinition} = yield select(searchFormSelector)\n const errors = yield call(validateSearchFields, values, formDefinition)\n\n if (Object.keys(errors).length === 0) {\n yield put(actions.executeSearch())\n }\n}\n\nexport function* loadSearchFilter(entityName) {\n const searchFilters = yield call(rest.fetchSearchFilters, entityName)\n\n yield put(actions.setSearchFilters(searchFilters.map(searchFilter =>\n ({...searchFilter, ...(searchFilter.defaultFilter && {active: true})}))\n ))\n}\n\nexport function* loadSearchForm() {\n const {searchFormType, formName} = yield select(entityListSelector)\n if (searchFormType === searchFormTypes.SIMPLE) {\n return null\n }\n let formDefinition = yield call(rest.fetchForm, formName, 'search', true)\n if (formDefinition) {\n const {parent} = yield select(inputSelector)\n if (parent && parent.reverseRelationName) {\n formDefinition = yield call(changeParentFieldType, formDefinition, parent.reverseRelationName)\n }\n\n yield put(actions.setFormDefinition(formDefinition))\n yield put(actions.setFormFieldsFlat(getFormFieldFlat(formDefinition)))\n } else {\n yield put(setSearchFormType(searchFormTypes.SIMPLE))\n }\n return formDefinition\n}\n\nexport function* getEntityModel() {\n let entityList = yield select(entityListSelector)\n if (!entityList.initialized) {\n yield take(LIST_SET_INITIALIZED)\n }\n\n entityList = yield select(entityListSelector)\n return entityList.entityModel\n}\n\nexport function* resetSearchFilters() {\n const {searchFilters} = yield select(searchFormSelector)\n\n yield put(actions.setSearchFilters(searchFilters.map(searchFilter =>\n ({...searchFilter, active: searchFilter.defaultFilter})\n )))\n}\n\nexport function* resetSearch() {\n yield call(resetSearchFilters)\n yield put(formActions.reset('searchForm'))\n yield call(submitSearchFrom)\n}\n\nexport function* getSearchFormValues() {\n const {valuesInitialized} = yield select(searchFormSelector)\n\n if (!valuesInitialized) {\n yield take(actions.SET_VALUES_INITIALIZED)\n }\n\n const searchValues = yield select(searchValuesSelector)\n\n return _reduce(searchValues, (result, value, key) => (\n {\n ...result,\n ...(!Array.isArray(value) || value.length) ? {[form.transformFieldNameBack(key)]: value} : {}\n }\n ), {})\n}\n","import {api} from 'tocco-util'\n\nexport const entitiesListTransformer = json => {\n return json.data.map(entity => api.getFlattenEntity(entity))\n}\n","export const LOAD_PREFERENCES = 'preferences/LOAD_PREFERENCES'\nexport const SET_POSITIONS = 'preferences/SET_POSITIONS'\nexport const CHANGE_POSITION = 'preferences/CHANGE_POSITION'\nexport const SET_SORTING = 'preferences/SET_SORTING'\nexport const SET_COLUMNS = 'preferences/SET_COLUMNS'\nexport const RESET_SORTING = 'preferences/RESET_SORTING'\nexport const RESET_COLUMNS = 'preferences/RESET_COLUMNS'\nexport const RESET_PREFERENCES = 'preferences/RESET_PREFERENCES'\nexport const DISPLAY_COLUMN_MODAL = 'preferences/DISPLAY_COLUMN_MODAL'\n\nexport const loadPreferences = () => ({\n type: LOAD_PREFERENCES\n})\n\nexport const setPositions = positions => ({\n type: SET_POSITIONS,\n payload: {\n positions\n }\n})\n\nexport const changePosition = (field, afterFieldPosition, columns) => ({\n type: CHANGE_POSITION,\n payload: {\n field,\n afterFieldPosition,\n columns\n }\n})\n\nexport const setSorting = sorting => ({\n type: SET_SORTING,\n payload: {\n sorting\n }\n})\n\nexport const setColumns = columns => ({\n type: SET_COLUMNS,\n payload: {\n columns\n }\n})\n\nexport const resetSorting = () => ({\n type: RESET_SORTING,\n payload: {}\n})\n\nexport const resetPreferences = () => ({\n type: RESET_PREFERENCES,\n payload: {}\n})\n\nexport const displayColumnModal = () => ({\n type: DISPLAY_COLUMN_MODAL,\n payload: {}\n})\n\nexport const resetColumns = () => ({\n type: RESET_COLUMNS,\n payload: {}\n})\n","import _isEmpty from 'lodash/isEmpty'\nimport _union from 'lodash/union'\nimport {externalEvents, rest, remoteEvents, actionEmitter} from 'tocco-app-extensions'\nimport _omit from 'lodash/omit'\nimport {call, put, fork, select, spawn, takeEvery, takeLatest, all, take} from 'redux-saga/effects'\nimport {api} from 'tocco-util'\n\nimport {getFetchOptionsFromSearchForm} from '../../util/api/fetchOptions'\nimport * as actions from './actions'\nimport * as searchFormActions from '../searchForm/actions'\nimport * as selectionActions from '../selection/actions'\nimport {getSearchFormValues} from '../searchForm/sagas'\nimport {getSorting, getSelectable, getClickable, getEndpoint, getConstriction, getFields} from '../../util/api/forms'\nimport {entitiesListTransformer} from '../../util/api/entities'\nimport * as preferencesActions from '../preferences/actions'\n\nexport const inputSelector = state => state.input\nexport const entityListSelector = state => state.entityList\nexport const listSelector = state => state.list\nexport const searchFormSelector = state => state.searchForm\nexport const selectionSelector = state => state.selection\nexport const preferencesSelector = state => state.preferences\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.INITIALIZE, initialize),\n takeLatest(actions.CHANGE_PAGE, changePage),\n takeLatest(searchFormActions.EXECUTE_SEARCH, loadData, 1),\n takeLatest(searchFormActions.EXECUTE_SEARCH, queryChanged),\n takeEvery(actions.SET_SORTING, reloadData),\n takeLatest(actions.SET_SORTING_INTERACTIVE, reloadData),\n takeEvery(actions.RESET_DATA_SET, loadData, 1),\n takeLatest(actions.REFRESH, loadData),\n takeLatest(actions.NAVIGATE_TO_CREATE, navigateToCreate),\n takeLatest(actions.NAVIGATE_TO_ACTION, navigateToAction),\n takeLatest(selectionActions.RELOAD_DATA, loadData, 1),\n takeLatest(actions.ON_ROW_CLICK, onRowClick),\n takeEvery(remoteEvents.REMOTE_EVENT, remoteEvent)\n ])\n}\n\nexport function* initialize() {\n yield put(actions.setInProgress(true))\n const {entityName, formName} = yield select(entityListSelector)\n\n const {formDefinition, entityModel, initialized} = yield select(listSelector)\n\n if (!initialized) {\n yield all([\n call(loadEntityModel, entityName, entityModel),\n call(loadFormDefinition, formDefinition, formName)\n ])\n yield call(setSorting)\n yield call(loadData, 1)\n } else {\n yield call(loadData)\n }\n\n yield call(queryChanged)\n yield put(actions.setInProgress(false))\n yield put(actions.setInitialized())\n}\n\nexport function* queryChanged() {\n const query = yield call(getBasicQuery)\n yield put(selectionActions.setQuery(query))\n}\n\nexport function* loadData(page) {\n yield put(actions.setInProgress(true))\n const {initialized: searchFormInitialized} = yield select(searchFormSelector)\n\n if (!searchFormInitialized) {\n yield take(searchFormActions.SET_INITIALIZED)\n }\n\n yield fork(countEntities)\n yield put(actions.clearEntityStore())\n\n if (page) {\n yield put(actions.setCurrentPage(page))\n } else {\n const {currentPage} = yield select(listSelector)\n page = currentPage\n }\n\n yield call(requestEntities, page)\n yield put(actions.setInProgress(false))\n}\n\nexport function* getBasicQuery(regardSelection = true) {\n const {searchFilters: inputSearchFilters, tql: inputTql} = yield select(inputSelector)\n\n const {showSelectedRecords, selection} = yield select(selectionSelector)\n if (regardSelection && showSelectedRecords) {\n return {\n keys: selection\n }\n }\n\n const {formFieldsFlat, searchFilters: searchFormSearchFilter} = yield select(searchFormSelector)\n const searchFormValues = yield call(getSearchFormValues)\n const list = yield select(listSelector)\n\n const searchFormFetchOptions = yield call(getFetchOptionsFromSearchForm, searchFormValues, formFieldsFlat)\n const filter = yield call(getSearchFilter, inputSearchFilters, searchFormFetchOptions.filters, searchFormSearchFilter)\n const where = yield call(getTql, inputTql, searchFormFetchOptions.tql)\n\n return {\n ..._omit(searchFormFetchOptions, ['filters', 'tql']),\n ...(filter && filter.length > 0 ? {filter} : {}),\n ...(where ? {where} : {}),\n ...(list.constriction && {constriction: list.constriction})\n }\n}\n\nexport function* prepareEndpointUrl(endpoint) {\n const {parent} = yield select(inputSelector)\n return parent ? endpoint.replace('{parentKey}', parent.key) : endpoint\n}\n\nexport function* countEntities() {\n const {entityName} = yield select(inputSelector)\n const {endpoint} = yield select(listSelector)\n const {showSelectedRecords, selection} = yield select(selectionSelector)\n\n const regardSelection = !showSelectedRecords\n const query = yield call(getBasicQuery, regardSelection)\n const preparedEndpoint = endpoint ? yield call(prepareEndpointUrl, endpoint) : endpoint\n\n const requestOptions = {\n method: endpoint ? 'GET' : 'POST',\n ...(preparedEndpoint ? {endpoint: preparedEndpoint} : {})\n }\n const entityCount = yield call(rest.fetchEntityCount, entityName, query, requestOptions)\n\n if (showSelectedRecords) {\n yield put(actions.setEntityCount(selection.length))\n } else {\n yield put(actions.setEntityCount(entityCount))\n }\n\n yield put(selectionActions.setQueryCount(entityCount))\n}\n\nexport function* changePage({payload}) {\n const {page} = payload\n yield put(actions.setInProgress(true))\n yield put(actions.setCurrentPage(page))\n yield call(requestEntities, page)\n yield put(actions.setInProgress(false))\n}\n\nexport function* reloadData() {\n const {initialized} = yield select(listSelector)\n if (initialized) {\n yield call(loadData, 1)\n }\n}\n\nexport function* getSearchFilter(inputSearchFilters, searchInputsFilters, adminSearchFormFilters = []) {\n const activeSearchFormFilters = adminSearchFormFilters && adminSearchFormFilters\n .filter(f => f.active).map(f => f.uniqueId)\n\n return yield call(_union, inputSearchFilters, searchInputsFilters, activeSearchFormFilters)\n}\n\nexport const getTql = (inputTql, searchTql) => [\n ...(inputTql && inputTql.length > 0 ? [`(${inputTql})`] : []),\n ...(searchTql && searchTql.length > 0 ? [`(${searchTql})`] : [])\n].join(' and ')\n\nexport function* loadDisplayExpressions(formName, paths, entities) {\n if (paths && paths.length > 0 && entities.length > 0) {\n const keys = entities.map(e => e.__key)\n const result = yield call(rest.fetchDisplayExpressions, formName, 'list', keys, paths)\n yield put(actions.setLazyData('displayExpressions', formName, result))\n }\n}\n\nexport function* loadRelationDisplays(relationFields, entities) {\n if (relationFields && relationFields.length > 0) {\n const {lazyData} = yield select(listSelector)\n const request = yield call(api.getPathDisplayRequest, entities, relationFields, lazyData)\n const displays = yield call(rest.fetchDisplays, request)\n yield all(Object.keys(displays).map(entity =>\n put(actions.setLazyData('defaultDisplays', entity, displays[entity]))\n ))\n }\n}\n\nexport function* fetchEntitiesAndAddToStore(page) {\n const {entityName, formName} = yield select(entityListSelector)\n const {columns: columnPreferences} = yield select(preferencesSelector)\n const {entityStore, sorting, limit, formDefinition, endpoint} = yield select(listSelector)\n if (!entityStore[page]) {\n const {paths, relationFields, displayExpressionFields} = yield call(getFields, formDefinition, columnPreferences)\n const basicQuery = yield call(getBasicQuery)\n const query = {\n ...basicQuery,\n page,\n sorting,\n limit,\n paths\n }\n const preparedEndpoint = endpoint ? yield call(prepareEndpointUrl, endpoint) : endpoint\n const requestOptions = {\n method: endpoint ? 'GET' : 'POST',\n ...(preparedEndpoint ? {endpoint: preparedEndpoint} : {})\n }\n\n const entities = yield call(rest.fetchEntities, entityName, query, requestOptions, entitiesListTransformer)\n\n yield put(actions.addEntitiesToStore(page, entities))\n yield spawn(loadRelationDisplays, relationFields, entities)\n yield spawn(loadDisplayExpressions, formName, displayExpressionFields, entities)\n }\n}\n\nexport function* requestEntities(page) {\n const {entityStore} = yield select(listSelector)\n\n if (!entityStore[page]) {\n yield call(fetchEntitiesAndAddToStore, page)\n }\n\n yield call(displayEntity, page)\n yield spawn(preloadNextPage, page)\n}\n\nexport function* preloadNextPage(currentPage) {\n const list = yield select(listSelector)\n const {entityStore, limit} = list\n let {entityCount} = list\n const nextPage = currentPage + 1\n\n if (entityCount === null || entityCount === undefined) {\n const setCountAction = yield take(actions.SET_ENTITY_COUNT)\n entityCount = setCountAction.payload.entityCount\n }\n\n if (currentPage * limit < entityCount && !entityStore[nextPage]) {\n yield call(fetchEntitiesAndAddToStore, nextPage)\n }\n}\n\nexport function* displayEntity(page) {\n const list = yield select(listSelector)\n const entities = list.entityStore[page]\n yield put(actions.setEntities(entities))\n}\n\nfunction* getPreferencesSorting() {\n const preferences = yield select(preferencesSelector)\n if (!preferences.sorting) {\n const {payload} = yield take(preferencesActions.SET_SORTING)\n return payload.sorting\n } else {\n return preferences.sorting\n }\n}\n\nexport const FALLBACK_SORTING_FIELD = 'update_timestamp'\nexport function* setSorting() {\n const {formDefinition, entityModel} = yield select(listSelector)\n const tableSorting = yield call(getSorting, formDefinition)\n const preferencesSorting = yield call(getPreferencesSorting)\n if (preferencesSorting && preferencesSorting.length > 0) {\n yield put(actions.setSorting(preferencesSorting))\n } else if (tableSorting.length > 0) {\n yield put(actions.setSorting(tableSorting))\n } else if (entityModel.paths[FALLBACK_SORTING_FIELD]) {\n yield put(actions.setSorting([{field: FALLBACK_SORTING_FIELD, order: 'desc'}]))\n }\n}\n\nexport function* loadFormDefinition(formDefinition, formName) {\n if (formDefinition === null) {\n formDefinition = yield call(rest.fetchForm, formName, 'list')\n yield put(actions.setFormDefinition(formDefinition))\n }\n\n const selectable = yield call(getSelectable, formDefinition)\n yield put(actions.setFormSelectable(selectable))\n const clickable = yield call(getClickable, formDefinition)\n yield put(actions.setFormClickable(clickable))\n const endpoint = yield call(getEndpoint, formDefinition)\n yield put(actions.setEndpoint(endpoint))\n const constriction = yield call(getConstriction, formDefinition)\n yield put(actions.setConstriction(constriction))\n}\n\nexport function* loadEntityModel(entityName, entityModel) {\n if (_isEmpty(entityModel)) {\n const model = yield call(rest.fetchModel, entityName)\n yield put(actions.setEntityModel(model))\n }\n}\n\nexport function* onRowClick({payload}) {\n const {selectOnRowClick} = yield select(inputSelector)\n if (selectOnRowClick === true) {\n const list = yield select(selectionSelector)\n const selected = list.selection.includes(payload.id)\n yield put(selectionActions.onSelectChange([payload.id], !selected))\n }\n yield put(externalEvents.fireExternalEvent('onRowClick', {id: payload.id}))\n}\n\nexport function* navigateToCreate({payload}) {\n yield put(externalEvents.fireExternalEvent('onNavigateToCreate', payload.relationName))\n}\n\nexport function* navigateToAction({payload}) {\n const {definition, selection} = payload\n yield put(externalEvents.fireExternalEvent('onNavigateToAction', {definition, selection}))\n}\n\nexport const containsEntityOfModel = (event, entityName) =>\n !!event.payload.entities.find(entity => entity.entityName === entityName)\n\nexport function* remoteEvent(action) {\n const event = action.payload.event\n const {entityModel} = yield select(listSelector)\n if (['entity-create-event', 'entity-delete-event', 'entity-update-event'].includes(event.type)) {\n if (containsEntityOfModel(event, entityModel.name)) {\n yield call(reloadData)\n }\n }\n\n if (event.type === 'entity-delete-event') {\n const deletedEntityKeys = event.payload.entities.filter(e => e.entityName === entityModel.name).map(e => e.key)\n yield put(selectionActions.onSelectChange(deletedEntityKeys, false))\n }\n\n yield put(actionEmitter.emitAction(action))\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst simpleSearchFieldsToArray = simpleSearchFields => (\n simpleSearchFields.split(',')\n .filter(s => s)\n .map(s => s.trim())\n)\n\nconst setSimpleSearchFields = (state, {payload}) => {\n const fieldArray = simpleSearchFieldsToArray(payload.simpleSearchFields)\n if (fieldArray.length > 0) {\n return {\n ...state,\n simpleSearchFields: fieldArray\n }\n }\n return state\n}\n\nconst setSearchFilterActive = (state, {payload: {searchFilterId, active, exclusive}}) => ({\n ...state,\n searchFilters: [...state.searchFilters.map(searchFilter =>\n ({...searchFilter, ...(searchFilterId === searchFilter.uniqueId ? {active} : exclusive ? {active: !active} : {})})\n )]\n})\n\nconst ACTION_HANDLERS = {\n [actions.SET_INITIALIZED]: reducerUtil.singleTransferReducer('initialized'),\n [actions.SET_SIMPLE_SEARCH_FIELDS]: setSimpleSearchFields,\n [actions.SET_FORM_DEFINITION]: reducerUtil.singleTransferReducer('formDefinition'),\n [actions.SET_SHOW_EXTENDED_SEARCH_FORM]: reducerUtil.singleTransferReducer('showExtendedSearchForm'),\n [actions.SET_DISABLE_SIMPLE_SEARCH]: reducerUtil.singleTransferReducer('disableSimpleSearch'),\n [actions.SET_VALUES_INITIALIZED]: reducerUtil.singleTransferReducer('valuesInitialized'),\n [actions.SET_FORM_FIELDS_FLAT]: reducerUtil.singleTransferReducer('formFieldsFlat'),\n [actions.SET_SEARCH_FILTERS]: reducerUtil.singleTransferReducer('searchFilters'),\n [actions.SET_SEARCH_FILTER_ACTIVE]: setSearchFilterActive\n}\n\nconst initialState = {\n initialized: false,\n formDefinition: {},\n showExtendedSearchForm: false,\n simpleSearchFields: ['txtFulltext'],\n disableSimpleSearch: false,\n valuesInitialized: false,\n searchFilters: null\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 reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","import {reducer as reducerUtil} from 'tocco-util'\nimport _uniq from 'lodash/uniq'\n\nimport * as actions from './actions'\n\nconst comparator = (a, b) => a - b\n\nconst setSelection = (state, {payload}) => ({\n ...state,\n selection: _uniq(payload.selection).sort(comparator)\n})\n\nconst clearSelection = (state, {payload}) => ({\n ...state,\n selection: [],\n showSelectedRecords: false\n})\n\nconst ACTION_HANDLERS = {\n [actions.SET_TABLE_SELECTION_STYLE]: reducerUtil.singleTransferReducer('tableSelectionStyle'),\n [actions.TOGGLE_SHOW_SELECTED_RECORDS]: reducerUtil.toggleReducer('showSelectedRecords'),\n [actions.SET_SELECTION]: setSelection,\n [actions.CLEAR_SELECTION]: clearSelection,\n [actions.SET_SHOW_SELECTION_CONTROLLER]: reducerUtil.singleTransferReducer('showSelectionController'),\n [actions.SET_TABLE_SELECTION_STYLE]: reducerUtil.singleTransferReducer('tableSelectionStyle'),\n [actions.SET_QUERY]: reducerUtil.singleTransferReducer('query'),\n [actions.SET_QUERY_COUNT]: reducerUtil.singleTransferReducer('queryCount')\n}\n\nconst initialState = {\n showSelectedRecords: false,\n selection: [],\n showSelectionController: false,\n tableSelectionStyle: 'none',\n query: {},\n queryCount: 0\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 PropTypes from 'prop-types'\n\nconst selectionStyles = {\n SINGLE: 'single',\n MULTI: 'multi',\n NONE: 'none'\n}\n\nconst selectionStylePropType = PropTypes.oneOf(Object.keys(selectionStyles).map(key => selectionStyles[key]))\n\nexport {\n selectionStyles as default,\n selectionStylePropType\n}\n","import _uniq from 'lodash/uniq'\n\nimport selectionStyles from './selectionStyles'\n\nexport const showSelectionComponent = (inputSelectionStyle, disableSelectionController, formSelectable) => {\n return disableSelectionController !== true\n && (!inputSelectionStyle || inputSelectionStyle === selectionStyles.MULTI)\n && formSelectable !== false\n}\n\nexport const getTableSelectionStyle = (inputSelectionStyle, fromSelectable) => {\n if (fromSelectable === false || inputSelectionStyle === selectionStyles.NONE) {\n return selectionStyles.NONE\n }\n\n if (inputSelectionStyle === selectionStyles.SINGLE) {\n return selectionStyles.SINGLE\n }\n\n return selectionStyles.MULTI\n}\n\n/**\n * Comparator function which can be used to sort numerical arrays in ascending order.\n */\nconst ascendingNumberComparator = (a, b) => a - b\n\n/**\n * Takes the existing selection and the new selection which can be either of the type selected or deselected and\n * combines them to a new selection which will be returned.\n */\nexport const combineSelection = (currentSelection, keys, isSelected) => {\n let newSelection = currentSelection.slice()\n for (const key of keys) {\n if (isSelected) {\n newSelection.push(key)\n } else {\n newSelection = newSelection.filter(k => k !== key)\n }\n }\n\n return _uniq(newSelection).sort(ascendingNumberComparator)\n}\n","import {externalEvents} from 'tocco-app-extensions'\nimport {call, put, select, takeLatest, all} from 'redux-saga/effects'\n\nimport * as actions from './actions'\nimport selectionStyles from '../../util/selectionStyles'\nimport {SET_FORM_SELECTABLE} from '../list/actions'\nimport {combineSelection, showSelectionComponent, getTableSelectionStyle} from '../../util/selection'\n\nexport const inputSelector = state => state.input\nexport const entityListSelector = state => state.entityList\nexport const selectionSelector = state => state.selection\nexport const listSelector = state => state.list\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.TOGGLE_SHOW_SELECTED_RECORDS, reloadData),\n takeLatest(actions.CLEAR_SELECTION, reloadData),\n takeLatest(actions.ON_SELECT_CHANGE, onSelectChange),\n takeLatest(SET_FORM_SELECTABLE, initialize)\n ])\n}\n\nexport function* onSelectChange({payload: {keys, isSelected}}) {\n const {selection: currentSelection} = yield select(selectionSelector)\n const {selectionStyle} = yield select(inputSelector)\n\n const newSelection = selectionStyle === selectionStyles.SINGLE\n ? keys : yield call(combineSelection, currentSelection, keys, isSelected)\n\n yield put(actions.setSelection(newSelection))\n yield put(externalEvents.fireExternalEvent('onSelectChange', newSelection))\n}\n\nexport function* reloadData() {\n yield put(actions.reloadData())\n}\n\nexport function* initialize() {\n const {formSelectable} = yield select(listSelector)\n const {selectionStyle, disableSelectionController} = yield select(inputSelector)\n const {selectionMode} = yield select(selectionSelector)\n\n const selectionControllerVisible = yield call(\n showSelectionComponent,\n selectionStyle,\n disableSelectionController,\n formSelectable\n )\n yield put(actions.setShowSelectionController(selectionControllerVisible))\n\n yield call(setTableStyle, selectionMode)\n}\n\nexport function* setTableStyle() {\n const {formSelectable} = yield select(listSelector)\n const {selectionStyle} = yield select(inputSelector)\n\n const tableSelectionStyle = yield call(getTableSelectionStyle, selectionStyle, formSelectable)\n yield put(actions.setTableSelectionStyle(tableSelectionStyle))\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst resetSorting = state => ({\n ...state,\n sorting: initialState.sorting\n})\n\nconst resetColumns = state => ({\n ...state,\n columns: initialState.columns,\n positions: initialState.positions\n})\n\nconst ACTION_HANDLERS = {\n [actions.SET_POSITIONS]: reducerUtil.singleTransferReducer('positions'),\n [actions.SET_SORTING]: reducerUtil.singleTransferReducer('sorting'),\n [actions.SET_COLUMNS]: reducerUtil.singleTransferReducer('columns'),\n [actions.RESET_SORTING]: resetSorting,\n [actions.RESET_COLUMNS]: resetColumns,\n [actions.RESET_PREFERENCES]: () => initialState\n}\n\nconst initialState = {\n positions: null,\n sorting: null,\n columns: {}\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","export const getPositions = preferences =>\n Object.keys(preferences)\n .filter(key => key.endsWith('.position'))\n .reduce((acc, key) => {\n const fieldName = key.match(/.*\\.([^.]+)\\.position$/)\n return {\n ...acc,\n [fieldName[1]]: Number(preferences[key])\n }\n }, {})\n\nexport const getPositionsFromColumns = columns =>\n columns\n .filter(c => !c.fixedPosition)\n .reduce((acc, c, idx) => ({\n ...acc,\n [c.id]: idx\n }), {})\n\nexport const changePosition = (positions, field, fieldAfterPosition) =>\n Object.keys(positions)\n .sort((a, b) => positions[a] - positions[b])\n .filter(key => key !== field)\n .reduce((acc, key) => [\n ...acc,\n key,\n ...(key === fieldAfterPosition ? [field] : [])\n ]\n , [])\n .reduce((acc, key, idx) => ({\n ...acc,\n [key]: idx\n })\n , {})\n\nexport const getPositionsPreferencesToSave = (formName, positions) =>\n Object.keys(positions)\n .reduce((acc, key) => ({\n ...acc,\n [`${formName}.${key}.position`]: positions[key].toString()\n }), {})\n\nexport const getSorting = preferences => {\n const keyRegex = /^.*\\.sorting(Field|Direction)\\.?([1-9]*)$/\n return Object.entries(preferences)\n .filter(([key]) => keyRegex.test(key))\n .map(([key, value]) => [transformSortingKey(key.match(keyRegex)), value])\n .reduce((acc, [key, value]) => {\n acc[key.index] = {\n ...acc[key.index],\n [key.field]: value\n }\n return acc\n }, [])\n}\n\nconst transformSortingKey = keyMatch => ({\n field: transformSortingField(keyMatch[1]),\n index: keyMatch[2] ? parseInt(keyMatch[2]) : 0\n})\n\nconst transformSortingField = field => field === 'Direction' ? 'order' : field.toLowerCase()\n\nexport const getSortingPreferencesToSave = (formName, sorting) => ({\n [`${formName}.sortingField`]: sorting.field,\n [`${formName}.sortingDirection`]: sorting.order\n})\n\nexport const getAdditionalSortingPreferencesToSave = (formName, sorting, index) => ({\n [`${formName}.sortingField.${index}`]: sorting.field,\n [`${formName}.sortingDirection.${index}`]: sorting.order\n})\n\nexport const getColumns = preferences => {\n const keyRegex = /^[^.]+\\.(.+)\\.hidden$/\n return Object.entries(preferences)\n .filter(([key]) => keyRegex.test(key))\n .reduce((acc, [key, value]) => {\n const fieldName = key.match(keyRegex)[1]\n return {\n ...acc,\n // old preferences marked hidden columns as true, now we mark visible columns as true\n [fieldName]: value === 'false'\n }\n }, {})\n}\n\nexport const getColumnPreferencesToSave = (formName, columns) =>\n Object.keys(columns)\n .reduce((acc, key) => ({\n ...acc,\n // old preferences marked hidden columns as true, now we mark visible columns as true\n [`${formName}.${key}.hidden`]: (!columns[key]).toString()\n }), {})\n","import styled from 'styled-components'\nimport {scale, theme} from 'tocco-ui'\n\nexport const StyledColumnPickerWrapper = styled.div`\n display: grid;\n grid-template-columns: minmax(100%, 700px);\n`\n\nexport const StyledUl = styled.ul`\n list-style-type: none;\n padding-left: ${scale.space(-0.5)};\n margin-bottom: -${scale.space(0)};\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n`\n\nexport const StyledCheckbox = styled.input`\n vertical-align: top;\n margin-right: ${scale.space(-1)} !important; // Nice2 Reset\n\n &:hover {\n cursor: pointer;\n }\n`\n\nexport const StyledButtonWrapper = styled.div`\n position: sticky;\n bottom: 0;\n padding-top: ${scale.space(0)};\n padding-bottom: ${scale.space(0)};\n background-color: ${theme.color('paper')};\n transform: translateY(1.8rem);\n`\n","import PropTypes from 'prop-types'\nimport React, {useState, useMemo} from 'react'\nimport {Button, SearchBox, Typography} from 'tocco-ui'\nimport {intlShape} from 'react-intl'\n\nimport {StyledCheckbox, StyledUl, StyledButtonWrapper, StyledColumnPickerWrapper} from './StyledColumnPicker'\n\nconst ColumnPicker = ({columns, onOk, intl}) => {\n const [selectedColumns, setSelectedColumns] = useState({})\n const [searchTerm, setSearchTerm] = useState(null)\n const items = useMemo(() => columns\n .filter(column => searchTerm === null || column.label.match(new RegExp(searchTerm, 'i')))\n .map(column => <Typography.Li key={column.id}>\n <StyledCheckbox\n type={'checkbox'}\n id={column.id}\n checked={Object.prototype.hasOwnProperty.call(selectedColumns, column.id)\n ? selectedColumns[column.id] : !column.hidden}\n onChange={value => setSelectedColumns({...selectedColumns, [column.id]: value.target.checked})}\n />\n <Typography.Label for={column.id}>{column.label}</Typography.Label>\n </Typography.Li>), [columns, searchTerm, selectedColumns])\n\n return <StyledColumnPickerWrapper>\n <SearchBox\n placeholder={intl.formatMessage({id: 'client.entity-list.preferences.columns.search'})}\n onSearch={setSearchTerm}/>\n <StyledUl>{items}</StyledUl>\n <StyledButtonWrapper>\n <Button onClick={() => onOk(selectedColumns)} look={'raised'}>\n {intl.formatMessage({id: 'client.entity-list.preferences.columns.okButton'})}\n </Button>\n </StyledButtonWrapper>\n </StyledColumnPickerWrapper>\n}\n\nColumnPicker.propTypes = {\n columns: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n hidden: PropTypes.bool.isRequired\n })).isRequired,\n onOk: PropTypes.func.isRequired,\n intl: intlShape.isRequired\n}\n\nexport default ColumnPicker\n","import ColumnPicker from './ColumnPickerContainer'\n\nexport default ColumnPicker\n","import {hot} from 'react-hot-loader/root'\nimport {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport ColumnPicker from './ColumnPicker'\n\nconst mapStateToProps = (state, props) => ({\n columns: props.columns,\n onOk: props.onOk\n})\n\nexport default hot(connect(mapStateToProps)(injectIntl(ColumnPicker)))\n","import {rest, notifier} from 'tocco-app-extensions'\nimport {all, call, put, select, take, takeLatest} from 'redux-saga/effects'\nimport React from 'react'\nimport {channel} from 'redux-saga'\n\nimport * as actions from './actions'\nimport {setPositions, setSorting, setColumns} from './actions'\nimport * as listActions from '../list/actions'\nimport * as listSagas from '../list/sagas'\nimport * as util from '../../util/preferences'\nimport ColumnPicker from '../../components/ColumnPicker'\nimport {getTableColumns} from '../../util/api/forms'\n\nexport const inputSelector = state => state.input\n\nexport const preferencesSelector = state => state.preferences\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.LOAD_PREFERENCES, loadPreferences),\n takeLatest(actions.CHANGE_POSITION, changePosition),\n takeLatest(listActions.SET_SORTING_INTERACTIVE, saveSorting),\n takeLatest(actions.RESET_SORTING, resetSorting),\n takeLatest(actions.RESET_COLUMNS, resetColumns),\n takeLatest(actions.RESET_PREFERENCES, resetPreferences),\n takeLatest(actions.DISPLAY_COLUMN_MODAL, displayColumnModal)\n ])\n}\n\nexport function* loadPreferences() {\n const listState = yield select(listSagas.entityListSelector)\n const formName = `${listState.formName}_list`\n const preferences = yield call(rest.fetchUserPreferences, `${formName}*`)\n yield put(setPositions(util.getPositions(preferences)))\n yield put(setSorting(util.getSorting(preferences)))\n yield put(setColumns(util.getColumns(preferences)))\n}\n\nexport function* changePosition({payload}) {\n const {field, afterFieldPosition, columns} = payload\n let {positions} = yield select(preferencesSelector)\n\n if (Object.keys(positions).length === 0) {\n positions = yield call(util.getPositionsFromColumns, columns)\n }\n\n const newPositions = yield call(util.changePosition, positions, field, afterFieldPosition)\n yield put(setPositions(newPositions))\n const listState = yield select(listSagas.entityListSelector)\n const formName = `${listState.formName}_list`\n yield call(rest.deleteUserPreferences, `${formName}.*.positions`)\n const positionPreferences = yield call(util.getPositionsPreferencesToSave, formName, newPositions)\n yield call(rest.savePreferences, positionPreferences)\n}\n\nexport function* saveSorting() {\n const {sorting: sortings} = yield select(listSagas.listSelector)\n if (sortings.length > 0) {\n const listState = yield select(listSagas.entityListSelector)\n const formName = `${listState.formName}_list`\n yield all([\n call(rest.deleteUserPreferences, `${formName}.sortingField*`),\n call(rest.deleteUserPreferences, `${formName}.sortingDirection*`)\n ])\n const sortingPreferences = sortings.slice(1)\n .map((sorting, index) => util.getAdditionalSortingPreferencesToSave(formName, sorting, index + 1))\n .reduce((acc, sorting) => ({\n ...acc,\n ...sorting\n }), util.getSortingPreferencesToSave(formName, sortings[0]))\n yield call(rest.savePreferences, sortingPreferences)\n }\n}\n\nexport function* resetSorting() {\n const listState = yield select(listSagas.entityListSelector)\n yield all([\n call(rest.deleteUserPreferences, `${listState.formName}_list.sortingField*`),\n call(rest.deleteUserPreferences, `${listState.formName}_list.sortingDirection*`)\n ])\n yield call(listSagas.setSorting)\n yield call(listSagas.reloadData)\n}\n\nexport function* resetPreferences() {\n const listState = yield select(listSagas.entityListSelector)\n yield call(rest.deleteUserPreferences, `${listState.formName}_list.*`)\n yield call(listSagas.setSorting)\n yield call(listSagas.reloadData)\n}\n\nexport function* displayColumnModal() {\n const {formDefinition} = yield select(listSagas.listSelector)\n const {columns: preferencesColumns} = yield select(preferencesSelector)\n const formColumns = getTableColumns(formDefinition, preferencesColumns)\n\n const answerChannel = yield call(channel)\n yield put(notifier.modalComponent(\n `${formDefinition.id}-column-selection`,\n 'client.entity-list.preferences.columns',\n null,\n ({close}) => {\n const onOk = columns => {\n close()\n answerChannel.put(columns)\n }\n\n return <ColumnPicker columns={formColumns} onOk={onOk}/>\n },\n true\n ))\n\n yield saveColumnPreferences(answerChannel, preferencesColumns, formDefinition)\n}\n\nfunction* saveColumnPreferences(answerChannel, preferencesColumns, formDefinition) {\n const selectedColumns = yield take(answerChannel)\n yield put(setColumns({...preferencesColumns, ...selectedColumns}))\n if (Object.entries(selectedColumns).some(([, value]) => value)) {\n yield put(listActions.refresh())\n }\n const columnPreferences = yield call(util.getColumnPreferencesToSave, formDefinition.id, selectedColumns)\n yield call(rest.savePreferences, columnPreferences)\n}\n\nexport function* resetColumns() {\n const listState = yield select(listSagas.entityListSelector)\n yield all([\n call(rest.deleteUserPreferences, `${listState.formName}_list.*.position`),\n call(rest.deleteUserPreferences, `${listState.formName}_list.*.hidden`)\n ])\n yield put(listActions.refresh())\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","import {reducer as form} from 'redux-form'\n\nimport entityListReducer, {sagas as entityListSagas} from './entityList'\nimport listReducer, {sagas as listSagas} from './list'\nimport searchFormReducer, {sagas as searchFormSagas} from './searchForm'\nimport selectionReducer, {sagas as selectionSagas} from './selection'\nimport preferencesReducer, {sagas as preferencesSaga} from './preferences'\n\nexport default {\n entityList: entityListReducer,\n list: listReducer,\n searchForm: searchFormReducer,\n form,\n selection: selectionReducer,\n preferences: preferencesReducer\n}\n\nexport const sagas = [\n entityListSagas,\n listSagas,\n searchFormSagas,\n selectionSagas,\n preferencesSaga\n]\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {intlShape} from 'react-intl'\nimport {reduxForm, Field} from 'redux-form'\nimport {form} from 'tocco-app-extensions'\nimport {SearchBox} from 'tocco-ui'\n\nclass FullTextSearchForm extends React.Component {\n handleSubmit = e => {\n e.preventDefault()\n e.stopPropagation()\n this.props.submitSearchForm()\n }\n\n msg = id => (this.props.intl.formatMessage({id}))\n\n field = props =>\n <SearchBox\n value={props.input.value}\n liveSearch={true}\n onSearch={value => props.input.onChange(value)}\n placeholder={this.msg('client.entity-list.fullTextPlaceholder')}\n />\n\n render() {\n return (\n <form onSubmit={this.handleSubmit}>\n <Field name=\"txtFulltext\" component={this.field}/>\n </form>\n )\n }\n}\n\nFullTextSearchForm.propTypes = {\n intl: intlShape.isRequired,\n submitSearchForm: PropTypes.func.isRequired\n}\n\nexport default reduxForm({\n form: 'searchForm',\n destroyOnUnmount: false\n})(FullTextSearchForm)\n","import FullTextSearchForm from './FullTextSearchForm'\n\nexport default FullTextSearchForm\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport FullTextSearchForm from '../components/FullTextSearchForm'\nimport {submitSearchForm} from '../modules/searchForm/actions'\n\nconst mapActionCreators = {\n submitSearchForm\n}\n\nexport default connect(null, mapActionCreators)(injectIntl(FullTextSearchForm))\n","import styled from 'styled-components'\nimport {StyledLayoutBox, StyledScrollbar} from 'tocco-ui/src/Layout'\n\nconst StyledBasicSearchForm = styled.div`\n ${StyledScrollbar}\n\n && {\n ${StyledLayoutBox} {\n padding-bottom: 0;\n }\n }\n ${({disableSimpleSearch}) => !disableSimpleSearch && `\n max-height: 200px;\n overflow-y: auto;\n padding-right: .5rem;\n `\n }\n`\n\nconst StyledSearchFormButtons = styled.div`\n && {\n width: 100%;\n text-align: center;\n }\n`\n\nexport {\n StyledBasicSearchForm,\n StyledSearchFormButtons\n}\n","import BasicSearchForm from './BasicSearchForm'\n\nexport default BasicSearchForm\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {intlShape} from 'react-intl'\nimport {reduxForm} from 'redux-form'\nimport {Ball} from 'tocco-ui'\nimport {form} from 'tocco-app-extensions'\n\nimport {\n StyledBasicSearchForm,\n StyledSearchFormButtons\n} from './StyledBasicSearchForm'\n\nconst REDUX_FORM_NAME = 'searchForm'\n\nconst BasicSearchForm = ({\n disableSimpleSearch,\n entity,\n form: formName,\n formValues,\n intl,\n preselectedSearchFields,\n searchFormDefinition,\n setShowExtendedSearchForm,\n showExtendedSearchForm,\n simpleSearchFields,\n submitSearchForm\n}) => {\n if (!searchFormDefinition.children) {\n return null\n }\n\n const msg = id => intl.formatMessage({id})\n\n const handleSubmit = e => {\n e.preventDefault()\n e.stopPropagation()\n submitSearchForm()\n }\n\n const isHidden = (preselectedSearchFields, name) => {\n if (!preselectedSearchFields) return false\n const field = preselectedSearchFields.find(f => f.id === name)\n return field && field.hidden\n }\n\n const shouldRenderField = (\n preselectedSearchFields,\n disableSimpleSearch,\n showExtendedSearchForm,\n simpleSearchFields) => name => (\n !isHidden(preselectedSearchFields, name)\n && (\n disableSimpleSearch\n || showExtendedSearchForm\n || simpleSearchFields.includes(name)\n )\n )\n\n const toggleExtendedSearchForm = () => {\n setShowExtendedSearchForm(!showExtendedSearchForm)\n }\n\n const fields = form.getFieldDefinitions(searchFormDefinition)\n const hasExtendedOnlySearchFields = !fields.every(field => simpleSearchFields.includes(field.id))\n\n return <StyledBasicSearchForm disableSimpleSearch={disableSimpleSearch}>\n <form onSubmit={handleSubmit}>\n {hasExtendedOnlySearchFields && !disableSimpleSearch\n && <StyledSearchFormButtons>\n <Ball\n data-cy=\"extend-search-button\"\n icon={`chevron-${showExtendedSearchForm ? 'up' : 'down'}`}\n onClick={toggleExtendedSearchForm}\n title={msg('client.entity-list.extendedSearch')}\n />\n </StyledSearchFormButtons>\n }\n <form.FormBuilder\n entity={entity}\n formName={formName}\n formDefinition={searchFormDefinition}\n formValues={formValues}\n fieldMappingType=\"search\"\n beforeRenderField={shouldRenderField(\n preselectedSearchFields,\n disableSimpleSearch,\n showExtendedSearchForm,\n simpleSearchFields)\n }\n mode=\"search\"\n />\n </form>\n </StyledBasicSearchForm>\n}\n\nBasicSearchForm.propTypes = {\n intl: intlShape.isRequired,\n searchFormDefinition: PropTypes.shape({\n children: PropTypes.array\n }).isRequired,\n submitSearchForm: PropTypes.func.isRequired,\n disableSimpleSearch: PropTypes.bool,\n simpleSearchFields: PropTypes.arrayOf(\n PropTypes.string\n ),\n showExtendedSearchForm: PropTypes.bool,\n setShowExtendedSearchForm: PropTypes.func.isRequired,\n preselectedSearchFields: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n hidden: PropTypes.bool\n })\n ),\n entity: PropTypes.object,\n form: PropTypes.string,\n formValues: PropTypes.object\n}\n\nexport default reduxForm({\n form: REDUX_FORM_NAME,\n destroyOnUnmount: false\n})(BasicSearchForm)\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport BasicSearchForm from '../components/BasicSearchForm'\nimport {\n submitSearchForm,\n setShowExtendedSearchForm\n} from '../modules/searchForm/actions'\n\nconst mapActionCreators = {\n submitSearchForm,\n setShowExtendedSearchForm\n}\n\nconst mapStateToProps = (state, props) => ({\n searchFormDefinition: state.searchForm.formDefinition,\n entityModel: state.list.entityModel,\n searchInputs: state.searchForm.searchInputs,\n disableSimpleSearch: props.disableSimpleSearch || state.searchForm.disableSimpleSearch,\n simpleSearchFields: state.searchForm.simpleSearchFields,\n showExtendedSearchForm: state.searchForm.showExtendedSearchForm,\n preselectedSearchFields: state.input.preselectedSearchFields\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(BasicSearchForm))\n","import styled from 'styled-components'\nimport {StyledScrollbar, theme} from 'tocco-ui'\nimport Split from 'react-split'\n\nexport const StyledSplit = styled(Split)``\n\nexport const StyledSplitWrapper = styled.div`\n height: 100%;\n`\n\nexport const StyledHeader = styled.div`\n background-color: ${theme.color('paper')};\n margin-bottom: 3px;\n display: flex;\n justify-content: flex-end;\n padding: 9px;\n`\n\nexport const AdminSearchGrid = styled.div`\n height: 100%;\n overflow: hidden;\n\n ${StyledSplit} {\n height: calc(100% - 40px);\n display: flex;\n flex-direction: column;\n }\n`\n\nexport const Box = styled.div`\n background-color: ${theme.color('paper')};\n overflow-y: auto;\n padding: .6rem 1rem 0 .6rem;\n ${StyledScrollbar}\n`\n\nexport const StyledGutter = styled.div`\n background-color: ${theme.color('paper')};\n display: flex;\n padding-top: 3px;\n justify-content: center;\n align-items: center;\n height: calc(100% - 1px); //subtract border height from total height\n font-size: 20px;\n border-top: 1px solid ${theme.color('backgroundBody')};\n\n &:hover {\n cursor: row-resize;\n }\n`\n","export const searchFilterCompare = (a, b) => {\n return a.defaultFilter\n ? -1\n : (a.sorting === null) - (b.sorting === null) || a.sorting - b.sorting\n}\n","/* stylelint-disable no-descending-specificity */\nimport styled from 'styled-components'\nimport {Button, scale, StyledSpan, theme} from 'tocco-ui'\n\nexport const SearchFilterListWrapper = styled.div`\n margin-top: .4rem;\n margin-bottom: .4rem;\n`\n\nexport const StyledSpanSearchFilter = styled(StyledSpan)`\n width: 90%;\n`\n\nexport const StyledButton = styled(Button)`\n && {\n display: none;\n background-color: transparent;\n border: 0;\n flex: 1;\n height: auto;\n border-radius: 0;\n padding: 0 ${scale.space(-1)} 0 0;\n\n &:hover * {\n color: ${theme.color('secondary')};\n }\n }\n`\n\nexport const StyledSearchFilterButton = styled.div`\n border-radius: ${theme.radii('medium')};\n display: flex;\n padding: .3rem 0 .3rem 1rem;\n margin-bottom: .2rem;\n background-color: ${({active}) => active && theme.color('secondary')};\n align-items: stretch;\n justify-content: space-between;\n\n && {\n * {\n color: ${({active}) => active && theme.color('paper')};\n }\n }\n\n :hover {\n ${StyledButton} {\n display: flex;\n justify-content: flex-end;\n }\n background-color: ${theme.color('secondaryLight')};\n cursor: pointer;\n\n * {\n color: ${theme.color('paper')};\n }\n }\n`\n\nexport const StyledMessageWrapper = styled.div`\n padding-left: 8px;\n`\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {Typography} from 'tocco-ui'\nimport {FormattedMessage} from 'react-intl'\n\nimport {searchFilterCompare} from './utils'\nimport {\n SearchFilterListWrapper,\n StyledSpanSearchFilter,\n StyledButton,\n StyledSearchFilterButton,\n StyledMessageWrapper\n} from './StyledComponents'\n\nconst SearchFilterButton = ({setActive, active, label}) =>\n <StyledSearchFilterButton active={active} onClick={() => setActive(!active)}>\n <StyledSpanSearchFilter title={label}>{label}</StyledSpanSearchFilter>\n <StyledButton\n onClick={e => {\n setActive(false)\n e.stopPropagation()\n }}\n icon={active ? 'minus' : 'plus'}\n dense />\n </StyledSearchFilterButton>\n\nSearchFilterButton.propTypes = {\n label: PropTypes.string,\n setActive: PropTypes.func.isRequired,\n active: PropTypes.bool\n}\n\nconst AdminSearchForm = ({searchFilters, setSearchFilterActive, executeSearch}) => {\n if (!searchFilters) return null\n\n if (searchFilters.length === 0) {\n return <StyledMessageWrapper>\n <Typography.I>\n <FormattedMessage id=\"client.entity-list.noSearchFilters\"/>\n </Typography.I>\n </StyledMessageWrapper>\n }\n\n return <SearchFilterListWrapper>\n {[...searchFilters]\n .sort(searchFilterCompare)\n .map(searchFilter =>\n <SearchFilterButton\n key={searchFilter.uniqueId}\n active={searchFilter.active}\n label={searchFilter.label}\n setActive={exclusive => {\n setSearchFilterActive(searchFilter.uniqueId, !searchFilter.active, exclusive)\n executeSearch()\n }}\n />\n )\n }\n </SearchFilterListWrapper>\n}\n\nAdminSearchForm.propTypes = {\n searchFilters: PropTypes.arrayOf(PropTypes.object),\n setSearchFilterActive: PropTypes.func.isRequired,\n executeSearch: PropTypes.func.isRequired\n}\n\nexport default AdminSearchForm\n","import {connect} from 'react-redux'\n\nimport SearchFilterList from './SearchFilterList'\nimport {setSearchFilterActive, executeSearch} from '../../modules/searchForm/actions'\n\nconst mapActionCreators = {\n setSearchFilterActive,\n executeSearch\n}\n\nconst mapStateToProps = (state, props) => ({\n searchFilters: state.searchForm.searchFilters\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(SearchFilterList)\n","import SearchFilterList from './SearchFilterListContainer'\n\nexport default SearchFilterList\n","import React, {useRef, useEffect, useState} from 'react'\nimport PropTypes from 'prop-types'\nimport ReactDOM from 'react-dom'\nimport {Icon, Ball} from 'tocco-ui'\nimport {withTheme} from 'styled-components'\nimport {injectIntl, intlShape} from 'react-intl'\n\nimport {StyledSplit, AdminSearchGrid, Box, StyledGutter, StyledHeader, StyledSplitWrapper} from './StyedComponents'\nimport BasicSearchFormContainer from '../../containers/BasicSearchFormContainer'\nimport SearchFilterList from '../SearchFilterList'\n\nconst SEARCH_FILTER_BUTTON_HEIGHT = 28\nconst SEARCH_FILTER_PADDING = 5\nconst MAX_HEIGHT_THRESHOLD = 30\nconst MAX_SIZE_SEARCH_FILTER = 25.5\n\nconst getGutter = () => () => {\n const gutterEl = document.createElement('div')\n ReactDOM.render(\n <StyledGutter>\n <Icon icon=\"horizontal-rule\"/>\n </StyledGutter>, gutterEl\n )\n return gutterEl\n}\n\nconst AdminSearchForm = ({resetSearch, theme, intl, searchFilters}) => {\n const splitWrapperEl = useRef(null)\n const [size, setSize] = useState([MAX_SIZE_SEARCH_FILTER, 100 - MAX_SIZE_SEARCH_FILTER])\n const [searchFilterExpanded, setSearchFilterExpanded] = useState(false)\n const [showExpandSearchFilter, setShowExpandSearchFilter] = useState(false)\n\n const msg = id => intl.formatMessage({id})\n\n useEffect(() => {\n const searchFilterHeight = searchFilters\n ? searchFilters.length * SEARCH_FILTER_BUTTON_HEIGHT + SEARCH_FILTER_PADDING\n : SEARCH_FILTER_BUTTON_HEIGHT\n const splitWrapperHeight = splitWrapperEl.current.clientHeight\n const searchFilterHeightPercentage = Math.ceil(100 / (splitWrapperHeight / searchFilterHeight))\n\n if (!searchFilterExpanded && searchFilterHeightPercentage > MAX_HEIGHT_THRESHOLD) {\n setShowExpandSearchFilter(true)\n setSize([MAX_SIZE_SEARCH_FILTER, 100 - MAX_SIZE_SEARCH_FILTER])\n } else {\n setSize([searchFilterHeightPercentage, 100 - searchFilterHeightPercentage])\n }\n }, [searchFilters, searchFilterExpanded])\n\n return <AdminSearchGrid>\n <StyledHeader>\n {showExpandSearchFilter && <Ball\n icon={searchFilterExpanded ? 'chevron-up' : 'chevron-down'}\n onClick={() => setSearchFilterExpanded(!searchFilterExpanded)}\n />}\n <Ball\n data-cy=\"reset-button\"\n icon=\"times\"\n onClick={resetSearch}\n title={msg('client.entity-list.reset')}\n />\n </StyledHeader>\n <StyledSplitWrapper ref={splitWrapperEl}>\n <StyledSplit\n direction=\"vertical\"\n gutterSize={20}\n sizes={size}\n minSize={[35, 0]}\n gutter={getGutter()}\n >\n <Box>\n <SearchFilterList />\n </Box>\n <Box>\n <BasicSearchFormContainer disableSimpleSearch={true}/>\n </Box>\n </StyledSplit>\n </StyledSplitWrapper>\n </AdminSearchGrid>\n}\n\nAdminSearchForm.propTypes = {\n intl: intlShape.isRequired,\n searchFilters: PropTypes.arrayOf(PropTypes.object),\n resetSearch: PropTypes.func.isRequired,\n theme: PropTypes.object\n}\n\nexport default injectIntl(withTheme(AdminSearchForm))\n","import {connect} from 'react-redux'\n\nimport AdminSearchForm from './AdminSearchForm'\nimport {\n resetSearch\n} from '../../modules/searchForm/actions'\n\nconst mapActionCreators = {\n resetSearch\n}\n\nconst mapStateToProps = (state, props) => ({\n searchFilters: state.searchForm.searchFilters\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(AdminSearchForm)\n","import AdminSearchFormContainer from './AdminSearchFormContainer'\n\nexport default AdminSearchFormContainer\n","import React from 'react'\nimport {Panel} from 'tocco-ui'\nimport styled from 'styled-components'\n\nimport FullTextSearchForm from '../../containers/FullTextSearchFormContainer'\nimport BasicSearchFormContainer from '../../containers/BasicSearchFormContainer'\nimport AdminSearchForm from '../AdminSearchForm'\nimport searchFormTypes, {searchFormTypePropTypes} from '../../util/searchFormTypes'\n\nconst AdminSearchFormWrapper = styled.div`\n height: calc(var(--vh, 1vh) * 100 - 77px); // TODO: This is only a temporary workaround, height needs to be 100%\n overflow-y: auto;\n overflow-x: hidden;\n`\n\nconst SearchView = ({searchFormType}) => {\n if (searchFormType === searchFormTypes.ADMIN) {\n return <AdminSearchFormWrapper><AdminSearchForm/></AdminSearchFormWrapper>\n }\n\n return <Panel.Wrapper isToggleable={false} isFramed={false}>\n <Panel.Body>\n {searchFormType === searchFormTypes.SIMPLE ? <FullTextSearchForm/> : <BasicSearchFormContainer/>}\n </Panel.Body>\n </Panel.Wrapper>\n}\n\nSearchView.propTypes = {\n searchFormType: searchFormTypePropTypes\n}\n\nexport default SearchView\n","import SearchView from './SearchView'\n\nexport default SearchView\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport SearchView from '../components/SearchView'\n\nconst mapActionCreators = {}\n\nconst mapStateToProps = (state, props) => ({\n searchFormType: state.entityList.searchFormType\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(SearchView))\n","import styled from 'styled-components'\nimport {theme} from 'tocco-ui'\n\nexport default styled.div`\n display: flex;\n width: max-content;\n`\n\nexport const StyledButton = styled.span`\n border-radius: ${theme.radii('medium')};\n padding: .3rem 1.3rem;\n display: ${({disabled}) => disabled ? 'none' : 'flex'};\n margin-right: 1rem;\n align-items: center;\n cursor: pointer;\n background-color: ${({active}) => active && theme.color('secondary')};\n\n * {\n color: ${({active}) => active && theme.color('paper')};\n }\n\n &:hover {\n background-color: ${theme.color('secondaryLight')};\n\n * {\n color: ${theme.color('paper')};\n }\n }\n\n && {\n button {\n background-color: transparent;\n margin-left: .5rem;\n margin-top: -.2rem;\n margin-right: -.8rem;\n\n &:hover * {\n color: ${theme.color('secondary')};\n }\n }\n }\n`\n","import SelectionController from './SelectionController'\n\nexport default SelectionController\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {FormattedMessage} from 'react-intl'\nimport {\n Button,\n Typography\n} from 'tocco-ui'\n\nimport StyledSelectionController, {StyledButton} from './StyledSelectionController'\n\nconst SelectionController = props => {\n const msg = id => (props.intl.formatMessage({id}))\n const selectionPossible = props.selection.length !== 0\n\n return (\n <StyledSelectionController>\n <StyledButton\n active={!props.showSelectedRecords}\n onClick={() => {\n if (selectionPossible) {\n props.toggleShowSelectedRecords()\n }\n }}\n >\n <Typography.Span>\n <FormattedMessage\n id=\"client.entity-list.selectionAll\"\n values={{count: props.queryCount}}/>\n </Typography.Span>\n </StyledButton>\n <StyledButton\n active={props.showSelectedRecords}\n disabled={!selectionPossible}\n onClick={() => {\n if (selectionPossible) {\n props.toggleShowSelectedRecords()\n }\n }}\n data-cy=\"selection-controller-selection\"\n >\n <Typography.Span>\n <FormattedMessage\n id=\"client.entity-list.selectionSelection\"\n values={{count: props.selection.length}}/>\n {props.selection.length > 0 && <Button\n data-cy=\"selection-controller-delete-selection\"\n dense\n icon=\"times\"\n title={msg('client.entity-list.clearSelection')}\n onClick={e => {\n e.stopPropagation()\n props.toggleShowSelectedRecords()\n props.clearSelection()\n }}\n />}\n </Typography.Span>\n </StyledButton>\n </StyledSelectionController>\n )\n}\n\nSelectionController.propTypes = {\n clearSelection: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n queryCount: PropTypes.number.isRequired,\n selection: PropTypes.array.isRequired,\n showSelectedRecords: PropTypes.bool,\n toggleShowSelectedRecords: PropTypes.func.isRequired\n}\n\nexport default SelectionController\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport SelectionController from '../components/SelectionController'\nimport {clearSelection, toggleShowSelectedRecords} from '../modules/selection/actions'\n\nconst mapActionCreators = {\n clearSelection,\n toggleShowSelectedRecords\n}\n\nconst mapStateToProps = (state, props) => (\n {\n queryCount: state.selection.queryCount,\n selection: state.selection.selection,\n showSelectedRecords: state.selection.showSelectedRecords\n }\n)\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(SelectionController))\n","import React from 'react'\nimport {BallMenu, MenuItem} from 'tocco-ui'\nimport {connect} from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {FormattedMessage} from 'react-intl'\n\nimport {displayColumnModal, resetSorting, resetPreferences, resetColumns} from '../../modules/preferences/actions'\n\nconst NavigationCellHeader = props =>\n <BallMenu buttonProps={{icon: 'ellipsis-v'}}>\n <MenuItem onClick={props.displayColumnModal}>\n <FormattedMessage id=\"client.entity-list.preferences.columns\"/>\n </MenuItem>\n <MenuItem onClick={props.resetColumns}>\n <FormattedMessage id=\"client.entity-list.preferences.columns.reset\"/>\n </MenuItem>\n <MenuItem onClick={props.resetSorting}><FormattedMessage id=\"client.entity-list.sorting.reset\"/></MenuItem>\n <MenuItem onClick={props.resetPreferences}><FormattedMessage id=\"client.entity-list.preferences.reset\"/></MenuItem>\n </BallMenu>\n\nNavigationCellHeader.propTypes = {\n displayColumnModal: PropTypes.func.isRequired,\n resetSorting: PropTypes.func.isRequired,\n resetPreferences: PropTypes.func.isRequired,\n resetColumns: PropTypes.func.isRequired\n}\n\nconst mapActionCreators = {\n displayColumnModal,\n resetSorting,\n resetPreferences,\n resetColumns\n}\n\nexport default connect(null, mapActionCreators)(NavigationCellHeader)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {Icon} from 'tocco-ui'\n\nimport NavigationCellHeader from './NavigationCellHeader'\n\nconst CellRenderer = ({rowData, linkFactory}) =>\n <span\n onClick={e => e.stopPropagation()}\n data-cy=\"list-navigation-arrow\"\n >\n {linkFactory.detail(null, null, rowData.__key, <Icon icon=\"arrow-right\"/>)}\n </span>\n\nCellRenderer.propTypes = {\n rowData: PropTypes.shape({\n __key: PropTypes.string.isRequired\n }).isRequired,\n linkFactory: PropTypes.shape({\n detail: PropTypes.func.isRequired\n }).isRequired\n}\n\nexport const navigationCell = linkFactory => ({\n id: 'navigation-column',\n fixedPosition: true,\n width: 30,\n resizable: false,\n dynamic: false,\n HeaderRenderer: NavigationCellHeader,\n CellRenderer: props => <CellRenderer {...props} linkFactory={linkFactory}/>\n})\n","import Table from './Table'\n\nexport default Table\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {js} from 'tocco-util'\nimport {columnPropType, selectionStylePropType, Table as UiTable} from 'tocco-ui'\nimport _get from 'lodash/get'\n\nimport {navigationCell} from './navigationCell'\n\nconst Table = props =>\n <UiTable\n data={props.entities}\n columns={[\n ...(props.showLink && props.linkFactory ? [navigationCell(props.linkFactory)] : []),\n ...props.columnDefinitions.sort((a, b) =>\n _get(props.positions, [a.id]) - _get(props.positions, [b.id])\n )\n ]}\n dataLoadingInProgress={props.inProgress}\n paginationInfo={{\n currentPage: props.currentPage,\n totalCount: props.entityCount,\n recordsPerPage: props.limit\n }}\n onPageChange={props.changePage}\n onSortingChange={props.setSortingInteractive}\n selectionStyle={props.tableSelectionStyle}\n onSelectionChange={props.onSelectChange}\n selection={props.selection}\n onRowClick={props.onRowClick}\n clickable={props.clickable}\n onColumnPositionChange={props.changePosition}\n />\n\nTable.propTypes = {\n columnDefinitions: PropTypes.arrayOf(columnPropType).isRequired,\n entities: PropTypes.array.isRequired,\n entityCount: PropTypes.number,\n inProgress: PropTypes.bool,\n currentPage: PropTypes.number,\n limit: PropTypes.number,\n onRowClick: PropTypes.func,\n clickable: PropTypes.bool,\n setSortingInteractive: PropTypes.func,\n changePage: PropTypes.func.isRequired,\n tableSelectionStyle: selectionStylePropType,\n onSelectChange: PropTypes.func,\n selection: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n parent: PropTypes.shape({\n key: PropTypes.string.isRequired,\n model: PropTypes.string.isRequired,\n reverseRelationName: PropTypes.string\n }),\n showLink: PropTypes.bool,\n linkFactory: PropTypes.objectOf(PropTypes.func),\n changePosition: PropTypes.func.isRequired,\n positions: PropTypes.objectOf(PropTypes.number)\n}\n\nconst areEqual = (prevProps, nextProps) => {\n const diff = js.difference(prevProps, nextProps)\n return Object.keys(diff).length === 0\n}\n\nexport default React.memo(Table, areEqual)\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport Table from '../components/Table'\nimport {\n changePage,\n initialize,\n onRowClick,\n setSortingInteractive\n} from '../modules/list/actions'\nimport {\n onSelectChange,\n setSelection\n} from '../modules/selection/actions'\nimport {\n changePosition,\n resetSorting\n} from '../modules/preferences/actions'\n\nconst mapActionCreators = {\n initialize,\n changePage,\n setSortingInteractive,\n onRowClick,\n onSelectChange,\n setSelection,\n changePosition,\n resetSorting\n}\n\nconst mapStateToProps = (state, props) => ({\n currentPage: state.list.currentPage,\n entities: state.list.entities,\n entityCount: state.list.entityCount,\n limit: state.list.limit,\n inProgress: state.list.inProgress,\n tableSelectionStyle: state.selection.tableSelectionStyle,\n clickable: state.list.formClickable,\n selection: state.selection.selection,\n parent: state.entityList.parent,\n showLink: state.list.showLink,\n linkFactory: state.formData.linkFactory.linkFactory,\n positions: state.preferences.positions\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(Table))\n","export const deriveSelectionFromState = state => {\n const {selection} = state\n\n if (selection.selection.length <= 0) {\n return {\n entityName: state.entityList.entityName,\n type: 'QUERY',\n query: selection.query,\n count: selection.queryCount || 0\n }\n }\n\n return {\n entityName: state.entityList.entityName,\n type: 'ID',\n ids: selection.selection,\n count: selection.selection.length || 0\n }\n}\n","import {connect} from 'react-redux'\nimport {actions} from 'tocco-app-extensions'\n\nimport {deriveSelectionFromState} from '../util/actions'\n\nconst mapStateToProps = (state, props) => ({\n selection: deriveSelectionFromState(state)\n})\n\nconst mapActionCreators = {}\n\nexport default connect(mapStateToProps, mapActionCreators)(actions.Action)\n","import PropTypes from 'prop-types'\nimport React, {useEffect, useMemo} from 'react'\nimport {intlShape} from 'react-intl'\nimport {LoadMask, theme} from 'tocco-ui'\nimport {js} from 'tocco-util'\nimport styled from 'styled-components'\n\nimport SelectionControllerContainer from '../../containers/SelectionControllerContainer'\nimport {getColumnDefinition, getTable, getActionBar} from '../../util/api/forms'\nimport TableContainer from '../../containers/TableContainer'\nimport ActionContainer from '../../containers/ActionContainer'\n\nexport const ListWrapper = styled.div`\n grid-row-start: table-start;\n /* safari only fix to ensure proper height in modal */\n ${({searchFormPosition}) => searchFormPosition !== 'left' && `\n @media not all and (min-resolution: .001dpcm)\n { @supports (-webkit-appearance:none) and (stroke-color: transparent) {\n height: -webkit-fit-content;\n }\n }\n `\n }\n`\n\nconst ActionWrapper = styled.div`\n display: flex;\n background-color: ${theme.color('paper')};\n margin-bottom: 3px;\n padding: 0 8px 8px;\n grid-row-start: action-start;\n flex-wrap: wrap;\n\n & > * {\n margin-top: 8px;\n }\n`\n\nconst StyledListView = styled.div`\n display: grid;\n grid-template-rows: [action-start] auto [table-start] minmax(200px, 1fr);\n height: 100%;\n`\n\nconst ListView = ({\n dataLoadingInProgress,\n formDefinition,\n parent,\n searchFormPosition,\n showActions,\n showSelectionController,\n sorting,\n columnDisplayPreferences,\n initialize,\n intl\n}) => {\n useEffect(() => {\n initialize()\n }, [])\n\n const msg = (id, values = {}) => intl.formatMessage({id}, values)\n\n const List = useMemo(() => {\n if (formDefinition) {\n const table = getTable(formDefinition)\n const columnsDefinitions = getColumnDefinition(table, sorting, parent, intl, columnDisplayPreferences)\n\n return <ListWrapper searchFormPosition={searchFormPosition} key={`tableWrapper-${table.id}`}>\n <TableContainer\n key={`table-${table.id}`}\n columnDefinitions={columnsDefinitions}\n />\n </ListWrapper>\n }\n }, [formDefinition, sorting, columnDisplayPreferences])\n\n const ActionBar = useMemo(() => {\n if (formDefinition) {\n const actionBar = getActionBar(formDefinition)\n const content = [\n ...showSelectionController\n ? [<SelectionControllerContainer key=\"selectionController\"/>] : [],\n ...showActions !== false\n ? [<ActionContainer\n key={`listAction-${actionBar.id}`}\n definition={actionBar}\n parent={parent}\n disabled={dataLoadingInProgress}\n />] : []\n ]\n\n if (content.length > 0) {\n return <ActionWrapper key={`listActionWrapper-${actionBar.id}`}>\n {content}\n </ActionWrapper>\n }\n }\n }, [dataLoadingInProgress, formDefinition])\n\n return (\n <LoadMask\n required={[formDefinition]}\n loadingText={msg('client.entity-list.loadingText')}\n >\n <StyledListView>\n {ActionBar}\n {List}\n </StyledListView>\n </LoadMask>\n )\n}\n\nListView.propTypes = {\n intl: intlShape.isRequired,\n initialize: PropTypes.func.isRequired,\n formDefinition: PropTypes.shape({\n children: PropTypes.array\n }),\n selection: PropTypes.arrayOf(PropTypes.string),\n currentPageIds: PropTypes.arrayOf(PropTypes.string),\n parent: PropTypes.shape({\n key: PropTypes.string.isRequired,\n model: PropTypes.string.isRequired,\n reverseRelationName: PropTypes.string\n }),\n dataLoadingInProgress: PropTypes.bool,\n showSelectionController: PropTypes.bool,\n entityName: PropTypes.string,\n searchFormPosition: PropTypes.oneOf(['top', 'left']),\n showActions: PropTypes.bool,\n sorting: PropTypes.arrayOf(PropTypes.shape({\n field: PropTypes.string,\n order: PropTypes.string\n })),\n columnDisplayPreferences: PropTypes.objectOf(PropTypes.bool)\n}\n\nconst areEqual = (prevProps, nextProps) => {\n const diff = Object.keys(js.difference(prevProps, nextProps))\n return diff.length === 0\n}\n\nexport default React.memo(ListView, areEqual)\n","import ListView from './ListView'\n\nexport default ListView\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport ListView from '../components/ListView'\nimport {initialize} from '../modules/list/actions'\n\nconst mapActionCreators = {\n initialize\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n formDefinition: state.list.formDefinition,\n selection: state.selection.selection,\n currentPageIds: state.list.entities.map(e => e.__key),\n entityName: state.entityList.entityName,\n parent: state.entityList.parent,\n dataLoadingInProgress: state.list.inProgress,\n showSelectionController: state.selection.showSelectionController,\n searchFormPosition: state.input.searchFormPosition,\n showActions: state.input.showActions,\n sorting: state.list.sorting,\n columnDisplayPreferences: state.preferences.columns\n }\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(ListView))\n","import styled from 'styled-components'\n\nexport const TopPositioning = styled.div`\n height: 100%;\n display: grid;\n row-gap: 8px;\n grid-template-areas:\n 'search'\n 'list';\n grid-auto-rows: auto minmax(400px, 1fr);\n /* safari only fix to ensure proper height in modal */\n @media not all and (min-resolution: .001dpcm)\n { @supports (-webkit-appearance:none) and (stroke-color: transparent) {\n grid-auto-rows: auto 1fr;\n }\n }\n\n /* remove bottom space and set width in modal */\n ${({searchFormType}) => searchFormType !== 'simple' && `\n grid-template-columns: minmax(100%, 700px);\n `\n }\n`\n\nexport const LeftPositioning = styled.div`\n display: grid;\n grid: 'search list' / minmax(350px, 16%) auto;\n column-gap: 1rem;\n\n @media (max-width: 600px) {\n column-gap: 8px;\n }\n`\n\nexport const SearchGrid = styled.div`\n grid-area: search;\n`\n\nexport const ListGrid = styled.div`\n grid-area: list;\n display: flex;\n\n /* safari only fix to ensure proper height in modal */\n ${({searchFormType}) => searchFormType !== 'simple' && `\n @media not all and (min-resolution: .001dpcm)\n { @supports (-webkit-appearance:none) and (stroke-color: transparent) {\n height: -webkit-fit-content;\n }\n }\n `\n }\n`\n","import PropTypes from 'prop-types'\nimport React, {useEffect} from 'react'\n\nimport SearchViewContainer from '../../containers/SearchViewContainer'\nimport ListViewContainer from '../../containers/ListViewContainer'\nimport {TopPositioning, LeftPositioning, ListGrid, SearchGrid} from './StyledComponents'\nimport searchFormTypes, {searchFormTypePropTypes} from '../../util/searchFormTypes'\n\nconst EntityList = ({\n initialize,\n initializeSearchForm,\n searchFormType,\n searchFormPosition,\n loadPreferences\n}) => {\n useEffect(() => {\n initialize()\n initializeSearchForm()\n loadPreferences()\n }, [])\n\n const List = () => (\n <ListViewContainer/>\n )\n\n if (searchFormType === searchFormTypes.NONE) {\n return <List/>\n }\n\n const PositioningContainer = searchFormPosition === 'left' ? LeftPositioning : TopPositioning\n\n return (\n <PositioningContainer searchFormType={searchFormType}>\n <SearchGrid>\n <SearchViewContainer/>\n </SearchGrid>\n <ListGrid searchFormType={searchFormType}>\n <List/>\n </ListGrid>\n </PositioningContainer>\n )\n}\n\nEntityList.propTypes = {\n initialize: PropTypes.func.isRequired,\n initializeSearchForm: PropTypes.func.isRequired,\n loadPreferences: PropTypes.func.isRequired,\n searchFormType: searchFormTypePropTypes,\n searchFormPosition: PropTypes.oneOf(['top', 'left'])\n}\n\nexport default EntityList\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport {hot} from 'react-hot-loader/root'\n\nimport EntityList from './EntityList'\nimport {initialize} from '../../modules/entityList/actions'\nimport {initialize as initializeSearchForm} from '../../modules/searchForm/actions'\nimport {loadPreferences} from '../../modules/preferences/actions'\n\nconst mapActionCreators = {\n initialize,\n initializeSearchForm,\n loadPreferences\n}\n\nconst mapStateToProps = state => ({\n searchFormType: state.input.searchFormType,\n searchFormPosition: state.input.searchFormPosition\n})\n\nexport default hot(connect(mapStateToProps, mapActionCreators)(injectIntl(EntityList)))\n","import EntityList from './EntityListContainer'\n\nexport default EntityList\n","import {\n setSearchFormType,\n setFormName,\n setEntityName,\n setParent,\n setSearchFormPosition\n} from './modules/entityList/actions'\nimport {\n setDisableSimpleSearch,\n setSimpleSearchFields\n} from './modules/searchForm/actions'\nimport {\n setLimit,\n setSearchFilters,\n setFormDefinition as setListFormDefinition,\n setShowLink\n} from './modules/list/actions'\nimport {setSelection} from './modules/selection/actions'\n\nconst isDefined = value => !(value === undefined || value === null)\n\nexport const getDispatchActions = (input, init) =>\n actionSettings.reduce((acc, actionSetting) => {\n if (isDefined(input[actionSetting.name])) {\n acc.push(actionSetting.action(...actionSetting.argsFactory(input)))\n } else if (init && actionSetting.defaultInitalValue) {\n acc.push(actionSetting.action(actionSetting.defaultInitalValue))\n }\n\n return acc\n }, [])\n\nconst actionSettings = [\n {\n name: 'entityName',\n action: setEntityName,\n argsFactory: input => [input.entityName]\n },\n {\n name: 'formName',\n action: setFormName,\n argsFactory: input => [input.formName]\n },\n {\n name: 'limit',\n action: setLimit,\n argsFactory: input => [input.limit]\n },\n {\n name: 'searchFilters',\n action: setSearchFilters,\n argsFactory: input => [input.searchFilters]\n },\n {\n name: 'searchFormType',\n action: setSearchFormType,\n argsFactory: input => [input.searchFormType]\n },\n {\n name: 'searchFormPosition',\n action: setSearchFormPosition,\n argsFactory: input => [input.searchFormPosition]\n },\n {\n name: 'disableSimpleSearch',\n action: setDisableSimpleSearch,\n argsFactory: input => [input.disableSimpleSearch]\n },\n {\n name: 'simpleSearchFields',\n action: setSimpleSearchFields,\n argsFactory: input => [input.simpleSearchFields]\n },\n {\n name: 'selection',\n type: 'boolean',\n action: setSelection,\n argsFactory: input => [input.selection]\n },\n {\n name: 'parent',\n action: setParent,\n argsFactory: input => [input.parent]\n },\n {\n name: 'listFormDefinition',\n action: setListFormDefinition,\n argsFactory: input => [input.listFormDefinition]\n },\n {\n name: 'showLink',\n action: setShowLink,\n argsFactory: input => [input.showLink]\n }\n]\n","import {put} from 'redux-saga/effects'\n\nimport {navigateToCreate, navigateToAction} from './modules/list/actions'\n\nexport default {\n new: function* () {\n yield put(navigateToCreate())\n },\n fullscreen: function* (definition, selection) {\n yield put(navigateToAction(definition, selection))\n }\n}\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {reducer as reducerUtil} from 'tocco-util'\nimport {\n appFactory,\n notifier,\n errorLogging,\n actionEmitter,\n externalEvents,\n actions,\n formData\n} from 'tocco-app-extensions'\nimport _pickBy from 'lodash/pickBy'\nimport _isEqual from 'lodash/isEqual'\nimport _isEmpty from 'lodash/isEmpty'\nimport SimpleFormApp from 'tocco-simple-form/src/main'\nimport {hot} from 'react-hot-loader/root'\n\nimport reducers, {sagas} from './modules/reducers'\nimport EntityList from './components/EntityList'\nimport {getDispatchActions} from './input'\nimport {selectionStylePropType} from './util/selectionStyles'\nimport customActions from './customActions'\nimport {searchFormTypePropTypes} from './util/searchFormTypes'\n\nconst packageName = 'entity-list'\n\nconst EXTERNAL_EVENTS = [\n 'onRowClick',\n 'onNavigateToCreate',\n 'onNavigateToAction',\n 'emitAction',\n 'onSelectChange',\n 'onStoreCreate'\n]\n\nconst initApp = (id, input, events = {}, publicPath) => {\n const content = <EntityList/>\n\n let dispatchActions\n let store = input.store\n\n if (!store) {\n store = appFactory.createStore(reducers, sagas, input, packageName)\n\n externalEvents.addToStore(store, events)\n actionEmitter.addToStore(store, events.emitAction)\n errorLogging.addToStore(store, false)\n notifier.addToStore(store, false)\n actions.addToStore(store, {\n formApp: SimpleFormApp,\n listApp: EntityListApp,\n customActions,\n appComponent: input.actionAppComponent\n })\n formData.addToStore(store, {listApp: EntityListApp, linkFactory: input.linkFactory})\n\n dispatchActions = getDispatchActions(input, true)\n\n store.dispatch(externalEvents.fireExternalEvent('onStoreCreate', store))\n }\n\n const app = appFactory.createApp(\n packageName,\n content,\n store,\n {\n input,\n events,\n actions: dispatchActions,\n publicPath,\n textResourceModules: ['component', 'common']\n }\n )\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 return app\n}\n\n(() => {\n if (__DEV__ && __PACKAGE_NAME__ === 'entity-list') {\n const input = require('./dev/input.json')\n\n if (!__NO_MOCK__) {\n const fetchMock = require('fetch-mock')\n const setupFetchMocks = require('./dev/fetchMocks').default\n setupFetchMocks(packageName, fetchMock)\n fetchMock.spy()\n }\n\n const app = initApp('id', input)\n appFactory.renderApp(app.component)\n } else {\n appFactory.registerAppInRegistry(packageName, initApp)\n }\n})()\n\nclass EntityListApp extends React.Component {\n constructor(props) {\n super(props)\n\n const events = EXTERNAL_EVENTS.reduce((events, event) => {\n if (props[event]) {\n events[event] = props[event]\n }\n return events\n }, {})\n\n this.app = initApp(props.id, props, events)\n }\n\n componentDidUpdate(prevProps) {\n const changedProps = _pickBy(this.props, (value, key) => !_isEqual(value, prevProps[key]))\n if (!_isEmpty(changedProps)) {\n getDispatchActions(changedProps).forEach(action => {\n this.app.store.dispatch(action)\n })\n }\n }\n\n render() {\n return this.app.component\n }\n}\n\nEntityListApp.propTypes = {\n id: PropTypes.string.isRequired,\n entityName: PropTypes.string.isRequired,\n formName: PropTypes.string.isRequired,\n store: PropTypes.object,\n limit: PropTypes.number,\n searchFormType: searchFormTypePropTypes,\n searchFormPosition: PropTypes.oneOf(['top', 'left']),\n searchFilters: PropTypes.arrayOf(PropTypes.string),\n preselectedSearchFields: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number),\n PropTypes.arrayOf(PropTypes.string)\n ]),\n hidden: PropTypes.bool\n })\n ),\n tql: PropTypes.string,\n disableSimpleSearch: PropTypes.bool,\n simpleSearchFields: PropTypes.string,\n onSelectChange: PropTypes.func,\n selectionStyle: selectionStylePropType,\n selection: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n ...EXTERNAL_EVENTS.reduce((propTypes, event) => {\n propTypes[event] = PropTypes.func\n return propTypes\n }, {}),\n selectOnRowClick: PropTypes.bool,\n parent: PropTypes.shape({\n id: PropTypes.string,\n value: PropTypes.string\n }),\n onNavigateToAction: PropTypes.func,\n onNavigateToCreate: PropTypes.func,\n actionAppComponent: PropTypes.func\n}\n\nexport default hot(EntityListApp)\n","export const LOAD_RELATION_ENTITIES = 'formData/LOAD_RELATION_ENTITIES'\nexport const SET_RELATION_ENTITIES = 'formData/SET_RELATION_ENTITIES'\nexport const SET_RELATION_ENTITIES_LOADING = 'formData/SET_RELATION_ENTITIES_LOADING'\n\nexport const loadRelationEntities = (fieldName, entityName, options) => ({\n type: LOAD_RELATION_ENTITIES,\n payload: {\n fieldName,\n entityName,\n options\n }\n})\n\nexport const setRelationEntityLoading = fieldName => ({\n type: SET_RELATION_ENTITIES_LOADING,\n payload: {\n fieldName\n }\n})\n\nexport const setRelationEntities = (fieldName, entities, moreEntitiesAvailable = false) => ({\n type: SET_RELATION_ENTITIES,\n payload: {\n fieldName,\n entities,\n moreEntitiesAvailable\n }\n})\n","import * as actions from './actions'\n\nexport const setRelationEntities = (state, {payload: {fieldName, entities, moreEntitiesAvailable}}) => (\n {\n ...state,\n data: {\n ...state.data,\n [fieldName]: {\n data: entities,\n isLoading: false,\n moreEntitiesAvailable\n }\n }\n }\n)\n\nexport const setRelationEntitiesLoading = (state, {payload: {fieldName}}) => (\n {\n ...state,\n data: {\n ...state.data,\n [fieldName]: {\n isLoading: true,\n data: []\n }\n }\n }\n)\n\nconst ACTION_HANDLERS = {\n [actions.SET_RELATION_ENTITIES]: setRelationEntities,\n [actions.SET_RELATION_ENTITIES_LOADING]: setRelationEntitiesLoading\n}\n\nconst initialState = {\n data: {}\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","export const LOAD_TOOLTIP = 'formData/LOAD_TOOLTIP'\nexport const SET_TOOLTIP = 'formData/SET_TOOLTIP'\n\nexport const loadTooltip = (entity, id) => ({\n type: LOAD_TOOLTIP,\n payload: {\n entity,\n id\n }\n})\n\nexport const setToolTip = (entity, id, tooltip) => ({\n type: SET_TOOLTIP,\n payload: {\n entity,\n id,\n tooltip\n }\n})\n","import * as actions from './actions'\n\nexport const setToolTip = (state, {payload: {entity, id, tooltip}}) => (\n {\n ...state,\n data: {\n ...state.data,\n [entity]: {\n ...state.data[entity],\n [id]: tooltip\n }\n }\n }\n)\n\nconst ACTION_HANDLERS = {\n [actions.SET_TOOLTIP]: setToolTip\n}\n\nconst initialState = {\n data: {}\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 {all, call, put, select, takeEvery} from 'redux-saga/effects'\nimport _pick from 'lodash/pick'\nimport {api} from 'tocco-util'\n\nimport * as relationEntitiesActions from './actions'\nimport rest from '../../rest'\n\nexport default function* sagas() {\n yield all([\n takeEvery(relationEntitiesActions.LOAD_RELATION_ENTITIES, loadRelationEntity)\n ])\n}\n\nexport function* enhanceEntitiesWithDisplays(entities) {\n const requestedDisplays = yield call(api.getDisplayRequest, entities)\n const displays = yield call(rest.fetchDisplays, requestedDisplays)\n return entities.map(entity => ({...entity, display: displays[entity.model][entity.key]}))\n}\n\nexport function* loadRelationEntity({payload: {fieldName, entityName, options = {}}}) {\n const fieldData = yield select(fieldDataSelector, fieldName)\n if (!dataLoaded(fieldData) || options.forceReload) {\n yield put(relationEntitiesActions.setRelationEntityLoading(fieldName))\n const query = yield call(getQuery, options)\n const requestOptions = {\n method: 'GET'\n }\n\n let entities = yield call(rest.fetchEntities, entityName, query, requestOptions)\n entities = yield call(enhanceEntitiesWithDisplays, entities)\n entities = entities.map(entity => _pick(entity, api.relevantRelationAttributes))\n const moreEntitiesAvailable = options.limit ? entities.length > options.limit : false\n yield put(\n relationEntitiesActions.setRelationEntities(\n fieldName, options.limit ? entities.splice(0, options.limit) : entities, moreEntitiesAvailable)\n )\n }\n}\n\nexport const fieldDataSelector = (state, fieldName) => state.formData.relationEntities.data[fieldName]\n\nconst dataLoaded = fieldData => !!(fieldData && fieldData.data && fieldData.data.length > 0)\n\nexport const getQuery = options => (\n {\n ...(options.limit ? {limit: options.limit + 1} : {}),\n ...(options.searchTerm ? {search: options.searchTerm} : {}),\n ...(options.sorting ? {sorting: options.sorting} : {})\n }\n)\n","import _get from 'lodash/get'\nimport {all, call, put, select, takeEvery} from 'redux-saga/effects'\n\nimport * as tooltipActions from './actions'\nimport rest from '../../rest'\n\nexport default function* sagas() {\n yield all([\n takeEvery(tooltipActions.LOAD_TOOLTIP, loadToolTip)\n ])\n}\n\nexport const tooltipSelector = (state, entityName, id) =>\n _get(state, `formData.tooltips.data.${entityName}.${id}`, null)\n\nexport function* loadToolTip({payload: {entity, id}}) {\n if (entity) {\n const tooltip = yield select(tooltipSelector, entity, id)\n\n if (tooltip == null) {\n const display = yield call(rest.fetchDisplay, entity, id, 'tooltip')\n yield put(tooltipActions.setToolTip(entity, id, display))\n }\n }\n}\n","export const OPEN_ADVANCED_SEARCH = 'formData/OPEN_ADVANCED_SEARCH'\nexport const ADVANCED_SEARCH_UPDATE = 'formData/ADVANCED_SEARCH_UPDATE'\nexport const ADVANCED_SEARCH_CLOSE = 'formData/ADVANCED_SEARCH_CLOSE'\n\nexport const openAdvancedSearch = (formName, formField, value) => ({\n type: OPEN_ADVANCED_SEARCH,\n payload: {\n formName,\n formField,\n value\n }\n})\n\nexport const advancedSearchUpdate = ids => ({\n type: ADVANCED_SEARCH_UPDATE,\n payload: {\n ids\n }\n})\n\nexport const advancedSearchClose = () => ({\n type: ADVANCED_SEARCH_CLOSE\n})\n","export const CHANGE_FIELD_VALUE = 'formData/CHANGE_FIELD_VALUE'\nexport const TOUCH_FIELD = 'formData/TOUCH_FIELD'\n\nexport const changeFieldValue = (formName, fieldName, value) => ({\n type: CHANGE_FIELD_VALUE,\n payload: {\n formName,\n fieldName,\n value\n }\n})\n\nexport const touchField = (formName, fieldName) => ({\n type: TOUCH_FIELD,\n payload: {\n formName,\n fieldName\n }\n})\n","import styled from 'styled-components'\nimport {scale} from 'tocco-ui'\n\nexport const StyledAdvancedSearch = styled.div`\n && {\n > *:not(:last-child) {\n margin-bottom: ${scale.space(-1)};\n }\n }\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Button} from 'tocco-ui'\nimport {FormattedMessage} from 'react-intl'\nimport uuid from 'uuid/v4'\n\nimport {StyledAdvancedSearch} from './StyledAdvancedSearch'\n\nconst AdvancedSearch = props =>\n <StyledAdvancedSearch>\n <props.ListApp\n id={`advancedSearch-${uuid()}`}\n entityName={props.entityName}\n formName={props.formName}\n listFormDefinition={props.listFormDefinition}\n limit={15}\n showSearchForm={true}\n onSelectChange={selection => { props.onSelectionChange(selection) }}\n selection={props.selection}\n emitAction={props.emitAction}\n selectionStyle={props.multi ? 'multi' : 'single'}\n selectOnRowClick={true}\n disableSelectionController={true}\n showActions={false}\n />\n <div className=\"advanced-search-button-wrapper\">\n <Button look=\"raised\" onClick={props.onOkClick}>\n <FormattedMessage id=\"client.common.ok\"/>\n </Button>\n </div>\n </StyledAdvancedSearch>\n\nAdvancedSearch.propTypes = {\n ListApp: PropTypes.func.isRequired,\n entityName: PropTypes.string.isRequired,\n formName: PropTypes.string.isRequired,\n listFormDefinition: PropTypes.shape({\n children: PropTypes.arrayOf(PropTypes.object)\n }),\n emitAction: PropTypes.func.isRequired,\n selection: PropTypes.array,\n field: PropTypes.string,\n onSelectionChange: PropTypes.func,\n onOkClick: PropTypes.func,\n appId: PropTypes.string,\n showSearchForm: PropTypes.bool,\n multi: PropTypes.bool\n}\n\nexport default AdvancedSearch\n","import {connect} from 'react-redux'\n\nimport actionEmitter from '../../actionEmitter'\nimport AdvancedSearch from './AdvancedSearch'\n\nconst mapActionCreators = {\n emitAction: actionEmitter.dispatchEmittedAction\n}\n\nexport default connect(null, mapActionCreators)(AdvancedSearch)\n","import React from 'react'\n\nimport AdvancedSearchContainer from './AdvancedSearchContainer'\n\nexport const getSelection = (value, multi) => value ? multi ? value.map(v => v.key) : [value.key] : []\n\nexport const getValue = (entities, multi) =>\n multi ? entities : (entities.length > 0 ? {\n key: entities[0].key,\n display: entities[0].display\n } : null)\n\nexport const getAdvancedSearchComponent\n = (listApp, entity, formName, listFormDefinition, selection, onSelectionChange, onOkClick, fieldId, multi) =>\n () =>\n <AdvancedSearchContainer\n ListApp={listApp}\n entityName={entity}\n formName={formName}\n listFormDefinition={listFormDefinition}\n selection={selection}\n onSelectionChange={onSelectionChange}\n onOkClick={onOkClick}\n field={fieldId}\n multi={multi}\n />\n","import {channel} from 'redux-saga'\nimport uuid from 'uuid/v4'\nimport {all, call, put, takeEvery, take, spawn, select} from 'redux-saga/effects'\nimport {api} from 'tocco-util'\n\nimport notifier from './../../notifier'\nimport rest from '../../rest'\nimport * as advancedSearchActions from './actions'\nimport * as valueActions from '../values/actions'\nimport {getSelection, getValue, getAdvancedSearchComponent} from './utils'\n\nexport const textResourceSelector = (state, key) => state.intl.messages[key] || key\n\nexport default function* sagas(config) {\n yield all([\n takeEvery(advancedSearchActions.OPEN_ADVANCED_SEARCH, openAdvancedSearch, config)\n ])\n}\n\nexport function* openAdvancedSearch(config, {payload}) {\n const {listApp} = config\n const {formName, formField, value} = payload\n\n const {id: fieldId, label, formBase: fieldFormBase, targetEntity: entity, dataType} = formField\n const multi = dataType === 'multi-remote-field'\n const remoteFieldFormName = fieldFormBase || entity\n const listFormDefinition = yield call(rest.fetchForm, remoteFieldFormName, 'remotefield')\n const answerChannel = yield call(channel)\n const modalId = yield call(uuid)\n const advancedSearchTitle = yield select(textResourceSelector, 'client.common.advancedSearch')\n const selection = yield call(getSelection, value, multi)\n\n const advancedSearchComponent = getAdvancedSearchComponent(\n listApp,\n entity,\n remoteFieldFormName,\n listFormDefinition,\n selection,\n ids => { answerChannel.put(advancedSearchActions.advancedSearchUpdate(ids)) },\n () => { answerChannel.put(advancedSearchActions.advancedSearchClose()) },\n fieldId,\n multi)\n\n yield put(notifier.modalComponent(modalId, `${label}: ${advancedSearchTitle}`, null, advancedSearchComponent, true))\n yield spawn(closeAdvancedSearch, answerChannel, modalId, fieldId, formName, entity, multi)\n}\n\nexport function* enhanceEntitiesWithDisplays(entities) {\n const requestedDisplays = yield call(api.getDisplayRequest, entities)\n const displays = yield call(rest.fetchDisplays, requestedDisplays)\n return entities.map(entity => ({...entity, display: displays[entity.model][entity.key]}))\n}\n\nexport function* closeAdvancedSearch(answerChannel, modalId, fieldId, formName, entity, multi) {\n let modalOpen = true\n while (modalOpen) {\n const {payload, type} = yield take(answerChannel)\n if (type === advancedSearchActions.ADVANCED_SEARCH_UPDATE) {\n if (payload.ids && payload.ids.length > 0) {\n const query = {\n keys: payload.ids\n }\n let entities = yield call(rest.fetchEntities, entity, query)\n entities = yield call(enhanceEntitiesWithDisplays, entities)\n const value = yield call(getValue, entities, multi)\n yield call(advancedSearchUpdate, formName, fieldId, value)\n } else {\n yield call(advancedSearchUpdate, formName, fieldId, [])\n }\n if (!multi) {\n yield put(notifier.removeModalComponent(modalId))\n modalOpen = false\n }\n } else if (type === advancedSearchActions.ADVANCED_SEARCH_CLOSE) {\n yield put(notifier.removeModalComponent(modalId))\n modalOpen = false\n }\n }\n}\n\nexport function* advancedSearchUpdate(formName, field, ids) {\n yield put(valueActions.changeFieldValue(formName, field, ids))\n}\n","import {actions as formActions} from 'redux-form'\nimport {all, put, takeEvery} from 'redux-saga/effects'\n\nimport form from '../../form'\nimport * as tooltipActions from './actions'\n\nexport default function* sagas() {\n yield all([\n takeEvery(tooltipActions.CHANGE_FIELD_VALUE, changeValue),\n takeEvery(tooltipActions.TOUCH_FIELD, touchField)\n ])\n}\n\nexport function* changeValue({payload: {formName, fieldName, value}}) {\n yield put(formActions.change(formName, form.transformFieldName(fieldName), value))\n}\n\nexport function* touchField({payload: {formName, fieldName}}) {\n yield put(formActions.touch(formName, form.transformFieldName(fieldName)))\n}\n","import _pick from 'lodash/pick'\n\nconst UPLOAD_ENDPOINT_URL = `${__BACKEND_URL__}/nice2/upload`\n\n/**\n * Upload a file.\n *\n * @param file {File} File to upload\n *\n * @returns {Object} An object which contains the following options:\n * - contentType {String}\n * - fileName {String}\n * - id {String}\n * - size {String}\n * - sizeInBytes {Number}\n * - success {bool}\n * - binaryLink {string}\n * - thumbnailLink {string}\n */\nexport const uploadRequest = file => {\n const data = new FormData()\n data.append('file', file)\n\n const fetchOptions = {\n method: 'POST',\n credentials: 'include',\n body: data\n }\n\n return fetch(UPLOAD_ENDPOINT_URL, fetchOptions)\n .then(response => response.json())\n}\n\nexport const documentToFormValueTransformer = (uploadResponse, file) => {\n const responseAttributes = _pick(uploadResponse, ['id', 'fileName'])\n const mimeType = uploadResponse.contentType\n\n return {\n ...responseAttributes,\n binaryLink: file.preview,\n thumbnailLink: mimeType.startsWith('image') ? file.preview : null\n }\n}\n","export const UPLOAD_DOCUMENT = 'formData/UPLOAD_DOCUMENT'\n\nexport const uploadDocument = (formName, field, file) => ({\n type: UPLOAD_DOCUMENT,\n payload: {\n formName,\n file,\n field\n }\n})\n","import {actions as formActions} from 'redux-form'\nimport {all, call, put, takeEvery} from 'redux-saga/effects'\n\nimport {documentToFormValueTransformer, uploadRequest} from './documents'\nimport * as actions from './actions'\nimport errorLogging from '../../errorLogging'\n\nexport default function* sagas() {\n yield all([\n takeEvery(actions.UPLOAD_DOCUMENT, uploadDocument)\n ])\n}\n\nexport function* uploadDocument({payload}) {\n const {formName, file, field} = payload\n\n try {\n const uploadResponse = yield call(uploadRequest, file)\n\n if (uploadResponse.success) {\n const documentFormValue = yield call(documentToFormValueTransformer, uploadResponse, file)\n yield put(formActions.change(formName, field, documentFormValue))\n } else {\n throw new Error(`upload not successful: ${JSON.stringify(uploadResponse)}`)\n }\n } catch (error) {\n // timestamp is needed as workaround, so that Upload component rerenders\n yield put(formActions.change(formName, field, {id: null, timestamp: Date.now()}))\n yield put(errorLogging.logError(\n 'client.component.form.uploadFailedTitle',\n 'client.component.form.uploadFailedMessage',\n error\n ))\n }\n}\n","export const LOAD_SEARCH_FILTERS = 'formData/LOAD_SEARCH_FILTERS'\nexport const SET_SEARCH_FILTER = 'formData/SET_SEARCH_FILTER'\n\nexport const loadSearchFilters = (entity, group) => ({\n type: LOAD_SEARCH_FILTERS,\n payload: {\n entity,\n group\n }\n})\n\nexport const setSearchFilter = (entity, filters) => ({\n type: SET_SEARCH_FILTER,\n payload: {\n entity,\n filters\n }\n})\n","import * as actions from './actions'\n\nconst setSearchFilter = (state, {payload: {entity, filters}}) => ({...state, [entity]: filters})\n\nconst ACTION_HANDLERS = {\n [actions.SET_SEARCH_FILTER]: setSearchFilter\n}\n\nconst initialState = {}\n\nexport default function reducer(state = initialState, action) {\n const handler = ACTION_HANDLERS[action.type]\n return handler ? handler(state, action) : state\n}\n","export const searchFilterResponseTransformer = searchFilterResponse =>\n searchFilterResponse.body.filters.map(f => ({uniqueId: f.uniqueId, display: f.label, key: f.key}))\n","import {all, call, put, select, takeLatest} from 'redux-saga/effects'\n\nimport {searchFilterResponseTransformer} from './utils'\nimport * as actions from './actions'\nimport rest from '../../rest'\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.LOAD_SEARCH_FILTERS, loadSearchFilters)\n ])\n}\n\nexport const searchFiltersSelector = state => state.formData.searchFilters\n\nexport function* loadSearchFilters({payload}) {\n const {entity, group} = payload\n const searchFilter = yield select(searchFiltersSelector)\n\n if (!searchFilter[entity]) {\n const searchFilterResponse = yield call(\n rest.requestSaga, `client/searchfilters/${entity}${group ? `?group=${group}` : ''}`\n )\n const searchFilters = yield call(searchFilterResponseTransformer, searchFilterResponse)\n\n yield put(actions.setSearchFilter(entity, searchFilters))\n }\n}\n","export const LOAD_LOCATION_SUGGESTIONS = 'formData/LOAD_LOCATION_SUGGESTIONS'\nexport const SET_LOCATION_SUGGESTIONS = 'formData/SET_LOCATION_SUGGESTIONS'\nexport const SET_LOCATION_SUGGESTIONS_LOADING = 'formData/SET_LOCATION_SUGGESTIONS_LOADING'\n\nexport const loadLocationsSuggestions = (field, searchInput, countryValue, fieldCountries) => ({\n type: LOAD_LOCATION_SUGGESTIONS,\n payload: {\n field,\n searchInput,\n countryValue,\n fieldCountries\n }\n})\n\nexport const setLocationSuggestions = (field, suggestions) => ({\n type: SET_LOCATION_SUGGESTIONS,\n payload: {\n field,\n suggestions\n }\n})\n\nexport const setLocationSuggestionsLoading = field => ({\n type: SET_LOCATION_SUGGESTIONS_LOADING,\n payload: {\n field\n }\n})\n","import _uniq from 'lodash/uniq'\nimport _get from 'lodash/get'\nimport {all, call} from 'redux-saga/effects'\nimport {api} from 'tocco-util'\n\nimport rest from '../../rest'\n\nconst LOCATION_ENDPOINT = 'location/suggestions'\nconst countryCodeField = 'iso2'\n\n// Caches country response to reduce resolving of key or ISO code.\n// e.g. {'CH': {key: '22', display: 'Switzerland'}\nlet countryCache = {}\n\nexport const setCountryCache = newCountryCache => {\n countryCache = newCountryCache\n}\n\nexport const getCountryCache = () => countryCache\n\nexport function* getCountryCodeByKey(key) {\n for (const prop in countryCache) {\n if (countryCache[prop].key === key) {\n return prop\n }\n }\n\n const entity = yield call(rest.fetchEntity, 'Country', key, {paths: [countryCodeField]})\n const display = yield call(rest.fetchDisplay, 'Country', key)\n const countryCode = _get(entity, ['paths', countryCodeField, 'value'])\n countryCache = {\n ...countryCache,\n [countryCode]: {key: entity.key, display}\n }\n\n return countryCode\n}\n\nexport function* loadCountries(suggestions) {\n const allCountries = yield all(suggestions.map(suggestion => suggestion.country))\n\n const allCountriesUniq = yield call(_uniq, allCountries)\n\n const notLoaded = yield all(\n allCountriesUniq.reduce(\n (accumulator, currentValue) => [...accumulator, ...(countryCache[currentValue] ? [] : [currentValue])],\n []\n ))\n\n if (notLoaded.length > 0) {\n const query = {\n conditions: {\n [countryCodeField]: notLoaded\n },\n paths: [countryCodeField]\n }\n\n const countriesResponse = yield call(rest.fetchEntities, 'Country', query, {method: 'GET'})\n const displays = yield call(rest.fetchDisplays, api.getDisplayRequest(countriesResponse))\n\n countryCache = {\n ...countryCache,\n ...(countriesResponse.reduce(\n (acc, value) =>\n ({\n ...acc,\n [_get(value, ['paths', countryCodeField, 'value'])]: {\n key: value.key,\n display: _get(displays, ['Country', value.key])\n }\n }),\n {}\n ))\n }\n }\n\n return countryCache\n}\n\nexport const transformToSuggestions = (suggestions, countries) =>\n suggestions.map(suggestion => ({\n ...suggestion,\n country: countries[suggestion.country]\n }))\n\nexport function* requestSuggestions(city, postcode, country) {\n const options = {\n queryParams: {\n ...(city ? {city} : {}),\n ...(postcode ? {postcode} : {}),\n ...(country ? {country} : {})\n },\n method: 'GET'\n }\n\n const response = yield call(rest.requestSaga, LOCATION_ENDPOINT, options)\n return response.body.data\n}\n\nexport function* getCountry(country, fieldCountries) {\n return country\n ? yield call(getCountryCodeByKey, country.key)\n : fieldCountries\n}\n","import {all, call, put, takeLatest} from 'redux-saga/effects'\n\nimport * as actions from './actions'\nimport {loadCountries, transformToSuggestions, requestSuggestions, getCountry} from './utils'\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.LOAD_LOCATION_SUGGESTIONS, loadLocations)\n ])\n}\n\nexport function* loadLocations({payload: {field, searchInput, countryValue, fieldCountries}}) {\n yield put(actions.setLocationSuggestionsLoading(field))\n\n const {city, postcode} = searchInput\n const country = yield call(getCountry, countryValue, fieldCountries)\n const suggestionsResponse = yield call(requestSuggestions, city, postcode, country)\n\n const countries = yield call(loadCountries, suggestionsResponse)\n const suggestions = yield call(transformToSuggestions, suggestionsResponse, countries)\n\n yield put(actions.setLocationSuggestions(field, suggestions))\n}\n","import * as actions from './actions'\n\nexport const setLocationSuggestions = (state, {payload: {field, suggestions}}) => (\n {\n ...state,\n [field]: {\n suggestions\n }\n }\n)\n\nexport const setLocationSuggestionsLoading = (state, {payload: {field}}) => (\n {\n ...state,\n [field]: {\n isLoading: true\n }\n }\n)\n\nconst ACTION_HANDLERS = {\n [actions.SET_LOCATION_SUGGESTIONS]: setLocationSuggestions,\n [actions.SET_LOCATION_SUGGESTIONS_LOADING]: setLocationSuggestionsLoading\n}\n\nconst initialState = {}\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 * as actions from './actions'\n\nexport const setLinkFactory = (state, {payload: {linkFactory}}) => (\n {\n ...state,\n linkFactory\n }\n)\n\nconst ACTION_HANDLERS = {\n [actions.SET_LINK_FACTORY]: setLinkFactory\n}\n\nconst initialState = {\n linkFactory: null\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","export const SET_LINK_FACTORY = 'formData/SET_LINK_FACTORY'\n\nexport const setLinkFactory = linkFactory => ({\n type: SET_LINK_FACTORY,\n payload: {\n linkFactory\n }\n})\n","import {combineReducers} from 'redux'\nimport PropTypes from 'prop-types'\nimport {reducer as reducerUtil} from 'tocco-util'\nimport _get from 'lodash/get'\n\nimport relationEntities from './relationEntities/reducer'\nimport tooltips from './tooltips/reducer'\nimport relationEntitiesSagas from './relationEntities/sagas'\nimport tooltipsSaga from './tooltips/sagas'\nimport advancedSearchSagas from './advancedSearch/sagas'\nimport valueSagas from './values/sagas'\nimport uploadSagas from './upload/sagas'\nimport searchFilters from './searchFilters/reducer'\nimport searchFilterSagas from './searchFilters/sagas'\nimport {setRelationEntities} from './relationEntities/actions'\nimport locationSagas from './locations/sagas'\nimport locations from './locations/reducer'\nimport linkFactory from './linkFactory/reducer'\nimport {setLinkFactory} from './linkFactory/actions'\n\nexport const relationEntitiesSelector = store => store.formData.relationEntities.data\nexport const tooltipSelector = store => store.formData.tooltips.data\nexport const locationSuggestionsSelector = store => store.formData.locations\n\nexport const addToStore = (store, config) => {\n reducerUtil.injectReducers(store, {\n formData: combineReducers({\n relationEntities,\n tooltips,\n searchFilters,\n locations,\n linkFactory\n })\n })\n\n store.sagaMiddleware.run(relationEntitiesSagas)\n store.sagaMiddleware.run(tooltipsSaga)\n store.sagaMiddleware.run(advancedSearchSagas, config)\n store.sagaMiddleware.run(valueSagas)\n store.sagaMiddleware.run(uploadSagas)\n store.sagaMiddleware.run(searchFilterSagas)\n store.sagaMiddleware.run(locationSagas)\n\n if (config.linkFactory) {\n store.dispatch(setLinkFactory(config.linkFactory))\n }\n\n const relationEntitiesData = _get(config, 'data.relationEntities', null)\n if (relationEntitiesData !== null) {\n Object.keys(relationEntitiesData).forEach(field => {\n store.dispatch(setRelationEntities(field, relationEntitiesData[field], false))\n })\n }\n}\n\nexport const formDataPropType = PropTypes.shape({\n relationEntities: PropTypes.objectOf(PropTypes.array)\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {injectIntl} from 'react-intl'\nimport {connect} from 'react-redux'\nimport _isEqual from 'lodash/isEqual'\nimport _reduce from 'lodash/reduce'\nimport _pick from 'lodash/pick'\nimport _merge from 'lodash/merge'\nimport {\n isDirty as isDirtySelector,\n getFormSyncErrors,\n getFormAsyncErrors,\n getFormSubmitErrors\n} from 'redux-form'\n\nimport {loadRelationEntities} from './relationEntities/actions'\nimport {loadTooltip} from './tooltips/actions'\nimport {openAdvancedSearch} from './advancedSearch/actions'\nimport {changeFieldValue, touchField} from './values/actions'\nimport {uploadDocument} from './upload/actions'\nimport {loadSearchFilters} from './searchFilters/actions'\nimport {loadLocationsSuggestions} from './locations/actions'\n\nconst FormData = props =>\n <React.Fragment>{React.cloneElement(props.children, {formData: props})}</React.Fragment>\n\nFormData.propTypes = {\n children: PropTypes.node\n}\n\nconst mapStateToProps = (\n state,\n {formValues, tooltips, locations, relationEntities, searchFilters, isDirty, errors, linkFactory}\n) => {\n return {\n ...(relationEntities ? {relationEntities: _pick(state.formData.relationEntities.data, relationEntities)} : {}),\n ...(tooltips ? {tooltips: _pick(state.formData.tooltips.data, tooltips)} : {}),\n ...(searchFilters ? {searchFilters: _pick(state.formData.searchFilters, searchFilters)} : {}),\n ...(locations ? {locations: _pick(state.formData.locations, locations)} : {}),\n ...(formValues && state.form[formValues.formName]\n ? {formValues: _pick(state.form[formValues.formName].values, formValues.fields)} : {}),\n ...(isDirty && state.form[isDirty.formName]\n ? {isDirty: isDirtySelector(isDirty.formName)(state, ...isDirty.fields)} : {}),\n ...(errors && state.form[errors.formName]\n ? {\n errors: _reduce(\n _merge(\n _pick(getFormSubmitErrors(errors.formName)(state), errors.fields),\n _pick(getFormSyncErrors(errors.formName)(state), errors.fields),\n _pick(getFormAsyncErrors(errors.formName)(state), errors.fields)\n ),\n (result, value) => ({...result, ...value}), null)\n } : null),\n ...(linkFactory && state.formData.linkFactory ? {linkFactory: state.formData.linkFactory.linkFactory} : {})\n }\n}\n\nconst mapActionCreators = {\n loadRelationEntities: loadRelationEntities,\n loadTooltip: loadTooltip,\n openAdvancedSearch: openAdvancedSearch,\n uploadDocument: uploadDocument,\n changeFieldValue: changeFieldValue,\n touchField: touchField,\n loadSearchFilters: loadSearchFilters,\n loadLocationsSuggestions: loadLocationsSuggestions\n}\n\nconst FormDataContainer = connect(\n mapStateToProps,\n mapActionCreators,\n null,\n {\n areStatePropsEqual: _isEqual\n }\n)(injectIntl(FormData))\n\nexport default FormDataContainer\n","import {addToStore} from './formData'\nimport FormDataContainer from './FormDataContainer'\n\nexport default {\n addToStore,\n FormDataContainer\n}\n","export default {\n getOptions: () => ({\n allowNegative: true\n })\n}\n","import _get from 'lodash/get'\n\nexport default {\n getOptions: ({formField}) => ({\n postPointDigits: _get(formField, 'validation.decimalDigits.postPointDigits', null),\n prePointDigits: _get(formField, 'validation.decimalDigits.prePointDigits', null),\n minValue: _get(formField, 'validation.numberRange.fromIncluding', null),\n maxValue: _get(formField, 'validation.numberRange.toIncluding', null),\n allowNegative: true\n })\n}\n","export default {\n getOptions: ({formField, formName, formData}) => ({\n upload: document => {\n formData.uploadDocument(formName, formField.id, document)\n },\n uploadText: formData.intl.formatMessage({id: 'client.component.upload.upload'}),\n uploadingText: formData.intl.formatMessage({id: 'client.component.upload.uploading'}),\n downloadText: formData.intl.formatMessage({id: 'client.component.upload.downloadTitle'}),\n deleteText: formData.intl.formatMessage({id: 'client.component.upload.deleteTitle'})\n }),\n fixLabel: () => true\n}\n","import _get from 'lodash/get'\n\nexport default {\n getOptions: ({formField}) => ({\n postPointDigits: _get(formField, 'validation.decimalDigits.postPointDigits', 0),\n prePointDigits: _get(formField, 'validation.decimalDigits.prePointDigits', null),\n minValue: _get(formField, 'validation.numberRange.fromIncluding', null),\n maxValue: _get(formField, 'validation.numberRange.toIncluding', null),\n allowNegative: true\n })\n}\n","import _get from 'lodash/get'\n\nexport default {\n hasValue: (value, formField) => {\n const locationMapping = formField.locationMapping\n return !!(value[locationMapping.city] || value[locationMapping.postcode])\n },\n getValue: ({formField, formData}) => {\n const locationMapping = formField.locationMapping\n const filteredLocationData = formData.formValues\n\n let renamedLocationData = {}\n for (const locKey in locationMapping) {\n for (const filteredLocDataKey in filteredLocationData) {\n if (locationMapping[locKey] === filteredLocDataKey) {\n renamedLocationData = {...renamedLocationData, [locKey]: filteredLocationData[filteredLocDataKey]}\n }\n }\n }\n return renamedLocationData\n },\n getEvents: ({formField, formName, formData, events}) => {\n const locationMapping = formField.locationMapping || {}\n const onChange = locationObject => {\n for (const key in locationMapping) {\n if (locationMapping[key] && locationObject[key] !== undefined) {\n formData.changeFieldValue(formName, locationMapping[key], locationObject[key])\n }\n }\n }\n return {\n ...events,\n onChange,\n onBlur: () => { formData.touchField(formName, formField.id) }\n }\n },\n dataContainerProps: ({formField, formName}) => ({\n locations: formField.id,\n formValues: {\n formName: formName,\n fields: formField.locationMapping ? Object.values(formField.locationMapping) : {}\n },\n isDirty: {\n formName: formName,\n fields: formField.locationMapping\n ? [formField.locationMapping.city, formField.locationMapping.postcode] : []\n },\n errors: {\n formName: formName,\n fields: [formField.locationMapping.city, formField.locationMapping.postcode]\n }\n }),\n getOptions: ({formField, formData}) => ({\n fetchSuggestions: (searchTerm, country) =>\n formData.loadLocationsSuggestions(formField.id, searchTerm, country, _get(formField, 'countries')),\n isLoading: _get(formData, ['locations', formField.id, 'isLoading'], false),\n suggestions: _get(formData, ['locations', formField.id, 'suggestions'], null),\n mapButtonTitle: formData.intl.formatMessage({id: 'client.component.location.mapButtonTitle'})\n })\n}\n","import _get from 'lodash/get'\n\nexport default {\n getOptions: ({formField}) => ({\n prePointDigits: _get(formField, 'validation.decimalDigits.prePointDigits', null),\n postPointDigits: _get(formField, 'validation.decimalDigits.postPointDigits', null),\n minValue: _get(formField, 'validation.numberRange.fromIncluding', null),\n maxValue: _get(formField, 'validation.numberRange.toIncluding', null),\n allowNegative: true\n })\n}\n","import _get from 'lodash/get'\n\nconst settings = {\n SEARCH_RESULT_LIMIT: 50,\n SUGGESTION_LIMIT: 10,\n SUGGESTION_ORDER_FIELD: 'update_timestamp'\n}\n\nexport default {\n dataContainerProps: ({formField}) => ({\n relationEntities: formField.id,\n tooltips: formField.targetEntity,\n linkFactory: true\n }),\n getOptions: ({formField, formName, formData}) => ({\n options: _get(formData, ['relationEntities', formField.id, 'data'], []),\n moreOptionsAvailable: _get(formData, ['relationEntities', formField.id, 'moreEntitiesAvailable'], false),\n isLoading: _get(formData, ['relationEntities', formField.id, 'isLoading'], false),\n fetchOptions: () => formData.loadRelationEntities(formField.id, formField.targetEntity, {\n forceReload: true,\n limit: settings.SUGGESTION_LIMIT,\n sorting: [{field: settings.SUGGESTION_ORDER_FIELD, order: 'desc'}],\n formBase: formField.formBase\n }),\n searchOptions: searchTerm => formData.loadRelationEntities(formField.id, formField.targetEntity, {\n searchTerm,\n limit: settings.SEARCH_RESULT_LIMIT,\n forceReload: true,\n formBase: formField.formBase\n }),\n openAdvancedSearch: value => formData.openAdvancedSearch(formName, formField, value),\n tooltips: _get(formData.tooltips, formField.targetEntity, null),\n loadTooltip: id => formData.loadTooltip(formField.targetEntity, id),\n noResultsText: formData.intl.formatMessage(\n {id: 'client.component.remoteselect.noResultsText'}\n ),\n moreOptionsAvailableText: formData.intl.formatMessage(\n {id: 'client.component.remoteselect.moreOptionsAvailableText'}\n ),\n valueLinkFactory: formData.linkFactory && formData.linkFactory.detail\n ? (key, content) => formData.linkFactory.detail(formField.targetEntity, formField.relationName, key, content)\n : null\n })\n\n}\n","import _get from 'lodash/get'\n\nconst settings = {\n LIMIT: 10000\n}\n\nexport default {\n dataContainerProps: ({formField}) => ({\n relationEntities: formField.id,\n tooltips: formField.targetEntity\n }),\n getOptions: ({formField, formData}) => ({\n options: _get(formData, ['relationEntities', formField.id, 'data'], []),\n isLoading: _get(formData, ['relationEntities', formField.id, 'isLoading'], false),\n tooltips: _get(formData.tooltips, formField.targetEntity, null),\n loadTooltip: id => formData.loadTooltip(formField.targetEntity, id),\n noResultsText: formData.intl.formatMessage({id: 'client.component.remoteselect.noResultsText'}),\n fetchOptions: () => formData.loadRelationEntities(formField.id, formField.targetEntity, {\n forceReload: false,\n limit: settings.LIMIT\n })\n })\n}\n","import coordinate from './coordinate'\nimport decimal from './decimal'\nimport document from './document'\nimport duration from './duration'\nimport integer from './integer'\nimport location from './location'\nimport moneyamount from './moneyamount'\nimport number from './number'\nimport phone from './phone'\nimport remote from './remote'\nimport select from './select'\nimport searchFilter from './searchFilter'\nimport boolean from './boolean'\nimport percent from './percent'\n\nexport default {\n 'binary': document,\n 'boolean': boolean,\n 'counter': number,\n 'data-amount': number,\n 'decimal': decimal,\n 'document': document,\n 'double': decimal,\n 'duration': duration,\n 'image': document,\n 'integer': integer,\n 'latitude': coordinate,\n 'location': location,\n 'long': integer,\n 'longitude': coordinate,\n 'moneyamount': moneyamount,\n 'multi-remote-field': remote,\n 'multi-select-box': select,\n 'named-upload': document,\n 'number': number,\n 'phone': phone,\n 'search-filter': searchFilter,\n 'single-remote-field': remote,\n 'single-select-box': select,\n 'sorting': number,\n 'percent': percent\n}\n","export default {\n fixLabel: () => true\n}\n","export default {\n getOptions: ({formData}) => ({\n hoursLabel: formData.intl.formatMessage({id: 'client.component.duration.hoursLabel'}),\n minutesLabel: formData.intl.formatMessage({id: 'client.component.duration.minutesLabel'})\n })\n}\n","import _get from 'lodash/get'\n\nexport default {\n getOptions: ({formField}) => {\n return {\n postPointDigits: _get(formField, 'validation.decimalDigits.postPointDigits', null),\n prePointDigits: _get(formField, 'validation.decimalDigits.prePointDigits', null),\n minValue: _get(formField, 'validation.numberRange.fromIncluding', null),\n maxValue: _get(formField, 'validation.numberRange.toIncluding', null),\n allowNegative: true,\n fixedDecimalScale: true\n }\n }\n}\n","import _get from 'lodash/get'\n\nexport default {\n getOptions: ({formField}) => ({\n customPhoneRegex: _get(formField, 'validation.phone.customRegex', null),\n defaultCountry: _get(formField, 'validation.phone.defaultRegion', null)\n })\n}\n","import _get from 'lodash/get'\n\nexport default {\n dataContainerProps: ({formField}) => ({\n searchFilters: formField.model\n }),\n getOptions: ({formField, formData}) => ({\n isMulti: formField.multiple,\n options: _get(formData.searchFilters, formField.model, null),\n fetchOptions: () => formData.loadSearchFilters(formField.model, formField.group),\n noResultsText: formData.intl.formatMessage({id: 'client.component.searchfilter.noResultsText'})\n })\n}\n","import _get from 'lodash/get'\n\nexport default {\n getOptions: ({formField}) => ({\n prePointDigits: _get(formField, 'validation.decimalDigits.prePointDigits', null),\n postPointDigits: _get(formField, 'validation.decimalDigits.postPointDigits', null),\n minValue: _get(formField, 'validation.numberRange.fromIncluding', null),\n maxValue: _get(formField, 'validation.numberRange.toIncluding', null),\n allowNegative: false\n })\n}\n","import React from 'react'\nimport {EditableValue, Range} from 'tocco-ui'\n\nimport editableTypeConfigs from './editableTypeConfigs'\n\nconst getEvents = (type, formField, formName, formData, events) =>\n editableTypeConfigs[type] && editableTypeConfigs[type].getEvents\n ? editableTypeConfigs[type].getEvents({formField, formName, formData, events})\n : events\n\nconst getValue = (type, formField, formName, formData, currentValue) =>\n editableTypeConfigs[type] && editableTypeConfigs[type].getValue\n ? editableTypeConfigs[type].getValue({formField, formName, formData, currentValue})\n : currentValue\n\nconst getOptions = (type, formField, formName, formData) =>\n editableTypeConfigs[type] && editableTypeConfigs[type].getOptions\n ? editableTypeConfigs[type].getOptions({formField, formName, formData})\n : {}\n\nexport default (type, range) => ({formField, formName, value, info, events, formData}) => {\n const formType = formField.dataType || formField.componentType\n const options = getOptions(formType, formField, formName, formData)\n\n events = getEvents(formType, formField, formName, formData, events)\n value = getValue(formType, formField, formName, formData, value)\n\n const Component = range ? Range : EditableValue\n\n return (\n <Component\n type={type}\n events={events}\n value={value}\n {...info}\n options={options}\n {...(range && {\n fromText: formData.intl.formatMessage({id: 'client.component.range.from'}),\n toText: formData.intl.formatMessage({id: 'client.component.range.to'})\n })}\n />\n )\n}\n","\nexport default {\n getOptions: ({formField, formData}) => ({\n linkFactory: formData.linkFactory && formData.linkFactory.detail\n ? (key, content) => formData.linkFactory.detail(formField.targetEntity, formField.relationName, key, content)\n : null\n })\n\n}\n","import document from './document'\nimport remote from './remote'\nimport description from './description'\n\nexport default {\n 'document-compact': document,\n 'multi-remote-field': remote,\n 'single-remote-field': remote,\n 'description': description\n}\n","export default {\n getOptions: ({formData}) => ({\n downloadTitle: formData.intl.formatMessage({id: 'client.component.upload.downloadTitle'})\n })\n}\n","export default {\n getOptions: ({formField}) => ({\n mode: formField.mode,\n title: formField.title\n }),\n getValue: ({formField}) => formField.text\n}\n","import React from 'react'\nimport {FormattedValue} from 'tocco-ui'\n\nimport formattedTypeConfigs from './formattedTypeConfigs'\n\nconst getOptions = (fieldType, formField, formData) =>\n formattedTypeConfigs[fieldType] && formattedTypeConfigs[fieldType].getOptions\n ? formattedTypeConfigs[fieldType].getOptions({formField, formData})\n : {}\n\nconst getValue = (fieldType, formField, formData, value) =>\n formattedTypeConfigs[fieldType] && formattedTypeConfigs[fieldType].getValue\n ? formattedTypeConfigs[fieldType].getValue({formField, formData})\n : value\n\nexport default type => ({formField, value, formData, key, breakWords}) => {\n const fieldType = formField.dataType || formField.componentType\n const options = getOptions(fieldType, formField, formData, value)\n const overwrittenValue = getValue(fieldType, formField, formData, value)\n\n return <FormattedValue key={key} type={type} value={overwrittenValue} options={options} breakWords={breakWords}/>\n}\n","import editableValueFactory from './editableValueFactory'\nimport formattedValueFactory from './formattedValueFactory'\n\nconst editableMapping = {\n 'binary': editableValueFactory('document'),\n 'birthdate': editableValueFactory('date'),\n 'boolean': editableValueFactory('boolean'),\n 'char': editableValueFactory('string'),\n 'code': editableValueFactory('text'),\n 'count': editableValueFactory('string'),\n 'counter': editableValueFactory('number'),\n 'createts': editableValueFactory('datetime'),\n 'createuser': editableValueFactory('string'),\n 'compressed-text': editableValueFactory('text'),\n 'date': editableValueFactory('date'),\n 'datetime': editableValueFactory('datetime'),\n 'decimal': editableValueFactory('number'),\n 'display': formattedValueFactory('html'),\n 'description': formattedValueFactory('description'),\n 'document': editableValueFactory('document'),\n 'double': editableValueFactory('decimal'),\n 'duration': editableValueFactory('duration'),\n 'email': editableValueFactory('string'),\n 'fulltext-search': editableValueFactory('string'),\n 'html': editableValueFactory('html'),\n 'image': editableValueFactory('document'),\n 'identifier': editableValueFactory('string'),\n 'integer': editableValueFactory('number'),\n 'ipaddress': editableValueFactory('string'),\n 'latitude': editableValueFactory('string'),\n 'location': editableValueFactory('location'),\n 'login': editableValueFactory('string'),\n 'long': editableValueFactory('number'),\n 'longitude': editableValueFactory('string'),\n 'moneyamount': editableValueFactory('number'),\n 'multi-remote-field': editableValueFactory('multi-remote'),\n 'multi-select-box': editableValueFactory('multi-select'),\n 'named-upload': editableValueFactory('document'),\n 'percent': editableValueFactory('number'),\n 'phone': editableValueFactory('phone'),\n 'postcode': editableValueFactory('string'),\n 'pulldown-date': editableValueFactory('date'),\n 'search-filter': editableValueFactory('search-filter'),\n 'serial': editableValueFactory('string'),\n 'single-remote-field': editableValueFactory('remote'),\n 'single-select-box': editableValueFactory('single-select'),\n 'sorting': editableValueFactory('number'),\n 'string': editableValueFactory('string'),\n 'text': editableValueFactory('text'),\n 'text-area': editableValueFactory('text'),\n 'time': editableValueFactory('time'),\n 'updatets': editableValueFactory('datetime'),\n 'upload': editableValueFactory('document'),\n 'url': editableValueFactory('url'),\n 'uuid': editableValueFactory('string'),\n 'version': editableValueFactory('string')\n}\nconst readOnlyMapping = {\n 'binary': formattedValueFactory('document'),\n 'birthdate': formattedValueFactory('birthdate'),\n 'boolean': formattedValueFactory('boolean'),\n 'code': formattedValueFactory('text'),\n 'counter': formattedValueFactory('string'),\n 'createuser': formattedValueFactory('string'),\n 'createts': formattedValueFactory('datetime'),\n 'compressed-text': formattedValueFactory('text'),\n 'data-amount': formattedValueFactory('number'),\n 'date': formattedValueFactory('date'),\n 'datetime': formattedValueFactory('datetime'),\n 'decimal': formattedValueFactory('decimal'),\n 'display': formattedValueFactory('html'),\n 'description': formattedValueFactory('description'),\n 'duration': formattedValueFactory('duration'),\n 'document': formattedValueFactory('document'),\n 'email': formattedValueFactory('email'),\n 'html': formattedValueFactory('html'),\n 'image': formattedValueFactory('document'),\n 'identifier': formattedValueFactory('string'),\n 'latitude': formattedValueFactory('latitude'),\n 'login': formattedValueFactory('string'),\n 'long': formattedValueFactory('string'),\n 'longitude': formattedValueFactory('longitude'),\n 'moneyamount': formattedValueFactory('moneyamount'),\n 'multi-remote-field': formattedValueFactory('multi-remote'),\n 'multi-select-box': formattedValueFactory('multi-select'),\n 'named-upload': formattedValueFactory('document'),\n 'integer': formattedValueFactory('number'),\n 'percent': formattedValueFactory('number'),\n 'phone': formattedValueFactory('phone'),\n 'pulldown-date': formattedValueFactory('date'),\n 'remote': formattedValueFactory('remote'),\n 'search-filter': formattedValueFactory('search-filter'),\n 'serial': formattedValueFactory('string'),\n 'single-remote-field': formattedValueFactory('remote'),\n 'single-select-box': formattedValueFactory('single-select'),\n 'sorting': formattedValueFactory('number'),\n 'string': formattedValueFactory('string'),\n 'text': formattedValueFactory('text'),\n 'text-area': formattedValueFactory('text'),\n 'time': formattedValueFactory('time'),\n 'updatets': formattedValueFactory('datetime'),\n 'upload': formattedValueFactory('document'),\n 'url': formattedValueFactory('url'),\n 'uuid': formattedValueFactory('string'),\n 'version': formattedValueFactory('string')\n}\n\nconst listMapping = {\n ...readOnlyMapping,\n binary: formattedValueFactory('document-compact'),\n document: formattedValueFactory('document-compact'),\n image: formattedValueFactory('document-compact')\n}\n\nconst searchMapping = {\n ...editableMapping,\n text: editableValueFactory('string'),\n birthdate: editableValueFactory('date', true),\n date: editableValueFactory('date', true),\n updatets: editableValueFactory('datetime', true),\n createts: editableValueFactory('datetime', true),\n datetime: editableValueFactory('datetime', true),\n moneyamount: editableValueFactory('number', true),\n percent: editableValueFactory('number', true),\n long: editableValueFactory('number', true),\n integer: editableValueFactory('number', true),\n decimal: editableValueFactory('number', true),\n counter: editableValueFactory('number', true),\n time: editableValueFactory('time', true)\n}\n\nexport default {\n editable: editableMapping,\n readOnly: readOnlyMapping,\n list: listMapping,\n search: searchMapping\n}\n","import React from 'react'\nimport {consoleLogger} from 'tocco-util'\n\nimport mappings from './mappings'\n\nexport default (mappingType, type) => {\n if (!mappings[mappingType] || !mappings[mappingType][type]) {\n consoleLogger.log(`Unable to display field: unknown mapping type combination (${mappingType} / ${type})`)\n return () => <span/>\n }\n\n return mappings[mappingType][type]\n}\n","import factory from './fieldFactory'\nimport editableTypeConfigs from './editableTypeConfigs'\n\nexport default {factory, editableTypeConfigs}\n","import {\n REMOTE_EVENT,\n remoteEvent\n} from './actions'\n\nexport default {\n REMOTE_EVENT,\n remoteEvent\n}\n","export const REMOTE_EVENT = 'remoteEvents/REMOTE_EVENT'\n\nexport const remoteEvent = event => ({\n type: REMOTE_EVENT,\n payload: {\n event\n }\n})\n","import componentTypes from './actionComponentTypes'\n\nexport const isAction = componentType => !!componentType && Object.values(componentTypes).indexOf(componentType) >= 0\n\nexport const modeFitsScopes = (mode, scopes) => (!mode || !scopes || scopes.length < 0 || scopes.includes(mode))\n","export const INITIALIZE_QUESTION_FORM = 'simpleForm/INITIALIZE_QUESTION_FORM'\nexport const ADVANCED_SEARCH_UPDATE = 'simpleForm/ADVANCED_SEARCH_UPDATE'\nexport const SET_FIELD_DEFINITIONS = 'simpleForm/SET_FIELD_DEFINITIONS'\r\n\nexport const SUBMIT = 'simpleForm/SUBMIT'\nexport const CANCEL = 'simpleForm/CANCEL'\n\nexport const initializeForm = () => ({\n type: INITIALIZE_QUESTION_FORM,\n payload: {\n }\n})\n\nexport const submit = () => ({\n type: SUBMIT\n})\n\nexport const cancel = () => ({\n type: CANCEL\n})\n\nexport const setFieldDefinitions = fieldDefinitions => ({\n type: SET_FIELD_DEFINITIONS,\n payload: {\n fieldDefinitions\n }\n})\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst ACTION_HANDLERS = {\n [actions.SET_FIELD_DEFINITIONS]: reducerUtil.singleTransferReducer('fieldDefinitions')\n}\n\nconst initialState = {\n fieldDefinitions: null\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 {actions as formActions, getFormValues, isValid} from 'redux-form'\nimport {CHANGE, INITIALIZE, UPDATE_SYNC_ERRORS} from 'redux-form/es/actionTypes'\nimport {externalEvents, form as formUtil} from 'tocco-app-extensions'\nimport {all, call, put, select, takeEvery, takeLatest} from 'redux-saga/effects'\n\nimport * as actions from './actions'\n\nconst FORM_ID = 'simpleForm'\nexport const inputSelector = state => state.input\nexport const selector = state => state.simpleForm\n\nexport default function* sagas() {\n yield all([\n takeEvery(actions.INITIALIZE_QUESTION_FORM, initialize),\n takeEvery(actions.SUBMIT, submit),\n takeEvery(actions.CANCEL, cancel),\n takeLatest(CHANGE, change),\n takeLatest(UPDATE_SYNC_ERRORS, change),\n takeLatest(INITIALIZE, change)\n ])\n}\n\nexport function* initialize() {\n const {form, defaultValues: inputDefaultValues} = yield select(inputSelector)\n const fieldDefinitions = yield call(formUtil.getFieldDefinitions, form)\n const fromDefaultValues = yield call(formUtil.getDefaultValues, fieldDefinitions)\n yield put(formActions.initialize(FORM_ID, {...fromDefaultValues, ...inputDefaultValues}))\n}\n\nexport function* submit() {\n const values = yield getValues()\n yield put(externalEvents.fireExternalEvent('onSubmit', {values}))\n}\n\nexport function* cancel() {\n const values = yield getValues()\n yield put(externalEvents.fireExternalEvent('onCancel', {values}))\n}\n\nexport function* change() {\n const values = yield getValues()\n const valid = yield select(isValid(FORM_ID))\n yield put(externalEvents.fireExternalEvent('onChange', {\n values,\n valid\n }))\n}\n\nfunction* getValues() {\n return Object.entries(yield select(getFormValues(FORM_ID)))\n .reduce((acc, [key, value]) => (\n {\n ...acc,\n [key.replace('--', '.')]: value\n }\n ), {})\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","import {reducer as form} from 'redux-form'\n\nimport formReducer, {sagas as formSagas} from './simpleForm'\n\nexport default {\n simpleForm: formReducer,\n form\n}\n\nexport const sagas = [\n formSagas\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {form} from 'tocco-app-extensions'\nimport {Button} from 'tocco-ui'\nimport {reduxForm} from 'redux-form'\nimport {intlShape} from 'react-intl'\n\nconst REDUX_FORM_NAME = 'simpleForm'\n\nclass Form extends React.Component {\n constructor(props) {\n super(props)\n this.props.initializeForm()\n }\n\n msg = id => this.props.intl.formatMessage({id})\n\n handleCancel = () => {\n this.props.onCancel()\n }\n\n sleep = ms => new Promise(resolve => setTimeout(resolve, ms))\n\n handleSubmit = values =>\n this.sleep(400).then(() => {\n // delay closing of the window so it won't close immediately with the click\n this.props.onSubmit()\n })\n\n render = () => (\n <form onSubmit={this.props.handleSubmit(this.handleSubmit)}>\n <form.FormBuilder\n entity={undefined}\n formName={this.props.form}\n formDefinition={this.props.formDefinition}\n formValues={this.props.formValues}\n fieldMappingType={this.props.mappingType ? this.props.mappingType : 'editable'}\n />\n {!this.props.noButtons\n && <React.Fragment>\n <Button\n disabled={this.props.submitting}\n ink=\"primary\"\n label={this.props.submitText || this.msg('client.simple-form.defaultOk')}\n pending={this.props.submitting}\n type=\"submit\"\n />\n <Button\n disabled={this.props.submitting}\n label={this.props.cancelText || this.msg('client.simple-form.defaultCancel')}\n onClick={this.handleCancel}\n />\n </React.Fragment>\n }\n </form>\n )\n}\n\nForm.propTypes = {\n intl: intlShape.isRequired,\n initializeForm: PropTypes.func.isRequired,\n handleSubmit: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n formDefinition: PropTypes.object.isRequired,\n submitting: PropTypes.bool.isRequired,\n cancelText: PropTypes.string,\n submitText: PropTypes.string,\n noButtons: PropTypes.bool,\n formValues: PropTypes.object,\n form: PropTypes.string,\n mappingType: PropTypes.oneOf(['editable', 'search', 'readonly'])\n}\n\nexport default reduxForm({form: REDUX_FORM_NAME, destroyOnUnmount: false})(Form)\n","import Form from './Form'\n\nexport default Form\n","import {connect} from 'react-redux'\nimport {form} from 'tocco-app-extensions'\nimport {injectIntl} from 'react-intl'\nimport {hot} from 'react-hot-loader/root'\n\nimport Form from '../../src/components/Form'\nimport {initializeForm, submit, cancel} from '../modules/simpleForm/actions'\n\nconst mapActionCreators = {\n initializeForm,\n onSubmit: submit,\n onCancel: cancel\n}\n\nconst mapStateToProps = (state, props) => ({\n noButtons: state.input.noButtons,\n title: state.input.title,\n description: state.input.description,\n submitText: state.input.submitText,\n cancelText: state.input.cancelText,\n formDefinition: state.input.form,\n validate: state.input.validate !== false ? form.syncValidation(state.simpleForm.fieldDefinitions) : () => {},\n listApp: state.input.listApp,\n mappingType: state.input.mappingType\n})\n\nexport default hot(connect(mapStateToProps, mapActionCreators)(injectIntl(Form)))\n","import React from 'react'\nimport {reducer as reducerUtil} from 'tocco-util'\nimport {appFactory, externalEvents, formData, notifier, actionEmitter, form} from 'tocco-app-extensions'\nimport PropTypes from 'prop-types'\nimport {hot} from 'react-hot-loader/root'\n\nimport reducers, {sagas} from './modules/reducers'\nimport {setFieldDefinitions} from './modules/simpleForm/actions'\nimport FormContainer from './containers/FormContainer'\nconst packageName = 'simple-form'\n\nconst EXTERNAL_EVENTS = [\n 'onSubmit',\n 'onCancel',\n 'onChange',\n 'emitAction'\n]\n\nconst initApp = (id, input, events = {}, publicPath) => {\n const content = <FormContainer listApp={input.listApp}/>\n\n const store = appFactory.createStore(reducers, sagas, input, packageName)\n actionEmitter.addToStore(store, events.emitAction)\n externalEvents.addToStore(store, events)\n formData.addToStore(store, {data: input.formData, listApp: input.listApp})\n notifier.addToStore(store, false)\n\n const app = appFactory.createApp(\n packageName,\n content,\n store,\n {\n input,\n events,\n actions: [\n setFieldDefinitions(form.getFieldDefinitions(input.form))\n ],\n publicPath,\n textResourceModules: ['component', 'common']\n }\n )\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 return app\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')\n const setupFetchMocks = require('./dev/fetchMocks').default\n setupFetchMocks(packageName, fetchMock)\n fetchMock.spy()\n }\n\n const app = initApp(packageName, input)\n\n appFactory.renderApp(app.component)\n } else {\n appFactory.registerAppInRegistry(packageName, initApp)\n }\n})()\n\nclass SimpleFormApp extends React.Component {\n constructor(props) {\n super(props)\n\n const events = EXTERNAL_EVENTS.reduce((events, event) => {\n if (props[event]) {\n events[event] = props[event]\n }\n return events\n }, {})\n\n this.app = initApp('id', props, events)\n }\n\n render() {\n return this.app.component\n }\n}\n\nSimpleFormApp.propTypes = {\n hideButton: PropTypes.bool,\n submitText: PropTypes.string,\n cancelText: PropTypes.string,\n form: PropTypes.object.isRequired,\n validate: PropTypes.bool,\n ...EXTERNAL_EVENTS.reduce((propTypes, event) => {\n propTypes[event] = PropTypes.func\n return propTypes\n }, {}),\n defaultValues: PropTypes.object\n}\n\nexport default hot(SimpleFormApp)\n","export default Object.freeze({\n ACTION: 'action',\n REPORT: 'report',\n ACTION_GROUP: 'action-group',\n ACTION_BAR: 'action-bar'\n})\n","import _isObject from 'lodash/isObject'\nimport moment from 'moment'\n\nconst isDefined = v => v !== null && v !== undefined && v !== ''\n\nexport const getTql = (path, value, fieldType) => {\n if (!isDefined(value)) {\n return null\n }\n\n const isRangeValue = value && typeof value === 'object' && value.isRangeValue\n\n const typeHandler = typeHandlers(fieldType || guessType(value))\n\n if (isRangeValue) {\n return handleRangeValue(value, typeHandler, path)\n } else {\n return typeHandler(path, value, '==')\n }\n}\n\nconst handleRangeValue = (value, typeHandler, path) => (\n [\n ...(isDefined(value.from) ? [typeHandler(path, value.from, '>=')] : []),\n ...(isDefined(value.to) ? [typeHandler(path, value.to, '<=')] : [])\n ].join(' and ')\n)\n\nconst typeHandlers = type => {\n switch (type) {\n case 'multi-select-box':\n case 'multi-remote-field':\n return (path, value) => `KEYS(\"${path}\",${value.map(v => v.key).join(',')})`\n case 'single-remote-field':\n case 'single-select-box':\n return (path, value) => `${path}.pk == ${value.key}`\n case 'fulltext-search':\n return (path, value) => path === 'txtFulltext'\n ? `fulltext(\"${value}\") or fulltext(\"${value}*\")`\n : `fulltext(\"${value}\", ${path}) or fulltext(\"${value}*\", ${path})`\n case 'birthdate':\n case 'date':\n case 'create_timestamp':\n return (path, value, comp) => `${path} ${comp} date:\"${value}\"`\n case 'datetime':\n case 'createts':\n case 'updatets':\n return (path, value, comp) => `${path} ${comp} datetime:\"${moment(value).format('YYYY-MM-DD HH:mm')}\"`\n case 'time':\n return (path, value, comp) => `${path} ${comp} time:\"${moment(value, 'HH:mm').format('HH:mm:ss.sss')}\"`\n case 'compressed-text':\n case 'string':\n return (path, value) => `${path} ~= \"${value}\"`\n case 'boolean':\n return (path, value) => value === false ? null : `${path} == ${value}`\n default:\n return (path, value, comp) => `${path} ${comp} ${value}`\n }\n}\n\n// For fields that are not in the search form (e.g. parent and preselectedSearchFields)\nconst guessType = value => {\n if (_isObject(value) && value.key) {\n return 'single-select-box'\n }\n\n if (Array.isArray(value) && value.every(v => !!v.key)) {\n return 'multi-select-box'\n }\n\n return 'string'\n}\n","import {getTql} from './tqlBuilder'\n\nexport default {getTql}\n","export const SET_CURRENT_VIEW_INFO = 'path/SET_CURRENT_VIEW_INFO'\nexport const LOAD_CURRENT_ROUTE = 'path/LOAD_CURRENT_ROUTE'\nexport const SET_BREADCRUMBS_INFO = 'path/SET_BREADCRUMBS_INFO'\nexport const SET_RELATIONS = 'path/SET_RELATIONS'\nexport const SET_CURRENT_VIEW_TITLE = 'path/SET_CURRENT_VIEW_TITLE'\nexport const SET_RELATIONS_INFO = 'path/SET_RELATIONS_INFO'\n\nexport const setCurrentViewInfo = (location, currentViewInfo) => ({\n type: SET_CURRENT_VIEW_INFO,\n payload: {\n location,\n currentViewInfo\n }\n})\n\nexport const loadCurrentRoute = location => ({\n type: LOAD_CURRENT_ROUTE,\n payload: {\n location\n }\n})\n\nexport const setBreadcrumbsInfo = breadcrumbsInfo => ({\n type: SET_BREADCRUMBS_INFO,\n payload: {\n breadcrumbsInfo\n }\n})\n\nexport const setRelations = relations => ({\n type: SET_RELATIONS,\n payload: {\n relations\n }\n})\n\nexport const setCurrentViewTitle = currentViewTitle => ({\n type: SET_CURRENT_VIEW_TITLE,\n payload: {\n currentViewTitle\n }\n})\n\nexport const setRelationsInfo = relationsInfo => ({\n type: SET_RELATIONS_INFO,\n payload: {\n relationsInfo\n }\n})\n","import pathToRegexp from 'path-to-regexp'\n\nconst entityUrlRegex = '/e/:entity/:key?/:relation*/:view(list|detail|edit|create|relations|action)/:actionId?'\nconst actionUrlRegex = '/e/action/:actionId'\n\n/**\n * Returns an object with actionId, entity, key, relation and view for given url\n *\n * @param pathname {String} url / path starting with /e/\n */\nexport const getPathInfo = pathname => {\n const pathParts = []\n const re = pathToRegexp(entityUrlRegex, pathParts)\n const res = re.exec(pathname)\n\n if (res !== null) {\n return pathParts.reduce((acc, pathPart, idx) => {\n return {\n ...acc,\n [pathPart.name]: res[idx + 1]\n }\n }, {})\n }\n\n const actionPathRegex = pathToRegexp(actionUrlRegex, pathParts)\n const parseResult = actionPathRegex.exec(pathname)\n\n if (parseResult !== null) {\n return {\n actionId: parseResult[1]\n }\n }\n\n return null\n}\n","import {rest, viewPersistor} from 'tocco-app-extensions'\nimport _pickBy from 'lodash/pickBy'\nimport _omit from 'lodash/omit'\nimport _pick from 'lodash/pick'\nimport {takeLatest, all, call, put, spawn} from 'redux-saga/effects'\n\nimport * as actions from './actions'\nimport {getPathInfo} from '../../utils/url'\n\nconst isEven = n => n % 2 === 0\n\nexport default function* mainSagas() {\n yield all([\n takeLatest(actions.LOAD_CURRENT_ROUTE, loadRoute)\n ])\n}\n\nexport function* loadRoute({payload: {location}}) {\n const {pathname} = location\n\n let routeInfo = []\n try {\n routeInfo = yield call(loadRouteInfo, pathname)\n } catch (error) {\n yield put(actions.setCurrentViewInfo(pathname, {error}))\n }\n\n if (routeInfo.length > 0) {\n const currentViewInfo = yield call(deriveCurrentViewInfo, pathname, routeInfo)\n\n yield put(actions.setCurrentViewInfo(pathname, currentViewInfo))\n\n const breadcrumbs = yield call(deriveBreadcrumbs, routeInfo)\n yield put(actions.setBreadcrumbsInfo(breadcrumbs))\n\n if (currentViewInfo.type === 'detail') {\n yield spawn(initMultiRelations, currentViewInfo.model, currentViewInfo.key)\n }\n\n yield put(viewPersistor.clearPersistedViews(currentViewInfo.level + 1))\n }\n}\n\nexport function* loadRouteInfo(pathname) {\n const path = yield call(getPathInfo, pathname)\n const routeInfos = []\n\n if (path === null) {\n return routeInfos\n }\n\n if (path.entity) {\n const baseModel = yield call(rest.fetchModel, path.entity)\n\n routeInfos.push({\n type: 'list',\n model: baseModel\n })\n\n if (path.key) {\n const display = yield call(rest.fetchDisplay, baseModel.name, path.key)\n\n routeInfos.push({\n type: 'detail',\n key: path.key,\n model: baseModel,\n display\n })\n\n if (path.relation) {\n const splittedRelation = path.relation.split('/')\n\n for (let i = 0; i < splittedRelation.length; i++) {\n const relationStringPart = splittedRelation[i]\n\n const parent = routeInfos[routeInfos.length - 1]\n if (isEven(i)) {\n const relationName = relationStringPart\n const targetEntity = parent.model.paths[relationName].targetEntity\n const relationModel = yield call(rest.fetchModel, targetEntity)\n\n routeInfos.push({\n type: 'list',\n model: relationModel,\n relationName,\n parent\n })\n } else {\n const key = relationStringPart\n const model = parent.model\n routeInfos.push({\n type: 'detail',\n model,\n key,\n display: yield call(rest.fetchDisplay, model.name, key),\n relationName: parent.relationName,\n parent: parent.parent\n })\n }\n }\n }\n }\n\n if (path.view === 'create') {\n const parent = routeInfos[routeInfos.length - 1]\n routeInfos.push({\n type: 'create',\n model: parent.model\n })\n } else if (path.actionId) {\n routeInfos.push({\n type: 'action',\n actionId: path.actionId\n })\n }\n } else if (path.actionId) {\n routeInfos.push({\n type: 'action',\n actionId: path.actionId\n })\n }\n\n return routeInfos\n}\n\nexport const deriveCurrentViewInfo = (pathname, routeInfo) => {\n const lastEntry = routeInfo[routeInfo.length - 1]\n const parent = lastEntry.parent\n\n return {\n ..._omit(lastEntry, ['parent']),\n pathname,\n level: routeInfo.length - 1,\n ...(parent && lastEntry.relationName && {\n parentKey: parent.key,\n reverseRelation: parent.model.paths[lastEntry.relationName].reverseRelationName,\n parentModel: parent.model\n })\n }\n}\n\nexport const deriveBreadcrumbs = routeInfos => {\n let path = ''\n return routeInfos.map(routeInfo => {\n if (routeInfo.type === 'action') {\n return null\n }\n path = (path ? path + '/' : '') + (routeInfo.key ? routeInfo.key : routeInfo.relationName || routeInfo.model.name)\n return {\n type: routeInfo.type,\n display: routeInfo.display || routeInfo.model.label,\n path: path + '/' + routeInfo.type\n }\n }).filter(e => e)\n}\n\nexport function* initMultiRelations(model, key) {\n const relations = _pickBy(model.paths, (value, key) => value.relationDisplay && value.relationDisplay.show)\n\n const relationsTransformed = Object.keys(relations)\n .map(k =>\n _pick(relations[k],\n ['relationName', 'reverseRelationName', 'targetEntity', 'relationDisplay.label', 'relationDisplay.order']\n )\n )\n .sort((a, b) => a.relationDisplay.order > b.relationDisplay.order ? 1 : -1)\n\n yield put(actions.setRelations(relationsTransformed))\n yield call(loadRelationInfos, model.name, key)\n}\n\nexport function* loadRelationInfos(model, key) {\n const resource = `/client/entities/${model}/${key}/relations`\n const relationInfoResponse = yield call(rest.requestSaga, resource)\n const relationsInfo = relationInfoResponse.body.relations\n yield put(actions.setRelationsInfo(relationsInfo))\n}\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nexport const setCurrentViewInfo = (state, {payload: {location, currentViewInfo}}) => ({\n ...state,\n currentViewInfos: {\n ...state.currentViewInfos,\n [location]: currentViewInfo\n }\n})\n\nconst ACTION_HANDLERS = {\n [actions.SET_CURRENT_VIEW_INFO]: setCurrentViewInfo,\n [actions.SET_BREADCRUMBS_INFO]: reducerUtil.singleTransferReducer('breadcrumbsInfo'),\n [actions.SET_RELATIONS]: reducerUtil.singleTransferReducer('relations'),\n [actions.SET_RELATIONS_INFO]: reducerUtil.singleTransferReducer('relationsInfo'),\n [actions.SET_CURRENT_VIEW_TITLE]: reducerUtil.singleTransferReducer('currentViewTitle')\n}\n\nconst initialState = {\n currentViewInfos: {},\n breadcrumbsInfo: [],\n relations: null,\n relationsInfo: {}\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 {fork, all} from 'redux-saga/effects'\n\nimport moduleSagas from './sagas'\nimport reducer from './reducer'\n\nexport function* sagas() {\n yield all([\n fork(moduleSagas)\n ])\n}\n\nexport default reducer\n","import {declareFont, shadeColor, theme} from 'tocco-ui'\nimport {css} from 'styled-components'\nimport _get from 'lodash/get'\n\nexport const linkStyle = css`\n ${declareFont()}\n text-decoration: none;\n color: ${theme.color('text')};\n\n * {\n color: ${theme.color('text')};\n text-decoration: none;\n }\n\n &:hover,\n &:hover *,\n &:focus,\n &:focus * {\n color: ${theme.color('secondaryLight')};\n text-decoration: ${props => props.neutral ? 'none' : 'underline'};\n }\n\n &:active,\n &:active * {\n color: ${props => props.neutral\n ? shadeColor(_get(props.theme, 'colors.text'), 2)\n : shadeColor(_get(props.theme, 'colors.primary'), 2)};\n text-decoration: ${props => props.neutral ? 'none' : 'underline'};\n }\n`\n","import {NavLink} from 'react-router-dom'\nimport styled from 'styled-components'\n\nimport {linkStyle} from './linkStyle'\n\nexport default styled(NavLink)`\n ${linkStyle};\n`\n","import {Link} from 'react-router-dom'\nimport styled from 'styled-components'\n\nimport {linkStyle} from './linkStyle'\n\nexport default styled(Link)`\n ${linkStyle}\n`\n","import React from 'react'\nimport {Typography} from 'tocco-ui'\n\nimport {StyledLink} from '../../../../components/StyledLink'\n\nconst EntitiesOverview = props => {\n return (\n <div>\n <Typography.H2>Entities Overview</Typography.H2>\n <Typography.Span>List of all available Entities</Typography.Span>\n <ul>\n <li><StyledLink to=\"/e/User\">User</StyledLink></li>\n <li><StyledLink to=\"/e/Address\">Address</StyledLink></li>\n </ul>\n </div>\n )\n}\n\nEntitiesOverview.propTypes = {\n}\n\nexport default EntitiesOverview\n","import EntitiesOverview from './EntitiesOverview'\n\nexport default EntitiesOverview\n","import styled from 'styled-components'\nimport {StyledSpan, theme, scale, StyledScrollbar} from 'tocco-ui'\n\nimport {StyledLink} from '../../../../components/StyledLink'\n\nexport const StyledRelationsViewWrapper = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n`\n\nexport const StyledPreviewBox = styled.div`\n background-color: ${theme.color('paper')};\n padding: ${scale.space(-1)};\n margin-top: 3px;\n display: flex;\n flex-direction: column;\n flex: 1;\n\n ${StyledLink} {\n padding-left: ${scale.space(-0.5)};\n\n &:nth-child(2) {\n padding-left: ${scale.space(-1.1)};\n }\n }\n`\n\nexport const StyledRelationBox = styled.div`\n background-color: ${theme.color('paper')};\n padding: ${scale.space(-1)};\n display: grid;\n grid-template-columns: repeat(auto-fit, 170px);\n grid-gap: ${scale.space(-2)};\n justify-content: space-between;\n overflow-y: auto;\n align-content: flex-start;\n max-height: 25%;\n ${StyledScrollbar}\n`\n\nexport const RelationLinks = styled.div`\n display: none;\n margin-left: auto;\n\n * {\n color: ${theme.color('text')};\n padding-left: ${scale.space(-2)};\n }\n`\n\nexport const RelationBox = styled.div`\n border-radius: ${theme.radii('large')};\n padding: ${scale.space(-2.7)} ${scale.space(-1)};\n display: flex;\n background-color: ${({selected}) => selected && theme.color('secondary')};\n height: fit-content;\n\n &&& {\n * {\n color: ${({selected}) => selected && theme.color('paper')};\n box-sizing: initial;\n }\n }\n ${({selected}) => selected && `\n ${RelationLinks} {\n display: flex;\n }\n `\n };\n\n &:hover ${RelationLinks} {\n display: flex;\n }\n\n && {\n :hover{\n background-color: ${theme.color('secondaryLight')};\n\n * {\n color: ${theme.color('paper')};\n }\n cursor: pointer;\n }\n }\n\n ${/* sc-selector */StyledLink}:hover * {\n color: ${theme.color('secondary')};\n }\n`\n\nexport const RelationLabel = styled(StyledSpan)`\n && {\n max-width: 110px;\n }\n`\n","import PropTypes from 'prop-types'\n\nconst modelPropType = PropTypes.shape({\n label: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n paths: PropTypes.objectOf(\n PropTypes.shape({\n type: PropTypes.string.isRequired,\n fieldName: PropTypes.string,\n relationName: PropTypes.string\n })\n )\n})\n\nexport const currentViewPropType = PropTypes.shape({\n pathname: PropTypes.string.isRequired,\n level: PropTypes.number,\n key: PropTypes.string,\n model: modelPropType,\n parentModel: modelPropType,\n reverseRelation: PropTypes.string,\n actionId: PropTypes.string\n})\n","import React, {useState, useEffect} from 'react'\nimport PropTypes from 'prop-types'\nimport {Icon, Typography} from 'tocco-ui'\nimport {js} from 'tocco-util'\nimport EntityListApp from 'tocco-entity-list/src/main'\nimport queryString from 'query-string'\n\nimport {\n RelationBox,\n RelationLabel,\n RelationLinks,\n StyledPreviewBox,\n StyledRelationBox,\n StyledRelationsViewWrapper\n} from './StyledComponents'\nimport {StyledLink} from '../../../../components/StyledLink'\nimport {goBack} from '../../../../utils/routing'\nimport {currentViewPropType} from '../../utils/propTypes'\n\nconst RelationsView = ({\n history,\n match,\n currentViewInfo,\n relations,\n relationsInfo,\n persistViewInfo,\n persistedViewInfo,\n emitAction\n}) => {\n const [selectedRelation, selectRelation] = useState(null)\n\n useEffect(\n () => {\n if (relations && relations.length > 0) {\n const queryRelation = queryString.parse(history.location.search).relation\n if (queryRelation) {\n selectRelation(relations.find(r => r.relationName === queryRelation))\n } else if (persistedViewInfo.selectedRelation) {\n selectRelation(relations.find(r => r.relationName === persistedViewInfo.selectedRelation))\n } else {\n selectRelation(relations[0])\n }\n }\n },\n [relations]\n )\n\n const getRelationCountLabel = relationName => relationsInfo[relationName] && relationsInfo[relationName].count > 0\n ? <RelationLabel>&nbsp;({relationsInfo[relationName].count})</RelationLabel> : null\n\n if (!relations || relations.length === 0 || !currentViewInfo) {\n return null\n }\n\n const hasCreateRights = relationName => relationsInfo[relationName] && relationsInfo[relationName].createPermission\n\n return (\n <StyledRelationsViewWrapper>\n <StyledRelationBox>\n {relations.map(relation => (\n <RelationBox\n key={`relation-${relation.relationName}`}\n selected={selectedRelation && relation.relationName === selectedRelation.relationName}\n onClick={() => {\n selectRelation(relation)\n history.replace({\n search: '?relation=' + relation.relationName\n })\n persistViewInfo(\n currentViewInfo.location,\n currentViewInfo.level,\n {selectedRelation: relation.relationName}\n )\n }}\n >\n <RelationLabel title={relation.relationDisplay.label}>\n {relation.relationDisplay.label}</RelationLabel>{getRelationCountLabel(relation.relationName)}\n <RelationLinks>\n <StyledLink to={match.url.replace(/(relations|detail)$/, relation.relationName)}>\n <Icon icon=\"arrow-right\"/>\n </StyledLink>\n {hasCreateRights(relation.relationName)\n && <StyledLink to={match.url.replace(/(relations|detail)$/, relation.relationName) + '/create'}>\n <Icon icon=\"plus\"/>\n </StyledLink>\n }\n </RelationLinks>\n </RelationBox>\n ))}\n </StyledRelationBox>\n\n {selectedRelation\n && <StyledPreviewBox>\n <Typography.H4>\n {selectedRelation.relationDisplay.label}\n <StyledLink to={match.url.replace(/(relations|detail)$/, selectedRelation.relationName)}>\n <Icon icon=\"arrow-right\"/>\n </StyledLink>\n { hasCreateRights(selectedRelation.relationName)\n && <StyledLink to={match.url.replace(/(relations|detail)$/, selectedRelation.relationName) + '/create'}>\n <Icon icon=\"plus\"/>\n </StyledLink>\n }\n </Typography.H4>\n <EntityListApp\n id={'preview' + selectedRelation.reverseRelationName + selectedRelation.targetEntity}\n key={selectedRelation.reverseRelationName + selectedRelation.targetEntity}\n entityName={selectedRelation.targetEntity}\n formName={selectedRelation.targetEntity}\n parent={{\n key: currentViewInfo.key,\n reverseRelationName: selectedRelation.reverseRelationName,\n model: currentViewInfo.model.name\n }}\n showLink={true}\n linkFactory={{\n detail: (entity, relation, key, children) =>\n entity\n ? <StyledLink to={`/e/${entity}/${key}`} target=\"_blank\">{children}</StyledLink>\n : <StyledLink to={selectedRelation.relationName + '/' + key}>{children}</StyledLink>\n }}\n onRowClick={({id}) => {\n const entityBaseUrl = match.url.replace(/detail$/, '')\n history.push(`${entityBaseUrl}${selectedRelation.relationName}/${id}`)\n }}\n onNavigateToCreate={() => {\n const entityBaseUrl = goBack(match.url)\n history.push(entityBaseUrl + '/' + selectedRelation.relationName + '/create')\n }}\n searchFormType=\"simple\"\n selectionStyle=\"none\"\n store={persistedViewInfo[`store-${selectedRelation.relationName}`]}\n onStoreCreate={store => {\n persistViewInfo(\n currentViewInfo.location,\n currentViewInfo.level,\n {[`store-${selectedRelation.relationName}`]: store}\n )\n }}\n showActions={false}\n limit={15}\n emitAction={emitAction}\n />\n </StyledPreviewBox>\n }\n </StyledRelationsViewWrapper>\n )\n}\n\nRelationsView.propTypes = {\n history: PropTypes.object.isRequired,\n match: PropTypes.object.isRequired,\n currentViewInfo: currentViewPropType,\n relations: PropTypes.array,\n relationsInfo: PropTypes.objectOf(PropTypes.shape({\n count: PropTypes.number,\n createPermission: PropTypes.bool\n })),\n persistedViewInfo: PropTypes.shape({\n selectedRelation: PropTypes.string\n }),\n persistViewInfo: PropTypes.func.isRequired,\n emitAction: PropTypes.func.isRequired\n}\n\nconst updateIgnoreProps = ['persistedViewInfo']\n\nconst areEqual = (prevProps, nextProps) => {\n const diff = Object.keys(js.difference(prevProps, nextProps)).filter(key => !updateIgnoreProps.includes(key))\n return diff.length === 0\n}\n\nexport default React.memo(RelationsView, areEqual)\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport {actionEmitter, viewPersistor} from 'tocco-app-extensions'\n\nimport RelationsView from './RelationsView'\n\nconst mapStateToProps = (state, props) => ({\n currentViewInfo: state.entities.path.currentViewInfos[props.history.location.pathname],\n relations: state.entities.path.relations,\n relationsInfo: state.entities.path.relationsInfo,\n persistedViewInfo: viewPersistor.viewInfoSelector(state, props.history.location.pathname)\n})\n\nconst mapActionCreators = {\n persistViewInfo: viewPersistor.persistViewInfo,\n emitAction: action => actionEmitter.dispatchEmittedAction(action)\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(RelationsView))\n","import RelationsView from './RelationViewContainer'\n\nexport default RelationsView\n","export const SET_FORM_DEFINITION = 'entityDetail/SET_FORM_DEFINITION'\nexport const LOAD_DETAIL_VIEW = 'entityDetail/LOAD_DETAIL_VIEW'\nexport const SET_ENTITY = 'entityDetail/SET_ENTITY'\nexport const SUBMIT_FORM = 'entityDetail/SUBMIT_FORM'\nexport const SET_LAST_SAVE = 'entityDetail/SET_LAST_SAVE'\nexport const SET_ENTITY_MODEL = 'entityDetail/SET_ENTITY_MODEL'\nexport const UNLOAD_DETAIL_VIEW = 'entityDetail/UNLOAD_DETAIL_VIEW'\nexport const FIRE_TOUCHED = 'entityDetail/FIRE_TOUCHED'\nexport const SET_TOUCHED = 'entityDetail/SET_TOUCHED'\nexport const SET_ENTITY_NAME = 'entityDetail/SET_ENTITY_NAME'\nexport const SET_ENTITY_ID = 'entityDetail/SET_ENTITY_ID'\nexport const SET_MODE = 'entityDetail/SET_MODE'\nexport const SET_FORM_NAME = 'entityDetail/SET_FORM_NAME'\nexport const UPLOAD_DOCUMENT = 'entityDetail/UPLOAD_DOCUMENT'\nexport const SET_APP_ID = 'entityDetail/SET_APP_ID'\nexport const TOUCH_ALL_FIELDS = 'entityDetail/TOCH_ALL_FIELDS'\nexport const SET_DEFAULT_VALUES = 'entityDetail/SET_DEFAULT_VALUES'\nexport const NAVIGATE_TO_CREATE = 'entityDetail/NAVIGATE_TO_CREATE'\nexport const SET_FIELD_DEFINITIONS = 'entityDetail/SET_FIELD_DEFINITIONS'\nexport const NAVIGATE_TO_ACTION = 'entityDetail/NAVIGATE_TO_ACTION'\n\nexport const setFormDefinition = formDefinition => ({\n type: SET_FORM_DEFINITION,\n payload: {\n formDefinition\n }\n})\n\nexport const loadDetailView = (modelPaths, entityId) => ({\n type: LOAD_DETAIL_VIEW,\n payload: {\n modelPaths,\n entityId\n }\n})\n\nexport const setEntity = entity => ({\n type: SET_ENTITY,\n payload: {\n entity\n }\n})\n\nexport const submitForm = () => ({\n type: SUBMIT_FORM\n})\n\nexport const setLastSave = (lastSave = Date.now()) => ({\n type: SET_LAST_SAVE,\n payload: {\n lastSave\n }\n})\n\nexport const setEntityModel = entityModel => ({\n type: SET_ENTITY_MODEL,\n payload: {\n entityModel\n }\n})\n\nexport const unloadDetailView = () => ({\n type: UNLOAD_DETAIL_VIEW\n})\n\nexport const fireTouched = touched => ({\n type: FIRE_TOUCHED,\n payload: {\n touched\n }\n})\n\nexport const setTouched = touched => ({\n type: SET_TOUCHED,\n payload: {\n touched\n }\n})\n\nexport const setEntityName = entityName => ({\n type: SET_ENTITY_NAME,\n payload: {\n entityName\n }\n})\n\nexport const setEntityId = entityId => ({\n type: SET_ENTITY_ID,\n payload: {\n entityId\n }\n})\n\nexport const setMode = mode => ({\n type: SET_MODE,\n payload: {\n mode\n }\n})\nexport const setFormName = formName => ({\n type: SET_FORM_NAME,\n payload: {\n formName\n }\n})\n\nexport const setAppId = appId => ({\n type: SET_APP_ID,\n payload: {\n appId\n }\n})\n\nexport const touchAllFields = () => ({\n type: TOUCH_ALL_FIELDS\n})\n\nexport const setDefaultValues = defaultValues => ({\n type: SET_DEFAULT_VALUES,\n payload: {\n defaultValues\n }\n})\n\nexport const navigateToCreate = relationName => ({\n type: NAVIGATE_TO_CREATE,\n payload: {\n relationName\n }\n})\n\nexport const setFieldDefinitions = fieldDefinitions => ({\n type: SET_FIELD_DEFINITIONS,\n payload: {\n fieldDefinitions\n }\n})\n\nexport const navigateToAction = (definition, selection) => ({\n type: NAVIGATE_TO_ACTION,\n payload: {\n definition,\n selection\n }\n})\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst ACTION_HANDLERS = {\n [actions.SET_ENTITY_NAME]: reducerUtil.singleTransferReducer('entityName'),\n [actions.SET_FORM_NAME]: reducerUtil.singleTransferReducer('formName'),\n [actions.SET_ENTITY_ID]: reducerUtil.singleTransferReducer('entityId'),\n [actions.SET_MODE]: reducerUtil.singleTransferReducer('mode'),\n [actions.SET_FORM_DEFINITION]: reducerUtil.singleTransferReducer('formDefinition'),\n [actions.SET_ENTITY]: reducerUtil.singleTransferReducer('entity'),\n [actions.SET_LAST_SAVE]: reducerUtil.singleTransferReducer('lastSave'),\n [actions.SET_ENTITY_MODEL]: reducerUtil.singleTransferReducer('entityModel'),\n [actions.SET_TOUCHED]: reducerUtil.singleTransferReducer('touched'),\n [actions.SET_APP_ID]: reducerUtil.singleTransferReducer('appId'),\n [actions.SET_DEFAULT_VALUES]: reducerUtil.singleTransferReducer('defaultValues'),\n [actions.SET_FIELD_DEFINITIONS]: reducerUtil.singleTransferReducer('fieldDefinitions')\n}\n\nconst initialState = {\n appId: '',\n entityName: '',\n formName: '',\n mode: 'update',\n formDefinition: {},\n entity: {},\n entityModel: {},\n touched: false,\n defaultValues: {},\n fieldDefinitions: []\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 {SubmissionError} from 'redux-form'\nimport {form, rest} from 'tocco-app-extensions'\nimport {call} from 'redux-saga/effects'\n\nexport function* updateEntity(entity, paths = []) {\n const options = {\n method: 'PATCH',\n queryParams: {\n _paths: paths.join(',')\n },\n body: entity,\n acceptedErrorCodes: ['VALIDATION_FAILED']\n }\n const resource = `entities/2.0/${entity.model}/${entity.key}`\n const resp = yield call(rest.requestSaga, resource, options)\n\n if (resp.body.errorCode === 'VALIDATION_FAILED') {\n throw new SubmissionError(form.validationErrorToFormError(entity, resp.body.errors))\n }\n\n return resp.body\n}\n\nconst SUCCESSFUL_SAVED_STATUS = 201\n\nexport function* createEntity(entity, paths = []) {\n const options = {\n method: 'POST',\n queryParams: {\n _paths: paths.join(',')\n },\n body: entity,\n acceptedErrorCodes: ['VALIDATION_FAILED']\n }\n const resource = `entities/2.0/${entity.model}`\n const resp = yield call(rest.requestSaga, resource, options)\n\n if (resp.status === SUCCESSFUL_SAVED_STATUS) {\n const location = resp.headers.get('Location')\n const id = location.split('/').pop()\n return id\n } else {\n if (resp.body && resp.body.errorCode === 'VALIDATION_FAILED') {\n throw new SubmissionError(form.validationErrorToFormError(entity, resp.body.errors))\n }\n\n throw new Error('unexpected error during save', resp)\n }\n}\n","export default {\n CREATE: 'create',\n UPDATE: 'update'\n}\n","import {\n actions as formActions,\n SubmissionError,\n getFormValues\n} from 'redux-form'\nimport {externalEvents, notifier, errorLogging, form, rest, remoteEvents}\n from 'tocco-app-extensions'\nimport {api} from 'tocco-util'\nimport {call, put, select, takeLatest, takeEvery, all} from 'redux-saga/effects'\n\nimport * as actions from './actions'\nimport {\n updateEntity,\n createEntity\n} from '../../util/api/entities'\nimport modes from '../../util/modes'\n\nexport const formInitialValueSelector = (state, formId) => state.form[formId].initial\n\nexport const entityDetailSelector = state => state.entityDetail\n\nconst FORM_ID = 'detailForm'\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.LOAD_DETAIL_VIEW, loadDetailView),\n takeLatest(actions.UNLOAD_DETAIL_VIEW, unloadDetailView),\n takeLatest(actions.TOUCH_ALL_FIELDS, touchAllFields),\n takeEvery(actions.SUBMIT_FORM, submitForm),\n takeEvery(actions.FIRE_TOUCHED, fireTouched),\n takeEvery(actions.NAVIGATE_TO_CREATE, navigateToCreate),\n takeEvery(remoteEvents.REMOTE_EVENT, remoteEvent),\n takeLatest(actions.NAVIGATE_TO_ACTION, navigateToAction)\n ])\n}\n\nexport function* loadDetailFormDefinition(formName, mode) {\n const formDefinition = yield call(rest.fetchForm, formName, mode)\n yield put(actions.setFormDefinition(formDefinition))\n const fieldDefinitions = yield call(form.getFieldDefinitions, formDefinition)\n yield put(actions.setFieldDefinitions(fieldDefinitions))\n return {formDefinition, fieldDefinitions}\n}\n\nexport function* loadEntity(entityName, entityId, fieldDefinitions) {\n const paths = yield call(form.getUsedPaths, fieldDefinitions)\n const entity = yield call(rest.fetchEntity, entityName, entityId, {paths})\n yield put(actions.setEntity(entity))\n return entity\n}\n\nexport function* unloadDetailView() {\n yield put(actions.setEntity(null))\n yield put(formActions.destroy(FORM_ID))\n}\n\nexport function* loadEntityModel(entityName) {\n const entityModel = yield call(rest.fetchModel, entityName)\n yield put(actions.setEntityModel(entityModel))\n return entityModel\n}\n\nexport function* loadDetailView() {\n const {entityName, formName, mode, defaultValues} = yield select(entityDetailSelector)\n\n const model = yield call(loadEntityModel, entityName)\n const {fieldDefinitions} = yield call(loadDetailFormDefinition, formName, mode)\n\n if (mode === modes.CREATE) {\n yield put(actions.setEntity({paths: {}, model: entityName}))\n const formDefaultValues = yield call(form.getDefaultValues, fieldDefinitions)\n const inputDefaultValues = defaultValues ? yield call(form.transformInputValues, defaultValues, model) : {}\n const defaultValuesFields = {...formDefaultValues, ...inputDefaultValues}\n const flattenEntity = yield call(api.getFlattenEntity, {model: entityName})\n const formValues = yield call(form.entityToFormValues, {...flattenEntity, ...defaultValuesFields})\n yield put(formActions.initialize(FORM_ID, formValues))\n } else {\n yield call(loadData)\n }\n}\n\nexport function* updateFormSubmit(entity) {\n yield call(updateEntity, entity)\n yield call(loadData)\n\n yield call(showNotification, 'success', 'saveSuccessfulTitle', 'saveSuccessfulMessage')\n yield put(actions.setLastSave())\n yield put(formActions.stopSubmit(FORM_ID))\n}\n\nexport function* createFormSubmit(entity) {\n const createdEntityId = yield call(createEntity, entity)\n yield put(externalEvents.fireExternalEvent('onEntityCreated', {id: createdEntityId}))\n yield call(showNotification, 'success', 'createSuccessfulTitle', 'createSuccessfulMessage')\n}\n\nexport function* touchAllFields() {\n const {fieldDefinitions} = yield select(entityDetailSelector)\n yield put(formActions.touch(FORM_ID, ...(fieldDefinitions.map(f => form.transformFieldName(f.path || f.id)))))\n}\n\nexport function* handleSubmitError(error) {\n if (error instanceof SubmissionError) {\n yield call(touchAllFields)\n yield put(formActions.stopSubmit(FORM_ID, error.errors))\n } else {\n if (!(error instanceof rest.ClientQuestionCancelledException)) {\n yield put(errorLogging.logError(\n 'client.common.unexpectedError',\n 'client.entity-detail.saveError',\n error\n ))\n }\n yield put(formActions.stopSubmit(FORM_ID))\n }\n\n yield call(showNotification, 'warning', 'saveAbortedTitle', 'saveAbortedMessage', 5000)\n}\n\nexport function* getEntityForSubmit() {\n const formValues = yield select(getFormValues(FORM_ID))\n const initialFormValues = yield select(formInitialValueSelector, FORM_ID)\n const {mode} = yield select(entityDetailSelector)\n const initialValues = mode === modes.CREATE ? {} : initialFormValues\n yield put(formActions.startSubmit(FORM_ID))\n\n yield call(form.submitValidation, formValues, initialValues, mode)\n const dirtyFields = yield call(form.getDirtyFields, initialValues, formValues, mode === modes.CREATE)\n const flattenEntity = yield call(form.formValuesToFlattenEntity, formValues)\n return yield call(api.toEntity, flattenEntity, dirtyFields)\n}\n\nexport function* getPaths() {\n const {fieldDefinitions} = yield select(entityDetailSelector)\n return yield call(form.getUsedPaths, fieldDefinitions)\n}\n\nexport function* submitForm() {\n try {\n const {mode} = yield select(entityDetailSelector)\n const entity = yield call(getEntityForSubmit)\n if (mode === modes.UPDATE) {\n yield call(updateFormSubmit, entity)\n } else if (mode === modes.CREATE) {\n yield call(createFormSubmit, entity)\n }\n } catch (error) {\n yield call(handleSubmitError, error)\n }\n}\n\nexport function* fireTouched({payload}) {\n const {touched: actionTouched} = payload\n const {touched: stateTouched} = yield select(entityDetailSelector)\n\n if (actionTouched !== stateTouched) {\n yield put(externalEvents.fireExternalEvent('onTouchedChange', {\n touched: actionTouched\n }))\n yield put(actions.setTouched(actionTouched))\n }\n}\n\nexport function* showNotification(type, titleResourceName, messageResourceName, duration = 2000) {\n yield put(notifier.info(\n type,\n `client.entity-detail.${titleResourceName}`,\n `client.entity-detail.${messageResourceName}`,\n 'check',\n duration\n ))\n}\n\nexport function* loadDisplayExpressions(formName, mode, paths, entities) {\n if (paths && paths.length > 0) {\n const keys = entities.map(e => e.__key)\n const result = yield call(rest.fetchDisplayExpressions, formName, mode, keys, paths)\n return result\n }\n}\n\nexport function* loadRelationDisplays(relationFields, entities) {\n if (relationFields && relationFields.length > 0) {\n const request = yield call(api.getPathDisplayRequest, entities, relationFields, {})\n return yield call(rest.fetchDisplays, request)\n }\n}\n\nexport function* enhanceEntityWithDisplayExpressions(entity) {\n const {fieldDefinitions, formName, mode} = yield select(entityDetailSelector)\n const displayExpressions = fieldDefinitions.filter(f => f.componentType === 'display').map(f => f.id)\n const displayExpressionsL = yield call(loadDisplayExpressions, formName, mode, displayExpressions, [entity])\n if (displayExpressionsL) {\n Object.keys(displayExpressionsL[entity.__key]).forEach(dE => {\n entity[dE] = displayExpressionsL[entity.__key][dE]\n })\n }\n}\n\nexport function* enhanceEntityWithDisplays(entity) {\n const {fieldDefinitions} = yield select(entityDetailSelector)\n const relationFields = fieldDefinitions.filter(f => api.relationFieldTypes.includes(f.dataType)).map(f => f.path)\n\n const displays = yield call(loadRelationDisplays, relationFields, [entity])\n\n relationFields.forEach(relationField => {\n const value = entity[relationField]\n if (value) {\n const newValue = Array.isArray(value)\n ? value.map(v2 => ({...v2, display: displays[v2.model][v2.key]}))\n : {...value, display: displays[value.model][value.key]}\n entity[relationField] = newValue\n }\n })\n}\n\nexport function* loadData(reset = true) {\n const {entityName, entityId, fieldDefinitions} = yield select(entityDetailSelector)\n const entity = yield call(loadEntity, entityName, entityId, fieldDefinitions)\n const flattenEntity = yield call(api.getFlattenEntity, entity)\n\n yield call(enhanceEntityWithDisplayExpressions, flattenEntity)\n yield call(enhanceEntityWithDisplays, flattenEntity)\n\n const formValues = yield call(form.entityToFormValues, flattenEntity)\n const options = reset ? {} : {keepDirty: true, keepValues: false}\n yield put(formActions.initialize(FORM_ID, formValues, options))\n}\n\nexport function* navigateToCreate({payload}) {\n yield put(externalEvents.fireExternalEvent('onNavigateToCreate', payload.relationName))\n}\n\nexport function* navigateToAction({payload}) {\n const {definition, selection} = payload\n yield put(externalEvents.fireExternalEvent('onNavigateToAction', {definition, selection}))\n}\n\nexport const isCurrentEntity = (event, entityName, entityId) =>\n !!event.payload.entities.find(entity => entity.entityName === entityName && entity.key === entityId)\n || (event.payload.parent && event.payload.parent.model === entityName && event.payload.parent.key === entityId)\n\nexport function* remoteEvent(action) {\n const event = action.payload.event\n const {entityName, entityId} = yield select(entityDetailSelector)\n\n if (isCurrentEntity(event, entityName, entityId)) {\n switch (event.type) {\n case 'entity-delete-event':\n yield put(externalEvents.fireExternalEvent('onEntityDeleted'))\n break\n case 'entity-update-event':\n yield call(loadData, false)\n break\n }\n }\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","import {reducer as form} from 'redux-form'\n\nimport entityDetailReducer, {sagas as entityDetailSagas} from './entityDetail'\n\nexport default {\n entityDetail: entityDetailReducer,\n form\n}\n\nexport const sagas = [\n entityDetailSagas\n]\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport EntityListApp from 'tocco-entity-list/src/main'\nimport styled from 'styled-components'\n\nconst StyledListApp = styled.div`\n width: 100%;\n`\n\nconst SubGrid = props => {\n const formBase = `${props.detailFormName}_${props.formField.path}`\n return (\n <StyledListApp>\n <EntityListApp\n id={`${props.appId}-subgrid-${formBase}`}\n entityName={props.formField.targetEntity}\n formName={formBase}\n limit={props.limit}\n searchFormType={props.showSearchForm ? 'basic' : 'none'}\n onRowClick={e => {\n if (props.onRowClick) {\n props.onRowClick({\n id: e.id,\n gridName: props.formField.path,\n relationName: props.formField.path\n })\n }\n }}\n onNavigateToCreate={() => {\n props.navigateToCreate(props.formField.path)\n }}\n emitAction={action => { props.dispatchEmittedAction(action) }}\n parent={{\n key: props.entityKey,\n reverseRelationName: props.formField.reverseRelation,\n model: props.entityName\n }}\n />\n </StyledListApp>\n )\n}\n\nSubGrid.defaultProps = {\n limit: 5\n}\n\nSubGrid.propTypes = {\n entityKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n entityName: PropTypes.string.isRequired,\n detailFormName: PropTypes.string.isRequired,\n formField: PropTypes.shape({\n path: PropTypes.string,\n targetEntity: PropTypes.string,\n reverseRelation: PropTypes.string\n }).isRequired,\n onRowClick: PropTypes.func,\n navigateToCreate: PropTypes.func.isRequired,\n dispatchEmittedAction: PropTypes.func.isRequired,\n showSubGridsCreateButton: PropTypes.bool,\n appId: PropTypes.string,\n showSearchForm: PropTypes.bool,\n limit: PropTypes.number\n}\n\nexport default SubGrid\n","import SubGrid from './SubGrid'\n\nexport default SubGrid\n","import {connect} from 'react-redux'\nimport {externalEvents, actionEmitter} from 'tocco-app-extensions'\n\nimport SubGrid from '../components/SubGrid'\nimport {navigateToCreate} from './../modules/entityDetail/actions'\n\nconst mapStateToProps = (state, props) => ({\n appId: state.entityDetail.appId,\n entityKey: state.entityDetail.entity.key,\n entityName: state.entityDetail.entity.model,\n detailFormName: state.entityDetail.formDefinition.id,\n showSubGridsCreateButton: state.entityDetail.showSubGridCreateButton\n})\n\nconst mapActionCreators = {\n onRowClick: e => externalEvents.fireExternalEvent('onSubGridRowClick', {\n id: e.id,\n gridName: e.gridName,\n relationName: e.relationName\n }),\n navigateToCreate,\n onNavigateToCreate: relationName => externalEvents.fireExternalEvent('onNavigateToCreate', relationName),\n dispatchEmittedAction: actionEmitter.dispatchEmittedAction\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(SubGrid)\n","import React from 'react'\n\nimport SubGridContainer from '../../../containers/SubGridContainer'\n\nexport default (formField, key) => (\n <SubGridContainer\n key={key}\n formField={formField}\n showSearchForm={formField.showSearchForm}\n limit={formField.limit || undefined}\n />\n)\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {FormattedMessage} from 'react-intl'\nimport {Link, SignalBox, SignalList, design} from 'tocco-ui'\nimport {form} from 'tocco-app-extensions'\n\nconst ErrorBox = ({formErrors, showErrors}) => {\n let output = null\n const elements = []\n\n if (form.formErrorsUtil.hasFieldErrors(formErrors)) {\n elements.push(\n <SignalList.Item\n condition={design.condition.DANGER}\n key=\"hasFieldErrors\"\n >\n <Link\n label={<FormattedMessage id=\"client.entity-detail.invalidFieldsError\"/>}\n neutral\n onClick={showErrors}\n />\n </SignalList.Item>\n )\n }\n\n if (form.formErrorsUtil.hasValidatorErrors(formErrors)) {\n elements.push(\n <SignalList.Item condition={design.condition.DANGER} key=\"hasValidatorErrors\">\n <FormattedMessage id=\"client.entity-detail.validatorErrors\"/>\n <SignalList.List>\n {form.formErrorsUtil.getValidatorErrors(formErrors).map((message, idx) =>\n <SignalList.Item condition={design.condition.DANGER} key={idx} label={message} />\n )}\n </SignalList.List>\n </SignalList.Item>\n )\n }\n\n if (form.formErrorsUtil.hasRelatedEntityErrors(formErrors)) {\n elements.push(\n <SignalList.Item condition={design.condition.DANGER} key=\"hasRelatedEntityErrors\">\n <FormattedMessage id=\"client.entity-detail.invalidRelationErrors\"/>\n <SignalList.List>\n {form.formErrorsUtil.getRelatedEntityErrorsCompact(formErrors).map((message, idx) =>\n <SignalList.Item condition={design.condition.DANGER} key={idx} label={message} />\n )}\n </SignalList.List>\n </SignalList.Item>\n )\n }\n\n if (elements.length > 0) {\n output = (\n <SignalBox condition={design.condition.DANGER}>\n <SignalList.List>\n {elements.map(el => el)}\n </SignalList.List>\n </SignalBox>\n )\n }\n return output\n}\n\nErrorBox.propTypes = {\n formErrors: PropTypes.object,\n showErrors: PropTypes.func.isRequired\n}\n\nexport default ErrorBox\n","import ErrorBox from './ErrorBox'\n\nexport default ErrorBox\n","import {Button} from 'tocco-ui'\nimport React from 'react'\nimport {intlShape} from 'react-intl'\nimport PropTypes from 'prop-types'\n\nimport modes from '../../util/modes'\n\nconst SaveButton = ({submitting, mode, intl}) => {\n const msg = id => (intl.formatMessage({id}))\n\n return <Button\n data-cy=\"detail-form_submit-button\"\n disabled={submitting}\n ink=\"primary\"\n label={msg(`client.entity-detail.${mode === modes.CREATE ? 'create' : 'save'}`)}\n look=\"raised\"\n pending={submitting}\n type=\"submit\"\n />\n}\n\nSaveButton.propTypes = {\n intl: intlShape.isRequired,\n submitting: PropTypes.bool,\n mode: PropTypes.oneOf(Object.values(modes))\n}\n\nexport default SaveButton\n","import PropTypes from 'prop-types'\nimport React, {useEffect, useMemo} from 'react'\nimport {reduxForm} from 'redux-form'\nimport {intlShape} from 'react-intl'\nimport {form} from 'tocco-app-extensions'\nimport styled from 'styled-components'\n\nimport SubGrid from '../../util/detailView/fromFieldFactories/subGrid'\nimport ErrorBox from '../ErrorBox'\nimport SaveButton from './SaveButton'\n\nconst StyledForm = styled.form`\n display: flex;\n flex-direction: column;\n flex: 1;\n`\n\nconst DetailForm = props => {\n const {\n fireTouched,\n dirty,\n intl,\n submitting,\n mode,\n formErrors,\n valid,\n submitForm,\n touchAllFields,\n entity,\n formDefinition,\n formValues,\n anyTouched,\n form: formName\n } = props\n\n useEffect(() => {\n fireTouched(dirty)\n }, [dirty])\n\n const customActions = useMemo(() => (\n {\n save: () => <SaveButton intl={intl} submitting={submitting} mode={mode}/>\n }\n ), [submitting, mode])\n\n const focusErrorFields = () => {\n const firstErrorField = form.formErrorsUtil.getFirstErrorField(formErrors)\n if (firstErrorField) {\n const element = document.getElementById(form.getFieldId(formName, firstErrorField))\n if (element) {\n element.focus()\n }\n }\n }\n\n const save = () => {\n if (valid) {\n submitForm()\n } else if (formErrors) {\n showErrors()\n }\n }\n\n const handleSubmit = event => {\n event.preventDefault()\n save()\n }\n\n const handleKeyPress = event => {\n if (event.key === 'Enter' && event.target.tagName !== 'TEXTAREA') {\n event.preventDefault() // disable save on enter key down\n }\n }\n\n const showErrors = event => {\n if (event) {\n event.preventDefault()\n }\n\n touchAllFields()\n focusErrorFields()\n }\n\n return <StyledForm\n onSubmit={handleSubmit}\n onKeyDown={handleKeyPress}\n >\n <form.FormBuilder\n entity={entity}\n formName={props.form}\n formDefinition={formDefinition}\n formValues={formValues}\n fieldMappingType={formDefinition.readOnly ? 'readonly' : 'editable'}\n mode={mode}\n componentMapping={{[form.componentTypes.SUB_TABLE]: SubGrid}}\n customActions={customActions}\n />\n {!valid && anyTouched && <ErrorBox formErrors={formErrors} showErrors={showErrors}/>}\n </StyledForm>\n}\n\nDetailForm.propTypes = {\n intl: intlShape.isRequired,\n mode: PropTypes.oneOf(['update', 'create']),\n submitForm: PropTypes.func.isRequired,\n formDefinition: PropTypes.object.isRequired,\n entity: PropTypes.object.isRequired,\n form: PropTypes.string.isRequired,\n touch: PropTypes.func.isRequired,\n formValues: PropTypes.object,\n submitting: PropTypes.bool,\n formErrors: PropTypes.object,\n valid: PropTypes.bool,\n dirty: PropTypes.bool,\n lastSave: PropTypes.number,\n fireTouched: PropTypes.func.isRequired,\n touchAllFields: PropTypes.func.isRequired,\n anyTouched: PropTypes.bool\n}\n\nexport default reduxForm({\n form: 'detailForm',\n destroyOnUnmount: false\n})(DetailForm)\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport _get from 'lodash/get'\nimport {\n getFormValues,\n getFormInitialValues,\n getFormSyncErrors,\n getFormAsyncErrors,\n getFormSubmitErrors\n} from 'redux-form'\nimport {errorLogging} from 'tocco-app-extensions'\n\nimport DetailForm from '../components/DetailForm/DetailForm'\nimport {\n unloadDetailView,\n submitForm,\n fireTouched,\n touchAllFields\n} from '../modules/entityDetail/actions'\n\nconst mapActionCreators = {\n unloadDetailView,\n submitForm,\n fireTouched,\n touchAllFields,\n logError: errorLogging.logError\n}\n\nconst getFormGeneralErrors = formName =>\n state => (\n _get(state, `form.${formName}.error`, {})\n )\n\nconst mapStateToProps = state => ({\n formDefinition: state.entityDetail.formDefinition,\n entity: state.entityDetail.entity,\n formValues: getFormValues('detailForm')(state),\n formErrors: {\n ...getFormSyncErrors('detailForm')(state),\n ...getFormAsyncErrors('detailForm')(state),\n ...getFormSubmitErrors('detailForm')(state),\n _error: getFormGeneralErrors('detailForm')(state)\n },\n formInitialValues: getFormInitialValues('detailForm')(state),\n lastSave: state.entityDetail.lastSave\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(DetailForm))\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {intlShape} from 'react-intl'\nimport _isEmpty from 'lodash/isEmpty'\nimport {form} from 'tocco-app-extensions'\nimport {LoadMask} from 'tocco-ui'\n\nimport modes from '../../util/modes'\nimport DetailFormContainer from '../../containers/DetailFormContainer'\n\nclass DetailView extends React.Component {\n componentWillUnmount() {\n this.props.unloadDetailView()\n }\n\n handledAsyncValidate = formValues =>\n form.asyncValidation(\n formValues,\n this.props.mode === modes.CREATE ? {} : this.props.formInitialValues,\n this.props.fieldDefinitions,\n this.props.mode\n )\n\n getSyncValidation = () => {\n if (!this.validateSingleton && !_isEmpty(this.props.fieldDefinitions)) {\n this.validateSingleton = form.syncValidation(this.props.fieldDefinitions)\n }\n return this.validateSingleton\n }\n\n msg = id => this.props.intl.formatMessage({id})\n\n render() {\n const props = this.props\n\n return (\n <LoadMask\n required={[props.formInitialValues]}\n loadingText={this.msg('client.entity-detail.loadingText')}\n >\n <DetailFormContainer\n mode={this.props.mode}\n validate={this.getSyncValidation()}\n asyncValidate={this.handledAsyncValidate}\n />\n </LoadMask>\n )\n }\n}\n\nexport default DetailView\n\nDetailView.propTypes = {\n intl: intlShape.isRequired,\n mode: PropTypes.oneOf(['update', 'create']),\n loadDetailView: PropTypes.func.isRequired,\n unloadDetailView: PropTypes.func.isRequired,\n logError: PropTypes.func.isRequired,\n entityModel: PropTypes.object.isRequired,\n fieldDefinitions: PropTypes.arrayOf(\n PropTypes.shape({\n path: PropTypes.string,\n id: PropTypes.string,\n validation: PropTypes.object\n })\n ).isRequired,\n entityName: PropTypes.string.isRequired,\n entityId: PropTypes.string,\n formInitialValues: PropTypes.shape({\n initial: PropTypes.objectOf(PropTypes.string)\n })\n}\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport {getFormInitialValues} from 'redux-form'\nimport {errorLogging} from 'tocco-app-extensions'\nimport {hot} from 'react-hot-loader/root'\n\nimport {\n loadDetailView,\n unloadDetailView\n} from '../modules/entityDetail/actions'\nimport DetailView from '../components/DetailView/DetailView'\n\nconst mapActionCreators = {\n loadDetailView,\n unloadDetailView,\n logError: errorLogging.logError\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n entityName: state.entityDetail.entityName,\n entityId: state.entityDetail.entityId,\n entityModel: state.entityDetail.entityModel,\n fieldDefinitions: state.entityDetail.fieldDefinitions,\n mode: state.entityDetail.mode,\n formInitialValues: getFormInitialValues('detailForm')(state)\n }\n}\n\nexport default hot(connect(mapStateToProps, mapActionCreators)(injectIntl(DetailView)))\n","import {\n loadDetailView,\n setEntityName,\n setEntityId,\n setFormName,\n setMode,\n setAppId,\n setDefaultValues\n} from './modules/entityDetail/actions'\n\nexport const getDispatchActions = input => ([\n setEntityName(input.entityName),\n setEntityId(input.entityId ? input.entityId : null),\n setMode(input.mode),\n setFormName(input.formName),\n setAppId(input.id),\n setDefaultValues(input.defaultValues),\n loadDetailView()\n])\n","import {put} from 'redux-saga/effects'\n\nimport {navigateToCreate, navigateToAction} from './modules/entityDetail/actions'\n\nexport default {\n new: function* () {\n yield put(navigateToCreate())\n },\n fullscreen: function* (definition, selection) {\n yield put(navigateToAction(definition, selection))\n }\n}\n","import {submitForm} from './modules/entityDetail/actions'\n\nexport default [\n {\n ctrl: true,\n key: 's',\n actions: [submitForm()]\n }\n]\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {reducer as reducerUtil} from 'tocco-util'\nimport {hot} from 'react-hot-loader/root'\nimport {\n appFactory,\n notifier,\n errorLogging,\n actionEmitter,\n externalEvents,\n actions,\n formData,\n keyDown\n} from 'tocco-app-extensions'\nimport SimpleFormApp from 'tocco-simple-form/src/main'\nimport EntityListApp from 'tocco-entity-list/src/main'\n\nimport reducers, {sagas} from './modules/reducers'\nimport DetailViewContainer from './containers/DetailViewContainer'\nimport {getDispatchActions} from './input'\nimport customActions from './customActions'\nimport shortcuts from './shortcuts'\n\nconst packageName = 'entity-detail'\n\nconst EXTERNAL_EVENTS = [\n 'onSubGridRowClick',\n 'onEntityCreated',\n 'onEntityDeleted',\n 'onTouchedChange',\n 'emitAction',\n 'onNavigateToCreate',\n 'onNavigateToAction'\n]\n\nconst initApp = (id, input, events = {}, publicPath) => {\n const content = <DetailViewContainer/>\n\n const store = appFactory.createStore(reducers, sagas, input, packageName)\n externalEvents.addToStore(store, events)\n actionEmitter.addToStore(store, events.emitAction)\n errorLogging.addToStore(store, false)\n notifier.addToStore(store, false)\n actions.addToStore(store,\n {\n formApp: SimpleFormApp,\n listApp: EntityListApp,\n customActions,\n appComponent: input.actionAppComponent\n }\n )\n formData.addToStore(store, {listApp: EntityListApp, linkFactory: input.linkFactory})\n keyDown.addToStore(store, shortcuts)\n\n const dispatchActions = getDispatchActions(input)\n\n const app = appFactory.createApp(\n packageName,\n content,\n store,\n {\n input,\n events,\n actions: dispatchActions,\n publicPath,\n textResourceModules: ['component', 'common', 'entity-list']\n }\n )\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 return app\n}\n\n(() => {\n if (__DEV__ && __PACKAGE_NAME__ === 'entity-detail') {\n const input = require('./dev/input.json')\n\n if (!__NO_MOCK__) {\n const fetchMock = require('fetch-mock')\n\n const setupFetchMocks = require('./dev/fetchMocks').default\n setupFetchMocks(packageName, fetchMock)\n\n const listFetchMocks = require('tocco-entity-list/src/dev/fetchMocks').default\n listFetchMocks('entity-list', fetchMock)\n\n fetchMock.spy()\n }\n\n const app = initApp('id', input)\n appFactory.renderApp(app.component)\n } else {\n appFactory.registerAppInRegistry(packageName, initApp)\n }\n})()\n\nclass EntityDetailApp extends React.Component {\n constructor(props) {\n super(props)\n\n const events = EXTERNAL_EVENTS.reduce((events, event) => {\n if (props[event]) {\n events[event] = props[event]\n }\n return events\n }, {})\n\n this.app = initApp('id', props, events)\n }\n\n render() {\n return this.app.component\n }\n}\n\nEntityDetailApp.propTypes = {\n entityName: PropTypes.string.isRequired,\n formName: PropTypes.string.isRequired,\n mode: PropTypes.oneOf(['update', 'create']),\n ...EXTERNAL_EVENTS.reduce((propTypes, event) => {\n propTypes[event] = PropTypes.func\n return propTypes\n }, {}),\n onNavigateToAction: PropTypes.func,\n onNavigateToCreate: PropTypes.func,\n actionAppComponent: PropTypes.func\n}\n\nexport default hot(EntityDetailApp)\n","import queryStringUtil from 'query-string'\nimport _isObject from 'lodash/isObject'\nimport _mapValues from 'lodash/mapValues'\n\n/**\n * Build query string from params map object.\n *\n * Note: object values will be JSON-stringified\n *\n * @param obj The params map.\n * @returns the params map as query string.\n */\nexport const toQueryString = obj => {\n const stringifiedValues = _mapValues(obj, value => _isObject(value) ? JSON.stringify(value) : value)\n return queryStringUtil.stringify(stringifiedValues)\n}\n\n/**\n * Get params map object from query string.\n *\n * Note: param values that represent a JSON string will be parsed and returned as object.\n *\n * @param queryString The query string to parse.\n * @returns the query string as parsed object.\n */\nexport const fromQueryString = queryString => {\n const obj = queryStringUtil.parse(queryString)\n return _mapValues(obj, value => hasJsonStructure(value) ? JSON.parse(value) : value)\n}\n\nexport const hasJsonStructure = str => {\n if (typeof str !== 'string') {\n return false\n }\n try {\n const parsed = JSON.parse(str)\n const type = Object.prototype.toString.call(parsed)\n return type === '[object Object]'\n } catch (err) {\n return false\n }\n}\n","import {fromQueryString, toQueryString} from './queryString'\nexport default {\n fromQueryString,\n toQueryString\n}\n","import React, {lazy, Suspense} from 'react'\nimport {connect} from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {actionEmitter} from 'tocco-app-extensions'\nimport {LoadMask} from 'tocco-ui'\nimport {consoleLogger} from 'tocco-util'\n\nconst actions = {\n 'user-qr-action': lazy(() => import(/* webpackChunkName: \"actions\" */'./actions/UserQrAction')),\n 'input-edit': lazy(() => import(/* webpackChunkName: \"actions\" */'./actions/InputEdit')),\n 'resourcescheduler': lazy(() => import(/* webpackChunkName: \"actions\" */'./actions/ResourceScheduler')),\n 'cash_management_import': lazy(() => import(/* webpackChunkName: \"actions\" */'./actions/CashManagementImport')),\n 'show-output-jobs-action': lazy(() => import(/* webpackChunkName: \"actions\" */'./actions/ShowOutputJobsAction')),\n 'delete': lazy(() => import(/* webpackChunkName: \"actions\" */'./actions/Delete'))\n}\n\nconst renderLoader = () => <LoadMask/>\n\nconst LazyAction = props => {\n const {appId} = props\n const LazyAction = actions[appId]\n\n if (!LazyAction) {\n consoleLogger.logError(`no action found with id: ${appId}`)\n return null\n }\n\n const ActionComponent = connect(null, {\n emitAction: action => actionEmitter.dispatchEmittedAction(action)\n })(LazyAction)\n\n return <Suspense fallback={renderLoader()}>\n <ActionComponent {...props}/>\n </Suspense>\n}\n\nLazyAction.propTypes = {\n appId: PropTypes.string.isRequired\n}\n\nexport default LazyAction\n","import React, {useState} from 'react'\nimport PropTypes from 'prop-types'\nimport EntityDetailApp from 'tocco-entity-detail/src/main'\nimport {Prompt} from 'react-router'\nimport {intlShape} from 'react-intl'\nimport queryString from 'query-string'\nimport {queryString as queryStringUtil} from 'tocco-util'\nimport styled from 'styled-components'\nimport {scale, StyledScrollbar, theme} from 'tocco-ui'\n\nimport {goBack} from '../../../../utils/routing'\nimport StyledLink from '../../../../components/StyledLink/StyledLink'\nimport Action from '../Action'\nimport {currentViewPropType} from '../../utils/propTypes'\n\nexport const EntityDetailAppWrapper = styled.div`\n margin: 0;\n background-color: ${theme.color('paper')};\n padding: 0 0 0 1.5rem;\n overflow-y: auto;\n height: 100%;\n ${StyledScrollbar}\n\n .StyledRelationsViewWrapper {\n background-color: ${theme.color('paper')};\n position: sticky;\n top: 0;\n z-index: 1;\n padding-bottom: ${scale.space(-0.5)};\n display: flex;\n flex-wrap: wrap;\n\n & > * {\n margin-top: ${scale.space(-0.5)};\n }\n }\n`\n\nconst EditView = props => {\n const {\n currentViewInfo,\n history,\n match,\n intl,\n emitAction\n } = props\n\n const [touched, setTouched] = useState(false)\n const mode = 'update'\n\n if (!currentViewInfo || currentViewInfo.pathname !== history.location.pathname) {\n return null\n }\n\n const queryFormName = queryString.parse(location.search).formName\n\n const handleToucheChanged = ({touched}) => {\n setTouched(touched)\n }\n\n const handleNavigateToCreate = relationName => {\n if (relationName) {\n history.push(`${match.url}/${relationName}/create`)\n } else {\n const entityBaseUrl = goBack(match.url, 2)\n history.push(entityBaseUrl + '/create')\n }\n }\n\n const handleEntityDeleted = () => {\n const entityBaseUrl = goBack(match.url, 2)\n history.push(entityBaseUrl)\n }\n\n const handleNavigateToAction = ({definition, selection}) => {\n const entityBaseUrl = goBack(match.url)\n const search = queryStringUtil.toQueryString({\n selection,\n actionProperties: definition.properties\n })\n history.push({\n pathname: entityBaseUrl + '/action/' + definition.appId,\n state: {definition, selection},\n search\n })\n }\n\n const handleSubGridRowClick = ({id, relationName}) => {\n const entityBaseUrl = goBack(match.url)\n history.push(`${entityBaseUrl}/${relationName}/${id}`)\n }\n\n const entityName = currentViewInfo.model.name\n const msg = id => intl.formatMessage({id})\n\n return <EntityDetailAppWrapper>\n <Prompt\n when={touched}\n message={location => {\n if (history.location.pathname !== location.pathname) {\n return msg('client.entity-browser.detail.confirmTouchedFormLeave')\n }\n\n return false\n }}\n />\n <EntityDetailApp\n entityName={entityName}\n entityId={currentViewInfo.key}\n formName={queryFormName || entityName}\n mode={mode}\n emitAction={emitAction}\n onTouchedChange = {handleToucheChanged}\n linkFactory={{\n detail: (entity, relation, key, children) =>\n <StyledLink to={`/e/${entity}/${key}`} target=\"_blank\">{children}</StyledLink>\n }}\n onNavigateToCreate={handleNavigateToCreate}\n onNavigateToAction={handleNavigateToAction}\n onEntityDeleted={handleEntityDeleted}\n actionAppComponent={Action}\n onSubGridRowClick={handleSubGridRowClick}\n />\n </EntityDetailAppWrapper>\n}\n\nEditView.propTypes = {\n intl: intlShape,\n match: PropTypes.object,\n history: PropTypes.object,\n currentViewInfo: currentViewPropType,\n emitAction: PropTypes.func.isRequired\n}\n\nexport default EditView\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport {actionEmitter} from 'tocco-app-extensions'\n\nimport EditView from './EditView'\nconst mapActionCreators = {\n emitAction: action => actionEmitter.dispatchEmittedAction(action)\n}\n\nconst mapStateToProps = (state, props) => ({\n currentViewInfo: state.entities.path.currentViewInfos[props.history.location.pathname]\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(EditView))\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {FormattedMessage} from 'react-intl'\nimport {Typography, Icon, theme, scale} from 'tocco-ui'\nimport styled from 'styled-components'\n\nconst StyledErrorView = styled.div`\n width: 50vw;\n max-width: 650px;\n padding: ${scale.space(1)};\n text-align: center;\n margin: 20vh auto auto;\n\n h1 {\n margin: 0 auto;\n }\n`\n\nconst StyledIconWrapper = styled.span`\n color: ${theme.color('signal.danger.text')};\n font-size: ${scale.font(13.4)};\n`\n\nconst ErrorView = ({message, technicalReason}) => {\n return <StyledErrorView>\n <StyledIconWrapper>\n <Icon icon=\"times\"/>\n </StyledIconWrapper>\n <Typography.H1>\n <FormattedMessage id={message || 'client.admin.errorView.defaultTitle'}/>\n </Typography.H1>\n <Typography.Span>{technicalReason}</Typography.Span>\n </StyledErrorView>\n}\n\nErrorView.propTypes = {\n technicalReason: PropTypes.string,\n message: PropTypes.string\n}\n\nexport default ErrorView\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {intlShape} from 'react-intl'\nimport styled from 'styled-components'\n\nimport RelationsView from '../RelationsView'\nimport EditView from '../EditView'\nimport {currentViewPropType} from '../../utils/propTypes'\nimport ErrorView from '../../../../components/ErrorView'\n\nconst DetailViewContainer = styled.div`\n display: flex;\n flex-direction: row;\n height: 100%;\n\n .react-bs-container-body {\n height: auto !important;\n }\n`\n\nconst DetailViewPart = styled.div`\n flex: 1;\n\n &:first-child {\n margin-right: 1rem;\n\n @media (max-width: 1024px) {\n flex: none;\n width: 40%;\n }\n }\n`\n\nconst DetailView = ({match, history, currentViewInfo}) => {\n if (currentViewInfo && currentViewInfo.error) {\n return <ErrorView message=\"client.admin.entity.detailError\" technicalReason={currentViewInfo.error.message}/>\n }\n\n return <DetailViewContainer>\n <DetailViewPart>\n <EditView match={match} history={history}/>\n </DetailViewPart>\n <DetailViewPart>\n <RelationsView match={match} history={history}/>\n </DetailViewPart>\n </DetailViewContainer>\n}\n\nDetailView.propTypes = {\n intl: intlShape,\n match: PropTypes.object,\n history: PropTypes.object,\n currentViewInfo: currentViewPropType\n}\n\nexport default DetailView\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport DetailView from './DetailView'\n\nconst mapActionCreators = {}\n\nconst mapStateToProps = (state, props) => ({\n currentViewInfo: state.entities.path.currentViewInfos[props.history.location.pathname]\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(DetailView))\n","import React, {useEffect} from 'react'\nimport PropTypes from 'prop-types'\nimport {queryString as queryStringUtil, js} from 'tocco-util'\nimport {intlShape} from 'react-intl'\nimport _get from 'lodash/get'\n\nimport Action from '../Action'\nimport {currentViewPropType} from '../../utils/propTypes'\n\nconst ActionView = ({history, match, setCurrentViewTitle, currentViewInfo, intl}) => {\n const {location} = history\n useEffect(() => {\n if (currentViewInfo) {\n setCurrentViewTitle(intl.formatMessage({id: `client.actions.${currentViewInfo.actionId}.title`}))\n }\n\n return () => {\n setCurrentViewTitle(null)\n }\n }, [currentViewInfo])\n\n if (!currentViewInfo) {\n return null\n }\n\n const queryParams = queryStringUtil.fromQueryString(location.search)\n const selection = _get(location, 'state.selection', queryParams.actionProperties)\n const actionProperties = _get(location, 'state.definition.properties', queryParams.actionProperties)\n\n return (\n <Action\n history={history}\n match={match}\n appId={currentViewInfo.actionId}\n selection={selection}\n actionProperties={actionProperties}\n />\n )\n}\n\nActionView.propTypes = {\n intl: intlShape.isRequired,\n currentViewInfo: currentViewPropType,\n setCurrentViewTitle: PropTypes.func.isRequired,\n history: PropTypes.shape({\n location: PropTypes.shape({\n search: PropTypes.string,\n state: PropTypes.shape({\n selection: PropTypes.object,\n definition: PropTypes.shape({\n appId: PropTypes.string\n })\n })\n })\n }).isRequired,\n match: PropTypes.object\n}\n\nconst areEqual = (prevProps, nextProps) => {\n const diff = Object.keys(js.difference(prevProps, nextProps))\n return diff.length === 0\n}\n\nexport default React.memo(ActionView, areEqual)\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport ActionView from './ActionView'\nimport {setCurrentViewTitle} from '../../modules/path/actions'\nconst mapActionCreators = {\n setCurrentViewTitle\n}\n\nconst mapStateToProps = (state, props) => ({\n currentViewInfo: state.entities.path.currentViewInfos[props.history.location.pathname]\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(ActionView))\n","/* eslint-disable max-len */\nimport React from 'react'\nimport {Redirect, Route, Switch} from 'react-router-dom'\nimport PropTypes from 'prop-types'\n\nimport Entity from '../../subroutes/entity'\nimport Relations from '../../subroutes/relations'\nimport Detail from '../../subroutes/detail'\nimport Edit from '../../subroutes/edit'\nimport Action from '../../subroutes/action'\n\nfunction wordCount(str, word) {\n return str.split(word).length - 1\n}\n\nconst EntityRecordRoute = ({match}) => {\n const count = wordCount(match.path, ':relation')\n\n return (\n <Switch>\n <Route exact path={`${match.url}`} render={({match}) => <Redirect to={`${match.url.replace(/\\/$/, '')}/detail`}/>}/>\n <Route path={`${match.path}/detail`} component={Detail}/>\n <Route path={`${match.path}/edit`} component={Edit}/>\n <Route path={`${match.path}/relations`} component={Relations}/>\n <Route path={`${match.path}/action`} component={Action}/>\n <Route path={`${match.path}/:relation_${count}`} component={Entity}/>\n </Switch>\n )\n}\n\nEntityRecordRoute.propTypes = {\n match: PropTypes.object.isRequired\n}\n\nexport default EntityRecordRoute\n","import EntityRecordRoute from './EntityRecordRoute'\n\nexport default EntityRecordRoute\n","import React, {useState} from 'react'\nimport PropTypes from 'prop-types'\nimport _get from 'lodash/get'\nimport {intlShape} from 'react-intl'\nimport EntityDetailApp from 'tocco-entity-detail/src/main'\nimport {Prompt} from 'react-router'\nimport styled from 'styled-components'\nimport {theme, StyledScrollbar, scale} from 'tocco-ui'\n\nimport {currentViewPropType} from '../../utils/propTypes'\n\nconst EntityDetailAppWrapper = styled.div`\n margin: 0;\n background-color: ${theme.color('paper')};\n padding: 0 0 0 1.5rem;\n overflow-y: auto;\n height: 100%;\n ${StyledScrollbar}\n\n .StyledRelationsViewWrapper {\n background-color: ${theme.color('paper')};\n position: sticky;\n top: 0;\n z-index: 1;\n padding-bottom: ${scale.space(-0.5)};\n display: flex;\n flex-wrap: wrap;\n\n & > * {\n margin-top: ${scale.space(-0.5)};\n }\n }\n`\n\nconst CreateView = props => {\n const {\n currentViewInfo,\n history,\n match,\n intl,\n dispatchEmittedAction\n } = props\n\n const [touched, setTouched] = useState(false)\n\n const mode = 'create'\n\n if (!currentViewInfo) return null\n const {model, reverseRelation, parentKey} = currentViewInfo\n const entityName = model.name\n\n const isMultiReverseRelation = _get(model, `paths.${reverseRelation}.multi`, false)\n\n const defaultValues = [\n ...((reverseRelation && parentKey)\n ? [{id: reverseRelation, value: isMultiReverseRelation ? [parentKey] : parentKey}]\n : []\n )\n ]\n\n const handleEntityCreated = ({id}) => {\n setTouched(false)\n history.push(match.url.replace(/create$/, id))\n }\n\n const msg = id => intl.formatMessage({id})\n const handleToucheChanged = ({touched}) => setTouched(touched)\n\n return <EntityDetailAppWrapper>\n <Prompt\n when={touched}\n message={msg('client.entity-browser.detail.confirmTouchedFormLeave')}\n />\n <EntityDetailApp\n entityName={entityName}\n formName={entityName}\n mode={mode}\n defaultValues={defaultValues}\n emitAction={action => {\n dispatchEmittedAction(action)\n }}\n onEntityCreated={handleEntityCreated}\n onTouchedChange={handleToucheChanged}\n />\n </EntityDetailAppWrapper>\n}\n\nCreateView.propTypes = {\n intl: intlShape,\n match: PropTypes.object,\n history: PropTypes.object,\n currentViewInfo: currentViewPropType,\n dispatchEmittedAction: PropTypes.func.isRequired\n}\n\nexport default CreateView\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport {actionEmitter} from 'tocco-app-extensions'\n\nimport CreateView from './CreateView'\n\nconst mapActionCreators = {\n\n dispatchEmittedAction: actionEmitter.dispatchEmittedAction\n}\n\nconst mapStateToProps = (state, props) => ({\n currentViewInfo: state.entities.path.currentViewInfos[props.history.location.pathname]\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(CreateView))\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport EntityListApp from 'tocco-entity-list/src/main'\nimport queryString from 'query-string'\nimport {queryString as queryStringUtil} from 'tocco-util'\n\nimport StyledLink from '../../../../components/StyledLink/StyledLink'\nimport {goBack} from '../../../../utils/routing'\nimport Action from '../Action/LazyAction'\nimport {currentViewPropType} from '../../utils/propTypes'\nimport ErrorView from '../../../../components/ErrorView'\n\nconst ListView = ({match, history, currentViewInfo, emitAction, persistViewInfo, persistedViewInfo}) => {\n if (currentViewInfo && currentViewInfo.error) {\n return <ErrorView technicalReason={currentViewInfo.error.message}/>\n }\n\n if (!currentViewInfo) {\n return null\n }\n\n const queryParams = queryString.parse(location.search)\n\n const handleRowClick = ({id}) => {\n history.push(match.url.replace(/list$/, '') + id)\n }\n\n const handleNavigateToCreate = relationName => {\n if (relationName) {\n history.push(`${match.url}/${relationName}/create`)\n } else {\n const entityBaseUrl = goBack(match.url)\n history.push(entityBaseUrl + '/create')\n }\n }\n\n const handleNavigateToAction = ({definition, selection}) => {\n const entityBaseUrl = goBack(match.url)\n const search = queryStringUtil.toQueryString({\n selection,\n actionProperties: definition.properties\n })\n history.push({\n pathname: entityBaseUrl + '/action/' + definition.appId,\n state: {definition, selection},\n search\n })\n }\n\n return (\n <EntityListApp\n emitAction={emitAction}\n limit={25}\n id={`${currentViewInfo.model.name}_list`}\n entityName={currentViewInfo.model.name}\n formName={queryParams.formName || currentViewInfo.model.name}\n onRowClick={handleRowClick}\n {...(currentViewInfo.reverseRelation && {\n parent: {\n key: currentViewInfo.parentKey,\n reverseRelationName: currentViewInfo.reverseRelation,\n model: currentViewInfo.parentModel.name\n }\n })}\n showLink={true}\n linkFactory={{\n detail: (entity, relation, key, children) =>\n entity\n ? <StyledLink to={`/e/${entity}/${key}`} target=\"_blank\">{children}</StyledLink>\n : <StyledLink to={key}>{children}</StyledLink>\n }}\n onNavigateToCreate={handleNavigateToCreate}\n searchFormPosition=\"left\"\n searchFormType=\"admin\"\n store={persistedViewInfo.store}\n onStoreCreate={store => {\n persistViewInfo(history.location.pathname, currentViewInfo.level, {store})\n }}\n onNavigateToAction={handleNavigateToAction}\n actionAppComponent={Action}\n tql={queryParams.tql}\n />\n )\n}\n\nListView.propTypes = {\n match: PropTypes.object.isRequired,\n emitAction: PropTypes.func.isRequired,\n persistViewInfo: PropTypes.func.isRequired,\n history: PropTypes.object.isRequired,\n currentViewInfo: currentViewPropType,\n persistedViewInfo: PropTypes.shape({\n store: PropTypes.object\n })\n}\n\nexport default ListView\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport {actionEmitter, viewPersistor} from 'tocco-app-extensions'\n\nimport ListView from './ListView'\nconst mapActionCreators = {\n emitAction: action => actionEmitter.dispatchEmittedAction(action),\n persistViewInfo: viewPersistor.persistViewInfo\n}\n\nconst mapStateToProps = (state, props) => ({\n currentViewInfo: state.entities.path.currentViewInfos[props.history.location.pathname],\n persistedViewInfo: viewPersistor.viewInfoSelector(state, props.history.location.pathname)\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(ListView))\n","import EntityRoute from './EntityRoute'\n\nexport default EntityRoute\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {Redirect, Route, Switch} from 'react-router-dom'\n\nimport Record from '../../subroutes/record'\nimport Create from '../../subroutes/create'\nimport List from '../../subroutes/list'\nimport Action from '../../subroutes/action'\n\nconst EntityRoute = ({match}) => (\n <Switch>\n <Route exact path={match.url} render={({match}) => <Redirect to={`${match.url.replace(/\\/$/, '')}/list`}/>}/>\n <Route path={`${match.path}/action/:id`} component={Action}/>\n <Route path={`${match.path}/list`} component={List}/>\n <Route path={`${match.path}/create`} component={Create}/>\n <Route path={`${match.path}/:key`} component={Record}/>\n </Switch>\n)\n\nEntityRoute.propTypes = {\n match: PropTypes.object.isRequired\n}\n\nexport default EntityRoute\n","/* stylelint-disable no-descending-specificity */\nimport styled from 'styled-components'\nimport {theme} from 'tocco-ui'\n\nimport {StyledLink} from '../../../../components/StyledLink'\n\nexport const StyledBreadcumbs = styled.div`\n background-color: ${theme.color('backgroundBreadcrumbs')};\n width: 100%;\n padding: .8rem 1.7rem;\n\n span:nth-child(even) {\n margin-left: 1.5rem;\n margin-right: 1.5rem;\n }\n`\n\nexport const StyledBreadcrumbsLink = styled(StyledLink)`\n font-weight: ${theme.fontWeight('bold')};\n text-decoration: none;\n color: ${props => props.active && theme.color('primary')};\n\n & * {\n font-weight: ${theme.fontWeight('bold')};\n text-decoration: none;\n color: ${props => props.active && theme.color('primary')};\n margin-right: .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: ${props => props.active && theme.color('primary')};\n\n & * {\n font-weight: ${theme.fontWeight('bold')};\n text-decoration: none;\n color: ${props => props.active && theme.color('primary')};\n margin-right: .5rem;\n }\n\n &:active * {\n color: ${theme.color('primary')};\n }\n`\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {Icon, Typography} from 'tocco-ui'\nimport {Helmet} from 'react-helmet'\n\nimport {\n StyledBreadcumbs,\n StyledBreadcrumbsLink,\n StyledBreadcrumbsTitle\n} from './StyledBreadcrumbs'\n\nconst getTitle = breadcrumbsInfo =>\n breadcrumbsInfo\n .slice(breadcrumbsInfo.length - 2)\n .map(breadcrumb => breadcrumb.display)\n .reverse()\n .join(' - ')\n\nconst Breadcrumbs = ({breadcrumbsInfo, currentViewTitle}) => {\n const breadcrumbs = [\n ...(breadcrumbsInfo || []),\n ...(currentViewTitle ? [{display: currentViewTitle}] : [])\n ]\n\n if (breadcrumbs.length === 0) return null\n\n return <StyledBreadcumbs>\n <Helmet defer={false}>\n <title>{getTitle(breadcrumbsInfo)}</title>\n </Helmet>\n <div> {\n breadcrumbs.map((b, idx) => {\n const display = b.display || ''\n const Comp = idx === breadcrumbs.length - 1 ? StyledBreadcrumbsTitle : StyledBreadcrumbsLink\n return <Typography.Span key={`breadcrumbItem-${idx}`}>\n <Comp\n neutral=\"true\"\n {...(idx === breadcrumbs.length - 1 && {active: 'true'})}\n to={`/e/${b.path}`}\n >\n {b.type === 'list' && <Icon icon=\"list-ul\" />} {display}\n </Comp>\n </Typography.Span>\n })\n .reduce((prev, curr, idx) =>\n [prev,\n <Typography.Span key={'icon' + idx}> <Icon icon=\"angle-right\"/> </Typography.Span>,\n curr]\n )}\n </div>\n </StyledBreadcumbs>\n}\n\nBreadcrumbs.propTypes = {\n match: PropTypes.object,\n breadcrumbsInfo: PropTypes.arrayOf(\n PropTypes.shape({\n display: PropTypes.string,\n path: PropTypes.string,\n type: PropTypes.string\n })\n ),\n currentViewTitle: PropTypes.string\n}\n\nexport default Breadcrumbs\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport Breadcrumbs from './Breadcrumbs'\n\nconst mapActionCreators = {\n\n}\n\nconst mapStateToProps = (state, props) => ({\n breadcrumbsInfo: state.entities.path.breadcrumbsInfo,\n currentViewTitle: state.entities.path.currentViewTitle\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(Breadcrumbs))\n","import React, {useEffect} from 'react'\nimport {Route, Switch} from 'react-router-dom'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nimport Overview from '../../subroutes/overview'\nimport Entity from '../../subroutes/entity'\nimport Action from '../../subroutes/action'\nimport Breadcrumbs from '../Breadcrumbs'\n\nconst StyledWrapper = styled.div`\n display: grid;\n grid-template-rows: auto 1fr;\n grid-template-areas:\n 'breadcrumbs'\n 'content';\n height: 100%;\n width: 100%;\n`\n\nconst StyledContent = styled.div`\n grid-area: content;\n overflow: hidden;\n`\n\nconst StyledBreadcrumbs = styled.div`\n grid-area: breadcrumbs;\n`\n\nconst EntitiesRoute = ({match, history, loadCurrentRoute}) => {\n const location = history.location\n\n useEffect(() => {\n loadCurrentRoute(location)\n }, [location])\n\n return <StyledWrapper>\n <StyledBreadcrumbs>\n <Breadcrumbs/>\n </StyledBreadcrumbs>\n <StyledContent>\n <Switch>\n <Route\n path={`${match.url}/action/:actionId`}\n component={Action}\n />\n <Route\n path={`${match.url}/:entity`}\n component={Entity}\n />\n <Route exact path={match.url} component={Overview}/>\n </Switch>\n </StyledContent>\n </StyledWrapper>\n}\n\nEntitiesRoute.propTypes = {\n loadCurrentRoute: PropTypes.func.isRequired,\n history: PropTypes.object.isRequired,\n match: PropTypes.object.isRequired\n}\n\nexport default EntitiesRoute\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport {hot} from 'react-hot-loader/root'\n\nimport EntitiesRoute from './EntitiesRoute'\nimport {loadCurrentRoute} from '../../modules/path/actions'\n\nconst mapActionCreators = {\n loadCurrentRoute\n}\n\nexport default hot(connect(null, mapActionCreators)(injectIntl(EntitiesRoute)))\n","import EntitiesRoute from './EntitiesRouteContainer'\n\nexport default EntitiesRoute\n","import {combineReducers} from 'redux'\n\nimport sagas from './modules/path/sagas'\nimport path from './modules/path'\nimport EntitiesRoute from './components/EntitiesRoute'\n\nexport default {\n container: EntitiesRoute,\n reducers: {\n entities: combineReducers({path})\n },\n sagas: [sagas]\n}\n"],"sourceRoot":""}