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/tocco-util/src/selection/selectionTypes.js","webpack:///./packages/tocco-util/src/selection/selection.js","webpack:///./packages/tocco-util/src/selection/proptype.js","webpack:///./packages/tocco-util/src/selection/index.js","webpack:///./packages/admin/src/routes/entities/components/Action/actions/CashManagementImport.js","webpack:///./packages/admin/src/routes/entities/components/Action/actions/ShowOutputJobsAction.js","webpack:///./packages/input-edit/src/modules/inputEditTable/actions.js","webpack:///./packages/input-edit/src/modules/inputEditTable/reducer.js","webpack:///./packages/input-edit/src/modules/inputEditPagination/actions.js","webpack:///./packages/input-edit/src/modules/inputEditSearch/actions.js","webpack:///./packages/input-edit/src/modules/inputEditTable/utils.js","webpack:///./packages/input-edit/src/modules/inputEditTable/sagas.js","webpack:///./packages/input-edit/src/modules/inputEditTable/index.js","webpack:///./packages/input-edit/src/modules/inputEditSearch/reducer.js","webpack:///./packages/input-edit/src/modules/inputEditSearch/sagas.js","webpack:///./packages/input-edit/src/modules/inputEditSearch/index.js","webpack:///./packages/input-edit/src/modules/inputEditPagination/reducer.js","webpack:///./packages/input-edit/src/modules/inputEditPagination/sagas.js","webpack:///./packages/input-edit/src/modules/inputEditPagination/index.js","webpack:///./packages/input-edit/src/modules/inputEdit/actions.js","webpack:///./packages/input-edit/src/modules/inputEdit/reducer.js","webpack:///./packages/input-edit/src/modules/inputEdit/sagas.js","webpack:///./packages/input-edit/src/modules/inputEdit/index.js","webpack:///./packages/input-edit/src/modules/inputEditInformation/actions.js","webpack:///./packages/input-edit/src/modules/inputEditInformation/reducer.js","webpack:///./packages/input-edit/src/modules/inputEditInformation/sagas.js","webpack:///./packages/input-edit/src/modules/inputEditInformation/index.js","webpack:///./packages/input-edit/src/modules/reducers.js","webpack:///./packages/input-edit/src/components/InputEditTable/StyledComponents.js","webpack:///./packages/input-edit/src/components/InputEditTable/keyHandler.js","webpack:///./packages/input-edit/src/components/InputEditTable/InputEditTable.js","webpack:///./packages/input-edit/src/components/InputEditTable/InputEditTableContainer.js","webpack:///./packages/input-edit/src/components/InputEditSearch/InputEditSearch.js","webpack:///./packages/input-edit/src/components/InputEditSearch/InputEditSearchContainer.js","webpack:///./packages/input-edit/src/components/InputEdit/StyledInputEdit.js","webpack:///./packages/input-edit/src/components/InputEditInformation/StyledInputEditInformation.js","webpack:///./packages/input-edit/src/components/InputEditInformation/InputEditInformation.js","webpack:///./packages/input-edit/src/components/InputEditInformation/InputEditInformationContainer.js","webpack:///./packages/input-edit/src/components/InputEdit/InputEdit.js","webpack:///./packages/input-edit/src/components/InputEdit/InputEditContainer.js","webpack:///./packages/input-edit/src/main.js","webpack:///./packages/admin/src/routes/entities/components/Action/actions/InputEdit.js","webpack:///./packages/resource-scheduler/src/modules/resourceScheduler/actions.js","webpack:///./packages/resource-scheduler/src/modules/resourceScheduler/reducer.js","webpack:///./packages/resource-scheduler/src/utils/rest.js","webpack:///./packages/resource-scheduler/src/modules/resourceScheduler/sagas.js","webpack:///./packages/resource-scheduler/src/modules/resourceScheduler/index.js","webpack:///./packages/resource-scheduler/src/modules/reducers.js","webpack:///./packages/resource-scheduler/src/components/SearchPanel/SearchPanel.js","webpack:///./packages/scheduler/src/modules/scheduler/actions.js","webpack:///./packages/scheduler/src/modules/scheduler/reducer.js","webpack:///./packages/scheduler/src/modules/scheduler/sagas.js","webpack:///./packages/scheduler/src/modules/scheduler/index.js","webpack:///./packages/scheduler/src/modules/reducers.js","webpack:///./packages/scheduler/src/components/NavigationFullCalendar/StyledNavigationFullCalendar.js","webpack:///./packages/scheduler/src/components/NavigationFullCalendar/NavigationFullCalendar.js","webpack:///./packages/scheduler/src/components/NavigationFullCalendar/index.js","webpack:///./packages/scheduler/src/components/FullCalendar/StyledFullCalendar.js","webpack:///./packages/scheduler/src/utils/conflicts.js","webpack:///./packages/scheduler/src/components/Conflict/index.js","webpack:///./packages/scheduler/src/components/Conflict/Conflict.js","webpack:///./packages/scheduler/src/utils/time.js","webpack:///./packages/scheduler/src/components/FullCalendar/FullCalendar.js","webpack:///./packages/scheduler/src/components/FullCalendar/index.js","webpack:///./packages/tocco-util/src/color/hexToRgb.js","webpack:///./packages/tocco-util/src/color/contrast.js","webpack:///./packages/tocco-util/src/color/index.js","webpack:///./packages/scheduler/src/utils/calendar.js","webpack:///./packages/scheduler/src/components/Scheduler/index.js","webpack:///./packages/scheduler/src/components/Scheduler/Scheduler.js","webpack:///./packages/scheduler/src/containers/SchedulerContainer.js","webpack:///./packages/scheduler/src/input.js","webpack:///./packages/scheduler/src/main.js","webpack:///./packages/resource-scheduler/src/containers/SchedulerAppContainer.js","webpack:///./packages/resource-scheduler/src/components/ResourceScheduler/StyledResourceScheduler.js","webpack:///./packages/resource-scheduler/src/components/ResourceScheduler/ResourceScheduler.js","webpack:///./packages/resource-scheduler/src/components/ResourceScheduler/index.js","webpack:///./packages/resource-scheduler/src/containers/ResourceSchedulerContainer.js","webpack:///./packages/resource-scheduler/src/main.js","webpack:///./packages/admin/src/routes/entities/components/Action/actions/ResourceScheduler.js","webpack:///./packages/delete/src/modules/delete/actions.js","webpack:///./packages/delete/src/modules/delete/reducer.js","webpack:///./packages/delete/src/utils/deleteRequestParser.js","webpack:///./packages/delete/src/modules/delete/sagas.js","webpack:///./packages/delete/src/modules/reducers.js","webpack:///./packages/delete/src/components/InfoPart/LinkPopOver.js","webpack:///./packages/delete/src/components/InfoPart/InfoPart.js","webpack:///./packages/delete/src/components/Dialog/Dialog.js","webpack:///./packages/delete/src/components/Dialog/DialogContainer.js","webpack:///./packages/delete/src/components/DeleteProgress/DeleteProgress.js","webpack:///./packages/delete/src/components/DeleteProgress/DeleteProgressContainer.js","webpack:///./packages/delete/src/components/DeleteProgress/index.js","webpack:///./packages/delete/src/components/Delete/Delete.js","webpack:///./packages/delete/src/components/Delete/DeleteContainer.js","webpack:///./packages/delete/src/components/Delete/index.js","webpack:///./packages/delete/src/main.js","webpack:///./packages/admin/src/routes/entities/components/Action/actions/Delete.js","webpack:///./packages/user-qr-action/src/modules/qrCode/actions.js","webpack:///./packages/user-qr-action/src/modules/qrCode/reducer.js","webpack:///./packages/user-qr-action/src/modules/qrCode/sagas.js","webpack:///./packages/user-qr-action/src/modules/reducers.js","webpack:///./packages/user-qr-action/src/utils/qrCodeUtils.js","webpack:///./packages/user-qr-action/src/components/UserQrCode/UserQrCode.js","webpack:///./packages/user-qr-action/src/components/UserQrCode/index.js","webpack:///./packages/user-qr-action/src/containers/UserQrCodeContainer.js","webpack:///./packages/user-qr-action/src/main.js","webpack:///./packages/admin/src/routes/entities/components/Action/actions/UserQrAction.js"],"names":["ID","QUERY","getEntities","limit","selection","fetchEntities","entityName","type","selectionTypes","call","query","entities","length","consoleLogger","logError","keys","map","e","key","ids","PropTypes","shape","string","isRequired","props","propName","componentName","Error","oneOf","Object","count","number","propType","CashManagement","entityBaseUrl","goBack","match","url","to","ShowOutputJobsAction","pathname","search","encodeURIComponent","INITIALIZE_TABLE","LOAD_DATA","UPDATE_VALUE","SET_SORTING","setData","data","payload","setEditForm","form","setValue","inputDataKey","node","value","setDataFormColumns","dataFormColumns","setActionDefinitions","actionDefinitions","setDataLoadingInProgress","dataLoadingInProgress","initialState","inputEditForm","sorting","getOpposite","order","ACTION_HANDLERS","reducerUtil","singleTransferReducer","state","action","reduce","acc","val","pk","actions","field","add","contains","filter","s","currentSorting","SET_CURRENT_PAGE","setTotalCount","totalCount","INITIALIZE_SEARCH","SET_SEARCH_QUERIES","SET_INITIALIZED","setForm","setInitialized","initialized","transformResponseData","response","body","dataRecord","splitObj","isNaN","parseInt","inputFields","entityFields","api","flattenPaths","__key","sagas","processDataForm","initialize","loadData","updateValue","handleResponse","inputSelector","input","inputEditSelector","inputEdit","inputEditTableSelector","inputEditTable","inputEditSearchSelector","inputEditSearch","searchQueriesSelector","searchQueries","inputEditPaginationSelector","inputEditPagination","all","takeLatest","takeEvery","dataForm","children","find","child","id","componentType","scope","put","select","actionProperties","inputEditDataForm","rest","requestSaga","method","fetchForm","editForm","take","searchFormActions","newSorting","newSearchQueries","newPage","currentPage","recordsPerPage","paths","getPathsFromTable","searchBean","buildRequestQuery","page","where","join","transformedData","flatMap","column","path","values","calculatedValues","actionsToPut","reducer","handler","setSearchQueries","setCurrentPage","UPDATE_SELECTION","setSelection","setHandleNotifications","handleNotifications","emit","updateInputDatas","ACTION_INVOKE","actionEmitter","emitAction","INITIALIZE_INFORMATION","setInformation","information","inputEditReducer","inputEditTableReducer","inputEditSearchReducer","inputEditPaginationReducer","inputEditInformation","inputEditSagas","inputEditTableSagas","inputEditSearchSagas","inputEditPaginationSagas","inputEditInformationSagas","borderColor","theme","shadeColor","_get","baseSpace","scale","space","StyledTableWrapper","styled","table","color","div","StyledCell","arrowKeyHandler","tr","lighten","colors","secondaryLight","th","declareFont","fontWeight","event","includes","document","activeElement","tagName","preventDefault","split","rowIndex","columnIndex","currentIndex","Number","indexDiff","idToFocus","elementToFocus","getElementById","focusElement","findHorizontalElementToFocus","adjustedIndex","disabled","setTimeout","focus","dataCellRenderer","fieldDefinition","dataType","Field","factory","formField","breakWords","InputEditTable","setSorting","useState","columns","setColumns","columnPosition","setColumnPosition","useEffect","dataColumns","getColumnDefinition","inputColumns","c","idx","label","sortable","definition","resizable","dynamic","CellRenderer","rowData","rowIdx","row","readonly","options","events","onChange","changedValue","onFocus","target","inputCellRenderer","cc","sort","a","b","findIndex","onKeyDown","onSortingChange","onColumnPositionChange","newPositionColumn","paginationInfo","onPageChange","mapActionCreators","connect","handleChange","setSearchFields","tql","transformFormValuesToTql","entries","fieldType","getFieldType","Array","isArray","tqlBuilder","getTql","container","InputEditSearch","_debounce","noButtons","validate","mappingType","StyledPaneWrapper","sharedSplitPaneStyles","css","StyledScrollbar","StyledPanelWrapperLeft","StyledPanelWrapperRight","StyledInputEditSearchWrapper","StyledLeftPane","StyledActionsWrapper","StyledInputEditInformation","StyledStatedValueWrapper","InputEditInformation","info","immutable","hasValue","notifier","Notifier","InputEdit","updateSelection","initializeTable","initializeSearch","initializeInformation","Action","notify","EXTERNAL_EVENTS","initApp","publicPath","content","store","appFactory","createStore","reducers","addToStore","errorLogging","createApp","textResourceModules","registerAppInRegistry","InputEditApp","component","propTypes","object","func","hot","INITIALIZE","UPDATE_REQUESTED_CALENDARS","SET_DATE_RANGE","REMOVE_REQUESTED_CALENDAR","ON_EVENT_CLICK","ON_REFRESH","setCalendarTypes","calendarTypes","updateRequestedCalendars","calendarType","setCalendars","calendars","setDateRange","dateRange","removeRequestedCalendar","entityModel","requestedCalendars","_omit","typesToRemove","targetEntity","name","adjustedValue","transformRequestedCalendars","_reduce","result","calendarTypeId","loadCalendarTypes","retrieveCalendars","onEventClick","resourceSchedulerSelector","resourceScheduler","startDate","endDate","start","getTime","end","calendarsResponse","externalEvents","fireExternalEvent","resourceSchedulerSagas","PanelHeaderContent","Span","icon","aria-hidden","style","position","design","PREPEND","SearchPanel","Wrapper","Header","Body","locale","formName","formBase","showSearchForm","selectable","onSelectChange","handleSelect","simpleSearchFields","disableSelectionController","showActions","Group","getSearchLists","activeKey","React","PureComponent","SET_CALENDARS","ON_DATE_RANGE_CHANGE","ON_CALENDAR_REMOVE","ON_CALENDARS_REMOVE_ALL","removeEvents","setIsLoading","isLoading","calendar","onDateRangeChange","onCalendarRemove","onCalendarRemoveAll","onRefresh","entity","extendedProps","scheduler","schedulerSagas","StyledNavigationFullCalendar","getButtonInkProps","viewType","ink","msg","intl","formatMessage","NavigationFullCalendar","injectIntl","date","changeRange","changeView","chooseNext","choosePrev","chooseToday","goToDate","refresh","title","look","onClick","marginLeft","pending","StyledFullCalendar","fontSize","font","radii","colorizeBorder","shade2","freeze","EXISTING","ACCEPTED","NONE","Conflict","conflictStatus","conflicts","accepted","textResource","getFormattedTime","format","replace","FullCalendar","resources","calendarEl","useRef","wrapperEl","moment","addDeselectAllButton","current","batchRendering","getEventSources","forEach","eS","remove","addEventSource","JSON","stringify","loadedResources","getResources","l","r","addResource","firstHeaderNode","querySelectorAll","checkbox","createElement","checked","className","visibility","onclick","innerHTML","appendChild","view","activeStart","activeEnd","resourceRender","renderInfo","element","el","getElementsByClassName","resource","entityKey","prepend","eventRender","time","twix","monthFormat","dayFormat","tooltipDescriptionContent","description","conflict","ReactDOMServer","renderToString","Tooltip","placement","trigger","html","boundariesElement","innerSelector","arrowSelector","template","FullCalendarMemorized","useMemo","plugins","resourceTimelinePlugin","interactionPlugin","ref","schedulerLicenseKey","licence","process","defaultView","header","height","resourceAreaWidth","resourceColumns","labelText","eventClick","firstDay","minTime","maxTime","views","dayView","slotLabelFormat","weekView","weekday","month","day","weekViewSimple","slotDuration","monthView","omitCommas","next","prev","today","gotoDate","getDate","defaultProps","hexToRgb","hex","fallBack","normalizeHex","exec","g","startsWith","padEnd","calculateLight","colorItem","Math","pow","calculateLumiance","hexColor","brightValue","darkValue","rgbColor","getResourceId","model","getEvents","accumulator","source","resourceId","backgroundColor","backgroundHexColor","Scheduler","this","Component","getDispatchActions","push","SchedulerContainer","SchedulerApp","app","prevProps","dispatch","resizerStyle","background","width","cursor","StyledSplitPanelWrapperLeft","StyledSplitPanelWrapperRight","StyledSplitPane","SplitPane","SchedulerAppContainer","ResourceScheduler","defaultSize","paneWidth","minSize","ResourceSchedulerContainer","dispatchActions","ResourceSchedulerApp","history","createHref","window","open","LOAD_DIALOG_INFO","DO_DELETE","ON_CANCEL","setDeleteDialogInfo","dialogInfo","doDelete","setDeletingInProgress","deletingInProgress","deleteStatus","currentBuId","entitiesToDelete","entityToDelete","deletable","rootEntity","affectedEntities","affectedEntity","isEntityDeletable","keyAttr","relatedAttr","relatedEntities","keysOtherBu","entityLabel","businessUnitId","from","Set","transformRelatedEntities","keysDeletable","keysNotDeletable","relatedDeletable","relatedNotDeletable","hasUnreadableEntities","unreadableEntities","relatedPropType","arrayOf","objectOf","bool","getDeleteBodyFromSelection","loadDialogInfo","onCancel","mainSagas","textResourceSelector","messages","dialogInfoSelector","del","selectionUtil","deleteDialogResource","fetchPrincipal","deleteResponse","principal","res","deleteRequestParser","currentBusinessUnit","deleteResource","textResources","ok","deletedEntities","remoteEvents","message","deleteSagas","P","LinkPopOver","relatedEntity","maxCountLink","spacer","NonBreakingText","span","InfoPart","primaryTql","B","slice","linkText","Count","Content","Fragment","curr","condition","Dialog","paddingTop","size","DeleteProgress","Delete","required","loadingText","DeleteApp","FETCH_DATA","undefined","fetchData","userKey","getSingleKey","fetchEntity","bean","qrCode","qrCodeSagas","appendField","fieldName","outputPrefix","output","fieldData","StyledContainer","StyledContent","UserQrCode","lastname","firstname","address","buildUserMecardString","UserQrActionApp"],"mappings":"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","file":"actions-chunk-46d61a.js","sourcesContent":["export default {\n ID: 'ID',\n QUERY: 'QUERY'\n}\n","import {call} from 'redux-saga/effects'\n\nimport consoleLogger from '../consoleLogger'\nimport selectionTypes from './selectionTypes'\n\nconst limit = 100000\n/**\n * Helper to get all entitiy keys of a selection.\n * @param {object} selection - selection object\n * @param {function} fetchEntities - rest helper function\n * @returns {object} Object containing entityName and an array of keys (limited if selection is query)\n */\nexport function* getEntities(selection, fetchEntities) {\n const {entityName} = selection\n if (selection.type === selectionTypes.QUERY) {\n const entities = yield call(fetchEntities, selection.entityName, {...selection.query, limit})\n\n if (entities.length > limit) {\n yield call(consoleLogger.logError, `Selected records exceed limit of ${limit}`)\n }\n\n return {\n entityName,\n keys: entities.map(e => e.key)\n }\n }\n\n return {\n entityName,\n keys: selection.ids\n }\n}\n","import PropTypes from 'prop-types'\n\nimport selectionTypes from './selectionTypes'\n\nexport default PropTypes.shape({\n entityName: PropTypes.string.isRequired,\n ids: (props, propName, componentName) => {\n if (props.selection && props.selection.type === selectionTypes.ID && !props.selection[propName]) {\n return new Error(`Selection.ids prop not defined. Component: ${componentName}'.`)\n }\n },\n query: (props, propName, componentName) => {\n if (props.selection && props.selection.type === selectionTypes.QUERY && !props.selection[propName]) {\n return new Error(`Selection.query prop not defined. Component: ${componentName}'.`)\n }\n },\n type: PropTypes.oneOf(Object.keys(selectionTypes)).isRequired,\n count: PropTypes.number\n})\n","import {getEntities} from './selection'\nimport propType from './proptype'\nimport selectionTypes from './selectionTypes'\nexport default {\n getEntities,\n propType,\n selectionTypes\n}\n","import React from 'react'\nimport {Redirect} from 'react-router-dom'\nimport PropTypes from 'prop-types'\n\nimport {goBack} from '../../../../../utils/routing'\n\nconst CashManagement = props => {\n const entityBaseUrl = goBack(props.match.url, 2)\n return <Redirect to={entityBaseUrl + '/Cash_management_import/list?formName=Cash_management_import_action'}/>\n}\n\nCashManagement.propTypes = {\n match: PropTypes.shape({\n url: PropTypes.string\n }).isRequired\n}\n\nexport default CashManagement\n","import React from 'react'\nimport {Redirect} from 'react-router-dom'\nimport PropTypes from 'prop-types'\n\nconst ShowOutputJobsAction = props => <Redirect to={{\n pathname: '/e/Output_job/list',\n search: `tql=${encodeURIComponent(`entity==\"${props.selection.entityName}\"`)}`\n}}/>\n\nShowOutputJobsAction.propTypes = {\n selection: PropTypes.shape({\n entityName: PropTypes.string.isRequired\n }).isRequired\n}\n\nexport default ShowOutputJobsAction\n","export const INITIALIZE_TABLE = 'inputEditTable/INITIALIZE_TABLE'\nexport const LOAD_DATA = 'inputEditTable/LOAD_DATA'\nexport const SET_DATA = 'inputEditTable/SET_DATA'\nexport const SET_EDIT_FORM = 'inputEditTable/SET_EDIT_FORM'\nexport const UPDATE_VALUE = 'inputEditTable/UPDATE_VALUE'\nexport const SET_VALUE = 'inputEditTable/SET_VALUE'\nexport const SET_SORTING = 'inputEditTable/SET_SORTING'\nexport const SET_DATA_FORM_COLUMNS = 'inputEditTable/SET_DATA_FORM_COLUMNS'\nexport const SET_ACTION_DEFINITIONS = 'inputEditTable/SET_ACTION_DEFINITIONS'\nexport const SET_DATA_LOADING_IN_PROGRESS = 'inputEditTable/SET_DATA_LOADING_IN_PROGRESS'\n\nexport const initializeTable = () => ({\n type: INITIALIZE_TABLE\n})\n\nexport const loadData = () => ({\n type: LOAD_DATA\n})\n\nexport const setData = data => ({\n type: SET_DATA,\n payload: {data}\n})\n\nexport const setEditForm = form => ({\n type: SET_EDIT_FORM,\n payload: form\n})\n\nexport const updateValue = (inputDataKey, node, value) => ({\n type: UPDATE_VALUE,\n payload: {\n inputDataKey,\n node,\n value\n }\n})\n\nexport const setValue = (inputDataKey, node, value) => ({\n type: SET_VALUE,\n payload: {\n inputDataKey,\n node,\n value\n }\n})\n\nexport const setSorting = (field, add) => ({\n type: SET_SORTING,\n payload: {\n field,\n add\n }\n})\n\nexport const setDataFormColumns = dataFormColumns => ({\n type: SET_DATA_FORM_COLUMNS,\n payload: {\n dataFormColumns\n }\n})\n\nexport const setActionDefinitions = actionDefinitions => ({\n type: SET_ACTION_DEFINITIONS,\n payload: {\n actionDefinitions\n }\n})\n\nexport const setDataLoadingInProgress = dataLoadingInProgress => ({\n type: SET_DATA_LOADING_IN_PROGRESS,\n payload: {\n dataLoadingInProgress\n }\n})\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst initialState = {\n actionDefinitions: [],\n dataFormColumns: [],\n data: [],\n inputEditForm: [],\n sorting: [],\n dataLoadingInProgress: false\n}\n\nconst setValue = (state, action) => {\n const {inputDataKey, node, value} = action.payload\n return {\n ...state,\n data: state.data.reduce((acc, val) => {\n if (val.pk === inputDataKey) {\n return [...acc, {\n ...val,\n [node]: value\n }]\n }\n return [...acc, val]\n }, [])\n }\n}\n\nconst defaultOrder = 'asc'\nconst getOpposite = order => order === 'asc' ? 'desc' : 'asc'\nconst setSorting = (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_DATA_FORM_COLUMNS]: reducerUtil.singleTransferReducer('dataFormColumns'),\n [actions.SET_ACTION_DEFINITIONS]: reducerUtil.singleTransferReducer('actionDefinitions'),\n [actions.SET_EDIT_FORM]: reducerUtil.singleTransferReducer('inputEditForm'),\n [actions.SET_DATA]: reducerUtil.singleTransferReducer('data'),\n [actions.SET_DATA_LOADING_IN_PROGRESS]: reducerUtil.singleTransferReducer('dataLoadingInProgress'),\n [actions.SET_VALUE]: setValue,\n [actions.SET_SORTING]: setSorting\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_CURRENT_PAGE = 'inputEditPagination/SET_CURRENT_PAGE'\nexport const SET_TOTAL_COUNT = 'inputEditPagination/SET_TOTAL_COUNT'\r\n\nexport const setCurrentPage = currentPage => ({\n type: SET_CURRENT_PAGE,\n payload: {currentPage}\n})\n\nexport const setTotalCount = totalCount => ({\n type: SET_TOTAL_COUNT,\n payload: {\n totalCount\n }\n})\n","export const INITIALIZE_SEARCH = 'inputEditSearch/INITIALIZE_SEARCH'\nexport const SET_FORM = 'inputEditSearch/SET_FORM'\nexport const SET_SEARCH_QUERIES = 'inputEditSearch/SET_SEARCH_QUERIES'\nexport const SET_INITIALIZED = 'inputEditSearch/SET_INITIALIZED'\r\n\nexport const initializeSearch = () => ({\n type: INITIALIZE_SEARCH\n})\n\nexport const setForm = form => ({\n type: SET_FORM,\n payload: {form}\n})\n\nexport const setSearchQueries = searchQueries => ({\n type: SET_SEARCH_QUERIES,\n payload: {searchQueries}\n})\n\nexport const setInitialized = initialized => ({\n type: SET_INITIALIZED,\n payload: {\n initialized\n }\n})\n","import {api} from 'tocco-util'\n\nexport const transformResponseData = response =>\n response.body.data.map(dataRecord => {\n const splitObj = Object.keys(dataRecord).reduce((acc, key) => {\n const isInputField = !isNaN(parseInt(key))\n return {\n ...acc,\n ...(isInputField ? {\n inputFields: {\n ...acc.inputFields,\n [key]: dataRecord[key]\n }\n } : {\n entityFields: {\n ...acc.entityFields,\n [key]: dataRecord[key]\n }\n })\n }\n }, {\n inputFields: {},\n entityFields: {}\n })\n\n return {...splitObj.inputFields, ...api.flattenPaths(splitObj.entityFields)}\n }\n ).map(dataRecord => ({...dataRecord, __key: dataRecord.pk}))\n","import {all, call, put, select, takeEvery, takeLatest, take} from 'redux-saga/effects'\nimport {rest} from 'tocco-app-extensions'\n\nimport * as actions from './actions'\nimport {setTotalCount} from '../inputEditPagination/actions'\nimport * as searchFormActions from '../inputEditSearch/actions'\nimport {transformResponseData} from './utils'\n\nexport const inputSelector = state => state.input\nexport const inputEditSelector = state => state.inputEdit\nexport const inputEditTableSelector = state => state.inputEditTable\nexport const inputEditSearchSelector = state => state.inputEditSearch\nexport const searchQueriesSelector = state => state.inputEditSearch.searchQueries\nexport const inputEditPaginationSelector = state => state.inputEditPagination\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.INITIALIZE_TABLE, initialize),\n takeLatest(actions.LOAD_DATA, loadData),\n takeEvery(actions.UPDATE_VALUE, updateValue),\n takeLatest(actions.SET_SORTING, loadData)\n ])\n}\n\nexport function* processDataForm(dataForm) {\n const actionDefinitions = dataForm.children\n .find(child => child.id === 'main-action-bar')\n .children\n .filter(child => child.componentType === 'action')\n .map(child => ({...child, scope: 'detail'}))\n\n yield put(actions.setActionDefinitions(actionDefinitions))\n\n const dataFormColumns = dataForm.children.find(child => child.componentType === 'table').children\n\n yield put(actions.setDataFormColumns(dataFormColumns))\n}\n\nexport function* initialize() {\n yield put(actions.setDataLoadingInProgress(true))\n const {selection} = yield select(inputEditSelector)\n const {actionProperties} = yield select(inputSelector)\n const inputEditDataForm = actionProperties && actionProperties.inputEditDataForm\n ? actionProperties.inputEditDataForm\n : 'Input_edit_data'\n const [editForm, dataForm] = yield all([\n call(rest.requestSaga, 'inputEdit/form', {method: 'POST', body: selection}),\n call(rest.fetchForm, inputEditDataForm, 'list')\n ])\n yield put(actions.setEditForm({inputEditForm: editForm.body}))\n yield call(processDataForm, dataForm)\n\n const {initialized: searchFormInitialized} = yield select(inputEditSearchSelector)\n if (!searchFormInitialized) {\n yield take(searchFormActions.SET_INITIALIZED)\n }\n yield call(loadData, {})\n}\n\nexport function* loadData({newSorting, newSearchQueries, newPage}) {\n yield put(actions.setDataLoadingInProgress(true))\n const {selection} = yield select(inputEditSelector)\n const sorting = newSorting || (yield select(inputEditTableSelector)).sorting\n const searchQueries = newSearchQueries || (yield select(searchQueriesSelector))\n const currentPage = newPage || (yield select(inputEditPaginationSelector)).currentPage\n const {recordsPerPage} = yield select(inputEditPaginationSelector)\n const dataFormColumns = (yield select(inputEditTableSelector)).dataFormColumns\n const paths = getPathsFromTable(dataFormColumns)\n const searchBean = rest.buildRequestQuery({\n limit: recordsPerPage,\n sorting,\n page: currentPage,\n where: searchQueries.join(' and '),\n paths: paths\n })\n const response = yield call(rest.requestSaga, 'inputEdit/data/search', {\n method: 'POST',\n body: {\n selection,\n searchBean\n }\n })\n\n const transformedData = yield call(transformResponseData, response)\n yield put(actions.setData(transformedData))\n yield put(setTotalCount(response.body.count))\n yield put(actions.setDataLoadingInProgress(false))\n}\n\nconst getPathsFromTable = dataFormColumns => [\n 'pk',\n ...(dataFormColumns.flatMap(column => column.children.map(field => field.path)))\n]\n\nexport function* updateValue({payload: {inputDataKey, node, value}}) {\n yield put(actions.setValue(inputDataKey, node, value))\n\n const response = yield call(rest.requestSaga, 'inputEdit/data',\n {\n method: 'POST',\n body: {\n inputDataKey,\n node,\n value\n }\n }\n )\n yield handleResponse(response)\n}\n\nfunction* handleResponse(response) {\n const values = response.body.calculatedValues\n if (values) {\n const actionsToPut = values.map(value => actions.setValue(value.inputDataKey, value.node, value.value))\n yield all(actionsToPut.map(action => put(action)))\n }\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 initialState = {\n form: {},\n initialized: false,\n searchQueries: []\n}\n\nconst ACTION_HANDLERS = {\n [actions.SET_FORM]: reducerUtil.singleTransferReducer('form'),\n [actions.SET_SEARCH_QUERIES]: reducerUtil.singleTransferReducer('searchQueries'),\n [actions.SET_INITIALIZED]: reducerUtil.singleTransferReducer('initialized')\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, takeLatest, call, put, select} from 'redux-saga/effects'\nimport {rest} from 'tocco-app-extensions'\n\nimport * as actions from '../inputEditSearch/actions'\nimport {loadData} from '../inputEditTable/sagas'\n\nexport const inputEditSelector = state => state.inputEdit\nexport const inputEditSearchSelector = state => state.inputEditSearch\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.INITIALIZE_SEARCH, initialize),\n takeLatest(actions.SET_SEARCH_QUERIES, setSearchQueries)\n ])\n}\n\nexport function* initialize() {\n const form = yield call(rest.fetchForm, 'Input_edit_data', 'search')\n yield put(actions.setForm(form))\n}\n\nexport function* setSearchQueries({payload}) {\n const {initialized} = yield select(inputEditSearchSelector)\n if (initialized) {\n yield call(loadData, {newSearchQueries: payload.searchQueries})\n } else {\n yield put(actions.setInitialized(true))\n }\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 {SET_CURRENT_PAGE, SET_TOTAL_COUNT} from './actions'\n\nconst initialState = {\n totalCount: 0,\n currentPage: 1,\n recordsPerPage: 25\n}\n\nconst ACTION_HANDLERS = {\n [SET_TOTAL_COUNT]: reducerUtil.singleTransferReducer('totalCount'),\n [SET_CURRENT_PAGE]: reducerUtil.singleTransferReducer('currentPage')\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, takeLatest, call} from 'redux-saga/effects'\n\nimport * as actions from '../inputEditPagination/actions'\nimport {loadData} from '../inputEditTable/sagas'\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.SET_CURRENT_PAGE, setCurrentPage)\n ])\n}\n\nexport function* setCurrentPage({payload: {currentPage}}) {\n yield call(loadData, {newPage: currentPage})\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","export const SET_SELECTION = 'inputEdit/SET_SELECTION'\nexport const UPDATE_SELECTION = 'inputEdit/UPDATE_SELECTION'\nexport const SET_HANDLE_NOTIFICATIONS = 'inputEdit/SET_HANDLE_NOTIFICATIONS'\n\nexport const setSelection = selection => ({\n type: SET_SELECTION,\n payload: {selection}\n})\n\nexport const updateSelection = () => ({\n type: UPDATE_SELECTION,\n payload: {}\n})\n\nexport const setHandleNotifications = handleNotifications => ({\n type: SET_HANDLE_NOTIFICATIONS,\n payload: {\n handleNotifications\n }\n})\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport {SET_SELECTION, SET_HANDLE_NOTIFICATIONS} from './actions'\n\nconst initialState = {\n selection: null,\n handleNotifications: false\n}\n\nconst ACTION_HANDLERS = {\n [SET_SELECTION]: reducerUtil.singleTransferReducer('selection'),\n [SET_HANDLE_NOTIFICATIONS]: reducerUtil.singleTransferReducer('handleNotifications')\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, actionEmitter, rest} from 'tocco-app-extensions'\nimport {all, takeEvery, takeLatest, put, select, call} from 'redux-saga/effects'\n\nimport {UPDATE_SELECTION} from './actions'\n\nconst inputEditSelector = state => state.inputEdit\n\nexport default function* sagas() {\n yield all([\n takeEvery(actions.actions.ACTION_INVOKE, emit),\n takeLatest(UPDATE_SELECTION, updateInputDatas)\n ])\n}\n\nexport function* emit(action) {\n yield put(actionEmitter.emitAction(action))\n}\n\nexport function* updateInputDatas() {\n const {selection} = yield select(inputEditSelector)\n yield call(rest.requestSaga, 'inputEdit/update-input-datas', {method: 'POST', body: selection})\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","export const INITIALIZE_INFORMATION = 'inputEditInformation/INITIALIZE_INFORMATION'\nexport const SET_INFORMATION = 'inputEditInformation/SET_INFORMATION'\n\nexport const initializeInformation = () => ({\n type: INITIALIZE_INFORMATION\n})\n\nexport const setInformation = information => ({\n type: SET_INFORMATION,\n payload: {information}\n})\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst initialState = {\n information: []\n}\n\nconst ACTION_HANDLERS = {\n [actions.SET_INFORMATION]: reducerUtil.singleTransferReducer('information')\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, takeLatest, call, put, select} from 'redux-saga/effects'\nimport {rest} from 'tocco-app-extensions'\n\nimport * as actions from '../inputEditInformation/actions'\n\nconst inputEditSelector = state => state.inputEdit\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.INITIALIZE_INFORMATION, initialize)\n ])\n}\n\nexport function* initialize() {\n const {selection} = yield select(inputEditSelector)\n const {body} = yield call(rest.requestSaga, 'inputEdit/information', {method: 'POST', body: selection})\n yield put(actions.setInformation(body))\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","import inputEditTableReducer, {sagas as inputEditTableSagas} from './inputEditTable'\nimport inputEditSearchReducer, {sagas as inputEditSearchSagas} from './inputEditSearch'\nimport inputEditPaginationReducer, {sagas as inputEditPaginationSagas} from './inputEditPagination'\nimport inputEditReducer, {sagas as inputEditSagas} from './inputEdit'\nimport inputEditInformationReducer, {sagas as inputEditInformationSagas} from './inputEditInformation'\n\nexport default {\n inputEdit: inputEditReducer,\n inputEditTable: inputEditTableReducer,\n inputEditSearch: inputEditSearchReducer,\n inputEditPagination: inputEditPaginationReducer,\n inputEditInformation: inputEditInformationReducer\n}\n\nexport const sagas = [\n inputEditSagas,\n inputEditTableSagas,\n inputEditSearchSagas,\n inputEditPaginationSagas,\n inputEditInformationSagas\n]\n","import styled from 'styled-components'\nimport {scale, shadeColor, theme, declareFont} from 'tocco-ui'\nimport _get from 'lodash/get'\nimport {lighten} from 'polished'\n\nconst borderColor = ({theme}) => shadeColor(_get(theme, 'colors.paper'), 2)\nconst baseSpace = scale.space(-1)\n\nexport const StyledTable = styled.table`\n background-color: ${theme.color('paper')};\n border-collapse: collapse;\n border-spacing: 0;\n width: 100%;\n margin-top: ${baseSpace};\n margin-bottom: ${baseSpace};\n table-layout: fixed;\n min-width: 900px;\n`\n\nexport const StyledTableWrapper = styled.div`\n width: 100%;\n height: 100%;\n overflow: auto;\n`\n\nexport const StyledCell = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n\n && {\n input,\n textarea,\n &.single-select > span > div {\n border: 1px solid transparent;\n padding-left: ${baseSpace};\n\n &:not([disabled]):hover {\n cursor: pointer;\n border-color: ${borderColor};\n }\n\n &:not([disabled]):focus {\n border-color: ${borderColor};\n }\n }\n\n &.single-select > span {\n display: inline-block;\n width: 100%;\n margin-left: 5px;\n margin-bottom: 5px;\n background-color: ${theme.color('paper')};\n }\n\n &.single-select button {\n margin-bottom: 2px;\n margin-right: 2px;\n }\n }\n`\n\nexport const StyledTableRow = styled.tr`\n &:hover {\n ${StyledCell} {\n background-color: ${({theme}) => lighten(0.25, theme.colors.secondaryLight)};\n }\n }\n`\n\nexport const StyledHeader = styled.th`\n padding: ${baseSpace};\n background-color: ${theme.color('paper')};\n text-align: left;\n border-bottom: 2px solid ${borderColor};\n ${declareFont({fontWeight: theme.fontWeight('bold')})};\n user-select: none;\n text-overflow: ellipsis;\n\n &:hover {\n background-color: ${({theme}) => lighten(0.25, theme.colors.secondaryLight)};\n }\n`\n","export const arrowKeyHandler = event => {\n if (['INPUT', 'TEXTAREA'].includes(document.activeElement.tagName)\n && ['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp'].includes(event.key)) {\n event.preventDefault()\n const [rowIndex, columnIndex] = document.activeElement.id.split(':')\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n const currentIndex = Number.parseInt(rowIndex)\n const indexDiff = event.key === 'ArrowUp' ? -1 : 1\n const idToFocus = `${currentIndex + indexDiff}:${columnIndex}`\n const elementToFocus = document.getElementById(idToFocus)\n focusElement(elementToFocus)\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n const currentIndex = Number.parseInt(columnIndex)\n const indexDiff = event.key === 'ArrowLeft' ? -1 : 1\n const elementToFocus = findHorizontalElementToFocus(rowIndex, currentIndex, indexDiff)\n focusElement(elementToFocus)\n }\n }\n}\n\n/**\n * there might be readonly fields mixed in, so we need to check the rest of the fields\n * @param rowIndex which row to navigate in\n * @param currentIndex last checked cell index\n * @param indexDiff which direction to move in\n * @returns {HTMLElement}\n */\nconst findHorizontalElementToFocus = (rowIndex, currentIndex, indexDiff) => {\n const adjustedIndex = currentIndex + indexDiff\n const idToFocus = `${rowIndex}:${adjustedIndex}`\n const elementToFocus = document.getElementById(idToFocus)\n if (elementToFocus) {\n if (['INPUT', 'TEXTAREA'].includes(elementToFocus.tagName) && !elementToFocus.disabled) {\n return elementToFocus\n } else {\n return findHorizontalElementToFocus(rowIndex, adjustedIndex, indexDiff)\n }\n } else {\n return elementToFocus\n }\n}\n\nconst focusElement = elementToFocus => {\n if (elementToFocus) {\n // Reacts NumberFormat is clingy and steals focus when using left and right arrow keys, so we steal it back\n setTimeout(() => {\n elementToFocus.focus()\n }, 0)\n }\n}\n","import React, {useEffect, useState} from 'react'\nimport PropTypes from 'prop-types'\nimport {Table, EditableValue, FormattedValue} from 'tocco-ui'\nimport {api} from 'tocco-util'\nimport {field} from 'tocco-app-extensions'\n\nimport {\n StyledCell,\n StyledTableWrapper\n} from './StyledComponents'\nimport {arrowKeyHandler} from './keyHandler'\n\nconst dataCellRenderer = (fieldDefinition, data) => {\n const {path, dataType} = fieldDefinition\n const Field = field.factory('list', dataType)\n const value = data[path]\n\n return <StyledCell key={path}>\n <Field\n type={dataType}\n formField={fieldDefinition}\n value={value}\n breakWords={false}\n />\n </StyledCell>\n}\n\nconst keyBuilder = (row, column) => `${row}:${column}`\n\nconst inputCellRenderer = (fieldDefinition, data, updateValue, rowIdx) => {\n const {readonly, id, dataType, options} = fieldDefinition.definition\n\n const pk = data.pk\n const value = data[id]\n\n if (readonly) {\n return <StyledCell key={id}>\n <FormattedValue\n id={id}\n type={dataType}\n value={value}\n options={options}\n />\n </StyledCell>\n } else {\n return <StyledCell key={id}>\n <EditableValue\n id={keyBuilder(rowIdx, fieldDefinition.idx)}\n type={dataType}\n value={value}\n options={options}\n events={{\n onChange: changedValue => {\n updateValue(pk, id, changedValue)\n },\n onFocus: ({target}) => target.select()\n }}\n />\n </StyledCell>\n }\n}\n\nconst InputEditTable = ({\n data,\n dataFormColumns,\n inputEditForm,\n updateValue,\n sorting,\n setSorting,\n dataLoadingInProgress,\n totalCount,\n currentPage,\n recordsPerPage,\n setCurrentPage\n}) => {\n const [columns, setColumns] = useState([])\n const [columnPosition, setColumnPosition] = useState([])\n\n useEffect(() => {\n const dataColumns = api.getColumnDefinition(dataFormColumns, sorting, dataCellRenderer)\n\n const inputColumns = inputEditForm.map((c, idx) => ({\n idx: idx,\n id: c.id,\n label: c.label,\n sorting: {\n sortable: false\n },\n definition: c,\n resizable: true,\n dynamic: true,\n CellRenderer: ({rowData, column, rowIdx}) => inputCellRenderer(column, rowData, updateValue, rowIdx)\n }))\n\n const cc = [...dataColumns, ...inputColumns].sort((a, b) =>\n columnPosition.findIndex(e => e === a.id) - columnPosition.findIndex(e => e === b.id)\n )\n setColumns(cc)\n }, [columnPosition, dataFormColumns, inputEditForm, sorting])\n\n const onColumnPositionChange = (column, newPositionColumn, columns) => {\n setColumnPosition(columns.reduce((acc, c) => {\n return [\n ...acc,\n ...(c.id === newPositionColumn ? [\n c.id, column\n ] : []),\n ...(c.id === column ? [] : [c.id])\n ]\n }, []))\n }\n\n if (columns.length === 0) {\n return null\n }\n\n return <StyledTableWrapper onKeyDown={arrowKeyHandler}>\n <Table\n dataLoadingInProgress={dataLoadingInProgress}\n columns={columns}\n data={data}\n onSortingChange={setSorting}\n onColumnPositionChange={onColumnPositionChange}\n paginationInfo={{\n currentPage,\n recordsPerPage,\n totalCount\n }}\n onPageChange={setCurrentPage}\n />\n </StyledTableWrapper>\n}\n\nInputEditTable.propTypes = {\n data: PropTypes.array.isRequired,\n dataFormColumns: PropTypes.arrayOf(\n PropTypes.shape({id: PropTypes.string})\n ),\n sorting: PropTypes.arrayOf(PropTypes.shape({\n field: PropTypes.string,\n order: PropTypes.string\n })),\n inputEditForm: PropTypes.array.isRequired,\n updateValue: PropTypes.func.isRequired,\n setSorting: PropTypes.func.isRequired,\n dataLoadingInProgress: PropTypes.bool,\n totalCount: PropTypes.number,\n currentPage: PropTypes.number.isRequired,\n recordsPerPage: PropTypes.number.isRequired,\n setCurrentPage: PropTypes.func.isRequired\n}\n\nexport default InputEditTable\n","import {connect} from 'react-redux'\n\nimport InputEditTable from './InputEditTable'\nimport {updateValue, setSorting} from '../../modules/inputEditTable/actions'\nimport {setCurrentPage} from '../../modules/inputEditPagination/actions'\n\nconst mapActionCreators = {\n updateValue,\n setSorting,\n setCurrentPage\n}\n\nconst mapStateToProps = state => {\n return {\n data: state.inputEditTable.data,\n dataFormColumns: state.inputEditTable.dataFormColumns,\n inputEditForm: state.inputEditTable.inputEditForm,\n sorting: state.inputEditTable.sorting,\n dataLoadingInProgress: state.inputEditTable.dataLoadingInProgress,\n totalCount: state.inputEditPagination.totalCount,\n currentPage: state.inputEditPagination.currentPage,\n recordsPerPage: state.inputEditPagination.recordsPerPage\n }\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(InputEditTable)\n","import React from 'react'\nimport SimpleFormApp from 'tocco-simple-form/src/main'\nimport _debounce from 'lodash/debounce'\nimport {tqlBuilder} from 'tocco-util'\nimport PropTypes from 'prop-types'\n\nconst InputEditSearch = ({form, setSearchFields}) => {\n return form.children\n ? <SimpleFormApp\n form={form}\n onChange={_debounce(handleChange(form, setSearchFields), 500)}\n noButtons={true}\n validate={false}\n mappingType=\"search\"\n />\n : null\n}\n\nconst handleChange = (form, setSearchFields) => ({values}) => {\n if (Object.keys(values).length > 0) {\n const tql = transformFormValuesToTql(values, form)\n setSearchFields(tql)\n } else {\n setSearchFields([])\n }\n}\n\nconst transformFormValuesToTql = (values, form) =>\n Object.entries(values)\n .map(([path, value]) => (\n {\n path,\n fieldType: getFieldType(path, form),\n value\n }\n ))\n .filter(({path, fieldType, value}) => value && (!Array.isArray(value) || value.length > 0))\n .map(({path, fieldType, value}) => tqlBuilder.getTql(path, value, fieldType))\n\nconst getFieldType = (path, form) => {\n const container = form.children.find(child => child.children.length > 0)\n if (container) {\n const field = container.children.find(child => child.id === path)\n\n return field.children.length > 0 ? field.children[0].dataType : field.dataType\n }\n}\n\nInputEditSearch.propTypes = {\n form: PropTypes.object.isRequired,\n setSearchFields: PropTypes.func.isRequired\n}\n\nexport default InputEditSearch\n","import {connect} from 'react-redux'\n\nimport InputEditSearch from './InputEditSearch'\nimport {setSearchQueries} from '../../modules/inputEditSearch/actions'\n\nconst mapActionCreators = {\n setSearchFields: setSearchQueries\n}\n\nconst mapStateToProps = state => ({\n form: state.inputEditSearch.form\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(InputEditSearch)\n","import styled, {css} from 'styled-components'\nimport {scale, StyledScrollbar, theme} from 'tocco-ui'\n\nexport const StyledPaneWrapper = styled.div`\n display: flex;\n height: 100%;\n`\n\nconst sharedSplitPaneStyles = css`\n height: calc(100% - ${scale.space(-1)}); //remove top padding from total height\n background-color: ${theme.color('paper')};\n padding-top: ${scale.space(-1)};\n ${StyledScrollbar}\n`\n\nexport const StyledPanelWrapperLeft = styled.div`\n && {\n min-width: 265px;\n width: 16%;\n margin-right: 1rem;\n ${sharedSplitPaneStyles}\n }\n`\n\nexport const StyledPanelWrapperRight = styled.div`\n && {\n width: calc(84% - 1rem);\n display: flex;\n flex-direction: column;\n ${sharedSplitPaneStyles}\n }\n`\n\nexport const StyledInputEditSearchWrapper = styled.div`\n margin-bottom: ${scale.space(0)};\n`\n\nexport const StyledLeftPane = styled.div`\n padding: 0 ${scale.space(-1)};\n`\n\nexport const StyledActionsWrapper = styled.div`\n border-bottom: 3px solid ${theme.color('backgroundBody')};\n padding: 0 8px 8px;\n`\n","import styled from 'styled-components'\n\nexport const StyledInputEditInformation = styled.div`\n`\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {field} from 'tocco-app-extensions'\nimport {StatedValue} from 'tocco-ui'\nimport styled from 'styled-components'\n\nimport {StyledInputEditInformation} from './StyledInputEditInformation'\n\nconst StyledStatedValueWrapper = styled.div`\n & > div > div > span {\n display: inline-block;\n margin-top: 5px;\n padding-bottom: 3px;\n }\n`\n\nconst InputEditInformation = ({information}) => <StyledInputEditInformation>\n {information.map(info => {\n const Field = field.factory('readOnly', info.type)\n return <StyledStatedValueWrapper key={info.id}>\n <StatedValue key={info.id} label={info.label} immutable={true} hasValue={true}>\n <Field\n formField={{\n dataType: info.type\n }}\n value={info.value}\n />\n </StatedValue>\n </StyledStatedValueWrapper>\n })}\n</StyledInputEditInformation>\n\nInputEditInformation.propTypes = {\n information: PropTypes.array.isRequired\n}\n\nexport default InputEditInformation\n","import {connect} from 'react-redux'\n\nimport InputEditInformation from './InputEditInformation'\n\nconst mapStateToProps = state => ({\n information: state.inputEditInformation.information\n})\n\nexport default connect(mapStateToProps)(InputEditInformation)\n","import React, {useEffect} from 'react'\nimport PropTypes from 'prop-types'\nimport {actions, notifier} from 'tocco-app-extensions'\nimport {selection as selectionPropType} from 'tocco-util'\n\nimport InputEditTable from '../InputEditTable/InputEditTableContainer'\nimport InputEditSearch from '../InputEditSearch'\nimport {\n StyledPanelWrapperLeft,\n StyledPanelWrapperRight,\n StyledLeftPane,\n StyledActionsWrapper,\n StyledInputEditSearchWrapper,\n StyledPaneWrapper\n} from './StyledInputEdit'\nimport InputEditInformation from '../InputEditInformation'\n\nconst InputEdit = ({\n selection,\n handleNotifications,\n updateSelection,\n initializeTable,\n initializeSearch,\n initializeInformation,\n actionDefinitions\n}) => {\n useEffect(() => {\n updateSelection()\n }, [selection])\n useEffect(() => {\n initializeTable()\n initializeSearch()\n initializeInformation()\n }, [selection])\n\n return <>\n {handleNotifications && <notifier.Notifier/>}\n <StyledPaneWrapper>\n <StyledPanelWrapperLeft>\n <StyledLeftPane>\n <StyledInputEditSearchWrapper>\n <InputEditSearch/>\n </StyledInputEditSearchWrapper>\n <InputEditInformation/>\n </StyledLeftPane>\n </StyledPanelWrapperLeft>\n <StyledPanelWrapperRight>\n <StyledActionsWrapper>\n {actionDefinitions.map(definition =>\n <actions.Action\n key={definition.id}\n definition={definition}\n selection={selection}/>\n )}\n </StyledActionsWrapper>\n <InputEditTable/>\n </StyledPanelWrapperRight>\n </StyledPaneWrapper>\n </>\n}\n\nInputEdit.propTypes = {\n selection: selectionPropType.propType.isRequired,\n handleNotifications: PropTypes.bool,\n updateSelection: PropTypes.func.isRequired,\n initializeTable: PropTypes.func.isRequired,\n initializeSearch: PropTypes.func.isRequired,\n initializeInformation: PropTypes.func.isRequired,\n actionDefinitions: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string.isRequired\n })),\n notify: PropTypes.func.isRequired\n}\n\nexport default InputEdit\n","import {connect} from 'react-redux'\nimport {notifier} from 'tocco-app-extensions'\n\nimport InputEdit from './InputEdit'\nimport {initializeTable} from '../../modules/inputEditTable/actions'\nimport {initializeSearch} from '../../modules/inputEditSearch/actions'\nimport {initializeInformation} from '../../modules/inputEditInformation/actions'\nimport {updateSelection} from '../../modules/inputEdit/actions'\n\nconst mapActionCreators = {\n updateSelection,\n initializeTable,\n initializeSearch,\n initializeInformation,\n notify: notifier.info\n}\n\nconst mapStateToProps = state => ({\n selection: state.inputEdit.selection,\n actionDefinitions: state.inputEditTable.actionDefinitions,\n handleNotifications: state.inputEdit.handleNotifications\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(InputEdit)\n","import React from 'react'\nimport {reducer as reducerUtil} from 'tocco-util'\nimport {appFactory, actions, actionEmitter, notifier, errorLogging} from 'tocco-app-extensions'\nimport {hot} from 'react-hot-loader/root'\nimport PropTypes from 'prop-types'\n\nimport reducers, {sagas} from './modules/reducers'\nimport {setHandleNotifications, setSelection} from './modules/inputEdit/actions'\nimport InputEdit from './components/InputEdit/InputEditContainer'\n\nconst packageName = 'input-edit'\n\nconst EXTERNAL_EVENTS = [\n 'emitAction'\n]\n\nconst initApp = (id, input, events = {}, publicPath) => {\n const content = <InputEdit/>\n\n const store = appFactory.createStore(reducers, sagas, input, packageName)\n actionEmitter.addToStore(store, events.emitAction)\n actions.addToStore(store)\n const handleNotifications = !events.emitAction\n notifier.addToStore(store, handleNotifications)\n errorLogging.addToStore(store, handleNotifications)\n\n return appFactory.createApp(\n packageName,\n content,\n store,\n {\n input,\n events,\n actions: [\n setHandleNotifications(handleNotifications),\n setSelection(input.selection)\n ],\n publicPath,\n textResourceModules: ['component', 'common', packageName]\n }\n )\n}\n\n(() => {\n if (__DEV__ && __PACKAGE_NAME__ === packageName) {\n const input = require('./dev/input.json')\n\n if (!__NO_MOCK__) {\n const fetchMock = require('fetch-mock')\n const setupFetchMocks = require('./dev/fetchMocks').default\n setupFetchMocks(packageName, fetchMock)\n fetchMock.spy()\n }\n\n const app = initApp(packageName, input)\n\n if (module.hot) {\n module.hot.accept('./modules/reducers', () => {\n const reducers = require('./modules/reducers').default\n reducerUtil.hotReloadReducers(app.store, reducers)\n })\n }\n\n appFactory.renderApp(app.component)\n } else {\n appFactory.registerAppInRegistry(packageName, initApp)\n }\n})()\n\nconst InputEditApp = props => {\n const events = EXTERNAL_EVENTS.reduce((events, event) => {\n if (props[event]) {\n events[event] = props[event]\n }\n return events\n }, {})\n\n return initApp('input-edit', props, events).component\n}\n\nInputEditApp.propTypes = {\n selection: PropTypes.object,\n ...EXTERNAL_EVENTS.reduce((propTypes, event) => {\n propTypes[event] = PropTypes.func\n return propTypes\n }, {})\n}\n\nexport default hot(InputEditApp)\n","export {default} from 'tocco-input-edit/src/main'\n","export const SET_CALENDAR_TYPES = 'resourceScheduler/SET_CALENDAR_TYPES'\nexport const LOAD_CALENDAR_TYPES = 'resourceScheduler/LOAD_CALENDAR_TYPES'\nexport const INITIALIZE = 'resourceScheduler/INITIALIZE'\nexport const SEARCH_SELECTION_CHANGED = 'resourceScheduler/SEARCH_SELECTION_CHANGED'\nexport const UPDATE_REQUESTED_CALENDARS = 'resourceScheduler/UPDATE_REQUESTED_CALENDARS'\nexport const SET_CALENDARS = 'resourceScheduler/SET_CALENDARS'\nexport const SET_DATE_RANGE = 'resourceScheduler/SET_DATE_RANGE'\nexport const REMOVE_REQUESTED_CALENDAR = 'resourceScheduler/REMOVE_REQUESTED_CALENDAR'\nexport const REMOVE_ALL_CALENDARS = 'resourceScheduler/REMOVE_ALL_CALENDARS'\nexport const ON_EVENT_CLICK = 'resourceScheduler/ON_EVENT_CLICK'\nexport const ON_REFRESH = 'resourceScheduler/ON_REFRESH'\n\nexport const initialize = () => ({\n type: INITIALIZE\n})\n\nexport const setCalendarTypes = calendarTypes => ({\n type: SET_CALENDAR_TYPES,\n payload: {\n calendarTypes\n }\n})\n\nexport const loadCalendarTypes = () => ({\n type: LOAD_CALENDAR_TYPES\n})\n\nexport const searchSelectionChanged = (calendarType, ids) => ({\n type: SEARCH_SELECTION_CHANGED,\n payload: {\n calendarType,\n ids\n }\n})\n\nexport const updateRequestedCalendars = (calendarType, ids) => ({\n type: UPDATE_REQUESTED_CALENDARS,\n payload: {\n calendarType,\n ids\n }\n})\n\nexport const setCalendars = calendars => ({\n type: SET_CALENDARS,\n payload: {\n calendars\n }\n})\n\nexport const setDateRange = dateRange => ({\n type: SET_DATE_RANGE,\n payload: {\n dateRange\n }\n})\n\nexport const removeRequestedCalendar = (entityModel, id) => ({\n type: REMOVE_REQUESTED_CALENDAR,\n payload: {\n entityModel,\n id\n }\n})\n\nexport const removeAllCalendars = () => ({\n type: REMOVE_ALL_CALENDARS\n})\n\nexport const onEventClick = (model, key) => ({\n type: ON_EVENT_CLICK,\n payload: {\n model,\n key\n }\n})\n\nexport const onRefresh = () => ({\n type: ON_REFRESH\n})\n","import {reducer as reducerUtil} from 'tocco-util'\nimport _omit from 'lodash/omit'\n\nimport * as actions from './actions'\n\nconst updateRequestedCalendars = (state, {payload: {ids, calendarType}}) => ({\n ...state,\n requestedCalendars: {\n ...(_omit(state.requestedCalendars, [calendarType])),\n ...(ids.length > 0 ? {[calendarType]: ids} : {})\n }\n})\n\nconst removeRequestedCalendar = (state, {payload}) => {\n const {id, entityModel} = payload\n\n const typesToRemove = state.calendarTypes.filter(type => type.targetEntity === entityModel).map(type => type.name)\n return {\n ...state,\n requestedCalendars: {\n ...Object.keys(state.requestedCalendars).reduce((acc, calendarType) => {\n const adjustedValue = state.requestedCalendars[calendarType]\n .filter(key => !typesToRemove.includes(calendarType) || key !== id)\n\n return {\n ...acc,\n ...(adjustedValue.length > 0 && {[calendarType]: adjustedValue})\n }\n }, {})\n }\n }\n}\n\nconst removeAllCalendars = state => {\n return {\n ...state,\n requestedCalendars: {},\n calendars: []\n }\n}\n\nconst ACTION_HANDLERS = {\n [actions.SET_CALENDAR_TYPES]: reducerUtil.singleTransferReducer('calendarTypes'),\n [actions.SET_CALENDARS]: reducerUtil.singleTransferReducer('calendars'),\n [actions.SET_DATE_RANGE]: reducerUtil.singleTransferReducer('dateRange'),\n [actions.UPDATE_REQUESTED_CALENDARS]: updateRequestedCalendars,\n [actions.REMOVE_REQUESTED_CALENDAR]: removeRequestedCalendar,\n [actions.REMOVE_ALL_CALENDARS]: removeAllCalendars\n}\n\nconst initialState = {\n calendarTypes: [],\n requestedCalendars: {},\n calendars: [],\n dateRange: {}\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'\n\nexport const transformRequestedCalendars = requestedCalendars =>\n _reduce(\n requestedCalendars,\n (result, keys, calendarTypeId) => [...result, {calendarTypeId, keys}],\n []\n )\n","import {rest, externalEvents} from 'tocco-app-extensions'\nimport {call, put, takeLatest, all, select} from 'redux-saga/effects'\n\nimport * as actions from './actions'\nimport {transformRequestedCalendars} from '../../utils/rest'\n\nexport const resourceSchedulerSelector = state => state.resourceScheduler\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.INITIALIZE, initialize),\n takeLatest(actions.UPDATE_REQUESTED_CALENDARS, retrieveCalendars),\n takeLatest(actions.SET_DATE_RANGE, retrieveCalendars),\n takeLatest(actions.REMOVE_REQUESTED_CALENDAR, retrieveCalendars),\n takeLatest(actions.ON_EVENT_CLICK, onEventClick),\n takeLatest(actions.ON_REFRESH, retrieveCalendars)\n ])\n}\n\nexport function* initialize() {\n yield call(loadCalendarTypes)\n}\n\nexport function* loadCalendarTypes() {\n const calendars = yield call(rest.requestSaga, 'calendar/types')\n yield put(actions.setCalendarTypes(calendars.body.data || []))\n}\n\nexport function* retrieveCalendars() {\n const {requestedCalendars, dateRange} = yield select(resourceSchedulerSelector)\n if (Object.keys(requestedCalendars).length > 0 && dateRange.startDate && dateRange.endDate) {\n const calendars = yield call(transformRequestedCalendars, requestedCalendars)\n const calendarsResponse = yield call(rest.requestSaga, 'calendar/events', {\n method: 'POST',\n body: {\n calendars,\n start: dateRange.startDate.getTime(),\n end: dateRange.endDate.getTime()\n }\n })\n\n yield put(actions.setCalendars(calendarsResponse.body.data))\n } else {\n yield put(actions.setCalendars([]))\n }\n}\n\nexport function* onEventClick({payload}) {\n yield put(externalEvents.fireExternalEvent('onEventClick', payload))\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","import resourceSchedulerReducer, {sagas as resourceSchedulerSagas} from './resourceScheduler'\n\nexport default {\n resourceScheduler: resourceSchedulerReducer\n}\n\nexport const sagas = [\n resourceSchedulerSagas\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport EntityListApp from 'tocco-entity-list/src/main'\nimport {\n design,\n Icon,\n Panel,\n Typography\n} from 'tocco-ui'\n\nconst PanelHeaderContent = ({color, label}) =>\n <Typography.Span >\n <Icon\n icon={color ? 'square' : ['far', 'square']}\n aria-hidden=\"true\"\n style={{...(color ? {color} : {})}}\n position={design.position.PREPEND}\n /> {label}\n </Typography.Span>\n\nPanelHeaderContent.propTypes = {\n color: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n}\n\nclass SearchPanel extends React.PureComponent {\n constructor() {\n super()\n this.state = {activeKey: -1}\n }\n\n handleSelect = name => selection => {\n this.props.updateRequestedCalendars(name, selection)\n }\n\n getSearchLists = calendarTypes =>\n calendarTypes.map(calendarType =>\n <Panel.Wrapper key={calendarType.name}>\n <Panel.Header>\n <PanelHeaderContent\n color={calendarType.color}\n label={calendarType.label}\n />\n </Panel.Header>\n <Panel.Body>\n <EntityListApp\n locale={this.props.locale}\n id={`search-panel-${calendarType.name}`}\n entityName={calendarType.targetEntity}\n formName={calendarType.formBase}\n limit={15}\n showSearchForm={true}\n selectable={true}\n selection={this.props.requestedCalendars ? this.props.requestedCalendars[calendarType.name] || [] : []}\n onSelectChange={this.handleSelect(calendarType.name)}\n simpleSearchFields=\"txtFulltext, searchFilter\"\n disableSelectionController\n showActions={false}\n />\n </Panel.Body>\n </Panel.Wrapper>\n )\n\n render = () =>\n <Panel.Group>\n {this.getSearchLists(this.props.calendarTypes)}\n </Panel.Group>\n}\n\nSearchPanel.propTypes = {\n updateRequestedCalendars: PropTypes.func.isRequired,\n calendarTypes: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n formBase: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n targetEntity: PropTypes.string.isRequired,\n color: PropTypes.string\n }\n )),\n requestedCalendars: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)),\n locale: PropTypes.string\n}\n\nexport default SearchPanel\n","export const SET_CALENDARS = 'scheduler/SET_CALENDARS'\nexport const ON_DATE_RANGE_CHANGE = 'scheduler/ON_DATE_RANGE_CHANGE'\nexport const ON_CALENDAR_REMOVE = 'scheduler/ON_CALENDAR_REMOVE'\nexport const ON_CALENDARS_REMOVE_ALL = 'scheduler/ON_CALENDARS_REMOVE_ALL'\nexport const ON_EVENT_CLICK = 'scheduler/ON_EVENT_CLICK'\nexport const ON_REFRESH = 'scheduler/ON_REFRESH'\nexport const REMOVE_EVENTS = 'scheduler/REMOVE_EVENTS'\nexport const SET_IS_LOADING = 'scheduler/SET_IS_LOADING'\n\nexport const setCalendars = calendars => ({\n type: SET_CALENDARS,\n payload: {\n calendars\n }\n})\n\nexport const onDateRangeChange = dateRange => ({\n type: ON_DATE_RANGE_CHANGE,\n payload: {\n dateRange\n }\n})\n\nexport const onCalendarRemoveAll = () => ({\n type: ON_CALENDARS_REMOVE_ALL\n})\n\nexport const onCalendarRemove = (id, entityModel) => ({\n type: ON_CALENDAR_REMOVE,\n payload: {\n id,\n entityModel\n }\n})\n\nexport const onEventClick = event => ({\n type: ON_EVENT_CLICK,\n payload: {\n event\n }\n})\n\nexport const onRefresh = () => ({\n type: ON_REFRESH\n})\n\nexport const removeEvents = () => ({\n type: REMOVE_EVENTS\n})\n\nexport const setIsLoading = isLoading => ({\n type: SET_IS_LOADING,\n payload: {\n isLoading\n }\n})\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst removeEvents = state => ({\n ...state,\n calendars: state.calendars.map(calendar => ({...calendar, events: []}))\n})\n\nconst ACTION_HANDLERS = {\n [actions.SET_CALENDARS]: reducerUtil.singleTransferReducer('calendars'),\n [actions.SET_IS_LOADING]: reducerUtil.singleTransferReducer('isLoading'),\n [actions.REMOVE_EVENTS]: removeEvents\n}\n\nconst initialState = {\n calendars: [],\n isLoading: true\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 {externalEvents} from 'tocco-app-extensions'\nimport {put, takeLatest, all} from 'redux-saga/effects'\n\nimport * as actions from './actions'\n\nexport default function* sagas() {\n yield all([\n takeLatest(actions.ON_DATE_RANGE_CHANGE, onDateRangeChange),\n takeLatest(actions.ON_CALENDAR_REMOVE, onCalendarRemove),\n takeLatest(actions.ON_CALENDARS_REMOVE_ALL, onCalendarRemoveAll),\n takeLatest(actions.ON_EVENT_CLICK, onEventClick),\n takeLatest(actions.ON_REFRESH, onRefresh),\n takeLatest(actions.SET_CALENDARS, setCalendars)\n ])\n}\n\nexport function* onDateRangeChange({payload}) {\n yield put(actions.setIsLoading(true))\n yield put(actions.removeEvents())\n const {dateRange} = payload\n yield put(externalEvents.fireExternalEvent('onDateRangeChange', {dateRange}))\n}\n\nexport function* onCalendarRemove({payload}) {\n yield put(actions.setIsLoading(true))\n yield put(externalEvents.fireExternalEvent('onCalendarRemove', {id: payload.id, entityModel: payload.entityModel}))\n}\n\nexport function* onCalendarRemoveAll() {\n yield put(actions.setIsLoading(true))\n yield put(externalEvents.fireExternalEvent('onCalendarRemoveAll'))\n}\n\nexport function* onEventClick({payload}) {\n const {event: {extendedProps: {entity}}} = payload\n if (entity) {\n yield put(externalEvents.fireExternalEvent('onEventClick', entity))\n }\n}\n\nexport function* onRefresh() {\n yield put(actions.setIsLoading(true))\n yield put(actions.removeEvents())\n yield put(externalEvents.fireExternalEvent('onRefresh'))\n}\n\nexport function* setCalendars() {\n yield put(actions.setIsLoading(false))\n}\n","import reducer from './reducer'\nimport sagas from './sagas'\n\nexport {sagas}\nexport default reducer\n","import schedulerReducer, {sagas as schedulerSagas} from './scheduler'\n\nexport default {\n scheduler: schedulerReducer\n}\n\nexport const sagas = [\n schedulerSagas\n]\n","import styled from 'styled-components'\nimport {\n scale\n} from 'tocco-ui'\n\nconst StyledNavigationFullCalendar = styled.div`\n display: flex;\n justify-content: space-between;\n margin: ${scale.space(-1)} ${scale.space(-2)};\n\n > div {\n display: flex;\n align-items: center;\n\n > * {\n margin-left: ${scale.space(-2)};\n }\n }\n`\n\nexport default StyledNavigationFullCalendar\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {FormattedMessage, injectIntl, intlShape} from 'react-intl'\nimport {Button, ButtonGroup, Icon, Typography, DatePicker} from 'tocco-ui'\n\nimport StyledNavigationFullCalendar from './StyledNavigationFullCalendar'\n\nconst getButtonInkProps = (viewType, type) => (viewType === type) ? {ink: 'primary'} : {}\n\nconst msg = (id, intl) => intl.formatMessage({id})\n\nconst NavigationFullCalendar = props => {\n const {\n date,\n changeRange,\n changeView,\n chooseNext,\n choosePrev,\n chooseToday,\n goToDate,\n intl,\n isLoading,\n refresh,\n title,\n type\n } = props\n\n return (\n <StyledNavigationFullCalendar>\n <div>\n <Button\n look=\"raised\"\n onClick={() => {\n chooseToday()\n changeRange()\n }}\n >\n <FormattedMessage id=\"client.scheduler.today\"/>\n </Button>\n\n <ButtonGroup>\n <Button\n look=\"raised\"\n onClick={() => {\n choosePrev()\n changeRange()\n }}\n icon=\"angle-left\"\n title={msg('client.scheduler.previous', intl)}\n />\n <Button\n look=\"raised\"\n onClick={() => {\n chooseNext()\n changeRange()\n }}\n icon=\"angle-right\"\n title={msg('client.scheduler.next', intl)}\n />\n </ButtonGroup>\n <DatePicker\n value={date}\n onChange={date => {\n goToDate(date)\n changeRange()\n }}\n >\n <Typography.Span>{title}</Typography.Span><Icon style={{marginLeft: '5px'}} icon=\"chevron-down\"/>\n </DatePicker>\n\n </div>\n <div>\n <ButtonGroup>\n <Button\n look=\"raised\"\n {...(getButtonInkProps('dayView', type))}\n onClick={() => changeView('dayView')}\n >\n <FormattedMessage id=\"client.scheduler.day\"/>\n </Button>\n\n <Button\n look=\"raised\"\n {...(getButtonInkProps('weekView', type))}\n {...(getButtonInkProps('weekViewSimple', type))}\n onClick={() => {\n if (type !== 'weekViewSimple') {\n changeView('weekViewSimple')\n } else {\n changeView('weekView')\n }\n }}\n >\n <FormattedMessage id=\"client.scheduler.week\"/>\n </Button>\n\n <Button\n look=\"raised\"\n {...(getButtonInkProps('monthView', type))}\n onClick={() => changeView('monthView')}\n >\n <FormattedMessage id=\"client.scheduler.month\"/>\n </Button>\n </ButtonGroup>\n <Button\n icon={isLoading ? '' : 'sync'}\n onClick={() => { if (!isLoading) { refresh() } }}\n pending={isLoading}\n title={msg('client.scheduler.reload', intl)}\n />\n\n </div>\n </StyledNavigationFullCalendar>\n )\n}\n\nNavigationFullCalendar.propTypes = {\n date: PropTypes.instanceOf(Date),\n changeRange: PropTypes.func.isRequired,\n changeView: PropTypes.func.isRequired,\n chooseNext: PropTypes.func.isRequired,\n choosePrev: PropTypes.func.isRequired,\n chooseToday: PropTypes.func.isRequired,\n goToDate: PropTypes.func.isRequired,\n intl: intlShape.isRequired,\n isLoading: PropTypes.bool,\n refresh: PropTypes.func.isRequired,\n title: PropTypes.string,\n type: PropTypes.string\n}\n\nexport {getButtonInkProps}\nexport default injectIntl(NavigationFullCalendar)\n","import NavigationFullCalendar from './NavigationFullCalendar'\n\nexport default NavigationFullCalendar\n","import styled from 'styled-components'\nimport {\n colorizeBorder,\n declareFont,\n scale,\n theme\n} from 'tocco-ui'\n\nconst StyledFullCalendar = styled.div`\n && {\n .fc{\n h2{\n margin: 0;\n }\n\n .remove-all-checkbox{\n margin-left: 7px;\n margin-top: 4px;\n }\n\n .remove-resource-checkbox{\n margin-left: 3px;\n }\n\n .fc-cell-content {\n ${declareFont({fontSize: scale.font(-2)})}\n }\n\n .fc-event{\n ${declareFont()}\n cursor: pointer;\n border: none;\n border-radius: 2px;\n background-color: #1287de;\n\n &.dark {\n color: ${theme.color('text')};\n }\n\n &.bright {\n color: #fff;\n }\n\n &.conflict {\n border: 3px dashed #8b0000;\n border-radius: ${theme.radii('regular')};\n }\n\n .fc-bg{\n opacity: 0;\n }\n\n .fc-time{\n font-weight: ${theme.fontWeight('normal')};\n }\n }\n\n .fc-timeline-event .fc-content{\n text-overflow: ellipsis;\n }\n }\n\n .na-tooltip {\n display: flex;\n flex-flow: column nowrap;\n z-index: 1060;\n width: 300px;\n\n .na-tooltip-inner{\n ${declareFont()}\n background-color: ${theme.color('paper')};\n border: 1px solid ${props => colorizeBorder.shade2(props)};\n border-radius: ${theme.radii('regular')};\n padding: 10px;\n\n b {\n font-weight: ${theme.fontWeight('bold')};\n font-size: ${scale.font(1)};\n display: inline-block;\n margin-bottom: 5px;\n }\n }\n\n .na-tooltip-arrow {\n width: 0;\n height: 0;\n margin-left: calc(50% - 5px);\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n }\n\n &[x-placement^='bottom'] {\n .na-tooltip-arrow {\n border-bottom: 10px solid ${props => colorizeBorder.shade2(props)};\n }\n }\n\n &[x-placement^='top'] {\n .na-tooltip-arrow {\n order: 2;\n border-top: 10px solid ${props => colorizeBorder.shade2(props)};\n }\n }\n }\n }\n`\nexport default StyledFullCalendar\n","export default Object.freeze({\n EXISTING: 'existing',\n ACCEPTED: 'accepted',\n NONE: 'none'\n})\n","import Conflict from './Conflict'\n\nexport default Conflict\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {intlShape} from 'react-intl'\n\nimport conflicts from '../../utils/conflicts'\n\nconst CHECK = '\\u2713'\nconst CROSS = '\\u2715'\n\nconst Conflict = ({conflictStatus, intl}) => {\n if (!(conflictStatus === conflicts.ACCEPTED || conflictStatus === conflicts.EXISTING)) {\n return null\n }\n\n const accepted = conflictStatus === conflicts.ACCEPTED\n const textResource = `client.scheduler.conflict${accepted ? 'Accepted' : 'Existing'}`\n const icon = accepted ? CHECK : CROSS\n\n return (\n <span>{icon} {intl.formatMessage({id: textResource})}</span>\n )\n}\n\nConflict.propTypes = {\n intl: intlShape.isRequired,\n conflictStatus: PropTypes.oneOf(Object.values(conflicts))\n}\n\nexport default Conflict\n","/**\n * Returns the hour as string\n *\n * @param {Object} moment.js datetime\n *\n * @return {String} Hours of datetime e.g. '08' or '8 PM' depending on the locale set on the moment.js object\n */\nexport const getFormattedTime = date => date.format('LT').replace(/(:|\\.|e)[0-9]{2}/, '')\n","import React, {useRef, useEffect, useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport ReactDOMServer from 'react-dom/server'\nimport ReactFullCalendar from '@fullcalendar/react'\nimport resourceTimelinePlugin from '@fullcalendar/resource-timeline'\nimport moment from 'moment'\nimport 'twix'\nimport '!style-loader!css-loader!@fullcalendar/core/main.css'\nimport '!style-loader!css-loader!@fullcalendar/timeline/main.css'\nimport '!style-loader!css-loader!@fullcalendar/resource-timeline/main.css'\nimport {FormattedValue} from 'tocco-ui'\nimport {consoleLogger} from 'tocco-util'\nimport Tooltip from 'tooltip.js'\nimport {injectIntl, intlShape} from 'react-intl'\nimport interactionPlugin from '@fullcalendar/interaction'\n\nimport NavigationFullCalendar from '../NavigationFullCalendar'\nimport StyledFullCalendar from './StyledFullCalendar'\nimport Conflict from '../Conflict'\nimport {getFormattedTime} from '../../utils/time'\n\nconst getLicense = () => {\n const licence = process.env.FULL_CALENDAR_LICENCE\n if (licence) return licence\n consoleLogger.logWarning('This Version runs with the NonCommercial FullCalendar license.')\n return 'CC-Attribution-NonCommercial-NoDerivatives' // noncommercial license\n}\n\nconst MONDAY = 1\n\nconst FullCalendar = ({\n resources,\n events,\n onDateRangeChange,\n isLoading,\n onRefresh,\n onCalendarRemove,\n onCalendarRemoveAll,\n locale,\n onEventClick,\n intl\n}) => {\n const calendarEl = useRef(null)\n const wrapperEl = useRef(null)\n\n useEffect(() => {\n moment.locale(locale)\n changeRange()\n }, [])\n\n useEffect(() => {\n addDeselectAllButton()\n })\n\n useEffect(() => {\n const calendar = calendarEl.current.calendar\n calendar.batchRendering(() => {\n const eventSources = calendar.getEventSources()\n eventSources.forEach(eS => eS.remove())\n calendar.addEventSource(events)\n })\n }, [JSON.stringify(events)])\n\n useEffect(() => {\n const calendar = calendarEl.current.calendar\n calendar.batchRendering(() => {\n const loadedResources = calendar.getResources()\n loadedResources.forEach(l => {\n const contains = resources.find(r => l.id === r.id)\n if (!contains) {\n l.remove()\n }\n })\n\n resources.forEach(r => {\n const contains = loadedResources.find(l => l.id === r.id)\n if (!contains) {\n calendar.addResource(r)\n }\n })\n })\n }, [JSON.stringify(resources)])\n\n const addDeselectAllButton = () => {\n const firstHeaderNode = document.querySelectorAll('.fc-widget-header')[0]\n if (firstHeaderNode) {\n const checkbox = document.createElement('INPUT')\n checkbox.type = 'checkbox'\n if (resources.length > 0) {\n checkbox.checked = 'checked'\n }\n checkbox.className = 'remove-all-checkbox'\n checkbox.style.visibility = resources.length > 0 ? 'visible' : 'hidden'\n checkbox.onclick = onCalendarRemoveAll\n\n firstHeaderNode.innerHTML = ''\n firstHeaderNode.appendChild(checkbox)\n }\n }\n\n const changeRange = () => {\n const view = calendarEl.current.calendar.view\n if (onDateRangeChange) {\n onDateRangeChange({startDate: view.activeStart, endDate: view.activeEnd})\n }\n }\n\n const changeView = (view = 'timelineDay') => {\n calendarEl.current.calendar.changeView(view)\n changeRange()\n }\n\n const resourceRender = renderInfo => {\n const element = renderInfo.el.getElementsByClassName('fc-cell-content')[0]\n const checkbox = document.createElement('INPUT')\n checkbox.type = 'checkbox'\n checkbox.checked = 'checked'\n checkbox.className = 'remove-resource-checkbox'\n checkbox.onclick = () => {\n onCalendarRemove(renderInfo.resource.extendedProps.entityKey, renderInfo.resource.extendedProps.entityModel)\n }\n element.prepend(checkbox)\n }\n\n const eventRender = ({event, el}) => {\n const time = moment(event.start).twix(moment(event.end)).format({monthFormat: 'MMMM', dayFormat: 'Do'})\n const tooltipDescriptionContent = <div>\n <FormattedValue type=\"html\" value={event.extendedProps.description}/>\n <p>{time}</p>\n <p><Conflict conflictStatus={event.extendedProps.conflict} intl={intl}/></p>\n </div>\n\n const content = ReactDOMServer.renderToString(tooltipDescriptionContent)\n\n // eslint-disable-next-line no-new\n new Tooltip(el, {\n title: content,\n placement: 'bottom',\n trigger: 'hover',\n container: wrapperEl.current,\n html: true,\n boundariesElement: 'body',\n innerSelector: '.na-tooltip-inner',\n arrowSelector: '.na-tooltip-arrow',\n template: `<div class=\"na-tooltip\" role=\"tooltip\"><div class=\"na-tooltip-arrow\">\n </div><div class=\"na-tooltip-inner\"></div></div>\n `\n })\n }\n\n const FullCalendarMemorized = useMemo(() =>\n <ReactFullCalendar\n locale={locale}\n plugins={[resourceTimelinePlugin, interactionPlugin]}\n ref={calendarEl}\n schedulerLicenseKey={getLicense()}\n defaultView={'dayView'}\n header={false}\n height=\"auto\"\n resourceAreaWidth=\"15%\"\n resourceColumns={[{labelText: ''}]}\n resourceRender={resourceRender}\n eventRender={eventRender}\n eventClick={info => { onEventClick(info.event) }}\n firstDay={MONDAY}\n minTime=\"06:00:00\"\n maxTime=\"23:00:00\"\n views={{\n dayView: {\n type: 'resourceTimelineDay',\n slotLabelFormat: info => getFormattedTime(moment(info.date).locale(locale))\n },\n weekView: {\n type: 'resourceTimelineWeek',\n slotLabelFormat: [\n {weekday: 'short', month: 'numeric', day: 'numeric'},\n info => getFormattedTime(moment(info.date).locale(locale))\n ]\n },\n weekViewSimple: {\n type: 'resourceTimelineWeek',\n slotDuration: {day: 1},\n slotLabelFormat: [\n {weekday: 'short', month: 'numeric', day: 'numeric'}\n ]\n },\n monthView: {\n type: 'resourceTimelineMonth',\n slotLabelFormat: {weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true}\n }\n }}\n />\n , [])\n\n return <StyledFullCalendar>\n <div ref={wrapperEl}>\n {calendarEl.current && <NavigationFullCalendar\n changeRange={changeRange}\n changeView={changeView}\n chooseNext={() => calendarEl.current.calendar.next()}\n choosePrev={() => calendarEl.current.calendar.prev()}\n chooseToday={() => calendarEl.current.calendar.today()}\n goToDate={date => calendarEl.current.calendar.gotoDate(date)}\n date={calendarEl.current.calendar.getDate()}\n isLoading={isLoading}\n refresh={onRefresh}\n title={calendarEl.current.calendar.view.title}\n type={calendarEl.current.calendar.view.type}\n />}\n {FullCalendarMemorized}\n </div>\n </StyledFullCalendar>\n}\n\nFullCalendar.defaultProps = {\n locale: 'en'\n}\n\nFullCalendar.propTypes = {\n intl: intlShape.isRequired,\n onDateRangeChange: PropTypes.func,\n onCalendarRemove: PropTypes.func,\n onCalendarRemoveAll: PropTypes.func,\n onRefresh: PropTypes.func,\n onEventClick: PropTypes.func.isRequired,\n events: PropTypes.arrayOf(\n PropTypes.shape({\n resourceId: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n start: PropTypes.number.isRequired,\n end: PropTypes.number.isRequired,\n allDay: PropTypes.bool\n }\n )),\n resources: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n calendarType: PropTypes.string.isRequired,\n entityKey: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired\n }\n )),\n locale: PropTypes.string,\n isLoading: PropTypes.bool\n}\n\nexport default injectIntl(FullCalendar)\n","import FullCalendar from './FullCalendar'\n\nexport default FullCalendar\n","const RADIX = 16\n\nexport const hexToRgb = (hex, fallBack = null) => {\n if (!hex) {\n return fallBack\n }\n\n hex = normalizeHex(hex)\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n\n return result ? {\n r: parseInt(result[1], RADIX),\n g: parseInt(result[2], RADIX),\n b: parseInt(result[3], RADIX)\n } : fallBack\n}\n\nconst normalizeHex = hex => {\n if (!hex.startsWith('#')) {\n hex = '#' + hex\n }\n return hex.padEnd(7, '0')\n}\n","import {hexToRgb} from './hexToRgb'\n\nconst LUMIANCE_LIMIT = 0.25\n\nconst calculateLight = colorItem => {\n let c = colorItem / 255.0\n if (c <= 0.03928) {\n c = c / 12.92\n } else {\n c = Math.pow((c + 0.055) / 1.055, 2.4)\n }\n return c\n}\n\nconst calculateLumiance = color =>\n 0.2126 * calculateLight(color.r) + 0.7152 * calculateLight(color.g) + 0.0722 * calculateLight(color.b)\n\n/***\n * Returns a dark or bright value depending on the given color.\n * This could be used to choose a pleasant font color to a background color.\n * @param hexColor Hex Color code\n * @param brightValue Bright value can be overridden. Default is the color white as hex.\n * @param darkValue Dark value can be overridden. Default is the color black as hex.\n * @returns {string}\n */\nexport const getContrastColor = (hexColor, brightValue = '#FFFFFF', darkValue = '#000000') => {\n const rgbColor = hexToRgb(hexColor)\n\n if (rgbColor) {\n return calculateLumiance(rgbColor) > LUMIANCE_LIMIT ? darkValue : brightValue\n }\n\n return brightValue\n}\n","import {getContrastColor} from './contrast'\nimport {hexToRgb} from './hexToRgb'\n\nexport default {getContrastColor, hexToRgb}\n","import {color} from 'tocco-util'\n\nimport conflicts from './conflicts'\n\nconst getResourceId = (id, model) => id + model\n\nexport const getResources = calendars => {\n return calendars.map(calendar => ({\n title: calendar.label,\n id: getResourceId(calendar.key, calendar.model),\n entityKey: calendar.key,\n calendarType: calendar.calendarType,\n entityModel: calendar.model\n }))\n}\n\nconst getOptimalTextColorClass = backgroundHexColor =>\n color.getContrastColor(backgroundHexColor, 'bright', 'dark')\n\nexport const getEvents = calendars =>\n calendars.reduce((accumulator, calendar) => (\n [\n ...accumulator,\n ...calendar.events.map(event => ({\n entity: event.source,\n resourceId: getResourceId(calendar.key, calendar.model),\n title: event.label,\n start: event.start,\n end: event.end,\n description: event.description,\n conflict: event.conflict,\n ...(event.color ? {backgroundColor: event.color} : {}),\n className: [\n ...(event.conflict === conflicts.EXISTING ? ['conflict'] : []),\n getOptimalTextColorClass(event.color)\n ]\n }))\n ]\n ), [])\n","import Scheduler from './Scheduler'\n\nexport default Scheduler\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport FullCalendar from '../FullCalendar'\nimport {getEvents, getResources} from '../../utils/calendar'\n\nclass Scheduler extends React.Component {\n render() {\n return <div>\n <FullCalendar\n events={getEvents(this.props.calendars)}\n resources={getResources(this.props.calendars)}\n onDateRangeChange={this.props.onDateRangeChange}\n onCalendarRemove={this.props.onCalendarRemove}\n onCalendarRemoveAll={this.props.onCalendarRemoveAll}\n onEventClick={this.props.onEventClick}\n onRefresh={this.props.onRefresh}\n locale={this.props.locale}\n isLoading={this.props.isLoading}\n />\n </div>\n }\n}\n\nScheduler.propTypes = {\n calendars: PropTypes.arrayOf(\n PropTypes.shape({\n calendarType: PropTypes.string.isRequired,\n events: PropTypes.arrayOf(\n PropTypes.shape({\n description: PropTypes.string,\n start: PropTypes.number,\n end: PropTypes.number,\n allDay: PropTypes.bool\n })\n ),\n key: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n model: PropTypes.string.isRequired\n })).isRequired,\n onDateRangeChange: PropTypes.func,\n onCalendarRemove: PropTypes.func,\n onCalendarRemoveAll: PropTypes.func,\n onEventClick: PropTypes.func,\n onRefresh: PropTypes.func,\n locale: PropTypes.string,\n isLoading: PropTypes.bool\n}\n\nexport default Scheduler\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport {hot} from 'react-hot-loader/root'\n\nimport {\n onDateRangeChange,\n onCalendarRemove,\n onCalendarRemoveAll,\n onEventClick,\n onRefresh\n} from '../modules/scheduler/actions'\nimport Scheduler from '../components/Scheduler'\n\nconst mapActionCreators = {\n onDateRangeChange,\n onCalendarRemove,\n onCalendarRemoveAll,\n onEventClick,\n onRefresh\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n calendars: state.scheduler.calendars,\n locale: state.intl.locale,\n isLoading: state.scheduler.isLoading\n }\n}\n\nexport default hot(connect(mapStateToProps, mapActionCreators)(injectIntl(Scheduler)))\n","import {\n setCalendars\n} from './modules/scheduler/actions'\n\nexport const getDispatchActions = input => {\n const actions = []\n if (input.calendars) {\n actions.push(setCalendars(input.calendars))\n }\n\n return actions\n}\n","import React from 'react'\nimport {reducer as reducerUtil} from 'tocco-util'\nimport {appFactory, externalEvents} from 'tocco-app-extensions'\nimport PropTypes from 'prop-types'\nimport {hot} from 'react-hot-loader/root'\n\nimport reducers, {sagas} from './modules/reducers'\nimport SchedulerContainer from './containers/SchedulerContainer'\nimport {getDispatchActions} from './input'\n\nconst packageName = 'scheduler'\n\nconst EXTERNAL_EVENTS = [\n 'onDateRangeChange',\n 'onCalendarRemove',\n 'onCalendarRemoveAll',\n 'onEventClick',\n 'onRefresh'\n]\n\nconst initApp = (input, events, publicPath) => {\n const content = <SchedulerContainer/>\n\n const store = appFactory.createStore(reducers, sagas, input, packageName)\n\n externalEvents.addToStore(store, events)\n\n return appFactory.createApp(\n packageName,\n content,\n store,\n {\n input,\n events,\n actions: getDispatchActions(input),\n publicPath,\n textResourceModules: ['component', 'common', packageName]\n }\n )\n}\n\n(() => {\n if (__DEV__ && __PACKAGE_NAME__ === 'scheduler') {\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(input)\n\n if (module.hot) {\n module.hot.accept('./modules/reducers', () => {\n const reducers = require('./modules/reducers').default\n reducerUtil.hotReloadReducers(app.store, reducers)\n })\n }\n\n appFactory.renderApp(app.component)\n } else {\n appFactory.registerAppInRegistry(packageName, initApp)\n }\n})()\n\nclass SchedulerApp 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, events)\n }\n\n componentDidUpdate(prevProps) {\n getDispatchActions(this.props).forEach(action => {\n this.app.store.dispatch(action)\n })\n }\n\n render = () => this.app.component\n}\n\nSchedulerApp.propTypes = {\n calendars: PropTypes.arrayOf(\n PropTypes.shape({\n calendarType: PropTypes.string.isRequired,\n events: PropTypes.arrayOf(\n PropTypes.shape({\n description: PropTypes.string,\n start: PropTypes.number,\n end: PropTypes.number,\n allDay: PropTypes.bool\n }\n )\n ),\n key: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n model: PropTypes.string.isRequired\n })),\n onDateRangeChange: PropTypes.func,\n onCalendarRemove: PropTypes.func,\n onEventClick: PropTypes.func,\n locale: PropTypes.string\n}\n\nexport default hot(SchedulerApp)\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\nimport SchedulerApp from 'tocco-scheduler/src/main'\n\nimport {\n setDateRange,\n removeRequestedCalendar,\n removeAllCalendars,\n onEventClick,\n onRefresh\n} from '../modules/resourceScheduler/actions'\n\nconst mapActionCreators = {\n onDateRangeChange: ({dateRange}) => setDateRange(dateRange),\n onCalendarRemove: ({entityModel, id}) => removeRequestedCalendar(entityModel, id),\n onCalendarRemoveAll: removeAllCalendars,\n onEventClick: ({model, key}) => onEventClick(model, key),\n onRefresh\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n calendars: state.resourceScheduler.calendars,\n locale: state.intl.locale\n }\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(SchedulerApp))\n","import styled from 'styled-components'\nimport {scale, StyledScrollbar, theme} from 'tocco-ui'\n\nconst drawerSymbol = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==' // eslint-disable-line max-len\n\nexport const resizerStyle = {\n background: `transparent url(${drawerSymbol}) 50% no-repeat`,\n width: '11px',\n cursor: 'col-resize'\n}\n\nexport const StyledSplitPanelWrapperLeft = styled.div`\n && {\n background-color: ${theme.color('paper')};\n height: 100%;\n overflow: auto;\n padding-right: ${scale.space(-1)};\n padding-left: ${scale.space(-1)};\n padding-top: ${scale.space(-1)};\n ${StyledScrollbar}\n }\n`\n\nexport const StyledSplitPanelWrapperRight = styled.div`\n && {\n background-color: ${theme.color('paper')};\n height: 100%;\n overflow: auto;\n padding-left: ${scale.space(-1)};\n padding-right: ${scale.space(-1)};\n ${StyledScrollbar}\n }\n`\n","import React from 'react'\nimport SplitPane from 'react-split-pane'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\nimport {scale} from 'tocco-ui'\n\nimport SearchPanel from '../SearchPanel/SearchPanel'\nimport SchedulerAppContainer from '../../containers/SchedulerAppContainer'\nimport {\n resizerStyle,\n StyledSplitPanelWrapperLeft,\n StyledSplitPanelWrapperRight\n} from './StyledResourceScheduler'\n\nconst StyledSplitPane = styled(SplitPane)`\n position: static !important;\n\n .react-bs-container-body {\n height: auto !important;\n margin-bottom: ${scale.space(0)};\n }\n`\n\nclass ResourceScheduler extends React.Component {\n constructor(props) {\n super(props)\n this.props.initialize()\n }\n\n paneWidth = 325\n\n render() {\n const props = this.props\n return (\n <StyledSplitPane\n defaultSize={this.paneWidth}\n minSize={325}\n resizerStyle={resizerStyle}\n split=\"vertical\"\n >\n <StyledSplitPanelWrapperLeft>\n <SearchPanel\n locale={props.locale}\n calendarTypes={props.calendarTypes}\n updateRequestedCalendars={props.updateRequestedCalendars}\n requestedCalendars={this.props.requestedCalendars}\n />\n </StyledSplitPanelWrapperLeft>\n <StyledSplitPanelWrapperRight>\n <SchedulerAppContainer/>\n </StyledSplitPanelWrapperRight>\n </StyledSplitPane>\n )\n }\n}\n\nResourceScheduler.propTypes = {\n initialize: PropTypes.func.isRequired,\n updateRequestedCalendars: PropTypes.func.isRequired,\n removeRequestedCalendar: PropTypes.func.isRequired,\n setDateRange: PropTypes.func.isRequired,\n calendars: PropTypes.arrayOf(\n PropTypes.shape({\n calendarType: PropTypes.string.isRequired,\n events: PropTypes.arrayOf(\n PropTypes.shape({\n description: PropTypes.string,\n start: PropTypes.number,\n end: PropTypes.number,\n allDay: PropTypes.bool\n }\n )\n ),\n key: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n model: PropTypes.string.isRequired\n })),\n calendarTypes: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n formBase: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n targetEntity: PropTypes.string.isRequired,\n color: PropTypes.string\n }\n )),\n requestedCalendars: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)),\n locale: PropTypes.string\n}\n\nexport default ResourceScheduler\n","import ResourceScheduler from './ResourceScheduler'\n\nexport default ResourceScheduler\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport {\n initialize,\n updateRequestedCalendars,\n setDateRange,\n removeRequestedCalendar\n} from '../modules/resourceScheduler/actions'\nimport ResourceScheduler from '../components/ResourceScheduler'\n\nconst mapActionCreators = {\n initialize,\n updateRequestedCalendars,\n setDateRange,\n removeRequestedCalendar\n}\n\nconst mapStateToProps = state => {\n return {\n calendars: state.resourceScheduler.calendars,\n calendarTypes: state.resourceScheduler.calendarTypes,\n requestedCalendars: state.resourceScheduler.requestedCalendars,\n locale: state.intl.locale\n }\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(ResourceScheduler))\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {reducer as reducerUtil, selection as selectionPropType} from 'tocco-util'\nimport {appFactory, externalEvents} from 'tocco-app-extensions'\nimport {hot} from 'react-hot-loader/root'\n\nimport reducers, {sagas} from './modules/reducers'\nimport ResourceSchedulerContainer from './containers/ResourceSchedulerContainer'\nimport {updateRequestedCalendars} from './modules/resourceScheduler/actions'\n\nconst packageName = 'resource-scheduler'\n\nconst EXTERNAL_EVENTS = [\n 'onEventClick'\n]\n\nconst initApp = (id, input, events, publicPath) => {\n const content = <ResourceSchedulerContainer/>\n\n const store = appFactory.createStore(reducers, sagas, input, packageName)\n externalEvents.addToStore(store, events)\n\n const dispatchActions = [\n ...(input.selection && input.selection.type === 'ID'\n && input.actionProperties && input.actionProperties.calendarType\n ? [updateRequestedCalendars(input.actionProperties.calendarType, input.selection.ids)] : [])\n ]\n\n return appFactory.createApp(\n packageName,\n content,\n store,\n {\n input,\n events,\n actions: dispatchActions,\n publicPath,\n textResourceModules: ['component', 'common', packageName]\n }\n )\n}\n\n(() => {\n if (__DEV__ && __PACKAGE_NAME__ === 'resource-scheduler') {\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\n const app = initApp('dev', input)\n\n if (module.hot) {\n module.hot.accept('./modules/reducers', () => {\n const reducers = require('./modules/reducers').default\n reducerUtil.hotReloadReducers(app.store, reducers)\n })\n }\n\n appFactory.renderApp(app.component)\n } else {\n appFactory.registerAppInRegistry(packageName, initApp)\n }\n})()\n\nexport class ResourceSchedulerApp 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 render() {\n return this.app.component\n }\n}\n\nResourceSchedulerApp.propTypes = {\n id: PropTypes.string,\n locale: PropTypes.string,\n onEventClick: PropTypes.func,\n selection: selectionPropType.propType,\n actionProperties: PropTypes.shape({\n calendarType: PropTypes.string\n })\n}\n\nexport default hot(ResourceSchedulerApp)\n","import React from 'react'\nimport ResourceSchedulerApp from 'tocco-resource-scheduler/src/main'\nimport PropTypes from 'prop-types'\nimport {selection as selectionPropType} from 'tocco-util'\n\nimport {goBack} from '../../../../../utils/routing'\n\nconst ResourceScheduler = ({match, selection, actionProperties, history}) => {\n const entityBaseUrl = goBack(match.url, 2)\n return <ResourceSchedulerApp\n onEventClick={({model, key}) => {\n const url = history.createHref({pathname: `${entityBaseUrl}/${model}/${key}`})\n window.open(url, '_blank')\n }}\n selection={selection}\n actionProperties={actionProperties}\n />\n}\n\nResourceScheduler.propTypes = {\n match: PropTypes.shape({\n url: PropTypes.string\n }).isRequired,\n selection: selectionPropType.propType,\n actionProperties: PropTypes.shape({\n calendarType: PropTypes.string\n }),\n history: PropTypes.shape({\n createHref: PropTypes.func.isRequired\n }).isRequired\n}\n\nexport default ResourceScheduler\n","export const LOAD_DIALOG_INFO = 'root/LOAD_DIALOG_INFO'\nexport const SET_DIALOG_INFO = 'delete/SET_DELETE_DIALOG_INFO'\nexport const DO_DELETE = 'delete/DO_DELETE'\nexport const SET_DELETING_IN_PROGRESS = 'delete/SET_DELETING_IN_PROGRESS'\nexport const ON_CANCEL = 'delete/ON_CANCEL'\n\nexport const\n loadDialogInfo = () => ({\n type: LOAD_DIALOG_INFO\n })\n\nexport const setDeleteDialogInfo = dialogInfo => ({\n type: SET_DIALOG_INFO,\n payload: {\n dialogInfo\n }\n})\n\nexport const doDelete = () => ({\n type: DO_DELETE\n})\n\nexport const setDeletingInProgress = deletingInProgress => ({\n type: SET_DELETING_IN_PROGRESS,\n payload: {\n deletingInProgress\n }\n})\n\nexport const onCancel = () => ({\n type: ON_CANCEL\n})\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst ACTION_HANDLERS = {\n [actions.SET_DIALOG_INFO]: reducerUtil.singleTransferReducer('dialogInfo'),\n [actions.SET_DELETING_IN_PROGRESS]: reducerUtil.singleTransferReducer('deletingInProgress')\n}\n\nconst initialState = {\n dialogInfo: null,\n deletingInProgress: false\n}\n\nexport default function reducer(state = initialState, action) {\n const handler = ACTION_HANDLERS[action.type]\n return handler ? handler(state, action) : state\n}\n","import _get from 'lodash/get'\nimport PropTypes from 'prop-types'\n\nconst deleteStatus = {\n DELETABLE: 'DELETABLE',\n DENIED_BY_CASCADE: 'DENIED_BY_CASCADE',\n NO_DELETE_PERMISSION: 'NO_DELETE_PERMISSION'\n}\n\nconst transformRelatedEntities = (relatedEntities, entityToDelete, deletable, currentBuId) => ({\n ...entityToDelete.affectedEntities.reduce((acc, affectedEntity) => ({\n ...acc,\n ...(deletable || affectedEntity.deleteStatus !== deleteStatus.DELETABLE\n ? {\n [affectedEntity.entityName]: {\n ..._get(acc, affectedEntity.entityName, {keys: [], keysOtherBu: [], entityLabel: affectedEntity.entityLabel}),\n ...(affectedEntity.businessUnitId === null || affectedEntity.businessUnitId === currentBuId\n ? {\n keys: Array.from(\n new Set([..._get(acc, [affectedEntity.entityName, 'keys'], []), affectedEntity.key])\n )\n }\n : {\n keysOtherBu: Array.from(\n new Set([..._get(acc, [affectedEntity.entityName, 'keysOtherBu'], []), affectedEntity.key])\n )\n }\n )\n }\n }\n : {}\n )\n }), {...relatedEntities})\n})\n\nconst isEntityDeletable = entityToDelete =>\n entityToDelete.rootEntity.deleteStatus === deleteStatus.DELETABLE\n && !entityToDelete.affectedEntities.find(affectedEntity => affectedEntity.deleteStatus !== deleteStatus.DELETABLE)\n\nexport default (response, currentBuId) => {\n const {entitiesToDelete} = response\n\n return entitiesToDelete.reduce((acc, entityToDelete) => {\n const deletable = isEntityDeletable(entityToDelete)\n const keyAttr = deletable ? 'keysDeletable' : 'keysNotDeletable'\n const relatedAttr = deletable ? 'relatedDeletable' : 'relatedNotDeletable'\n return {\n ...acc,\n [keyAttr]: [...acc[keyAttr], entityToDelete.rootEntity.key],\n [relatedAttr]: transformRelatedEntities(acc[relatedAttr], entityToDelete, deletable, currentBuId)\n }\n },\n {\n entityName: _get(entitiesToDelete, '[0].rootEntity.entityName'),\n entityLabel: _get(entitiesToDelete, '[0].rootEntity.entityLabel'),\n keysDeletable: [],\n keysNotDeletable: [],\n relatedDeletable: {},\n relatedNotDeletable: {},\n hasUnreadableEntities: !!entitiesToDelete.find(e => e.unreadableEntities)\n })\n}\n\nexport const relatedPropType = PropTypes.shape({\n entityLabel: PropTypes.string,\n keys: PropTypes.arrayOf(PropTypes.string),\n keysOtherBu: PropTypes.arrayOf(PropTypes.string)\n})\n\nexport const deleteInfoPropType = PropTypes.shape({\n entityName: PropTypes.string.isRequired,\n entityLabel: PropTypes.string.isRequired,\n keysDeletable: PropTypes.arrayOf(PropTypes.string).isRequired,\n keysNotDeletable: PropTypes.arrayOf(PropTypes.string).isRequired,\n relatedDeletable: PropTypes.objectOf(relatedPropType).isRequired,\n relatedNotDeletable: PropTypes.objectOf(relatedPropType).isRequired,\n hasUnreadableEntities: PropTypes.bool\n})\n","import {takeLatest, all, call, put, select} from 'redux-saga/effects'\nimport {rest, externalEvents} from 'tocco-app-extensions'\nimport {selection as selectionUtil} from 'tocco-util'\n\nimport * as actions from './actions'\nimport deleteRequestParser from '../../utils/deleteRequestParser'\n\nexport const inputSelector = state => state.input\nexport const textResourceSelector = state => state.intl.messages\nexport const dialogInfoSelector = state => state.del.dialogInfo\n\nexport function* getDeleteBodyFromSelection() {\n const {selection} = yield select(inputSelector)\n\n const entities = yield call(selectionUtil.getEntities, selection, rest.fetchEntities)\n\n return {\n entityModel: entities.entityName,\n keys: entities.keys\n }\n}\n\nconst deleteDialogResource = 'client/delete/dialog'\n\nexport function* loadDialogInfo() {\n const body = yield call(getDeleteBodyFromSelection)\n\n const [deleteResponse, principal] = yield all([\n call(rest.requestSaga, deleteDialogResource, {method: 'POST', body}),\n call(rest.fetchPrincipal)\n ])\n\n const res = deleteRequestParser(deleteResponse.body, principal.currentBusinessUnit.id)\n yield put(actions.setDeleteDialogInfo(res))\n}\n\nconst deleteResource = 'client/delete'\n\nexport function* doDelete() {\n const {keysDeletable, entityName} = yield select(dialogInfoSelector)\n yield put(actions.setDeletingInProgress(true))\n const body = {\n entityModel: entityName,\n keys: keysDeletable\n }\n\n const response = yield call(rest.requestSaga, deleteResource, {method: 'POST', body})\n\n const textResources = yield select(textResourceSelector)\n if (response.ok) {\n const {body} = response\n\n const entities = Object.keys(body.deletedEntities).reduce((acc, entityName) => {\n return [\n ...acc,\n ...body.deletedEntities[entityName].map(key => ({entityName, key}))\n ]\n }, [])\n\n const remoteEvents = [{\n type: 'entity-delete-event',\n payload: {\n entities\n }\n }]\n\n yield put(externalEvents.fireExternalEvent('onSuccess', {\n message: textResources['client.delete.successfullyMessage'],\n remoteEvents\n }))\n } else {\n yield put(externalEvents.fireExternalEvent('onError', {message: textResources['client.delete.errorMessage']}))\n }\n}\n\nexport function* onCancel() {\n yield put(externalEvents.fireExternalEvent('onCancel'))\n}\n\nexport default function* mainSagas() {\n yield all([\n takeLatest(actions.LOAD_DIALOG_INFO, loadDialogInfo),\n takeLatest(actions.DO_DELETE, doDelete),\n takeLatest(actions.ON_CANCEL, onCancel)\n ])\n}\n","import del, {sagas as deleteSagas} from './delete'\n\nexport default {\n del\n}\n\nexport const sagas = [\n deleteSagas\n]\n","import React from 'react'\nimport {FormattedMessage} from 'react-intl'\nimport {Popover, Typography} from 'tocco-ui'\nimport PropTypes from 'prop-types'\n\nimport {relatedPropType} from '../../utils/deleteRequestParser'\n\nconst LinkPopOver = ({relatedEntity, children, maxCountLink}) => {\n if (relatedEntity.keys.length < maxCountLink && relatedEntity.keysOtherBu.length === 0) {\n return children\n }\n\n const content = <>\n {relatedEntity.keys.length > maxCountLink\n && <Typography.P>\n <FormattedMessage id=\"client.delete.tooManyRecords\"/>\n </Typography.P>\n }\n {relatedEntity.keysOtherBu.length > 0\n && <Typography.P>\n <FormattedMessage id=\"client.delete.recordInOtherBU\" values={{count: relatedEntity.keysOtherBu.length}}/>\n </Typography.P>\n }\n </>\n\n return <Popover\n content={content}\n placement=\"top\"\n spacer={10}\n >\n {children}\n </Popover>\n}\n\nLinkPopOver.propTypes = {\n relatedEntity: relatedPropType.isRequired,\n maxCountLink: PropTypes.number.isRequired,\n children: PropTypes.element\n}\n\nexport default LinkPopOver\n","import React from 'react'\nimport {Typography, RouterLink} from 'tocco-ui'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nimport LinkPopOver from './LinkPopOver'\nimport {relatedPropType} from '../../utils/deleteRequestParser'\n\nconst NonBreakingText = styled.span`\n white-space: nowrap;\n`\n\nconst InfoPart = ({entityName, entityLabel, keys, relatedEntities, maxCountLink}) => {\n const primaryTql = 'KEYS(' + keys.join(',') + ')'\n return <Typography.Span>\n <Typography.B>\n {entityLabel} ({\n keys.length > 0\n ? <RouterLink to={`/e/${entityName}/list?tql=${primaryTql}`} target=\"_blank\">{keys.length}</RouterLink>\n : <Typography.Span>{keys.length}</Typography.Span>\n })\n </Typography.B>\n {\n Object.keys(relatedEntities).length > 0\n && <>\n <span> / </span>\n {Object.keys(relatedEntities).map(entityName => {\n const relatedEntity = relatedEntities[entityName]\n const tql = 'KEYS(' + relatedEntity.keys.slice(0, maxCountLink).join(',') + ')'\n const linkText = [...relatedEntity.keys, ...relatedEntity.keysOtherBu].length\n\n const Count = relatedEntity.keys.length > 0\n ? <RouterLink to={`/e/${entityName}/list?tql=${tql}`} target=\"_blank\">\n {linkText}\n </RouterLink>\n : <Typography.Span>{linkText}</Typography.Span>\n\n const Content = <LinkPopOver relatedEntity={relatedEntity} maxCountLink={maxCountLink}>{Count}</LinkPopOver>\n\n return <React.Fragment\n key={'entity-info-' + entityName}>\n <NonBreakingText>{relatedEntity.entityLabel} ({Content})</NonBreakingText>\n </React.Fragment>\n }).reduce((prev, curr) => [prev, ', ', curr])}\n </>\n }\n\n </Typography.Span>\n}\n\nInfoPart.propTypes = {\n entityName: PropTypes.string.isRequired,\n entityLabel: PropTypes.string.isRequired,\n keys: PropTypes.arrayOf(PropTypes.string),\n relatedEntities: PropTypes.objectOf(relatedPropType).isRequired,\n maxCountLink: PropTypes.number\n}\n\nexport default InfoPart\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {Button, Typography, SignalBox} from 'tocco-ui'\nimport {FormattedMessage} from 'react-intl'\n\nimport {deleteInfoPropType} from '../../utils/deleteRequestParser'\nimport InfoPart from '../InfoPart'\n\nconst Dialog = ({dialogInfo, doDelete, onCancel}) =>\n <>\n <Typography.P><FormattedMessage id=\"client.delete.confirmText\"/></Typography.P>\n <InfoPart\n key=\"infopart-deletable\"\n entityName={dialogInfo.entityName}\n entityLabel={dialogInfo.entityLabel}\n keys={dialogInfo.keysDeletable}\n relatedEntities={dialogInfo.relatedDeletable}\n maxCountLink={100}\n />\n {dialogInfo.keysNotDeletable.length > 0\n && <div style={{paddingTop: '20px'}}>\n <Typography.P><FormattedMessage id=\"client.delete.textNotDeletable\"/></Typography.P>\n <InfoPart\n key=\"infopart-notdeletable\"\n entityName={dialogInfo.entityName}\n entityLabel={dialogInfo.entityLabel}\n keys={dialogInfo.keysNotDeletable}\n relatedEntities={dialogInfo.relatedNotDeletable}\n maxCountLink={100}\n />\n </div>\n }\n {dialogInfo.hasUnreadableEntities\n && <div style={{paddingTop: '20px'}}>\n <SignalBox\n condition=\"warning\">\n <Typography.Span><FormattedMessage id=\"client.delete.unreadableEntities\"/></Typography.Span>\n </SignalBox>\n </div>\n }\n <div style={{paddingTop: '20px'}}>\n <Button\n onClick={doDelete}\n disabled={dialogInfo.keysDeletable.length === 0}\n >\n <FormattedMessage id=\"client.delete.deleteButton\"/>\n </Button>\n <Button\n ink=\"primary\"\n onClick={onCancel}\n >\n <FormattedMessage id=\"client.delete.cancelButton\"/>\n </Button>\n </div>\n </>\n\nDialog.propTypes = {\n onCancel: PropTypes.func.isRequired,\n doDelete: PropTypes.func.isRequired,\n dialogInfo: deleteInfoPropType.isRequired\n}\n\nexport default Dialog\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport {doDelete, onCancel} from '../../modules/delete/actions'\nimport Dialog from './Dialog'\n\nconst mapActionCreators = {\n doDelete,\n onCancel\n}\n\nconst mapStateToProps = (state, props) => ({\n dialogInfo: state.del.dialogInfo\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(Dialog))\n","import React from 'react'\nimport {LoadingSpinner, Typography} from 'tocco-ui'\nimport {FormattedMessage, intlShape} from 'react-intl'\n\nimport {deleteInfoPropType} from '../../utils/deleteRequestParser'\nimport InfoPart from '../InfoPart'\n\nconst DeleteProgress = ({dialogInfo, intl}) => {\n return <>\n <LoadingSpinner size=\"30px\"/>\n <Typography.P><FormattedMessage id=\"client.delete.deleteInProgress\"/></Typography.P>\n <InfoPart\n key=\"infopart-deletable\"\n entityName={dialogInfo.entityName}\n entityLabel={dialogInfo.entityLabel}\n keys={dialogInfo.keysDeletable}\n relatedEntities={dialogInfo.relatedDeletable}\n maxCountLink={100}\n />\n </>\n}\n\nDeleteProgress.propTypes = {\n dialogInfo: deleteInfoPropType.isRequired,\n intl: intlShape.isRequired\n}\n\nexport default DeleteProgress\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport {doDelete} from '../../modules/delete/actions'\nimport DeleteProgress from './DeleteProgress'\n\nconst mapActionCreators = {\n doDelete\n}\n\nconst mapStateToProps = (state, props) => ({\n dialogInfo: state.del.dialogInfo\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(DeleteProgress))\n","import DeleteProgress from './DeleteProgressContainer'\n\nexport default DeleteProgress\n","import React, {useEffect} from 'react'\nimport PropTypes from 'prop-types'\nimport {LoadMask} from 'tocco-ui'\nimport {intlShape} from 'react-intl'\n\nimport Dialog from '../Dialog'\nimport {deleteInfoPropType} from '../../utils/deleteRequestParser'\nimport DeleteProgress from '../DeleteProgress'\n\nconst Delete = ({loadDialogInfo, dialogInfo, deletingInProgress, intl}) => {\n useEffect(() => {\n loadDialogInfo()\n }, [])\n\n const msg = id => intl.formatMessage({id})\n\n if (deletingInProgress) {\n return <DeleteProgress/>\n }\n\n return (\n <LoadMask\n required={[dialogInfo]}\n loadingText={msg('client.delete.loadingText')}\n >\n {dialogInfo && <Dialog/>}\n </LoadMask>\n )\n}\n\nDelete.propTypes = {\n loadDialogInfo: PropTypes.func.isRequired,\n dialogInfo: deleteInfoPropType,\n deletingInProgress: PropTypes.bool,\n intl: intlShape.isRequired\n}\n\nexport default Delete\n","import {connect} from 'react-redux'\nimport {injectIntl} from 'react-intl'\n\nimport Delete from './Delete'\nimport {loadDialogInfo} from '../../modules/delete/actions'\n\nconst mapActionCreators = {\n loadDialogInfo\n}\n\nconst mapStateToProps = (state, props) => ({\n dialogInfo: state.del.dialogInfo,\n deletingInProgress: state.del.deletingInProgress\n})\n\nexport default connect(mapStateToProps, mapActionCreators)(injectIntl(Delete))\n","import Delete from './DeleteContainer'\n\nexport default Delete\n","import React from 'react'\nimport {reducer as reducerUtil, selection} from 'tocco-util'\nimport {appFactory, externalEvents} from 'tocco-app-extensions'\nimport {hot} from 'react-hot-loader/root'\n\nimport reducers, {sagas} from './modules/reducers'\nimport Delete from './components/Delete'\n\nconst packageName = 'delete'\n\nconst EXTERNAL_EVENTS = [\n 'onSuccess',\n 'onCancel',\n 'onError'\n]\n\nconst initApp = (id, input, events, publicPath) => {\n const content = <Delete/>\n\n const store = appFactory.createStore(reducers, sagas, input, packageName)\n externalEvents.addToStore(store, events)\n\n return appFactory.createApp(\n packageName,\n content,\n store,\n {\n input,\n events,\n actions: [],\n publicPath,\n textResourceModules: ['component', 'common', packageName]\n }\n )\n}\n\n(() => {\n if (__DEV__ && __PACKAGE_NAME__ === packageName) {\n const input = require('./dev/input.json')\n\n if (!__NO_MOCK__) {\n const fetchMock = require('fetch-mock')\n const setupFetchMocks = require('./dev/fetchMocks').default\n setupFetchMocks(packageName, fetchMock)\n fetchMock.spy()\n }\n\n const app = initApp(packageName, input)\n\n if (module.hot) {\n module.hot.accept('./modules/reducers', () => {\n const reducers = require('./modules/reducers').default\n reducerUtil.hotReloadReducers(app.store, reducers)\n })\n }\n\n appFactory.renderApp(app.component)\n } else {\n appFactory.registerAppInRegistry(packageName, initApp)\n }\n})()\n\nconst DeleteApp = props => {\n const events = EXTERNAL_EVENTS.reduce((acc, event) => ({\n ...acc,\n ...(props[event] ? {[event]: props[event]} : {})\n }), {})\n\n return initApp('delete', props, events).component\n}\n\nDeleteApp.propTypes = {\n selection: selection.propType.isRequired\n}\n\nexport default hot(DeleteApp)\n","export {default} from 'tocco-delete/src/main'\n","export const FETCH_DATA = 'qrCode/FETCH_DATA'\nexport const SET_DATA = 'qrCode/SET_DATA'\n\nexport const fetchData = () => ({\n type: FETCH_DATA\n})\n\nexport const setData = data => ({\n type: SET_DATA,\n payload: {\n data\n }\n})\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst ACTION_HANDLERS = {\n [actions.SET_DATA]: reducerUtil.singleTransferReducer('data')\n}\n\nconst initialState = {\n data: undefined\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 {rest} from 'tocco-app-extensions'\nimport {consoleLogger} from 'tocco-util'\n\nimport * as actions from './actions'\n\nexport const inputSelector = state => state.input\n\nexport default function* sagas() {\n yield all([\n takeEvery(actions.FETCH_DATA, fetchData)\n ])\n}\n\nexport function* fetchData() {\n const {selection} = yield select(inputSelector)\n\n const userKey = getSingleKey(selection)\n\n const query = {\n paths: [\n 'firstname',\n 'lastname',\n 'c_address',\n 'phone_mobile',\n 'phone_company',\n 'phone_private',\n 'email',\n 'email_alternative',\n 'birthdate'\n ]\n }\n\n try {\n const entity = yield call(rest.fetchEntity, 'User', userKey, query)\n\n let data = null\n\n if (entity) {\n data = {}\n Object.entries(entity.paths).forEach(([path, bean]) => {\n if (bean && bean.value) {\n data[path] = bean.value\n }\n })\n }\n\n yield put(actions.setData(data))\n } catch (e) {\n consoleLogger.logError('Failed to fetch data', e)\n yield put(actions.setData(null))\n }\n}\n\nexport const getSingleKey = selection => {\n if (selection.entityName !== 'User') {\n throw new Error('Only selection of User supported')\n }\n if (selection.type !== 'ID') {\n throw new Error('Only ID selection type supported')\n }\n if (!selection.ids || selection.ids.length !== 1) {\n throw new Error('Exactly one user must be selected')\n }\n return selection.ids[0]\n}\n","import qrCodeReducer, {sagas as qrCodeSagas} from './qrCode'\n\nexport default {\n qrCode: qrCodeReducer\n}\n\nexport const sagas = [\n qrCodeSagas\n]\n","export const buildUserMecardString = data => {\n let string = `MECARD:N:${data.lastname},${data.firstname};`\n\n string = appendField(data, 'c_address', 'ADR', string, address => address.replace(/\\s*<br\\s?\\/?>\\s*/gi, ','))\n string = appendField(data, 'phone_mobile', 'TEL', string)\n string = appendField(data, 'phone_company', 'TEL', string)\n string = appendField(data, 'phone_private', 'TEL', string)\n string = appendField(data, 'email', 'EMAIL', string)\n string = appendField(data, 'email_alternative', 'EMAIL', string)\n string = appendField(data, 'birthdate', 'BDAY', string, date => date.replace(/-/gi, ''))\n\n return string\n}\n\nconst appendField = (data, fieldName, outputPrefix, output, handler = fieldData => fieldData) => {\n if (data[fieldName] && data[fieldName].length > 0) {\n output += `${outputPrefix}:${handler(data[fieldName])};`\n }\n return output\n}\n","import React, {useEffect} from 'react'\nimport PropTypes from 'prop-types'\nimport {QRCode, LoadingSpinner, Typography} from 'tocco-ui'\nimport styled from 'styled-components'\nimport {FormattedMessage} from 'react-intl'\n\nimport {buildUserMecardString} from '../../utils/qrCodeUtils'\n\nconst StyledContainer = styled.div`\n width: 148px;\n height: 148px;\n position: relative;\n align-self: center;\n`\n\nconst StyledContent = styled.div`\n margin: 0;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`\n\nconst UserQrCode = ({data, fetchData}) => {\n useEffect(() => { fetchData() }, [])\n\n let content\n\n if (data === undefined) {\n content = <LoadingSpinner/>\n } else if (data === null) {\n content = (\n <Typography.P>\n <FormattedMessage id=\"client.user-qr-action.fetchFailed\"/>\n </Typography.P>\n )\n } else {\n const string = buildUserMecardString(data)\n content = <QRCode value={string}/>\n }\n\n return (\n <StyledContainer>\n <StyledContent>\n {content}\n </StyledContent>\n </StyledContainer>\n )\n}\n\nUserQrCode.propTypes = {\n data: PropTypes.shape({\n firstname: PropTypes.string.isRequired,\n lastname: PropTypes.string.isRequired,\n c_address: PropTypes.string,\n phone_mobile: PropTypes.string,\n phone_company: PropTypes.string,\n phone_private: PropTypes.string,\n email: PropTypes.string,\n email_alternative: PropTypes.string,\n birthdate: PropTypes.string\n }),\n fetchData: PropTypes.func.isRequired\n}\n\nexport default UserQrCode\n","import UserQrCode from './UserQrCode'\n\nexport default UserQrCode\n","import {connect} from 'react-redux'\nimport {hot} from 'react-hot-loader/root'\n\nimport UserQrCode from '../components/UserQrCode'\nimport {fetchData} from '../modules/qrCode'\n\nconst mapActionCreators = {\n fetchData\n}\n\nconst mapStateToProps = state => ({\n data: state.qrCode.data\n})\n\nexport default hot(connect(mapStateToProps, mapActionCreators)(UserQrCode))\n","import React from 'react'\nimport {reducer as reducerUtil} from 'tocco-util'\nimport {appFactory} from 'tocco-app-extensions'\nimport PropTypes from 'prop-types'\nimport {hot} from 'react-hot-loader/root'\n\nimport reducers, {sagas} from './modules/reducers'\nimport UserQrCode from './containers/UserQrCodeContainer'\n\nconst packageName = 'user-qr-action'\n\nconst initApp = (id, input, events, publicPath) => {\n const content = <UserQrCode selection={input.selection}/>\n\n const store = appFactory.createStore(reducers, sagas, input, packageName)\n\n return appFactory.createApp(\n packageName,\n content,\n store,\n {\n input,\n events,\n actions: [],\n publicPath,\n textResourceModules: ['component', 'common', packageName]\n }\n )\n}\n\n(() => {\n if (__DEV__ && __PACKAGE_NAME__ === packageName) {\n const input = require('./dev/input.json')\n\n if (!__NO_MOCK__) {\n const fetchMock = require('fetch-mock')\n const setupFetchMocks = require('./dev/fetchMocks').default\n setupFetchMocks(packageName, fetchMock)\n fetchMock.spy()\n }\n\n const app = initApp(packageName, input)\n\n if (module.hot) {\n module.hot.accept('./modules/reducers', () => {\n const reducers = require('./modules/reducers').default\n reducerUtil.hotReloadReducers(app.store, reducers)\n })\n }\n\n appFactory.renderApp(app.component)\n } else {\n appFactory.registerAppInRegistry(packageName, initApp)\n }\n})()\n\nconst UserQrActionApp = props => {\n return initApp('user-qr-action', props).component\n}\n\nUserQrActionApp.propTypes = {\n selection: PropTypes.object\n}\n\nexport default hot(UserQrActionApp)\n","export {default} from 'tocco-user-qr-action/src/main'\n"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///./packages/tocco-ui/src/Icon/FontAwesomeAdapter.js","webpack:///./packages/tocco-ui/src/Icon/ToccoIcons.js","webpack:///./packages/tocco-ui/src/Icon/Icon.js","webpack:///./packages/tocco-ui/src/DatePicker/useDatePickr.js","webpack:///./packages/tocco-ui/src/DatePicker/DatePicker.js"],"names":["library","add","faAngleDown","faAngleRight","faAngleLeft","faAngleUp","faChevronDoubleLeft","faChevronDoubleRight","faChevronRight","faChevronLeft","faChevronUp","faChevronDown","faPlus","faFolders","faStarFilled","faStar","faTimes","faArrowRight","faArrowLeft","faListUl","faFile","faFileAlt","faFileCode","faFileCsv","faFileExcel","faFileExport","faFileImport","faFilePdf","faFileSpreadsheet","faIdBadge","faCheck","faExclamation","faTimesLight","faCircle","faCheckCircle","faGoogle","faFacebook","faFacebookF","faDropbox","faMicrosoft","faJira","faApple","faBars","faExternalLink","faPhone","faMapMarked","faSearch","faCog","faDownload","faUpload","faInfo","faHorizontalRule","faSync","faSquare","faCompress","faBook","faSortUp","faSortDown","faQuestionCircle","faEllipsisV","faMinus","LegacyPaperclip","LegacyAsterisk","LegacyChartBar","LegacyExclamationCircle","LegacyTimesCircle","LecacyPencil","faChevronCircleRight","FontAwesomeAdapter","icon","style","includes","replace","split","_get","color","fill","d","icons","logo","height","aria-hidden","role","xmlns","viewBox","office","enableBackground","ToccoIcons","propTypes","PropTypes","string","isRequired","object","iconLibsFactories","fa","iconMap","props","id","toc","Icon","mapping","iconFactory","lib","objectOf","localeMap","German","French","Italian","handleOnChange","onChange","selectedDates","length","toISOString","initializeFlatPickr","element","value","fontFamily","locale","flatpickrOptions","calendarLocale","options","wrap","altInput","enableTime","defaultDate","appendTo","current","flatpickrInstance","flatpickr","calendarContainer","WrapperStyle","styled","div","DatePicker","config","setflatpickrInstance","children","intl","wrapperElement","useRef","theme","useState","useEffect","destroy","data-wrap","ref","data-toggle","display","type","data-input","withTheme","injectIntl"],"mappings":"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","file":"icons-chunk-e6d666.js","sourcesContent":["import React from 'react'\nimport PropTypes from 'prop-types'\nimport _get from 'lodash/get'\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome'\nimport {library} from '@fortawesome/fontawesome-svg-core'\nimport {\n faAngleDown, faAngleRight, faAngleLeft, faAngleUp, faStar as faStarFilled, faExclamation, faCheckCircle,\n faExternalLink, faPhone, faSquare,\n faPaperclip as LegacyPaperclip, faAsterisk as LegacyAsterisk, faChartBar as LegacyChartBar,\n faExclamationCircle as LegacyExclamationCircle, faTimesCircle as LegacyTimesCircle, faPencil as LecacyPencil,\n faChevronCircleRight\n} from '@fortawesome/pro-solid-svg-icons'\nimport {\n faChevronDoubleLeft, faChevronDoubleRight, faChevronRight, faChevronLeft, faChevronUp, faChevronDown, faPlus,\n faFolders, faStar, faTimes, faArrowRight, faArrowLeft, faListUl, faFile, faFileAlt, faFileCode, faFileCsv,\n faFileExcel, faFileExport, faFileImport, faFilePdf, faFileSpreadsheet, faIdBadge, faCheck, faMapMarked, faSearch,\n faCog, faBars, faDownload, faUpload, faInfo, faCompress, faBook, faSortDown, faSortUp, faQuestionCircle, faEllipsisV\n} from '@fortawesome/pro-regular-svg-icons'\nimport {faTimes as faTimesLight, faCircle, faHorizontalRule, faSync, faMinus} from '@fortawesome/pro-light-svg-icons'\nimport {faGoogle, faFacebook, faFacebookF, faDropbox, faMicrosoft, faJira, faApple}\n from '@fortawesome/free-brands-svg-icons'\n(() => {\n library.add(\n faAngleDown, faAngleRight, faAngleLeft, faAngleUp, faChevronDoubleLeft, faChevronDoubleRight, faChevronRight,\n faChevronLeft, faChevronUp, faChevronDown, faPlus, faFolders, faStarFilled, faStar, faTimes, faArrowRight,\n faArrowLeft, faListUl, faFile, faFileAlt, faFileCode, faFileCsv, faFileExcel, faFileExport, faFileImport, faFilePdf,\n faFileSpreadsheet, faIdBadge, faCheck, faExclamation, faTimesLight, faCircle, faCheckCircle, faGoogle, faFacebook,\n faFacebookF, faDropbox, faMicrosoft, faJira, faApple, faBars, faExternalLink, faPhone, faMapMarked, faSearch, faCog,\n faDownload, faUpload, faInfo, faHorizontalRule, faSync, faSquare, faCompress, faBook, faSortUp, faSortDown,\n faQuestionCircle, faEllipsisV, faMinus)\n\n library.add(\n LegacyPaperclip, LegacyAsterisk, LegacyChartBar, LegacyExclamationCircle, LegacyTimesCircle,\n LecacyPencil, faChevronCircleRight)\n})()\n\nconst FontAwesomeAdapter = ({icon, style}) =>\n <FontAwesomeIcon\n icon={icon.includes(',') ? icon.replace(/\\s+/, '').split(',') : icon}\n style={style}\n {..._get(style, 'color') && {color: style.color}}\n />\n\nFontAwesomeAdapter.propTypes = {\n icon: PropTypes.string.isRequired,\n style: PropTypes.object\n}\n\nexport default FontAwesomeAdapter\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport _get from 'lodash/get'\n\nconst icons = {\n logo: style => (\n <svg height={_get(style, 'fontSize', 20)} {...style} aria-hidden=\"true\" role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d={`M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 \n 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z`}\n />\n </svg>\n ),\n office: style => {\n return <svg height={_get(style, 'fontSize', 20)} {...style} aria-hidden=\"true\" role=\"img\"\n enableBackground=\"new 0 0 2075 2499.8\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2075 2499.8\">\n <path\n fill=\"currentColor\"\n d={`m0 2016.6v-1519.8l1344.4-496.8 730.6 233.7v2045.9l-730.6 220.3-1344.4-483.3 1344.4 \n 161.8v-1769.2l-876.8 204.6v1198.3z`}\n />\n </svg>\n }\n}\n\nconst ToccoIcons = ({icon, style}) =>\n icons[icon](style)\n\nToccoIcons.propTypes = {\n icon: PropTypes.string.isRequired,\n style: PropTypes.object\n}\n\nexport default ToccoIcons\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport mapping from './mapping'\nimport FontAwesomeAdapter from './FontAwesomeAdapter'\nimport ToccoIcons from './ToccoIcons'\n\nconst iconLibsFactories = {\n fa: (iconMap, props) => <FontAwesomeAdapter {...props} icon={iconMap.id}/>,\n toc: (iconMap, props) => <ToccoIcons {...props} icon={iconMap.id}/>\n}\n\nexport const Icon = props => {\n const iconMap = mapping[props.icon]\n\n if (!iconMap) return null\n\n const iconFactory = iconLibsFactories[iconMap.lib]\n return iconFactory ? iconFactory(iconMap, props) : null\n}\n\nIcon.propTypes = {\n /**\n * id of icon. Full list can be found in mapping.json file or showcase deployment.\n */\n icon: PropTypes.string.isRequired,\n /**\n * CSS Styles object. Color property can be used to colorize the icon and fontSize for the size.\n */\n style: PropTypes.objectOf(PropTypes.string)\n}\n\nexport default Icon\n","import {useEffect, useState} from 'react'\nimport '!style-loader!css-loader!flatpickr/dist/themes/light.css'\nimport flatpickr from 'flatpickr'\nimport {German} from 'flatpickr/dist/l10n/de.js'\nimport {French} from 'flatpickr/dist/l10n/fr.js'\nimport {Italian} from 'flatpickr/dist/l10n/it.js'\n\nconst localeMap = {\n 'de-CH': German,\n 'de': German,\n 'fr': French,\n 'it': Italian\n}\n\nconst handleOnChange = onChange => selectedDates => {\n if (selectedDates && selectedDates.length > 0) {\n onChange(selectedDates[0].toISOString())\n } else {\n onChange(null)\n }\n}\n\nconst initializeFlatPickr = (element, {onChange, value, fontFamily, locale, flatpickrOptions}) => {\n const calendarLocale = localeMap[locale]\n\n const options = {\n ...(calendarLocale ? {locale: calendarLocale} : {}),\n wrap: true,\n onChange: handleOnChange(onChange),\n altInput: false,\n enableTime: false,\n defaultDate: value,\n appendTo: element.current,\n\n ...(localeMap[locale] && {locale: localeMap[locale]}),\n ...flatpickrOptions\n }\n\n const flatpickrInstance = flatpickr(element.current, options)\n\n if (fontFamily) {\n flatpickrInstance.calendarContainer.style.fontFamily = fontFamily\n }\n\n return flatpickrInstance\n}\n\nexport const useDatePickr = (element, config) => {\n const [flatpickrInstance, setflatpickrInstance] = useState(null)\n useEffect(() => {\n if (element) {\n setflatpickrInstance(initializeFlatPickr(element, config))\n }\n\n return () => {\n if (flatpickrInstance) {\n flatpickrInstance.destroy()\n }\n }\n }, [element, config.locale, config.value])\n}\n","import React, {useRef} from 'react'\nimport PropTypes from 'prop-types'\nimport {injectIntl, intlShape} from 'react-intl'\nimport styled, {withTheme} from 'styled-components'\n\nimport {theme} from '../utilStyles'\nimport {useDatePickr} from './useDatePickr'\n\nconst WrapperStyle = styled.div`\n cursor: pointer;\n\n .flatpickr-calendar.open {\n top: auto !important;\n }\n`\n\nexport const DatePicker = props => {\n const {value, children, intl, onChange} = props\n const wrapperElement = useRef(null)\n const locale = intl.locale\n\n const fontFamily = theme.fontFamily('regular')(props)\n\n useDatePickr(wrapperElement, {value, onChange, fontFamily, locale})\n\n return (\n <WrapperStyle\n data-wrap\n ref={wrapperElement}\n >\n <div data-toggle>\n <input\n style={{display: 'none'}}\n type=\"text\"\n data-input\n />\n {children}\n </div>\n </WrapperStyle>\n )\n}\n\nDatePicker.propTypes = {\n /**\n * Any content to wrap a onclick around to open a calendar\n */\n children: PropTypes.node.isRequired,\n /**\n * Function triggered on every date selection. First parameter is the picked date as iso string.\n */\n onChange: PropTypes.func.isRequired,\n /**\n * To set the selected date from outside the component.\n */\n value: PropTypes.any,\n intl: intlShape.isRequired\n}\n\nexport default withTheme(injectIntl(DatePicker))\n"],"sourceRoot":""}