{"version":3,"sources":["apis/support/headers.integration-dev.js","apis/support/headers.integration-localhost.js","apis/support/headers.integration-preprod.js","apis/support/headers.integration-test.js","components/icons/ConvertTo.js","apis/support sync /^/.//headers/.integration/-.*$","../node_modules/@mike/mike-shared-frontend/media/icons lazy /^/.//.*$/ groupOptions: {} namespace object","components/LandingPage/splashscreen.jpg","apis/support/index.ts","actions/auth.js","actions/tenant.ts","reducers/auth.ts","reducers/admin.ts","helpers/errors.js","actions/converts.js","helpers/export.js","reducers/converts.js","actions/customerUsers.js","reducers/customerUsers.js","actions/datasetReaders.js","reducers/datasetReaders.js","actions/datasetWriters.js","reducers/datasetWriters.js","actions/errors.js","reducers/errors.js","actions/exports.js","reducers/exports.js","actions/imports.js","apis/transfer.js","reducers/imports.js","reducers/intl.js","actions/project.js","reducers/project.js","actions/projects.js","reducers/projects.ts","actions/recycleBin.js","reducers/recycleBin.js","actions/ui.ts","reducers/ui.js","actions/uploads.js","helpers/upload.js","reducers/uploads.js","actions/applications.ts","reducers/applications.ts","actions/progressItems.ts","reducers/progressItems.ts","actions/coordinateSystems.ts","reducers/coordinateSystems.ts","actions/admin.ts","model/StateEnum.ts","reducers/tenant.ts","reducers/users.ts","reducers/apiAccess.ts","reducers/features.ts","reducers/apiKeys.ts","reducers/groups.ts","reducers/credits.ts","reducers/siteCpuUsage.ts","reducers/siteStorageUsage.ts","reducers/projectNames.ts","reducers/rootProjectList.ts","actions/credits.ts","actions/billing.ts","reducers/billing.ts","reducers/index.ts","apis/customerUsers.ts","sagas/customerUsers.js","components/DatasetConversionDialog/model/mockDedicatedReaders.ts","apis/datasetReaders.js","state/index.js","helpers/import.js","sagas/datasetReaders.js","sagas/errors.js","actions/exportAndDownload.js","sagas/exportAndDownload.js","shared/constants.js","sagas/exports.js","sagas/imports.js","actions/intl.js","sagas/intl.js","helpers/projectContent.ts","apis/project.js","apis/projects.ts","apis/members.js","helpers/saga.js","sagas/project.js","sagas/projects.js","apis/recycleBin.js","sagas/recycleBin.js","sagas/ui.js","actions/uploadAndImport.js","components/DatasetConversionDialog/model/asIfReaderWriter.ts","sagas/uploadAndImport.js","apis/blobStorage.js","sagas/uploads.js","apis/cloudApps.ts","sagas/applications.ts","actions/features.ts","sagas/auth.ts","sagas/progressItems.ts","sagas/converts.ts","components/DatasetConversionDialog/model/mockDedicatedWriters.ts","apis/datasetWriters.js","sagas/datasetWriters.js","apis/coordinateSystems.js","sagas/coordinateSystems.ts","apis/admin.ts","helpers/project.js","shared/messages.js","sagas/admin.ts","actions/users.ts","sagas/users.ts","actions/apiAccess.ts","sagas/apiAccess.ts","apis/groups.ts","actions/groups.ts","sagas/groups.ts","apis/features.ts","apis/config.js","sagas/features.ts","actions/siteCpuUsage.ts","apis/consumptionLog.ts","sagas/siteCpuUsage.ts","actions/siteStorageUsage.ts","sagas/siteStorageUsage.ts","actions/projectNames.ts","sagas/projectNames.ts","actions/rootProjectActions.ts","sagas/rootProjectList.ts","apis/credits.ts","apis/reports/enums/report-type.enum.ts","apis/reports/enums/image-name.enum.ts","apis/reports/utils.ts","apis/reports/reports.ts","sagas/credits.ts","sagas/index.js","apis/appInsights.js","sagas/bootstrap.js","shared/appPropTypes.js","helpers/parameters.js","components/mike-login/MikeLogin.tsx","components/AppNav/AppNav.js","components/IAMNav/IAMNav.tsx","components/formik/withFormik.js","components/formik/TextField.js","components/CreateTenantForm/CreateTenantForm.tsx","components/buttons/iconStyles.ts","components/buttons/ChangeSiteButton.tsx","components/MikeCloudApps/configuration/index.ts","components/MikeCloudApps/MikeCloudApp.tsx","components/MikeCloudApps/AppsSkeleton.tsx","components/MikeCloudApps/MikeCloudApps.tsx","components/icons/CreditsIcon.js","styles/theme.tsx","components/Credits/CreditsToolbar/CreditsInfo.tsx","components/AppLayout/SiteOwnersDialogButton.tsx","components/buttons/CreateInternalTenantButton.tsx","components/buttons/CreateTenantButton.tsx","components/AppLayout/TenantButtons.tsx","components/AppLayout/AppLayout.tsx","components/PageNotFound/PageNotFound.js","components/SearchInput/SearchInput.js","components/buttons/RefreshButton.tsx","components/buttons/DeleteButton.tsx","components/DataTable/support.js","components/DataTable/renders/Link.js","components/DataTable/renders/index.js","components/DataTable/TableBodyDragAndDropArea.tsx","components/DataTable/DataTable.js","components/UsersNav/UsersNav.js","components/buttons/IconButton.tsx","components/formik/SelectField.js","components/APIAccessForm/APIAccessForm.tsx","components/APIKeyForm/APIKeyForm.tsx","components/DataTable/renders/LongName.js","components/Dialog/DialogTitle.tsx","components/Dialog/ConfirmationDialog.tsx","components/APIAccess/APIAccess.tsx","components/TenantMembersSelect/TenantMembersSelect.tsx","components/UserGroupForm/UserGroupForm.tsx","components/UserGroups/UserGroups.tsx","helpers/convert.js","components/buttons/DownloadButton.tsx","components/buttons/EditProjectButton.js","components/buttons/MoveToButton.tsx","components/buttons/CreateSubprojectButton.js","components/buttons/FileChooserButton.tsx","components/EditDatasetForm/useMetadataStyles.ts","components/EditDatasetForm/EditMetadata.tsx","components/EditDatasetForm/EditDatasetForm.js","components/formik/ProjectMembersField.js","helpers/common.js","components/CreateProjectForm/CreateProjectForm.js","components/DataTable/renders/DateTime.js","components/DataTable/renders/LongText.js","components/ProjectContentTable/ProjectContentTable.js","containers/ConnectedProjectContentTable.js","components/ProjectsTree/ProjectsTree.js","components/ProjectsTreeDialog/ProjectsTreeDialog.js","components/DatasetConversionDialog/styles/datasetUploadStyles.ts","components/formik/ProjectionSelect/ProjectionDetails.tsx","components/formik/ProjectionSelect/styles.ts","components/formik/ProjectionSelect/ProjectionSelect.tsx","helpers/hooks.js","components/DatasetConversionDialog/styles/useConversionStyles.ts","components/DatasetConversionDialog/styles/iconStyles.js","components/DatasetConversionDialog/translations/readerWriterTranslations.ts","components/ContextHelp/ContextHelp.tsx","components/DatasetConversionDialog/translations/parameterInputFieldTranslations.ts","components/formik/RadioGroup.tsx","components/DatasetConversionDialog/translations/xyzReaderParameterTranslations.ts","components/DatasetConversionDialog/DatasetXYZParameters.tsx","components/DatasetConversionDialog/configuration/writerFileExtension.ts","components/DatasetConversionDialog/support/index.ts","components/DatasetConversionDialog/ParameterInputField.tsx","components/DatasetConversionDialog/DatasetConversionDialog.tsx","components/formik/CheckboxField.js","components/DatasetConversionDialog/ParameterOutputField.tsx","components/DatasetConversionDialog/translations/conversionTranslations.ts","components/DatasetConversionDialog/ConvertToIcon.js","components/DatasetConversionDialog/DatasetConversion.tsx","components/DatasetConversionDialog/configuration/defaultReader.ts","components/DatasetConversionDialog/translations/conversionOptionsTranslations.ts","components/DatasetConversionDialog/translations/uploadManyDialogTranslations.ts","components/DatasetConversionDialog/DatasetConversionOptions.tsx","components/DatasetConversionDialog/translations/conversionDialogTranslations.ts","components/InvitationProvider/InvitationProvider.tsx","components/DatasetConversionDialog/DatasetUploadManyDialog.tsx","components/DatasetConversionDialog/translations/downloadManyDialogTranslations.ts","components/DatasetConversionDialog/DatasetDownloadManyDialog.tsx","components/UserInviteForm/UserInviteForm.tsx","components/ProjectLink/ProjectLink.tsx","components/AppBreadcrumpsNav/AppBreadcrumbNav.tsx","components/ProjectContent/ProjectContent.js","containers/ConnectedProjectContent.js","components/buttons/RestoreButton.js","components/ActionsBar/ActionsBar.js","components/Text/Text.js","components/RecycleBinItemsDeletedByMeTable/RecycleBinItemsDeletedByMeTable.js","components/RecycleBinItemsDeletedByMe/RecycleBinItemsDeletedByMe.js","containers/ConnectedRecycleBinItemsDeletedByMe.js","components/UserEditForm/UserEditForm.tsx","components/Users/Users.tsx","components/AppNotificationSnack/AppNotificationSnack.js","components/LinkNotificationSnack/LinkNotificationSnack.js","components/LandingPage/LandingLayout.tsx","components/LandingPage/appLogo.png","helpers/search-params.const.ts","helpers/localStore.ts","model/CreditsStateEnum.ts","components/LandingPage/LandingPage.tsx","components/PrivateRoute/PrivateRoute.tsx","components/RedirectRoute/RedirectRoute.tsx","components/SiteInfoNav/SiteInfoNav.tsx","components/SiteDetailsForm/SiteDetailsForm.tsx","components/SiteDetails/SiteDetails.tsx","components/SiteCpuUsage/SiteCpuUsage.tsx","components/icons/BuyCreditsIcon.js","components/icons/ReturnCreditsIcon.js","components/Credits/CreditsPanels/CreditsNav.tsx","components/Credits/CreditsPanels/CreditsSummary.tsx","components/SiteStorageUsage/SiteStorageUsage.tsx","components/Applications/Applications.tsx","components/RootProject/RootProject.tsx","hooks/use-saved-data-grid-state.hook.ts","components/Credits/CreditsPanels/CreditsAllocation.tsx","components/DataTable/renders/UTCDateTime.tsx","components/Credits/CreditsPanels/CreditsAvailable.tsx","components/Credits/CreditsPanels/CreditsSpent.tsx","components/Credits/CreditsPanels/CreditsReserved.tsx","components/App/App.js","containers/ConnectedApp.js","components/LandingPage/OpenIdStatusPage.tsx","helpers/matomo.js","index.tsx"],"names":["module","exports","Object","defineProperty","value","ReactComponent","obj","_react","require","__esModule","default","_extends","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","props","createElement","width","height","fill","d","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","resolve","webpackAsyncContext","Promise","then","ids","all","slice","t","metadata","coordinateSystem","administration","postConsumptionRequest","SET_USER","SET_IS_AUTHENTICATED","LOAD_TENANTS","loadTenants","canCreateTenants","type","LOADING_TENANTS","loadingTenants","SET_TENANTS","setTenants","tenants","UPDATE_TENANT","SET_CURRENT_TENANT_NAME","CREATE_TENANT","CREATING_TENANT","creatingTenant","creating","produce","draft","action","user","tenantName","name","integrationHeaders","process","TEST_INTEGRATION","REACT_APP__DHI_TARGET_ENV","env","CI_ENV","init","config","metadataUrl","scopes","resourceId","getJson","makeAdminServiceGet","postJson","makeAdminServicePost","putJson","makeAdminServicePut","patchJson","makeAdminServicePatch","delJson","makeAdminServiceDel","makeMetadataGet","makeMetadataPost","makeMetadataPut","makeMetadataPatch","makeMetadataDel","makeGisServiceGet","makeGisServicePost","makeGisServicePut","makeGisServicePatch","makeGisServiceDel","getOptions","identity","url","payload","version","additionalheaders","headers","buildHeaders","defaultOptions","method","body","JSON","stringify","options","fetch","resp","handleResponse","makePlainPost","isApiError","error","ApiError","baseUrl","resource","userRole","otherHeader","merge","getResponseBody","get","includes","json","text","httpStatus","httpStatusText","Title","apiError","status","statusText","okStatuses","result","console","reject","ERROR_CODES","getNotAuthErrors","filter","without","parseError","custom","uniqid","time","isObject","message","timestamp","Date","now","CONVERT_DATASET","CONVERT_START","convertStart","title","UPDATE_CONVERSION_PROGRESS","updateConversionProgress","progress","CONVERT_COMPLETE","convertComplete","CONVERT_FAIL","convertFail","REMOVE_CONVERT","removeConvert","EXPORT_STATES","PENDING","IN_PROGRESS","DONE","FAILED","DOWNLOAD_TYPE","convertItem","findConvert","push","datasetId","state","find","splice","findIndex","LOAD_CUSTOMER_USERS","loadCustomerUsers","searchText","LOADING_CUSTOMER_USERS","loadingCustomerUsers","loading","SET_CUSTOMER_USERS","data","customerUsers","LOAD_DATASET_READERS","LOADING_DATASET_READERS","loadingDatasetReaders","SET_DATASET_READERS","datasetFileReaders","concat","datasetDedicatedReaders","dedicated","fileReaders","LOAD_DATASET_WRITERS","LOADING_DATASET_WRITERS","loadingDatasetWriters","SET_DATASET_WRITERS","datasetFileWriters","datasetDedicatedWriters","fileWriters","ADD_ERROR","addError","REMOVE_ERROR","EXPORT_DATASET","exportDataset","fileName","projectId","EXPORT_START","exportStart","UPDATE_EXPORT_PROGRESS","updateExportProgress","EXPORT_COMPLETE","exportComplete","EXPORT_FAIL","exportFail","REMOVE_EXPORT","removeExport","exportItem","findExport","IMPORT_FILE","importFile","fileUrl","IMPORT_START","importStart","createdBy","initialId","UPDATE_PROGRESS","updateProgress","IMPORT_COMPLETE","importComplete","IMPORT_FAIL","importFail","REMOVE_IMPORT","removeImport","TRANSFER_STATUSES","NONE","COMPLETED","ERROR","getTransfer","transferUploadConvert","transferConvert","transferDownloadConvert","importItem","findOrCreateImportItem","findImport","item","intlReducer","UPDATE","locale","messages","formats","LOAD_PROJECTCONTENT","loadProjectContent","page","rowsPerPage","sortBy","sortOrder","namePrefix","SET_PROJECT_CONTENT","setProjectContent","projectContent","totalCount","offset","SET_PROJECT_ROWSPERPAGE","setProjectRowsPerPage","SET_PROJECT_PAGINATION","setProjectPagination","LOAD_PROJECT_MEMBERS","loadProjectMembers","LOADING_PROJECT_MEMBERS","loadingProjectMembers","SET_PROJECT_MEMBERS","setProjectMembers","members","UPDATE_PROJECT_DATASET","UPDATING_PROJECT_DATASET","updatingProjectDataset","updating","LOAD_PROJECT_DATASETS","loadProjectDatasets","LOADING_PROJECT_DATASETS","SET_PROJECT_DATASETS","DELETE_PROJECT_DATASETS","DELETE_PROJECT_FOLDERS","DELETING_PROJECT_FOLDERS","deletingSubProjects","DELETING_PROJECT_DATASETS","deletingProjectDatasets","LOAD_PROJECT_DETAILS","loadProjectDetails","LOADING_PROJECT_DETAILS","loadingProjectDetails","SET_PROJECT_DETAILS","setProjectDetails","details","capabilities","LOAD_PROJECT_SUBPROJECTS","LOADING_PROJECT_SUBPROJECTS","loadingProjectSubprojects","SET_PROJECT_SUBPROJECTS","LOADING_PROJECT_SUBPROJECTS_TREE","loadingProjectSubprojectsTree","SET_PROJECT_SUBPROJECTS_TREE","setProjectSubprojectsTree","subprojects","parentProjectId","tree","LOAD_PROJECT_PARENT","LOADING_PROJECT_PARENT","SET_PROJECT_PARENT","LOAD_PROJECT_ROOT","LOADING_PROJECT_INITIAL_TREE","loadingProjectInitialTree","SET_PROJECT_ROOT","SET_PROJECT_INITIAL_TREE","setProjectInitialTree","initialtree","resetProjectInitialTree","project","UPDATE_PROJECT_DETAILS","MOVE_PROJECT_CONTENT","MOVING_PROJECT_CONTENT","movingContent","moving","loadProjectPath","LOADING_PROJECT_PATH","SET_PROJECT_PATH","setProjectPath","pagination","datasets","deleting","parent","parentProject","content","rootProject","path","SET_PROJECTS_SEARCHTEXT","SET_PROJECTS_PAGINATION","SET_PROJECTS_ROWSPERPAGE","DELETE_PROJECTS","DELETING_PROJECTS","deletingProjects","UPDATE_PROJECT","UPDATING_PROJECT","updatingProject","CREATE_PROJECT","CREATE_SUBPROJECT","CREATING_PROJECT","creatingProject","LOAD_PROJECTS","LOADING_PROJECTS","loadingProjects","my","SET_PROJECTS","initState","Array","projects","newData","RESTORE_RECYCLE_BIN_ITEMS_DELETED_BY_ME","restoreRecycleBinItemsDeletedByMe","tenantId","RESTORING_RECYCLE_BIN_ITEMS_DELETED_BY_ME","restoringRecycleBinItemsDeletedByMe","restoring","LOAD_RECYCLE_BIN_ITEMS_DELETED_BY_ME","loadRecycleBinItemsDeletedByMe","limit","SET_RECYCLE_BIN_ITEMS_DELETED_BY_ME","LOADING_RECYCLE_BIN_ITEMS_DELETED_BY_ME","loadingRecycleBinItemsDeletedByMe","reducer","itemsDeletedByMe","SET_CONFIG","setConfig","DISMISS_PROGRESS_ITEM","OPEN_POPUP_REMINDER","openPopupReminder","open","SUPRESS_POPUP_REMINDER","NOTIFY","SHOW_NOTIFICATION","showNotification","SHOW_LINK","showLink","surpressPopupReminder","Boolean","localStorage","getItem","popupReminderIsOpen","appStatus","notification","linkToProject","linkNotification","surpress","UPLOAD_FILE","uploadFile","file","UPLOAD_START","uploadStart","UPLOAD_COMPLETE","uploadComplete","UPLOAD_FAIL","uploadFail","REMOVE_UPLOAD","removeUpload","UPLOAD_STATES","UPLOAD_TYPE","upload","findUpload","LOAD_APPS","LOADING_APPS","loadingApps","SET_APPS","apps","applications","REMOVE_PROGRESS_ITEM","removeProgressItem","progressItem","UPDATE_OR_ADD_PROGRESS_ITEM","updateOrAddProgressItem","PROGRESS_ITEM_COMPLETE","progressItemComplete","PROGRESS_ITEM_FAILED","progressItemFailed","progressItems","findOrCreateProgressItem","progressValue","importId","done","findProgressItem","p","LOAD_COORDINATE_SYSTEMS","LOADING_COORDINATE_SYSTEMS","loadingCoordinateSystems","SET_COORDINATE_SYSTEMS","GET_COORDINATE_SYSTEMS_BY_ID","FILTER_COORDINATE_SYSTEMS","allCoordinateSystems","selectedCoordinateSystems","searchById","coordinateSystems","allCS","names","toLowerCase","searchCoordinateSystemsById","_allCS","toString","startsWith","LOAD_ADMIN_CREDITS","loadAdminCredits","LOADING_ADMIN_CREDITS","loadingAdminCredits","loadingCredits","SET_ADMIN_CREDITS","setAdminCredits","credits","SET_ADMIN_USERROLE","setIsAdmin","isAdmin","SET_BACKOFFICE_USERROLE","setIsBackOffice","isBackOffice","SET_ROOT_CONTRIBUTOR_USERROLE","setIsRootContributor","isRootContributor","StateEnum","admin","tenant","sortedTenants","orderBy","users","loadingUsers","usersSlice","createSlice","initialState","reducers","setLoadingUsers","setUsers","setUsersRowsPerPage","actions","apiAccessList","INIT","apiAccessSlice","setApiAccessLoadingState","loadingState","LOADING","LOADED","setAPIAccesssList","apiAccess","updateAPIAccessItem","accountId","deleteAPIAccessList","addAPIAccessList","apiKeyList","lastAddedApiKey","setAPIKeysLoadingState","setAPIKeysList","groupBy","apiKeys","addAPIKeyList","newList","forEach","apiKey","uniqBy","deleteAPIKeyList","accountIds","apiKeyIds","publicId","setLastAddedAPIKey","groups","tenantUsers","groupsSlice","setGroupsLoadingState","setGroupsList","features","featuresSlice","setFeaturesLoadingState","setFeaturesList","cpuUsage","params","startDate","moment","subtract","format","endDate","siteCpuUsageSlice","setCpuUsageLoadingState","setTotalCount","setCpuQueryParams","setCpuUsageData","setCpuUsageState","storageUsage","siteStorageUsageSlice","setStorageUsageLoadingState","setStorageUsageData","setStorageUsageState","projectNamesSlice","setProjectNamesLoadingState","setProjectNames","appendProjectNames","rootProjectLisSlice","resetRootProjectLoadingState","setRootProjectListLoadingState","setRootProjectQueryParams","setRootProjectListData","setRootProjectListState","CALL_CREDIT_POST","CALL_CREDIT_DETAILS_POST","CALL_CREDIT_DETAILS_EXTENDED_POST","callCreditDetailsExtendedPost","CALL_CREDIT_MOVE_PUT","callCreditMovePut","CALL_CREDIT_REPORT_POST","CALL_CREDIT_RESERVE_PUT","CALL_CREDIT_SPEND_PUT","CALL_CREDIT_UNASSIGNED_POST","callCreditUnassignedPost","CALL_CREDIT_UNASSIGNED_DETAILS_POST","callCreditUnassignedDetailsPost","CALL_CREDIT_TENANT_GET","callCreditTenantGet","CALL_CREDIT_AVAILABLE_GET","callCreditAvailableGet","SET_CREDIT_DETAILS","setCreditDetails","SET_CREDIT_DETAILS_EXT","setCreditDetailsExt","SET_CREDIT_UNASSIGNED","setCreditUnassigned","SET_CREDIT_UNASSIGNED_EXT","setCreditUnassignedExt","SET_CREDIT_TENANT","setCreditTenant","SET_CREDIT_LOADING","setCreditLoading","SET_CREDIT_AVAILABLE","setCreditAvailable","SET_CREDIT_AVAILABLE_INFO_DATA","setCreditAvailableInfoData","creditTenant","creditUnassigned","creditUnassignedExt","creditDetails","creditDetailsExt","creditAvailable","creditAvailableInfoData","SET_BILLING_INFORMATION","setBillingInformation","billingInformation","billingReference","billingReferenceTag","billingReferenceType","billing","rootReducer","combineReducers","auth","converts","datasetReaders","datasetWriters","errors","imports","intl","recycleBin","ui","uploads","siteCpuUsage","siteStorageUsage","projectNames","rootProjectList","useTypedSelector","useSelector","filterCustomerUsers","email","getCustomerUsers","watchCustomerUsers","takeLatest","put","userById","keyBy","getDatasetReaders","readerType","queryParameter","element","getAllCoordinateSystems","getUserIsBackOffice","getReadersToHide","readersToHide","getUser","userName","profile","initials","token","getSurpressPopupReminder","getLoadingApplications","getApplications","getRecycleBinItemsDeletedByMe","getRecycleBinItemsDeletedByMeOffset","getRecycleBinItemsDeletedByMeLimit","getRecycleBinItemsDeletedByMeSortBy","getRecycleBinItemsDeletedByMeSortOrder","getProjectDetails","getProjectContent","getProjectContentPagination","getProjectContentRowsPerPage","getProjectContentNamePrefix","getProjectContentSortBy","getProjectContentSortOrder","getProjectTree","getProjectInitialTree","getImport","getConvert","getTenantFeatures","SRID_PARAM","ZCOLUMNINDEX_PARAM","CONNECTCOLUMNINDEX_PARAM","XYZCOLUMNSSEQUENCE","mapWriterParameters","writerParameters","entries","mapReaderParameters","readerParameters","coordinateSystemId","srId","isArray","mapUserImportDataToConvertApiBody","readerInputParameters","writerInputParameters","originalFileName","uploadUrl","outputDatasetData","description","readerName","reader","writerName","writer","mapUserConvertDataToConvertApiBody","conversionData","importData","outputProjectId","mapUserDownloadDataToConvertApiBody","targetFileName","watchDatasetReaders","loadDatasetReaders","takeEvery","dedicatedReaders","readers","select","readersToBeHidden","split","fileImporter","indexOf","watchUi","take","warn","EXPORT_AND_DOWNLOAD_DATASET","EXPORT_AND_DOWNLOAD_MANY_DATASETS","watchExportAndDownload","exportAndDownloadDataset","exportAndDownloadManyDatasets","LOG_TAG","log","dataset","GET_EXPORT_INFO_DELAY","EXPORT_REMOVE_ON_DONE_DELAY","PROJECT_TYPE","FOLDER_TYPE","DATASET_TYPE","watchExports","exportFile","info","errorMessage","delay","window","downloadPath","watchImports","TAG","CHANGE_LANGUAGE","watchIntl","changeLanguage","loadMessages","getMessages","updateIntl","lang","DATASETFORMAT","isDataset","capitalize","charAt","toUpperCase","getProject","getProjectDatasets","getProjectSubprojects","getProjectFolders","newOffset","newLimit","query","getProjectMembers","getCapabilities","delProjectDataset","putProjectDataset","moveDataset","targetProjectId","getProjectPath","getRootProjectList","URLSearchParams","getProjects","roles","postProject","postSubProject","putProject","patchProject","versionId","rowVersion","delProject","moveProject","putProjectMembers","notify","linkNotify","createEventChannelCallback","cb","channel","eventChannel","emit","enhancedCb","args","watchProject","loadFoldersAndDatasets","updateProjectDataset","loadProjectSubprojects","loadProjectRoot","deleteProjectDatasets","deleteSubProjects","moveContent","updateProjectDetails","getSort","sorter","datasetFormat","datasetType","isDatasetBelowOffset","index","count","canListContent","projectDatasets","sortedContent","cleanedSortedContent","rawMembers","enhanceMembers","fork","forTable","subProjects","newTree","datasetIds","flow","mapValues","member","userId","projectParentId","projectIds","selectionSize","size","projectDidUpdate","accessLevel","projectData","updatedMembers","pick","canEditAccessLevel","canGrantAccess","canEdit","response","watchProjects","loadProjects","createProject","createSubProject","updateProject","deleteProjects","getPage","getRowsPerPage","getMy","getSortBy","getSortOrder","getNamePrefix","undefined","projectDidCreate","projectsDidDelete","restoreRecycleBinProject","restoreRecycleBinDataset","watchRecycleBin","restoreItemDeletedByMe","itemType","responses","canRestore","canDelete","canDeleteContent","getRecycleBinItemsDeletedByMeState","handleNotify","handleLinkToProject","handleImportComplete","handleConvertComplete","handleDismissProgressItem","completedImport","currentProjectDetails","completedConvert","UPLOAD_AND_IMPORT_FILE","uploadAndImportFile","UPLOAD_AND_IMPORT_MANY_FILES","FILEWRITER","asIfReaderWriter","watchUploadAndImport","watchUploadAndImportMany","uploadAndImportManyFiles","files","uploadAndImportFileAction","uploadAction","getUploadUrl","watchUploads","uploadToAzureStorage","pipeline","StorageURL","newPipeline","AnonymousCredential","blockBlobURL","BlockBlobURL","createEnhancedProgressCallback","progressHandler","uploadBrowserDataToBlockBlob","Aborter","None","loadedBytes","Number","toFixed","fileSize","END","getAllApplications","cloudHomeBackend","MikeCloudApps","watchFetchApps","fetchAllApps","LOAD_TENANT_FEATURES","loadTenantFeatures","UPDATE_TENANT_APPLICATION","watchAuth","handleIsAuthenticated","handleAuthData","isAuthenticated","canCreateContent","watchProgress","handleProcessFailed","handleUpdateUploadProgress","handleUpdateProgress","handleUploadStart","handleExportStart","handleConvertStart","handleImportStart","handleExportComplete","handleConversionComplete","PROGRESS_ITEM_TIMEOUT","watchConverts","convertDataset","datasetName","getDatasetWriters","writerType","watchDatasetWriters","loadDatasetWriters","dedicatedWriters","BASE_URL","getCoordinateSystems","watchFetchCoordinateSystems","fetchAllCoordinateSystems","BASE_IAM_URL","getSASToken","getCredits","getTenantUsers","getUserTenants","postTenant","patchTenant","putBillingInformation","getUsers","inviteUserApi","role","redirectUri","postUsers","postUser","delUser","getAccounts","postAccount","account","patchAccount","deleteAccounts","accountList","getApiKeys","postAPIKey","patchAPIKey","deleteAPIKeys","ACCESS_LEVELS","SHARED","PRIVATE","CONFIDENTIAL","ROLE_TYPES","OWNER","CONTRIBUTOR","READER","ROLE_TYPES_EXT","commonMessages","defineMessages","allProjects","cancel","confidential","confidentialShort","createdAt","delete","deletedAt","download","edit","editedAt","folder","import","lastActivityAt","locationType","myProjects","okay","owner","private","privateShort","refresh","restore","shared","sharedShort","siteData","tags","updatedAt","yes","yesDelete","tenantAccess","tenantInfo","tenantApiAccess","noAccess","tenantGroups","tenantApplications","watchAdmin","createTenant","fetchCredits","fetchTenants","updateTenant","formData","adminUserId","Math","round","formatMessage","LOAD_USERS","loadUsers","DELETE_USERS","UPDATE_USER","INVITE_USER","inviteUser","watchUsers","fetchUsers","updateUser","deleteUsers","filteredUsers","u","principalType","tUsers","tUser","tu","userIdentityId","LOAD_API_ACCESS","loadAPIAccessList","CREATE_API_ACCESS","UPDATE_API_ACCESS","DELETE_API_ACCESS","CREATE_API_KEY","UPDATE_API_KEY","DELETE_API_KEYS","fetchApiAccess","createApiAccess","updateApiAccess","deleteApiAccess","createApiKey","updateApiKey","deleteApiKeys","usersRoles","accountsWithRoles","foundRole","keyList","flatten","getGroups","createGroup","group","deleteGroup","groupId","patchGroup","gId","LOAD_GROUPS","loadGroups","CREATE_GROUP","UPDATE_GROUP","updateGroup","DELETE_GROUPS","watchGroup","fetchGroups","postGroup","delGroup","updtGroup","createPayload","setFeatureStatus","appId","enabled","getConfigUrl","configPath","fetchConfig","watchFeatures","fetchFeatures","patchApplication","configuration","allFeatures","ownFeatureId","clientName","feature","featureId","LOAD_SITE_CPU_USAGE","loadSiteCpuUsage","postConsumptionMyList","consumptionUrl","metricType","aggregateBy","ProjectId","from","to","watchSiteCpuUsage","fetchSiteCpuUsage","LOAD_SITE_STORAGE_USAGE","loadSiteStorageUsage","watchSiteStorageUsage","fetchSiteStorageUsage","startOf","endOf","LOAD_PROJECT_NAMES","loadProjectNames","watchProjectNames","fetchProjectNames","list","nameHash","reduce","acc","LOAD_ROOT_PROJECT_LIST","loadRootProjectList","watchRootProjectList","fetchRootProjectList","ReportTypeEnum","ImageNameEnum","BASE_CRED_URL","postApiCredit","postApiCreditDetails","postApiCreditDetailsExtended","putApiCreditMove","putApiCreditReserve","putApiCreditSpend","postApiCreditUnassigned","postApiCreditUnassignedDetails","getApiCredit","getReportRequestBody","reportType","reportName","generateFileName","generateFolderName","today","hours","String","getHours","padStart","minutes","getMinutes","seconds","getSeconds","formattedTime","day","getDate","month","getMonth","year","getFullYear","formattedDate","postApiReport","watchCredits","watchCreditPost","watchCreditDetailsPost","watchCreditDetailsExtendedPost","watchCreditReportPost","watchCreditMovePut","watchCreditReservePut","watchCreditSpendPut","watchCreditUnassignedPost","watchCreditUnassignedDetailsPost","watchCreditTenantGet","watchCreditAvailableGet","calcExecTime","startD","startedAt","endD","finishedAt","duration","diff","executionTime","expiresAt","add","asDays","durationFormat","formattedDuration","validity","data2","statusFilter","data3","availableCredits","rootSaga","watchErrors","watchApiAccess","_ai","initAi","instrumentationKey","ApplicationInsights","enableAutoRouteTracking","loadAppInsights","setAuthenticatedUserContext","bootstrap","getConfig","queryString","location","search","parameters","qs","sid","sessionId","appInsightsKey","appInsights","initApis","loginConfig","PropTypes","exact","clientId","string","isRequired","oneOf","values","mduiSizes","mduiPlacements","projectCapabilities","bool","canReadContent","canUpdateContent","language","shape","number","wkt","proj4String","customerUser","projectMember","displayName","any","object","blobName","exportForm","exporterId","exporter","datasetTypes","arrayOf","exportData","importForm","transferUpload","importerId","importerParameters","advancedOptions","parameter","dataType","INTEGER","STRING","BOOL","required","datasetImporter","datasetReader","writers","datasetWriter","projectAccessLevel","datasetProjects","objectOf","toEmail","subject","portalLink","link","linkLibrary","platformDocumentation","LOGGING_OUT","MikeLogin","logOutLabel","flat","logoutClickCallback","logout","useOidc","useState","anchorEl","setAnchorEl","handleLogout","sessionStorage","setItem","fabStyle","fontWeight","fontSize","minHeight","boxShadow","Fab","onClick","event","currentTarget","color","style","Menu","onClose","anchorOrigin","vertical","horizontal","transformOrigin","getContentAnchorEl","padding","display","flexDirection","alignItems","justifyContent","gap","Typography","buttontype","useAppNavStyles","makeStyles","theme","createStyles","tabsIndicator","hiddenTabRoot","minWidth","margin","root","borderBottom","palette","grey","paddingLeft","marginBottom","activeLabel","secondary","main","svg","useTabStyles","textTransform","opacity","wrapper","paddingRight","marginLeft","LinkTab","label","icon","disabled","classes","Tab","component","Link","AppNav","useIntl","currentPath","useLocation","pathname","activeTab","useMemo","Tabs","indicator","indicatorColor","textColor","className","Projects","Delete","IAMNav","showSiteAccess","centered","MyProjects","TableResults","compose","formikConnect","withProps","formik","touched","onBlur","handleBlur","onChange","handleChange","errorMessageOrErrors","first","isNil","submitCount","has","helperText","withFormik","autoComplete","autoFocus","fullWidth","rows","addPlaceHolder","sx","InputLabelProps","multiline","minRows","variant","backgroundColor","submitButtonStyle","css","validationSchema","Yup","min","max","matches","CreateTenantForm","handleCreateTenant","defaultInitialValues","useEffect","fetchBillingInformation","catch","initialValues","onSubmit","handleSubmit","setFieldTouched","Grid","container","spacing","xs","persist","bind","objectHash","useStyles","button","light","buttonSecondaryBorder","border","mikePalette","lightGrey","cursor","buttonSecondaryBorderWhite","primary","iconStyle","iconPrimaryStyle","iconSecondaryStyle","ChangeSiteButton","buttonProps","login","Button","projectQueryParameter","appIconName","appName","appIcon","background","paper","borderRadius","paddingTop","appNameWithError","warnIcon","ellipsis","maxWidth","whiteSpace","overflow","textOverflow","MikeCloudApp","application","linkToRootUrl","iconName","direction","href","srcSet","alt","mediumGrey","AppsSkeleton","Skeleton","match","useRouteMatch","strict","sensitive","app","BASE_COLOR","CreditsIcon","colorR","fillR","viewBox","xmlns","DataAdminTheme","MikeSharedTheme","overrides","MuiFormLabel","MIKE_COLORS","DARKGREY_DEFAULT","PINK_DEFAULT","MuiFilledInputLabel","lineHeight","MEDIUMGREY_LIGHT","MuiFilledInput","MEDIUMGREY_DEFAULT","MEDIUMGREY_DARK","BRANDBLUE_DEFAULT","underline","MuiFormHelperText","MuiSelect","selectMenu","MuiMenuItem","MuiInput","MuiTextField","createTheme","popover","popper","padIcon","marginRight","innerButton","marginTop","popHeader","closeButton","innerBlock","messageBlock","gridTemplateColumns","CreditsInfo","React","handleClose","stopPropagation","creditLoading","dispatch","useDispatch","expirationData","setExpirationData","reload","setReload","expDate","setExpDate","expCredits","setExpCredits","history","useHistory","validateDate","sourceDate","transparent","formatDate","dateIn","expiration","sumData","total","addSpace","num","separator","reverse","join","Tooltip","tooltip","ButtonBase","WarningSharp","Popover","Close","startIcon","Refresh","parseFloat","toLocaleString","CircularProgress","Divider","noWrap","ArrowRightAlt","Input","SiteOwnersDialogButton","isDialogOpen","setIsDialogOpen","apiUsers","setApiUsers","handleGetAndMergeUsers","finalUsers","dataItem","useApiUsers","isMenuOpen","Dialog","LINKS_MAP","CreateInternalTenantButton","CreateTenantButton","TenantButtons","onOpenCreateTenant","accessTokenPayload","useOidcAccessToken","isUserInternal","setIsUserInternal","isSiteInternal","setIsSiteInternal","setCanCreateTenants","canCreateInternalTenants","setCanCreateInternalTenants","canCreateExternalTenants","setCanCreateExternalTenants","endsWith","currentTenant","tenantType","useTenantButtons","APP_TO_FILTER","enhance","withStyles","appBarSpacer","flexGrow","paddingBottom","header","tenantContainer","tenantSelect","tenantButton","placeHolder","placeSelectTop","placeSelectBottom","headerRightPlaceHolder","iamNav","creditsItem","creditsText","rightActionButtons","switchTenantButton","children","support","tutorial","openCreateTenant","onCreateTenantCloseClick","onCreateTenant","currentProject","menuAnchorEl","setMenuAnchorEl","feat","foundTenant","mailConfig","documentationConfig","documentationLibraryConfig","platformDocumentationConfig","portalSupportConfig","logoutCallback","useCallback","_paq","topBarProps","DataAdmin","appTitle","loginButton","logInLabel","supportButton","tooltipPosition","top","left","actionsArea","homeButton","CssBaseline","Fade","in","showAlways","textDecoration","keepMounted","position","isOpen","titleArea","contentArea","noGrayOverlay","alignContent","paddingStyle","PageNotFound","searchField","devider","SearchInput","onTextChange","inputProps","useTextChange","handleTextChange","resetTextChange","disableUnderline","startAdornment","InputAdornment","endAdornment","RefreshButton","DeleteButton","getSortedPageRows","_order","_orderBy","sortedData","getPageRows","LinkRenderer","configure","CellLink","verticalAlign","pure","cloneElement","actionStyle","iconActionStyle","renderEdit","Edit","renderDelete","renderEditItem","row","parentCapabilities","renderDeleteItem","renderEditProject","renderDeleteProject","renderConvertDataset","canConvert","ConvertData","renderDownloadDataset","canDownload","Download","renderPath","dark","originalLocation","Undo","multi","filesize","makeProjectNameLink","uri","makeProjectContentNameLink","makeProjectNotificationLink","dragArea","backgroundImage","dragOver","backgroundPosition","backgroundRepeat","backgroundSize","borderTop","borderLeft","dragLabel","firstColumn","lastColumn","dragIconLabelContainer","TableBodyDragAndDropArea","columns","columsMid","setColumsMid","floor","TableBody","TableRow","tabIndex","_head","TableCell","UploadCloud","Renders","getValue","field","oneOfType","func","numeric","hide","disablePadding","render","comparator","col","isFunction","getCellKey","getRender","EnhancedTableHead","allPageRowsSelected","noBottomBorder","notSortableColumns","onRequestSort","onTableHeadCheckboxChange","order","partiallyPageRowsSelected","hasSelection","TableHead","tableHeader","classNames","stickyHeader","dragHeader","Checkbox","indeterminate","checked","align","getPadding","sortDirection","TableSortLabel","active","actionButton","stickyActionHeader","TableBodySkeleton","skeletonRows","skeletonHead","ind","ActionIcon","Icon","lazy","lazyLoadIconByName","fallback","Actions","actionsPopupStateChange","popupId","popupState","Fragment","bindTrigger","bindMenu","MenuListProps","XLIGHTGREY","a","renderedValue","MenuItem","preventDefault","close","callBack","disableGutters","val","s","getIdFieldValue","idField","withRouter","table","topOffset","zIndex","headerColor","dragOverColor","defaultProps","rowsPerPageOptions","withState","_rowsPerPage","withHandlers","_isSelected","selectedRows","itemId","rowItem","_handleRequestSort","_event","property","_setOrder","_setOrderBy","onHandleRequestSort","_handleActionClick","_handleColumnClick","onColumnClick","_handleClick","onSelectionChange","selectedIndex","newSelected","_handleChangePage","onChangePage","_setPage","_handleChangeRowsPerPage","onChangeRowsPerPage","_setRowsPerPage","hasMorePages","isSelected","processDroppedFiles","pageRows","selectedRowCount","manyRowsSelected","isEmpty","dataCount","dragEnterCounter","useRef","setDragOver","handleDrop","dataTransfer","current","handleDragOver","handleDragLeave","handleDragEnter","emptyTableWithDragFunctionaly","Paper","elevation","Table","onDrop","onDragOver","onDragEnter","onDragLeave","rowKey","isItemSelected","hover","selected","cellKey","iconButton","TablePagination","onPageChange","onRowsPerPageChange","nextIconButtonProps","UsersNav","User","Apps","IconButton","messageId","iconComponent","NewProject","iconElement","formControl","input","inputNoLabel","iconDisabled","iconError","iconHidden","primaryDisabled","primarySelected","typography","fontWeightBold","helperTextPlaceHolder","menuList","hideIcon","items","onSelectClose","onSelectOpen","primaryField","secondaryField","selectOpen","valueField","setOpen","forceUpdateOnItemListChange","FormControl","InputLabel","htmlFor","Select","MenuProps","onOpen","itemValue","selectedItemValue","menuItem","ListItemText","LinearProgress","FormHelperText","APIAccessForm","editing","mergedInitialValues","change","APIKeyForm","expirationDate","toJSON","convertToRepresentation","dateString","date","utc","local","setFieldValue","toDate","convertToModel","longText","bold","LongName","longName","memo","titleBar","onlyIconBar","titleHeadings","DialogTitle","dialogContent","dialogTitle","dialogActions","ConfirmationDialog","ok","onCancel","onOk","scroll","DialogActions","hideCancelButton","localMessages","confirmationDialogTitle","confirmationDialogMessage","searchPlaceholder","keyGeneratedTitle","keyGeneratedMessage","hoverStyle","tableTopHeader","tableTopActionButtons","leftActionButtons","apiAccountRow","apiKeyRow","expirationRow","APIAccess","latestAddedApiKey","loadingApiAccess","setSearchText","openAPIAccessEditor","setOpenAPIAccessEditor","setSelectedRows","setSortOrder","sortOrderBy","setSortOrderBy","openDeleteConfirmation","setOpenDeleteConfirmation","itemsToBeDeleted","setItemsToBeDeleted","currentEditingApiAccess","setCurrentEditingApiAccess","openKeyEditor","setOpenKeyEditor","currentEditingKey","setCurrentEditingKey","setTopOffset","measuredRef","node","getBoundingClientRect","column","sorterdAPIAccesList","lowerSearch","filteredKeys","onOkLatestAddedApiKey","getIdForField","Box","mt","readOnly","copy","Duplicate","itemCount","apiAccessIds","deleteAPIAccess","ref","placeholder","soonDate","Intl","DateTimeFormat","navigator","hour","minute","Alert","placement","updateAPIKey","createAPIKey","updateAPIAccess","createAPIAccess","TenantMembersSelect","textResources","noData","setValue","pendingValue","setPendingValue","disableRipple","v","Chip","onDelete","newValue","handleDelete","Popper","Autocomplete","reason","focus","multiple","disableCloseOnSelect","disablePortal","renderTags","noOptionsText","renderOption","option","param","visibility","getOptionSelected","getOptionLabel","renderInput","InputBase","InputProps","UserGroupForm","selectedMembers","setSelectedMembers","handleMemberSelected","onMemberSelected","numberOfUsers","nameRow","groupRow","UserGroups","loadingGroups","currentEditingUserGroup","setCurrentEditingUserGroup","openGroupEditor","setOpenGroupEditor","deleteGroups","CONVERT_TYPE","DownloadButton","tip","MoveToButton","ProjectMoveTo","createSubprojectButton","injectIntl","Folder","uploadContentButton","buttonDisabled","FileChooserButton","onFileSelect","Upload","disabledButton","enabledButton","useMetadataStyles","lightgrey","bottomBorder","maxHeight","EditMetadata","onChangeMetadata","setEditing","vals","setVals","addMetaDataLocal","metaDatas","newVals","form","Plus","md","removeMetaDataLocal","validateForm","REQUIRED","INVALIDKEY","UNIQUEKEY","sameKeys","existingKey","test","right","submitButton","editingMetadata","setEditingMetdata","handleSetEditMetadata","validate","metas","fromEntries","updatedValues","formikProps","colorByRole","MemberListItem","fullName","parts","last","getNameInitials","roleFieldName","avatar","Avatar","textAlign","arrayHelpers","remove","membersPlaceholder","createProjectButton","editProjectButton","editSubprojectButton","float","isSubProject","isFolder","customerUsersArray","setCustomerUsersArray","loggedInUserId","clearOnBlur","newCustomer","el","DateTime","jsonTime","LongText","formatRender","longTextRender","itemNameRender","DataSet","dateTimeRender","_columns","DataTableRenders","selectedItems","onEdit","onConvert","onDownload","setCapabilities","fetchCapabilitiesIfNeeded","newCap","cap","mapStateToProps","createSelector","loadingDatasets","loadingSubprojects","connect","lifecycle","componentDidMount","componentDidUpdate","prevProps","ProjectContentTable","useTreeItemStyles","contrastText","expanded","ProjectsTree","onExpand","onSelect","projectTree","selectedIds","disabledIds","parentId","parentIdTooltip","selectedItemTooltip","itemClasses","allDisabledIds","uniq","TreeView","defaultCollapseIcon","defaultExpandIcon","onNodeToggle","nodeIds","onNodeSelect","nodeId","selectedId","renderTree","child","childrenNodes","TreeItem","dialog","overflowY","scrollbarWidth","scrollbarColor","MikeColors","WHITE","borderRight","ProjectsTreeDialog","onMove","loadingInitialTree","selectedProjectId","setSelectedProjectId","selectedTooltip","parentTooltip","DialogContent","useDialogContentStyles","darkGrey","detail","noDetail","section","wordBreak","expandedSection","ProjectionDetails","changeOpen","trim","replace","formatWkt","Collapse","timeout","unmountOnExit","overflowX","listbox","ProjectionSelect","onProjectionSearchTextChanged","projectionsLoading","projections","isMounted","mounted","useMounted","debouncedSave","debounce","newSearchText","onProjectionInputChange","newProjection","onInputChange","loadingText","selectOnFocus","forcePopupIcon","clearOnEscape","disableListWrap","disableTypography","useConversionStyles","plusButton","plusButtonDisabled","textField","marginTopArrow","readerWriterTranslations","ContextHelp","helpTexts","Info","helpText","parameterInputFieldTranslations","coordinateSystemHelp","FormikRadioGroup","RadioGroup","FormControlLabel","control","Radio","xyzReaderParameterTranslations","subTitle","xyczOption","xyzcOption","xycOption","xyzOption","xyOption","titleContainer","disabledTitle","disabledColor","DatasetXYZParameters","writerFileExtension","AsciiWriter","Dfs2Writer","DfsuWriter","GISWriter","GeoJsonWriter","GeoTiffWriter","MDWriter","NetcdfWriter","ShpWriter","TSWriter","TimeSeriesCsvWriter","TimeSeriesDfs0Writer","VtuWriter","VtiWriter","getNameWithoutExtension","pos","lastIndexOf","substr","adaptedFileName","initialName","adaptedName","targetFileExtension","pop","insertSpaces","dialogMode","ParameterInputField","expandSRID","setExpandSRID","expandNumericField","setExpandNumericField","expandParameter","setExpandParameter","reset","handleReset","parameterErrors","inputField","formatParameterName","inputParameter","readerWriterTranslation","ParameterOutputField","expandBooleanField","setExpandBooleanField","outputField","outputParameter","conversionTranslations","submitDownload","submitConvert","submitUpload","readerDropDown","readerDropDownConvert","writerDropDown","fileWriterAndSRIDHelp","conversionOptions","ConvertToIcon","ConvertTo","DatasetConversion","dialogContentClasses","handleUpload","handleCancel","mode","showDatasetReadersLoading","submit","writersToHide","inDownloadMode","DOWNLOAD","setValues","expandDescription","setExpandDescription","resetInputParameter","setResetInputParameter","resetExportParameter","setResetExportParameter","defaultValue","formatTypeMessage","getAvailableWriters","readerObj","w","getWriters","writerTypeName","writerTypeDesc","localizedReaders","fileTypeKey","fileTypeName","fileTypeDesc","handleResetInputParameters","handleResetExportParameters","validateParameters","requiredParams","rp","requiredErrors","writerObj","enableReinitialize","fileWriterAndSRID","readerObject","availableWriters","selectedWriter","saveAsName","extension","getNameExtension","fileNameWithAdaptedExtension","writerParameter","defaultReader","dfs0","dfs1","dfs2","dfs3","dfsu","xyz","asc","tif","tiff","geotiff","geojson","csv","conversionOptionsTranslations","downloadTitle","selectedFile","uploadAsIs","downloadAsIs","downloadInDifferentFormat","convertToDifferentFormat","next","uploadManyDialogTranslations","additionalMessageForZippedFiles","titlePart1","titlePart2","conversionOptionsTitle","conversionOptionsSubtitle","distance","distanceTop","DatasetConversionOptions","convert","disableConvert","isZippedFile","handleOnClose","handleOnClick","asIfOption","convertToDifferentFormatOption","buttonLabel","setButtonLabel","conversionDialogTranslations","uploadTitle","convertTitle","CurrentRenderStateEnum","DatasetConversionDialog","initialStep","setTextResources","optionsTextResources","setOptionsTextResources","setWritersToHide","setName","setReader","setWriter","setConvert","step","setStep","setDialogTitle","fileExtension","UPLOAD","CONVERSION","theOneAndOnly","defaultUploadValues","handleConvert","DatasetUploadManyDialog","includesZippedFiles","selectedFilesCount","DatasetDownloadManyDialog","downloadManyDialogTranslations","UserInviteForm","shouldAutoFocus","isValid","isSubmitting","ProjectLink","mikeBreadcrumbsLinkLabel","mikeBreadcrumbsLastLabel","AppBreadcrumbNav","projectPath","effectiveRole","usersAmount","effectiveUserRole","Breadcrumbs","maxItems","array","shownName","fontStyle","projectTableHeader","confirmationDeleteTitle","editProjectButtonTipFolder","descriptionLabel","membersLabel","accessLevelLabel","noWriterToDownload","noWriterToConvert","editProjectTitle","createFolderTitle","editDatasetTitle","editFileTitle","inviteUserTitle","confirmationInviteTitle","projectDetails","tableTopHeaderTitle","accessContainer","inviteUserForm","editableDataset","editingCurrentProject","onCloseTreeDialog","onCreateProject","onCreateProjectCloseClick","onCreateProjectOpenClick","onDownloadMany","onError","onEditCurrentProject","onImportDialogDone","onMoveToClick","onMoveTo","onRefreshClick","onSearchTextChange","onUploadMany","onUpdateDataset","openCreateProject","openDownloadManyDialog","openEditDataset","openUploadManyDialog","openProjectTreeDialog","setOpenDownloadManyDialog","setOpenEditDataset","setOpenUploadManyDialog","showDatasetReadersLoader","showDatasetWritersLoader","onSearchProjection","selectedFolders","selectedDatasets","xor","selectionOfDatasetsSize","messageSingleDataset","messageMultipleDatasets","canEditProject","every","canMove","projectMembers","enhanceProjectMembers","editableProject","subprojectIds","selectedDatasetsNotInDedicatedStorage","setSelectedDatasetsNotInDedicatedStorage","conversionName","setConversionName","conversionDatasetId","setConversionDatasetId","conversionDialogMode","setConversionDialogMode","initialConversionStep","setInitialConversionStep","fileToUpload","setFileToUpload","manyFilesToUpload","setManyFilesToUpload","conversionDialogIsOpen","setConversionDialogIsOpen","suitableReaders","setSuitableReaders","setDisableConvert","isOpenInvite","setIsOpenInvite","inviteEmail","setInviteEmail","inviteRole","setInviteRole","inviteUrl","setInviteUrl","openUploadDialog","processFiles","selectedFileCount","selectedFiles","onFileDropped","handleCloseConfirmConvertManyDialog","handleUploadManyFiles","handleCloseConfirmDownloadManyDialog","handleDownloadManyFiles","handleCloseConversionDialog","onUpload","conversionValues","onDeleteOneItem","onDeleteItems","onOkDeleteItems","onOkInviteExternal","onEditOneItem","onConvertDataset","readersForDatasetFormat","toLower","onCancelDeleteItems","onCancelInviteExternal","onDownloadClick","dedicatedStorage","dedicatedWriter","filterDatasets","selectedDataset","cannotCreateContentIds","subproject","disabledMovingTargetIds","ConnectedProjectContentTable","isEditMode","loadingProjectPath","n","isNaN","isFinite","getCoordinateSystemsById","setEditableDataset","setSelectedItems","filesToBeUploaded","datasetsToBeDownloaded","selection","setOpenImportDialog","setCreateSubProject","setEditingCurrentProject","setOpenCreateProject","createNewFolder","setOpenProjectTreeDialog","newOrderBy","newOrder","ProjectContent","leftIcon","gutterTop","gutterBottom","gutter","gridProps","Children","c","stretch","flex","isProject","$$type","canRestoreItem","enhanceProjects","enhanceDatasets","nameRender","Project","typeRender","withPropsOnChange","onRestoreOneItem","actionBar","onRefresh","onRestore","loadingContent","setSelection","setPage","RecycleBinItemsDeletedByMe","UserEditForm","Users","currentUserRoles","isLoadingUsers","currentPage","setCurrentPage","openUserEdit","setOpenUserEdit","inviteUserDialogVisible","setInviteUserDialogVisible","tableActions","setTableActions","currentEditingUser","setCurrentEditingUser","sortedUsers","UserOwner","UserContributor","UserReader","nRows","snackbar","ultimate","AppNotificationSnack","Snackbar","SnackbarContent","hint","LinkNotificationSnack","onCloseCallBack","projectContentNameLink","autoHideDuration","splash","banner","mikeTheme","Grow","src","INVITATION_VERSION","str","parse","INVITATION_TOKEN","waitingBox","waitingText","CreditsStateEnum","InvitationProvider","idTokenPayload","useOidcIdToken","urlParams","decodeURIComponent","getQueryParams","invitationVersion","invitationIv","invitation","normal","currentRenderState","setCurrentRenderState","replaceState","document","invitationStored","acceptingInvitation","acceptInvitation","res","isUserAlreadyMember","extras","prompt","noTenant","unsureHint","unsureLink","notes","pathAndSearch","loggingOut","removeItem","invitationToken","PrivateRoute","Component","isSignedIn","rest","routeProps","SiteInfoNav","PollOutlined","SiteDetailsForm","detailsHeader","detailTable","gridGap","SiteDetails","showEditor","setShowEditor","newBillingInformation","dateRangePicker","dateRangePickerOverlay","SiteCpuUsage","startAsDate","endAsDate","initialDateRange","toggle","maxDate","range","dateRange","start","end","setDateRange","wrapperClassName","closeOnClickOutside","operationId","validFrom","BuyCreditsIcon","SvgIcon","ReturnCreditsIcon","paddingStyle2","reportCheckWraps","specialTypo","navSmallerPadding","justifyItems","tableTopButtons","menuDropdown","CreditsNav","openAssignDialog","setOpenAssignDialog","openReleaseDialog","setOpenReleaseDialog","openReportDialog","setOpenReportDialog","openBuyCreditsDialog","setOpenBuyCreditsDialog","unassignedValue","setUnassignedValue","creditsUnassigned","moveCredits","setMoveCredits","anchorEl2","setAnchorEl2","valueLimitsTest","bottomLimit","topLimit","bl","ul","reloadCredits","onCreditsChange","parsedCredits","getHeaderLabel","ALLOCATION","AVAILABLE","RESERVED","SPENT","sourceTenantId","targetTenantId","callCreditReportPost","CREDITS","itemToChange","oldValue","copyArray","setColumns","valueCheckedChange","headerName","displayState","SUMMARY","ArrowBack","ArrowDropDown","Settings","flexDirectoin","secondColWrap","dataFrame","sectionFrame","paddedDivider","firstColWrap","CreditsSummary","availableValue","setAvailableValue","reservedValue","setReservedValue","spentValue","setSpentValue","allocationValue","setAllocationValue","evalCreditsValues","temp","mainString","addspace","ArrowForward","SiteStorageUsage","getResourceName","NumberFormat","minimumFractionDigits","maximumFractionDigits","Applications","loadingFeatures","displayApps","handleEnabledClick","updateTenantApplication","mikeBreadcrumpsLastLabel","RootProject","rootProjectState","queryParams","createProjectOpen","setCreateProjectOpen","deleteItems","setDeleteItems","showDeleteConfirmation","setShowDeleteConfirmation","canDel","useSavedDataGridState","apiRef","useGridApiRef","defaultColumns","columnsArray","setColumnsArray","debounceStateSave","useDebouncedCallback","allColumns","getAllColumns","columnsConfig","sortModel","getSortModel","tableKey","saveState","changes","localState","newColDefs","columnConfig","colDef","setSortModel","applyChanges","CreditsAllocation","currentRows","setCurrentRows","setEntries","cellClassName","renderCell","creditsRender","validityRender","valueGetter","expiresAtTimeValue","getTime","sortComparator","v1","v2","cloneDeep","autoHeight","uuidv4","pageSize","rowCount","paginationMode","getRowId","onPageSizeChange","dataOffset","properPage","onStateChange","UTCDateTime","utcDate","CreditsAvailable","salesOrderIdRender","renderStringCell","CreditsSpent","sortable","localeCompare","executionTimeLeft","executionTimeRight","startedAtLeft","startedAtRight","finishedAtLeft","finishedAtRight","CreditsReserved","App","onCloseError","onCloseLinkNotification","onClosePopupReminder","onSurpressPopupReminder","appNotifications","otherErrors","onLogoutClick","lastOtherError","setLastOtherError","idToken","currentUser","setCurrentUser","userData","oid","TenantId","TenantName","sub","setUser","setIsAuthenticated","onRemoveError","mikeSnackbarType","mikeOnAction","ConnectedProjectContent","ConnectedRecycleBinItemsDeletedByMe","RedirectRoute","progressSnackVisible","openAppStatus","appStatusIsOpen","setOpenCreateTenant","onDismissProgressListItem","dismissProgressItem","removeError","OpenIdStatusPage","headline","showRetryButton","domain","LicenseInfo","setLicenseKey","sagaMiddleware","createSagaMiddleware","composeEnhancer","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","store","createStore","appReducer","applyMiddleware","run","createIntl","pleaseWait","errorHeadline","errorBody","Index","openIdConfig","onSessionLost","authenticatingComponent","callbackSuccessComponent","authenticatingErrorComponent","loadingComponent","ConnectedApp","client_id","redirect_uri","origin","silent_redirect_uri","scope","authority","service_worker_relative_url","service_worker_only","refresh_time_before_token_expiration_in_second","environment","g","async","head","appendChild","setupMatomo","bootstrapSaga","toPromise","ReactDOM","getElementById"],"mappings":"gHAAAA,EAAOC,QAAU,CAEf,yBAA0B,uCAE1B,0BAA2B,uCAE3B,4BAA6B,YAE7B,6BAA8B,6BAE9B,gCAAiC,OAEjC,gCAAiC,uCAEjC,2BAA2B,E,qBCd7BD,EAAOC,QAAU,CAEf,yBAA0B,mBAE1B,0BAA2B,uCAE3B,4BAA6B,YAE7B,6BAA8B,6BAE9B,gCAAiC,OAEjC,gCAAiC,OAEjC,2BAA2B,E,qBCd7BD,EAAOC,QAAU,CAEf,yBAA0B,uCAE1B,0BAA2B,uCAE3B,4BAA6B,YAE7B,6BAA8B,6BAE9B,gCAAiC,OAEjC,gCAAiC,uCAEjC,2BAA2B,E,qBCd7BD,EAAOC,QAAU,CAEf,yBAA0B,uCAE1B,0BAA2B,uCAE3B,4BAA6B,YAE7B,6BAA8B,6BAE9B,gCAAiC,OAEjC,gCAAiC,uCAEjC,2BAA2B,E,uBCd7BC,OAAOC,eAAeF,EAAS,aAAc,CAC3CG,OAAO,IAETH,EAAQI,oBAAiB,EAEzB,IAEgCC,EAF5BC,GAE4BD,EAFIE,EAAQ,KAG5BF,EAAIG,WACdH,EACA,CACEI,QAASJ,GAIjB,SAASK,IAkBP,OAhBAA,EACET,OAAOU,QACP,SAASC,GACP,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CACzC,IAAIG,EAASF,UAAUD,GAEvB,IAAK,IAAII,KAAOD,EACVf,OAAOiB,UAAUC,eAAeC,KAAKJ,EAAQC,KAC/CL,EAAOK,GAAOD,EAAOC,GAG1B,CAED,OAAOL,CACR,EAEIF,EAASW,MAAMC,KAAMR,UAC7B,CA6BDd,EAAQI,eA3Be,SAAAmB,GAAK,OAC1BjB,EAAOG,QAAQe,cACb,MAEAd,EACE,CACEe,MAAO,GACPC,OAAQ,GACRC,KAAM,QAERJ,GAEFjB,EAAOG,QAAQe,cAAc,OAAQ,CACnCI,EACE,6HACFD,KAAM,YAERrB,EAAOG,QAAQe,cAAc,OAAQ,CACnCI,EAAG,qCACHD,KAAM,YAERrB,EAAOG,QAAQe,cAAc,OAAQ,CACnCI,EAAG,qCACHD,KAAM,YAvBgB,C,uBCpC5B,IAAIE,EAAM,CACT,4BAA6B,KAC7B,+BAAgC,KAChC,kCAAmC,KACnC,qCAAsC,KACtC,gCAAiC,KACjC,mCAAoC,KACpC,6BAA8B,KAC9B,gCAAiC,MAIlC,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAOG,EAAoBF,EAC5B,CACA,SAASC,EAAsBF,GAC9B,IAAIG,EAAoBC,EAAEN,EAAKE,GAAM,CACpC,IAAIK,EAAI,IAAIC,MAAM,uBAAyBN,EAAM,KAEjD,MADAK,EAAEE,KAAO,mBACHF,CACP,CACA,OAAOP,EAAIE,EACZ,CACAD,EAAeS,KAAO,WACrB,OAAOtC,OAAOsC,KAAKV,EACpB,EACAC,EAAeU,QAAUP,EACzBlC,EAAOC,QAAU8B,EACjBA,EAAeE,GAAK,I,8CC7BpB,IAAIH,EAAM,CACT,KAAM,CACL,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,GAED,iBAAkB,CACjB,KACA,EACA,GAED,eAAgB,CACf,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,GAED,kBAAmB,CAClB,KACA,EACA,GAED,gBAAiB,CAChB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,GAED,iBAAkB,CACjB,KACA,EACA,GAED,eAAgB,CACf,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,GAED,wBAAyB,CACxB,KACA,EACA,GAED,sBAAuB,CACtB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,GAED,mBAAoB,CACnB,KACA,EACA,GAED,iBAAkB,CACjB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,GAED,gBAAiB,CAChB,KACA,EACA,GAED,cAAe,CACd,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,GAED,eAAgB,CACf,KACA,EACA,GAED,aAAc,CACb,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,GAED,qBAAsB,CACrB,KACA,EACA,GAED,mBAAoB,CACnB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,GAED,eAAgB,CACf,KACA,EACA,GAED,aAAc,CACb,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,GAED,eAAgB,CACf,KACA,EACA,GAED,aAAc,CACb,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,IAED,qBAAsB,CACrB,KACA,EACA,IAED,mBAAoB,CACnB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,IAED,iBAAkB,CACjB,KACA,EACA,IAED,eAAgB,CACf,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,IAED,cAAe,CACd,KACA,EACA,IAED,YAAa,CACZ,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,IAED,iBAAkB,CACjB,KACA,EACA,IAED,eAAgB,CACf,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,IAED,cAAe,CACd,KACA,EACA,IAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,IAED,oBAAqB,CACpB,KACA,EACA,IAED,kBAAmB,CAClB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,IAED,iBAAkB,CACjB,KACA,EACA,IAED,eAAgB,CACf,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,IAED,gBAAiB,CAChB,KACA,EACA,IAED,cAAe,CACd,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,IAED,uBAAwB,CACvB,KACA,EACA,IAED,qBAAsB,CACrB,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,IAED,yBAA0B,CACzB,KACA,EACA,IAED,uBAAwB,CACvB,IACA,GAED,sBAAuB,CACtB,IACA,GAED,wBAAyB,CACxB,KACA,EACA,IAED,2BAA4B,CAC3B,KACA,EACA,IAED,yBAA0B,CACzB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,IAED,eAAgB,CACf,KACA,EACA,IAED,aAAc,CACb,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,IAED,sBAAuB,CACtB,KACA,EACA,IAED,oBAAqB,CACpB,IACA,GAED,0BAA2B,CAC1B,IACA,GAED,4BAA6B,CAC5B,KACA,EACA,IAED,+BAAgC,CAC/B,KACA,EACA,IAED,6BAA8B,CAC7B,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,IAED,yBAA0B,CACzB,KACA,EACA,IAED,uBAAwB,CACvB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,IAED,cAAe,CACd,KACA,EACA,IAED,YAAa,CACZ,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,IAED,gBAAiB,CAChB,KACA,EACA,IAED,cAAe,CACd,IACA,GAED,0BAA2B,CAC1B,IACA,GAED,4BAA6B,CAC5B,KACA,EACA,IAED,+BAAgC,CAC/B,KACA,EACA,IAED,6BAA8B,CAC7B,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,IAED,gBAAiB,CAChB,KACA,EACA,IAED,cAAe,CACd,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,IAED,sBAAuB,CACtB,KACA,EACA,IAED,oBAAqB,CACpB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,IAED,wBAAyB,CACxB,KACA,EACA,IAED,sBAAuB,CACtB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,IAED,cAAe,CACd,KACA,EACA,IAED,YAAa,CACZ,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,IAED,uBAAwB,CACvB,KACA,EACA,IAED,qBAAsB,CACrB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,IAED,eAAgB,CACf,KACA,EACA,IAED,aAAc,CACb,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,IAED,eAAgB,CACf,KACA,EACA,IAED,aAAc,CACb,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,IAED,gBAAiB,CAChB,KACA,EACA,IAED,cAAe,CACd,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,IAED,iBAAkB,CACjB,KACA,EACA,IAED,eAAgB,CACf,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,IAED,qBAAsB,CACrB,KACA,EACA,IAED,mBAAoB,CACnB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,IAED,qBAAsB,CACrB,KACA,EACA,IAED,mBAAoB,CACnB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,IAED,iBAAkB,CACjB,KACA,EACA,IAED,eAAgB,CACf,IACA,GAED,wBAAyB,CACxB,IACA,GAED,0BAA2B,CAC1B,KACA,EACA,IAED,6BAA8B,CAC7B,KACA,EACA,IAED,2BAA4B,CAC3B,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,IAED,qBAAsB,CACrB,KACA,EACA,IAED,mBAAoB,CACnB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,IAED,uBAAwB,CACvB,KACA,EACA,IAED,qBAAsB,CACrB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,IAED,oBAAqB,CACpB,KACA,EACA,IAED,kBAAmB,CAClB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,IAED,wBAAyB,CACxB,KACA,EACA,IAED,sBAAuB,CACtB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,IAED,qBAAsB,CACrB,KACA,EACA,IAED,mBAAoB,CACnB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,IAED,wBAAyB,CACxB,KACA,EACA,IAED,sBAAuB,CACtB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,IAED,qBAAsB,CACrB,KACA,EACA,IAED,mBAAoB,CACnB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,IAED,sBAAuB,CACtB,KACA,EACA,IAED,oBAAqB,CACpB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,IAED,uBAAwB,CACvB,KACA,EACA,IAED,qBAAsB,CACrB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,sBAAuB,CACtB,IACA,GAED,wBAAyB,CACxB,KACA,EACA,IAED,2BAA4B,CAC3B,KACA,EACA,IAED,yBAA0B,CACzB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,IAED,iBAAkB,CACjB,KACA,EACA,IAED,eAAgB,CACf,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,IAED,0BAA2B,CAC1B,KACA,EACA,IAED,wBAAyB,CACxB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,IAED,sBAAuB,CACtB,KACA,EACA,IAED,oBAAqB,CACpB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,IAED,qBAAsB,CACrB,KACA,EACA,IAED,mBAAoB,CACnB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,IAED,gBAAiB,CAChB,KACA,EACA,IAED,cAAe,CACd,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,IAED,yBAA0B,CACzB,KACA,EACA,IAED,uBAAwB,CACvB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,IAED,wBAAyB,CACxB,KACA,EACA,IAED,sBAAuB,CACtB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,IAED,uBAAwB,CACvB,KACA,EACA,IAED,qBAAsB,CACrB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,IAED,uBAAwB,CACvB,KACA,EACA,IAED,qBAAsB,CACrB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,IAED,gBAAiB,CAChB,KACA,EACA,IAED,cAAe,CACd,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,IAED,cAAe,CACd,KACA,EACA,IAED,YAAa,CACZ,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,IAED,eAAgB,CACf,KACA,EACA,IAED,aAAc,CACb,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,IAED,sBAAuB,CACtB,KACA,EACA,IAED,oBAAqB,CACpB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,IAED,cAAe,CACd,KACA,EACA,IAED,YAAa,CACZ,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,IAED,oBAAqB,CACpB,KACA,EACA,IAED,kBAAmB,CAClB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,IAED,cAAe,CACd,KACA,EACA,IAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,IAED,qBAAsB,CACrB,KACA,EACA,IAED,mBAAoB,CACnB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,IAED,qBAAsB,CACrB,KACA,EACA,IAED,mBAAoB,CACnB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,IAED,mBAAoB,CACnB,KACA,EACA,IAED,iBAAkB,CACjB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,IAED,cAAe,CACd,KACA,EACA,IAED,YAAa,CACZ,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,IAED,0BAA2B,CAC1B,KACA,EACA,IAED,wBAAyB,CACxB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,IAED,uBAAwB,CACvB,KACA,EACA,IAED,qBAAsB,CACrB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,IAED,wBAAyB,CACxB,KACA,EACA,IAED,sBAAuB,CACtB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,IAED,eAAgB,CACf,KACA,EACA,IAED,aAAc,CACb,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,IAED,kBAAmB,CAClB,KACA,EACA,IAED,gBAAiB,CAChB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,IAED,eAAgB,CACf,KACA,EACA,IAED,aAAc,CACb,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,IAED,gBAAiB,CAChB,KACA,EACA,IAED,cAAe,CACd,IACA,GAED,uBAAwB,CACvB,IACA,GAED,yBAA0B,CACzB,KACA,EACA,IAED,4BAA6B,CAC5B,KACA,EACA,IAED,0BAA2B,CAC1B,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,KAED,0BAA2B,CAC1B,KACA,EACA,KAED,wBAAyB,CACxB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,KAED,yBAA0B,CACzB,KACA,EACA,KAED,uBAAwB,CACvB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,QAAS,CACR,IACA,GAED,UAAW,CACV,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,WAAY,CACX,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,KAED,yBAA0B,CACzB,KACA,EACA,KAED,uBAAwB,CACvB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,KAED,wBAAyB,CACxB,KACA,EACA,KAED,sBAAuB,CACtB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,KAED,wBAAyB,CACxB,KACA,EACA,KAED,sBAAuB,CACtB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,KAED,yBAA0B,CACzB,KACA,EACA,KAED,uBAAwB,CACvB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,KAED,wBAAyB,CACxB,KACA,EACA,KAED,sBAAuB,CACtB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,KAED,wBAAyB,CACxB,KACA,EACA,KAED,sBAAuB,CACtB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,KAED,yBAA0B,CACzB,KACA,EACA,KAED,uBAAwB,CACvB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,KAED,wBAAyB,CACxB,KACA,EACA,KAED,sBAAuB,CACtB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,wBAAyB,CACxB,IACA,GAED,0BAA2B,CAC1B,KACA,EACA,KAED,6BAA8B,CAC7B,KACA,EACA,KAED,2BAA4B,CAC3B,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,sBAAuB,CACtB,IACA,GAED,wBAAyB,CACxB,KACA,EACA,KAED,2BAA4B,CAC3B,KACA,EACA,KAED,yBAA0B,CACzB,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,KAED,0BAA2B,CAC1B,KACA,EACA,KAED,wBAAyB,CACxB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,QAAS,CACR,IACA,GAED,UAAW,CACV,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,WAAY,CACX,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,KAED,yBAA0B,CACzB,KACA,EACA,KAED,uBAAwB,CACvB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,KAED,yBAA0B,CACzB,KACA,EACA,KAED,uBAAwB,CACvB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,sBAAuB,CACtB,IACA,GAED,wBAAyB,CACxB,KACA,EACA,KAED,2BAA4B,CAC3B,KACA,EACA,KAED,yBAA0B,CACzB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,KAED,0BAA2B,CAC1B,KACA,EACA,KAED,wBAAyB,CACxB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,uBAAwB,CACvB,IACA,GAED,yBAA0B,CACzB,KACA,EACA,KAED,4BAA6B,CAC5B,KACA,EACA,KAED,0BAA2B,CAC1B,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,uBAAwB,CACvB,IACA,GAED,yBAA0B,CACzB,KACA,EACA,KAED,4BAA6B,CAC5B,KACA,EACA,KAED,0BAA2B,CAC1B,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,KAED,wBAAyB,CACxB,KACA,EACA,KAED,sBAAuB,CACtB,IACA,GAED,yBAA0B,CACzB,IACA,GAED,2BAA4B,CAC3B,KACA,EACA,KAED,8BAA+B,CAC9B,KACA,EACA,KAED,4BAA6B,CAC5B,IACA,GAED,uBAAwB,CACvB,IACA,GAED,yBAA0B,CACzB,KACA,EACA,KAED,4BAA6B,CAC5B,KACA,EACA,KAED,0BAA2B,CAC1B,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,KAED,0BAA2B,CAC1B,KACA,EACA,KAED,wBAAyB,CACxB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,uBAAwB,CACvB,IACA,GAED,yBAA0B,CACzB,KACA,EACA,KAED,4BAA6B,CAC5B,KACA,EACA,KAED,0BAA2B,CAC1B,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,KAED,wBAAyB,CACxB,KACA,EACA,KAED,sBAAuB,CACtB,IACA,GAED,8BAA+B,CAC9B,IACA,GAED,gCAAiC,CAChC,KACA,EACA,KAED,mCAAoC,CACnC,KACA,EACA,KAED,iCAAkC,CACjC,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,mBAAoB,CACnB,IACA,GAED,qBAAsB,CACrB,KACA,EACA,KAED,wBAAyB,CACxB,KACA,EACA,KAED,sBAAuB,CACtB,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,KAED,0BAA2B,CAC1B,KACA,EACA,KAED,wBAAyB,CACxB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,sBAAuB,CACtB,IACA,GAED,wBAAyB,CACxB,KACA,EACA,KAED,2BAA4B,CAC3B,KACA,EACA,KAED,yBAA0B,CACzB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,KAED,0BAA2B,CAC1B,KACA,EACA,KAED,wBAAyB,CACxB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,QAAS,CACR,IACA,GAED,UAAW,CACV,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,WAAY,CACX,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,oBAAqB,CACpB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,qBAAsB,CACrB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,0BAA2B,CAC1B,IACA,GAED,4BAA6B,CAC5B,KACA,EACA,KAED,+BAAgC,CAC/B,KACA,EACA,KAED,6BAA8B,CAC7B,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,KAED,0BAA2B,CAC1B,KACA,EACA,KAED,wBAAyB,CACxB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,OAAQ,CACP,IACA,GAED,SAAU,CACT,KACA,EACA,KAED,YAAa,CACZ,KACA,EACA,KAED,UAAW,CACV,IACA,GAED,QAAS,CACR,IACA,GAED,UAAW,CACV,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,WAAY,CACX,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,IACA,GAED,kBAAmB,CAClB,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,mBAAoB,CACnB,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,oBAAqB,CACpB,IACA,GAED,sBAAuB,CACtB,KACA,EACA,KAED,yBAA0B,CACzB,KACA,EACA,KAED,uBAAwB,CACvB,IACA,GAED,cAAe,CACd,IACA,GAED,gBAAiB,CAChB,KACA,EACA,KAED,mBAAoB,CACnB,KACA,EACA,KAED,iBAAkB,CACjB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,aAAc,CACb,IACA,GAED,eAAgB,CACf,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,gBAAiB,CAChB,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,qBAAsB,CACrB,IACA,GAED,uBAAwB,CACvB,KACA,EACA,KAED,0BAA2B,CAC1B,KACA,EACA,KAED,wBAAyB,CACxB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,GAED,SAAU,CACT,IACA,GAED,WAAY,CACX,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,YAAa,CACZ,IACA,GAED,iBAAkB,CACjB,IACA,GAED,mBAAoB,CACnB,KACA,EACA,KAED,sBAAuB,CACtB,KACA,EACA,KAED,oBAAqB,CACpB,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,WAAY,CACX,IACA,GAED,aAAc,CACb,KACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KAED,cAAe,CACd,IACA,GAED,YAAa,CACZ,IACA,GAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,eAAgB,CACf,IACA,GAED,eAAgB,CACf,IACA,GAED,iBAAkB,CACjB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,kBAAmB,CAClB,IACA,GAED,UAAW,CACV,IACA,GAED,YAAa,CACZ,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,IACA,IAGF,SAASY,EAAoBV,GAC5B,IAAIG,EAAoBC,EAAEN,EAAKE,GAC9B,OAAOW,QAAQF,UAAUG,MAAK,WAC7B,IAAIP,EAAI,IAAIC,MAAM,uBAAyBN,EAAM,KAEjD,MADAK,EAAEE,KAAO,mBACHF,CACP,IAGD,IAAIQ,EAAMf,EAAIE,GAAMC,EAAKY,EAAI,GAC7B,OAAOF,QAAQG,IAAID,EAAIE,MAAM,GAAGjB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","file":"static/js/main.c78dc083.chunk.js","sourcesContent":["module.exports = {\n // “Secret” string that enables the regression test bypass. The bypass will only work in selected environments (such as Test). The value will be provided to the test application.\n 'regression-test-secret': '2f53e9d2-cbb5-4a13-a19c-921e39122f41',\n // Valid uuid/guid identifying the user. I recommend using id of Adam Amur.\n 'regression-test-user-id': 'aba1a3de-eadd-4937-980f-69dfdc9fad35',\n // The user name / display name. The value is not important, but it has to be provided for completeness sake.\n 'regression-test-user-name': 'Adam Amur',\n // The customer id. The value might be important for retrieving the right data (projects/datasets). Also for retrieving customer users I recommend using a real value.\tThe user email address. The value is not important, but it has to be provided for completeness sake.\n 'regression-test-user-email': 'adam.amur.dhi1@outlook.com',\n // The customer name.\n 'regression-test-customer-name': 'dhi1',\n // The customer id (guid). the value is used as tenant id.\n 'regression-test-customer-guid': '980552ba-58a1-4742-9248-cbcf3b3a4ece',\n // The flag specifying whether the user is admin or not. Allowed values are “true” or “false”.\n 'regression-test-isadmin': true\n}\n","module.exports = {\n // “Secret” string that enables the regression test bypass. The bypass will only work in selected environments (such as Test). The value will be provided to the test application.\n 'regression-test-secret': 'LocalDevelopment',\n // Valid uuid/guid identifying the user. I recommend using id of Adam Amur.\n 'regression-test-user-id': '862281a7-2e66-4c76-af8d-29c82c723b4b',\n // The user name / display name. The value is not important, but it has to be provided for completeness sake.\n 'regression-test-user-name': 'Adam Amur',\n // The customer id. The value might be important for retrieving the right data (projects/datasets). Also for retrieving customer users I recommend using a real value.\tThe user email address. The value is not important, but it has to be provided for completeness sake.\n 'regression-test-user-email': 'adam.amur.dhi1@outlook.com',\n // The customer name.\n 'regression-test-customer-name': 'dhi1',\n // The customer id (guid). the value is used as tenant id.\n 'regression-test-customer-guid': 'dhi1',\n // The flag specifying whether the user is admin or not. Allowed values are “true” or “false”.\n 'regression-test-isadmin': true\n}\n","module.exports = {\n // “Secret” string that enables the regression test bypass. The bypass will only work in selected environments (such as Test). The value will be provided to the test application.\n 'regression-test-secret': '2f53e9d2-cbb5-4a13-a19c-921e39122f41',\n // Valid uuid/guid identifying the user. I recommend using id of Adam Amur.\n 'regression-test-user-id': '7ed40b3a-3768-4c23-9fa4-8108d96cb855',\n // The user name / display name. The value is not important, but it has to be provided for completeness sake.\n 'regression-test-user-name': 'Adam Amur',\n // The customer id. The value might be important for retrieving the right data (projects/datasets). Also for retrieving customer users I recommend using a real value.\tThe user email address. The value is not important, but it has to be provided for completeness sake.\n 'regression-test-user-email': 'adam.amur.dhi1@outlook.com',\n // The customer name.\n 'regression-test-customer-name': 'dhi1',\n // The customer id (guid). the value is used as tenant id.\n 'regression-test-customer-guid': 'f870b4d5-759c-4795-9f3d-488e93d6f25a',\n // The flag specifying whether the user is admin or not. Allowed values are “true” or “false”.\n 'regression-test-isadmin': true\n}\n","module.exports = {\n // “Secret” string that enables the regression test bypass. The bypass will only work in selected environments (such as Test). The value will be provided to the test application.\n 'regression-test-secret': '2f53e9d2-cbb5-4a13-a19c-921e39122f41',\n // Valid uuid/guid identifying the user. I recommend using id of Adam Amur.\n 'regression-test-user-id': 'd360f060-b043-4ad8-9204-81470c307e57',\n // The user name / display name. The value is not important, but it has to be provided for completeness sake.\n 'regression-test-user-name': 'Adam Amur',\n // The customer id. The value might be important for retrieving the right data (projects/datasets). Also for retrieving customer users I recommend using a real value.\tThe user email address. The value is not important, but it has to be provided for completeness sake.\n 'regression-test-user-email': 'adam.amur.dhi1@outlook.com',\n // The customer name.\n 'regression-test-customer-name': 'dhi1',\n // The customer id (guid). the value is used as tenant id.\n 'regression-test-customer-guid': '07f277a5-1a00-4cb3-a017-6246ad1ce067',\n // The flag specifying whether the user is admin or not. Allowed values are “true” or “false”.\n 'regression-test-isadmin': true\n}\n","Object.defineProperty(exports, '__esModule', {\n value: true\n})\nexports.ReactComponent = void 0\n\nvar _react = _interopRequireDefault(require('react'))\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule\n ? obj\n : {\n default: obj\n }\n}\n\nfunction _extends() {\n // eslint-disable-next-line\n _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n }\n\n return _extends.apply(this, arguments)\n}\n\nconst ReactComponent = props =>\n _react.default.createElement(\n 'svg',\n // eslint-disable-next-line\n _extends(\n {\n width: 40,\n height: 40,\n fill: 'none'\n },\n props\n ),\n _react.default.createElement('path', {\n d:\n 'M24.5858 18.7071L20.2929 14.4142L21.7071 13L28.4142 19.7071L21.7071 26.4142L20.2929 25L24.5858 20.7071H20V18.7071H24.5858Z',\n fill: '#557A8F'\n }),\n _react.default.createElement('path', {\n d: 'M12 18.7071H14V20.7071H12V18.7071Z',\n fill: '#557A8F'\n }),\n _react.default.createElement('path', {\n d: 'M18 18.7071H16V20.7071H18V18.7071Z',\n fill: '#557A8F'\n })\n )\n\nexports.ReactComponent = ReactComponent\n","var map = {\n\t\"./headers.integration-dev\": 1045,\n\t\"./headers.integration-dev.js\": 1045,\n\t\"./headers.integration-localhost\": 1046,\n\t\"./headers.integration-localhost.js\": 1046,\n\t\"./headers.integration-preprod\": 1047,\n\t\"./headers.integration-preprod.js\": 1047,\n\t\"./headers.integration-test\": 1048,\n\t\"./headers.integration-test.js\": 1048\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1691;","var map = {\n\t\"./\": [\n\t\t453,\n\t\t9\n\t],\n\t\"./AddData\": [\n\t\t454,\n\t\t7\n\t],\n\t\"./AddData.d\": [\n\t\t1182,\n\t\t7,\n\t\t0\n\t],\n\t\"./AddData.d.ts\": [\n\t\t1182,\n\t\t7,\n\t\t0\n\t],\n\t\"./AddData.js\": [\n\t\t454,\n\t\t7\n\t],\n\t\"./AddLayer\": [\n\t\t455,\n\t\t7\n\t],\n\t\"./AddLayer.d\": [\n\t\t1183,\n\t\t7,\n\t\t1\n\t],\n\t\"./AddLayer.d.ts\": [\n\t\t1183,\n\t\t7,\n\t\t1\n\t],\n\t\"./AddLayer.js\": [\n\t\t455,\n\t\t7\n\t],\n\t\"./AddList\": [\n\t\t456,\n\t\t7\n\t],\n\t\"./AddList.d\": [\n\t\t1184,\n\t\t7,\n\t\t2\n\t],\n\t\"./AddList.d.ts\": [\n\t\t1184,\n\t\t7,\n\t\t2\n\t],\n\t\"./AddList.js\": [\n\t\t456,\n\t\t7\n\t],\n\t\"./AddResultItems\": [\n\t\t457,\n\t\t7\n\t],\n\t\"./AddResultItems.d\": [\n\t\t1185,\n\t\t7,\n\t\t3\n\t],\n\t\"./AddResultItems.d.ts\": [\n\t\t1185,\n\t\t7,\n\t\t3\n\t],\n\t\"./AddResultItems.js\": [\n\t\t457,\n\t\t7\n\t],\n\t\"./AddToMesh\": [\n\t\t458,\n\t\t7\n\t],\n\t\"./AddToMesh.d\": [\n\t\t1186,\n\t\t7,\n\t\t4\n\t],\n\t\"./AddToMesh.d.ts\": [\n\t\t1186,\n\t\t7,\n\t\t4\n\t],\n\t\"./AddToMesh.js\": [\n\t\t458,\n\t\t7\n\t],\n\t\"./Adjust\": [\n\t\t459,\n\t\t7\n\t],\n\t\"./Adjust.d\": [\n\t\t1187,\n\t\t7,\n\t\t5\n\t],\n\t\"./Adjust.d.ts\": [\n\t\t1187,\n\t\t7,\n\t\t5\n\t],\n\t\"./Adjust.js\": [\n\t\t459,\n\t\t7\n\t],\n\t\"./Admin\": [\n\t\t460,\n\t\t7\n\t],\n\t\"./Admin.d\": [\n\t\t1188,\n\t\t7,\n\t\t6\n\t],\n\t\"./Admin.d.ts\": [\n\t\t1188,\n\t\t7,\n\t\t6\n\t],\n\t\"./Admin.js\": [\n\t\t460,\n\t\t7\n\t],\n\t\"./AdminCenter\": [\n\t\t350,\n\t\t7\n\t],\n\t\"./AdminCenter.d\": [\n\t\t1189,\n\t\t7,\n\t\t7\n\t],\n\t\"./AdminCenter.d.ts\": [\n\t\t1189,\n\t\t7,\n\t\t7\n\t],\n\t\"./AdminCenter.js\": [\n\t\t350,\n\t\t7\n\t],\n\t\"./Alarm\": [\n\t\t461,\n\t\t7\n\t],\n\t\"./Alarm.d\": [\n\t\t1190,\n\t\t7,\n\t\t8\n\t],\n\t\"./Alarm.d.ts\": [\n\t\t1190,\n\t\t7,\n\t\t8\n\t],\n\t\"./Alarm.js\": [\n\t\t461,\n\t\t7\n\t],\n\t\"./Alert\": [\n\t\t240,\n\t\t7\n\t],\n\t\"./Alert.d\": [\n\t\t1191,\n\t\t7,\n\t\t9\n\t],\n\t\"./Alert.d.ts\": [\n\t\t1191,\n\t\t7,\n\t\t9\n\t],\n\t\"./Alert.js\": [\n\t\t240,\n\t\t7\n\t],\n\t\"./AllProjects\": [\n\t\t462,\n\t\t7\n\t],\n\t\"./AllProjects.d\": [\n\t\t1192,\n\t\t7,\n\t\t10\n\t],\n\t\"./AllProjects.d.ts\": [\n\t\t1192,\n\t\t7,\n\t\t10\n\t],\n\t\"./AllProjects.js\": [\n\t\t462,\n\t\t7\n\t],\n\t\"./Analysis\": [\n\t\t463,\n\t\t7\n\t],\n\t\"./Analysis.d\": [\n\t\t1193,\n\t\t7,\n\t\t11\n\t],\n\t\"./Analysis.d.ts\": [\n\t\t1193,\n\t\t7,\n\t\t11\n\t],\n\t\"./Analysis.js\": [\n\t\t463,\n\t\t7\n\t],\n\t\"./Analyze\": [\n\t\t464,\n\t\t7\n\t],\n\t\"./Analyze.d\": [\n\t\t1194,\n\t\t7,\n\t\t12\n\t],\n\t\"./Analyze.d.ts\": [\n\t\t1194,\n\t\t7,\n\t\t12\n\t],\n\t\"./Analyze.js\": [\n\t\t464,\n\t\t7\n\t],\n\t\"./Apps\": [\n\t\t288,\n\t\t7\n\t],\n\t\"./Apps.d\": [\n\t\t1195,\n\t\t7,\n\t\t13\n\t],\n\t\"./Apps.d.ts\": [\n\t\t1195,\n\t\t7,\n\t\t13\n\t],\n\t\"./Apps.js\": [\n\t\t288,\n\t\t7\n\t],\n\t\"./Archive\": [\n\t\t465,\n\t\t7\n\t],\n\t\"./Archive.d\": [\n\t\t1196,\n\t\t7,\n\t\t14\n\t],\n\t\"./Archive.d.ts\": [\n\t\t1196,\n\t\t7,\n\t\t14\n\t],\n\t\"./Archive.js\": [\n\t\t465,\n\t\t7\n\t],\n\t\"./Area\": [\n\t\t466,\n\t\t7\n\t],\n\t\"./Area.d\": [\n\t\t1197,\n\t\t7,\n\t\t15\n\t],\n\t\"./Area.d.ts\": [\n\t\t1197,\n\t\t7,\n\t\t15\n\t],\n\t\"./Area.js\": [\n\t\t466,\n\t\t7\n\t],\n\t\"./AreaChart\": [\n\t\t467,\n\t\t7\n\t],\n\t\"./AreaChart.d\": [\n\t\t1198,\n\t\t7,\n\t\t16\n\t],\n\t\"./AreaChart.d.ts\": [\n\t\t1198,\n\t\t7,\n\t\t16\n\t],\n\t\"./AreaChart.js\": [\n\t\t467,\n\t\t7\n\t],\n\t\"./AreaInfo\": [\n\t\t468,\n\t\t7\n\t],\n\t\"./AreaInfo.d\": [\n\t\t1199,\n\t\t7,\n\t\t17\n\t],\n\t\"./AreaInfo.d.ts\": [\n\t\t1199,\n\t\t7,\n\t\t17\n\t],\n\t\"./AreaInfo.js\": [\n\t\t468,\n\t\t7\n\t],\n\t\"./ArrowDown\": [\n\t\t469,\n\t\t7\n\t],\n\t\"./ArrowDown.d\": [\n\t\t1200,\n\t\t7,\n\t\t18\n\t],\n\t\"./ArrowDown.d.ts\": [\n\t\t1200,\n\t\t7,\n\t\t18\n\t],\n\t\"./ArrowDown.js\": [\n\t\t469,\n\t\t7\n\t],\n\t\"./ArrowLeft\": [\n\t\t470,\n\t\t7\n\t],\n\t\"./ArrowLeft.d\": [\n\t\t1201,\n\t\t7,\n\t\t19\n\t],\n\t\"./ArrowLeft.d.ts\": [\n\t\t1201,\n\t\t7,\n\t\t19\n\t],\n\t\"./ArrowLeft.js\": [\n\t\t470,\n\t\t7\n\t],\n\t\"./ArrowRight\": [\n\t\t348,\n\t\t7\n\t],\n\t\"./ArrowRight.d\": [\n\t\t1202,\n\t\t7,\n\t\t20\n\t],\n\t\"./ArrowRight.d.ts\": [\n\t\t1202,\n\t\t7,\n\t\t20\n\t],\n\t\"./ArrowRight.js\": [\n\t\t348,\n\t\t7\n\t],\n\t\"./ArrowUp\": [\n\t\t471,\n\t\t7\n\t],\n\t\"./ArrowUp.d\": [\n\t\t1203,\n\t\t7,\n\t\t21\n\t],\n\t\"./ArrowUp.d.ts\": [\n\t\t1203,\n\t\t7,\n\t\t21\n\t],\n\t\"./ArrowUp.js\": [\n\t\t471,\n\t\t7\n\t],\n\t\"./Attach\": [\n\t\t472,\n\t\t7\n\t],\n\t\"./Attach.d\": [\n\t\t1204,\n\t\t7,\n\t\t22\n\t],\n\t\"./Attach.d.ts\": [\n\t\t1204,\n\t\t7,\n\t\t22\n\t],\n\t\"./Attach.js\": [\n\t\t472,\n\t\t7\n\t],\n\t\"./BackgroundMap\": [\n\t\t473,\n\t\t7\n\t],\n\t\"./BackgroundMap.d\": [\n\t\t1205,\n\t\t7,\n\t\t23\n\t],\n\t\"./BackgroundMap.d.ts\": [\n\t\t1205,\n\t\t7,\n\t\t23\n\t],\n\t\"./BackgroundMap.js\": [\n\t\t473,\n\t\t7\n\t],\n\t\"./BatchSimulation\": [\n\t\t474,\n\t\t7\n\t],\n\t\"./BatchSimulation.d\": [\n\t\t1206,\n\t\t7,\n\t\t24\n\t],\n\t\"./BatchSimulation.d.ts\": [\n\t\t1206,\n\t\t7,\n\t\t24\n\t],\n\t\"./BatchSimulation.js\": [\n\t\t474,\n\t\t7\n\t],\n\t\"./BathymetryBuilder\": [\n\t\t475,\n\t\t7\n\t],\n\t\"./BathymetryBuilder.d\": [\n\t\t1207,\n\t\t7,\n\t\t25\n\t],\n\t\"./BathymetryBuilder.d.ts\": [\n\t\t1207,\n\t\t7,\n\t\t25\n\t],\n\t\"./BathymetryBuilder.js\": [\n\t\t475,\n\t\t7\n\t],\n\t\"./Block\": [\n\t\t476,\n\t\t7\n\t],\n\t\"./Block.d\": [\n\t\t1208,\n\t\t7,\n\t\t26\n\t],\n\t\"./Block.d.ts\": [\n\t\t1208,\n\t\t7,\n\t\t26\n\t],\n\t\"./Block.js\": [\n\t\t476,\n\t\t7\n\t],\n\t\"./Bookmark\": [\n\t\t477,\n\t\t7\n\t],\n\t\"./Bookmark.d\": [\n\t\t1209,\n\t\t7,\n\t\t27\n\t],\n\t\"./Bookmark.d.ts\": [\n\t\t1209,\n\t\t7,\n\t\t27\n\t],\n\t\"./Bookmark.js\": [\n\t\t477,\n\t\t7\n\t],\n\t\"./BoundaryLine\": [\n\t\t478,\n\t\t7\n\t],\n\t\"./BoundaryLine.d\": [\n\t\t1210,\n\t\t7,\n\t\t28\n\t],\n\t\"./BoundaryLine.d.ts\": [\n\t\t1210,\n\t\t7,\n\t\t28\n\t],\n\t\"./BoundaryLine.js\": [\n\t\t478,\n\t\t7\n\t],\n\t\"./BoundaryLineCheckmark\": [\n\t\t479,\n\t\t7\n\t],\n\t\"./BoundaryLineCheckmark.d\": [\n\t\t1211,\n\t\t7,\n\t\t29\n\t],\n\t\"./BoundaryLineCheckmark.d.ts\": [\n\t\t1211,\n\t\t7,\n\t\t29\n\t],\n\t\"./BoundaryLineCheckmark.js\": [\n\t\t479,\n\t\t7\n\t],\n\t\"./Business\": [\n\t\t480,\n\t\t7\n\t],\n\t\"./Business.d\": [\n\t\t1212,\n\t\t7,\n\t\t30\n\t],\n\t\"./Business.d.ts\": [\n\t\t1212,\n\t\t7,\n\t\t30\n\t],\n\t\"./Business.js\": [\n\t\t480,\n\t\t7\n\t],\n\t\"./Calendar\": [\n\t\t362,\n\t\t7\n\t],\n\t\"./Calendar.d\": [\n\t\t1213,\n\t\t7,\n\t\t31\n\t],\n\t\"./Calendar.d.ts\": [\n\t\t1213,\n\t\t7,\n\t\t31\n\t],\n\t\"./Calendar.js\": [\n\t\t362,\n\t\t7\n\t],\n\t\"./CalendarSetting\": [\n\t\t481,\n\t\t7\n\t],\n\t\"./CalendarSetting.d\": [\n\t\t1214,\n\t\t7,\n\t\t32\n\t],\n\t\"./CalendarSetting.d.ts\": [\n\t\t1214,\n\t\t7,\n\t\t32\n\t],\n\t\"./CalendarSetting.js\": [\n\t\t481,\n\t\t7\n\t],\n\t\"./Cart\": [\n\t\t482,\n\t\t7\n\t],\n\t\"./Cart.d\": [\n\t\t1215,\n\t\t7,\n\t\t33\n\t],\n\t\"./Cart.d.ts\": [\n\t\t1215,\n\t\t7,\n\t\t33\n\t],\n\t\"./Cart.js\": [\n\t\t482,\n\t\t7\n\t],\n\t\"./Center\": [\n\t\t483,\n\t\t7\n\t],\n\t\"./Center.d\": [\n\t\t1216,\n\t\t7,\n\t\t34\n\t],\n\t\"./Center.d.ts\": [\n\t\t1216,\n\t\t7,\n\t\t34\n\t],\n\t\"./Center.js\": [\n\t\t483,\n\t\t7\n\t],\n\t\"./CheckboxInPlaceholder\": [\n\t\t484,\n\t\t7\n\t],\n\t\"./CheckboxInPlaceholder.d\": [\n\t\t1217,\n\t\t7,\n\t\t35\n\t],\n\t\"./CheckboxInPlaceholder.d.ts\": [\n\t\t1217,\n\t\t7,\n\t\t35\n\t],\n\t\"./CheckboxInPlaceholder.js\": [\n\t\t484,\n\t\t7\n\t],\n\t\"./Checkmark\": [\n\t\t343,\n\t\t7\n\t],\n\t\"./Checkmark.d\": [\n\t\t1218,\n\t\t7,\n\t\t36\n\t],\n\t\"./Checkmark.d.ts\": [\n\t\t1218,\n\t\t7,\n\t\t36\n\t],\n\t\"./Checkmark.js\": [\n\t\t343,\n\t\t7\n\t],\n\t\"./Circle\": [\n\t\t485,\n\t\t7\n\t],\n\t\"./Circle.d\": [\n\t\t1219,\n\t\t7,\n\t\t37\n\t],\n\t\"./Circle.d.ts\": [\n\t\t1219,\n\t\t7,\n\t\t37\n\t],\n\t\"./Circle.js\": [\n\t\t485,\n\t\t7\n\t],\n\t\"./ClearFilters\": [\n\t\t486,\n\t\t7\n\t],\n\t\"./ClearFilters.d\": [\n\t\t1220,\n\t\t7,\n\t\t38\n\t],\n\t\"./ClearFilters.d.ts\": [\n\t\t1220,\n\t\t7,\n\t\t38\n\t],\n\t\"./ClearFilters.js\": [\n\t\t486,\n\t\t7\n\t],\n\t\"./ClearFlag\": [\n\t\t487,\n\t\t7\n\t],\n\t\"./ClearFlag.d\": [\n\t\t1221,\n\t\t7,\n\t\t39\n\t],\n\t\"./ClearFlag.d.ts\": [\n\t\t1221,\n\t\t7,\n\t\t39\n\t],\n\t\"./ClearFlag.js\": [\n\t\t487,\n\t\t7\n\t],\n\t\"./ClearSelection\": [\n\t\t488,\n\t\t7\n\t],\n\t\"./ClearSelection.d\": [\n\t\t1222,\n\t\t7,\n\t\t40\n\t],\n\t\"./ClearSelection.d.ts\": [\n\t\t1222,\n\t\t7,\n\t\t40\n\t],\n\t\"./ClearSelection.js\": [\n\t\t488,\n\t\t7\n\t],\n\t\"./Clip\": [\n\t\t489,\n\t\t7\n\t],\n\t\"./Clip.d\": [\n\t\t1223,\n\t\t7,\n\t\t41\n\t],\n\t\"./Clip.d.ts\": [\n\t\t1223,\n\t\t7,\n\t\t41\n\t],\n\t\"./Clip.js\": [\n\t\t489,\n\t\t7\n\t],\n\t\"./ClipSelection\": [\n\t\t490,\n\t\t7\n\t],\n\t\"./ClipSelection.d\": [\n\t\t1224,\n\t\t7,\n\t\t42\n\t],\n\t\"./ClipSelection.d.ts\": [\n\t\t1224,\n\t\t7,\n\t\t42\n\t],\n\t\"./ClipSelection.js\": [\n\t\t490,\n\t\t7\n\t],\n\t\"./Clone\": [\n\t\t491,\n\t\t7\n\t],\n\t\"./Clone.d\": [\n\t\t1225,\n\t\t7,\n\t\t43\n\t],\n\t\"./Clone.d.ts\": [\n\t\t1225,\n\t\t7,\n\t\t43\n\t],\n\t\"./Clone.js\": [\n\t\t491,\n\t\t7\n\t],\n\t\"./Close\": [\n\t\t357,\n\t\t7\n\t],\n\t\"./Close.d\": [\n\t\t1226,\n\t\t7,\n\t\t44\n\t],\n\t\"./Close.d.ts\": [\n\t\t1226,\n\t\t7,\n\t\t44\n\t],\n\t\"./Close.js\": [\n\t\t357,\n\t\t7\n\t],\n\t\"./CloseS\": [\n\t\t492,\n\t\t7\n\t],\n\t\"./CloseS.d\": [\n\t\t1227,\n\t\t7,\n\t\t45\n\t],\n\t\"./CloseS.d.ts\": [\n\t\t1227,\n\t\t7,\n\t\t45\n\t],\n\t\"./CloseS.js\": [\n\t\t492,\n\t\t7\n\t],\n\t\"./CloseXs\": [\n\t\t493,\n\t\t7\n\t],\n\t\"./CloseXs.d\": [\n\t\t1228,\n\t\t7,\n\t\t46\n\t],\n\t\"./CloseXs.d.ts\": [\n\t\t1228,\n\t\t7,\n\t\t46\n\t],\n\t\"./CloseXs.js\": [\n\t\t493,\n\t\t7\n\t],\n\t\"./CloudExport\": [\n\t\t494,\n\t\t7\n\t],\n\t\"./CloudExport.d\": [\n\t\t1229,\n\t\t7,\n\t\t47\n\t],\n\t\"./CloudExport.d.ts\": [\n\t\t1229,\n\t\t7,\n\t\t47\n\t],\n\t\"./CloudExport.js\": [\n\t\t494,\n\t\t7\n\t],\n\t\"./ColorCircle\": [\n\t\t495,\n\t\t7\n\t],\n\t\"./ColorCircle.d\": [\n\t\t1230,\n\t\t7,\n\t\t48\n\t],\n\t\"./ColorCircle.d.ts\": [\n\t\t1230,\n\t\t7,\n\t\t48\n\t],\n\t\"./ColorCircle.js\": [\n\t\t495,\n\t\t7\n\t],\n\t\"./Comment\": [\n\t\t496,\n\t\t7\n\t],\n\t\"./Comment.d\": [\n\t\t1231,\n\t\t7,\n\t\t49\n\t],\n\t\"./Comment.d.ts\": [\n\t\t1231,\n\t\t7,\n\t\t49\n\t],\n\t\"./Comment.js\": [\n\t\t496,\n\t\t7\n\t],\n\t\"./ConfidentialProject\": [\n\t\t497,\n\t\t7\n\t],\n\t\"./ConfidentialProject.d\": [\n\t\t1232,\n\t\t7,\n\t\t50\n\t],\n\t\"./ConfidentialProject.d.ts\": [\n\t\t1232,\n\t\t7,\n\t\t50\n\t],\n\t\"./ConfidentialProject.js\": [\n\t\t497,\n\t\t7\n\t],\n\t\"./ConnectFlag\": [\n\t\t498,\n\t\t7\n\t],\n\t\"./ConnectFlag.d\": [\n\t\t1233,\n\t\t7,\n\t\t51\n\t],\n\t\"./ConnectFlag.d.ts\": [\n\t\t1233,\n\t\t7,\n\t\t51\n\t],\n\t\"./ConnectFlag.js\": [\n\t\t498,\n\t\t7\n\t],\n\t\"./ConnectedData\": [\n\t\t499,\n\t\t7\n\t],\n\t\"./ConnectedData.d\": [\n\t\t1234,\n\t\t7,\n\t\t52\n\t],\n\t\"./ConnectedData.d.ts\": [\n\t\t1234,\n\t\t7,\n\t\t52\n\t],\n\t\"./ConnectedData.js\": [\n\t\t499,\n\t\t7\n\t],\n\t\"./Connection\": [\n\t\t500,\n\t\t7\n\t],\n\t\"./Connection.d\": [\n\t\t1235,\n\t\t7,\n\t\t53\n\t],\n\t\"./Connection.d.ts\": [\n\t\t1235,\n\t\t7,\n\t\t53\n\t],\n\t\"./Connection.js\": [\n\t\t500,\n\t\t7\n\t],\n\t\"./ConnectionTool\": [\n\t\t501,\n\t\t7\n\t],\n\t\"./ConnectionTool.d\": [\n\t\t1236,\n\t\t7,\n\t\t54\n\t],\n\t\"./ConnectionTool.d.ts\": [\n\t\t1236,\n\t\t7,\n\t\t54\n\t],\n\t\"./ConnectionTool.js\": [\n\t\t501,\n\t\t7\n\t],\n\t\"./Connections\": [\n\t\t502,\n\t\t7\n\t],\n\t\"./Connections.d\": [\n\t\t1237,\n\t\t7,\n\t\t55\n\t],\n\t\"./Connections.d.ts\": [\n\t\t1237,\n\t\t7,\n\t\t55\n\t],\n\t\"./Connections.js\": [\n\t\t502,\n\t\t7\n\t],\n\t\"./ConnectionsAlt\": [\n\t\t503,\n\t\t7\n\t],\n\t\"./ConnectionsAlt.d\": [\n\t\t1238,\n\t\t7,\n\t\t56\n\t],\n\t\"./ConnectionsAlt.d.ts\": [\n\t\t1238,\n\t\t7,\n\t\t56\n\t],\n\t\"./ConnectionsAlt.js\": [\n\t\t503,\n\t\t7\n\t],\n\t\"./ConvertData\": [\n\t\t289,\n\t\t7\n\t],\n\t\"./ConvertData.d\": [\n\t\t1239,\n\t\t7,\n\t\t57\n\t],\n\t\"./ConvertData.d.ts\": [\n\t\t1239,\n\t\t7,\n\t\t57\n\t],\n\t\"./ConvertData.js\": [\n\t\t289,\n\t\t7\n\t],\n\t\"./CopyLink\": [\n\t\t504,\n\t\t7\n\t],\n\t\"./CopyLink.d\": [\n\t\t1240,\n\t\t7,\n\t\t58\n\t],\n\t\"./CopyLink.d.ts\": [\n\t\t1240,\n\t\t7,\n\t\t58\n\t],\n\t\"./CopyLink.js\": [\n\t\t504,\n\t\t7\n\t],\n\t\"./CornerHandle\": [\n\t\t505,\n\t\t7\n\t],\n\t\"./CornerHandle.d\": [\n\t\t1241,\n\t\t7,\n\t\t59\n\t],\n\t\"./CornerHandle.d.ts\": [\n\t\t1241,\n\t\t7,\n\t\t59\n\t],\n\t\"./CornerHandle.js\": [\n\t\t505,\n\t\t7\n\t],\n\t\"./CreateNewMesh\": [\n\t\t506,\n\t\t7\n\t],\n\t\"./CreateNewMesh.d\": [\n\t\t1242,\n\t\t7,\n\t\t60\n\t],\n\t\"./CreateNewMesh.d.ts\": [\n\t\t1242,\n\t\t7,\n\t\t60\n\t],\n\t\"./CreateNewMesh.js\": [\n\t\t506,\n\t\t7\n\t],\n\t\"./Crosshair\": [\n\t\t507,\n\t\t7\n\t],\n\t\"./Crosshair.d\": [\n\t\t1243,\n\t\t7,\n\t\t61\n\t],\n\t\"./Crosshair.d.ts\": [\n\t\t1243,\n\t\t7,\n\t\t61\n\t],\n\t\"./Crosshair.js\": [\n\t\t507,\n\t\t7\n\t],\n\t\"./Dashboard\": [\n\t\t508,\n\t\t7\n\t],\n\t\"./Dashboard.d\": [\n\t\t1244,\n\t\t7,\n\t\t62\n\t],\n\t\"./Dashboard.d.ts\": [\n\t\t1244,\n\t\t7,\n\t\t62\n\t],\n\t\"./Dashboard.js\": [\n\t\t508,\n\t\t7\n\t],\n\t\"./DataAdmin\": [\n\t\t287,\n\t\t7\n\t],\n\t\"./DataAdmin.d\": [\n\t\t1245,\n\t\t7,\n\t\t63\n\t],\n\t\"./DataAdmin.d.ts\": [\n\t\t1245,\n\t\t7,\n\t\t63\n\t],\n\t\"./DataAdmin.js\": [\n\t\t287,\n\t\t7\n\t],\n\t\"./DataConfiguration\": [\n\t\t509,\n\t\t7\n\t],\n\t\"./DataConfiguration.d\": [\n\t\t1246,\n\t\t7,\n\t\t64\n\t],\n\t\"./DataConfiguration.d.ts\": [\n\t\t1246,\n\t\t7,\n\t\t64\n\t],\n\t\"./DataConfiguration.js\": [\n\t\t509,\n\t\t7\n\t],\n\t\"./DataLink\": [\n\t\t510,\n\t\t7\n\t],\n\t\"./DataLink.d\": [\n\t\t1247,\n\t\t7,\n\t\t65\n\t],\n\t\"./DataLink.d.ts\": [\n\t\t1247,\n\t\t7,\n\t\t65\n\t],\n\t\"./DataLink.js\": [\n\t\t510,\n\t\t7\n\t],\n\t\"./DataSet\": [\n\t\t171,\n\t\t7\n\t],\n\t\"./DataSet.d\": [\n\t\t1248,\n\t\t7,\n\t\t66\n\t],\n\t\"./DataSet.d.ts\": [\n\t\t1248,\n\t\t7,\n\t\t66\n\t],\n\t\"./DataSet.js\": [\n\t\t171,\n\t\t7\n\t],\n\t\"./DatabaseTransfer\": [\n\t\t511,\n\t\t7\n\t],\n\t\"./DatabaseTransfer.d\": [\n\t\t1249,\n\t\t7,\n\t\t67\n\t],\n\t\"./DatabaseTransfer.d.ts\": [\n\t\t1249,\n\t\t7,\n\t\t67\n\t],\n\t\"./DatabaseTransfer.js\": [\n\t\t511,\n\t\t7\n\t],\n\t\"./DefaultValue\": [\n\t\t512,\n\t\t7\n\t],\n\t\"./DefaultValue.d\": [\n\t\t1250,\n\t\t7,\n\t\t68\n\t],\n\t\"./DefaultValue.d.ts\": [\n\t\t1250,\n\t\t7,\n\t\t68\n\t],\n\t\"./DefaultValue.js\": [\n\t\t512,\n\t\t7\n\t],\n\t\"./DefaultView\": [\n\t\t513,\n\t\t7\n\t],\n\t\"./DefaultView.d\": [\n\t\t1251,\n\t\t7,\n\t\t69\n\t],\n\t\"./DefaultView.d.ts\": [\n\t\t1251,\n\t\t7,\n\t\t69\n\t],\n\t\"./DefaultView.js\": [\n\t\t513,\n\t\t7\n\t],\n\t\"./Delete\": [\n\t\t115,\n\t\t7\n\t],\n\t\"./Delete.d\": [\n\t\t1252,\n\t\t7,\n\t\t70\n\t],\n\t\"./Delete.d.ts\": [\n\t\t1252,\n\t\t7,\n\t\t70\n\t],\n\t\"./Delete.js\": [\n\t\t115,\n\t\t7\n\t],\n\t\"./DeleteLastPoint\": [\n\t\t514,\n\t\t7\n\t],\n\t\"./DeleteLastPoint.d\": [\n\t\t1253,\n\t\t7,\n\t\t71\n\t],\n\t\"./DeleteLastPoint.d.ts\": [\n\t\t1253,\n\t\t7,\n\t\t71\n\t],\n\t\"./DeleteLastPoint.js\": [\n\t\t514,\n\t\t7\n\t],\n\t\"./DhiLogoDefault\": [\n\t\t515,\n\t\t7\n\t],\n\t\"./DhiLogoDefault.d\": [\n\t\t1254,\n\t\t7,\n\t\t72\n\t],\n\t\"./DhiLogoDefault.d.ts\": [\n\t\t1254,\n\t\t7,\n\t\t72\n\t],\n\t\"./DhiLogoDefault.js\": [\n\t\t515,\n\t\t7\n\t],\n\t\"./DhiLogoFilled\": [\n\t\t352,\n\t\t7\n\t],\n\t\"./DhiLogoFilled.d\": [\n\t\t1255,\n\t\t7,\n\t\t73\n\t],\n\t\"./DhiLogoFilled.d.ts\": [\n\t\t1255,\n\t\t7,\n\t\t73\n\t],\n\t\"./DhiLogoFilled.js\": [\n\t\t352,\n\t\t7\n\t],\n\t\"./Dialogue\": [\n\t\t516,\n\t\t7\n\t],\n\t\"./Dialogue.d\": [\n\t\t1256,\n\t\t7,\n\t\t74\n\t],\n\t\"./Dialogue.d.ts\": [\n\t\t1256,\n\t\t7,\n\t\t74\n\t],\n\t\"./Dialogue.js\": [\n\t\t516,\n\t\t7\n\t],\n\t\"./Distance\": [\n\t\t517,\n\t\t7\n\t],\n\t\"./Distance.d\": [\n\t\t1257,\n\t\t7,\n\t\t75\n\t],\n\t\"./Distance.d.ts\": [\n\t\t1257,\n\t\t7,\n\t\t75\n\t],\n\t\"./Distance.js\": [\n\t\t517,\n\t\t7\n\t],\n\t\"./Document\": [\n\t\t518,\n\t\t7\n\t],\n\t\"./Document.d\": [\n\t\t1258,\n\t\t7,\n\t\t76\n\t],\n\t\"./Document.d.ts\": [\n\t\t1258,\n\t\t7,\n\t\t76\n\t],\n\t\"./Document.js\": [\n\t\t518,\n\t\t7\n\t],\n\t\"./Documentation\": [\n\t\t349,\n\t\t7\n\t],\n\t\"./Documentation.d\": [\n\t\t1259,\n\t\t7,\n\t\t77\n\t],\n\t\"./Documentation.d.ts\": [\n\t\t1259,\n\t\t7,\n\t\t77\n\t],\n\t\"./Documentation.js\": [\n\t\t349,\n\t\t7\n\t],\n\t\"./Dollar\": [\n\t\t519,\n\t\t7\n\t],\n\t\"./Dollar.d\": [\n\t\t1260,\n\t\t7,\n\t\t78\n\t],\n\t\"./Dollar.d.ts\": [\n\t\t1260,\n\t\t7,\n\t\t78\n\t],\n\t\"./Dollar.js\": [\n\t\t519,\n\t\t7\n\t],\n\t\"./Down\": [\n\t\t520,\n\t\t7\n\t],\n\t\"./Down.d\": [\n\t\t1261,\n\t\t7,\n\t\t79\n\t],\n\t\"./Down.d.ts\": [\n\t\t1261,\n\t\t7,\n\t\t79\n\t],\n\t\"./Down.js\": [\n\t\t520,\n\t\t7\n\t],\n\t\"./DownS\": [\n\t\t521,\n\t\t7\n\t],\n\t\"./DownS.d\": [\n\t\t1262,\n\t\t7,\n\t\t80\n\t],\n\t\"./DownS.d.ts\": [\n\t\t1262,\n\t\t7,\n\t\t80\n\t],\n\t\"./DownS.js\": [\n\t\t521,\n\t\t7\n\t],\n\t\"./DownTriangle\": [\n\t\t284,\n\t\t7\n\t],\n\t\"./DownTriangle.d\": [\n\t\t1263,\n\t\t7,\n\t\t81\n\t],\n\t\"./DownTriangle.d.ts\": [\n\t\t1263,\n\t\t7,\n\t\t81\n\t],\n\t\"./DownTriangle.js\": [\n\t\t284,\n\t\t7\n\t],\n\t\"./Download\": [\n\t\t214,\n\t\t7\n\t],\n\t\"./Download.d\": [\n\t\t1264,\n\t\t7,\n\t\t82\n\t],\n\t\"./Download.d.ts\": [\n\t\t1264,\n\t\t7,\n\t\t82\n\t],\n\t\"./Download.js\": [\n\t\t214,\n\t\t7\n\t],\n\t\"./Drag\": [\n\t\t522,\n\t\t7\n\t],\n\t\"./Drag.d\": [\n\t\t1265,\n\t\t7,\n\t\t83\n\t],\n\t\"./Drag.d.ts\": [\n\t\t1265,\n\t\t7,\n\t\t83\n\t],\n\t\"./Drag.js\": [\n\t\t522,\n\t\t7\n\t],\n\t\"./DragHandle\": [\n\t\t523,\n\t\t7\n\t],\n\t\"./DragHandle.d\": [\n\t\t1266,\n\t\t7,\n\t\t84\n\t],\n\t\"./DragHandle.d.ts\": [\n\t\t1266,\n\t\t7,\n\t\t84\n\t],\n\t\"./DragHandle.js\": [\n\t\t523,\n\t\t7\n\t],\n\t\"./Draw\": [\n\t\t524,\n\t\t7\n\t],\n\t\"./Draw.d\": [\n\t\t1267,\n\t\t7,\n\t\t85\n\t],\n\t\"./Draw.d.ts\": [\n\t\t1267,\n\t\t7,\n\t\t85\n\t],\n\t\"./Draw.js\": [\n\t\t524,\n\t\t7\n\t],\n\t\"./DrawDikes\": [\n\t\t525,\n\t\t7\n\t],\n\t\"./DrawDikes.d\": [\n\t\t1268,\n\t\t7,\n\t\t86\n\t],\n\t\"./DrawDikes.d.ts\": [\n\t\t1268,\n\t\t7,\n\t\t86\n\t],\n\t\"./DrawDikes.js\": [\n\t\t525,\n\t\t7\n\t],\n\t\"./DrawDitches\": [\n\t\t526,\n\t\t7\n\t],\n\t\"./DrawDitches.d\": [\n\t\t1269,\n\t\t7,\n\t\t87\n\t],\n\t\"./DrawDitches.d.ts\": [\n\t\t1269,\n\t\t7,\n\t\t87\n\t],\n\t\"./DrawDitches.js\": [\n\t\t526,\n\t\t7\n\t],\n\t\"./DrawPolygon\": [\n\t\t527,\n\t\t7\n\t],\n\t\"./DrawPolygon.d\": [\n\t\t1270,\n\t\t7,\n\t\t88\n\t],\n\t\"./DrawPolygon.d.ts\": [\n\t\t1270,\n\t\t7,\n\t\t88\n\t],\n\t\"./DrawPolygon.js\": [\n\t\t527,\n\t\t7\n\t],\n\t\"./Duplicate\": [\n\t\t290,\n\t\t7\n\t],\n\t\"./Duplicate.d\": [\n\t\t1271,\n\t\t7,\n\t\t89\n\t],\n\t\"./Duplicate.d.ts\": [\n\t\t1271,\n\t\t7,\n\t\t89\n\t],\n\t\"./Duplicate.js\": [\n\t\t290,\n\t\t7\n\t],\n\t\"./Edit\": [\n\t\t128,\n\t\t7\n\t],\n\t\"./Edit.d\": [\n\t\t1272,\n\t\t7,\n\t\t90\n\t],\n\t\"./Edit.d.ts\": [\n\t\t1272,\n\t\t7,\n\t\t90\n\t],\n\t\"./Edit.js\": [\n\t\t128,\n\t\t7\n\t],\n\t\"./EditGrid\": [\n\t\t528,\n\t\t7\n\t],\n\t\"./EditGrid.d\": [\n\t\t1273,\n\t\t7,\n\t\t91\n\t],\n\t\"./EditGrid.d.ts\": [\n\t\t1273,\n\t\t7,\n\t\t91\n\t],\n\t\"./EditGrid.js\": [\n\t\t528,\n\t\t7\n\t],\n\t\"./EditMeshSettings\": [\n\t\t529,\n\t\t7\n\t],\n\t\"./EditMeshSettings.d\": [\n\t\t1274,\n\t\t7,\n\t\t92\n\t],\n\t\"./EditMeshSettings.d.ts\": [\n\t\t1274,\n\t\t7,\n\t\t92\n\t],\n\t\"./EditMeshSettings.js\": [\n\t\t529,\n\t\t7\n\t],\n\t\"./EditSelection\": [\n\t\t530,\n\t\t7\n\t],\n\t\"./EditSelection.d\": [\n\t\t1275,\n\t\t7,\n\t\t93\n\t],\n\t\"./EditSelection.d.ts\": [\n\t\t1275,\n\t\t7,\n\t\t93\n\t],\n\t\"./EditSelection.js\": [\n\t\t530,\n\t\t7\n\t],\n\t\"./EditSelections\": [\n\t\t531,\n\t\t7\n\t],\n\t\"./EditSelections.d\": [\n\t\t1276,\n\t\t7,\n\t\t94\n\t],\n\t\"./EditSelections.d.ts\": [\n\t\t1276,\n\t\t7,\n\t\t94\n\t],\n\t\"./EditSelections.js\": [\n\t\t531,\n\t\t7\n\t],\n\t\"./Email\": [\n\t\t347,\n\t\t7\n\t],\n\t\"./Email.d\": [\n\t\t1277,\n\t\t7,\n\t\t95\n\t],\n\t\"./Email.d.ts\": [\n\t\t1277,\n\t\t7,\n\t\t95\n\t],\n\t\"./Email.js\": [\n\t\t347,\n\t\t7\n\t],\n\t\"./Emoticon\": [\n\t\t532,\n\t\t7\n\t],\n\t\"./Emoticon.d\": [\n\t\t1278,\n\t\t7,\n\t\t96\n\t],\n\t\"./Emoticon.d.ts\": [\n\t\t1278,\n\t\t7,\n\t\t96\n\t],\n\t\"./Emoticon.js\": [\n\t\t532,\n\t\t7\n\t],\n\t\"./Equal\": [\n\t\t533,\n\t\t7\n\t],\n\t\"./Equal.d\": [\n\t\t1279,\n\t\t7,\n\t\t97\n\t],\n\t\"./Equal.d.ts\": [\n\t\t1279,\n\t\t7,\n\t\t97\n\t],\n\t\"./Equal.js\": [\n\t\t533,\n\t\t7\n\t],\n\t\"./Eraser\": [\n\t\t534,\n\t\t7\n\t],\n\t\"./Eraser.d\": [\n\t\t1280,\n\t\t7,\n\t\t98\n\t],\n\t\"./Eraser.d.ts\": [\n\t\t1280,\n\t\t7,\n\t\t98\n\t],\n\t\"./Eraser.js\": [\n\t\t534,\n\t\t7\n\t],\n\t\"./ExagerateElevation\": [\n\t\t535,\n\t\t7\n\t],\n\t\"./ExagerateElevation.d\": [\n\t\t1281,\n\t\t7,\n\t\t99\n\t],\n\t\"./ExagerateElevation.d.ts\": [\n\t\t1281,\n\t\t7,\n\t\t99\n\t],\n\t\"./ExagerateElevation.js\": [\n\t\t535,\n\t\t7\n\t],\n\t\"./Exit\": [\n\t\t536,\n\t\t7\n\t],\n\t\"./Exit.d\": [\n\t\t1282,\n\t\t7,\n\t\t100\n\t],\n\t\"./Exit.d.ts\": [\n\t\t1282,\n\t\t7,\n\t\t100\n\t],\n\t\"./Exit.js\": [\n\t\t536,\n\t\t7\n\t],\n\t\"./Expand\": [\n\t\t537,\n\t\t7\n\t],\n\t\"./Expand.d\": [\n\t\t1283,\n\t\t7,\n\t\t101\n\t],\n\t\"./Expand.d.ts\": [\n\t\t1283,\n\t\t7,\n\t\t101\n\t],\n\t\"./Expand.js\": [\n\t\t537,\n\t\t7\n\t],\n\t\"./Extract\": [\n\t\t538,\n\t\t7\n\t],\n\t\"./Extract.d\": [\n\t\t1284,\n\t\t7,\n\t\t102\n\t],\n\t\"./Extract.d.ts\": [\n\t\t1284,\n\t\t7,\n\t\t102\n\t],\n\t\"./Extract.js\": [\n\t\t538,\n\t\t7\n\t],\n\t\"./Extracting\": [\n\t\t539,\n\t\t7\n\t],\n\t\"./Extracting.d\": [\n\t\t1285,\n\t\t7,\n\t\t103\n\t],\n\t\"./Extracting.d.ts\": [\n\t\t1285,\n\t\t7,\n\t\t103\n\t],\n\t\"./Extracting.js\": [\n\t\t539,\n\t\t7\n\t],\n\t\"./EyeHidden\": [\n\t\t540,\n\t\t7\n\t],\n\t\"./EyeHidden.d\": [\n\t\t1286,\n\t\t7,\n\t\t104\n\t],\n\t\"./EyeHidden.d.ts\": [\n\t\t1286,\n\t\t7,\n\t\t104\n\t],\n\t\"./EyeHidden.js\": [\n\t\t540,\n\t\t7\n\t],\n\t\"./EyeVisible\": [\n\t\t541,\n\t\t7\n\t],\n\t\"./EyeVisible.d\": [\n\t\t1287,\n\t\t7,\n\t\t105\n\t],\n\t\"./EyeVisible.d.ts\": [\n\t\t1287,\n\t\t7,\n\t\t105\n\t],\n\t\"./EyeVisible.js\": [\n\t\t541,\n\t\t7\n\t],\n\t\"./Fast\": [\n\t\t542,\n\t\t7\n\t],\n\t\"./Fast.d\": [\n\t\t1288,\n\t\t7,\n\t\t106\n\t],\n\t\"./Fast.d.ts\": [\n\t\t1288,\n\t\t7,\n\t\t106\n\t],\n\t\"./Fast.js\": [\n\t\t542,\n\t\t7\n\t],\n\t\"./FastForward\": [\n\t\t543,\n\t\t7\n\t],\n\t\"./FastForward.d\": [\n\t\t1289,\n\t\t7,\n\t\t107\n\t],\n\t\"./FastForward.d.ts\": [\n\t\t1289,\n\t\t7,\n\t\t107\n\t],\n\t\"./FastForward.js\": [\n\t\t543,\n\t\t7\n\t],\n\t\"./FastWaveEmulator\": [\n\t\t544,\n\t\t7\n\t],\n\t\"./FastWaveEmulator.d\": [\n\t\t1290,\n\t\t7,\n\t\t108\n\t],\n\t\"./FastWaveEmulator.d.ts\": [\n\t\t1290,\n\t\t7,\n\t\t108\n\t],\n\t\"./FastWaveEmulator.js\": [\n\t\t544,\n\t\t7\n\t],\n\t\"./FileInfo\": [\n\t\t545,\n\t\t7\n\t],\n\t\"./FileInfo.d\": [\n\t\t1291,\n\t\t7,\n\t\t109\n\t],\n\t\"./FileInfo.d.ts\": [\n\t\t1291,\n\t\t7,\n\t\t109\n\t],\n\t\"./FileInfo.js\": [\n\t\t545,\n\t\t7\n\t],\n\t\"./FileWarning\": [\n\t\t546,\n\t\t7\n\t],\n\t\"./FileWarning.d\": [\n\t\t1292,\n\t\t7,\n\t\t110\n\t],\n\t\"./FileWarning.d.ts\": [\n\t\t1292,\n\t\t7,\n\t\t110\n\t],\n\t\"./FileWarning.js\": [\n\t\t546,\n\t\t7\n\t],\n\t\"./Fill\": [\n\t\t547,\n\t\t7\n\t],\n\t\"./Fill.d\": [\n\t\t1293,\n\t\t7,\n\t\t111\n\t],\n\t\"./Fill.d.ts\": [\n\t\t1293,\n\t\t7,\n\t\t111\n\t],\n\t\"./Fill.js\": [\n\t\t547,\n\t\t7\n\t],\n\t\"./Filter\": [\n\t\t548,\n\t\t7\n\t],\n\t\"./Filter.d\": [\n\t\t1294,\n\t\t7,\n\t\t112\n\t],\n\t\"./Filter.d.ts\": [\n\t\t1294,\n\t\t7,\n\t\t112\n\t],\n\t\"./Filter.js\": [\n\t\t548,\n\t\t7\n\t],\n\t\"./FilterSelection\": [\n\t\t549,\n\t\t7\n\t],\n\t\"./FilterSelection.d\": [\n\t\t1295,\n\t\t7,\n\t\t113\n\t],\n\t\"./FilterSelection.d.ts\": [\n\t\t1295,\n\t\t7,\n\t\t113\n\t],\n\t\"./FilterSelection.js\": [\n\t\t549,\n\t\t7\n\t],\n\t\"./FinePrint\": [\n\t\t550,\n\t\t7\n\t],\n\t\"./FinePrint.d\": [\n\t\t1296,\n\t\t7,\n\t\t114\n\t],\n\t\"./FinePrint.d.ts\": [\n\t\t1296,\n\t\t7,\n\t\t114\n\t],\n\t\"./FinePrint.js\": [\n\t\t550,\n\t\t7\n\t],\n\t\"./Flag\": [\n\t\t551,\n\t\t7\n\t],\n\t\"./Flag.d\": [\n\t\t1297,\n\t\t7,\n\t\t115\n\t],\n\t\"./Flag.d.ts\": [\n\t\t1297,\n\t\t7,\n\t\t115\n\t],\n\t\"./Flag.js\": [\n\t\t551,\n\t\t7\n\t],\n\t\"./Flags\": [\n\t\t552,\n\t\t7\n\t],\n\t\"./Flags.d\": [\n\t\t1298,\n\t\t7,\n\t\t116\n\t],\n\t\"./Flags.d.ts\": [\n\t\t1298,\n\t\t7,\n\t\t116\n\t],\n\t\"./Flags.js\": [\n\t\t552,\n\t\t7\n\t],\n\t\"./FloodScreener\": [\n\t\t553,\n\t\t7\n\t],\n\t\"./FloodScreener.d\": [\n\t\t1299,\n\t\t7,\n\t\t117\n\t],\n\t\"./FloodScreener.d.ts\": [\n\t\t1299,\n\t\t7,\n\t\t117\n\t],\n\t\"./FloodScreener.js\": [\n\t\t553,\n\t\t7\n\t],\n\t\"./Flowchart\": [\n\t\t554,\n\t\t7\n\t],\n\t\"./Flowchart.d\": [\n\t\t1300,\n\t\t7,\n\t\t118\n\t],\n\t\"./Flowchart.d.ts\": [\n\t\t1300,\n\t\t7,\n\t\t118\n\t],\n\t\"./Flowchart.js\": [\n\t\t554,\n\t\t7\n\t],\n\t\"./Folder\": [\n\t\t145,\n\t\t7\n\t],\n\t\"./Folder.d\": [\n\t\t1301,\n\t\t7,\n\t\t119\n\t],\n\t\"./Folder.d.ts\": [\n\t\t1301,\n\t\t7,\n\t\t119\n\t],\n\t\"./Folder.js\": [\n\t\t145,\n\t\t7\n\t],\n\t\"./FolderZip\": [\n\t\t555,\n\t\t7\n\t],\n\t\"./FolderZip.d\": [\n\t\t1302,\n\t\t7,\n\t\t120\n\t],\n\t\"./FolderZip.d.ts\": [\n\t\t1302,\n\t\t7,\n\t\t120\n\t],\n\t\"./FolderZip.js\": [\n\t\t555,\n\t\t7\n\t],\n\t\"./Forefront\": [\n\t\t556,\n\t\t7\n\t],\n\t\"./Forefront.d\": [\n\t\t1303,\n\t\t7,\n\t\t121\n\t],\n\t\"./Forefront.d.ts\": [\n\t\t1303,\n\t\t7,\n\t\t121\n\t],\n\t\"./Forefront.js\": [\n\t\t556,\n\t\t7\n\t],\n\t\"./ForefrontAlt\": [\n\t\t557,\n\t\t7\n\t],\n\t\"./ForefrontAlt.d\": [\n\t\t1304,\n\t\t7,\n\t\t122\n\t],\n\t\"./ForefrontAlt.d.ts\": [\n\t\t1304,\n\t\t7,\n\t\t122\n\t],\n\t\"./ForefrontAlt.js\": [\n\t\t557,\n\t\t7\n\t],\n\t\"./GenericApp\": [\n\t\t558,\n\t\t7\n\t],\n\t\"./GenericApp.d\": [\n\t\t1305,\n\t\t7,\n\t\t123\n\t],\n\t\"./GenericApp.d.ts\": [\n\t\t1305,\n\t\t7,\n\t\t123\n\t],\n\t\"./GenericApp.js\": [\n\t\t558,\n\t\t7\n\t],\n\t\"./Geometries\": [\n\t\t559,\n\t\t7\n\t],\n\t\"./Geometries.d\": [\n\t\t1306,\n\t\t7,\n\t\t124\n\t],\n\t\"./Geometries.d.ts\": [\n\t\t1306,\n\t\t7,\n\t\t124\n\t],\n\t\"./Geometries.js\": [\n\t\t559,\n\t\t7\n\t],\n\t\"./Geometry\": [\n\t\t560,\n\t\t7\n\t],\n\t\"./Geometry.d\": [\n\t\t1307,\n\t\t7,\n\t\t125\n\t],\n\t\"./Geometry.d.ts\": [\n\t\t1307,\n\t\t7,\n\t\t125\n\t],\n\t\"./Geometry.js\": [\n\t\t560,\n\t\t7\n\t],\n\t\"./Gis\": [\n\t\t561,\n\t\t7\n\t],\n\t\"./Gis.d\": [\n\t\t1308,\n\t\t7,\n\t\t126\n\t],\n\t\"./Gis.d.ts\": [\n\t\t1308,\n\t\t7,\n\t\t126\n\t],\n\t\"./Gis.js\": [\n\t\t561,\n\t\t7\n\t],\n\t\"./GoToEnd\": [\n\t\t562,\n\t\t7\n\t],\n\t\"./GoToEnd.d\": [\n\t\t1309,\n\t\t7,\n\t\t127\n\t],\n\t\"./GoToEnd.d.ts\": [\n\t\t1309,\n\t\t7,\n\t\t127\n\t],\n\t\"./GoToEnd.js\": [\n\t\t562,\n\t\t7\n\t],\n\t\"./GoToStart\": [\n\t\t563,\n\t\t7\n\t],\n\t\"./GoToStart.d\": [\n\t\t1310,\n\t\t7,\n\t\t128\n\t],\n\t\"./GoToStart.d.ts\": [\n\t\t1310,\n\t\t7,\n\t\t128\n\t],\n\t\"./GoToStart.js\": [\n\t\t563,\n\t\t7\n\t],\n\t\"./GoogleWebSearch\": [\n\t\t564,\n\t\t7\n\t],\n\t\"./GoogleWebSearch.d\": [\n\t\t1311,\n\t\t7,\n\t\t129\n\t],\n\t\"./GoogleWebSearch.d.ts\": [\n\t\t1311,\n\t\t7,\n\t\t129\n\t],\n\t\"./GoogleWebSearch.js\": [\n\t\t564,\n\t\t7\n\t],\n\t\"./GridCircleBlue\": [\n\t\t565,\n\t\t7\n\t],\n\t\"./GridCircleBlue.d\": [\n\t\t1312,\n\t\t7,\n\t\t130\n\t],\n\t\"./GridCircleBlue.d.ts\": [\n\t\t1312,\n\t\t7,\n\t\t130\n\t],\n\t\"./GridCircleBlue.js\": [\n\t\t565,\n\t\t7\n\t],\n\t\"./Gridded\": [\n\t\t566,\n\t\t7\n\t],\n\t\"./Gridded.d\": [\n\t\t1313,\n\t\t7,\n\t\t131\n\t],\n\t\"./Gridded.d.ts\": [\n\t\t1313,\n\t\t7,\n\t\t131\n\t],\n\t\"./Gridded.js\": [\n\t\t566,\n\t\t7\n\t],\n\t\"./Group\": [\n\t\t567,\n\t\t7\n\t],\n\t\"./Group.d\": [\n\t\t1314,\n\t\t7,\n\t\t132\n\t],\n\t\"./Group.d.ts\": [\n\t\t1314,\n\t\t7,\n\t\t132\n\t],\n\t\"./Group.js\": [\n\t\t567,\n\t\t7\n\t],\n\t\"./Heatmap\": [\n\t\t568,\n\t\t7\n\t],\n\t\"./Heatmap.d\": [\n\t\t1315,\n\t\t7,\n\t\t133\n\t],\n\t\"./Heatmap.d.ts\": [\n\t\t1315,\n\t\t7,\n\t\t133\n\t],\n\t\"./Heatmap.js\": [\n\t\t568,\n\t\t7\n\t],\n\t\"./Highlighted\": [\n\t\t569,\n\t\t7\n\t],\n\t\"./Highlighted.d\": [\n\t\t1316,\n\t\t7,\n\t\t134\n\t],\n\t\"./Highlighted.d.ts\": [\n\t\t1316,\n\t\t7,\n\t\t134\n\t],\n\t\"./Highlighted.js\": [\n\t\t569,\n\t\t7\n\t],\n\t\"./HighlightedOff\": [\n\t\t570,\n\t\t7\n\t],\n\t\"./HighlightedOff.d\": [\n\t\t1317,\n\t\t7,\n\t\t135\n\t],\n\t\"./HighlightedOff.d.ts\": [\n\t\t1317,\n\t\t7,\n\t\t135\n\t],\n\t\"./HighlightedOff.js\": [\n\t\t570,\n\t\t7\n\t],\n\t\"./HighlightedOn\": [\n\t\t571,\n\t\t7\n\t],\n\t\"./HighlightedOn.d\": [\n\t\t1318,\n\t\t7,\n\t\t136\n\t],\n\t\"./HighlightedOn.d.ts\": [\n\t\t1318,\n\t\t7,\n\t\t136\n\t],\n\t\"./HighlightedOn.js\": [\n\t\t571,\n\t\t7\n\t],\n\t\"./History\": [\n\t\t572,\n\t\t7\n\t],\n\t\"./History.d\": [\n\t\t1319,\n\t\t7,\n\t\t137\n\t],\n\t\"./History.d.ts\": [\n\t\t1319,\n\t\t7,\n\t\t137\n\t],\n\t\"./History.js\": [\n\t\t572,\n\t\t7\n\t],\n\t\"./Hole\": [\n\t\t573,\n\t\t7\n\t],\n\t\"./Hole.d\": [\n\t\t1320,\n\t\t7,\n\t\t138\n\t],\n\t\"./Hole.d.ts\": [\n\t\t1320,\n\t\t7,\n\t\t138\n\t],\n\t\"./Hole.js\": [\n\t\t573,\n\t\t7\n\t],\n\t\"./Home\": [\n\t\t574,\n\t\t7\n\t],\n\t\"./Home.d\": [\n\t\t1321,\n\t\t7,\n\t\t139\n\t],\n\t\"./Home.d.ts\": [\n\t\t1321,\n\t\t7,\n\t\t139\n\t],\n\t\"./Home.js\": [\n\t\t574,\n\t\t7\n\t],\n\t\"./Icon\": [\n\t\t575,\n\t\t7\n\t],\n\t\"./Icon.d\": [\n\t\t1322,\n\t\t7,\n\t\t140\n\t],\n\t\"./Icon.d.ts\": [\n\t\t1322,\n\t\t7,\n\t\t140\n\t],\n\t\"./Icon.js\": [\n\t\t575,\n\t\t7\n\t],\n\t\"./Info\": [\n\t\t291,\n\t\t7\n\t],\n\t\"./Info.d\": [\n\t\t1323,\n\t\t7,\n\t\t141\n\t],\n\t\"./Info.d.ts\": [\n\t\t1323,\n\t\t7,\n\t\t141\n\t],\n\t\"./Info.js\": [\n\t\t291,\n\t\t7\n\t],\n\t\"./Inspect\": [\n\t\t576,\n\t\t7\n\t],\n\t\"./Inspect.d\": [\n\t\t1324,\n\t\t7,\n\t\t142\n\t],\n\t\"./Inspect.d.ts\": [\n\t\t1324,\n\t\t7,\n\t\t142\n\t],\n\t\"./Inspect.js\": [\n\t\t576,\n\t\t7\n\t],\n\t\"./InvertSelection\": [\n\t\t577,\n\t\t7\n\t],\n\t\"./InvertSelection.d\": [\n\t\t1325,\n\t\t7,\n\t\t143\n\t],\n\t\"./InvertSelection.d.ts\": [\n\t\t1325,\n\t\t7,\n\t\t143\n\t],\n\t\"./InvertSelection.js\": [\n\t\t577,\n\t\t7\n\t],\n\t\"./IsolationMode\": [\n\t\t578,\n\t\t7\n\t],\n\t\"./IsolationMode.d\": [\n\t\t1326,\n\t\t7,\n\t\t144\n\t],\n\t\"./IsolationMode.d.ts\": [\n\t\t1326,\n\t\t7,\n\t\t144\n\t],\n\t\"./IsolationMode.js\": [\n\t\t578,\n\t\t7\n\t],\n\t\"./ItemSettings\": [\n\t\t579,\n\t\t7\n\t],\n\t\"./ItemSettings.d\": [\n\t\t1327,\n\t\t7,\n\t\t145\n\t],\n\t\"./ItemSettings.d.ts\": [\n\t\t1327,\n\t\t7,\n\t\t145\n\t],\n\t\"./ItemSettings.js\": [\n\t\t579,\n\t\t7\n\t],\n\t\"./Join\": [\n\t\t580,\n\t\t7\n\t],\n\t\"./Join.d\": [\n\t\t1328,\n\t\t7,\n\t\t146\n\t],\n\t\"./Join.d.ts\": [\n\t\t1328,\n\t\t7,\n\t\t146\n\t],\n\t\"./Join.js\": [\n\t\t580,\n\t\t7\n\t],\n\t\"./LandingPage\": [\n\t\t241,\n\t\t7\n\t],\n\t\"./LandingPage.d\": [\n\t\t1329,\n\t\t7,\n\t\t147\n\t],\n\t\"./LandingPage.d.ts\": [\n\t\t1329,\n\t\t7,\n\t\t147\n\t],\n\t\"./LandingPage.js\": [\n\t\t241,\n\t\t7\n\t],\n\t\"./Language\": [\n\t\t581,\n\t\t7\n\t],\n\t\"./Language.d\": [\n\t\t1330,\n\t\t7,\n\t\t148\n\t],\n\t\"./Language.d.ts\": [\n\t\t1330,\n\t\t7,\n\t\t148\n\t],\n\t\"./Language.js\": [\n\t\t581,\n\t\t7\n\t],\n\t\"./Layer\": [\n\t\t582,\n\t\t7\n\t],\n\t\"./Layer.d\": [\n\t\t1331,\n\t\t7,\n\t\t149\n\t],\n\t\"./Layer.d.ts\": [\n\t\t1331,\n\t\t7,\n\t\t149\n\t],\n\t\"./Layer.js\": [\n\t\t582,\n\t\t7\n\t],\n\t\"./Layers\": [\n\t\t583,\n\t\t7\n\t],\n\t\"./Layers.d\": [\n\t\t1332,\n\t\t7,\n\t\t150\n\t],\n\t\"./Layers.d.ts\": [\n\t\t1332,\n\t\t7,\n\t\t150\n\t],\n\t\"./Layers.js\": [\n\t\t583,\n\t\t7\n\t],\n\t\"./Learning\": [\n\t\t584,\n\t\t7\n\t],\n\t\"./Learning.d\": [\n\t\t1333,\n\t\t7,\n\t\t151\n\t],\n\t\"./Learning.d.ts\": [\n\t\t1333,\n\t\t7,\n\t\t151\n\t],\n\t\"./Learning.js\": [\n\t\t584,\n\t\t7\n\t],\n\t\"./Left\": [\n\t\t363,\n\t\t7\n\t],\n\t\"./Left.d\": [\n\t\t1334,\n\t\t7,\n\t\t152\n\t],\n\t\"./Left.d.ts\": [\n\t\t1334,\n\t\t7,\n\t\t152\n\t],\n\t\"./Left.js\": [\n\t\t363,\n\t\t7\n\t],\n\t\"./LeftNarrow\": [\n\t\t585,\n\t\t7\n\t],\n\t\"./LeftNarrow.d\": [\n\t\t1335,\n\t\t7,\n\t\t153\n\t],\n\t\"./LeftNarrow.d.ts\": [\n\t\t1335,\n\t\t7,\n\t\t153\n\t],\n\t\"./LeftNarrow.js\": [\n\t\t585,\n\t\t7\n\t],\n\t\"./LeftS\": [\n\t\t586,\n\t\t7\n\t],\n\t\"./LeftS.d\": [\n\t\t1336,\n\t\t7,\n\t\t154\n\t],\n\t\"./LeftS.d.ts\": [\n\t\t1336,\n\t\t7,\n\t\t154\n\t],\n\t\"./LeftS.js\": [\n\t\t586,\n\t\t7\n\t],\n\t\"./LessThan\": [\n\t\t587,\n\t\t7\n\t],\n\t\"./LessThan.d\": [\n\t\t1337,\n\t\t7,\n\t\t155\n\t],\n\t\"./LessThan.d.ts\": [\n\t\t1337,\n\t\t7,\n\t\t155\n\t],\n\t\"./LessThan.js\": [\n\t\t587,\n\t\t7\n\t],\n\t\"./Line\": [\n\t\t588,\n\t\t7\n\t],\n\t\"./Line.d\": [\n\t\t1338,\n\t\t7,\n\t\t156\n\t],\n\t\"./Line.d.ts\": [\n\t\t1338,\n\t\t7,\n\t\t156\n\t],\n\t\"./Line.js\": [\n\t\t588,\n\t\t7\n\t],\n\t\"./LineChart\": [\n\t\t589,\n\t\t7\n\t],\n\t\"./LineChart.d\": [\n\t\t1339,\n\t\t7,\n\t\t157\n\t],\n\t\"./LineChart.d.ts\": [\n\t\t1339,\n\t\t7,\n\t\t157\n\t],\n\t\"./LineChart.js\": [\n\t\t589,\n\t\t7\n\t],\n\t\"./Lines\": [\n\t\t590,\n\t\t7\n\t],\n\t\"./Lines.d\": [\n\t\t1340,\n\t\t7,\n\t\t158\n\t],\n\t\"./Lines.d.ts\": [\n\t\t1340,\n\t\t7,\n\t\t158\n\t],\n\t\"./Lines.js\": [\n\t\t590,\n\t\t7\n\t],\n\t\"./Link\": [\n\t\t591,\n\t\t7\n\t],\n\t\"./Link.d\": [\n\t\t1341,\n\t\t7,\n\t\t159\n\t],\n\t\"./Link.d.ts\": [\n\t\t1341,\n\t\t7,\n\t\t159\n\t],\n\t\"./Link.js\": [\n\t\t591,\n\t\t7\n\t],\n\t\"./LinkedProject\": [\n\t\t592,\n\t\t7\n\t],\n\t\"./LinkedProject.d\": [\n\t\t1342,\n\t\t7,\n\t\t160\n\t],\n\t\"./LinkedProject.d.ts\": [\n\t\t1342,\n\t\t7,\n\t\t160\n\t],\n\t\"./LinkedProject.js\": [\n\t\t592,\n\t\t7\n\t],\n\t\"./ListView\": [\n\t\t593,\n\t\t7\n\t],\n\t\"./ListView.d\": [\n\t\t1343,\n\t\t7,\n\t\t161\n\t],\n\t\"./ListView.d.ts\": [\n\t\t1343,\n\t\t7,\n\t\t161\n\t],\n\t\"./ListView.js\": [\n\t\t593,\n\t\t7\n\t],\n\t\"./Lock\": [\n\t\t594,\n\t\t7\n\t],\n\t\"./Lock.d\": [\n\t\t1344,\n\t\t7,\n\t\t162\n\t],\n\t\"./Lock.d.ts\": [\n\t\t1344,\n\t\t7,\n\t\t162\n\t],\n\t\"./Lock.js\": [\n\t\t594,\n\t\t7\n\t],\n\t\"./Loop\": [\n\t\t595,\n\t\t7\n\t],\n\t\"./Loop.d\": [\n\t\t1345,\n\t\t7,\n\t\t163\n\t],\n\t\"./Loop.d.ts\": [\n\t\t1345,\n\t\t7,\n\t\t163\n\t],\n\t\"./Loop.js\": [\n\t\t595,\n\t\t7\n\t],\n\t\"./MainPanel\": [\n\t\t596,\n\t\t7\n\t],\n\t\"./MainPanel.d\": [\n\t\t1346,\n\t\t7,\n\t\t164\n\t],\n\t\"./MainPanel.d.ts\": [\n\t\t1346,\n\t\t7,\n\t\t164\n\t],\n\t\"./MainPanel.js\": [\n\t\t596,\n\t\t7\n\t],\n\t\"./MainPanelAlt\": [\n\t\t597,\n\t\t7\n\t],\n\t\"./MainPanelAlt.d\": [\n\t\t1347,\n\t\t7,\n\t\t165\n\t],\n\t\"./MainPanelAlt.d.ts\": [\n\t\t1347,\n\t\t7,\n\t\t165\n\t],\n\t\"./MainPanelAlt.js\": [\n\t\t597,\n\t\t7\n\t],\n\t\"./MapPinFilled\": [\n\t\t598,\n\t\t7\n\t],\n\t\"./MapPinFilled.d\": [\n\t\t1348,\n\t\t7,\n\t\t166\n\t],\n\t\"./MapPinFilled.d.ts\": [\n\t\t1348,\n\t\t7,\n\t\t166\n\t],\n\t\"./MapPinFilled.js\": [\n\t\t598,\n\t\t7\n\t],\n\t\"./MapPinOutline\": [\n\t\t599,\n\t\t7\n\t],\n\t\"./MapPinOutline.d\": [\n\t\t1349,\n\t\t7,\n\t\t167\n\t],\n\t\"./MapPinOutline.d.ts\": [\n\t\t1349,\n\t\t7,\n\t\t167\n\t],\n\t\"./MapPinOutline.js\": [\n\t\t599,\n\t\t7\n\t],\n\t\"./MapView\": [\n\t\t600,\n\t\t7\n\t],\n\t\"./MapView.d\": [\n\t\t1350,\n\t\t7,\n\t\t168\n\t],\n\t\"./MapView.d.ts\": [\n\t\t1350,\n\t\t7,\n\t\t168\n\t],\n\t\"./MapView.js\": [\n\t\t600,\n\t\t7\n\t],\n\t\"./Measure\": [\n\t\t601,\n\t\t7\n\t],\n\t\"./Measure.d\": [\n\t\t1351,\n\t\t7,\n\t\t169\n\t],\n\t\"./Measure.d.ts\": [\n\t\t1351,\n\t\t7,\n\t\t169\n\t],\n\t\"./Measure.js\": [\n\t\t601,\n\t\t7\n\t],\n\t\"./MeasureFt\": [\n\t\t602,\n\t\t7\n\t],\n\t\"./MeasureFt.d\": [\n\t\t1352,\n\t\t7,\n\t\t170\n\t],\n\t\"./MeasureFt.d.ts\": [\n\t\t1352,\n\t\t7,\n\t\t170\n\t],\n\t\"./MeasureFt.js\": [\n\t\t602,\n\t\t7\n\t],\n\t\"./MeasureM\": [\n\t\t603,\n\t\t7\n\t],\n\t\"./MeasureM.d\": [\n\t\t1353,\n\t\t7,\n\t\t171\n\t],\n\t\"./MeasureM.d.ts\": [\n\t\t1353,\n\t\t7,\n\t\t171\n\t],\n\t\"./MeasureM.js\": [\n\t\t603,\n\t\t7\n\t],\n\t\"./MedialAxis\": [\n\t\t604,\n\t\t7\n\t],\n\t\"./MedialAxis.d\": [\n\t\t1354,\n\t\t7,\n\t\t172\n\t],\n\t\"./MedialAxis.d.ts\": [\n\t\t1354,\n\t\t7,\n\t\t172\n\t],\n\t\"./MedialAxis.js\": [\n\t\t604,\n\t\t7\n\t],\n\t\"./Menu\": [\n\t\t605,\n\t\t7\n\t],\n\t\"./Menu.d\": [\n\t\t1355,\n\t\t7,\n\t\t173\n\t],\n\t\"./Menu.d.ts\": [\n\t\t1355,\n\t\t7,\n\t\t173\n\t],\n\t\"./Menu.js\": [\n\t\t605,\n\t\t7\n\t],\n\t\"./Merge\": [\n\t\t606,\n\t\t7\n\t],\n\t\"./Merge.d\": [\n\t\t1356,\n\t\t7,\n\t\t174\n\t],\n\t\"./Merge.d.ts\": [\n\t\t1356,\n\t\t7,\n\t\t174\n\t],\n\t\"./Merge.js\": [\n\t\t606,\n\t\t7\n\t],\n\t\"./Mesh\": [\n\t\t607,\n\t\t7\n\t],\n\t\"./Mesh.d\": [\n\t\t1357,\n\t\t7,\n\t\t175\n\t],\n\t\"./Mesh.d.ts\": [\n\t\t1357,\n\t\t7,\n\t\t175\n\t],\n\t\"./Mesh.js\": [\n\t\t607,\n\t\t7\n\t],\n\t\"./MeshCollection\": [\n\t\t608,\n\t\t7\n\t],\n\t\"./MeshCollection.d\": [\n\t\t1358,\n\t\t7,\n\t\t176\n\t],\n\t\"./MeshCollection.d.ts\": [\n\t\t1358,\n\t\t7,\n\t\t176\n\t],\n\t\"./MeshCollection.js\": [\n\t\t608,\n\t\t7\n\t],\n\t\"./MeshColors\": [\n\t\t609,\n\t\t7\n\t],\n\t\"./MeshColors.d\": [\n\t\t1359,\n\t\t7,\n\t\t177\n\t],\n\t\"./MeshColors.d.ts\": [\n\t\t1359,\n\t\t7,\n\t\t177\n\t],\n\t\"./MeshColors.js\": [\n\t\t609,\n\t\t7\n\t],\n\t\"./MeshGenerate\": [\n\t\t610,\n\t\t7\n\t],\n\t\"./MeshGenerate.d\": [\n\t\t1360,\n\t\t7,\n\t\t178\n\t],\n\t\"./MeshGenerate.d.ts\": [\n\t\t1360,\n\t\t7,\n\t\t178\n\t],\n\t\"./MeshGenerate.js\": [\n\t\t610,\n\t\t7\n\t],\n\t\"./MeshGenerator\": [\n\t\t611,\n\t\t7\n\t],\n\t\"./MeshGenerator.d\": [\n\t\t1361,\n\t\t7,\n\t\t179\n\t],\n\t\"./MeshGenerator.d.ts\": [\n\t\t1361,\n\t\t7,\n\t\t179\n\t],\n\t\"./MeshGenerator.js\": [\n\t\t611,\n\t\t7\n\t],\n\t\"./MeshOperation\": [\n\t\t612,\n\t\t7\n\t],\n\t\"./MeshOperation.d\": [\n\t\t1362,\n\t\t7,\n\t\t180\n\t],\n\t\"./MeshOperation.d.ts\": [\n\t\t1362,\n\t\t7,\n\t\t180\n\t],\n\t\"./MeshOperation.js\": [\n\t\t612,\n\t\t7\n\t],\n\t\"./MeshOperations\": [\n\t\t613,\n\t\t7\n\t],\n\t\"./MeshOperations.d\": [\n\t\t1363,\n\t\t7,\n\t\t181\n\t],\n\t\"./MeshOperations.d.ts\": [\n\t\t1363,\n\t\t7,\n\t\t181\n\t],\n\t\"./MeshOperations.js\": [\n\t\t613,\n\t\t7\n\t],\n\t\"./MeshPlay\": [\n\t\t614,\n\t\t7\n\t],\n\t\"./MeshPlay.d\": [\n\t\t1364,\n\t\t7,\n\t\t182\n\t],\n\t\"./MeshPlay.d.ts\": [\n\t\t1364,\n\t\t7,\n\t\t182\n\t],\n\t\"./MeshPlay.js\": [\n\t\t614,\n\t\t7\n\t],\n\t\"./MeshSettings\": [\n\t\t615,\n\t\t7\n\t],\n\t\"./MeshSettings.d\": [\n\t\t1365,\n\t\t7,\n\t\t183\n\t],\n\t\"./MeshSettings.d.ts\": [\n\t\t1365,\n\t\t7,\n\t\t183\n\t],\n\t\"./MeshSettings.js\": [\n\t\t615,\n\t\t7\n\t],\n\t\"./MetadataService\": [\n\t\t616,\n\t\t7\n\t],\n\t\"./MetadataService.d\": [\n\t\t1366,\n\t\t7,\n\t\t184\n\t],\n\t\"./MetadataService.d.ts\": [\n\t\t1366,\n\t\t7,\n\t\t184\n\t],\n\t\"./MetadataService.js\": [\n\t\t616,\n\t\t7\n\t],\n\t\"./Metrics\": [\n\t\t617,\n\t\t7\n\t],\n\t\"./Metrics.d\": [\n\t\t1367,\n\t\t7,\n\t\t185\n\t],\n\t\"./Metrics.d.ts\": [\n\t\t1367,\n\t\t7,\n\t\t185\n\t],\n\t\"./Metrics.js\": [\n\t\t617,\n\t\t7\n\t],\n\t\"./Minimize\": [\n\t\t618,\n\t\t7\n\t],\n\t\"./Minimize.d\": [\n\t\t1368,\n\t\t7,\n\t\t186\n\t],\n\t\"./Minimize.d.ts\": [\n\t\t1368,\n\t\t7,\n\t\t186\n\t],\n\t\"./Minimize.js\": [\n\t\t618,\n\t\t7\n\t],\n\t\"./Minus\": [\n\t\t619,\n\t\t7\n\t],\n\t\"./Minus.d\": [\n\t\t1369,\n\t\t7,\n\t\t187\n\t],\n\t\"./Minus.d.ts\": [\n\t\t1369,\n\t\t7,\n\t\t187\n\t],\n\t\"./Minus.js\": [\n\t\t619,\n\t\t7\n\t],\n\t\"./Model3D\": [\n\t\t620,\n\t\t7\n\t],\n\t\"./Model3D.d\": [\n\t\t1370,\n\t\t7,\n\t\t188\n\t],\n\t\"./Model3D.d.ts\": [\n\t\t1370,\n\t\t7,\n\t\t188\n\t],\n\t\"./Model3D.js\": [\n\t\t620,\n\t\t7\n\t],\n\t\"./More\": [\n\t\t621,\n\t\t7\n\t],\n\t\"./More.d\": [\n\t\t1371,\n\t\t7,\n\t\t189\n\t],\n\t\"./More.d.ts\": [\n\t\t1371,\n\t\t7,\n\t\t189\n\t],\n\t\"./More.js\": [\n\t\t621,\n\t\t7\n\t],\n\t\"./MoreThan\": [\n\t\t622,\n\t\t7\n\t],\n\t\"./MoreThan.d\": [\n\t\t1372,\n\t\t7,\n\t\t190\n\t],\n\t\"./MoreThan.d.ts\": [\n\t\t1372,\n\t\t7,\n\t\t190\n\t],\n\t\"./MoreThan.js\": [\n\t\t622,\n\t\t7\n\t],\n\t\"./MouseClick\": [\n\t\t623,\n\t\t7\n\t],\n\t\"./MouseClick.d\": [\n\t\t1373,\n\t\t7,\n\t\t191\n\t],\n\t\"./MouseClick.d.ts\": [\n\t\t1373,\n\t\t7,\n\t\t191\n\t],\n\t\"./MouseClick.js\": [\n\t\t623,\n\t\t7\n\t],\n\t\"./Move\": [\n\t\t624,\n\t\t7\n\t],\n\t\"./Move.d\": [\n\t\t1374,\n\t\t7,\n\t\t192\n\t],\n\t\"./Move.d.ts\": [\n\t\t1374,\n\t\t7,\n\t\t192\n\t],\n\t\"./Move.js\": [\n\t\t624,\n\t\t7\n\t],\n\t\"./MsProject\": [\n\t\t625,\n\t\t7\n\t],\n\t\"./MsProject.d\": [\n\t\t1375,\n\t\t7,\n\t\t193\n\t],\n\t\"./MsProject.d.ts\": [\n\t\t1375,\n\t\t7,\n\t\t193\n\t],\n\t\"./MsProject.js\": [\n\t\t625,\n\t\t7\n\t],\n\t\"./MultipleChoice\": [\n\t\t626,\n\t\t7\n\t],\n\t\"./MultipleChoice.d\": [\n\t\t1376,\n\t\t7,\n\t\t194\n\t],\n\t\"./MultipleChoice.d.ts\": [\n\t\t1376,\n\t\t7,\n\t\t194\n\t],\n\t\"./MultipleChoice.js\": [\n\t\t626,\n\t\t7\n\t],\n\t\"./MyProjects\": [\n\t\t286,\n\t\t7\n\t],\n\t\"./MyProjects.d\": [\n\t\t1377,\n\t\t7,\n\t\t195\n\t],\n\t\"./MyProjects.d.ts\": [\n\t\t1377,\n\t\t7,\n\t\t195\n\t],\n\t\"./MyProjects.js\": [\n\t\t286,\n\t\t7\n\t],\n\t\"./MySql\": [\n\t\t627,\n\t\t7\n\t],\n\t\"./MySql.d\": [\n\t\t1378,\n\t\t7,\n\t\t196\n\t],\n\t\"./MySql.d.ts\": [\n\t\t1378,\n\t\t7,\n\t\t196\n\t],\n\t\"./MySql.js\": [\n\t\t627,\n\t\t7\n\t],\n\t\"./Mystery\": [\n\t\t628,\n\t\t7\n\t],\n\t\"./Mystery.d\": [\n\t\t1379,\n\t\t7,\n\t\t197\n\t],\n\t\"./Mystery.d.ts\": [\n\t\t1379,\n\t\t7,\n\t\t197\n\t],\n\t\"./Mystery.js\": [\n\t\t628,\n\t\t7\n\t],\n\t\"./Navigate\": [\n\t\t629,\n\t\t7\n\t],\n\t\"./Navigate.d\": [\n\t\t1380,\n\t\t7,\n\t\t198\n\t],\n\t\"./Navigate.d.ts\": [\n\t\t1380,\n\t\t7,\n\t\t198\n\t],\n\t\"./Navigate.js\": [\n\t\t629,\n\t\t7\n\t],\n\t\"./NestedTools\": [\n\t\t630,\n\t\t7\n\t],\n\t\"./NestedTools.d\": [\n\t\t1381,\n\t\t7,\n\t\t199\n\t],\n\t\"./NestedTools.d.ts\": [\n\t\t1381,\n\t\t7,\n\t\t199\n\t],\n\t\"./NestedTools.js\": [\n\t\t630,\n\t\t7\n\t],\n\t\"./NestedToolsTriangle\": [\n\t\t631,\n\t\t7\n\t],\n\t\"./NestedToolsTriangle.d\": [\n\t\t1382,\n\t\t7,\n\t\t200\n\t],\n\t\"./NestedToolsTriangle.d.ts\": [\n\t\t1382,\n\t\t7,\n\t\t200\n\t],\n\t\"./NestedToolsTriangle.js\": [\n\t\t631,\n\t\t7\n\t],\n\t\"./NewDocument\": [\n\t\t632,\n\t\t7\n\t],\n\t\"./NewDocument.d\": [\n\t\t1383,\n\t\t7,\n\t\t201\n\t],\n\t\"./NewDocument.d.ts\": [\n\t\t1383,\n\t\t7,\n\t\t201\n\t],\n\t\"./NewDocument.js\": [\n\t\t632,\n\t\t7\n\t],\n\t\"./NewProject\": [\n\t\t292,\n\t\t7\n\t],\n\t\"./NewProject.d\": [\n\t\t1384,\n\t\t7,\n\t\t202\n\t],\n\t\"./NewProject.d.ts\": [\n\t\t1384,\n\t\t7,\n\t\t202\n\t],\n\t\"./NewProject.js\": [\n\t\t292,\n\t\t7\n\t],\n\t\"./North\": [\n\t\t633,\n\t\t7\n\t],\n\t\"./North.d\": [\n\t\t1385,\n\t\t7,\n\t\t203\n\t],\n\t\"./North.d.ts\": [\n\t\t1385,\n\t\t7,\n\t\t203\n\t],\n\t\"./North.js\": [\n\t\t633,\n\t\t7\n\t],\n\t\"./NotHole\": [\n\t\t634,\n\t\t7\n\t],\n\t\"./NotHole.d\": [\n\t\t1386,\n\t\t7,\n\t\t204\n\t],\n\t\"./NotHole.d.ts\": [\n\t\t1386,\n\t\t7,\n\t\t204\n\t],\n\t\"./NotHole.js\": [\n\t\t634,\n\t\t7\n\t],\n\t\"./Note\": [\n\t\t635,\n\t\t7\n\t],\n\t\"./Note.d\": [\n\t\t1387,\n\t\t7,\n\t\t205\n\t],\n\t\"./Note.d.ts\": [\n\t\t1387,\n\t\t7,\n\t\t205\n\t],\n\t\"./Note.js\": [\n\t\t635,\n\t\t7\n\t],\n\t\"./NotificationAlert\": [\n\t\t636,\n\t\t7\n\t],\n\t\"./NotificationAlert.d\": [\n\t\t1388,\n\t\t7,\n\t\t206\n\t],\n\t\"./NotificationAlert.d.ts\": [\n\t\t1388,\n\t\t7,\n\t\t206\n\t],\n\t\"./NotificationAlert.js\": [\n\t\t636,\n\t\t7\n\t],\n\t\"./NotificationBell\": [\n\t\t637,\n\t\t7\n\t],\n\t\"./NotificationBell.d\": [\n\t\t1389,\n\t\t7,\n\t\t207\n\t],\n\t\"./NotificationBell.d.ts\": [\n\t\t1389,\n\t\t7,\n\t\t207\n\t],\n\t\"./NotificationBell.js\": [\n\t\t637,\n\t\t7\n\t],\n\t\"./Opacity\": [\n\t\t638,\n\t\t7\n\t],\n\t\"./Opacity.d\": [\n\t\t1390,\n\t\t7,\n\t\t208\n\t],\n\t\"./Opacity.d.ts\": [\n\t\t1390,\n\t\t7,\n\t\t208\n\t],\n\t\"./Opacity.js\": [\n\t\t638,\n\t\t7\n\t],\n\t\"./Open\": [\n\t\t639,\n\t\t7\n\t],\n\t\"./Open.d\": [\n\t\t1391,\n\t\t7,\n\t\t209\n\t],\n\t\"./Open.d.ts\": [\n\t\t1391,\n\t\t7,\n\t\t209\n\t],\n\t\"./Open.js\": [\n\t\t639,\n\t\t7\n\t],\n\t\"./OpenInEditor\": [\n\t\t640,\n\t\t7\n\t],\n\t\"./OpenInEditor.d\": [\n\t\t1392,\n\t\t7,\n\t\t210\n\t],\n\t\"./OpenInEditor.d.ts\": [\n\t\t1392,\n\t\t7,\n\t\t210\n\t],\n\t\"./OpenInEditor.js\": [\n\t\t640,\n\t\t7\n\t],\n\t\"./Operations\": [\n\t\t641,\n\t\t7\n\t],\n\t\"./Operations.d\": [\n\t\t1393,\n\t\t7,\n\t\t211\n\t],\n\t\"./Operations.d.ts\": [\n\t\t1393,\n\t\t7,\n\t\t211\n\t],\n\t\"./Operations.js\": [\n\t\t641,\n\t\t7\n\t],\n\t\"./Overlap\": [\n\t\t642,\n\t\t7\n\t],\n\t\"./Overlap.d\": [\n\t\t1394,\n\t\t7,\n\t\t212\n\t],\n\t\"./Overlap.d.ts\": [\n\t\t1394,\n\t\t7,\n\t\t212\n\t],\n\t\"./Overlap.js\": [\n\t\t642,\n\t\t7\n\t],\n\t\"./Pan\": [\n\t\t643,\n\t\t7\n\t],\n\t\"./Pan.d\": [\n\t\t1395,\n\t\t7,\n\t\t213\n\t],\n\t\"./Pan.d.ts\": [\n\t\t1395,\n\t\t7,\n\t\t213\n\t],\n\t\"./Pan.js\": [\n\t\t643,\n\t\t7\n\t],\n\t\"./PanAlt\": [\n\t\t644,\n\t\t7\n\t],\n\t\"./PanAlt.d\": [\n\t\t1396,\n\t\t7,\n\t\t214\n\t],\n\t\"./PanAlt.d.ts\": [\n\t\t1396,\n\t\t7,\n\t\t214\n\t],\n\t\"./PanAlt.js\": [\n\t\t644,\n\t\t7\n\t],\n\t\"./ParallelAlt\": [\n\t\t645,\n\t\t7\n\t],\n\t\"./ParallelAlt.d\": [\n\t\t1397,\n\t\t7,\n\t\t215\n\t],\n\t\"./ParallelAlt.d.ts\": [\n\t\t1397,\n\t\t7,\n\t\t215\n\t],\n\t\"./ParallelAlt.js\": [\n\t\t645,\n\t\t7\n\t],\n\t\"./Pause\": [\n\t\t646,\n\t\t7\n\t],\n\t\"./Pause.d\": [\n\t\t1398,\n\t\t7,\n\t\t216\n\t],\n\t\"./Pause.d.ts\": [\n\t\t1398,\n\t\t7,\n\t\t216\n\t],\n\t\"./Pause.js\": [\n\t\t646,\n\t\t7\n\t],\n\t\"./Play\": [\n\t\t647,\n\t\t7\n\t],\n\t\"./Play.d\": [\n\t\t1399,\n\t\t7,\n\t\t217\n\t],\n\t\"./Play.d.ts\": [\n\t\t1399,\n\t\t7,\n\t\t217\n\t],\n\t\"./Play.js\": [\n\t\t647,\n\t\t7\n\t],\n\t\"./Plus\": [\n\t\t117,\n\t\t7\n\t],\n\t\"./Plus.d\": [\n\t\t1400,\n\t\t7,\n\t\t218\n\t],\n\t\"./Plus.d.ts\": [\n\t\t1400,\n\t\t7,\n\t\t218\n\t],\n\t\"./Plus.js\": [\n\t\t117,\n\t\t7\n\t],\n\t\"./Point\": [\n\t\t648,\n\t\t7\n\t],\n\t\"./Point.d\": [\n\t\t1401,\n\t\t7,\n\t\t219\n\t],\n\t\"./Point.d.ts\": [\n\t\t1401,\n\t\t7,\n\t\t219\n\t],\n\t\"./Point.js\": [\n\t\t648,\n\t\t7\n\t],\n\t\"./PointCloud\": [\n\t\t649,\n\t\t7\n\t],\n\t\"./PointCloud.d\": [\n\t\t1402,\n\t\t7,\n\t\t220\n\t],\n\t\"./PointCloud.d.ts\": [\n\t\t1402,\n\t\t7,\n\t\t220\n\t],\n\t\"./PointCloud.js\": [\n\t\t649,\n\t\t7\n\t],\n\t\"./PointCollection\": [\n\t\t650,\n\t\t7\n\t],\n\t\"./PointCollection.d\": [\n\t\t1403,\n\t\t7,\n\t\t221\n\t],\n\t\"./PointCollection.d.ts\": [\n\t\t1403,\n\t\t7,\n\t\t221\n\t],\n\t\"./PointCollection.js\": [\n\t\t650,\n\t\t7\n\t],\n\t\"./PointColor\": [\n\t\t651,\n\t\t7\n\t],\n\t\"./PointColor.d\": [\n\t\t1404,\n\t\t7,\n\t\t222\n\t],\n\t\"./PointColor.d.ts\": [\n\t\t1404,\n\t\t7,\n\t\t222\n\t],\n\t\"./PointColor.js\": [\n\t\t651,\n\t\t7\n\t],\n\t\"./PointInfo\": [\n\t\t652,\n\t\t7\n\t],\n\t\"./PointInfo.d\": [\n\t\t1405,\n\t\t7,\n\t\t223\n\t],\n\t\"./PointInfo.d.ts\": [\n\t\t1405,\n\t\t7,\n\t\t223\n\t],\n\t\"./PointInfo.js\": [\n\t\t652,\n\t\t7\n\t],\n\t\"./PointInfoFilled\": [\n\t\t653,\n\t\t7\n\t],\n\t\"./PointInfoFilled.d\": [\n\t\t1406,\n\t\t7,\n\t\t224\n\t],\n\t\"./PointInfoFilled.d.ts\": [\n\t\t1406,\n\t\t7,\n\t\t224\n\t],\n\t\"./PointInfoFilled.js\": [\n\t\t653,\n\t\t7\n\t],\n\t\"./Polygon\": [\n\t\t654,\n\t\t7\n\t],\n\t\"./Polygon.d\": [\n\t\t1407,\n\t\t7,\n\t\t225\n\t],\n\t\"./Polygon.d.ts\": [\n\t\t1407,\n\t\t7,\n\t\t225\n\t],\n\t\"./Polygon.js\": [\n\t\t654,\n\t\t7\n\t],\n\t\"./PolygonCollection\": [\n\t\t655,\n\t\t7\n\t],\n\t\"./PolygonCollection.d\": [\n\t\t1408,\n\t\t7,\n\t\t226\n\t],\n\t\"./PolygonCollection.d.ts\": [\n\t\t1408,\n\t\t7,\n\t\t226\n\t],\n\t\"./PolygonCollection.js\": [\n\t\t655,\n\t\t7\n\t],\n\t\"./PolygonColor\": [\n\t\t656,\n\t\t7\n\t],\n\t\"./PolygonColor.d\": [\n\t\t1409,\n\t\t7,\n\t\t227\n\t],\n\t\"./PolygonColor.d.ts\": [\n\t\t1409,\n\t\t7,\n\t\t227\n\t],\n\t\"./PolygonColor.js\": [\n\t\t656,\n\t\t7\n\t],\n\t\"./PolygonHole\": [\n\t\t657,\n\t\t7\n\t],\n\t\"./PolygonHole.d\": [\n\t\t1410,\n\t\t7,\n\t\t228\n\t],\n\t\"./PolygonHole.d.ts\": [\n\t\t1410,\n\t\t7,\n\t\t228\n\t],\n\t\"./PolygonHole.js\": [\n\t\t657,\n\t\t7\n\t],\n\t\"./PolygonHoleColor\": [\n\t\t658,\n\t\t7\n\t],\n\t\"./PolygonHoleColor.d\": [\n\t\t1411,\n\t\t7,\n\t\t229\n\t],\n\t\"./PolygonHoleColor.d.ts\": [\n\t\t1411,\n\t\t7,\n\t\t229\n\t],\n\t\"./PolygonHoleColor.js\": [\n\t\t658,\n\t\t7\n\t],\n\t\"./Polyline\": [\n\t\t659,\n\t\t7\n\t],\n\t\"./Polyline.d\": [\n\t\t1412,\n\t\t7,\n\t\t230\n\t],\n\t\"./Polyline.d.ts\": [\n\t\t1412,\n\t\t7,\n\t\t230\n\t],\n\t\"./Polyline.js\": [\n\t\t659,\n\t\t7\n\t],\n\t\"./PolylineCollection\": [\n\t\t660,\n\t\t7\n\t],\n\t\"./PolylineCollection.d\": [\n\t\t1413,\n\t\t7,\n\t\t231\n\t],\n\t\"./PolylineCollection.d.ts\": [\n\t\t1413,\n\t\t7,\n\t\t231\n\t],\n\t\"./PolylineCollection.js\": [\n\t\t660,\n\t\t7\n\t],\n\t\"./PolylineColor\": [\n\t\t661,\n\t\t7\n\t],\n\t\"./PolylineColor.d\": [\n\t\t1414,\n\t\t7,\n\t\t232\n\t],\n\t\"./PolylineColor.d.ts\": [\n\t\t1414,\n\t\t7,\n\t\t232\n\t],\n\t\"./PolylineColor.js\": [\n\t\t661,\n\t\t7\n\t],\n\t\"./Print\": [\n\t\t662,\n\t\t7\n\t],\n\t\"./Print.d\": [\n\t\t1415,\n\t\t7,\n\t\t233\n\t],\n\t\"./Print.d.ts\": [\n\t\t1415,\n\t\t7,\n\t\t233\n\t],\n\t\"./Print.js\": [\n\t\t662,\n\t\t7\n\t],\n\t\"./ProcessedData\": [\n\t\t663,\n\t\t7\n\t],\n\t\"./ProcessedData.d\": [\n\t\t1416,\n\t\t7,\n\t\t234\n\t],\n\t\"./ProcessedData.d.ts\": [\n\t\t1416,\n\t\t7,\n\t\t234\n\t],\n\t\"./ProcessedData.js\": [\n\t\t663,\n\t\t7\n\t],\n\t\"./Profile\": [\n\t\t664,\n\t\t7\n\t],\n\t\"./Profile.d\": [\n\t\t1417,\n\t\t7,\n\t\t235\n\t],\n\t\"./Profile.d.ts\": [\n\t\t1417,\n\t\t7,\n\t\t235\n\t],\n\t\"./Profile.js\": [\n\t\t664,\n\t\t7\n\t],\n\t\"./Project\": [\n\t\t293,\n\t\t7\n\t],\n\t\"./Project.d\": [\n\t\t1418,\n\t\t7,\n\t\t236\n\t],\n\t\"./Project.d.ts\": [\n\t\t1418,\n\t\t7,\n\t\t236\n\t],\n\t\"./Project.js\": [\n\t\t293,\n\t\t7\n\t],\n\t\"./ProjectFolder\": [\n\t\t665,\n\t\t7\n\t],\n\t\"./ProjectFolder.d\": [\n\t\t1419,\n\t\t7,\n\t\t237\n\t],\n\t\"./ProjectFolder.d.ts\": [\n\t\t1419,\n\t\t7,\n\t\t237\n\t],\n\t\"./ProjectFolder.js\": [\n\t\t665,\n\t\t7\n\t],\n\t\"./ProjectMoveTo\": [\n\t\t294,\n\t\t7\n\t],\n\t\"./ProjectMoveTo.d\": [\n\t\t1420,\n\t\t7,\n\t\t238\n\t],\n\t\"./ProjectMoveTo.d.ts\": [\n\t\t1420,\n\t\t7,\n\t\t238\n\t],\n\t\"./ProjectMoveTo.js\": [\n\t\t294,\n\t\t7\n\t],\n\t\"./Projects\": [\n\t\t190,\n\t\t7\n\t],\n\t\"./Projects.d\": [\n\t\t1421,\n\t\t7,\n\t\t239\n\t],\n\t\"./Projects.d.ts\": [\n\t\t1421,\n\t\t7,\n\t\t239\n\t],\n\t\"./Projects.js\": [\n\t\t190,\n\t\t7\n\t],\n\t\"./Puzzle\": [\n\t\t666,\n\t\t7\n\t],\n\t\"./Puzzle.d\": [\n\t\t1422,\n\t\t7,\n\t\t240\n\t],\n\t\"./Puzzle.d.ts\": [\n\t\t1422,\n\t\t7,\n\t\t240\n\t],\n\t\"./Puzzle.js\": [\n\t\t666,\n\t\t7\n\t],\n\t\"./RandomPoint\": [\n\t\t667,\n\t\t7\n\t],\n\t\"./RandomPoint.d\": [\n\t\t1423,\n\t\t7,\n\t\t241\n\t],\n\t\"./RandomPoint.d.ts\": [\n\t\t1423,\n\t\t7,\n\t\t241\n\t],\n\t\"./RandomPoint.js\": [\n\t\t667,\n\t\t7\n\t],\n\t\"./Record\": [\n\t\t668,\n\t\t7\n\t],\n\t\"./Record.d\": [\n\t\t1424,\n\t\t7,\n\t\t242\n\t],\n\t\"./Record.d.ts\": [\n\t\t1424,\n\t\t7,\n\t\t242\n\t],\n\t\"./Record.js\": [\n\t\t668,\n\t\t7\n\t],\n\t\"./Rectangle\": [\n\t\t669,\n\t\t7\n\t],\n\t\"./Rectangle.d\": [\n\t\t1425,\n\t\t7,\n\t\t243\n\t],\n\t\"./Rectangle.d.ts\": [\n\t\t1425,\n\t\t7,\n\t\t243\n\t],\n\t\"./Rectangle.js\": [\n\t\t669,\n\t\t7\n\t],\n\t\"./Redo\": [\n\t\t670,\n\t\t7\n\t],\n\t\"./Redo.d\": [\n\t\t1426,\n\t\t7,\n\t\t244\n\t],\n\t\"./Redo.d.ts\": [\n\t\t1426,\n\t\t7,\n\t\t244\n\t],\n\t\"./Redo.js\": [\n\t\t670,\n\t\t7\n\t],\n\t\"./Refresh\": [\n\t\t295,\n\t\t7\n\t],\n\t\"./Refresh.d\": [\n\t\t1427,\n\t\t7,\n\t\t245\n\t],\n\t\"./Refresh.d.ts\": [\n\t\t1427,\n\t\t7,\n\t\t245\n\t],\n\t\"./Refresh.js\": [\n\t\t295,\n\t\t7\n\t],\n\t\"./Rename\": [\n\t\t671,\n\t\t7\n\t],\n\t\"./Rename.d\": [\n\t\t1428,\n\t\t7,\n\t\t246\n\t],\n\t\"./Rename.d.ts\": [\n\t\t1428,\n\t\t7,\n\t\t246\n\t],\n\t\"./Rename.js\": [\n\t\t671,\n\t\t7\n\t],\n\t\"./Reorder\": [\n\t\t672,\n\t\t7\n\t],\n\t\"./Reorder.d\": [\n\t\t1429,\n\t\t7,\n\t\t247\n\t],\n\t\"./Reorder.d.ts\": [\n\t\t1429,\n\t\t7,\n\t\t247\n\t],\n\t\"./Reorder.js\": [\n\t\t672,\n\t\t7\n\t],\n\t\"./Report\": [\n\t\t673,\n\t\t7\n\t],\n\t\"./Report.d\": [\n\t\t1430,\n\t\t7,\n\t\t248\n\t],\n\t\"./Report.d.ts\": [\n\t\t1430,\n\t\t7,\n\t\t248\n\t],\n\t\"./Report.js\": [\n\t\t673,\n\t\t7\n\t],\n\t\"./Reports\": [\n\t\t674,\n\t\t7\n\t],\n\t\"./Reports.d\": [\n\t\t1431,\n\t\t7,\n\t\t249\n\t],\n\t\"./Reports.d.ts\": [\n\t\t1431,\n\t\t7,\n\t\t249\n\t],\n\t\"./Reports.js\": [\n\t\t674,\n\t\t7\n\t],\n\t\"./RestoreData\": [\n\t\t675,\n\t\t7\n\t],\n\t\"./RestoreData.d\": [\n\t\t1432,\n\t\t7,\n\t\t250\n\t],\n\t\"./RestoreData.d.ts\": [\n\t\t1432,\n\t\t7,\n\t\t250\n\t],\n\t\"./RestoreData.js\": [\n\t\t675,\n\t\t7\n\t],\n\t\"./Result\": [\n\t\t676,\n\t\t7\n\t],\n\t\"./Result.d\": [\n\t\t1433,\n\t\t7,\n\t\t251\n\t],\n\t\"./Result.d.ts\": [\n\t\t1433,\n\t\t7,\n\t\t251\n\t],\n\t\"./Result.js\": [\n\t\t676,\n\t\t7\n\t],\n\t\"./ResultMap\": [\n\t\t677,\n\t\t7\n\t],\n\t\"./ResultMap.d\": [\n\t\t1434,\n\t\t7,\n\t\t252\n\t],\n\t\"./ResultMap.d.ts\": [\n\t\t1434,\n\t\t7,\n\t\t252\n\t],\n\t\"./ResultMap.js\": [\n\t\t677,\n\t\t7\n\t],\n\t\"./ReverseLinks\": [\n\t\t678,\n\t\t7\n\t],\n\t\"./ReverseLinks.d\": [\n\t\t1435,\n\t\t7,\n\t\t253\n\t],\n\t\"./ReverseLinks.d.ts\": [\n\t\t1435,\n\t\t7,\n\t\t253\n\t],\n\t\"./ReverseLinks.js\": [\n\t\t678,\n\t\t7\n\t],\n\t\"./Rewind\": [\n\t\t679,\n\t\t7\n\t],\n\t\"./Rewind.d\": [\n\t\t1436,\n\t\t7,\n\t\t254\n\t],\n\t\"./Rewind.d.ts\": [\n\t\t1436,\n\t\t7,\n\t\t254\n\t],\n\t\"./Rewind.js\": [\n\t\t679,\n\t\t7\n\t],\n\t\"./Right\": [\n\t\t364,\n\t\t7\n\t],\n\t\"./Right.d\": [\n\t\t1437,\n\t\t7,\n\t\t255\n\t],\n\t\"./Right.d.ts\": [\n\t\t1437,\n\t\t7,\n\t\t255\n\t],\n\t\"./Right.js\": [\n\t\t364,\n\t\t7\n\t],\n\t\"./RightCompress\": [\n\t\t680,\n\t\t7\n\t],\n\t\"./RightCompress.d\": [\n\t\t1438,\n\t\t7,\n\t\t256\n\t],\n\t\"./RightCompress.d.ts\": [\n\t\t1438,\n\t\t7,\n\t\t256\n\t],\n\t\"./RightCompress.js\": [\n\t\t680,\n\t\t7\n\t],\n\t\"./RightNarrow\": [\n\t\t681,\n\t\t7\n\t],\n\t\"./RightNarrow.d\": [\n\t\t1439,\n\t\t7,\n\t\t257\n\t],\n\t\"./RightNarrow.d.ts\": [\n\t\t1439,\n\t\t7,\n\t\t257\n\t],\n\t\"./RightNarrow.js\": [\n\t\t681,\n\t\t7\n\t],\n\t\"./RightS\": [\n\t\t682,\n\t\t7\n\t],\n\t\"./RightS.d\": [\n\t\t1440,\n\t\t7,\n\t\t258\n\t],\n\t\"./RightS.d.ts\": [\n\t\t1440,\n\t\t7,\n\t\t258\n\t],\n\t\"./RightS.js\": [\n\t\t682,\n\t\t7\n\t],\n\t\"./RotateDevice\": [\n\t\t683,\n\t\t7\n\t],\n\t\"./RotateDevice.d\": [\n\t\t1441,\n\t\t7,\n\t\t259\n\t],\n\t\"./RotateDevice.d.ts\": [\n\t\t1441,\n\t\t7,\n\t\t259\n\t],\n\t\"./RotateDevice.js\": [\n\t\t683,\n\t\t7\n\t],\n\t\"./RotateLeft\": [\n\t\t684,\n\t\t7\n\t],\n\t\"./RotateLeft.d\": [\n\t\t1442,\n\t\t7,\n\t\t260\n\t],\n\t\"./RotateLeft.d.ts\": [\n\t\t1442,\n\t\t7,\n\t\t260\n\t],\n\t\"./RotateLeft.js\": [\n\t\t684,\n\t\t7\n\t],\n\t\"./RotateRight\": [\n\t\t685,\n\t\t7\n\t],\n\t\"./RotateRight.d\": [\n\t\t1443,\n\t\t7,\n\t\t261\n\t],\n\t\"./RotateRight.d.ts\": [\n\t\t1443,\n\t\t7,\n\t\t261\n\t],\n\t\"./RotateRight.js\": [\n\t\t685,\n\t\t7\n\t],\n\t\"./Save\": [\n\t\t686,\n\t\t7\n\t],\n\t\"./Save.d\": [\n\t\t1444,\n\t\t7,\n\t\t262\n\t],\n\t\"./Save.d.ts\": [\n\t\t1444,\n\t\t7,\n\t\t262\n\t],\n\t\"./Save.js\": [\n\t\t686,\n\t\t7\n\t],\n\t\"./SaveAs\": [\n\t\t687,\n\t\t7\n\t],\n\t\"./SaveAs.d\": [\n\t\t1445,\n\t\t7,\n\t\t263\n\t],\n\t\"./SaveAs.d.ts\": [\n\t\t1445,\n\t\t7,\n\t\t263\n\t],\n\t\"./SaveAs.js\": [\n\t\t687,\n\t\t7\n\t],\n\t\"./SeaLevel\": [\n\t\t688,\n\t\t7\n\t],\n\t\"./SeaLevel.d\": [\n\t\t1446,\n\t\t7,\n\t\t264\n\t],\n\t\"./SeaLevel.d.ts\": [\n\t\t1446,\n\t\t7,\n\t\t264\n\t],\n\t\"./SeaLevel.js\": [\n\t\t688,\n\t\t7\n\t],\n\t\"./Search\": [\n\t\t356,\n\t\t7\n\t],\n\t\"./Search.d\": [\n\t\t1447,\n\t\t7,\n\t\t265\n\t],\n\t\"./Search.d.ts\": [\n\t\t1447,\n\t\t7,\n\t\t265\n\t],\n\t\"./Search.js\": [\n\t\t356,\n\t\t7\n\t],\n\t\"./Select\": [\n\t\t689,\n\t\t7\n\t],\n\t\"./Select.d\": [\n\t\t1448,\n\t\t7,\n\t\t266\n\t],\n\t\"./Select.d.ts\": [\n\t\t1448,\n\t\t7,\n\t\t266\n\t],\n\t\"./Select.js\": [\n\t\t689,\n\t\t7\n\t],\n\t\"./SelectAll\": [\n\t\t690,\n\t\t7\n\t],\n\t\"./SelectAll.d\": [\n\t\t1449,\n\t\t7,\n\t\t267\n\t],\n\t\"./SelectAll.d.ts\": [\n\t\t1449,\n\t\t7,\n\t\t267\n\t],\n\t\"./SelectAll.js\": [\n\t\t690,\n\t\t7\n\t],\n\t\"./SelectByAttributes\": [\n\t\t691,\n\t\t7\n\t],\n\t\"./SelectByAttributes.d\": [\n\t\t1450,\n\t\t7,\n\t\t268\n\t],\n\t\"./SelectByAttributes.d.ts\": [\n\t\t1450,\n\t\t7,\n\t\t268\n\t],\n\t\"./SelectByAttributes.js\": [\n\t\t691,\n\t\t7\n\t],\n\t\"./SelectByShape\": [\n\t\t692,\n\t\t7\n\t],\n\t\"./SelectByShape.d\": [\n\t\t1451,\n\t\t7,\n\t\t269\n\t],\n\t\"./SelectByShape.d.ts\": [\n\t\t1451,\n\t\t7,\n\t\t269\n\t],\n\t\"./SelectByShape.js\": [\n\t\t692,\n\t\t7\n\t],\n\t\"./SelectLayer\": [\n\t\t693,\n\t\t7\n\t],\n\t\"./SelectLayer.d\": [\n\t\t1452,\n\t\t7,\n\t\t270\n\t],\n\t\"./SelectLayer.d.ts\": [\n\t\t1452,\n\t\t7,\n\t\t270\n\t],\n\t\"./SelectLayer.js\": [\n\t\t693,\n\t\t7\n\t],\n\t\"./SelectMultiple\": [\n\t\t694,\n\t\t7\n\t],\n\t\"./SelectMultiple.d\": [\n\t\t1453,\n\t\t7,\n\t\t271\n\t],\n\t\"./SelectMultiple.d.ts\": [\n\t\t1453,\n\t\t7,\n\t\t271\n\t],\n\t\"./SelectMultiple.js\": [\n\t\t694,\n\t\t7\n\t],\n\t\"./SelectionByOperation\": [\n\t\t695,\n\t\t7\n\t],\n\t\"./SelectionByOperation.d\": [\n\t\t1454,\n\t\t7,\n\t\t272\n\t],\n\t\"./SelectionByOperation.d.ts\": [\n\t\t1454,\n\t\t7,\n\t\t272\n\t],\n\t\"./SelectionByOperation.js\": [\n\t\t695,\n\t\t7\n\t],\n\t\"./SelectionFiltering\": [\n\t\t696,\n\t\t7\n\t],\n\t\"./SelectionFiltering.d\": [\n\t\t1455,\n\t\t7,\n\t\t273\n\t],\n\t\"./SelectionFiltering.d.ts\": [\n\t\t1455,\n\t\t7,\n\t\t273\n\t],\n\t\"./SelectionFiltering.js\": [\n\t\t696,\n\t\t7\n\t],\n\t\"./SelectionManager\": [\n\t\t697,\n\t\t7\n\t],\n\t\"./SelectionManager.d\": [\n\t\t1456,\n\t\t7,\n\t\t274\n\t],\n\t\"./SelectionManager.d.ts\": [\n\t\t1456,\n\t\t7,\n\t\t274\n\t],\n\t\"./SelectionManager.js\": [\n\t\t697,\n\t\t7\n\t],\n\t\"./Send\": [\n\t\t698,\n\t\t7\n\t],\n\t\"./Send.d\": [\n\t\t1457,\n\t\t7,\n\t\t275\n\t],\n\t\"./Send.d.ts\": [\n\t\t1457,\n\t\t7,\n\t\t275\n\t],\n\t\"./Send.js\": [\n\t\t698,\n\t\t7\n\t],\n\t\"./Server\": [\n\t\t699,\n\t\t7\n\t],\n\t\"./Server.d\": [\n\t\t1458,\n\t\t7,\n\t\t276\n\t],\n\t\"./Server.d.ts\": [\n\t\t1458,\n\t\t7,\n\t\t276\n\t],\n\t\"./Server.js\": [\n\t\t699,\n\t\t7\n\t],\n\t\"./Settings\": [\n\t\t700,\n\t\t7\n\t],\n\t\"./Settings.d\": [\n\t\t1459,\n\t\t7,\n\t\t277\n\t],\n\t\"./Settings.d.ts\": [\n\t\t1459,\n\t\t7,\n\t\t277\n\t],\n\t\"./Settings.js\": [\n\t\t700,\n\t\t7\n\t],\n\t\"./Share\": [\n\t\t701,\n\t\t7\n\t],\n\t\"./Share.d\": [\n\t\t1460,\n\t\t7,\n\t\t278\n\t],\n\t\"./Share.d.ts\": [\n\t\t1460,\n\t\t7,\n\t\t278\n\t],\n\t\"./Share.js\": [\n\t\t701,\n\t\t7\n\t],\n\t\"./Slow\": [\n\t\t702,\n\t\t7\n\t],\n\t\"./Slow.d\": [\n\t\t1461,\n\t\t7,\n\t\t279\n\t],\n\t\"./Slow.d.ts\": [\n\t\t1461,\n\t\t7,\n\t\t279\n\t],\n\t\"./Slow.js\": [\n\t\t702,\n\t\t7\n\t],\n\t\"./Snapping\": [\n\t\t703,\n\t\t7\n\t],\n\t\"./Snapping.d\": [\n\t\t1462,\n\t\t7,\n\t\t280\n\t],\n\t\"./Snapping.d.ts\": [\n\t\t1462,\n\t\t7,\n\t\t280\n\t],\n\t\"./Snapping.js\": [\n\t\t703,\n\t\t7\n\t],\n\t\"./SortAlphabetically\": [\n\t\t704,\n\t\t7\n\t],\n\t\"./SortAlphabetically.d\": [\n\t\t1463,\n\t\t7,\n\t\t281\n\t],\n\t\"./SortAlphabetically.d.ts\": [\n\t\t1463,\n\t\t7,\n\t\t281\n\t],\n\t\"./SortAlphabetically.js\": [\n\t\t704,\n\t\t7\n\t],\n\t\"./SortAscending\": [\n\t\t705,\n\t\t7\n\t],\n\t\"./SortAscending.d\": [\n\t\t1464,\n\t\t7,\n\t\t282\n\t],\n\t\"./SortAscending.d.ts\": [\n\t\t1464,\n\t\t7,\n\t\t282\n\t],\n\t\"./SortAscending.js\": [\n\t\t705,\n\t\t7\n\t],\n\t\"./SortDescending\": [\n\t\t706,\n\t\t7\n\t],\n\t\"./SortDescending.d\": [\n\t\t1465,\n\t\t7,\n\t\t283\n\t],\n\t\"./SortDescending.d.ts\": [\n\t\t1465,\n\t\t7,\n\t\t283\n\t],\n\t\"./SortDescending.js\": [\n\t\t706,\n\t\t7\n\t],\n\t\"./SortReverseAlphabetically\": [\n\t\t707,\n\t\t7\n\t],\n\t\"./SortReverseAlphabetically.d\": [\n\t\t1466,\n\t\t7,\n\t\t284\n\t],\n\t\"./SortReverseAlphabetically.d.ts\": [\n\t\t1466,\n\t\t7,\n\t\t284\n\t],\n\t\"./SortReverseAlphabetically.js\": [\n\t\t707,\n\t\t7\n\t],\n\t\"./Sorticonasc\": [\n\t\t762,\n\t\t7\n\t],\n\t\"./Sorticonasc.d\": [\n\t\t1467,\n\t\t7,\n\t\t285\n\t],\n\t\"./Sorticonasc.d.ts\": [\n\t\t1467,\n\t\t7,\n\t\t285\n\t],\n\t\"./Sorticonasc.js\": [\n\t\t762,\n\t\t7\n\t],\n\t\"./Sorticondesc\": [\n\t\t763,\n\t\t7\n\t],\n\t\"./Sorticondesc.d\": [\n\t\t1468,\n\t\t7,\n\t\t286\n\t],\n\t\"./Sorticondesc.d.ts\": [\n\t\t1468,\n\t\t7,\n\t\t286\n\t],\n\t\"./Sorticondesc.js\": [\n\t\t763,\n\t\t7\n\t],\n\t\"./SpatialProcess\": [\n\t\t708,\n\t\t7\n\t],\n\t\"./SpatialProcess.d\": [\n\t\t1469,\n\t\t7,\n\t\t287\n\t],\n\t\"./SpatialProcess.d.ts\": [\n\t\t1469,\n\t\t7,\n\t\t287\n\t],\n\t\"./SpatialProcess.js\": [\n\t\t708,\n\t\t7\n\t],\n\t\"./SpatialSelection\": [\n\t\t709,\n\t\t7\n\t],\n\t\"./SpatialSelection.d\": [\n\t\t1470,\n\t\t7,\n\t\t288\n\t],\n\t\"./SpatialSelection.d.ts\": [\n\t\t1470,\n\t\t7,\n\t\t288\n\t],\n\t\"./SpatialSelection.js\": [\n\t\t709,\n\t\t7\n\t],\n\t\"./Special\": [\n\t\t710,\n\t\t7\n\t],\n\t\"./Special.d\": [\n\t\t1471,\n\t\t7,\n\t\t289\n\t],\n\t\"./Special.d.ts\": [\n\t\t1471,\n\t\t7,\n\t\t289\n\t],\n\t\"./Special.js\": [\n\t\t710,\n\t\t7\n\t],\n\t\"./SpecialSelections\": [\n\t\t711,\n\t\t7\n\t],\n\t\"./SpecialSelections.d\": [\n\t\t1472,\n\t\t7,\n\t\t290\n\t],\n\t\"./SpecialSelections.d.ts\": [\n\t\t1472,\n\t\t7,\n\t\t290\n\t],\n\t\"./SpecialSelections.js\": [\n\t\t711,\n\t\t7\n\t],\n\t\"./SpecialTools\": [\n\t\t712,\n\t\t7\n\t],\n\t\"./SpecialTools.d\": [\n\t\t1473,\n\t\t7,\n\t\t291\n\t],\n\t\"./SpecialTools.d.ts\": [\n\t\t1473,\n\t\t7,\n\t\t291\n\t],\n\t\"./SpecialTools.js\": [\n\t\t712,\n\t\t7\n\t],\n\t\"./Split\": [\n\t\t713,\n\t\t7\n\t],\n\t\"./Split.d\": [\n\t\t1474,\n\t\t7,\n\t\t292\n\t],\n\t\"./Split.d.ts\": [\n\t\t1474,\n\t\t7,\n\t\t292\n\t],\n\t\"./Split.js\": [\n\t\t713,\n\t\t7\n\t],\n\t\"./Stop\": [\n\t\t714,\n\t\t7\n\t],\n\t\"./Stop.d\": [\n\t\t1475,\n\t\t7,\n\t\t293\n\t],\n\t\"./Stop.d.ts\": [\n\t\t1475,\n\t\t7,\n\t\t293\n\t],\n\t\"./Stop.js\": [\n\t\t714,\n\t\t7\n\t],\n\t\"./StraightSkeleton\": [\n\t\t715,\n\t\t7\n\t],\n\t\"./StraightSkeleton.d\": [\n\t\t1476,\n\t\t7,\n\t\t294\n\t],\n\t\"./StraightSkeleton.d.ts\": [\n\t\t1476,\n\t\t7,\n\t\t294\n\t],\n\t\"./StraightSkeleton.js\": [\n\t\t715,\n\t\t7\n\t],\n\t\"./Subscriptions\": [\n\t\t716,\n\t\t7\n\t],\n\t\"./Subscriptions.d\": [\n\t\t1477,\n\t\t7,\n\t\t295\n\t],\n\t\"./Subscriptions.d.ts\": [\n\t\t1477,\n\t\t7,\n\t\t295\n\t],\n\t\"./Subscriptions.js\": [\n\t\t716,\n\t\t7\n\t],\n\t\"./Sun\": [\n\t\t717,\n\t\t7\n\t],\n\t\"./Sun.d\": [\n\t\t1478,\n\t\t7,\n\t\t296\n\t],\n\t\"./Sun.d.ts\": [\n\t\t1478,\n\t\t7,\n\t\t296\n\t],\n\t\"./Sun.js\": [\n\t\t717,\n\t\t7\n\t],\n\t\"./Support\": [\n\t\t346,\n\t\t7\n\t],\n\t\"./Support.d\": [\n\t\t1479,\n\t\t7,\n\t\t297\n\t],\n\t\"./Support.d.ts\": [\n\t\t1479,\n\t\t7,\n\t\t297\n\t],\n\t\"./Support.js\": [\n\t\t346,\n\t\t7\n\t],\n\t\"./SupportAlt\": [\n\t\t718,\n\t\t7\n\t],\n\t\"./SupportAlt.d\": [\n\t\t1480,\n\t\t7,\n\t\t298\n\t],\n\t\"./SupportAlt.d.ts\": [\n\t\t1480,\n\t\t7,\n\t\t298\n\t],\n\t\"./SupportAlt.js\": [\n\t\t718,\n\t\t7\n\t],\n\t\"./SupportAltTwo\": [\n\t\t719,\n\t\t7\n\t],\n\t\"./SupportAltTwo.d\": [\n\t\t1481,\n\t\t7,\n\t\t299\n\t],\n\t\"./SupportAltTwo.d.ts\": [\n\t\t1481,\n\t\t7,\n\t\t299\n\t],\n\t\"./SupportAltTwo.js\": [\n\t\t719,\n\t\t7\n\t],\n\t\"./TableResults\": [\n\t\t191,\n\t\t7\n\t],\n\t\"./TableResults.d\": [\n\t\t1482,\n\t\t7,\n\t\t300\n\t],\n\t\"./TableResults.d.ts\": [\n\t\t1482,\n\t\t7,\n\t\t300\n\t],\n\t\"./TableResults.js\": [\n\t\t191,\n\t\t7\n\t],\n\t\"./TableView\": [\n\t\t720,\n\t\t7\n\t],\n\t\"./TableView.d\": [\n\t\t1483,\n\t\t7,\n\t\t301\n\t],\n\t\"./TableView.d.ts\": [\n\t\t1483,\n\t\t7,\n\t\t301\n\t],\n\t\"./TableView.js\": [\n\t\t720,\n\t\t7\n\t],\n\t\"./Temperature\": [\n\t\t721,\n\t\t7\n\t],\n\t\"./Temperature.d\": [\n\t\t1484,\n\t\t7,\n\t\t302\n\t],\n\t\"./Temperature.d.ts\": [\n\t\t1484,\n\t\t7,\n\t\t302\n\t],\n\t\"./Temperature.js\": [\n\t\t721,\n\t\t7\n\t],\n\t\"./Terrain3D\": [\n\t\t722,\n\t\t7\n\t],\n\t\"./Terrain3D.d\": [\n\t\t1485,\n\t\t7,\n\t\t303\n\t],\n\t\"./Terrain3D.d.ts\": [\n\t\t1485,\n\t\t7,\n\t\t303\n\t],\n\t\"./Terrain3D.js\": [\n\t\t722,\n\t\t7\n\t],\n\t\"./Terrain3DExaggeration\": [\n\t\t723,\n\t\t7\n\t],\n\t\"./Terrain3DExaggeration.d\": [\n\t\t1486,\n\t\t7,\n\t\t304\n\t],\n\t\"./Terrain3DExaggeration.d.ts\": [\n\t\t1486,\n\t\t7,\n\t\t304\n\t],\n\t\"./Terrain3DExaggeration.js\": [\n\t\t723,\n\t\t7\n\t],\n\t\"./Text\": [\n\t\t724,\n\t\t7\n\t],\n\t\"./Text.d\": [\n\t\t1487,\n\t\t7,\n\t\t305\n\t],\n\t\"./Text.d.ts\": [\n\t\t1487,\n\t\t7,\n\t\t305\n\t],\n\t\"./Text.js\": [\n\t\t724,\n\t\t7\n\t],\n\t\"./TheissenPolygons\": [\n\t\t725,\n\t\t7\n\t],\n\t\"./TheissenPolygons.d\": [\n\t\t1488,\n\t\t7,\n\t\t306\n\t],\n\t\"./TheissenPolygons.d.ts\": [\n\t\t1488,\n\t\t7,\n\t\t306\n\t],\n\t\"./TheissenPolygons.js\": [\n\t\t725,\n\t\t7\n\t],\n\t\"./ThreeD\": [\n\t\t726,\n\t\t7\n\t],\n\t\"./ThreeD.d\": [\n\t\t1489,\n\t\t7,\n\t\t307\n\t],\n\t\"./ThreeD.d.ts\": [\n\t\t1489,\n\t\t7,\n\t\t307\n\t],\n\t\"./ThreeD.js\": [\n\t\t726,\n\t\t7\n\t],\n\t\"./TileView\": [\n\t\t727,\n\t\t7\n\t],\n\t\"./TileView.d\": [\n\t\t1490,\n\t\t7,\n\t\t308\n\t],\n\t\"./TileView.d.ts\": [\n\t\t1490,\n\t\t7,\n\t\t308\n\t],\n\t\"./TileView.js\": [\n\t\t727,\n\t\t7\n\t],\n\t\"./TimePoint\": [\n\t\t728,\n\t\t7\n\t],\n\t\"./TimePoint.d\": [\n\t\t1491,\n\t\t7,\n\t\t309\n\t],\n\t\"./TimePoint.d.ts\": [\n\t\t1491,\n\t\t7,\n\t\t309\n\t],\n\t\"./TimePoint.js\": [\n\t\t728,\n\t\t7\n\t],\n\t\"./Timeline\": [\n\t\t729,\n\t\t7\n\t],\n\t\"./Timeline.d\": [\n\t\t1492,\n\t\t7,\n\t\t310\n\t],\n\t\"./Timeline.d.ts\": [\n\t\t1492,\n\t\t7,\n\t\t310\n\t],\n\t\"./Timeline.js\": [\n\t\t729,\n\t\t7\n\t],\n\t\"./ToogleOff\": [\n\t\t730,\n\t\t7\n\t],\n\t\"./ToogleOff.d\": [\n\t\t1493,\n\t\t7,\n\t\t311\n\t],\n\t\"./ToogleOff.d.ts\": [\n\t\t1493,\n\t\t7,\n\t\t311\n\t],\n\t\"./ToogleOff.js\": [\n\t\t730,\n\t\t7\n\t],\n\t\"./ToogleOn\": [\n\t\t731,\n\t\t7\n\t],\n\t\"./ToogleOn.d\": [\n\t\t1494,\n\t\t7,\n\t\t312\n\t],\n\t\"./ToogleOn.d.ts\": [\n\t\t1494,\n\t\t7,\n\t\t312\n\t],\n\t\"./ToogleOn.js\": [\n\t\t731,\n\t\t7\n\t],\n\t\"./Tools\": [\n\t\t732,\n\t\t7\n\t],\n\t\"./Tools.d\": [\n\t\t1495,\n\t\t7,\n\t\t313\n\t],\n\t\"./Tools.d.ts\": [\n\t\t1495,\n\t\t7,\n\t\t313\n\t],\n\t\"./Tools.js\": [\n\t\t732,\n\t\t7\n\t],\n\t\"./TopView\": [\n\t\t733,\n\t\t7\n\t],\n\t\"./TopView.d\": [\n\t\t1496,\n\t\t7,\n\t\t314\n\t],\n\t\"./TopView.d.ts\": [\n\t\t1496,\n\t\t7,\n\t\t314\n\t],\n\t\"./TopView.js\": [\n\t\t733,\n\t\t7\n\t],\n\t\"./Trace\": [\n\t\t734,\n\t\t7\n\t],\n\t\"./Trace.d\": [\n\t\t1497,\n\t\t7,\n\t\t315\n\t],\n\t\"./Trace.d.ts\": [\n\t\t1497,\n\t\t7,\n\t\t315\n\t],\n\t\"./Trace.js\": [\n\t\t734,\n\t\t7\n\t],\n\t\"./TraceLeft\": [\n\t\t735,\n\t\t7\n\t],\n\t\"./TraceLeft.d\": [\n\t\t1498,\n\t\t7,\n\t\t316\n\t],\n\t\"./TraceLeft.d.ts\": [\n\t\t1498,\n\t\t7,\n\t\t316\n\t],\n\t\"./TraceLeft.js\": [\n\t\t735,\n\t\t7\n\t],\n\t\"./TraceRight\": [\n\t\t736,\n\t\t7\n\t],\n\t\"./TraceRight.d\": [\n\t\t1499,\n\t\t7,\n\t\t317\n\t],\n\t\"./TraceRight.d.ts\": [\n\t\t1499,\n\t\t7,\n\t\t317\n\t],\n\t\"./TraceRight.js\": [\n\t\t736,\n\t\t7\n\t],\n\t\"./Track\": [\n\t\t737,\n\t\t7\n\t],\n\t\"./Track.d\": [\n\t\t1500,\n\t\t7,\n\t\t318\n\t],\n\t\"./Track.d.ts\": [\n\t\t1500,\n\t\t7,\n\t\t318\n\t],\n\t\"./Track.js\": [\n\t\t737,\n\t\t7\n\t],\n\t\"./TsEditor\": [\n\t\t738,\n\t\t7\n\t],\n\t\"./TsEditor.d\": [\n\t\t1501,\n\t\t7,\n\t\t319\n\t],\n\t\"./TsEditor.d.ts\": [\n\t\t1501,\n\t\t7,\n\t\t319\n\t],\n\t\"./TsEditor.js\": [\n\t\t738,\n\t\t7\n\t],\n\t\"./TwoD\": [\n\t\t739,\n\t\t7\n\t],\n\t\"./TwoD.d\": [\n\t\t1502,\n\t\t7,\n\t\t320\n\t],\n\t\"./TwoD.d.ts\": [\n\t\t1502,\n\t\t7,\n\t\t320\n\t],\n\t\"./TwoD.js\": [\n\t\t739,\n\t\t7\n\t],\n\t\"./Undo\": [\n\t\t296,\n\t\t7\n\t],\n\t\"./Undo.d\": [\n\t\t1503,\n\t\t7,\n\t\t321\n\t],\n\t\"./Undo.d.ts\": [\n\t\t1503,\n\t\t7,\n\t\t321\n\t],\n\t\"./Undo.js\": [\n\t\t296,\n\t\t7\n\t],\n\t\"./Ungroup\": [\n\t\t740,\n\t\t7\n\t],\n\t\"./Ungroup.d\": [\n\t\t1504,\n\t\t7,\n\t\t322\n\t],\n\t\"./Ungroup.d.ts\": [\n\t\t1504,\n\t\t7,\n\t\t322\n\t],\n\t\"./Ungroup.js\": [\n\t\t740,\n\t\t7\n\t],\n\t\"./Unknown\": [\n\t\t741,\n\t\t7\n\t],\n\t\"./Unknown.d\": [\n\t\t1505,\n\t\t7,\n\t\t323\n\t],\n\t\"./Unknown.d.ts\": [\n\t\t1505,\n\t\t7,\n\t\t323\n\t],\n\t\"./Unknown.js\": [\n\t\t741,\n\t\t7\n\t],\n\t\"./Unlink\": [\n\t\t742,\n\t\t7\n\t],\n\t\"./Unlink.d\": [\n\t\t1506,\n\t\t7,\n\t\t324\n\t],\n\t\"./Unlink.d.ts\": [\n\t\t1506,\n\t\t7,\n\t\t324\n\t],\n\t\"./Unlink.js\": [\n\t\t742,\n\t\t7\n\t],\n\t\"./Unlock\": [\n\t\t743,\n\t\t7\n\t],\n\t\"./Unlock.d\": [\n\t\t1507,\n\t\t7,\n\t\t325\n\t],\n\t\"./Unlock.d.ts\": [\n\t\t1507,\n\t\t7,\n\t\t325\n\t],\n\t\"./Unlock.js\": [\n\t\t743,\n\t\t7\n\t],\n\t\"./UnmarkHole\": [\n\t\t744,\n\t\t7\n\t],\n\t\"./UnmarkHole.d\": [\n\t\t1508,\n\t\t7,\n\t\t326\n\t],\n\t\"./UnmarkHole.d.ts\": [\n\t\t1508,\n\t\t7,\n\t\t326\n\t],\n\t\"./UnmarkHole.js\": [\n\t\t744,\n\t\t7\n\t],\n\t\"./Up\": [\n\t\t745,\n\t\t7\n\t],\n\t\"./Up.d\": [\n\t\t1509,\n\t\t7,\n\t\t327\n\t],\n\t\"./Up.d.ts\": [\n\t\t1509,\n\t\t7,\n\t\t327\n\t],\n\t\"./Up.js\": [\n\t\t745,\n\t\t7\n\t],\n\t\"./UpS\": [\n\t\t746,\n\t\t7\n\t],\n\t\"./UpS.d\": [\n\t\t1510,\n\t\t7,\n\t\t328\n\t],\n\t\"./UpS.d.ts\": [\n\t\t1510,\n\t\t7,\n\t\t328\n\t],\n\t\"./UpS.js\": [\n\t\t746,\n\t\t7\n\t],\n\t\"./UpTriangle\": [\n\t\t747,\n\t\t7\n\t],\n\t\"./UpTriangle.d\": [\n\t\t1511,\n\t\t7,\n\t\t329\n\t],\n\t\"./UpTriangle.d.ts\": [\n\t\t1511,\n\t\t7,\n\t\t329\n\t],\n\t\"./UpTriangle.js\": [\n\t\t747,\n\t\t7\n\t],\n\t\"./Upload\": [\n\t\t249,\n\t\t7\n\t],\n\t\"./Upload.d\": [\n\t\t1512,\n\t\t7,\n\t\t330\n\t],\n\t\"./Upload.d.ts\": [\n\t\t1512,\n\t\t7,\n\t\t330\n\t],\n\t\"./Upload.js\": [\n\t\t249,\n\t\t7\n\t],\n\t\"./UploadCloud\": [\n\t\t297,\n\t\t7\n\t],\n\t\"./UploadCloud.d\": [\n\t\t1513,\n\t\t7,\n\t\t331\n\t],\n\t\"./UploadCloud.d.ts\": [\n\t\t1513,\n\t\t7,\n\t\t331\n\t],\n\t\"./UploadCloud.js\": [\n\t\t297,\n\t\t7\n\t],\n\t\"./User\": [\n\t\t298,\n\t\t7\n\t],\n\t\"./User.d\": [\n\t\t1514,\n\t\t7,\n\t\t332\n\t],\n\t\"./User.d.ts\": [\n\t\t1514,\n\t\t7,\n\t\t332\n\t],\n\t\"./User.js\": [\n\t\t298,\n\t\t7\n\t],\n\t\"./UserContributor\": [\n\t\t299,\n\t\t7\n\t],\n\t\"./UserContributor.d\": [\n\t\t1515,\n\t\t7,\n\t\t333\n\t],\n\t\"./UserContributor.d.ts\": [\n\t\t1515,\n\t\t7,\n\t\t333\n\t],\n\t\"./UserContributor.js\": [\n\t\t299,\n\t\t7\n\t],\n\t\"./UserOwner\": [\n\t\t300,\n\t\t7\n\t],\n\t\"./UserOwner.d\": [\n\t\t1516,\n\t\t7,\n\t\t334\n\t],\n\t\"./UserOwner.d.ts\": [\n\t\t1516,\n\t\t7,\n\t\t334\n\t],\n\t\"./UserOwner.js\": [\n\t\t300,\n\t\t7\n\t],\n\t\"./UserReader\": [\n\t\t301,\n\t\t7\n\t],\n\t\"./UserReader.d\": [\n\t\t1517,\n\t\t7,\n\t\t335\n\t],\n\t\"./UserReader.d.ts\": [\n\t\t1517,\n\t\t7,\n\t\t335\n\t],\n\t\"./UserReader.js\": [\n\t\t301,\n\t\t7\n\t],\n\t\"./Users\": [\n\t\t170,\n\t\t7\n\t],\n\t\"./Users.d\": [\n\t\t1518,\n\t\t7,\n\t\t336\n\t],\n\t\"./Users.d.ts\": [\n\t\t1518,\n\t\t7,\n\t\t336\n\t],\n\t\"./Users.js\": [\n\t\t170,\n\t\t7\n\t],\n\t\"./Validation\": [\n\t\t748,\n\t\t7\n\t],\n\t\"./Validation.d\": [\n\t\t1519,\n\t\t7,\n\t\t337\n\t],\n\t\"./Validation.d.ts\": [\n\t\t1519,\n\t\t7,\n\t\t337\n\t],\n\t\"./Validation.js\": [\n\t\t748,\n\t\t7\n\t],\n\t\"./ValueRange\": [\n\t\t749,\n\t\t7\n\t],\n\t\"./ValueRange.d\": [\n\t\t1520,\n\t\t7,\n\t\t338\n\t],\n\t\"./ValueRange.d.ts\": [\n\t\t1520,\n\t\t7,\n\t\t338\n\t],\n\t\"./ValueRange.js\": [\n\t\t749,\n\t\t7\n\t],\n\t\"./Variable\": [\n\t\t750,\n\t\t7\n\t],\n\t\"./Variable.d\": [\n\t\t1521,\n\t\t7,\n\t\t339\n\t],\n\t\"./Variable.d.ts\": [\n\t\t1521,\n\t\t7,\n\t\t339\n\t],\n\t\"./Variable.js\": [\n\t\t750,\n\t\t7\n\t],\n\t\"./Vector\": [\n\t\t751,\n\t\t7\n\t],\n\t\"./Vector.d\": [\n\t\t1522,\n\t\t7,\n\t\t340\n\t],\n\t\"./Vector.d.ts\": [\n\t\t1522,\n\t\t7,\n\t\t340\n\t],\n\t\"./Vector.js\": [\n\t\t751,\n\t\t7\n\t],\n\t\"./VectorOperations\": [\n\t\t752,\n\t\t7\n\t],\n\t\"./VectorOperations.d\": [\n\t\t1523,\n\t\t7,\n\t\t341\n\t],\n\t\"./VectorOperations.d.ts\": [\n\t\t1523,\n\t\t7,\n\t\t341\n\t],\n\t\"./VectorOperations.js\": [\n\t\t752,\n\t\t7\n\t],\n\t\"./Voronoi\": [\n\t\t753,\n\t\t7\n\t],\n\t\"./Voronoi.d\": [\n\t\t1524,\n\t\t7,\n\t\t342\n\t],\n\t\"./Voronoi.d.ts\": [\n\t\t1524,\n\t\t7,\n\t\t342\n\t],\n\t\"./Voronoi.js\": [\n\t\t753,\n\t\t7\n\t],\n\t\"./Walking\": [\n\t\t754,\n\t\t7\n\t],\n\t\"./Walking.d\": [\n\t\t1525,\n\t\t7,\n\t\t343\n\t],\n\t\"./Walking.d.ts\": [\n\t\t1525,\n\t\t7,\n\t\t343\n\t],\n\t\"./Walking.js\": [\n\t\t754,\n\t\t7\n\t],\n\t\"./Water\": [\n\t\t755,\n\t\t7\n\t],\n\t\"./Water.d\": [\n\t\t1526,\n\t\t7,\n\t\t344\n\t],\n\t\"./Water.d.ts\": [\n\t\t1526,\n\t\t7,\n\t\t344\n\t],\n\t\"./Water.js\": [\n\t\t755,\n\t\t7\n\t],\n\t\"./Wave\": [\n\t\t756,\n\t\t7\n\t],\n\t\"./Wave.d\": [\n\t\t1527,\n\t\t7,\n\t\t345\n\t],\n\t\"./Wave.d.ts\": [\n\t\t1527,\n\t\t7,\n\t\t345\n\t],\n\t\"./Wave.js\": [\n\t\t756,\n\t\t7\n\t],\n\t\"./WizardConfig\": [\n\t\t757,\n\t\t7\n\t],\n\t\"./WizardConfig.d\": [\n\t\t1528,\n\t\t7,\n\t\t346\n\t],\n\t\"./WizardConfig.d.ts\": [\n\t\t1528,\n\t\t7,\n\t\t346\n\t],\n\t\"./WizardConfig.js\": [\n\t\t757,\n\t\t7\n\t],\n\t\"./ZoneMap\": [\n\t\t758,\n\t\t7\n\t],\n\t\"./ZoneMap.d\": [\n\t\t1529,\n\t\t7,\n\t\t347\n\t],\n\t\"./ZoneMap.d.ts\": [\n\t\t1529,\n\t\t7,\n\t\t347\n\t],\n\t\"./ZoneMap.js\": [\n\t\t758,\n\t\t7\n\t],\n\t\"./ZoomIn\": [\n\t\t759,\n\t\t7\n\t],\n\t\"./ZoomIn.d\": [\n\t\t1530,\n\t\t7,\n\t\t348\n\t],\n\t\"./ZoomIn.d.ts\": [\n\t\t1530,\n\t\t7,\n\t\t348\n\t],\n\t\"./ZoomIn.js\": [\n\t\t759,\n\t\t7\n\t],\n\t\"./ZoomOut\": [\n\t\t760,\n\t\t7\n\t],\n\t\"./ZoomOut.d\": [\n\t\t1531,\n\t\t7,\n\t\t349\n\t],\n\t\"./ZoomOut.d.ts\": [\n\t\t1531,\n\t\t7,\n\t\t349\n\t],\n\t\"./ZoomOut.js\": [\n\t\t760,\n\t\t7\n\t],\n\t\"./ZoomToArea\": [\n\t\t761,\n\t\t7\n\t],\n\t\"./ZoomToArea.d\": [\n\t\t1532,\n\t\t7,\n\t\t350\n\t],\n\t\"./ZoomToArea.d.ts\": [\n\t\t1532,\n\t\t7,\n\t\t350\n\t],\n\t\"./ZoomToArea.js\": [\n\t\t761,\n\t\t7\n\t],\n\t\"./index\": [\n\t\t453,\n\t\t9\n\t],\n\t\"./index.d\": [\n\t\t1533,\n\t\t7,\n\t\t351\n\t],\n\t\"./index.d.ts\": [\n\t\t1533,\n\t\t7,\n\t\t351\n\t],\n\t\"./index.js\": [\n\t\t453,\n\t\t9\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(2).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__.t(id, ids[1])\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 1948;\nmodule.exports = webpackAsyncContext;","export default __webpack_public_path__ + \"static/media/splashscreen.5c79f4ac.jpg\";","import identity from 'lodash/fp/identity'\nimport merge from 'lodash/merge'\nimport IUserProfile from '../../model/IUserProfile'\n\nlet integrationHeaders = {}\n\nif (\n process.env.TEST_INTEGRATION ||\n process.env.REACT_APP__DHI_TARGET_ENV === 'localhost'\n) {\n const env =\n process.env.REACT_APP__DHI_TARGET_ENV || process.env.CI_ENV || 'localhost'\n integrationHeaders = require(`./headers.integration-${env}`)\n}\n\ninterface IApi {\n getJson: (\n resource: string,\n version?: number,\n headers?: object\n ) => Promise\n postJson: (\n resource: string,\n payload?: object,\n version?: number,\n headers?: object\n ) => Promise\n putJson: (\n resource: string,\n payload?: object,\n version?: number,\n headers?: object\n ) => Promise\n patchJson: (\n resource: string,\n payload?: object,\n version?: number,\n headers?: object\n ) => Promise\n delJson: (\n resource: string,\n version?: number,\n headers?: object\n ) => Promise\n}\nexport let metadata: IApi\nexport let cloudHomeBackend: IApi\nexport let coordinateSystem: IApi\nexport let administration: IApi\nexport let metadataRequest\nexport let postConsumptionRequest\n\nexport default function init(config) {\n const metadataUrl = config.metadataUrl\n if (!metadataUrl) {\n return\n }\n metadataRequest = {\n scopes: [config.resourceId + '/.default']\n }\n administration = {\n getJson: makeAdminServiceGet(metadataUrl),\n postJson: makeAdminServicePost(metadataUrl),\n putJson: makeAdminServicePut(metadataUrl),\n patchJson: makeAdminServicePatch(metadataUrl),\n delJson: makeAdminServiceDel(metadataUrl)\n }\n\n metadata = {\n getJson: makeMetadataGet(metadataUrl),\n postJson: makeMetadataPost(metadataUrl),\n putJson: makeMetadataPut(metadataUrl),\n patchJson: makeMetadataPatch(metadataUrl),\n delJson: makeMetadataDel(metadataUrl)\n }\n coordinateSystem = {\n getJson: makeGisServiceGet(metadataUrl),\n postJson: makeGisServicePost(metadataUrl),\n putJson: makeGisServicePut(metadataUrl),\n patchJson: makeGisServicePatch(metadataUrl),\n delJson: makeGisServiceDel(metadataUrl)\n }\n\n postConsumptionRequest = makePlainPost()\n}\n\nexport const isApiError = error => error instanceof ApiError\n\nexport function getUserProfile(userData: any) {\n const user: IUserProfile = {\n id: userData.oid,\n tenantId: userData.TenantId,\n tenantName: userData.TenantName,\n name: userData.sub,\n initials: userData.sub\n .split(' ')\n .map(n => n[0])\n .join(''),\n email: userData.email,\n roles: userData[\n 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role'\n ]\n ? [\n userData[\n 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role'\n ]\n ]\n : []\n }\n return user\n}\n\nexport function getIntegrationHeaders() {\n return integrationHeaders\n}\n\nfunction makeAdminServiceGet(baseUrl, getOptions = identity) {\n return async (resource, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(\n { ...additionalheaders, 'dhi-service-id': 'iam' },\n version\n )\n const defaultOptions = { headers }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [200])\n }\n}\n\nfunction makeAdminServicePost(baseUrl, getOptions = identity) {\n return async (resource, payload, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(\n { ...additionalheaders, 'dhi-service-id': 'iam' },\n version\n )\n const defaultOptions = {\n method: 'POST',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [201, 200])\n }\n}\n\nfunction makeAdminServicePut(baseUrl, getOptions = identity) {\n return async (resource, payload, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(\n { ...additionalheaders, 'dhi-service-id': 'iam' },\n version\n )\n const defaultOptions = {\n method: 'PUT',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [200, 204])\n }\n}\n\nfunction makeAdminServicePatch(baseUrl, getOptions = identity) {\n return async (resource, payload, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(\n { ...additionalheaders, 'dhi-service-id': 'iam' },\n version\n )\n const defaultOptions = {\n method: 'PATCH',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [200])\n }\n}\n\nfunction makeAdminServiceDel(baseUrl, getOptions = identity) {\n return async (resource, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(\n { ...additionalheaders, 'dhi-service-id': 'iam' },\n version\n )\n const defaultOptions = {\n method: 'DELETE',\n headers\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [204])\n }\n}\n\nfunction makeGisServiceGet(baseUrl, getOptions = identity) {\n return async (resource, version = 1) => {\n const headers = buildHeaders({ 'dhi-service-id': 'gis' }, version)\n const defaultOptions = { headers }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [200])\n }\n}\n\nfunction makeGisServicePost(baseUrl, getOptions = identity) {\n return async (resource, payload, version = 1) => {\n const headers = buildHeaders({ 'dhi-service-id': 'gis' }, version)\n const defaultOptions = {\n method: 'POST',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [201, 200])\n }\n}\n\nfunction makeGisServicePut(baseUrl, getOptions = identity) {\n return async (resource, payload, version = 1) => {\n const headers = buildHeaders({ 'dhi-service-id': 'gis' }, version)\n const defaultOptions = {\n method: 'PUT',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [200, 204])\n }\n}\n\nfunction makeGisServicePatch(baseUrl, getOptions = identity) {\n return async (resource, payload, version = 1) => {\n const headers = buildHeaders({ 'dhi-service-id': 'gis' }, version)\n const defaultOptions = {\n method: 'PATCH',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [200])\n }\n}\n\nfunction makeGisServiceDel(baseUrl, getOptions = identity) {\n return async (resource, version = 1) => {\n const headers = buildHeaders({ 'dhi-service-id': 'gis' }, version)\n const defaultOptions = {\n method: 'DELETE',\n headers\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [204])\n }\n}\n\nfunction makeMetadataGet(baseUrl, getOptions = identity) {\n return async (resource, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(additionalheaders, version)\n const defaultOptions = { headers }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [200])\n }\n}\n\nfunction makeMetadataPost(baseUrl, getOptions = identity) {\n return async (resource, payload, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(additionalheaders, version)\n const defaultOptions = {\n method: 'POST',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [201, 200, 204])\n }\n}\n\nfunction makePlainPost(getOptions = identity) {\n return async (url, payload, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(additionalheaders, version)\n const defaultOptions = {\n method: 'POST',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const resp = await fetch(url, options)\n return handleResponse(resp, [201, 200, 204])\n }\n}\n\nfunction makeMetadataPut(baseUrl, getOptions = identity) {\n return async (resource, payload, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(additionalheaders, version)\n const defaultOptions = {\n method: 'PUT',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [200, 204])\n }\n}\n\nfunction makeMetadataPatch(baseUrl, getOptions = identity) {\n return async (resource, payload, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(additionalheaders, version)\n const defaultOptions = {\n method: 'PATCH',\n headers,\n body: payload && JSON.stringify(payload)\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [200])\n }\n}\n\nfunction makeMetadataDel(baseUrl, getOptions = identity) {\n return async (resource, version = 1, additionalheaders = {}) => {\n const headers = buildHeaders(additionalheaders, version)\n const defaultOptions = {\n method: 'DELETE',\n headers\n }\n const options = getOptions(defaultOptions)\n const url = `${baseUrl}/${resource}`\n const resp = await fetch(url, options)\n return handleResponse(resp, [204])\n }\n}\n\nconst buildHeaders = (otherHeader = {}, version = 1) =>\n merge(\n {\n 'api-version': version,\n 'Content-Type': 'application/json; charset=utf-8'\n },\n otherHeader,\n integrationHeaders\n )\n\nconst getResponseBody = async resp => {\n const contentType = resp.headers.get('Content-Type') || ''\n return contentType.includes('application/json')\n ? await resp.json()\n : await resp.text()\n}\n\nexport class ApiError extends Error {\n httpStatus: string\n httpStatusText: string\n body: string\n constructor(httpStatus, httpStatusText, body) {\n super(body?.Title || `${httpStatusText} [${httpStatus}]`)\n this.httpStatus = httpStatus\n this.httpStatusText = httpStatusText\n this.body = body\n }\n}\n\nconst apiError = (resp, body) =>\n new ApiError(resp.status, resp.statusText, body)\n\nconst handleResponse = async (resp, okStatuses) => {\n const result = await getResponseBody(resp)\n\n if (!okStatuses.includes(resp.status)) {\n // eslint-disable-next-line no-console\n console.error(`Invalid status code ${resp.status}, expected ${okStatuses}`)\n\n return Promise.reject(apiError(resp, result))\n }\n\n return result\n}\n","export const SET_USER = 'AUTH/SET_USER'\nexport const setUser = user => ({ type: SET_USER, user })\n\nexport const LOGIN = 'AUTH/LOGIN'\nexport const login = () => ({ type: LOGIN })\n\nexport const LOGOUT = 'AUTH/LOGOUT'\nexport const logout = () => ({ type: LOGOUT })\n\nexport const SET_IS_AUTHENTICATED = 'AUTH/IS_AUTHENTICATED'\nexport const setIsAuthenticated = isAuthenticated => ({\n type: SET_IS_AUTHENTICATED,\n isAuthenticated\n})\n","import ITenant from '../model/ITenant'\nimport { IBillingInformation, ICreateTenantFormValues } from '../apis/admin'\n\nexport const LOAD_TENANTS = 'TENANT/LOAD_TENANTS'\nexport const loadTenants = (canCreateTenants: boolean) => ({\n type: LOAD_TENANTS,\n canCreateTenants\n})\n\nexport const LOADING_TENANTS = 'TENANT/LOADING_TENANTS'\nexport const loadingTenants = (loadingTenants = true) => ({\n type: LOADING_TENANTS,\n loadingTenants\n})\n\nexport const SET_TENANTS = 'TENANT/SET_TENANTS'\nexport const setTenants = (tenants: Array) => ({\n type: SET_TENANTS,\n tenants\n})\n\nexport type UpdateTenantType = {\n type: string\n tenant: ITenant\n billingInformation: IBillingInformation\n}\nexport const UPDATE_TENANT = 'TENANT/UPDATE'\nexport const updateTenant = (\n tenant: ITenant,\n billingInformation: IBillingInformation\n) =>\n ({\n type: UPDATE_TENANT,\n tenant,\n billingInformation\n } as UpdateTenantType)\n\nexport const UPDATING_TENANTS = 'TENANT/UPDATING'\nexport const updatingTenant = (updating = true) => ({\n type: UPDATING_TENANTS,\n updating\n})\n\nexport type SetCurrentTenantNameType = {\n type: string\n id: string\n name: string\n}\nexport const SET_CURRENT_TENANT_NAME = 'TENANT/SET_CURRENT_TENANT_NAME'\nexport const setCurrentTenantName = (id: string, name: string) =>\n ({\n type: SET_CURRENT_TENANT_NAME,\n id,\n name\n } as SetCurrentTenantNameType)\n\nexport const CREATE_TENANT = 'TENANT/CREATE'\nexport const createTenant = (data: ICreateTenantFormValues) => ({\n type: CREATE_TENANT,\n data\n})\n\nexport const CREATING_TENANT = 'TENANT/CREATING'\nexport const creatingTenant = (creating = true) => ({\n type: CREATING_TENANT,\n creating\n})\n","import produce from 'immer'\n\nimport { SET_USER } from '../actions/auth'\nimport { SET_CURRENT_TENANT_NAME } from '../actions/tenant'\nimport IUserProfile from '../model/IUserProfile'\n\ntype AuthState = {\n user: IUserProfile | null\n}\n\nconst initState: AuthState = { user: null }\n\nexport default produce((draft, action) => {\n switch (action.type) {\n case SET_USER:\n draft.user = action.user\n return\n\n case SET_CURRENT_TENANT_NAME:\n if (draft.user) {\n draft.user.tenantName = action.name\n }\n return\n\n default:\n return\n }\n}, initState)\n","import {\n LOADING_ADMIN_CREDITS,\n SET_ADMIN_CREDITS,\n SET_ADMIN_USERROLE,\n SET_BACKOFFICE_USERROLE,\n SET_ROOT_CONTRIBUTOR_USERROLE\n} from '../actions/admin'\n\nexport enum userRole {\n ADMIN = 'Admin',\n OWNER = 'Owner',\n CONTRIBUTOR = 'Contributor',\n READER = 'Reader'\n}\n\nconst initState = {\n credits: 0.0,\n loadingCredits: false,\n isAdmin: false,\n isBackOffice: false,\n isRootContributor: false\n}\n\nconst admin = (state = initState, action) => {\n switch (action.type) {\n case LOADING_ADMIN_CREDITS:\n return { ...state, loadingCredits: action.loadingCredits }\n case SET_ADMIN_CREDITS:\n return { ...state, credits: action.credits }\n case SET_ADMIN_USERROLE:\n return { ...state, isAdmin: action.isAdmin }\n case SET_ROOT_CONTRIBUTOR_USERROLE:\n return { ...state, isRootContributor: action.isRootContributor }\n case SET_BACKOFFICE_USERROLE:\n return { ...state, isBackOffice: action.isBackOffice }\n default:\n return state\n }\n}\n\nexport default admin\n","import uniqid from 'uniqid'\nimport filter from 'lodash/fp/filter'\nimport without from 'lodash/fp/without'\nimport isObject from 'lodash/fp/isObject'\n\nimport { isApiError } from '../apis/support'\n\nexport const ERROR_CODES = {\n AUTH_FAILED: 'AuthError'\n}\n\nexport const getAuthErrors = filter({ name: ERROR_CODES.AUTH_FAILED })\n\nexport const getNotAuthErrors = without({ name: ERROR_CODES.AUTH_FAILED })\n\nexport const parseError = (error, custom = {}) => ({\n id: custom.id || uniqid.time(),\n name: custom.name || (isObject(error) ? error.name : ''),\n message: isObject(error) ? error.message : error,\n isApiError: isApiError(error),\n source: error,\n timestamp: Date.now()\n})\n","import { parseError } from '../helpers/errors'\n\nexport const CONVERT_DATASET = 'CONVERTS/CONVERT_DATASET'\nexport const convertDataset = (projectId, datasetId, data, datasetName) => ({\n type: CONVERT_DATASET,\n projectId,\n datasetId,\n data,\n datasetName\n})\n\nexport const CONVERT_START = 'CONVERTS/CONVERT_START'\nexport const convertStart = (id, title) => ({\n type: CONVERT_START,\n id,\n title\n})\n\nexport const UPDATE_CONVERSION_PROGRESS = 'CONVERTS/UPDATE_PROGRESS'\nexport const updateConversionProgress = (id, progress, title) => ({\n type: UPDATE_CONVERSION_PROGRESS,\n id,\n progress,\n title\n})\n\nexport const CONVERT_COMPLETE = 'CONVERTS/CONVERT_COMPLETE'\nexport const convertComplete = id => ({\n type: CONVERT_COMPLETE,\n id\n})\n\nexport const CONVERT_FAIL = 'CONVERTS/CONVERT_FAIL'\nexport const convertFail = (id, error) => ({\n type: CONVERT_FAIL,\n id,\n error: parseError(error, { id })\n})\n\nexport const REMOVE_CONVERT = 'CONVERTS/REMOVE_CONVERT'\nexport const removeConvert = id => ({\n type: REMOVE_CONVERT,\n id\n})\n","export const EXPORT_TYPE = 'Export'\n\nexport const FILE_DATASET_TYPE = 'file'\n\nexport const FILE_EXPORTER_ID = 'file'\n\nexport const EXPORT_STATES = {\n PENDING: 'PENDING',\n IN_PROGRESS: 'IN_PROGRESS',\n DONE: 'DONE',\n FAILED: 'FAILED'\n}\n\nexport const DOWNLOAD_TYPE = 'Download'\n","import produce from 'immer'\nimport find from 'lodash/fp/find'\nimport findIndex from 'lodash/fp/findIndex'\n\nimport {\n CONVERT_DATASET,\n CONVERT_START,\n UPDATE_CONVERSION_PROGRESS,\n CONVERT_COMPLETE,\n CONVERT_FAIL,\n REMOVE_CONVERT\n} from '../actions/converts'\n\nimport { EXPORT_STATES } from '../helpers/export'\n\nexport default produce((draft, action) => {\n const { type, ...payload } = action\n\n const convertItem = findConvert(payload.id)(draft)\n\n switch (type) {\n case CONVERT_DATASET: {\n draft.push({\n ...payload,\n id: payload.datasetId,\n state: EXPORT_STATES.PENDING\n })\n return\n }\n\n case CONVERT_START: {\n convertItem.state = EXPORT_STATES.IN_PROGRESS\n convertItem.title = payload.title\n convertItem.progress = 0\n return\n }\n\n case UPDATE_CONVERSION_PROGRESS: {\n convertItem.progress = payload.progress\n return\n }\n\n case CONVERT_COMPLETE: {\n convertItem.state = EXPORT_STATES.DONE\n return\n }\n\n case CONVERT_FAIL: {\n convertItem.state = EXPORT_STATES.FAILED\n convertItem.error = payload.error\n return\n }\n\n case REMOVE_CONVERT: {\n removeConvert(action.id)(draft)\n return\n }\n\n default:\n return\n }\n}, [])\n\nconst findConvert = id => find({ id })\nconst removeConvert = id => draft => draft.splice(findIndex({ id })(draft), 1)\n","export const LOAD_CUSTOMER_USERS = 'CUSTOMER_USERS/LOAD'\nexport const loadCustomerUsers = searchText => ({\n type: LOAD_CUSTOMER_USERS,\n searchText\n})\n\nexport const LOADING_CUSTOMER_USERS = 'CUSTOMER_USERS/LOADING'\nexport const loadingCustomerUsers = (loading = true) => ({\n type: LOADING_CUSTOMER_USERS,\n loading\n})\n\nexport const SET_CUSTOMER_USERS = 'CUSTOMER_USERS/SET'\nexport const setCustomerUsers = customerUsers => ({\n type: SET_CUSTOMER_USERS,\n customerUsers\n})\n","import produce from 'immer'\n\nimport {\n LOAD_CUSTOMER_USERS,\n LOADING_CUSTOMER_USERS,\n SET_CUSTOMER_USERS\n} from '../actions/customerUsers'\n\nconst initState = {\n loading: false,\n searchText: null,\n data: {}\n}\n\nexport default produce((draft, action) => {\n switch (action.type) {\n case LOAD_CUSTOMER_USERS:\n draft.searchText = action.searchText\n return\n\n case SET_CUSTOMER_USERS:\n draft.data = action.customerUsers\n return\n\n case LOADING_CUSTOMER_USERS:\n draft.loading = action.loading\n return\n\n default:\n return\n }\n}, initState)\n","export const LOAD_DATASET_READERS = 'DATASET_READERS/LOAD'\nexport const loadDatasetReaders = () => ({\n type: LOAD_DATASET_READERS\n})\n\nexport const LOADING_DATASET_READERS = 'DATASET_READERS/LOADING'\nexport const loadingDatasetReaders = (loading = true) => ({\n type: LOADING_DATASET_READERS,\n loading\n})\n\nexport const SET_DATASET_READERS = 'DATASET_READERS/SET'\nexport const setDatasetReaders = (\n datasetFileReaders,\n datasetDedicatedReaders\n) => ({\n type: SET_DATASET_READERS,\n datasetFileReaders,\n datasetDedicatedReaders\n})\n","import produce from 'immer'\n\nimport {\n LOADING_DATASET_READERS,\n SET_DATASET_READERS\n} from '../actions/datasetReaders'\n\nexport default produce(\n (draft, action) => {\n switch (action.type) {\n case LOADING_DATASET_READERS:\n draft.loading = action.loading\n return\n\n case SET_DATASET_READERS:\n draft.data = action.datasetFileReaders.concat(\n action.datasetDedicatedReaders\n )\n draft.dedicated = action.datasetDedicatedReaders\n draft.fileReaders = action.datasetFileReaders\n return\n\n default:\n return\n }\n },\n { loading: false, data: [], dedicated: [], fileReaders: [] }\n)\n","export const LOAD_DATASET_WRITERS = 'DATASET_WRITERS/LOAD'\nexport const loadDatasetWriters = () => ({\n type: LOAD_DATASET_WRITERS\n})\n\nexport const LOADING_DATASET_WRITERS = 'DATASET_WRITERS/LOADING'\nexport const loadingDatasetWriters = (loading = true) => ({\n type: LOADING_DATASET_WRITERS,\n loading\n})\n\nexport const SET_DATASET_WRITERS = 'DATASET_WRITERS/SET'\nexport const setDatasetWriters = (\n datasetFileWriters,\n datasetDedicatedWriters\n) => ({\n type: SET_DATASET_WRITERS,\n datasetFileWriters,\n datasetDedicatedWriters\n})\n","import produce from 'immer'\n\nimport {\n LOADING_DATASET_WRITERS,\n SET_DATASET_WRITERS\n} from '../actions/datasetWriters'\n\nexport default produce(\n (draft, action) => {\n switch (action.type) {\n case LOADING_DATASET_WRITERS:\n draft.loading = action.loading\n return\n\n case SET_DATASET_WRITERS:\n draft.data = action.datasetFileWriters.concat(\n action.datasetDedicatedWriters\n )\n draft.dedicated = action.datasetDedicatedWriters\n draft.fileWriters = action.datasetFileWriters\n return\n\n default:\n return\n }\n },\n { loading: false, data: [], dedicated: [], fileWriters: [] }\n)\n","import { parseError } from '../helpers/errors'\n\nexport const ADD_ERROR = 'ERRORS/ADD'\nexport const addError = (name, error) => ({\n type: ADD_ERROR,\n error: parseError(error, { name })\n})\n\nexport const REMOVE_ERROR = 'ERRORS/REMOVE'\nexport const removeError = id => ({\n type: REMOVE_ERROR,\n id\n})\n","import produce from 'immer'\n\nimport { ADD_ERROR, REMOVE_ERROR } from '../actions/errors'\n\nexport default produce((draft, action) => {\n switch (action.type) {\n case ADD_ERROR:\n draft.push(action.error)\n return\n\n case REMOVE_ERROR:\n return draft.filter(error => error.id !== action.id)\n\n default:\n return\n }\n}, [])\n","import { parseError } from '../helpers/errors'\n\nexport const EXPORT_DATASET = 'EXPORTS/EXPORT_DATASET'\nexport const exportDataset = (id, fileName, datasetId, projectId, data) => ({\n type: EXPORT_DATASET,\n id,\n fileName,\n datasetId,\n projectId,\n data\n})\n\nexport const EXPORT_START = 'EXPORTS/EXPORT_START'\nexport const exportStart = (id, title) => ({\n type: EXPORT_START,\n id,\n title\n})\n\nexport const UPDATE_EXPORT_PROGRESS = 'EXPORTS/UPDATE_PROGRESS'\nexport const updateExportProgress = (id, progress, title) => ({\n type: UPDATE_EXPORT_PROGRESS,\n id,\n progress,\n title\n})\n\nexport const EXPORT_COMPLETE = 'EXPORTS/EXPORT_COMPLETE'\nexport const exportComplete = id => ({\n type: EXPORT_COMPLETE,\n id\n})\n\nexport const EXPORT_FAIL = 'EXPORTS/EXPORT_FAIL'\nexport const exportFail = (id, error) => ({\n type: EXPORT_FAIL,\n id,\n error: parseError(error, { id })\n})\n\nexport const REMOVE_EXPORT = 'EXPORTS/REMOVE_EXPORT'\nexport const removeExport = id => ({\n type: REMOVE_EXPORT,\n id\n})\n","import produce from 'immer'\nimport find from 'lodash/fp/find'\nimport findIndex from 'lodash/fp/findIndex'\n\nimport {\n EXPORT_DATASET,\n EXPORT_START,\n UPDATE_EXPORT_PROGRESS,\n EXPORT_COMPLETE,\n EXPORT_FAIL,\n REMOVE_EXPORT\n} from '../actions/exports'\n\nimport { EXPORT_STATES } from '../helpers/export'\n\nexport default produce((draft, action) => {\n const { type, ...payload } = action\n\n const exportItem = findExport(payload.id)(draft)\n\n switch (type) {\n case EXPORT_DATASET:\n draft.push({\n ...payload,\n state: EXPORT_STATES.PENDING\n })\n return\n\n case EXPORT_START:\n exportItem.state = EXPORT_STATES.IN_PROGRESS\n exportItem.progress = 0\n return\n\n case UPDATE_EXPORT_PROGRESS:\n exportItem.progress = payload.progress\n return\n\n case EXPORT_COMPLETE:\n exportItem.state = EXPORT_STATES.DONE\n return\n\n case EXPORT_FAIL:\n exportItem.state = EXPORT_STATES.FAILED\n exportItem.error = payload.error\n return\n\n case REMOVE_EXPORT:\n removeExport(action.id)(draft)\n return\n\n default:\n return\n }\n}, [])\n\nconst findExport = id => find({ id })\nconst removeExport = id => draft => draft.splice(findIndex({ id })(draft), 1)\n","import { parseError } from '../helpers/errors'\n\nexport const IMPORT_FILE = 'IMPORTS/IMPORT_FILE'\nexport const importFile = (id, fileName, fileUrl, projectId, data) => ({\n type: IMPORT_FILE,\n id,\n fileName,\n fileUrl,\n projectId,\n data\n})\n\nexport const IMPORT_START = 'IMPORTS/IMPORT_START'\nexport const importStart = (\n id,\n createdBy,\n projectId,\n state,\n data,\n initialId = null\n) => ({\n type: IMPORT_START,\n id,\n createdBy,\n projectId,\n state,\n data,\n initialId\n})\n\nexport const UPDATE_PROGRESS = 'IMPORTS/UPDATE_PROGRESS'\nexport const updateProgress = (id, progress) => ({\n type: UPDATE_PROGRESS,\n id,\n progress\n})\n\nexport const IMPORT_COMPLETE = 'IMPORTS/IMPORT_COMPLETE'\nexport const importComplete = id => ({\n type: IMPORT_COMPLETE,\n id\n})\n\nexport const IMPORT_FAIL = 'IMPORTS/IMPORT_FAIL'\nexport const importFail = (id, error) => ({\n type: IMPORT_FAIL,\n id,\n error: parseError(error, { id })\n})\n\nexport const REMOVE_IMPORT = 'IMPORTS/REMOVE_IMPORT'\nexport const removeImport = id => ({\n type: REMOVE_IMPORT,\n id\n})\n","import { metadata } from './support'\n\nexport const TRANSFER_STATUSES = {\n NONE: 'None',\n PENDING: 'Pending',\n IN_PROGRESS: 'InProgress',\n COMPLETED: 'Completed',\n ERROR: 'Error'\n}\n\nexport const getTransfer = id => {\n return metadata.getJson(`conversion/transfer/${id}`, 2)\n}\n\nexport const transferUploadConvert = body => {\n return metadata.postJson('conversion/upload-convert', body, 3)\n}\n\nexport const transferConvert = (datasetId, body) => {\n return metadata.postJson(`metadata/dataset/${datasetId}/convert`, body, 3)\n}\n\nexport const transferDownloadConvert = (datasetId, body) => {\n return metadata.postJson(\n `metadata/dataset/${datasetId}/download-convert`,\n body,\n 3\n )\n}\n","import produce from 'immer'\nimport find from 'lodash/fp/find'\nimport findIndex from 'lodash/fp/findIndex'\n\nimport {\n IMPORT_START,\n UPDATE_PROGRESS,\n IMPORT_COMPLETE,\n IMPORT_FAIL,\n REMOVE_IMPORT\n} from '../actions/imports'\n\nimport { TRANSFER_STATUSES } from '../apis/transfer'\n\nexport default produce((draft, action) => {\n const { type, ...payload } = action\n\n if (\n ![\n IMPORT_START,\n UPDATE_PROGRESS,\n IMPORT_COMPLETE,\n IMPORT_FAIL,\n REMOVE_IMPORT\n ].includes(type)\n ) {\n return\n }\n\n const importItem = findOrCreateImportItem(draft, action)\n\n switch (type) {\n case IMPORT_START: {\n importItem.state = action.state\n return\n }\n\n case UPDATE_PROGRESS:\n importItem.progress = payload.progress\n return\n\n case IMPORT_COMPLETE:\n importItem.state = TRANSFER_STATUSES.COMPLETED\n return\n\n case IMPORT_FAIL:\n importItem.state = TRANSFER_STATUSES.ERROR\n importItem.error = payload.error\n return\n\n case REMOVE_IMPORT:\n removeImport(action.id)(draft)\n return\n\n default:\n return\n }\n}, [])\n\nconst findOrCreateImportItem = (draft, action) => {\n const { ...payload } = action\n\n var importItem = findImport(payload.id)(draft)\n\n if (!importItem) {\n const item = {\n id: action.id,\n projectId: action.projectId,\n createdBy: action.createdBy,\n state: action.state,\n data: action.data,\n error: null,\n progress: 0,\n initialId: action.initialId\n }\n draft.push(item)\n return item\n }\n\n return importItem\n}\n\nconst findImport = id => find({ id })\n// const findImportByUploadId = initialId => find({ initialId })\nconst removeImport = id => draft => draft.splice(findIndex({ id })(draft), 1)\n","import produce from 'immer'\nimport merge from 'lodash/merge'\n\nimport { UPDATE } from 'react-intl-redux'\n\nconst initState = {\n locale: '',\n messages: {},\n formats: {}\n}\n\nconst intlReducer = produce((draft, action) => {\n switch (action.type) {\n case UPDATE:\n merge(draft, action.payload)\n return\n\n default:\n return\n }\n}, initState)\n\nexport default intlReducer\n","import identity from 'lodash/identity'\n\nexport const LOAD_PROJECTCONTENT = 'PROJECT/LOAD_CONTENT'\nexport const loadProjectContent = (\n projectId,\n page = 0,\n rowsPerPage = 25,\n sortBy = 'UpdatedAt',\n sortOrder = 'Desc',\n namePrefix = ''\n) => ({\n type: LOAD_PROJECTCONTENT,\n projectId,\n page,\n rowsPerPage,\n sortBy,\n sortOrder,\n namePrefix\n})\n\nexport const SET_PROJECT_CONTENT = 'PROJECT/SET_CONTENT'\nexport const setProjectContent = (\n projectContent,\n totalCount,\n rowsPerPage,\n offset,\n namePrefix,\n sortBy,\n sortOrder\n) => ({\n type: SET_PROJECT_CONTENT,\n projectContent,\n totalCount,\n rowsPerPage,\n offset,\n namePrefix,\n sortBy,\n sortOrder\n})\n\nexport const SET_PROJECT_ROWSPERPAGE = 'PROJECT/SET_ROWSPERPAGE'\nexport const setProjectRowsPerPage = rowsPerPage => ({\n type: SET_PROJECT_ROWSPERPAGE,\n rowsPerPage\n})\n\nexport const SET_PROJECT_PAGINATION = 'PROJECT/SET_PAGINATION'\nexport const setProjectPagination = page => ({\n type: SET_PROJECT_PAGINATION,\n page\n})\n\nexport const LOAD_PROJECT_MEMBERS = 'PROJECT/LOAD_MEMBERS'\nexport const loadProjectMembers = projectId => ({\n type: LOAD_PROJECT_MEMBERS,\n projectId\n})\n\nexport const LOADING_PROJECT_MEMBERS = 'PROJECT/LOADING_MEMBERS'\nexport const loadingProjectMembers = (loading = true) => ({\n type: LOADING_PROJECT_MEMBERS,\n loading\n})\n\nexport const SET_PROJECT_MEMBERS = 'PROJECT/SET_MEMBERS'\nexport const setProjectMembers = members => ({\n type: SET_PROJECT_MEMBERS,\n members\n})\n\nexport const UPDATE_PROJECT_DATASET = 'PROJECT/UPDATE_DATASET'\nexport const updateProjectDataset = (projectId, data) => ({\n type: UPDATE_PROJECT_DATASET,\n data,\n projectId\n})\n\nexport const UPDATING_PROJECT_DATASET = 'PROJECT/UPDATING_DATASET'\nexport const updatingProjectDataset = (updating = true) => ({\n type: UPDATING_PROJECT_DATASET,\n updating\n})\n\nexport const LOAD_PROJECT_DATASETS = 'PROJECT/LOAD_DATASETS'\nexport const loadProjectDatasets = projectId => ({\n type: LOAD_PROJECT_DATASETS,\n projectId\n})\n\nexport const LOADING_PROJECT_DATASETS = 'PROJECT/LOADING_DATASETS'\nexport const loadingProjectDatasets = (loading = true) => ({\n type: LOADING_PROJECT_DATASETS,\n loading\n})\n\nexport const SET_PROJECT_DATASETS = 'PROJECT/SET_DATASETS'\nexport const setProjectDatasets = datasets => ({\n type: SET_PROJECT_DATASETS,\n datasets\n})\n\nexport const DELETE_PROJECT_DATASETS = 'PROJECT/DELETE_DATASETS'\nexport const deleteProjectDatasets = (projectId, datasetIds) => ({\n type: DELETE_PROJECT_DATASETS,\n projectId,\n datasetIds\n})\n\nexport const DELETE_PROJECT_FOLDERS = 'PROJECT/DELETE_FOLDERS'\nexport const deleteSubProjects = (projectParentId, projectIds) => ({\n type: DELETE_PROJECT_FOLDERS,\n projectParentId,\n projectIds\n})\n\nexport const DELETING_PROJECT_FOLDERS = 'PROJECT/DELETING_FOLDERS'\nexport const deletingSubProjects = (loading = true) => ({\n type: DELETING_PROJECT_FOLDERS,\n loading\n})\n\nexport const DELETING_PROJECT_DATASETS = 'PROJECT/DELETING_DATASETS'\nexport const deletingProjectDatasets = (loading = true) => ({\n type: DELETING_PROJECT_DATASETS,\n loading\n})\n\nexport const LOAD_PROJECT_DETAILS = 'PROJECT/LOAD_DETAILS'\nexport const loadProjectDetails = id => ({ type: LOAD_PROJECT_DETAILS, id })\n\nexport const LOADING_PROJECT_DETAILS = 'PROJECT/LOADING_DETAILS'\nexport const loadingProjectDetails = (loading = true) => ({\n type: LOADING_PROJECT_DETAILS,\n loading\n})\n\nexport const SET_PROJECT_DETAILS = 'PROJECT/SET_DETAILS'\nexport const setProjectDetails = (details, capabilities) => ({\n type: SET_PROJECT_DETAILS,\n details,\n capabilities\n})\n\nexport const LOAD_PROJECT_SUBPROJECTS = 'PROJECT/LOAD_SUBPROJECTS'\nexport const loadProjectSubprojects = (projectId, forTable = true) => ({\n type: LOAD_PROJECT_SUBPROJECTS,\n projectId,\n forTable\n})\n\nexport const LOADING_PROJECT_SUBPROJECTS = 'PROJECT/LOADING_SUBPROJECTS'\nexport const loadingProjectSubprojects = (loading = true) => ({\n type: LOADING_PROJECT_SUBPROJECTS,\n loading\n})\n\nexport const SET_PROJECT_SUBPROJECTS = 'PROJECT/SET_SUBPROJECTS'\nexport const setProjectSubprojects = subprojects => ({\n type: SET_PROJECT_SUBPROJECTS,\n subprojects\n})\n\nexport const LOADING_PROJECT_SUBPROJECTS_TREE =\n 'PROJECT/LOADING_SUBPROJECTS_TREE'\nexport const loadingProjectSubprojectsTree = (loading = true) => ({\n type: LOADING_PROJECT_SUBPROJECTS_TREE,\n loading\n})\n\nexport const SET_PROJECT_SUBPROJECTS_TREE = 'PROJECT/SET_SUBPROJECTS_TREE'\nexport const setProjectSubprojectsTree = (\n subprojects,\n parentProjectId,\n tree\n) => ({\n type: SET_PROJECT_SUBPROJECTS_TREE,\n subprojects,\n parentProjectId,\n tree\n})\n\nexport const LOAD_PROJECT_PARENT = 'PROJECT/LOAD_PARENT'\nexport const loadProjectParent = () => ({\n type: LOAD_PROJECT_PARENT\n})\n\nexport const LOADING_PROJECT_PARENT = 'PROJECT/LOADING_PARENT'\nexport const loadingProjectParent = (loading = true) => ({\n type: LOADING_PROJECT_PARENT,\n loading\n})\n\nexport const SET_PROJECT_PARENT = 'PROJECT/SET_PARENT'\nexport const setProjectParent = parentProject => ({\n type: SET_PROJECT_PARENT,\n parentProject\n})\n\nexport const LOAD_PROJECT_ROOT = 'PROJECT/LOAD_ROOT'\nexport const loadProjectRoot = project => ({\n type: LOAD_PROJECT_ROOT,\n project\n})\n\nexport const LOADING_PROJECT_INITIAL_TREE = 'PROJECT/LOADING_INITIAL_TREE'\nexport const loadingProjectInitialTree = (loading = true) => ({\n type: LOADING_PROJECT_INITIAL_TREE,\n loading\n})\n\nexport const SET_PROJECT_ROOT = 'PROJECT/SET_ROOT'\nexport const setProjectRoot = rootProject => ({\n type: SET_PROJECT_ROOT,\n rootProject\n})\n\nexport const SET_PROJECT_INITIAL_TREE = 'PROJECT/SET_INITIAL_TREE'\nexport const setProjectInitialTree = initialtree => ({\n type: SET_PROJECT_INITIAL_TREE,\n initialtree\n})\n\nexport const RESET_PROJECT_INITIAL_TREE = 'PROJECT/RESET_INITIAL_TREE'\nexport const resetProjectInitialTree = {\n type: RESET_PROJECT_INITIAL_TREE,\n data: { project: [] }\n}\n\nexport const UPDATE_PROJECT_DETAILS = 'PROJECT/UPDATE_DETAILS'\nexport const updateProjectDetails = (data, projectDidUpdate = identity) => ({\n type: UPDATE_PROJECT_DETAILS,\n data,\n projectDidUpdate\n})\n\nexport const MOVE_PROJECT_CONTENT = 'PROJECT/MOVE_CONTENT'\nexport const moveContent = (\n targetProjectId,\n projectIds,\n datasetIds,\n projectId\n) => ({\n type: MOVE_PROJECT_CONTENT,\n targetProjectId,\n projectIds,\n datasetIds,\n projectId\n})\n\nexport const MOVING_PROJECT_CONTENT = 'PROJECT/MOVING_CONTENT'\nexport const movingContent = (moving = true) => ({\n type: MOVING_PROJECT_CONTENT,\n moving\n})\n\nexport const LOAD_PROJECT_PATH = 'PROJECT/LOAD_PATH'\nexport const loadProjectPath = projectId => ({\n type: LOAD_PROJECT_PATH,\n projectId\n})\n\nexport const LOADING_PROJECT_PATH = 'PROJECT/LOADING_PATH'\nexport const loadingProjectPath = (loading = true) => ({\n type: LOADING_PROJECT_PATH,\n loading\n})\n\nexport const SET_PROJECT_PATH = 'PROJECT/SET_PATH'\nexport const setProjectPath = data => ({\n type: SET_PROJECT_PATH,\n data\n})\n","import produce from 'immer'\n\nimport {\n LOADING_PROJECT_MEMBERS,\n SET_PROJECT_MEMBERS,\n LOADING_PROJECT_DETAILS,\n SET_PROJECT_DETAILS,\n DELETING_PROJECT_DATASETS,\n LOADING_PROJECT_DATASETS,\n SET_PROJECT_DATASETS,\n UPDATE_PROJECT_DATASET,\n LOADING_PROJECT_SUBPROJECTS,\n SET_PROJECT_SUBPROJECTS,\n LOADING_PROJECT_PARENT,\n SET_PROJECT_PARENT,\n MOVING_PROJECT_CONTENT,\n LOADING_PROJECT_INITIAL_TREE,\n SET_PROJECT_ROOT,\n SET_PROJECT_INITIAL_TREE,\n SET_PROJECT_SUBPROJECTS_TREE,\n LOADING_PROJECT_PATH,\n SET_PROJECT_PATH,\n SET_PROJECT_PAGINATION,\n SET_PROJECT_ROWSPERPAGE,\n SET_PROJECT_CONTENT\n} from '../actions/project'\n\nconst initState = {\n pagination: {\n page: 0,\n rowsPerPage: 0\n },\n details: {\n capabilities: null,\n data: null,\n loading: true\n },\n datasets: {\n data: null,\n loading: false,\n deleting: false,\n updating: false\n },\n members: {\n data: null,\n loading: false\n },\n subprojects: {\n data: null,\n loading: false\n },\n parent: {\n data: null,\n loading: false\n },\n tree: {\n data: null,\n loading: false\n },\n initialtree: {\n data: { project: [] },\n loading: false\n },\n content: {\n moving: false\n },\n path: {\n data: null,\n loading: false\n },\n projectContent: {\n data: [],\n sortBy: 'updatedAt',\n sortOrder: 'desc',\n totalCount: 0,\n offset: 0,\n namePrefix: '',\n rowsPerPage: 25\n }\n}\n\nexport default produce((draft, action) => {\n switch (action.type) {\n case SET_PROJECT_PAGINATION:\n draft.pagination.page = action.page\n return\n\n case SET_PROJECT_ROWSPERPAGE:\n draft.pagination.rowsPerPage = action.rowsPerPage\n return\n\n case UPDATE_PROJECT_DATASET:\n draft.datasets.updating = action.updating\n return\n\n case DELETING_PROJECT_DATASETS:\n draft.datasets.deleting = action.deleting\n return\n\n case LOADING_PROJECT_DETAILS:\n draft.details.loading = action.loading\n return\n\n case SET_PROJECT_DETAILS:\n draft.details.data = action.details\n draft.details.capabilities = action.capabilities\n return\n\n case SET_PROJECT_MEMBERS:\n draft.members.data = action.members\n return\n\n case LOADING_PROJECT_MEMBERS:\n draft.members.loading = action.loading\n return\n\n case LOADING_PROJECT_DATASETS:\n draft.datasets.loading = action.loading\n return\n\n case SET_PROJECT_DATASETS:\n draft.datasets.data = action.datasets\n return\n\n case LOADING_PROJECT_SUBPROJECTS:\n draft.subprojects.loading = action.loading\n return\n\n case SET_PROJECT_SUBPROJECTS:\n draft.subprojects.data = action.subprojects\n return\n\n case LOADING_PROJECT_PARENT:\n draft.parent.loading = action.loading\n return\n\n case SET_PROJECT_PARENT:\n draft.parent.data = action.parentProject\n return\n\n case MOVING_PROJECT_CONTENT:\n draft.content.moving = action.moving\n return\n\n case LOADING_PROJECT_INITIAL_TREE:\n draft.initialtree.loading = action.loading\n return\n\n case SET_PROJECT_ROOT:\n draft.tree.data = action.rootProject\n return\n\n case SET_PROJECT_INITIAL_TREE:\n draft.initialtree.data = action.initialtree\n return\n\n case SET_PROJECT_SUBPROJECTS_TREE:\n draft.tree.data = {\n ...action.tree,\n [action.parentProjectId]: action.subprojects || []\n }\n return\n\n case LOADING_PROJECT_PATH:\n draft.path.loading = action.loading\n return\n\n case SET_PROJECT_PATH:\n draft.path.data = action.data\n return\n\n case SET_PROJECT_CONTENT:\n draft.projectContent = {\n data: action.projectContent,\n offset: action.offset,\n rowsPerPage: action.rowsPerPage,\n sortBy: action.sortBy,\n sortOrder: action.sortOrder,\n namePrefix: action.namePrefix,\n totalCount: action.totalCount\n }\n return\n\n default:\n return\n }\n}, initState)\n","import identity from 'lodash/identity'\n\nexport const SET_PROJECTS_SEARCHTEXT = 'PROJECTS/SET_SEARCHTEXT'\nexport const setProjectsSearchText = text => ({\n type: SET_PROJECTS_SEARCHTEXT,\n text\n})\n\nexport const SET_PROJECTS_PAGINATION = 'PROJECTS/SET_PAGINATION'\nexport const setProjectsPagination = page => ({\n type: SET_PROJECTS_PAGINATION,\n page\n})\n\nexport const SET_PROJECTS_ROWSPERPAGE = 'PROJECTS/SET_ROWSPERPAGE'\nexport const setProjectsRowsPerPage = rowsPerPage => ({\n type: SET_PROJECTS_ROWSPERPAGE,\n rowsPerPage\n})\n\nexport const SET_PROJECTS_NAMEPREFIX = 'PROJECTS/SET_NAMEPREFIX'\nexport const setProjectsNamePrefix = namePrefix => ({\n type: SET_PROJECTS_NAMEPREFIX,\n namePrefix\n})\n\nexport const DELETE_PROJECTS = 'PROJECTS/DELETE'\nexport const deleteProjects = (ids, projectsDidDelete = () => {}) => ({\n type: DELETE_PROJECTS,\n ids,\n projectsDidDelete\n})\n\nexport const DELETING_PROJECTS = 'PROJECTS/DELETING'\nexport const deletingProjects = (deleting = true) => ({\n type: DELETING_PROJECTS,\n deleting\n})\n\nexport const UPDATE_PROJECT = 'PROJECTS/UPDATE'\nexport const updateProject = (data, projectDidUpdate = identity) => ({\n type: UPDATE_PROJECT,\n data,\n projectDidUpdate\n})\n\nexport const UPDATING_PROJECT = 'PROJECTS/UPDATING'\nexport const updatingProject = (updating = true) => ({\n type: UPDATING_PROJECT,\n updating\n})\n\nexport const CREATE_PROJECT = 'PROJECTS/CREATE'\nexport const createProject = (data, projectDidCreate = identity) => ({\n type: CREATE_PROJECT,\n data,\n projectDidCreate\n})\n\nexport const CREATE_SUBPROJECT = 'PROJECTS/CREATEFOLDER'\nexport const createNewFolder = (data, projectDidCreate = identity) => ({\n type: CREATE_SUBPROJECT,\n data,\n projectDidCreate\n})\n\nexport const CREATING_PROJECT = 'PROJECTS/CREATING'\nexport const creatingProject = (creating = true) => ({\n type: CREATING_PROJECT,\n creating\n})\n\nexport const LOAD_PROJECTS = 'PROJECTS/LOAD'\nexport const loadProjects = (\n my = false,\n page = 0,\n rowsPerPage = 25,\n sortBy = 'UpdatedAt',\n sortOrder = 'Desc',\n namePrefix = ''\n) => ({\n type: LOAD_PROJECTS,\n my,\n page,\n rowsPerPage,\n sortBy,\n sortOrder,\n namePrefix\n})\n\nexport const LOADING_PROJECTS = 'PROJECTS/LOADING'\nexport const loadingProjects = (my = false, loading = true) => ({\n type: LOADING_PROJECTS,\n my,\n loading\n})\n\nexport const SET_PROJECTS = 'PROJECTS/SET'\nexport const setProjects = projects => ({ type: SET_PROJECTS, projects })\n","import IProject from '../model/IProject'\n\nimport {\n LOADING_PROJECTS,\n SET_PROJECTS,\n CREATING_PROJECT,\n UPDATING_PROJECT,\n DELETING_PROJECTS,\n SET_PROJECTS_PAGINATION,\n SET_PROJECTS_ROWSPERPAGE,\n SET_PROJECTS_SEARCHTEXT\n} from '../actions/projects'\n\nconst initState = {\n data: Array(),\n loading: false,\n creating: false,\n deleting: false,\n namePrefix: '',\n sortBy: 'UpdatedAt',\n sortOrder: 'Desc',\n totalCount: 0,\n offset: 0,\n page: 0,\n rowsPerPage: 25,\n my: false\n}\n\nconst projects = (state = initState, action) => {\n switch (action.type) {\n case SET_PROJECTS_SEARCHTEXT:\n return { ...state, namePrefix: action.text }\n\n case SET_PROJECTS_PAGINATION:\n return { ...state, page: action.page }\n\n case SET_PROJECTS_ROWSPERPAGE:\n return { ...state, rowsPerPage: action.rowsPerPage }\n\n case DELETING_PROJECTS:\n return { ...state, deleting: action.deleting }\n\n case CREATING_PROJECT:\n return { ...state, creating: action.creating }\n\n case UPDATING_PROJECT:\n return { ...state, updating: action.updating }\n\n case LOADING_PROJECTS:\n return { ...state, my: action.my, loading: action.loading }\n\n case SET_PROJECTS:\n return {\n ...state,\n data: action.projects.newData,\n offset: action.projects.offset,\n rowsPerPage: action.projects.rowsPerPage,\n sortBy: action.projects.sortBy,\n sortOrder: action.projects.sortOrder,\n namePrefix: action.projects.namePrefix,\n totalCount: action.projects.totalCount\n }\n\n default:\n return state\n }\n}\n\nexport default projects\n","export const RESTORE_RECYCLE_BIN_ITEMS_DELETED_BY_ME =\n 'RECYCLE_BIN/RESTORE_ITEMS_DELETED_BY_ME'\nexport const restoreRecycleBinItemsDeletedByMe = (tenantId, ids) => ({\n type: RESTORE_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n tenantId,\n ids\n})\n\nexport const RESTORING_RECYCLE_BIN_ITEMS_DELETED_BY_ME =\n 'RECYCLE_BIN/RESTORING_ITEMS_DELETED_BY_ME'\nexport const restoringRecycleBinItemsDeletedByMe = (restoring = true) => ({\n type: RESTORING_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n restoring\n})\n\nexport const LOAD_RECYCLE_BIN_ITEMS_DELETED_BY_ME =\n 'RECYCLE_BIN/LOAD_ITEMS_DELETED_BY_ME'\nexport const loadRecycleBinItemsDeletedByMe = (\n tenantId,\n offset = 0,\n limit = 10,\n sortBy = 'Name',\n sortOrder = 'Asc'\n) => ({\n type: LOAD_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n tenantId,\n offset,\n limit,\n sortBy,\n sortOrder\n})\n\nexport const SET_RECYCLE_BIN_ITEMS_DELETED_BY_ME =\n 'RECYCLE_BIN/SET_ITEMS_DELETED_BY_ME'\nexport const setRecycleBinItemsDeletedByMe = itemsDeletedByMe => ({\n type: SET_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n itemsDeletedByMe\n})\n\nexport const LOADING_RECYCLE_BIN_ITEMS_DELETED_BY_ME =\n 'RECYCLE_BIN/LOADING_ITEMS_DELETED_BY_ME'\nexport const loadingRecycleBinItemsDeletedByMe = (loading = true) => ({\n type: LOADING_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n loading\n})\n","import produce from 'immer'\n\nimport {\n LOADING_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n SET_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n RESTORING_RECYCLE_BIN_ITEMS_DELETED_BY_ME\n} from '../actions/recycleBin'\n\nconst initState = {\n itemsDeletedByMe: {\n loading: false,\n restoring: false,\n offset: 0,\n limit: 10,\n sortBy: 'Name',\n sortOrder: 'Asc',\n totalCount: 0,\n data: []\n }\n /* content: {\n loading: false,\n deleting: false,\n restoring: false,\n data: {\n projects: [],\n datasets: [],\n datasetProjects: {}\n }\n },\n project: {\n deleting: false,\n details: {\n loading: false,\n data: null\n },\n datasets: {\n loading: false,\n data: []\n }\n } */\n}\n\nconst TAG = 'recycleBin'\n\nconst reducer = produce((draft, action) => {\n switch (action.type) {\n case LOADING_RECYCLE_BIN_ITEMS_DELETED_BY_ME:\n draft.itemsDeletedByMe.loading = action.loading\n return\n\n case SET_RECYCLE_BIN_ITEMS_DELETED_BY_ME:\n draft.itemsDeletedByMe.data = action.itemsDeletedByMe.data\n draft.itemsDeletedByMe.offset = action.itemsDeletedByMe.offset\n draft.itemsDeletedByMe.limit = action.itemsDeletedByMe.limit\n if (typeof action.itemsDeletedByMe.sortBy !== 'undefined') {\n draft.itemsDeletedByMe.sortBy = action.itemsDeletedByMe.sortBy\n }\n if (typeof action.itemsDeletedByMe.sortOrder !== 'undefined') {\n draft.itemsDeletedByMe.sortOrder = action.itemsDeletedByMe.sortOrder\n }\n draft.itemsDeletedByMe.totalCount = action.itemsDeletedByMe.totalCount\n return\n\n case RESTORING_RECYCLE_BIN_ITEMS_DELETED_BY_ME:\n draft.itemsDeletedByMe.restoring = action.restoring\n return\n\n default:\n return\n }\n}, initState)\n\nexport default reducer\n","export const SET_CONFIG = 'UI/SET_CONFIG'\nexport const setConfig = config => ({\n type: SET_CONFIG,\n config\n})\n\nexport const DISMISS_PROGRESS_ITEM = 'UI/DISMISS_PROGRESS_ITEM'\nexport const dismissProgressItem = id => ({\n type: DISMISS_PROGRESS_ITEM,\n id\n})\n\nexport const OPEN_POPUP_REMINDER = 'UI/OPEN_POPUP_REMINDER'\nexport const openPopupReminder = (open = true) => ({\n type: OPEN_POPUP_REMINDER,\n open\n})\n\nexport const SUPRESS_POPUP_REMINDER = 'UI/SURPRESS_POPUP_REMINDER'\nexport const surpressPopupReminder = surpress => ({\n type: SUPRESS_POPUP_REMINDER,\n surpress\n})\n\nexport const NOTIFY = 'UI/NOTIFY'\nexport const notify = message => ({\n type: NOTIFY,\n message\n})\n\nexport const SHOW_NOTIFICATION = 'UI/SHOW_NOTIFICATION'\nexport const showNotification = message => ({\n type: SHOW_NOTIFICATION,\n message\n})\n\nexport const SHOW_LINK = 'UI/SHOW_LINK'\nexport const showLink = (message, project) => ({\n type: SHOW_LINK,\n message,\n project\n})\n","import produce from 'immer'\n\nimport {\n SHOW_NOTIFICATION,\n SET_CONFIG,\n SHOW_LINK,\n OPEN_POPUP_REMINDER,\n SUPRESS_POPUP_REMINDER\n} from '../actions/ui'\n\nconst initState = {\n openPopupReminder: false,\n surpressPopupReminder: Boolean(\n localStorage.getItem('supressActivatePopupReminder') &&\n localStorage.getItem('supressActivatePopupReminder') === 'true'\n ),\n popupReminderIsOpen: false,\n appStatus: null,\n notification: null,\n linkToProject: null,\n linkNotification: null\n}\n\nexport default produce((draft, action) => {\n switch (action.type) {\n case SET_CONFIG:\n draft.config = action.config\n return\n\n case OPEN_POPUP_REMINDER:\n draft.popupReminderIsOpen = action.open\n return\n\n case SUPRESS_POPUP_REMINDER:\n draft.surpressPopupReminder = action.surpress\n return\n\n case SHOW_NOTIFICATION:\n draft.notification = action.message\n return\n\n case SHOW_LINK:\n draft.linkToProject = action.project\n draft.linkNotification = action.message\n return\n\n default:\n return\n }\n}, initState)\n","import { parseError } from '../helpers/errors'\n\nexport const UPLOAD_FILE = 'UPLOADS/UPLOAD_FILE'\nexport const uploadFile = (id, fileName, file) => ({\n type: UPLOAD_FILE,\n id,\n fileName,\n file\n})\n\nexport const UPLOAD_START = 'UPLOADS/UPLOAD_START'\nexport const uploadStart = id => ({\n type: UPLOAD_START,\n id\n})\n\nexport const UPDATE_PROGRESS = 'UPLOADS/UPDATE_PROGRESS'\nexport const updateProgress = (id, progress, fileName) => ({\n type: UPDATE_PROGRESS,\n id,\n progress,\n fileName\n})\n\nexport const UPLOAD_COMPLETE = 'UPLOADS/UPLOAD_COMPLETE'\nexport const uploadComplete = (id, fileUrl) => ({\n type: UPLOAD_COMPLETE,\n id,\n fileUrl\n})\n\nexport const UPLOAD_FAIL = 'UPLOADS/UPLOAD_FAIL'\nexport const uploadFail = (id, error) => ({\n type: UPLOAD_FAIL,\n id,\n error: parseError(error, { id })\n})\n\nexport const REMOVE_UPLOAD = 'UPLOADS/REMOVE_UPLOAD'\nexport const removeUpload = id => ({\n type: REMOVE_UPLOAD,\n id\n})\n","export const UPLOAD_STATES = {\n PENDING: 'PENDING',\n IN_PROGRESS: 'IN_PROGRESS',\n DONE: 'DONE',\n FAILED: 'FAILED'\n}\n\nexport const UPLOAD_TYPE = 'Upload'\n","import produce from 'immer'\nimport find from 'lodash/fp/find'\nimport findIndex from 'lodash/fp/findIndex'\n\nimport {\n UPLOAD_FILE,\n UPLOAD_START,\n UPLOAD_COMPLETE,\n UPLOAD_FAIL,\n UPDATE_PROGRESS,\n REMOVE_UPLOAD\n} from '../actions/uploads'\n\nimport { UPLOAD_STATES } from '../helpers/upload'\n\nexport default produce((draft, action) => {\n const { type, ...payload } = action\n\n const upload = findUpload(payload.id)(draft)\n\n switch (type) {\n case UPLOAD_FILE:\n draft.push({\n ...payload,\n state: UPLOAD_STATES.PENDING\n })\n return\n\n case UPLOAD_START:\n upload.state = UPLOAD_STATES.IN_PROGRESS\n upload.progress = 0\n return\n\n case UPDATE_PROGRESS:\n upload.progress = payload.progress\n return\n\n case UPLOAD_COMPLETE:\n upload.state = UPLOAD_STATES.DONE\n upload.fileUrl = action.fileUrl\n return\n\n case UPLOAD_FAIL:\n upload.state = UPLOAD_STATES.FAILED\n upload.error = payload.error\n return\n\n case REMOVE_UPLOAD:\n removeUpload(action.id)(draft)\n return\n\n default:\n return\n }\n}, [])\n\nconst findUpload = id => find({ id })\nconst removeUpload = id => draft => draft.splice(findIndex({ id })(draft), 1)\n","import { IApplications } from '../model/Applications'\n\nexport const LOAD_APPS = 'APPLICATIONS/LOAD_APPS'\nexport const loadApplications = () => ({ type: LOAD_APPS })\n\nexport const LOADING_APPS = 'APPLICATIONS/LOADING_APPS'\nexport const loadingApps = (loading = true) => ({\n type: LOADING_APPS,\n loading\n})\n\nexport const SET_APPS = 'APPLICATIONS/SET_APPS'\nexport const setApps = (apps: IApplications) => ({\n type: SET_APPS,\n apps\n})\n","import { LOADING_APPS, SET_APPS } from '../actions/applications'\n\nconst initState = {\n data: [],\n loading: false,\n loadingApps: false,\n apps: {}\n}\n\nconst applications = (state = initState, action) => {\n switch (action.type) {\n case LOADING_APPS:\n return { ...state, loadingApps: action.loading }\n case SET_APPS:\n return { ...state, apps: action.apps }\n default:\n return state\n }\n}\n\nexport default applications\n","//import { IProgressItem } from '@mike/mike-shared-frontend/mike-topbar-progress-spinner';\nimport { ITrackProgressItem } from '../model/ITrackProgressItem'\n\nexport const REMOVE_PROGRESS_ITEM = 'PROGRESS/REMOVE_ITEM'\nexport const removeProgressItem = (progressItem: ITrackProgressItem) => ({\n type: REMOVE_PROGRESS_ITEM,\n progressItem\n})\n\nexport const UPDATE_OR_ADD_PROGRESS_ITEM = 'PROGRESS/UPDATE_OR_ADD_ITEM'\nexport const updateOrAddProgressItem = (progressItem: ITrackProgressItem) => ({\n type: UPDATE_OR_ADD_PROGRESS_ITEM,\n progressItem\n})\n\nexport const PROGRESS_ITEM_COMPLETE = 'PROGRESS/ITEM_COMPLETE'\nexport const progressItemComplete = (progressItem: ITrackProgressItem) => ({\n type: PROGRESS_ITEM_COMPLETE,\n progressItem\n})\n\nexport const PROGRESS_ITEM_FAILED = 'PROGRESS/ITEM_FAILED'\nexport const progressItemFailed = (progressItem: ITrackProgressItem) => ({\n type: PROGRESS_ITEM_FAILED,\n progressItem\n})\n","import produce from 'immer'\nimport findIndex from 'lodash/fp/findIndex'\nimport { ITrackProgressItem } from '../model/ITrackProgressItem'\nimport {\n REMOVE_PROGRESS_ITEM,\n UPDATE_OR_ADD_PROGRESS_ITEM,\n PROGRESS_ITEM_FAILED,\n PROGRESS_ITEM_COMPLETE\n} from '../actions/progressItems'\n\nconst progressItems = produce((draft, action) => {\n const { type } = action\n if (\n ![\n UPDATE_OR_ADD_PROGRESS_ITEM,\n PROGRESS_ITEM_COMPLETE,\n PROGRESS_ITEM_FAILED,\n REMOVE_PROGRESS_ITEM\n ].includes(type)\n ) {\n return\n }\n\n const progressItem = findOrCreateProgressItem(draft, action)\n\n switch (action.type) {\n case UPDATE_OR_ADD_PROGRESS_ITEM: {\n progressItem.progressValue = action.progressItem.progressValue\n progressItem.title =\n action.progressItem.title && action.progressItem.title\n progressItem.importId =\n action.progressItem.importId && action.progressItem.importId\n return\n }\n\n case PROGRESS_ITEM_COMPLETE: {\n progressItem.progressValue = 100\n progressItem.done = true\n return\n }\n\n case PROGRESS_ITEM_FAILED: {\n progressItem.error = true\n progressItem.title = 'Error in ' + progressItem.title\n return\n }\n\n case REMOVE_PROGRESS_ITEM: {\n removeProgressItem(progressItem.id)(draft)\n return\n }\n\n default:\n return\n }\n}, Array())\n\nconst findOrCreateProgressItem = (draft, action) => {\n var progressItem = findProgressItem(action.progressItem)(draft)\n\n if (!progressItem) {\n const item: ITrackProgressItem = {\n id: action.progressItem.id,\n title: action.progressItem.title,\n progressValue: 0,\n error: false,\n done: false\n }\n draft.push(item)\n return item\n }\n\n return progressItem\n}\n\nconst findProgressItem = (item: ITrackProgressItem) => (\n draft: ITrackProgressItem[]\n) =>\n draft.find(\n (p: ITrackProgressItem) =>\n p.id === item.id || (p.importId && p.importId === item.id)\n )\n\nconst removeProgressItem = id => draft =>\n draft.splice(findIndex({ id })(draft), 1)\n\nexport default progressItems\n","export const LOAD_COORDINATE_SYSTEMS = 'COORDINATE_SYSTEMS/LOAD'\nexport const loadCoordinateSystems = () => ({\n type: LOAD_COORDINATE_SYSTEMS\n})\n\nexport const LOADING_COORDINATE_SYSTEMS = 'COORDINATE_SYSTEMS/LOADING'\nexport const loadingCoordinateSystems = (loading = true) => ({\n type: LOADING_COORDINATE_SYSTEMS,\n loading\n})\n\nexport const SET_COORDINATE_SYSTEMS = 'COORDINATE_SYSTEMS/SET'\nexport const setCoordinateSystems = coordinateSystems => ({\n type: SET_COORDINATE_SYSTEMS,\n coordinateSystems\n})\n\nexport const GET_COORDINATE_SYSTEMS_BY_ID = 'COORDINATE_SYSTEMS/GET_BY_ID'\nexport const getCoordinateSystemsById = id => ({\n type: GET_COORDINATE_SYSTEMS_BY_ID,\n id\n})\n\nexport const FILTER_COORDINATE_SYSTEMS = 'COORDINATE_SYSTEMS/FILTER'\nexport const filterCoordinateSystems = filter => ({\n type: FILTER_COORDINATE_SYSTEMS,\n filter\n})\n\nexport const SET_SELECTED_COORDINATE_SYSTEMS = 'COORDINATE_SYSTEMS/SELECTED'\nexport const setSelectedCoordinateSystems = coordinateSystems => ({\n type: SET_SELECTED_COORDINATE_SYSTEMS,\n coordinateSystems\n})\n","import IProjection from '../model/IProjection'\n\nimport {\n LOADING_COORDINATE_SYSTEMS,\n SET_COORDINATE_SYSTEMS,\n FILTER_COORDINATE_SYSTEMS,\n GET_COORDINATE_SYSTEMS_BY_ID\n} from '../actions/coordinateSystems'\n\nconst initState = {\n allCoordinateSystems: [],\n loadingCoordinateSystems: false,\n selectedCoordinateSystems: [],\n searchById: false\n}\n\nconst coordinateSystems = (state = initState, action) => {\n switch (action.type) {\n case LOADING_COORDINATE_SYSTEMS:\n return { ...state, loadingCoordinateSystems: action.loading }\n case SET_COORDINATE_SYSTEMS:\n return { ...state, allCoordinateSystems: action.coordinateSystems }\n case FILTER_COORDINATE_SYSTEMS: {\n const allCS = [...state.allCoordinateSystems]\n const names = allCS.filter((coordinateSystem: IProjection) =>\n coordinateSystem.name\n .toLowerCase()\n .includes(action.filter.toLowerCase())\n )\n return {\n ...state,\n searchCoordinateSystemsById: false,\n selectedCoordinateSystems: names\n }\n }\n\n case GET_COORDINATE_SYSTEMS_BY_ID: {\n const _allCS = [...state.allCoordinateSystems]\n const ids = _allCS.filter((coordinateSystem: IProjection) =>\n coordinateSystem.id.toString().startsWith(action.id.toString())\n )\n return {\n ...state,\n searchCoordinateSystemsById: true,\n selectedCoordinateSystems: ids\n }\n }\n\n default:\n return state\n }\n}\n\nexport default coordinateSystems\n","export const LOAD_ADMIN_CREDITS = 'ADMIN/LOAD_CREDITS'\nexport const loadAdminCredits = () => ({\n type: LOAD_ADMIN_CREDITS\n})\n\nexport const LOADING_ADMIN_CREDITS = 'ADMIN/LOADING_CREDITS'\nexport const loadingAdminCredits = (loadingCredits = true) => ({\n type: LOADING_ADMIN_CREDITS,\n loadingCredits\n})\n\nexport const SET_ADMIN_CREDITS = 'ADMIN/SET_CREDITS'\nexport const setAdminCredits = (credits: number) => ({\n type: SET_ADMIN_CREDITS,\n credits\n})\n\nexport const SET_ADMIN_USERROLE = 'ADMIN/SET_ADMINROLE'\nexport const setIsAdmin = (isAdmin: boolean) => ({\n type: SET_ADMIN_USERROLE,\n isAdmin\n})\n\nexport const SET_BACKOFFICE_USERROLE = 'ADMIN/SET_BACKOFFICEROLE'\nexport const setIsBackOffice = (isBackOffice: boolean) => ({\n type: SET_BACKOFFICE_USERROLE,\n isBackOffice\n})\n\nexport const SET_ROOT_CONTRIBUTOR_USERROLE = 'ADMIN/SET_ROOTCONTRIBUTORROLE'\nexport const setIsRootContributor = (isRootContributor: boolean) => ({\n type: SET_ROOT_CONTRIBUTOR_USERROLE,\n isRootContributor\n})\n","export enum StateEnum {\n INIT = 'INIT',\n LOADING = 'LOADING',\n LOADED = 'LOADED',\n ERROR = 'ERROR'\n}\n","import orderBy from 'lodash/orderBy'\nimport {\n LOADING_TENANTS,\n SET_TENANTS,\n SET_CURRENT_TENANT_NAME\n} from '../actions/tenant'\nimport ITenant from '../model/ITenant'\n\nexport const TENANT = 'dhi.tenant'\n\ntype TentState = {\n tenants: ITenant[]\n loadingTenants: boolean\n}\n\nconst initState: TentState = {\n tenants: new Array(),\n loadingTenants: false\n}\n\nconst tenant = (state = initState, action): TentState => {\n switch (action.type) {\n case LOADING_TENANTS:\n return { ...state, loadingTenants: action.loadingTenants }\n case SET_TENANTS: {\n const sortedTenants = orderBy(action.tenants, [\n (tenant: ITenant) => tenant.name.toLowerCase()\n ])\n return {\n ...state,\n tenants: sortedTenants\n }\n }\n case SET_CURRENT_TENANT_NAME:\n return {\n ...state,\n tenants: state.tenants.map(tenant => {\n if (tenant.id === action.id) {\n return { ...tenant, name: action.name }\n }\n return tenant\n })\n }\n\n default:\n return state\n }\n}\n\nexport default tenant\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport ITenantUser from '../model/ITenantUser'\n\ntype UserState = {\n users: ITenantUser[]\n loadingUsers: boolean\n rowsPerPage: number\n}\n\nconst initState: UserState = {\n users: new Array(),\n loadingUsers: false,\n rowsPerPage: 25\n}\n\nconst usersSlice = createSlice({\n name: 'users',\n initialState: initState as UserState,\n reducers: {\n setLoadingUsers: (\n state,\n action: PayloadAction<{ loadingUsers: boolean }>\n ): UserState => {\n return {\n ...state,\n loadingUsers: action.payload.loadingUsers\n }\n },\n setUsers: (\n state,\n action: PayloadAction<{ users: ITenantUser[] }>\n ): UserState => {\n return {\n ...state,\n users: action.payload.users\n }\n },\n setUsersRowsPerPage: (\n state,\n action: PayloadAction<{ rowsPerPage: number }>\n ): UserState => {\n return {\n ...state,\n rowsPerPage: action.payload.rowsPerPage\n }\n }\n }\n})\n\nexport const {\n setLoadingUsers,\n setUsers,\n setUsersRowsPerPage\n} = usersSlice.actions\n\nexport default usersSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport IAPIAccess from '../model/IAPIAccess'\n\nimport { StateEnum } from '../model/StateEnum'\n\nexport type APIAccessState = {\n apiAccessList: IAPIAccess[]\n state: StateEnum\n}\n\nconst initState = {\n apiAccessList: [],\n state: StateEnum.INIT\n} as APIAccessState\n\nconst apiAccessSlice = createSlice({\n name: 'apiAccess',\n initialState: initState as APIAccessState,\n reducers: {\n setApiAccessLoadingState: (\n state,\n action: PayloadAction<{ loadingState: boolean }>\n ): APIAccessState => {\n return {\n ...state,\n state: action.payload.loadingState\n ? StateEnum.LOADING\n : StateEnum.LOADED\n }\n },\n setAPIAccesssList: (\n state,\n action: PayloadAction<{ apiAccess: IAPIAccess[] }>\n ): APIAccessState => {\n return {\n ...state,\n apiAccessList: action.payload.apiAccess,\n state: StateEnum.LOADED\n }\n },\n updateAPIAccessItem: (\n state,\n action: PayloadAction<{ apiAccess: IAPIAccess }>\n ): APIAccessState => {\n return {\n ...state,\n apiAccessList: state.apiAccessList.map(apiAccess => {\n if (apiAccess.accountId === action.payload.apiAccess.accountId) {\n return action.payload.apiAccess\n }\n return apiAccess\n })\n }\n },\n deleteAPIAccessList: (\n state,\n action: PayloadAction<{ apiAccessList: IAPIAccess[] }>\n ): APIAccessState => {\n const ids = action.payload.apiAccessList.map(\n apiAccess => apiAccess.accountId\n )\n return {\n ...state,\n apiAccessList: state.apiAccessList.filter(\n apiAccess => !ids.includes(apiAccess.accountId)\n )\n }\n },\n addAPIAccessList: (\n state,\n action: PayloadAction<{ apiAccessList: IAPIAccess[] }>\n ): APIAccessState => {\n return {\n ...state,\n apiAccessList: state.apiAccessList.concat(action.payload.apiAccessList)\n }\n }\n }\n})\n\nexport const {\n setApiAccessLoadingState,\n setAPIAccesssList,\n deleteAPIAccessList,\n addAPIAccessList,\n updateAPIAccessItem\n} = apiAccessSlice.actions\n\nexport default apiAccessSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport IFeature from '../model/IFeature'\n\nexport enum StateEnum {\n INIT = 'INIT',\n LOADING = 'LOADING',\n LOADED = 'LOADED',\n ERROR = 'ERROR'\n}\n\nexport type GroupState = {\n features: Array\n loadingState: StateEnum\n}\n\nconst initState = {\n features: [],\n loadingState: StateEnum.INIT\n} as GroupState\n\nconst featuresSlice = createSlice({\n name: 'featuresSlice',\n initialState: initState as GroupState,\n reducers: {\n setFeaturesLoadingState: (\n state,\n action: PayloadAction<{ loadingState: boolean }>\n ): GroupState => {\n return {\n ...state,\n loadingState: action.payload.loadingState\n ? StateEnum.LOADING\n : StateEnum.LOADED\n }\n },\n setFeaturesList: (\n state,\n action: PayloadAction<{\n features: IFeature[]\n }>\n ): GroupState => {\n return {\n ...state,\n features: action.payload.features,\n loadingState: StateEnum.LOADED\n }\n }\n }\n})\n\nexport const {\n setFeaturesList,\n setFeaturesLoadingState\n} = featuresSlice.actions\n\nexport default featuresSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport IAPIKey from '../model/IAPIKey'\nimport { groupBy, uniqBy } from 'lodash'\nimport { StateEnum } from '../model/StateEnum'\n\nexport type APIKeysState = {\n apiKeyList: {\n string?: IAPIKey[]\n }\n lastAddedApiKey: IAPIKey | null\n state: StateEnum\n}\n\nconst initState = {\n apiKeyList: {},\n state: StateEnum.INIT,\n lastAddedApiKey: null\n} as APIKeysState\n\nconst apiAccessSlice = createSlice({\n name: 'apiAccess',\n initialState: initState as APIKeysState,\n reducers: {\n setAPIKeysLoadingState: (\n state,\n action: PayloadAction<{ loadingState: boolean }>\n ): APIKeysState => {\n return {\n ...state,\n state: action.payload.loadingState\n ? StateEnum.LOADING\n : StateEnum.LOADED\n }\n },\n setAPIKeysList: (\n state,\n action: PayloadAction<{ apiKeys: IAPIKey[] }>\n ): APIKeysState => {\n return {\n ...state,\n apiKeyList: groupBy(\n action.payload.apiKeys,\n 'accountId'\n ),\n state: StateEnum.LOADED\n }\n },\n addAPIKeyList: (\n state,\n action: PayloadAction<{ apiKeys: IAPIKey[] }>\n ): APIKeysState => {\n const newList = {}\n action.payload.apiKeys.forEach(apiKey => {\n if (apiKey.accountId) {\n if (newList[apiKey.accountId]) {\n newList[apiKey.accountId] = uniqBy(\n newList[apiKey.accountId].concat(apiKey),\n 'publicId'\n )\n } else {\n newList[apiKey.accountId] = [apiKey]\n }\n }\n })\n return {\n ...state,\n apiKeyList: newList\n }\n },\n deleteAPIKeyList: (\n state,\n action: PayloadAction<{ apiKeys: IAPIKey[] }>\n ): APIKeysState => {\n const accountIds = action.payload.apiKeys.map(apiKey => apiKey.accountId)\n const apiKeyIds = action.payload.apiKeys.map(apiKey => apiKey.publicId)\n const newList = {}\n\n Object.keys(state.apiKeyList).forEach((accountId: string) => {\n if (accountIds.includes(accountId)) {\n newList[accountId] = state.apiKeyList[accountId].filter(\n item => !apiKeyIds.includes(item.publicId)\n )\n } else {\n newList[accountId] = state.apiKeyList[accountId]\n }\n })\n\n return {\n ...state,\n apiKeyList: newList\n }\n },\n setLastAddedAPIKey: (\n state,\n action: PayloadAction<{ apiKey: IAPIKey | null }>\n ): APIKeysState => {\n return {\n ...state,\n lastAddedApiKey: action.payload.apiKey\n }\n }\n }\n})\n\nexport const {\n setAPIKeysList,\n setAPIKeysLoadingState,\n addAPIKeyList,\n deleteAPIKeyList,\n setLastAddedAPIKey\n} = apiAccessSlice.actions\n\nexport default apiAccessSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport ITenantGroup from '../model/ITenantGroup'\nimport ITenantUser from '../model/ITenantUser'\nimport { StateEnum } from '../model/StateEnum'\n\nexport type GroupState = {\n groups: Array\n loadingState: StateEnum\n tenantUsers: Array\n}\n\nconst initState = {\n groups: [],\n loadingState: StateEnum.INIT,\n tenantUsers: []\n} as GroupState\n\nconst groupsSlice = createSlice({\n name: 'groupsSlice',\n initialState: initState as GroupState,\n reducers: {\n setGroupsLoadingState: (\n state,\n action: PayloadAction<{ loadingState: boolean }>\n ): GroupState => {\n return {\n ...state,\n loadingState: action.payload.loadingState\n ? StateEnum.LOADING\n : StateEnum.LOADED\n }\n },\n setGroupsList: (\n state,\n action: PayloadAction<{\n groups: ITenantGroup[]\n tenantUsers: ITenantUser[]\n }>\n ): GroupState => {\n return {\n ...state,\n groups: action.payload.groups,\n loadingState: StateEnum.LOADED,\n tenantUsers: action.payload.tenantUsers\n }\n }\n }\n})\n\nexport const { setGroupsList, setGroupsLoadingState } = groupsSlice.actions\n\nexport default groupsSlice.reducer\n","import {\n SET_CREDIT_LOADING,\n SET_CREDIT_TENANT,\n SET_CREDIT_UNASSIGNED_EXT,\n SET_CREDIT_UNASSIGNED,\n SET_CREDIT_DETAILS_EXT,\n SET_CREDIT_DETAILS,\n SET_CREDIT_AVAILABLE,\n SET_CREDIT_AVAILABLE_INFO_DATA\n} from '../actions/credits'\nimport {\n ICreditsUnassignedResponse,\n ITenantCreditsDetailsExtResponse,\n ITenantCreditsDetailsResponse\n} from '../model/ICredits'\n\nexport enum StateEnum {\n INIT = 'INIT',\n LOADING = 'LOADING',\n LOADED = 'LOADED',\n ERROR = 'ERROR'\n}\n\nexport type GroupState = {\n creditTenant: ICreditsUnassignedResponse\n creditUnassigned: ICreditsUnassignedResponse\n creditUnassignedExt: ITenantCreditsDetailsResponse\n creditDetails: ITenantCreditsDetailsResponse\n creditDetailsExt: ITenantCreditsDetailsExtResponse\n creditAvailable: any // TODO: jaky typ?\n creditAvailableInfoData: any // TODO: jaky typ?\n loadingState: boolean\n}\n\nconst initState = {\n creditTenant: {},\n creditUnassigned: {},\n creditUnassignedExt: {},\n creditDetails: {},\n creditDetailsExt: {},\n creditAvailable: '',\n creditAvailableInfoData: {},\n loadingState: false\n} as GroupState\n\nconst credits = (state = initState, action) => {\n switch (action.type) {\n case SET_CREDIT_LOADING:\n return { ...state, loadingState: action.data }\n case SET_CREDIT_DETAILS:\n return { ...state, creditDetails: action.data }\n case SET_CREDIT_DETAILS_EXT:\n return { ...state, creditDetailsExt: action.data }\n case SET_CREDIT_UNASSIGNED:\n return { ...state, creditUnassigned: action.data }\n case SET_CREDIT_UNASSIGNED_EXT:\n return { ...state, creditUnassignedExt: action.data }\n case SET_CREDIT_TENANT:\n return { ...state, creditTenant: action.data }\n case SET_CREDIT_AVAILABLE:\n return { ...state, creditAvailable: action.data }\n case SET_CREDIT_AVAILABLE_INFO_DATA:\n return { ...state, creditAvailableInfoData: action.data }\n\n default:\n return state\n }\n}\n\nexport default credits\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport moment from 'moment'\nimport { IConsumptionEntry } from '../model/IConsumptionEntry'\nimport { StateEnum } from '../model/StateEnum'\n\nexport type SiteCpuUsageQueryParams = {\n page: number\n rowsPerPage: number\n sortOrder: string\n orderBy: string\n startDate: string\n endDate: string\n}\n\nexport type SiteCpuUsageState = {\n cpuUsage: IConsumptionEntry[]\n params: SiteCpuUsageQueryParams\n totalCount: number\n state: StateEnum\n}\n\nconst initState = {\n cpuUsage: [],\n params: {\n page: 0,\n rowsPerPage: 10,\n sortOrder: 'desc',\n orderBy: 'value',\n startDate: moment()\n .subtract(30, 'days')\n .format('YYYY-MM-DD'),\n endDate: moment().format('YYYY-MM-DD')\n },\n totalCount: -1,\n state: StateEnum.INIT\n} as SiteCpuUsageState\n\nconst siteCpuUsageSlice = createSlice({\n name: 'siteCpuUsage',\n initialState: initState as SiteCpuUsageState,\n reducers: {\n setCpuUsageLoadingState: (\n state,\n action: PayloadAction<{ loadingState: boolean }>\n ): SiteCpuUsageState => {\n return {\n ...state,\n state: action.payload.loadingState\n ? StateEnum.LOADING\n : StateEnum.LOADED\n }\n },\n setTotalCount: (state, action: PayloadAction<{ totalCount: number }>) => {\n return {\n ...state,\n totalCount: action.payload.totalCount\n }\n },\n setCpuQueryParams: (\n state,\n action: PayloadAction\n ) => {\n return {\n ...state,\n params: action.payload\n }\n },\n setCpuUsageData: (state, action: PayloadAction) => {\n return {\n ...state,\n cpuUsage: action.payload\n }\n },\n setCpuUsageState: (\n state,\n action: PayloadAction\n ): SiteCpuUsageState => {\n return {\n ...state,\n ...action.payload\n }\n }\n }\n})\n\nexport const {\n setCpuUsageLoadingState,\n setCpuUsageState,\n setTotalCount,\n setCpuQueryParams,\n setCpuUsageData\n} = siteCpuUsageSlice.actions\n\nexport default siteCpuUsageSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { IConsumptionEntry } from '../model/IConsumptionEntry'\nimport { StateEnum } from '../model/StateEnum'\n\nexport type SiteStorageUsageQueryParams = {\n page: number\n rowsPerPage: number\n sortOrder: string\n orderBy: string\n}\n\nexport type SiteStorageUsageState = {\n storageUsage: IConsumptionEntry[]\n params: SiteStorageUsageQueryParams\n totalCount: number\n state: StateEnum\n}\n\nconst initState = {\n storageUsage: [],\n params: {\n page: 0,\n rowsPerPage: 10,\n sortOrder: 'desc',\n orderBy: 'value'\n },\n totalCount: -1,\n state: StateEnum.INIT\n} as SiteStorageUsageState\n\nconst siteStorageUsageSlice = createSlice({\n name: 'siteStorageUsage',\n initialState: initState as SiteStorageUsageState,\n reducers: {\n setStorageUsageLoadingState: (\n state,\n action: PayloadAction<{ loadingState: boolean }>\n ): SiteStorageUsageState => {\n return {\n ...state,\n state: action.payload.loadingState\n ? StateEnum.LOADING\n : StateEnum.LOADED\n }\n },\n setTotalCount: (state, action: PayloadAction<{ totalCount: number }>) => {\n return {\n ...state,\n totalCount: action.payload.totalCount\n }\n },\n setCpuQueryParams: (\n state,\n action: PayloadAction\n ) => {\n return {\n ...state,\n params: action.payload\n }\n },\n setStorageUsageData: (\n state,\n action: PayloadAction\n ) => {\n return {\n ...state,\n storageUsage: action.payload\n }\n },\n setStorageUsageState: (\n state,\n action: PayloadAction\n ): SiteStorageUsageState => {\n return {\n ...state,\n ...action.payload\n }\n }\n }\n})\n\nexport const {\n setStorageUsageLoadingState,\n setStorageUsageState,\n setTotalCount,\n setCpuQueryParams,\n setStorageUsageData\n} = siteStorageUsageSlice.actions\n\nexport default siteStorageUsageSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { StateEnum } from '../model/StateEnum'\n\nexport type ProjectsMapType = {\n [key: string]: string\n}\n\nexport type ProjectNamesState = {\n projects: ProjectsMapType\n state: StateEnum\n}\n\nconst initState = {\n projects: {},\n state: StateEnum.INIT\n} as ProjectNamesState\n\nconst projectNamesSlice = createSlice({\n name: 'projectNames',\n initialState: initState as ProjectNamesState,\n reducers: {\n setProjectNamesLoadingState: (\n state,\n action: PayloadAction<{ loadingState: boolean }>\n ): ProjectNamesState => {\n return {\n ...state,\n state: action.payload.loadingState\n ? StateEnum.LOADING\n : StateEnum.LOADED\n }\n },\n setProjectNames: (state, action: PayloadAction) => {\n return {\n ...state,\n projects: action.payload\n }\n },\n appendProjectNames: (state, action: PayloadAction) => {\n return {\n ...state,\n projects: {\n ...state.projects,\n ...action.payload\n }\n }\n }\n }\n})\n\nexport const {\n setProjectNamesLoadingState,\n setProjectNames,\n appendProjectNames\n} = projectNamesSlice.actions\n\nexport default projectNamesSlice.reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport IProject from '../model/IProject'\nimport { StateEnum } from '../model/StateEnum'\n\nexport type RootProjectListQueryParams = {\n page: number\n rowsPerPage: number\n sortOrder: string\n orderBy: string\n namePrefix: string\n}\n\nexport type RootProjectLisState = {\n projects: IProject[]\n params: RootProjectListQueryParams\n totalCount: number\n state: StateEnum\n}\n\nconst initState = {\n projects: [],\n params: {\n page: 0,\n rowsPerPage: 10,\n sortOrder: 'desc',\n orderBy: 'updatedAt',\n namePrefix: ''\n },\n totalCount: -1,\n state: StateEnum.INIT\n} as RootProjectLisState\n\nconst rootProjectLisSlice = createSlice({\n name: 'rootProjectLis',\n initialState: initState as RootProjectLisState,\n reducers: {\n resetRootProjectLoadingState: state => {\n return {\n ...state,\n state: StateEnum.INIT\n }\n },\n setRootProjectListLoadingState: (\n state,\n action: PayloadAction<{ loadingState: boolean }>\n ): RootProjectLisState => {\n return {\n ...state,\n state: action.payload.loadingState\n ? StateEnum.LOADING\n : StateEnum.LOADED\n }\n },\n setTotalCount: (\n state,\n action: PayloadAction<{ totalCount: number }>\n ): RootProjectLisState => {\n return {\n ...state,\n totalCount: action.payload.totalCount\n }\n },\n setRootProjectQueryParams: (\n state,\n action: PayloadAction\n ) => {\n return {\n ...state,\n params: action.payload\n }\n },\n setRootProjectListData: (\n state,\n action: PayloadAction\n ): RootProjectLisState => {\n return {\n ...state,\n projects: action.payload\n }\n },\n setRootProjectListState: (\n state,\n action: PayloadAction\n ): RootProjectLisState => {\n return {\n ...state,\n ...action.payload\n }\n }\n }\n})\n\nexport const {\n setRootProjectListLoadingState,\n setRootProjectListState,\n setTotalCount,\n setRootProjectQueryParams,\n setRootProjectListData,\n resetRootProjectLoadingState\n} = rootProjectLisSlice.actions\n\nexport default rootProjectLisSlice.reducer\n","import { IBillingInformation } from '../apis/admin'\nimport {\n IAddCreditsData,\n IBillingReferenceCreditsDetailsInput,\n IMoveCreditsInput,\n IReserveOrSpendCreditsInput,\n ITenantCreditsDetailsInput\n} from '../apis/credits'\nimport {\n ICreditsUnassignedResponse,\n ITenantCreditsDetailsExtResponse,\n ITenantCreditsDetailsResponse\n} from '../model/ICredits'\n\n//TADY NOVE API CALL//\nexport const CALL_CREDIT_POST = 'CREDIT/POST'\nexport const callCreditPost = (data: IAddCreditsData) => ({\n type: CALL_CREDIT_POST,\n data\n})\n\nexport const CALL_CREDIT_DETAILS_POST = 'CREDIT_DETAILS/POST'\nexport const callCreditDetailsPost = (data: ITenantCreditsDetailsInput) => ({\n type: CALL_CREDIT_DETAILS_POST,\n data\n})\n\nexport const CALL_CREDIT_DETAILS_EXTENDED_POST = 'CREDIT_DETAILS_EXTENDED/POST'\nexport const callCreditDetailsExtendedPost = (\n data: ITenantCreditsDetailsInput\n) => ({\n type: CALL_CREDIT_DETAILS_EXTENDED_POST,\n data\n})\n\nexport const CALL_CREDIT_MOVE_PUT = 'CREDIT_MOVE/PUT'\nexport const callCreditMovePut = (data: IMoveCreditsInput) => ({\n type: CALL_CREDIT_MOVE_PUT,\n data\n})\n\nexport const CALL_CREDIT_REPORT_POST = 'DUPACREDIT_REPORT/POSTDUPA'\nexport const callCreditReportPost = (tenantId: string, reportType: string) => ({\n type: CALL_CREDIT_REPORT_POST,\n tenantId,\n reportType\n})\n\nexport const CALL_CREDIT_RESERVE_PUT = 'CREDIT_RESERVE/PUT'\nexport const callCreditReservePut = (data: IReserveOrSpendCreditsInput) => ({\n type: CALL_CREDIT_RESERVE_PUT,\n data\n})\n\nexport const CALL_CREDIT_SPEND_PUT = 'CREDIT_SPEND/PUT'\nexport const callCreditSpendPut = (data: IReserveOrSpendCreditsInput) => ({\n type: CALL_CREDIT_SPEND_PUT,\n data\n})\n\nexport const CALL_CREDIT_UNASSIGNED_POST = 'CREDIT_UNASSIGNED/POST'\nexport const callCreditUnassignedPost = (\n data: IBillingInformation,\n filter?: string[] | null\n) => ({\n type: CALL_CREDIT_UNASSIGNED_POST,\n data,\n filter\n})\n\nexport const CALL_CREDIT_UNASSIGNED_DETAILS_POST =\n 'CREDIT_UNASSIGNED_DETAILS/POST'\nexport const callCreditUnassignedDetailsPost = (\n data: IBillingReferenceCreditsDetailsInput\n) => ({\n type: CALL_CREDIT_UNASSIGNED_DETAILS_POST,\n data\n})\n\nexport const CALL_CREDIT_TENANT_GET = 'CREDIT_TENANT/GET'\nexport const callCreditTenantGet = (\n tenantId: string,\n filter?: string[] | null\n) => ({\n type: CALL_CREDIT_TENANT_GET,\n tenantId,\n filter\n})\n\nexport const CALL_CREDIT_AVAILABLE_GET = 'CREDIT_AVAILABLE/GET'\nexport const callCreditAvailableGet = (tenantId: string) => ({\n type: CALL_CREDIT_AVAILABLE_GET,\n tenantId\n})\n//TADY NOVE REDUCER SETY//\n\nexport const SET_CREDIT_DETAILS = 'CREDIT_DETAILS/SET'\nexport const setCreditDetails = (data: ITenantCreditsDetailsResponse) => ({\n type: SET_CREDIT_DETAILS,\n data\n})\nexport const SET_CREDIT_DETAILS_EXT = 'CREDIT_DETAILS_EXT/SET'\nexport const setCreditDetailsExt = (\n data: ITenantCreditsDetailsExtResponse\n) => ({\n type: SET_CREDIT_DETAILS_EXT,\n data\n})\nexport const SET_CREDIT_UNASSIGNED = 'CREDIT_UNASSIGNED/SET'\nexport const setCreditUnassigned = (data: ICreditsUnassignedResponse) => ({\n type: SET_CREDIT_UNASSIGNED,\n data\n})\nexport const SET_CREDIT_UNASSIGNED_EXT = 'CREDIT_UNASSIGNED_EXT/SET'\nexport const setCreditUnassignedExt = (\n data: ITenantCreditsDetailsResponse\n) => ({\n type: SET_CREDIT_UNASSIGNED_EXT,\n data\n})\nexport const SET_CREDIT_TENANT = 'CREDIT_TENANT/SET'\nexport const setCreditTenant = (data: ICreditsUnassignedResponse) => ({\n type: SET_CREDIT_TENANT,\n data\n})\n\nexport const SET_CREDIT_LOADING = 'CREDIT_LOADING/SET'\nexport const setCreditLoading = (data: boolean) => ({\n type: SET_CREDIT_LOADING,\n data\n})\n\nexport const SET_CREDIT_AVAILABLE = 'CREDIT_AVAILABLE/SET'\nexport const setCreditAvailable = (data: any) => ({\n //TODO: typing\n type: SET_CREDIT_AVAILABLE,\n data\n})\n\nexport const SET_CREDIT_AVAILABLE_INFO_DATA = 'CREDIT_AVAILABLE_INFO_DATA/SET'\nexport const setCreditAvailableInfoData = (data: any) => ({\n //TODO: typing\n type: SET_CREDIT_AVAILABLE_INFO_DATA,\n data\n})\n","import { IBillingInformation } from '../apis/admin'\n\nexport const SET_BILLING_INFORMATION = 'BILLING/SET_BILLING_INFORMATION'\n\nexport const setBillingInformation = (\n billingInformation: IBillingInformation\n) => ({\n type: SET_BILLING_INFORMATION,\n billingInformation\n})\n","import { SET_BILLING_INFORMATION } from '../actions/billing'\nimport { IBillingInformation } from '../apis/admin'\n\nconst initialState: IBillingInformation = {\n billingReference: '',\n billingReferenceTag: '',\n billingReferenceType: ''\n}\n\nconst billing = (state = initialState, action) => {\n switch (action.type) {\n case SET_BILLING_INFORMATION:\n return { ...state, ...action.billingInformation }\n default:\n return state\n }\n}\n\nexport default billing\n","import { combineReducers } from 'redux'\n\nimport auth from './auth'\nimport converts from './converts'\nimport customerUsers from './customerUsers'\nimport datasetReaders from './datasetReaders'\nimport datasetWriters from './datasetWriters'\nimport errors from './errors'\nimport exports from './exports'\nimport imports from './imports'\nimport intl from './intl'\nimport project from './project'\nimport projects from './projects'\nimport recycleBin from './recycleBin'\nimport ui from './ui'\nimport uploads from './uploads'\nimport applications from './applications'\nimport progressItems from './progressItems'\nimport coordinateSystems from './coordinateSystems'\nimport admin from './admin'\nimport tenant from './tenant'\nimport users from './users'\nimport apiAccess from './apiAccess'\nimport apiKeys from './apiKeys'\nimport groups from './groups'\nimport features from './features'\nimport siteCpuUsage from './siteCpuUsage'\nimport siteStorageUsage from './siteStorageUsage'\nimport projectNames from './projectNames'\nimport rootProjectList from './rootProjectList'\nimport credits from './credits'\nimport billing from './billing'\n\nimport { TypedUseSelectorHook, useSelector } from 'react-redux'\n\nconst rootReducer = combineReducers({\n auth,\n admin,\n billing,\n converts,\n customerUsers,\n applications,\n coordinateSystems,\n datasetReaders,\n datasetWriters,\n errors,\n exports,\n imports,\n intl,\n project,\n projects,\n recycleBin,\n ui,\n uploads,\n progressItems,\n tenant,\n users,\n apiAccess,\n apiKeys,\n groups,\n features,\n siteCpuUsage,\n siteStorageUsage,\n projectNames,\n rootProjectList,\n credits\n})\n\nexport default rootReducer\nexport type typeRootReducer = ReturnType\n\nexport const useTypedSelector: TypedUseSelectorHook = useSelector\n","import { administration } from './support'\n\nconst BASE_IAM_URL = 'iam'\n\nconst filterCustomerUsers = (\n searchText: string,\n users: Array<{ name: string; email: string }>\n) => {\n if (!searchText) return users\n\n return users.filter(\n ({ name, email }: { name: string; email: string }) =>\n name?.toLowerCase().includes(searchText.toLowerCase()) ||\n email?.toLowerCase().includes(searchText.toLowerCase())\n )\n}\n\nexport const getCustomerUsers = async (projectId, searchText) => {\n try {\n const { data } = await administration.getJson(\n `${BASE_IAM_URL}/project/${projectId}/principal/list`,\n 3\n )\n\n return filterCustomerUsers(searchText, data)\n } catch (error) {\n return []\n }\n}\n","import keyBy from 'lodash/keyBy'\nimport { call, put, takeLatest } from 'redux-saga/effects'\n\nimport { getCustomerUsers } from '../apis/customerUsers'\n\nimport {\n LOAD_CUSTOMER_USERS,\n setCustomerUsers,\n loadingCustomerUsers\n} from '../actions/customerUsers'\n\nimport { addError } from '../actions/errors'\n\nexport default function* watchCustomerUsers() {\n yield takeLatest(LOAD_CUSTOMER_USERS, loadCustomerUsers)\n}\n\nexport function* loadCustomerUsers(action) {\n try {\n yield put(loadingCustomerUsers())\n\n const users = yield call(getCustomerUsers, action.searchText)\n const userById = keyBy(users, 'id')\n yield put(setCustomerUsers(userById))\n } catch (error) {\n yield put(addError(LOAD_CUSTOMER_USERS, error))\n } finally {\n yield put(loadingCustomerUsers(false))\n }\n}\n","export const mockDedicatedReaders = [\n {\n writers: ['GISWriter', 'ShpWriter', 'GeoJsonWriter'],\n name: 'GISReader',\n description: 'Reads data from GIS storage',\n datasetFormat: 'GIS',\n parameters: []\n },\n {\n writers: ['TimeSeriesCsvWriter', 'TimeSeriesDfs0Writer'],\n name: 'TimeSeriesReader',\n description: 'Reads data from time series storage',\n datasetFormat: 'TsReader',\n parameters: []\n },\n {\n writers: ['NetcdfWriter'],\n name: 'MDReader',\n description: 'Reads data from multidimensional storage',\n datasetFormat: 'MD',\n parameters: []\n }\n]\n","import { metadata } from './support'\nimport { mockDedicatedReaders } from '../components/DatasetConversionDialog/model/mockDedicatedReaders'\nimport { mockFileReaders } from '../components/DatasetConversionDialog/model/mockFileReaders'\n\nexport const getMockDedicatedDataseReaders = async () => {\n return mockDedicatedReaders.map(element => {\n return {\n id: element.name,\n ...element\n }\n })\n}\n\nexport const getMockFileDatasetReaders = async () => {\n return mockFileReaders.map(element => {\n return {\n id: element.name,\n ...element\n }\n })\n}\nexport const getDatasetReaders = async (readerType = '') => {\n const queryParameter = readerType ? '?filter=' + readerType : ''\n const { data } = await metadata.getJson(\n 'conversion/reader/list' + queryParameter,\n 2\n )\n return data.map(element => {\n return {\n id: element.name,\n ...element\n }\n })\n}\n","import find from 'lodash/fp/find'\nimport filter from 'lodash/fp/filter'\n\nexport const getLoginConfig = state => {\n const { clientId, tenantId, resourceId, sessionId } = state.ui.config\n return { clientId, tenantId, resourceId, sessionId }\n}\n\nexport const getAllCoordinateSystems = state =>\n state.coordinateSystems.allCoordinateSystems\n\nexport const getSelectedCoordinateSystems = state =>\n state.coordinateSystems.selectedCoordinateSystems\n\nexport const getCoordinateSystemsLoading = state =>\n state.coordinateSystems.loadingCoordinateSystems\n\nexport const getSearchCoordinateSystemsById = state =>\n state.coordinateSystems.searchCoordinateSystemsById\n\nexport const getIntlConfig = state => state.ui.config.intl\n\nexport const getAdminCredits = state => state.admin.credits\n\nexport const getTenants = state => state.tenant.tenants\n\nexport const getLoadingTenants = state => state.tenant.loadingTenants\n\nexport const getUsers = state => state.users.users\n\nexport const getLoadingUsers = state => state.users.loadingUsers\n\nexport const getAdminLoadingCredits = state => state.admin.loadingCredits\n\nexport const getUserIsAdmin = state => state.admin.isAdmin\nexport const getUserIsBackOffice = state => state.admin.isBackOffice\n\nexport const getSupportConfig = state => state.ui.config.support\n\nexport const getTutorial = state => state.ui.config.tutorial\n\nexport const getCurrentLanguage = state => state.intl.locale\n\nexport const getReadersToHide = state => state.ui.config.readersToHide\n\nexport const getUser = state => {\n if (process.env.REACT_APP__DHI_TARGET_ENV === 'localhost') {\n return {\n userName: 'adam.amur.dhi1@outlook.com',\n profile: {\n id: '862281a7-2e66-4c76-af8d-29c82c723b4b',\n tenantId: '4c2ebde0-11c8-45fa-9a22-3be5b8203a88',\n name: 'Adam Amur',\n initials: 'AA',\n email: 'adam.amur.dhi1@outlook.com',\n token:\n 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCIsImtpZCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCJ9.eyJhdWQiOiIyZWJmOGFlOS1mMzc5LTQxNTctYmFjZi02Y2U4MWVjMjE2NDYiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC80YzJlYmRlMC0xMWM4LTQ1ZmEtOWEyMi0zYmU1YjgyMDNhODgvIiwiaWF0IjoxNTY2NDYyNzI0LCJuYmYiOjE1NjY0NjI3MjQsImV4cCI6MTU2NjQ2NjYyNCwiYWNyIjoiMSIsImFpbyI6IkFWUUFxLzhNQUFBQW5jdlp0YjJXWHd5eERCN2pWRVcwcW8vSXNoTmJMTUpva1JDK0JLZ2NaQnkwcEJDbGk4S1I1bFNDMWxJU1RrSkxoZnMxVGtMYUFNOVY2dERXYzE5UXRBR1FsR2RTRTFnQkordUs4d01sM044PSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIyMTllM2MyMi1lYmRiLTRjZDAtYmZkNi1lMmJjNjU3MGRjN2EiLCJhcHBpZGFjciI6IjEiLCJlbWFpbCI6ImFkYW0uYW11ci5kaGkxQG91dGxvb2suY29tIiwiZmFtaWx5X25hbWUiOiJBbXVyIiwiZ2l2ZW5fbmFtZSI6IkFkYW0iLCJpZHAiOiJsaXZlLmNvbSIsImlwYWRkciI6IjE5My44Ni4xOS45OSIsIm5hbWUiOiJBZGFtIEFtdXIiLCJvaWQiOiJhYmExYTNkZS1lYWRkLTQ5MzctOTgwZi02OWRmZGM5ZmFkMzUiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJvMDVpTzZOeUtqMU9kaEZUOXpNRGJLM18zdGZFR2RPVzg0ZlZmNHNzZzRjIiwidGlkIjoiNGMyZWJkZTAtMTFjOC00NWZhLTlhMjItM2JlNWI4MjAzYTg4IiwidW5pcXVlX25hbWUiOiJsaXZlLmNvbSNhZGFtLmFtdXIuZGhpMUBvdXRsb29rLmNvbSIsInV0aSI6IjQydzFTbUtCREVlZ0d5TE5BX2o2QUEiLCJ2ZXIiOiIxLjAifQ.e_54Gudo_giwlsDXC65g252NDALXisTBMUf4nuDzp2EtlMRnfVIlmJjV1vidBEQeAwEHRLOR6K_Ipw-mC4YCHKKaUfCVHmR166D1wsJwjc9DLfYL18Ijg1nC4bOGTRYX5V9Te7CIDmG3PnBjHinGr58PXg623WPlVc9HeiP_f-GJfuNGCaUYgFmhKY61bTlUPjZg39cLvKgWFzhpVvqEbEKHPTfPEZZFbCo6PzYzwpfvHASo65A99LvSzFWYJ1p_g8ozhSQiHh2waQcdNfx00JajaB7aX56MbfGH6gs62xdXTEx8LQ8_AqhZWkaP4GEpBSly1fpaQV53M9CN-iyTOw'\n }\n }\n } else {\n return state.auth.user\n }\n}\n\nexport const getGroups = state => state.groups.groups\n\nexport const getErrors = state => state.errors\n\nexport const getPopupReminderIsOpen = state => state.ui.popupReminderIsOpen\nexport const getSurpressPopupReminder = state => state.ui.surpressPopupReminder\n\nexport const getOpenAppStatus = state => state.ui.openAppStatus\nexport const getAppStatus = state => state.ui.appStatus\n\nexport const getLoadingApplicationsNotifications = state =>\n state.applications.loading\nexport const getApplicationsNotifications = state => state.applications.data\n\nexport const getLoadingApplications = state => state.applications.loadingApps\nexport const getApplications = state => state.applications.apps\n\nexport const getLoadingProjects = state => state.projects.loading\nexport const getProjects = state => state.projects.data\n\nexport const getDeletingProjects = state => state.projects.deleting\n\nexport const getProjectsPagination = state => state.projects.page\n\nexport const getProjectsRowsPerPage = state => state.projects.rowsPerPage\n\nexport const getProjectsSortBy = state => state.projects.sortBy\n\nexport const getProjectsSortOrder = state => state.projects.sortOrder\n\nexport const getProjectsTotalCount = state => state.projects.totalCount\n\nexport const getProjectsNamePrefix = state => state.projects.namePrefix\n\nexport const getProjectsOnlyMyOnes = state => state.projects.my\n\nexport const getProjectPagination = state => state.project.pagination.page\n\nexport const getProjectRowsPerPage = state =>\n state.project.pagination.rowsPerPage\n\nexport const getUsersRowsPerPage = state => state.users.rowsPerPage\n\nexport const getProjectPath = state => state.project.path.data\n\nexport const getLoadingProjectPath = state => state.project.path.loading\n\nexport const getLoadingRecycleBinContent = state =>\n state.recycleBin.content.loading\nexport const getRecycleBinContent = state => state.recycleBin.content.data\n\nexport const getLoadingRecycleBinItemsDeletedByMe = state =>\n state.recycleBin.itemsDeletedByMe.loading\nexport const getRecycleBinItemsDeletedByMe = state =>\n state.recycleBin.itemsDeletedByMe.data\n\nexport const getRecycleBinItemsDeletedByMeOffset = state =>\n state.recycleBin.itemsDeletedByMe.offset\n\nexport const getRecycleBinItemsDeletedByMeLimit = state =>\n state.recycleBin.itemsDeletedByMe.limit\n\nexport const getRecycleBinItemsDeletedByMeSortBy = state =>\n state.recycleBin.itemsDeletedByMe.sortBy\n\nexport const getRecycleBinItemsDeletedByMeSortOrder = state =>\n state.recycleBin.itemsDeletedByMe.sortOrder\n\nexport const getRecycleBinItemsDeletedByMeTotalCount = state =>\n state.recycleBin.itemsDeletedByMe.totalCount\n\nexport const getRestoringRecycleBinItemsDeletedByMe = state =>\n state.recycleBin.itemsDeletedByMe.restoring\n\nexport const getLoadingRecycleBinProjectDetails = state =>\n state.recycleBin.project.details.loading\nexport const getRecycleBinProjectDetails = state =>\n state.recycleBin.project.details.data\n\nexport const getLoadingRecycleBinProjectDatasets = state =>\n state.recycleBin.project.datasets.loading\nexport const getRecycleBinProjectDatasets = state =>\n state.recycleBin.project.datasets.data\n\nexport const getLoadingProjectDetails = state => state.project.details.loading\nexport const getProjectDetails = state => state.project.details.data\n\nexport const getProjectCapabilities = state =>\n state.project.details.capabilities\n\nexport const getLoadingProjectMembers = state => state.project.members.loading\nexport const getProjectMembers = state => state.project.members.data\n\nexport const getProject = state => state.project\n\nexport const getLoadingProjectDatasets = state => state.project.datasets.loading\nexport const getProjectDatasets = state => state.project.datasets.data\nexport const getProjectContent = state => state.project.projectContent.data\nexport const getProjectContentTotalCount = state =>\n state.project.projectContent.totalCount\nexport const getProjectContentPagination = state =>\n state.project.pagination.page\nexport const getProjectContentRowsPerPage = state =>\n state.project.pagination.rowsPerPage\nexport const getProjectContentNamePrefix = state =>\n state.project.projectContent.namePrefix\nexport const getProjectContentSortBy = state =>\n state.project.projectContent.sortBy\nexport const getProjectContentSortOrder = state =>\n state.project.projectContent.sortOrder\n\nexport const getLoadingProjectSubprojects = state =>\n state.project.subprojects.loading\nexport const getProjectSubprojects = state => state.project.subprojects.data\n\nexport const getLoadingProjectSubprojectsTree = state =>\n state.project.subprojectsForTree.loading\nexport const getProjectSubprojectsTree = state =>\n state.project.subprojectsForTree.data\nexport const getProjectTree = state => state.project.tree.data\n\nexport const getProjectInitialTree = state => state.project.initialtree.data\nexport const getLoadingProjectInitialTree = state =>\n state.project.initialtree.loading\n\nexport const getLoadingProjectParent = state => state.project.parent.loading\nexport const getProjectParent = state => state.project.parent.data\n\nexport const getLoadingProjectRoot = state => state.project.root.loading\nexport const getProjectRoot = state => state.project.root.data\n\nexport const getDatasetReaders = state => state.datasetReaders.data\nexport const getDatasetDedicatedReaders = state =>\n state.datasetReaders.dedicatedReaders\nexport const getDatasetFileReaders = state => state.datasetReaders.fileReaders\nexport const getLoadingDatasetReaders = state => state.datasetReaders.loading\n\nexport const getDatasetWriters = state => state.datasetWriters.data\nexport const getDatasetDedicatedWriters = state =>\n state.datasetWriters.dedicated\nexport const getDatasetFileWriters = state => state.datasetWriters.fileWriters\nexport const getLoadingDatasetWriters = state => state.datasetWriters.loading\n\nexport const getUploads = state => state.uploads\nexport const getImports = state => state.imports\nexport const getImport = (state, id) => find({ id })(state.imports)\nexport const getConvert = (state, id) => find({ id })(state.converts)\n\nexport const getExports = state => state.exports\n\nexport const getProgressItems = state => state.progressItems\n\nexport const getProgressSnackVisibility = state => state.ui.progressSnackVisible\n\nexport const getNotification = state => state.ui.notification\n\nexport const getLinkToProject = state => state.ui.linkToProject\n\nexport const getLinkNotification = state => state.ui.linkNotification\n\nexport const getLoadingExporters = state => state.datasetExporters.loading\n\nexport const getExporters = state => state.datasetExporters.data\nexport const getDatasetTypeExporters = (state, props) =>\n filter(exp => exp.datasetTypes.includes(props.datasetType))(\n getExporters(state)\n )\n\nexport const getCustomerUsers = state => state.customerUsers.data\nexport const getCreditsTenantId = state => state.creditsTenantId.data\nexport const getLoadingCustomerUsers = state => state.customerUsers.loading\n\nexport const getTenantFeatures = state => state.features.features\n","export const IMPORT_TYPE = 'Import'\n\nexport const FILE_IMPORTER_ID = 'file'\n\nexport const SRID_PARAM = 'SRID'\nexport const ZCOLUMNINDEX_PARAM = 'ZColumnIndex'\nexport const CONNECTCOLUMNINDEX_PARAM = 'ConnectColumnIndex'\nexport const XYZCOLUMNSSEQUENCE = 'xyzColumnSequence'\n\nconst mapWriterParameters = data => {\n let writerParameters = []\n\n if (data.writerParameters) {\n for (let [key, value] of Object.entries(data.writerParameters)) {\n writerParameters.push({ name: key, value: value })\n }\n }\n return writerParameters\n}\n\nconst mapReaderParameters = data => {\n let readerParameters = []\n\n if (data.readerParameters) {\n for (let [key, value] of Object.entries(data.readerParameters)) {\n readerParameters.push({ name: key, value: value })\n }\n }\n\n if (data.coordinateSystemId) {\n const srId = Array.isArray(data.coordinateSystemId)\n ? data.coordinateSystemId[0]\n : data.coordinateSystemId\n srId && readerParameters.push({ name: SRID_PARAM, value: srId })\n }\n\n if (data[XYZCOLUMNSSEQUENCE]) {\n switch (data[XYZCOLUMNSSEQUENCE]) {\n case 'xyzc':\n readerParameters.push({ name: ZCOLUMNINDEX_PARAM, value: 2 })\n readerParameters.push({ name: CONNECTCOLUMNINDEX_PARAM, value: 3 })\n break\n case 'xycz':\n readerParameters.push({ name: ZCOLUMNINDEX_PARAM, value: 3 })\n readerParameters.push({ name: CONNECTCOLUMNINDEX_PARAM, value: 2 })\n break\n case 'xyc':\n readerParameters.push({ name: CONNECTCOLUMNINDEX_PARAM, value: 2 })\n break\n case 'xyz':\n readerParameters.push({ name: ZCOLUMNINDEX_PARAM, value: 2 })\n break\n default:\n break\n }\n }\n return readerParameters\n}\n\nexport const mapUserImportDataToConvertApiBody = (\n projectId,\n fileName,\n fileUrl,\n data\n) => {\n const readerInputParameters = mapReaderParameters(data)\n const writerInputParameters = mapWriterParameters(data)\n\n const body = {\n originalFileName: fileName,\n uploadUrl: fileUrl,\n projectId,\n outputDatasetData: {\n name: data.name,\n description: data.description\n },\n readerName: data.reader,\n writerName: data.writer,\n readerParameters: readerInputParameters,\n writerParameters: writerInputParameters\n }\n\n return body\n}\n\nexport const mapUserConvertDataToConvertApiBody = (\n conversionData,\n projectId\n) => {\n const data = conversionData.importData\n\n const readerInputParameters = mapReaderParameters(data)\n const writerInputParameters = mapWriterParameters(data)\n\n const body = {\n outputProjectId: projectId,\n outputDatasetData: {\n name: data.name,\n description: data.description\n },\n readerName: data.reader,\n writerName: data.writer,\n readerParameters: readerInputParameters,\n writerParameters: writerInputParameters\n }\n\n return body\n}\n\nexport const mapUserDownloadDataToConvertApiBody = conversionData => {\n const data = conversionData.importData\n\n const readerInputParameters = mapReaderParameters(data)\n const writerInputParameters = mapWriterParameters(data)\n\n const body = {\n targetFileName: data.name,\n readerName: data.reader,\n writerName: data.writer,\n readerParameters: readerInputParameters,\n writerParameters: writerInputParameters\n }\n\n return body\n}\n","import { call, put, takeEvery, select } from 'redux-saga/effects'\n\nimport { getDatasetReaders } from '../apis/datasetReaders'\n//import { getMockDedicatedDataseReaders, getMockFileDatasetReaders } from '../apis/datasetReaders'\n\nimport {\n LOAD_DATASET_READERS,\n loadingDatasetReaders,\n setDatasetReaders\n} from '../actions/datasetReaders'\n\nimport { getReadersToHide } from '../state'\n\nimport { addError } from '../actions/errors'\n\nimport { FILE_IMPORTER_ID } from '../helpers/import'\n\nexport default function* watchDatasetReaders() {\n yield takeEvery(LOAD_DATASET_READERS, loadDatasetReaders)\n}\n\nexport function* loadDatasetReaders() {\n try {\n yield put(loadingDatasetReaders())\n const dedicatedReaders = yield call(getDatasetReaders, 'Dedicated')\n let readers = yield call(getDatasetReaders, 'File')\n\n /* const dedicatedReaders = yield call(getMockDedicatedDataseReaders)\n let readers = yield call(getMockFileDatasetReaders) */\n\n // some readers shall only be shown in specific environments (e.g., dev)\n const readersToHide = yield select(getReadersToHide)\n if (readersToHide) {\n const readersToBeHidden = readersToHide.split(',')\n readers = readers.filter(reader => {\n return !readersToBeHidden.includes(reader.id)\n })\n }\n\n // reorder elements so that file importer is at the end\n var fileImporter = readers.find(({ format }) => {\n return format === FILE_IMPORTER_ID\n })\n\n if (fileImporter) {\n readers.push(readers.splice(readers.indexOf(fileImporter), 1)[0])\n }\n\n yield put(setDatasetReaders(readers, dedicatedReaders))\n } catch (error) {\n yield put(addError(LOAD_DATASET_READERS, error))\n } finally {\n yield put(loadingDatasetReaders(false))\n }\n}\n","/* eslint-disable no-console */\n\nimport { take } from 'redux-saga/effects'\n\nimport { ADD_ERROR } from '../actions/errors'\n\nexport default function* watchUi() {\n while (true) {\n const { error } = yield take(ADD_ERROR)\n console.warn('Unhandled error', error.source)\n }\n}\n","import uniqid from 'uniqid'\n\nexport const EXPORT_AND_DOWNLOAD_DATASET = 'EXPORT_AND_DOWNLOAD_DATASET'\nexport const exportAndDownloadDataset = (\n fileName,\n datasetId,\n projectId,\n data\n) => ({\n type: EXPORT_AND_DOWNLOAD_DATASET,\n id: uniqid.time(),\n fileName,\n datasetId,\n projectId,\n data\n})\n\nexport const EXPORT_AND_DOWNLOAD_MANY_DATASETS =\n 'EXPORT_AND_DOWNLOAD_MANY_DATASETS'\nexport const exportAndDownloadManyDatasets = (datasets, data) => ({\n type: EXPORT_AND_DOWNLOAD_MANY_DATASETS,\n datasets,\n data\n})\n","import { all, put, takeEvery, select } from 'redux-saga/effects'\n\nimport {\n EXPORT_AND_DOWNLOAD_DATASET,\n EXPORT_AND_DOWNLOAD_MANY_DATASETS\n} from '../actions/exportAndDownload'\nimport { exportDataset } from '../actions/exports'\nimport { addError } from '../actions/errors'\nimport { openPopupReminder } from '../actions/ui'\nimport { getSurpressPopupReminder } from '../state'\nimport uniqid from 'uniqid'\nconst LOG_TAG = 'saga.exportAndDownload'\n\nexport default function* watchExportAndDownload() {\n yield takeEvery(EXPORT_AND_DOWNLOAD_DATASET, exportAndDownloadDataset)\n yield takeEvery(\n EXPORT_AND_DOWNLOAD_MANY_DATASETS,\n exportAndDownloadManyDatasets\n )\n}\n\nexport function* exportAndDownloadDataset(action) {\n // eslint-disable-next-line no-console\n console.log(LOG_TAG, action.id, 'New export and download...', { action })\n const surpressPopupReminder = yield select(getSurpressPopupReminder)\n yield put(openPopupReminder(!surpressPopupReminder))\n const { id, fileName, datasetId, projectId, data } = action\n\n try {\n yield put(exportDataset(id, fileName, datasetId, projectId, data))\n\n /* while (true) {\n const exportAction = yield take([EXPORT_COMPLETE, EXPORT_FAIL])\n\n if (exportAction.id === id) {\n if (exportAction.type === EXPORT_COMPLETE) {\n yield put(downloadFile(id, exportAction.fileUrl))\n }\n\n break\n }\n } */\n } catch (error) {\n yield put(addError(EXPORT_AND_DOWNLOAD_DATASET, error))\n }\n}\n\nexport function* exportAndDownloadManyDatasets(action) {\n const { datasets, data } = action\n // eslint-disable-next-line no-console\n console.log(LOG_TAG, action.id, 'New batch export and download...', {\n action\n })\n const surpressPopupReminder = yield select(getSurpressPopupReminder)\n yield put(openPopupReminder(!surpressPopupReminder))\n\n try {\n yield all(\n datasets.map(dataset =>\n put(\n exportDataset(\n uniqid.time(),\n dataset.name,\n dataset.id,\n dataset.projectId,\n {\n importData: {\n name: dataset.name,\n reader: data.reader,\n writer: data.writer\n }\n }\n )\n )\n )\n )\n } catch (error) {\n yield put(addError(EXPORT_AND_DOWNLOAD_MANY_DATASETS, error))\n }\n}\n","export const COORDINATE_SYSTEM_SEARCH_TEXT_MIN_LEN = 3\n\nexport const COORDINATE_SYSTEM_MAX_ITEMS = 60\n\nexport const COORDINATE_SYSTEM_MAX_DESCRIPTION_LEN = 60\n\nexport const DEFAULT_LINKNOTIFY_TIMEOUT = 5000\n\nexport const DEFAULT_NOTIFY_TIMEOUT = 3500\n\nexport const MONITOR_TRANSFERS_DELAY = 5000\n\nexport const MONITOR_TRANSFERS_ERROR_DELAY = 10000\n\nexport const MONITOR_TRANSFERS_TRACKING_DELAY = 5000\n\nexport const GET_EXPORT_INFO_DELAY = 5000\n\nexport const IMPORT_REMOVE_ON_DONE_DELAY = 3000\n\nexport const EXPORT_REMOVE_ON_DONE_DELAY = 3000\n\nexport const UPLOAD_REMOVE_ON_DONE_DELAY = 3000\n\nexport const DOWNLOAD_REMOVE_ON_DONE_DELAY = 3000\n\nexport const DRAWER_WIDTH = 240\n\nexport const MDUI_SIZES = ['tiny', 'small', 'medium', 'large']\n\nexport const MDUI_PLACEMENTS = [\n 'bottom-end',\n 'bottom-start',\n 'bottom',\n 'left-end',\n 'left-start',\n 'left',\n 'right-end',\n 'right-start',\n 'right',\n 'top-end',\n 'top-start',\n 'top'\n]\n\nexport const PROJECT_TYPE = 'Project'\nexport const FOLDER_TYPE = 'Folder'\nexport const DATASET_TYPE = 'Dataset'\n\nexport const BACKOFFICE_ROLE = 'BackOffice'\n","/* eslint-disable no-console */\n\nimport { delay, call, put, takeEvery } from 'redux-saga/effects'\n\nimport {\n GET_EXPORT_INFO_DELAY,\n EXPORT_REMOVE_ON_DONE_DELAY\n} from '../shared/constants'\n\nimport {\n TRANSFER_STATUSES,\n getTransfer,\n transferDownloadConvert\n} from '../apis/transfer'\n//import { exportProjectDataset } from '../apis/project'\nimport { mapUserDownloadDataToConvertApiBody } from '../helpers/import'\n\nimport {\n EXPORT_DATASET,\n exportStart,\n updateExportProgress,\n exportComplete,\n exportFail,\n removeExport\n} from '../actions/exports'\n\nconst LOG_TAG = 'saga.exports'\n\nexport default function* watchExports() {\n yield takeEvery(EXPORT_DATASET, exportFile)\n}\n\nexport function* exportFile(action) {\n const { id, datasetId, data, fileName } = action\n const title = fileName ? 'Downloading (' + fileName + ')' : ''\n try {\n yield put(exportStart(id, title))\n\n const result = yield call(\n transferDownloadConvert,\n datasetId,\n mapUserDownloadDataToConvertApiBody(data)\n )\n\n let info\n while (true) {\n info = yield call(getTransfer, result.id)\n\n if (info.status === TRANSFER_STATUSES.IN_PROGRESS) {\n yield put(updateExportProgress(id, 50, title))\n } else if (info.status === TRANSFER_STATUSES.ERROR) {\n throw new Error(info.errorMessage)\n } else if (info.status === TRANSFER_STATUSES.COMPLETED) {\n break\n }\n\n yield delay(GET_EXPORT_INFO_DELAY)\n }\n\n console.log(LOG_TAG, id, 'Export completed!')\n\n yield put(exportComplete(id))\n yield delay(EXPORT_REMOVE_ON_DONE_DELAY)\n yield put(removeExport(id))\n\n yield call(window.open, info.downloadPath)\n } catch (error) {\n console.error(LOG_TAG, id, 'Export failed!', error)\n yield put(exportFail(id, error))\n }\n}\n","/* eslint-disable no-console */\nimport {\n GET_EXPORT_INFO_DELAY,\n EXPORT_REMOVE_ON_DONE_DELAY\n} from '../shared/constants'\nimport { call, put, takeEvery, select, delay } from 'redux-saga/effects'\n\nimport { mapUserImportDataToConvertApiBody } from '../helpers/import'\n\nimport {\n transferUploadConvert,\n TRANSFER_STATUSES,\n getTransfer\n} from '../apis/transfer'\n\nimport {\n IMPORT_FILE,\n importStart,\n updateProgress,\n importFail,\n importComplete,\n removeImport\n} from '../actions/imports'\n\nimport { getUser } from '../state'\n\nconst TAG = '@saga.imports'\n\nexport default function* watchImports() {\n yield takeEvery(IMPORT_FILE, importFile)\n}\n\nexport function* importFile(action) {\n console.log(TAG, action.id, 'New import...', { action })\n const { id, fileName, fileUrl, projectId, data } = action\n let result\n try {\n console.log(TAG, id, 'Conversion import...')\n\n result = yield call(\n transferUploadConvert,\n mapUserImportDataToConvertApiBody(projectId, fileName, fileUrl, data)\n )\n\n console.log(TAG, id, 'Start importing...', { result })\n const title = 'Importing (' + data.name + ')'\n const user = yield select(getUser)\n\n const createdBy = user.email\n\n yield put(\n importStart(\n result.id,\n createdBy,\n projectId,\n TRANSFER_STATUSES.IN_PROGRESS,\n data,\n id\n )\n )\n console.log(TAG, id, 'Start import...', { result })\n\n let info\n while (true) {\n info = yield call(getTransfer, result.id)\n console.log(TAG, result.id, 'Exporting state...', { info })\n\n if (info && info.status) {\n if (info.status === TRANSFER_STATUSES.IN_PROGRESS) {\n yield put(updateProgress(result.id, 50, title))\n } else if (info.status === TRANSFER_STATUSES.ERROR) {\n throw new Error(info.errorMessage)\n } else if (info.status === TRANSFER_STATUSES.COMPLETED) {\n break\n }\n }\n\n yield delay(GET_EXPORT_INFO_DELAY)\n }\n\n console.log(TAG, result.id, 'Import completed!')\n\n yield put(importComplete(result.id))\n yield delay(EXPORT_REMOVE_ON_DONE_DELAY)\n yield put(removeImport(result.id))\n } catch (error) {\n console.error(TAG, result ? result.id : id, 'Import failed!', error)\n yield put(importFail(result ? result.id : id, error))\n }\n}\n","export const CHANGE_LANGUAGE = 'INTL/CHANGE_LANGUAGE'\nexport const changeLanguage = locale => ({\n type: CHANGE_LANGUAGE,\n locale\n})\n","import { call, put, takeLatest } from 'redux-saga/effects'\nimport { updateIntl } from 'react-intl-redux'\n\nimport { CHANGE_LANGUAGE } from '../actions/intl'\n\nexport default function* watchIntl() {\n yield takeLatest(CHANGE_LANGUAGE, changeLanguage)\n}\n\nexport function* changeLanguage(action) {\n yield call(loadMessages, action.locale)\n}\n\nexport function* loadMessages(locale = 'en') {\n let messages\n try {\n messages = yield call(getMessages, locale)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(\n `Error loading the messages for the language \"${locale}\"`,\n error\n )\n\n messages = yield call(getMessages, 'en')\n }\n\n yield put(updateIntl({ locale, messages }))\n}\n\nconst getMessages = async lang => {\n const url = `/intl/messages/${lang}.json`\n const resp = await fetch(url)\n return resp.json()\n}\n","export const DATASETTYPE = 'datasetType'\nexport const DATASETFORMAT = 'datasetFormat'\n\nexport const isDataset = item => {\n return DATASETFORMAT in item\n}\n\nexport const capitalize = (text: string) => {\n return text.charAt(0).toUpperCase() + text.slice(1)\n}\n","import { metadata } from './support'\n\nexport const getProject = id => {\n return metadata.getJson(`metadata/project/${id}`, 3)\n}\n\nexport const getProjectDatasets = async projectId => {\n const { data } = await metadata.getJson(\n `metadata/project/${projectId}/dataset/list`,\n 3\n )\n return data\n}\n\nexport const getProjectSubprojects = async projectId => {\n const { data } = await metadata.getJson(\n `metadata/project/${projectId}/subprojects`,\n 3\n )\n return data\n}\n\nexport const getProjectFolders = async (\n projectId,\n newOffset,\n newLimit,\n sortBy,\n sortOrder,\n namePrefix\n) => {\n const query = `?offset=${newOffset}&limit=${newLimit}&sortBy=${sortBy}&sortOrder=${sortOrder}&namePrefix=${namePrefix}`\n const { data, totalCount, offset, limit } = await metadata.getJson(\n `metadata/project/${projectId}/subproject/offset-list${query}`,\n 3\n )\n return { data: data, totalCount: totalCount, offset: offset, limit: limit }\n}\n\nexport const getProjectDataset = datasetId =>\n metadata.getJson(`metadata/dataset/${datasetId}`, 3)\n\nexport const getProjectMembers = async projectId => {\n const members = await metadata.getJson(\n `metadata/project/${projectId}/member`,\n 3\n )\n\n return members.data\n}\n\nexport const postProjectMembers = async (projectId, data) => {\n await metadata.postJson(`metadata/project/${projectId}/member`, data, 3)\n}\n\nexport const getCapabilities = async projectId => {\n return await metadata.getJson(`metadata/project/${projectId}/capabilities`, 3)\n}\n\nexport const delProjectDataset = datasetId =>\n metadata.delJson(`metadata/dataset/${datasetId}`, 3)\n\nexport const putProjectDataset = (projectId, data) =>\n metadata.putJson(`metadata/project/${projectId}/dataset/`, data, 3)\n\nexport const moveDataset = (datasetId, targetProjectId) => {\n const data = { targetProjectId: targetProjectId }\n metadata.postJson(`metadata/dataset/${datasetId}/move`, data, 3)\n}\n\nexport const getProjectPath = async projectId => {\n const { data } = await metadata.getJson(\n `metadata/project/${projectId}/path`,\n 3\n )\n return data\n}\n","import { metadata } from './support'\nimport { RootProjectListQueryParams } from '../reducers/rootProjectList'\n\nexport const getRootProjectList = (params: RootProjectListQueryParams) => {\n const offset = params.page * params.rowsPerPage\n const query = new URLSearchParams({\n offset: offset.toString(),\n limit: params.rowsPerPage.toString(),\n sortBy: params.orderBy,\n sortOrder: params.sortOrder,\n namePrefix: params.namePrefix\n })\n return metadata.getJson(`metadata/project/offset-list?${query.toString()}`, 3)\n}\n\nexport const getProjects = async (\n newOffset,\n newLimit,\n sortBy,\n sortOrder,\n namePrefix,\n my = false\n) => {\n const roles = my ? '&role=Owner&role=Contributor&role=Reader' : '' //,Contributor,Reader\n const query =\n `?offset=${newOffset}&limit=${newLimit}&sortBy=${sortBy}&sortOrder=${sortOrder}&namePrefix=${namePrefix}` +\n roles\n const { data, totalCount, offset, limit } = await metadata.getJson(\n `metadata/project/offset-list${query}`,\n 3\n )\n return { data: data, totalCount: totalCount, offset: offset, limit: limit }\n}\n\nexport const postProject = data =>\n metadata.postJson('metadata/project', data, 3)\n\nexport const postSubProject = (data, projectId) =>\n metadata.postJson(`metadata/project/${projectId}/subproject`, data, 3)\n\nexport const putProject = data => metadata.putJson('metadata/project', data, 3)\n\nexport const patchProject = (id, data, versionId) =>\n metadata.patchJson(\n 'metadata/project',\n { id, ...data, rowVersion: versionId },\n 3\n )\n\nexport const delProject = async id =>\n await metadata.delJson(`metadata/project/${id}`, 3)\n\nexport const moveProject = (projectId, parentProjectId) => {\n const data = { targetProjectId: parentProjectId }\n metadata.postJson(`metadata/project/${projectId}/move`, data, 3)\n}\n","import { metadata } from './support'\n\nexport const putProjectMembers = (projectId, members, versionId) =>\n metadata.putJson(\n `metadata/project/${projectId}/members`,\n { members, rowVersion: versionId },\n 3\n )\n","import { eventChannel } from 'redux-saga'\nimport { put, delay } from 'redux-saga/effects'\n\nimport { DEFAULT_NOTIFY_TIMEOUT } from '../shared/constants'\nimport { showNotification, showLink } from '../actions/ui'\n\nexport const createEventChannelCallback = async cb => {\n let channel\n\n const emit = await new Promise(resolve => {\n channel = eventChannel(emit => {\n resolve(emit)\n return () => {}\n })\n })\n\n const enhancedCb = (...args) => cb(emit, ...args)\n\n return [channel, enhancedCb]\n}\n\nexport function* notify(message) {\n yield put(showNotification(message))\n yield delay(DEFAULT_NOTIFY_TIMEOUT)\n yield put(showNotification(null))\n}\n\nexport function* linkNotify(message, project) {\n yield put(showLink(message, project))\n}\n","import map from 'lodash/map'\nimport pick from 'lodash/fp/pick'\nimport size from 'lodash/fp/size'\nimport orderBy from 'lodash/orderBy'\nimport { capitalize, isDataset } from '../helpers/projectContent'\n\nimport {\n all,\n call,\n fork,\n put,\n select,\n takeEvery,\n takeLatest\n} from 'redux-saga/effects'\n\nimport flow from 'lodash/flow'\nimport sortBy from 'lodash/fp/sortBy'\nimport mapValues from 'lodash/fp/mapValues'\n\nimport { addError } from '../actions/errors'\n\nimport {\n DELETE_PROJECT_DATASETS,\n DELETE_PROJECT_FOLDERS,\n deletingProjectDatasets,\n deletingSubProjects,\n LOAD_PROJECT_DATASETS,\n LOAD_PROJECT_DETAILS,\n LOAD_PROJECT_MEMBERS,\n LOAD_PROJECT_PARENT,\n LOAD_PROJECT_ROOT,\n LOAD_PROJECT_SUBPROJECTS,\n LOAD_PROJECTCONTENT,\n loadingProjectDetails,\n loadingProjectInitialTree,\n loadingProjectMembers,\n loadingProjectParent,\n loadingProjectSubprojects,\n loadingProjectSubprojectsTree,\n loadProjectContent,\n MOVE_PROJECT_CONTENT,\n movingContent,\n setProjectContent,\n setProjectDetails,\n setProjectInitialTree,\n setProjectMembers,\n setProjectPagination,\n setProjectParent,\n setProjectPath,\n setProjectRoot,\n setProjectRowsPerPage,\n setProjectSubprojects,\n setProjectSubprojectsTree,\n UPDATE_PROJECT_DATASET,\n UPDATE_PROJECT_DETAILS,\n updatingProjectDataset\n} from '../actions/project'\n\nimport {\n DELETE_PROJECTS,\n UPDATE_PROJECT,\n updatingProject\n} from '../actions/projects'\n\nimport {\n delProjectDataset,\n getCapabilities,\n getProject,\n getProjectDatasets,\n getProjectFolders,\n getProjectMembers,\n getProjectPath,\n getProjectSubprojects,\n moveDataset,\n putProjectDataset\n} from '../apis/project'\n\nimport {\n delProject,\n moveProject,\n patchProject,\n putProject\n} from '../apis/projects'\n\nimport { putProjectMembers } from '../apis/members'\n\nimport { linkNotify, notify } from '../helpers/saga'\n\nimport {\n getCustomerUsers,\n getProjectContentNamePrefix,\n getProjectContentPagination,\n getProjectContentRowsPerPage,\n getProjectContentSortBy,\n getProjectContentSortOrder,\n getProjectDetails,\n getProjectInitialTree,\n getProjectTree\n} from '../state'\n\nconst TAG = 'saga/project'\n\nexport default function* watchProject() {\n yield takeEvery(UPDATE_PROJECT_DATASET, updateProjectDataset)\n yield takeEvery(DELETE_PROJECT_DATASETS, deleteProjectDatasets)\n yield takeEvery(DELETE_PROJECT_FOLDERS, deleteSubProjects)\n yield takeEvery(UPDATE_PROJECT_DETAILS, updateProjectDetails)\n yield takeEvery(MOVE_PROJECT_CONTENT, moveContent)\n yield takeLatest(LOAD_PROJECT_DETAILS, loadProjectDetails)\n yield takeLatest(LOAD_PROJECT_DATASETS, loadProjectDatasets)\n yield takeLatest(LOAD_PROJECT_MEMBERS, loadProjectMembers)\n yield takeLatest(LOAD_PROJECT_SUBPROJECTS, loadProjectSubprojects)\n yield takeLatest(LOAD_PROJECT_ROOT, loadProjectRoot)\n yield takeLatest(LOAD_PROJECTCONTENT, loadFoldersAndDatasets)\n}\n\nconst getSort = sortBy => {\n let sorter = [sortBy]\n switch (sortBy) {\n case 'name':\n sorter = [content => content.name.toLowerCase()]\n break\n case 'description':\n sorter = [\n content => content.description && content.description.toLowerCase()\n ]\n break\n case 'datasetFormat':\n sorter = [\n content => content.datasetFormat && content.datasetFormat.toLowerCase()\n ]\n break\n case 'datasetType':\n sorter = [\n content => content.datasetType && content.datasetType.toLowerCase()\n ]\n break\n default:\n break\n }\n return sorter\n}\n\nconst removeSortByIfNotSupported = sortBy => {\n const supported = ['Name', 'CreatedAt', 'UpdatedAt', 'AccessLevel']\n return supported.includes(sortBy) ? sortBy : ''\n}\n\nconst isDatasetBelowOffset = (item, index, offset) => {\n return offset > index && isDataset(item)\n}\n\nexport function* loadFoldersAndDatasets(action) {\n try {\n yield put(loadingProjectSubprojects())\n let projectContent = []\n let count = 0\n\n const capabilities = yield call(getCapabilities, action.projectId)\n\n if (capabilities.canListContent) {\n // To fetch datasets no paginated endpoint is available yet\n const projectDatasets = yield call(getProjectDatasets, action.projectId)\n const datasets = projectDatasets.filter(dataset =>\n dataset.name.startsWith(action.namePrefix)\n )\n\n // The subprojects endpoint supports server side pagination, sorting\n // and filtering by name prefix\n const { data, totalCount } = yield call(\n getProjectFolders,\n action.projectId,\n action.page === 0 ? 0 : (action.page - 1) * action.rowsPerPage,\n action.rowsPerPage * 2,\n removeSortByIfNotSupported(capitalize(action.sortBy)),\n capitalize(action.sortOrder),\n action.namePrefix\n )\n\n // No endpoint is available to fetch the paginated project content in one call\n const content = datasets.concat(data)\n const sortedContent = orderBy(\n content,\n getSort(action.sortBy.toLowerCase()),\n [action.sortOrder.toLowerCase()]\n )\n count = totalCount + datasets.length\n\n // As dataset response is not paginated we need to remove items manually\n const cleanedSortedContent = sortedContent.filter(\n (item, index) =>\n !isDatasetBelowOffset(item, index, action.page * action.rowsPerPage)\n )\n\n projectContent = cleanedSortedContent.splice(0, action.rowsPerPage)\n }\n\n yield put(\n setProjectContent(\n projectContent,\n count,\n action.rowsPerPage,\n action.page * action.rowsPerPage,\n action.namePrefix,\n action.sortBy,\n action.sortOrder\n )\n )\n } catch (error) {\n yield put(addError(LOAD_PROJECTCONTENT, error))\n } finally {\n yield put(loadingProjectSubprojects(false))\n }\n}\n\nexport function* loadProjectMembers(action) {\n try {\n yield put(loadingProjectMembers())\n\n const rawMembers = yield call(getProjectMembers, action.projectId)\n const users = yield select(getCustomerUsers)\n const members = enhanceMembers(users)(rawMembers)\n\n yield put(setProjectMembers(members))\n } catch (error) {\n yield put(addError(LOAD_PROJECT_MEMBERS, error))\n } finally {\n yield put(loadingProjectMembers(false))\n }\n}\n\nexport function* updateProjectDataset(action) {\n const { projectId, data } = action\n const page = yield select(getProjectContentPagination)\n const rowsPerPage = yield select(getProjectContentRowsPerPage)\n const namePrefix = yield select(getProjectContentNamePrefix)\n const sortBy = yield select(getProjectContentSortBy)\n const sortOrder = yield select(getProjectContentSortOrder)\n\n try {\n yield put(updatingProjectDataset())\n\n const dataset = yield call(putProjectDataset, projectId, data)\n\n yield fork(notify, `The dataset \"${dataset.name}\" was updated!`)\n } catch (error) {\n yield put(addError(UPDATE_PROJECT_DATASET, error))\n } finally {\n yield put(updatingProjectDataset(false))\n yield put(\n loadProjectContent(\n projectId,\n page * rowsPerPage,\n rowsPerPage,\n sortBy,\n sortOrder,\n namePrefix\n )\n )\n }\n}\n\nexport function* loadProjectDetails(action) {\n const projectId = action.id\n if (projectId) {\n try {\n yield put(loadingProjectDetails())\n const data = yield call(getProjectPath, projectId)\n yield put(setProjectPath(data))\n const capabilities = yield call(getCapabilities, projectId)\n const details = yield call(getProject, projectId)\n yield put(\n setProjectDetails(\n { ...details, capabilities: capabilities },\n capabilities\n )\n )\n } catch (error) {\n yield put(addError(LOAD_PROJECT_DETAILS, error))\n } finally {\n yield put(setProjectPagination(0))\n yield put(setProjectRowsPerPage(25))\n yield put(loadingProjectDetails(false))\n }\n }\n}\n\nexport function* loadProjectDatasets(action) {\n const page = yield select(getProjectContentPagination)\n const rowsPerPage = yield select(getProjectContentRowsPerPage)\n const namePrefix = yield select(getProjectContentNamePrefix)\n const sortBy = yield select(getProjectContentSortBy)\n const sortOrder = yield select(getProjectContentSortOrder)\n yield put(\n loadProjectContent(\n action.projectId,\n page * rowsPerPage,\n rowsPerPage,\n sortBy,\n sortOrder,\n namePrefix\n )\n )\n}\n\nexport function* loadProjectSubprojects(action) {\n try {\n action.forTable\n ? yield put(loadingProjectSubprojects())\n : yield put(loadingProjectSubprojectsTree())\n\n const subProjects = yield call(getProjectSubprojects, action.projectId)\n\n if (action.forTable) {\n yield put(setProjectSubprojects(subProjects))\n } else {\n const tree = yield select(getProjectTree)\n yield put(setProjectSubprojectsTree(subProjects, action.projectId, tree))\n }\n } catch (error) {\n yield put(addError(LOAD_PROJECT_SUBPROJECTS, error))\n } finally {\n yield put(loadingProjectSubprojects(false))\n yield put(loadingProjectSubprojectsTree(false))\n }\n}\n\nexport function* loadProjectParent() {\n try {\n const project = yield select(getProjectDetails)\n if (project && project.parentProjectId) {\n yield put(loadingProjectParent())\n const parentProject = yield call(getProject, project.parentProjectId)\n yield put(setProjectParent(parentProject))\n } else {\n yield put(setProjectParent(null))\n }\n } catch (error) {\n yield put(addError(LOAD_PROJECT_PARENT, error))\n } finally {\n yield put(loadingProjectParent(false))\n }\n}\n\nexport function* loadProjectRoot(action) {\n try {\n let { project } = action\n\n yield put(loadingProjectInitialTree())\n\n if (!project) return\n\n if (project.parentProjectId) {\n const parentProject = yield call(getProject, project.parentProjectId)\n const subProjects = yield call(\n getProjectSubprojects,\n project.parentProjectId\n )\n const initialtree = yield select(getProjectInitialTree)\n const newTree = { ...initialtree, [parentProject.id]: subProjects }\n yield put(setProjectInitialTree(newTree))\n project = parentProject\n yield call(loadProjectRoot, { project })\n } else {\n const initialtree = yield select(getProjectInitialTree)\n const newTree = { ...initialtree, project: [project] }\n yield put(setProjectRoot(newTree))\n }\n } catch (error) {\n yield put(addError(LOAD_PROJECT_PARENT, error))\n } finally {\n yield put(loadingProjectInitialTree(false))\n }\n}\n\nexport function* deleteProjectDatasets(action) {\n const { projectId, datasetIds } = action\n const page = yield select(getProjectContentPagination)\n const rowsPerPage = yield select(getProjectContentRowsPerPage)\n const namePrefix = yield select(getProjectContentNamePrefix)\n const sortBy = yield select(getProjectContentSortBy)\n const sortOrder = yield select(getProjectContentSortOrder)\n\n try {\n yield put(deletingProjectDatasets())\n\n yield all(datasetIds.map(datasetId => call(delProjectDataset, datasetId)))\n\n yield fork(\n notify,\n datasetIds.length > 1\n ? `${datasetIds.length} datasets were deleted!`\n : 'The dataset was deleted!'\n )\n } catch (error) {\n yield put(addError(DELETE_PROJECT_DATASETS, error))\n } finally {\n yield put(deletingProjectDatasets(false))\n yield put(\n loadProjectContent(\n projectId,\n page * rowsPerPage,\n rowsPerPage,\n sortBy,\n sortOrder,\n namePrefix\n )\n )\n }\n}\n\nconst enhanceMembers = users =>\n flow(\n mapValues(member => {\n const user = users[member.userId]\n if (!user) {\n // eslint-disable-next-line no-console\n console.warn(TAG, `User not found with id \"${member.userId}\"!`)\n }\n return {\n ...user,\n ...member\n }\n }),\n sortBy('displayName')\n )\n\nexport function* deleteSubProjects(action) {\n const { projectParentId, projectIds } = action\n const projectId = projectParentId\n const page = yield select(getProjectContentPagination)\n const rowsPerPage = yield select(getProjectContentRowsPerPage)\n const namePrefix = yield select(getProjectContentNamePrefix)\n const sortBy = yield select(getProjectContentSortBy)\n const sortOrder = yield select(getProjectContentSortOrder)\n\n try {\n yield put(deletingSubProjects())\n\n yield all(projectIds.map(id => call(delProject, id)))\n\n yield fork(\n notify,\n projectIds.length > 1\n ? `${projectIds.length} folders were deleted!`\n : 'The folder was deleted!'\n )\n } catch (error) {\n yield put(addError(DELETE_PROJECTS, error))\n } finally {\n yield put(deletingSubProjects(false))\n yield put(\n loadProjectContent(\n projectId,\n page * rowsPerPage,\n rowsPerPage,\n sortBy,\n sortOrder,\n namePrefix\n )\n )\n }\n}\n\nexport function* moveContent(action) {\n const { targetProjectId, projectIds, datasetIds, projectId } = action\n\n const page = yield select(getProjectContentPagination)\n const rowsPerPage = yield select(getProjectContentRowsPerPage)\n const namePrefix = yield select(getProjectContentNamePrefix)\n const sortBy = yield select(getProjectContentSortBy)\n const sortOrder = yield select(getProjectContentSortOrder)\n try {\n yield put(movingContent())\n\n yield all(projectIds.map(id => call(moveProject, id, targetProjectId)))\n yield all(datasetIds.map(id => call(moveDataset, id, targetProjectId)))\n\n const project = yield call(getProject, targetProjectId)\n const selectionSize = size(projectIds) + size(datasetIds)\n let message = selectionSize > 1 ? 'Selected items' : 'Selected item'\n message += ' successfully moved to ' + project.name\n\n yield fork(linkNotify, message, project)\n } catch (error) {\n yield put(addError(MOVE_PROJECT_CONTENT, error))\n } finally {\n yield put(movingContent(false))\n yield put(\n loadProjectContent(\n projectId,\n page * rowsPerPage,\n rowsPerPage,\n sortBy,\n sortOrder,\n namePrefix\n )\n )\n }\n}\n\nexport function* updateProjectDetails({ data, projectDidUpdate }) {\n const { members, accessLevel, ...projectData } = data\n\n const updatedMembers = map(members, pick(['userId', 'role']))\n\n const {\n id,\n name,\n capabilities: { canEditAccessLevel, canGrantAccess, canEdit },\n rowVersion\n } = projectData\n\n try {\n yield put(updatingProject())\n let versionId = rowVersion\n if (canEdit) {\n const response = yield call(putProject, projectData)\n if (response && response.rowVersion) {\n versionId = response.rowVersion\n }\n }\n\n if (canEditAccessLevel) {\n const response = yield call(patchProject, id, { accessLevel }, versionId)\n if (response && response.rowVersion) {\n versionId = response.rowVersion\n }\n }\n\n if (canGrantAccess) {\n yield call(putProjectMembers, id, updatedMembers, versionId)\n }\n\n yield fork(notify, `Project \"${name}\" was updated!`)\n } catch (error) {\n if (error && error.httpStatus && error.httpStatus === 409) {\n yield put(\n addError(\n UPDATE_PROJECT,\n 'Somebody else was updating the project at the same time, you can refresh your page to see the latest changes.'\n )\n )\n } else {\n yield put(addError(UPDATE_PROJECT, error))\n }\n } finally {\n yield put(updatingProject(false))\n yield call(loadProjectDetails, { id })\n yield call(projectDidUpdate)\n }\n}\n","import {\n call,\n put,\n takeLatest,\n takeEvery,\n all,\n fork,\n select\n} from 'redux-saga/effects'\n\nimport map from 'lodash/map'\nimport pick from 'lodash/fp/pick'\nimport { capitalize } from '../helpers/projectContent'\n\nimport {\n getProjects,\n postProject,\n postSubProject,\n putProject,\n patchProject,\n delProject\n} from '../apis/projects'\n\nimport { putProjectMembers } from '../apis/members'\n\nimport {\n LOAD_PROJECTS,\n loadingProjects,\n setProjects,\n CREATE_PROJECT,\n creatingProject,\n CREATE_SUBPROJECT,\n UPDATE_PROJECT,\n updatingProject,\n DELETE_PROJECTS,\n deletingProjects\n} from '../actions/projects'\n\nimport { addError } from '../actions/errors'\n\nimport { notify } from '../helpers/saga'\n\nexport const getPage = state => state.projects.page\nexport const getRowsPerPage = state => state.projects.rowsPerPage\nexport const getMy = state => state.projects.my\nexport const getSortBy = state => state.projects.sortBy\nexport const getSortOrder = state => state.projects.sortOrder\nexport const getNamePrefix = state => state.projects.namePrefix\n\nexport default function* watchProjects() {\n yield takeEvery(CREATE_PROJECT, createProject)\n yield takeEvery(CREATE_SUBPROJECT, createSubProject)\n yield takeEvery(UPDATE_PROJECT, updateProject)\n yield takeEvery(DELETE_PROJECTS, deleteProjects)\n yield takeLatest(LOAD_PROJECTS, loadProjects)\n}\n\nexport function* loadProjects(action) {\n try {\n yield put(loadingProjects(action.my, true))\n\n // The endpoint supports server side pagination, sorting\n // and filtering by name prefix\n const { data, totalCount, offset, limit } = yield call(\n getProjects,\n action.page,\n action.rowsPerPage,\n capitalize(action.sortBy),\n capitalize(action.sortOrder),\n action.namePrefix,\n action.my\n )\n\n yield put(\n setProjects({\n newData: data,\n totalCount,\n rowsPerPage: limit !== undefined ? limit : action.rowsPerPage,\n offset: offset !== undefined ? offset : 0,\n namePrefix: action.namePrefix,\n sortBy: action.sortBy,\n sortOrder: action.sortOrder\n })\n )\n } catch (error) {\n yield put(addError(LOAD_PROJECTS, error))\n } finally {\n yield put(loadingProjects(action.my, false))\n }\n}\n\nexport function* createProject({ data, projectDidCreate }) {\n try {\n yield put(creatingProject())\n\n const project = yield call(postProject, data)\n\n yield fork(notify, `Project \"${project.name}\" was created!`)\n } catch (error) {\n yield put(addError(CREATE_PROJECT, error))\n } finally {\n yield put(creatingProject(false))\n yield call(projectDidCreate)\n }\n}\n\nexport function* createSubProject({ data, projectDidCreate }) {\n try {\n yield put(creatingProject())\n\n const project = yield call(postSubProject, data, data.parentProjectId)\n\n yield fork(notify, `Project \"${project.name}\" was created!`)\n } catch (error) {\n yield put(addError(CREATE_SUBPROJECT, error))\n } finally {\n yield put(creatingProject(false))\n yield call(projectDidCreate)\n }\n}\n\nexport function* updateProject({ data, projectDidUpdate }) {\n const { members, accessLevel, ...projectData } = data\n\n const updatedMembers = map(members, pick(['userId', 'role']))\n\n const {\n id,\n name,\n capabilities: { canEditAccessLevel, canGrantAccess, canEdit },\n rowVersion\n } = projectData\n\n try {\n yield put(updatingProject())\n let versionId = rowVersion\n if (canEdit) {\n const response = yield call(putProject, projectData)\n if (response && response.rowVersion) {\n versionId = response.rowVersion\n }\n }\n\n if (canEditAccessLevel) {\n const response = yield call(patchProject, id, { accessLevel }, versionId)\n if (response && response.rowVersion) {\n versionId = response.rowVersion\n }\n }\n\n if (canGrantAccess) {\n call(putProjectMembers, id, updatedMembers, versionId)\n }\n\n yield fork(notify, `Project \"${name}\" was updated!`)\n } catch (error) {\n if (error && error.httpStatus && error.httpStatus === 409) {\n yield put(\n addError(\n UPDATE_PROJECT,\n 'Somebody else was updating the project at the same time, you can refresh your page to see the latest changes.'\n )\n )\n } else {\n yield put(addError(UPDATE_PROJECT, error))\n }\n } finally {\n yield put(updatingProject(false))\n yield call(projectDidUpdate)\n }\n}\n\nexport function* deleteProjects(action) {\n const { ids } = action\n\n const page = yield select(getPage)\n const rowsPerPage = yield select(getRowsPerPage)\n const namePrefix = yield select(getNamePrefix)\n const sortBy = yield select(getSortBy)\n const sortOrder = yield select(getSortOrder)\n const my = yield select(getMy)\n\n try {\n yield put(deletingProjects())\n\n yield all(ids.map(id => call(delProject, id)))\n\n yield fork(\n notify,\n ids.length > 1\n ? `${ids.length} projects were deleted!`\n : 'The project was deleted!'\n )\n } catch (error) {\n yield put(addError(DELETE_PROJECTS, error))\n } finally {\n yield put(deletingProjects(false))\n yield call(loadProjects, {\n my,\n page,\n rowsPerPage,\n sortBy,\n sortOrder,\n namePrefix\n })\n yield call(action.projectsDidDelete)\n }\n}\n","import { metadata } from './support'\n\nexport const restoreRecycleBinProject = id => {\n return metadata.putJson(`recycle-bin/project/${id}/restore`, null, 2)\n}\n\nexport const restoreRecycleBinDataset = id => {\n return metadata.putJson(`recycle-bin/dataset/${id}/restore`, null, 2)\n}\n\n// Currently only version 1 available\nexport const getRecycleBinItemsDeletedByMe = async (\n offset,\n limit,\n sortBy,\n sortOrder\n) => {\n const query = `?offset=${offset}&limit=${limit}&sortBy=${sortBy}&sortOrder=${sortOrder}`\n const { data, totalCount } = await metadata.getJson(\n `recycle-bin/my-deleted-items${query}`,\n 1\n )\n return { data: data, offset: offset, limit: limit, totalCount: totalCount }\n}\n","import find from 'lodash/fp/find'\n\nimport {\n call,\n put,\n takeLatest,\n takeEvery,\n all,\n select\n} from 'redux-saga/effects'\n\nimport {\n getRecycleBinItemsDeletedByMe as getRecycleBinItemsDeletedByMeState,\n getRecycleBinItemsDeletedByMeOffset,\n getRecycleBinItemsDeletedByMeLimit,\n getRecycleBinItemsDeletedByMeSortBy,\n getRecycleBinItemsDeletedByMeSortOrder\n} from '../state'\n\nimport {\n restoreRecycleBinProject,\n restoreRecycleBinDataset,\n getRecycleBinItemsDeletedByMe\n} from '../apis/recycleBin'\n\nimport { getProjectPath } from '../apis/project'\n\nimport {\n LOAD_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n loadingRecycleBinItemsDeletedByMe,\n setRecycleBinItemsDeletedByMe,\n restoringRecycleBinItemsDeletedByMe,\n RESTORE_RECYCLE_BIN_ITEMS_DELETED_BY_ME\n} from '../actions/recycleBin'\n\nimport { addError } from '../actions/errors'\n\nimport { notify } from '../helpers/saga'\n\nimport { PROJECT_TYPE } from '../shared/constants'\n\nexport default function* watchRecycleBin() {\n yield takeEvery(\n RESTORE_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n restoreRecycleBinItemsDeletedByMe\n )\n\n yield takeLatest(\n LOAD_RECYCLE_BIN_ITEMS_DELETED_BY_ME,\n loadRecycleBinItemsDeletedByMe\n )\n}\n\nfunction* loadRecycleBinItemsDeletedByMe(action) {\n try {\n yield put(loadingRecycleBinItemsDeletedByMe())\n\n // The endpoint supports server side pagination and sorting\n // Server side filtering might be added later\n const { data, totalCount, limit, offset } = yield call(\n getRecycleBinItemsDeletedByMe,\n action.offset,\n action.limit,\n action.sortBy,\n action.sortOrder\n )\n\n // To get the item path we need to call another endpoint for each item\n const projectIds = data.map(item => {\n return item.itemType === PROJECT_TYPE ? item.id : item.projectId\n })\n const responses = yield all(\n projectIds.map(projectId => call(getProjectPath, projectId))\n )\n data.map((item, index) => {\n return (item.path = responses[index])\n })\n // Datasets can only be restored when containing project.capabilites.canDeleteContent\n // (Sub)Projects) can only be restored when project.capabilites.canDelete\n // https://dhigroup.visualstudio.com/MIKE/_git/mike-platform?path=%2FDocumentation%2Fdocs%2FAPI%2FRecycle-bin.md&_a=preview&anchor=restoring-data\n data.map(item => {\n return item.itemType === PROJECT_TYPE\n ? (item.canRestore =\n item.path[item.path.length - 1].capabilities.canDelete)\n : (item.canRestore =\n item.path[item.path.length - 1].capabilities.canDeleteContent)\n })\n\n yield put(\n setRecycleBinItemsDeletedByMe({ data, totalCount, limit, offset })\n )\n } catch (error) {\n yield put(addError(LOAD_RECYCLE_BIN_ITEMS_DELETED_BY_ME, error))\n } finally {\n yield put(loadingRecycleBinItemsDeletedByMe(false))\n }\n}\n\nfunction* restoreRecycleBinItemsDeletedByMe(action) {\n const { ids } = action\n const offset = yield select(getRecycleBinItemsDeletedByMeOffset)\n const limit = yield select(getRecycleBinItemsDeletedByMeLimit)\n const sortBy = yield select(getRecycleBinItemsDeletedByMeSortBy)\n const sortOrder = yield select(getRecycleBinItemsDeletedByMeSortOrder)\n\n try {\n yield put(restoringRecycleBinItemsDeletedByMe())\n\n yield all(ids.map(id => call(restoreItemDeletedByMe, id)))\n\n yield put(restoringRecycleBinItemsDeletedByMe(false))\n\n yield call(\n notify,\n ids.length > 1\n ? `${ids.length} items were restored!`\n : 'The item was restored!'\n )\n } catch (error) {\n yield put(addError(RESTORE_RECYCLE_BIN_ITEMS_DELETED_BY_ME, error))\n yield put(restoringRecycleBinItemsDeletedByMe(false))\n } finally {\n yield call(loadRecycleBinItemsDeletedByMe, {\n offset,\n limit,\n sortBy,\n sortOrder\n })\n }\n}\n\nfunction* restoreItemDeletedByMe(id) {\n const data = yield select(getRecycleBinItemsDeletedByMeState)\n const item = find({ id })(data)\n\n if (item.itemType === PROJECT_TYPE) {\n yield call(restoreRecycleBinProject, id)\n } else {\n yield call(restoreRecycleBinDataset, id)\n }\n}\n","import { put, takeEvery, takeLatest, select, all } from 'redux-saga/effects'\n\nimport { getImport, getConvert, getProjectDetails } from '../state'\n\nimport { removeUpload } from '../actions/uploads'\nimport { removeExport } from '../actions/exports'\nimport { removeImport } from '../actions/imports'\nimport { IMPORT_COMPLETE } from '../actions/imports'\nimport { CONVERT_COMPLETE } from '../actions/converts'\n\nimport { loadProjectDatasets } from '../actions/project'\n\nimport { notify, linkNotify } from '../helpers/saga'\n\nimport { DISMISS_PROGRESS_ITEM, NOTIFY } from '../actions/ui'\n\nexport default function* watchUi() {\n yield takeEvery(NOTIFY, handleNotify)\n yield takeEvery(NOTIFY, handleLinkToProject)\n yield takeEvery(IMPORT_COMPLETE, handleImportComplete)\n yield takeLatest(DISMISS_PROGRESS_ITEM, handleDismissProgressItem)\n yield takeEvery(CONVERT_COMPLETE, handleConvertComplete)\n}\n\n/* export function* showProgressSnack() {\n yield put(openProgressSnack(true))\n} */\n\nexport function* handleNotify(action) {\n yield notify(action.message)\n}\n\nexport function* handleLinkToProject(action) {\n yield linkNotify(action.message, action.project)\n}\n\nexport function* handleImportComplete(action) {\n const completedImport = yield select(getImport, action.id)\n const currentProjectDetails = yield select(getProjectDetails)\n\n // FIXME: before refreshing the project details of company storage table we need to check if the user is still in the page\n if (\n currentProjectDetails &&\n completedImport.projectId === currentProjectDetails.id\n ) {\n yield put(loadProjectDatasets(completedImport.projectId))\n }\n}\n\nexport function* handleConvertComplete(action) {\n const completedConvert = yield select(getConvert, action.id)\n const currentProjectDetails = yield select(getProjectDetails)\n\n // FIXME: before refreshing the project details of company storage table we need to check if the user is still in the page\n if (\n currentProjectDetails &&\n completedConvert.projectId === currentProjectDetails.id\n ) {\n yield put(loadProjectDatasets(completedConvert.projectId))\n }\n}\n\nexport function* handleDismissProgressItem({ id }) {\n yield all([\n put(removeImport(id)),\n put(removeExport(id)),\n put(removeUpload(id))\n ])\n}\n","import uniqid from 'uniqid'\n\nexport const UPLOAD_AND_IMPORT_FILE = 'UPLOAD_AND_IMPORT_FILE'\nexport const uploadAndImportFile = (projectId, data) => ({\n type: UPLOAD_AND_IMPORT_FILE,\n id: uniqid.time(),\n projectId,\n data\n})\n\nexport const UPLOAD_AND_IMPORT_MANY_FILES = 'UPLOAD_AND_IMPORT_MANY_FILES'\nexport const uploadAndImportManyFiles = (projectId, files) => ({\n type: UPLOAD_AND_IMPORT_MANY_FILES,\n projectId,\n files\n})\n","export const FILEREADER = 'FileReader'\nexport const FILEWRITER = 'FileWriter'\n\nconst asIfReaderWriter = {\n reader: FILEREADER,\n writer: FILEWRITER\n}\n\nexport default asIfReaderWriter\n","import { put, takeEvery, take, all } from 'redux-saga/effects'\nimport {\n UPLOAD_AND_IMPORT_FILE,\n UPLOAD_AND_IMPORT_MANY_FILES,\n uploadAndImportFile as uploadAndImportFileAction\n} from '../actions/uploadAndImport'\nimport { UPLOAD_COMPLETE, UPLOAD_FAIL, uploadFile } from '../actions/uploads'\nimport { importFile } from '../actions/imports'\nimport { addError } from '../actions/errors'\nimport asIfReaderWriter from '../components/DatasetConversionDialog/model/asIfReaderWriter'\n\nconst LOG_TAG = 'saga.uploadAndImport'\n\nexport default function* watchUploadAndImport() {\n yield takeEvery(UPLOAD_AND_IMPORT_FILE, uploadAndImportFile)\n}\n\nexport function* watchUploadAndImportMany() {\n yield takeEvery(UPLOAD_AND_IMPORT_MANY_FILES, uploadAndImportManyFiles)\n}\n\nexport function* uploadAndImportManyFiles(action) {\n const { projectId, files } = action\n try {\n yield all(\n files.map(file =>\n put(\n uploadAndImportFileAction(projectId, {\n file: file,\n importData: {\n name: file.name,\n reader: asIfReaderWriter.reader,\n writer: asIfReaderWriter.writer\n }\n })\n )\n )\n )\n } catch (error) {\n yield put(addError(UPLOAD_AND_IMPORT_MANY_FILES, error))\n }\n}\n\nexport function* uploadAndImportFile(action) {\n // eslint-disable-next-line no-console\n console.log(LOG_TAG, action.id, 'New upload and import...', { action })\n\n const { id, projectId, data } = action\n const { file } = data\n const importData = {\n ...data.importData,\n fileName: file.name\n }\n\n try {\n yield put(uploadFile(id, data.importData.name, file))\n\n while (true) {\n const uploadAction = yield take([UPLOAD_COMPLETE, UPLOAD_FAIL])\n\n if (uploadAction.id === id) {\n if (uploadAction.type === UPLOAD_COMPLETE) {\n yield put(\n importFile(\n id,\n file.name,\n uploadAction.fileUrl,\n projectId,\n importData\n )\n )\n }\n\n break\n }\n }\n } catch (error) {\n yield put(addError(UPLOAD_AND_IMPORT_FILE, error))\n }\n}\n","import { metadata } from './support'\n\nexport const getUploadUrl = async () => {\n const { data } = await metadata.getJson('conversion/transfer/upload-url', 2)\n return data\n}\n","/* eslint-disable no-console */\nimport { END } from 'redux-saga'\nimport { delay, call, put, takeEvery, take, fork } from 'redux-saga/effects'\nimport {\n StorageURL,\n BlockBlobURL,\n Aborter,\n uploadBrowserDataToBlockBlob,\n AnonymousCredential\n} from '@azure/storage-blob'\n\nimport { createEventChannelCallback } from '../helpers/saga'\nimport { UPLOAD_REMOVE_ON_DONE_DELAY } from '../shared/constants'\nimport { getUploadUrl } from '../apis/blobStorage'\n\nimport {\n UPLOAD_FILE,\n uploadStart,\n updateProgress,\n uploadComplete,\n uploadFail,\n removeUpload\n} from '../actions/uploads'\n\nconst LOG_TAG = 'saga.uploads'\n\nexport default function* watchUploads() {\n yield takeEvery(UPLOAD_FILE, uploadFile)\n}\n\nexport function* uploadFile(action) {\n console.log(LOG_TAG, action.id, 'New upload...', { action })\n\n const { id, file } = action\n\n try {\n yield put(uploadStart(id))\n\n const uploadUrl = yield call(getUploadUrl)\n yield call(uploadToAzureStorage, id, file, uploadUrl)\n\n yield put(uploadComplete(id, uploadUrl))\n yield delay(UPLOAD_REMOVE_ON_DONE_DELAY)\n yield put(removeUpload(id))\n } catch (error) {\n console.error(LOG_TAG, id, 'Upload failed!', error)\n yield put(uploadFail(id, error))\n }\n}\n\nconst pipeline = StorageURL.newPipeline(new AnonymousCredential())\n\nexport function* uploadToAzureStorage(id, file, uploadUrl) {\n console.log(LOG_TAG, id, 'Start upload', {\n id,\n file,\n uploadUrl\n })\n\n const blockBlobURL = new BlockBlobURL(uploadUrl, pipeline)\n\n const [channel, progressHandler] = yield call(\n createEventChannelCallback,\n createEnhancedProgressCallback(file.size)\n )\n\n yield fork(uploadBrowserDataToBlockBlob, Aborter.None, file, blockBlobURL, {\n progress: progressHandler\n })\n\n try {\n while (true) {\n const loadedBytes = yield take(channel)\n const progress = Number(((loadedBytes / file.size) * 100).toFixed(1))\n\n console.log(LOG_TAG, id, 'Uploading...', progress + '%')\n yield put(updateProgress(id, progress, file.name))\n }\n } finally {\n console.log(LOG_TAG, id, 'Upload completed!') // NOTE: finally needed by the channel api\n }\n}\n\nexport const createEnhancedProgressCallback = fileSize => (\n emit,\n { loadedBytes }\n) => emit(fileSize - loadedBytes <= 0 ? END : loadedBytes)\n","// import proxy from './proxy'\nimport { cloudHomeBackend } from './support'\n\n/* let apiUrl: string = ''\n\nconst init = (url: string) => {\n apiUrl = url\n} */\n\nconst getAllApplications = async () => {\n return await cloudHomeBackend.getJson('api/AppData/applicationslist')\n // return await proxy.http.get(apiUrl + '/api/AppData/applicationslist')\n}\n\nexport const MikeCloudApps = {\n // init,\n getAllApplications\n}\n","import { call, put, takeLatest } from 'redux-saga/effects'\n\nimport { LOAD_APPS, loadingApps, setApps } from '../actions/applications'\n\nimport { addError } from '../actions/errors'\nimport { MikeCloudApps } from '../apis/cloudApps'\n\nexport default function* watchFetchApps() {\n yield takeLatest(LOAD_APPS, fetchAllApps)\n}\n\nexport function* fetchAllApps() {\n try {\n yield put(loadingApps())\n\n const response = yield call(MikeCloudApps.getAllApplications)\n\n if (response) {\n yield put(setApps(response))\n }\n } catch (error) {\n yield put(addError(LOAD_APPS, error))\n } finally {\n yield put(loadingApps(false))\n }\n}\n","import IFeature from '../model/IFeature'\n\nexport const LOAD_TENANT_FEATURES = 'TENANT_FEATURES/LOAD'\nexport const loadTenantFeatures = () => ({\n type: LOAD_TENANT_FEATURES\n})\n\nexport const LOADING_TENANT_FEATURES = 'TENANT_FEATURES/LOADING'\nexport const loadingTenantFeatures = (loading = true) => ({\n type: LOADING_TENANT_FEATURES,\n loading\n})\n\nexport const SET_TENANT_FEATURES = 'TENANT_FEATURES/SET'\nexport const setTenantFeatures = (features: IFeature) => ({\n type: SET_TENANT_FEATURES,\n features\n})\n\nexport const UPDATE_TENANT_APPLICATION = 'TENANT_APPLICATION/UPDATE'\nexport const updateTenantApplication = (\n appId: string,\n tenantId: string,\n status: boolean\n) => ({\n type: UPDATE_TENANT_APPLICATION,\n appId,\n tenantId,\n status\n})\n","import { takeEvery, put, call, select } from 'redux-saga/effects'\nimport {\n setIsAdmin,\n setIsBackOffice,\n setIsRootContributor\n} from '../actions/admin'\nimport { SET_IS_AUTHENTICATED, SET_USER } from '../actions/auth'\nimport { loadAdminCredits } from '../actions/admin'\nimport { BACKOFFICE_ROLE } from '../shared/constants'\nimport { getCapabilities } from '../apis/project'\nimport { getUser } from '../state'\nimport { loadTenantFeatures } from '../actions/features'\nimport { loadTenants } from '../actions/tenant'\n\nexport default function* watchAuth() {\n yield takeEvery(SET_USER, handleAuthData)\n yield takeEvery(SET_IS_AUTHENTICATED, handleIsAuthenticated)\n}\n\nfunction* handleIsAuthenticated(action) {\n const { isAuthenticated } = action\n const user = yield select(getUser)\n if (isAuthenticated && user) {\n yield put(loadAdminCredits())\n yield put(loadTenantFeatures())\n try {\n const capabilities = yield call(getCapabilities, user.tenantId)\n\n if (capabilities?.canGrantAccess) {\n yield put(setIsAdmin(true))\n } else {\n yield put(setIsAdmin(false))\n }\n\n if (capabilities?.canCreateContent) {\n yield put(setIsRootContributor(true))\n } else {\n yield put(setIsRootContributor(false))\n }\n } catch (error) {\n yield put(setIsAdmin(false))\n yield put(setIsRootContributor(false))\n }\n }\n}\n\nfunction* handleAuthData(action) {\n const { user } = action\n\n if (user) {\n const isBackOffice =\n user && user.roles && user.roles.includes(BACKOFFICE_ROLE)\n yield put(loadTenants(isBackOffice))\n yield put(setIsBackOffice(isBackOffice))\n }\n}\n","import { put, takeEvery, all, delay } from 'redux-saga/effects'\n//import { IProgressItem } from '@mike/mike-shared-frontend/mike-topbar-progress-spinner';\nimport { ITrackProgressItem } from '../model/ITrackProgressItem'\nimport { PROGRESS_ITEM_TIMEOUT } from '@mike/mike-shared-frontend/mike-topbar-progress-spinner'\nimport {\n removeUpload,\n UPLOAD_FILE,\n UPDATE_PROGRESS,\n UPLOAD_FAIL\n} from '../actions/uploads'\nimport {\n IMPORT_START,\n IMPORT_FAIL,\n IMPORT_COMPLETE,\n removeImport\n} from '../actions/imports'\nimport {\n EXPORT_START,\n UPDATE_EXPORT_PROGRESS,\n EXPORT_FAIL,\n EXPORT_COMPLETE,\n removeExport\n} from '../actions/exports'\nimport {\n CONVERT_START,\n UPDATE_CONVERSION_PROGRESS,\n CONVERT_FAIL,\n CONVERT_COMPLETE,\n removeConvert\n} from '../actions/converts'\n\nimport {\n updateOrAddProgressItem,\n progressItemComplete,\n progressItemFailed,\n removeProgressItem\n} from '../actions/progressItems'\nimport { addError } from '../actions/errors'\n\nexport default function* watchProgress() {\n yield takeEvery(UPLOAD_FILE, handleUploadStart)\n yield takeEvery(IMPORT_START, handleImportStart)\n yield takeEvery(UPLOAD_FAIL, handleProcessFailed)\n yield takeEvery(UPDATE_PROGRESS, handleUpdateUploadProgress)\n\n yield takeEvery(IMPORT_START, handleImportStart)\n yield takeEvery(IMPORT_FAIL, handleProcessFailed)\n yield takeEvery(IMPORT_COMPLETE, handleImportComplete)\n\n yield takeEvery(EXPORT_START, handleExportStart)\n yield takeEvery(UPDATE_EXPORT_PROGRESS, handleUpdateProgress)\n yield takeEvery(EXPORT_FAIL, handleProcessFailed)\n yield takeEvery(EXPORT_COMPLETE, handleExportComplete)\n\n yield takeEvery(CONVERT_START, handleConvertStart)\n yield takeEvery(UPDATE_CONVERSION_PROGRESS, handleUpdateProgress)\n yield takeEvery(CONVERT_FAIL, handleProcessFailed)\n yield takeEvery(CONVERT_COMPLETE, handleConversionComplete)\n}\n\nexport function* handleProcessFailed(action) {\n const { id, error } = action\n const progressItem: ITrackProgressItem = {\n id: id,\n title: 'Error',\n progressValue: 75\n }\n yield put(progressItemFailed(progressItem))\n yield put(addError(action.type, error))\n yield delay(PROGRESS_ITEM_TIMEOUT)\n yield put(removeProgressItem(progressItem))\n yield all([\n put(removeImport(id)),\n put(removeUpload(id)),\n put(removeExport(id)),\n put(removeConvert(id))\n ])\n}\n\nexport function* handleUpdateUploadProgress(action) {\n const { id, progress, fileName } = action\n const progressItem: ITrackProgressItem = {\n id: id,\n title: 'Step 1 of 2: Uploading (' + fileName + ')',\n progressValue: progress / 2\n }\n yield put(updateOrAddProgressItem(progressItem))\n}\n\nexport function* handleUpdateProgress(action) {\n const { id, progress, title } = action\n const progressItem: ITrackProgressItem = {\n id: id,\n title: title && title,\n progressValue: progress\n }\n yield put(updateOrAddProgressItem(progressItem))\n}\n\nexport function* handleUploadStart(action) {\n const { id, fileName } = action\n const progressItem: ITrackProgressItem = {\n id: id,\n title: 'Step 1 of 2: Uploading (' + fileName + ')',\n progressValue: 0\n }\n yield put(updateOrAddProgressItem(progressItem))\n}\n\nexport function* handleExportStart(action) {\n const { id, title } = action\n const progressItem: ITrackProgressItem = {\n id: id,\n title: title,\n progressValue: 0\n }\n yield put(updateOrAddProgressItem(progressItem))\n}\n\nexport function* handleConvertStart(action) {\n const { id, title } = action\n const progressItem: ITrackProgressItem = {\n id: id,\n title: title,\n progressValue: 0\n }\n yield put(updateOrAddProgressItem(progressItem))\n}\n\nexport function* handleImportStart(action) {\n const { id, data, initialId } = action\n if (initialId) {\n const name =\n data && data.name\n ? ' (' + data.name + ')'\n : data && data.fileName\n ? ' (' + data.fileName + ')'\n : ''\n\n const progressItem: ITrackProgressItem = {\n id: initialId,\n title: 'Step 2 of 2: Converting' + name,\n progressValue: 75,\n importId: id\n }\n yield put(updateOrAddProgressItem(progressItem))\n }\n}\n\nexport function* handleExportComplete(action) {\n const progressItem: ITrackProgressItem = {\n id: action.id,\n title: 'Download complete',\n progressValue: 100\n }\n yield put(progressItemComplete(progressItem))\n yield delay(PROGRESS_ITEM_TIMEOUT)\n yield put(removeProgressItem(progressItem))\n yield put(removeExport(action.id))\n}\n\nexport function* handleConversionComplete(action) {\n const progressItem: ITrackProgressItem = {\n id: action.id,\n title: 'Conversion complete',\n progressValue: 100\n }\n yield put(progressItemComplete(progressItem))\n yield delay(PROGRESS_ITEM_TIMEOUT)\n yield put(removeProgressItem(progressItem))\n yield put(removeConvert(action.id))\n}\n\nexport function* handleImportComplete(action) {\n const progressItem: ITrackProgressItem = {\n id: action.id,\n title: 'Upload complete',\n progressValue: 100\n }\n yield put(progressItemComplete(progressItem))\n yield delay(PROGRESS_ITEM_TIMEOUT)\n yield put(removeProgressItem(progressItem))\n yield all([put(removeImport(action.id)), put(removeUpload(action.id))])\n}\n","/* eslint-disable no-console */\nimport {\n GET_EXPORT_INFO_DELAY,\n EXPORT_REMOVE_ON_DONE_DELAY\n} from '../shared/constants'\nimport { call, put, takeEvery, delay } from 'redux-saga/effects'\nimport { mapUserConvertDataToConvertApiBody } from '../helpers/import'\nimport {\n transferConvert,\n TRANSFER_STATUSES,\n getTransfer\n} from '../apis/transfer'\nimport {\n CONVERT_DATASET,\n convertStart,\n updateConversionProgress,\n convertComplete,\n convertFail,\n removeConvert\n} from '../actions/converts'\n\nconst TAG = '@saga.converts'\n\nexport default function* watchConverts() {\n yield takeEvery(CONVERT_DATASET, convertDataset)\n}\n\nexport function* convertDataset(action) {\n console.log(TAG, action.id, 'New conversion of existing dataset...', {\n action\n })\n\n const { projectId, datasetId, data, datasetName } = action\n let result\n try {\n result = yield call(\n transferConvert,\n datasetId,\n mapUserConvertDataToConvertApiBody(data, projectId)\n )\n const id = datasetId\n const title = 'Converting (' + datasetName + ')'\n yield put(convertStart(id, title))\n console.log(TAG, id, 'Start conversion...', { result })\n\n let info\n while (true) {\n info = yield call(getTransfer, result.id)\n console.log(TAG, id, 'Exporting state...', { info })\n\n if (info.status === TRANSFER_STATUSES.IN_PROGRESS) {\n yield put(updateConversionProgress(id, 50, title))\n } else if (info.status === TRANSFER_STATUSES.ERROR) {\n throw new Error(info.errorMessage)\n } else if (info.status === TRANSFER_STATUSES.COMPLETED) {\n break\n }\n\n yield delay(GET_EXPORT_INFO_DELAY)\n }\n\n console.log(TAG, id, 'Conversion completed!')\n\n yield put(convertComplete(id))\n yield delay(EXPORT_REMOVE_ON_DONE_DELAY)\n yield put(removeConvert(id))\n } catch (error) {\n console.error(TAG, datasetId, 'Conversion failed!', error)\n yield put(convertFail(datasetId, error))\n }\n}\n","export const mockDedicatedWriters = [\n {\n name: 'GISWriter',\n description: 'Writes into GIS storage',\n datasetFormat: 'GIS',\n parameters: []\n },\n {\n name: 'TSWriter',\n description: 'Writes into timeseries storage',\n datasetFormat: 'TS',\n parameters: [\n {\n name: 'TimeSeriesProperties',\n description:\n 'JSON serialized array of props (name,type = Double,Text,Booelan,Dateime)',\n dataType: 'JSON',\n required: false\n }\n ]\n },\n {\n name: 'MDWriter',\n description: 'Writes into multidimensional storage',\n datasetFormat: 'MD',\n parameters: [\n {\n name: 'UseSpatialIndex',\n dataType: 'boolean',\n required: true\n }\n ]\n }\n]\n","import { metadata } from './support'\nimport { mockDedicatedWriters } from '../components/DatasetConversionDialog/model/mockDedicatedWriters'\nimport { mockFileWriters } from '../components/DatasetConversionDialog/model/mockFileWriters'\n\nexport const getDatasetWriters = async (writerType = '') => {\n const queryParameter = writerType ? '?filter=' + writerType : ''\n const { data } = await metadata.getJson(\n 'conversion/writer/list' + queryParameter,\n 2\n )\n return data.map(element => {\n return {\n id: element.name,\n ...element\n }\n })\n}\n\nexport const getMockDedicatedDatasetWriters = async () => {\n return mockDedicatedWriters\n}\n\nexport const getMockFileDatasetWriters = async () => {\n return mockFileWriters\n}\n","import { call, put, takeEvery } from 'redux-saga/effects'\n\nimport { getDatasetWriters } from '../apis/datasetWriters'\n/* import {\n getMockFileDatasetWriters,\n getMockDedicatedDatasetWriters\n} from '../apis/datasetWriters' */\n\nimport {\n LOAD_DATASET_WRITERS,\n loadingDatasetWriters,\n setDatasetWriters\n} from '../actions/datasetWriters'\n\nimport { addError } from '../actions/errors'\n\nexport default function* watchDatasetWriters() {\n yield takeEvery(LOAD_DATASET_WRITERS, loadDatasetWriters)\n}\n\nexport function* loadDatasetWriters() {\n try {\n yield put(loadingDatasetWriters())\n const dedicatedWriters = yield call(getDatasetWriters, 'Dedicated')\n const fileWriters = yield call(getDatasetWriters, 'File')\n\n /* const dedicatedWriters = yield call(getMockDedicatedDatasetWriters)\n const fileWriters = yield call(getMockFileDatasetWriters) */\n\n yield put(setDatasetWriters(fileWriters, dedicatedWriters))\n } catch (error) {\n yield put(addError(LOAD_DATASET_WRITERS, error))\n } finally {\n yield put(loadingDatasetWriters(false))\n }\n}\n","import { coordinateSystem } from './support'\n\n/* const BASE_URL =\n 'data/00000000-0000-0000-0000-000000000000/coordinatesystems/coordinate-system' */\n\nconst BASE_URL = 'crs/coordinate-system'\n\nexport const getCoordinateSystems = async searchText => {\n const query = searchText ? `?fulltext=${searchText}` : ''\n const { data } = await coordinateSystem.getJson(`${BASE_URL}/list${query}`, 2)\n return data\n}\n\nexport const getCoordinateSystem = srid =>\n coordinateSystem.getJson(`${BASE_URL}/${srid}`)\n\nexport const getAuthorities = () =>\n coordinateSystem.getJson(`${BASE_URL}/authority`)\n","import { call, put, takeLatest, select } from 'redux-saga/effects'\nimport { getAllCoordinateSystems } from '../state'\nimport { getCoordinateSystems } from '../apis/coordinateSystems'\n\nimport {\n LOAD_COORDINATE_SYSTEMS,\n setCoordinateSystems,\n loadingCoordinateSystems\n} from '../actions/coordinateSystems'\n\nimport { addError } from '../actions/errors'\n\nexport default function* watchFetchCoordinateSystems() {\n yield takeLatest(LOAD_COORDINATE_SYSTEMS, fetchAllCoordinateSystems)\n}\n\nexport function* fetchAllCoordinateSystems() {\n const appCoordinateSystems = yield select(getAllCoordinateSystems)\n\n if (appCoordinateSystems.length === 0) {\n try {\n yield put(loadingCoordinateSystems())\n\n const response = yield call(getCoordinateSystems)\n\n if (response) {\n yield put(setCoordinateSystems(response))\n }\n } catch (error) {\n yield put(addError(LOAD_COORDINATE_SYSTEMS, error))\n } finally {\n yield put(loadingCoordinateSystems(false))\n }\n }\n}\n","import { administration, metadata } from './support'\nimport IAPIAccess from '../model/IAPIAccess'\nimport IAPIKey from '../model/IAPIKey'\nimport ITenantUser from '../model/ITenantUser'\nimport ITenant from '../model/ITenant'\n\nconst BASE_URL = 'admin'\nconst BASE_IAM_URL = 'iam'\n\nexport interface IBillingInformation {\n billingReference: string\n billingReferenceTag: string\n billingReferenceType: string\n}\n\nexport interface ICreateTenant {\n name: string\n adminUserId: string\n billingInformation: IBillingInformation\n}\n\nexport interface ICreateTenantFormValues {\n name: string\n billingReference: string\n billingReferenceType: 'Maconomy' | 'DHI'\n billingReferenceTag: string\n}\n\nexport interface SASTokenReturnType {\n data: string\n}\nexport const getSASToken = (tenantId: string): Promise => {\n return metadata.getJson(\n `services/sastoken?projectId=${tenantId}`,\n 1\n ) as Promise\n}\n\nexport const getCredits = () => administration.getJson(`${BASE_URL}/credit`, 3)\n\nexport const getTenantUsers = () =>\n administration.getJson(`${BASE_IAM_URL}/tenantuser`, 3)\n\nexport const getUserTenants = () =>\n administration.getJson(`${BASE_IAM_URL}/tenant/my`, 3)\n\nexport const postTenant = (data: ICreateTenant) =>\n administration.postJson(`${BASE_IAM_URL}/tenant`, data, 3)\n\nexport const patchTenant = (data: ITenant) =>\n getSASToken(data.id).then((token: SASTokenReturnType) => {\n administration.postJson(\n `${BASE_IAM_URL}/tenant/${data.id}`,\n { name: data.name },\n 3,\n {\n 'dhi-sas-token': token.data\n }\n )\n })\n\nexport const putBillingInformation = (\n tenantId,\n billingInformation: IBillingInformation\n) =>\n metadata.putJson(\n `metadata/project/${tenantId}/billing-information`,\n { id: tenantId, billingInformation },\n 3\n )\n\nexport const getUsers = (tenantId: string) =>\n metadata.getJson(`metadata/project/${tenantId}/member`, 3)\n\nexport const getProject = (tenantId: string) =>\n metadata.getJson(`metadata/project/${tenantId}`, 3)\n\nexport const inviteUserApi = (\n email: string,\n role: string,\n redirectUri: string,\n tenantId: string\n) => {\n const payload = {\n email,\n role\n }\n\n if (redirectUri !== 'none') {\n payload['redirectUri'] = redirectUri\n }\n\n return getSASToken(tenantId).then((token: SASTokenReturnType) => {\n return administration.postJson(\n `${BASE_IAM_URL}/project/${tenantId}/invite`,\n payload,\n 3,\n {\n 'dhi-sas-token': token.data\n }\n )\n })\n}\n\nexport const acceptInvitation = (\n invitationVersion: string,\n invitationIv: string,\n invitation: string\n): Promise<{\n currentRole: string\n email: string\n isUserAlreadyMember: boolean\n tenantId: string\n tenantName: string\n}> => {\n const params = { invitationVersion, invitationIv, invitation }\n return administration.postJson(\n `${BASE_IAM_URL}/invite/accept?${new URLSearchParams(params).toString()}`,\n {},\n 3\n )\n}\n\nexport const postUsers = (users: ITenantUser[], rowVersion, tenantId: string) =>\n metadata.putJson(\n `metadata/project/${tenantId}/members`,\n {\n members: users.map(user => ({\n userId: user.id,\n role: user.role\n })),\n rowVersion: rowVersion\n },\n 3\n )\n\nexport const postUser = (data, tenantId: string) =>\n metadata.postJson(`metadata/project/${tenantId}/member`, data, 3)\n\nexport const delUser = (id: string, tenantId: string) =>\n metadata.delJson(`metadata/project/${tenantId}/member/${id}`, 3)\n\nexport interface GetAccountsReturnType {\n data: IAPIAccess[]\n}\nexport const getAccounts = (tenantId: string) =>\n administration.getJson(\n `${BASE_IAM_URL}/project/${tenantId}/account/list`,\n 3,\n {\n 'dhi-project-id': tenantId\n }\n ) as Promise\n\nexport const postAccount = (tenantId, account: IAPIAccess) =>\n administration.postJson(\n `${BASE_IAM_URL}/project/${tenantId}/account`,\n account,\n 3,\n {\n 'dhi-project-id': tenantId\n }\n )\n\nexport const patchAccount = (tenantId, account: IAPIAccess) =>\n administration.patchJson(\n `${BASE_IAM_URL}/project/${tenantId}/account`,\n account,\n 3,\n {\n 'dhi-project-id': tenantId\n }\n )\n\nexport const deleteAccounts = (tenantId, accountList: IAPIAccess[]) =>\n accountList.map(account => {\n return administration.delJson(\n `${BASE_IAM_URL}/project/${tenantId}/account/${account.accountId}`,\n 3,\n {\n 'dhi-project-id': tenantId\n }\n )\n })\n\nexport interface GetKeysReturnType {\n data: IAPIKey[]\n}\nexport const getApiKeys = (tenantId: string, account: IAPIAccess) =>\n administration.getJson(\n `${BASE_IAM_URL}/project/${tenantId}/account/${account.accountId}/keys`,\n 3,\n {\n 'dhi-project-id': tenantId\n }\n ) as Promise\n\nexport const postAPIKey = (tenantId, account: IAPIAccess, key: IAPIKey) =>\n administration.postJson(\n `${BASE_IAM_URL}/project/${tenantId}/account/${account.accountId}/key`,\n key,\n 3,\n {\n 'dhi-project-id': tenantId\n }\n )\n\nexport const patchAPIKey = (tenantId, account: IAPIAccess, key: IAPIKey) =>\n administration.patchJson(\n `${BASE_IAM_URL}/project/${tenantId}/account/${account.accountId}/key/${key.publicId}`,\n key,\n 3,\n {\n 'dhi-project-id': tenantId\n }\n )\n\nexport const deleteAPIKeys = (tenantId, keys: IAPIKey[]) =>\n keys.map(key => {\n return administration.delJson(\n `${BASE_IAM_URL}/project/${tenantId}/account/${key.accountId}/key/${key.publicId}`,\n 3,\n {\n 'dhi-project-id': tenantId\n }\n )\n })\n\nexport const getCurrentConsumptionLogUrl = () =>\n metadata.getJson(`services/consumption/baseuri`, 3)\n","import any from 'lodash/fp/any'\nimport map from 'lodash/map'\nimport get from 'lodash/get'\n\nexport const CATEGORIES = {\n ALL: 'all',\n MY: 'my',\n SHARED: 'shared',\n CONFIDENTIAL: 'confidential'\n}\n\nexport const ACCESS_LEVELS = {\n SHARED: 'Shared',\n PRIVATE: 'Private',\n CONFIDENTIAL: 'Confidential'\n}\n\nexport const ROLE_TYPES = {\n OWNER: 'Owner',\n CONTRIBUTOR: 'Contributor',\n READER: 'Reader'\n}\n\nexport const ROLE_TYPES_EXT = {\n OWNER: 'Owner',\n CONTRIBUTOR: 'Contributor',\n READER: 'Reader',\n NONE: 'None'\n}\n\nexport const isUserOwner = user => project =>\n any(({ userId, role }) => userId === user.id && role === ROLE_TYPES.OWNER)(\n project.members\n )\n\nexport const isUserMember = user => project =>\n any(({ userId }) => userId === user.id)(project.members)\n\nexport const enhanceProjectMembers = (projectMembers, customerUsers) => {\n return projectMembers?.map(member => ({\n ...member,\n ...get(customerUsers, member.userId),\n role: member.role\n }))\n}\n","import { defineMessages } from 'react-intl'\nimport toLower from 'lodash/toLower'\n\nimport { ACCESS_LEVELS } from '../helpers/project'\n\nexport const commonMessages = defineMessages({\n accessLevel: { id: 'common.accessLevel' },\n allProjects: { id: 'common.allProjects' },\n cancel: { id: 'common.cancel' },\n confidential: { id: 'common.confidential' },\n confidentialShort: { id: 'common.confidentialShort' },\n createdAt: { id: 'common.createdAt' },\n dataset: { id: 'common.dataset' },\n delete: { id: 'common.delete' },\n deletedAt: { id: 'common.deletedAt' },\n description: { id: 'common.description' },\n download: { id: 'common.download' },\n edit: { id: 'common.edit' },\n editedAt: { id: 'common.editedAt' },\n folder: { id: 'common.folder' },\n format: { id: 'common.format' },\n import: { id: 'common.import' },\n lastActivityAt: { id: 'common.lastActivityAt' },\n locationType: { id: 'common.locationType' },\n members: { id: 'common.members' },\n myProjects: { id: 'common.myProjects' },\n name: { id: 'common.name' },\n okay: { id: 'common.okay' },\n owner: { id: 'common.owner' },\n private: { id: 'common.private' },\n privateShort: { id: 'common.privateShort' },\n project: { id: 'common.project' },\n projects: { id: 'common.projects' },\n recycleBin: { id: 'common.recycleBin' },\n refresh: { id: 'common.refresh' },\n restore: { id: 'common.restore' },\n shared: { id: 'common.shared' },\n sharedShort: { id: 'common.sharedShort' },\n siteData: { id: 'common.siteData' },\n size: { id: 'common.size' },\n tags: { id: 'common.tags' },\n type: { id: 'common.type' },\n updatedAt: { id: 'common.updatedAt' },\n upload: { id: 'common.upload' },\n yes: { id: 'common.yes' },\n yesDelete: { id: 'common.yesDelete' },\n data: { id: 'common.data' },\n email: { id: 'common.email' },\n role: { id: 'common.role' },\n userRole: { id: 'common.user-role' },\n tenantAccess: { id: 'common.tenantAccess' },\n tenantInfo: { id: 'common.tenantInfo' },\n tenantUsers: { id: 'common.tenantUsers' },\n tenantApiAccess: { id: 'common.tenantApiAccess' },\n noAccess: { id: 'common.noAccess' },\n tenantGroups: { id: 'common.tenantGroups' },\n tenantApplications: { id: 'common.tenantApplications' }\n})\n\nconst messages = {\n ...commonMessages\n // TODO: put here other messages from different context\n}\n\nexport const getProjectAccessLevelMessage = accessLevel =>\n commonMessages[toLower(accessLevel)]\n\nexport const getProjectAccessLevelShortMessage = accessLevel =>\n commonMessages[toLower(accessLevel) + 'Short']\n\nexport const localizeProjectAccessLevels = intl =>\n Object.values(ACCESS_LEVELS).map(value => ({\n value,\n name: intl.formatMessage(getProjectAccessLevelMessage(value))\n }))\n\nexport default messages\n","import { call, put, takeEvery, select, fork } from 'redux-saga/effects'\nimport { intl } from '../index'\nimport {\n setAdminCredits,\n LOAD_ADMIN_CREDITS,\n loadingAdminCredits\n} from '../actions/admin'\n\nimport {\n setTenants,\n LOAD_TENANTS,\n loadingTenants,\n CREATE_TENANT,\n creatingTenant,\n loadTenants,\n UPDATE_TENANT,\n UpdateTenantType,\n setCurrentTenantName\n} from '../actions/tenant'\n\nimport { addError } from '../actions/errors'\nimport {\n getCredits,\n getUserTenants,\n postTenant,\n ICreateTenant,\n patchTenant,\n putBillingInformation\n} from '../apis/admin'\n\nimport { getUser, getUserIsBackOffice } from '../state'\n\nimport ITenant from '../model/ITenant'\nimport { notify } from '../helpers/saga'\nimport { ICreateTenantFormValues } from '../apis/admin'\nimport messages from '../shared/messages'\n\nexport default function* watchAdmin() {\n yield takeEvery(LOAD_TENANTS, fetchTenants)\n yield takeEvery(CREATE_TENANT, createTenant)\n yield takeEvery(UPDATE_TENANT, updateTenant)\n yield takeEvery(LOAD_ADMIN_CREDITS, fetchCredits)\n}\n\nexport function* createTenant(action) {\n const isBackOffice = yield select(getUserIsBackOffice)\n try {\n yield put(creatingTenant())\n const user = yield select(getUser)\n\n const formData = action.data as ICreateTenantFormValues\n const data = {\n name: formData.name,\n adminUserId: user.id,\n billingInformation: {\n billingReference: formData.billingReference,\n billingReferenceTag: formData.billingReferenceTag,\n billingReferenceType: formData.billingReferenceType\n }\n } as ICreateTenant\n const tenant = yield call(postTenant, data)\n\n yield fork(notify, `Site \"${tenant.name}\" was created!`)\n } catch (error) {\n yield put(addError(CREATE_TENANT, error))\n } finally {\n yield put(creatingTenant(false))\n yield put(loadTenants(isBackOffice))\n }\n}\n\nfunction* fetchCredits() {\n try {\n yield put(loadingAdminCredits())\n\n const response = yield call(getCredits)\n\n if (response && response.credits) {\n yield put(setAdminCredits(Math.round(response.credits)))\n }\n } catch (error) {\n // The credits are not available for this user, set them to 0\n yield put(setAdminCredits(0))\n } finally {\n yield put(loadingAdminCredits(false))\n }\n}\n\nfunction* fetchTenants(action) {\n const user = yield select(getUser)\n if (user) {\n const { canCreateTenants } = action\n yield put(loadingTenants())\n let tenants = new Array()\n try {\n const response = yield call(getUserTenants)\n\n if (response) {\n tenants = response\n // We need an active tenant to fetch and create content at root level\n if (tenants.length === 0) {\n if (!canCreateTenants) {\n yield put(\n addError(LOAD_TENANTS, intl.formatMessage(messages.noAccess))\n )\n }\n }\n }\n yield put(setTenants(tenants))\n } catch (error) {\n yield put(addError(LOAD_TENANTS, error))\n } finally {\n yield put(loadingTenants(false))\n }\n }\n}\n\nfunction* updateTenant(action: UpdateTenantType) {\n try {\n yield call(patchTenant, action.tenant)\n yield call(\n putBillingInformation,\n action.tenant.id,\n action.billingInformation\n )\n yield put(setCurrentTenantName(action.tenant.id, action.tenant.name))\n } catch (error) {\n yield put(addError(UPDATE_TENANT, error))\n }\n}\n","import ITenantUser from '../model/ITenantUser'\n\nexport type LoadUsersType = {\n type: string\n tenantId: string\n}\nexport const LOAD_USERS = 'USERS/LOAD'\nexport const loadUsers = (tenantId: string): LoadUsersType => ({\n type: LOAD_USERS,\n tenantId\n})\n\nexport type DeleteUsersType = {\n type: string\n users: ITenantUser[]\n tenantId: string\n}\nexport const DELETE_USERS = 'USERS/DELETE'\nexport const deleteUsers = (\n users: ITenantUser[],\n tenantId: string\n): DeleteUsersType => ({\n type: DELETE_USERS,\n users,\n tenantId\n})\n\nexport type UpdateUserType = {\n type: string\n user: ITenantUser\n tenantId: string\n}\nexport const UPDATE_USER = 'USERS/UPDATE'\nexport const updateUser = (\n user: ITenantUser,\n tenantId: string\n): UpdateUserType => ({\n type: UPDATE_USER,\n user,\n tenantId\n})\n\nexport type InviteUserType = {\n type: string\n email: string\n role: string\n redirectUri: string\n tenantId: string\n}\nexport const INVITE_USER = 'USERS/INVITE'\nexport const inviteUser = (\n email: string,\n role: string,\n redirectUri: string,\n tenantId: string\n): InviteUserType => ({\n type: INVITE_USER,\n email,\n role,\n redirectUri,\n tenantId\n})\n","import { call, put, takeLatest, takeEvery, all, fork } from 'redux-saga/effects'\n\nimport {\n getUsers,\n delUser,\n getTenantUsers,\n inviteUserApi,\n postUsers,\n getProject\n} from '../apis/admin'\n\nimport {\n LOAD_USERS,\n LoadUsersType,\n UPDATE_USER,\n DELETE_USERS,\n loadUsers,\n InviteUserType,\n INVITE_USER,\n UpdateUserType,\n DeleteUsersType\n} from '../actions/users'\n\nimport { addError } from '../actions/errors'\n\nimport { notify } from '../helpers/saga'\n\nimport ITenantUser from '../model/ITenantUser'\nimport { setUsers, setLoadingUsers } from '../reducers/users'\n\nexport default function* watchUsers() {\n yield takeEvery(UPDATE_USER, updateUser)\n yield takeEvery(DELETE_USERS, deleteUsers)\n yield takeLatest(LOAD_USERS, fetchUsers)\n yield takeEvery(INVITE_USER, inviteUser)\n}\n\nexport function* fetchUsers(action: LoadUsersType) {\n try {\n yield put(setLoadingUsers({ loadingUsers: true }))\n const tenantUsers = (yield call(getTenantUsers)).users\n const users = (yield call(getUsers, action.tenantId)).data\n const filteredUsers = users.filter(u => u.principalType === 'UserIdentity')\n const tUsers: ITenantUser[] = filteredUsers.map(user => {\n const tUser = tenantUsers.find(\n tu =>\n tu.userIdentityId === user.userId &&\n user.principalType === 'UserIdentity'\n )\n\n return {\n id: tUser?.userIdentityId,\n email: tUser?.email,\n name: tUser?.name,\n role: user?.role\n }\n })\n yield put(setUsers({ users: tUsers }))\n } catch (error) {\n yield put(addError(LOAD_USERS, error))\n } finally {\n yield put(setLoadingUsers({ loadingUsers: false }))\n }\n}\n\nexport function* updateUser(action: UpdateUserType) {\n try {\n yield put(setLoadingUsers({ loadingUsers: true }))\n const project = yield call(getProject, action.tenantId)\n\n const users = project.members.map(user => {\n if (user.userId === action.user.id) {\n return action.user\n }\n return {\n id: user.userId,\n role: user.role\n }\n })\n\n yield call(postUsers, users, project.rowVersion, action.tenantId)\n yield put(loadUsers(action.tenantId))\n\n yield fork(notify, `User \"${action.user.name}\" was updated!` as any)\n } catch (error) {\n yield put(addError(UPDATE_USER, error))\n } finally {\n yield put(setLoadingUsers({ loadingUsers: false }))\n }\n}\n\nexport function* deleteUsers(action: DeleteUsersType) {\n const { users, tenantId } = action\n\n try {\n yield all(users.map(user => call(delUser, user.id, tenantId)))\n\n yield put(loadUsers(tenantId))\n yield fork(\n notify,\n users.length > 1\n ? `${users.length} users were deleted!`\n : ('The user was deleted!' as any)\n )\n } catch (error) {\n yield put(addError(DELETE_USERS, error))\n }\n}\n\nexport function* inviteUser(action: InviteUserType) {\n try {\n yield call(\n inviteUserApi,\n action.email,\n action.role,\n action.redirectUri,\n action.tenantId\n )\n } catch (error) {\n yield put(addError(INVITE_USER, error))\n }\n}\n","import IAPIAccess from '../model/IAPIAccess'\nimport IAPIKey from '../model/IAPIKey'\n\nexport const LOAD_API_ACCESS = 'API_ACCESS/LOAD'\nexport type LoadAPIAccessListType = {\n type: string\n tenantId: string\n}\nexport const loadAPIAccessList = (tenantId: string) =>\n ({\n type: LOAD_API_ACCESS,\n tenantId\n } as LoadAPIAccessListType)\n\nexport const SET_API_ACCESS = 'API_ACCESS/SET'\nexport const setApiAccessList = (apiAccess: IAPIAccess[]) => ({\n type: SET_API_ACCESS,\n apiAccess\n})\n\nexport type CreateUpdateAPIAccessType = {\n type: string\n tenantId: string\n apiAccess: IAPIAccess\n}\nexport const CREATE_API_ACCESS = 'API_ACCESS/CREATE'\nexport const createAPIAccess = (apiAccess: IAPIAccess, tenantId: string) =>\n ({\n type: CREATE_API_ACCESS,\n apiAccess,\n tenantId\n } as CreateUpdateAPIAccessType)\n\nexport const UPDATE_API_ACCESS = 'API_ACCESS/UPDATE'\nexport const updateAPIAccess = (apiAccess: IAPIAccess, tenantId: string) =>\n ({\n type: UPDATE_API_ACCESS,\n apiAccess,\n tenantId\n } as CreateUpdateAPIAccessType)\n\nexport const DELETE_API_ACCESS = 'API_ACCESS/DELETE'\nexport type DeleteAPIAccessType = {\n type: string\n tenantId: string\n apiAccessList: IAPIAccess[]\n}\nexport const deleteAPIAccess = (\n apiAccessList: IAPIAccess[],\n tenantId: string\n) =>\n ({\n type: DELETE_API_ACCESS,\n apiAccessList,\n tenantId\n } as DeleteAPIAccessType)\n\nexport type CreateUpdateAPIKeyType = {\n type: string\n tenantId: string\n apiKey: IAPIKey\n apiAccess: IAPIAccess\n}\nexport const CREATE_API_KEY = 'API_KEY/CREATE'\nexport const createAPIKey = (\n apiKey: IAPIKey,\n apiAccess: IAPIAccess,\n tenantId: string\n) =>\n ({\n type: CREATE_API_KEY,\n apiKey,\n apiAccess,\n tenantId\n } as CreateUpdateAPIKeyType)\n\nexport const UPDATE_API_KEY = 'API_KEY/UPDATE'\nexport const updateAPIKey = (\n apiKey: IAPIKey,\n apiAccess: IAPIAccess,\n tenantId: string\n) =>\n ({\n type: UPDATE_API_KEY,\n apiKey,\n apiAccess,\n tenantId\n } as CreateUpdateAPIKeyType)\n\nexport const DELETE_API_KEYS = 'API_KEY/DELETE'\nexport type DeleteAPIKeysType = {\n type: string\n tenantId: string\n apiKeyList: IAPIKey[]\n}\nexport const deleteAPIKeys = (apiKeyList: IAPIKey[], tenantId: string) =>\n ({\n type: DELETE_API_KEYS,\n tenantId,\n apiKeyList\n } as DeleteAPIKeysType)\n","import { all, call, put, takeEvery } from 'redux-saga/effects'\nimport {\n CreateUpdateAPIAccessType,\n CREATE_API_ACCESS,\n DeleteAPIAccessType,\n DELETE_API_ACCESS,\n LoadAPIAccessListType,\n LOAD_API_ACCESS,\n UPDATE_API_ACCESS,\n loadAPIAccessList,\n CREATE_API_KEY,\n UPDATE_API_KEY,\n CreateUpdateAPIKeyType,\n DELETE_API_KEYS,\n DeleteAPIKeysType\n} from '../actions/apiAccess'\n\nimport { addError } from '../actions/errors'\nimport {\n getAccounts,\n postAccount,\n patchAccount,\n deleteAccounts,\n postAPIKey,\n patchAPIKey,\n getApiKeys,\n deleteAPIKeys,\n postUser,\n getUsers,\n delUser\n} from '../apis/admin'\nimport IAPIAccess from '../model/IAPIAccess'\nimport {\n setApiAccessLoadingState,\n setAPIAccesssList,\n deleteAPIAccessList,\n addAPIAccessList\n} from '../reducers/apiAccess'\nimport {\n addAPIKeyList,\n deleteAPIKeyList,\n setAPIKeysList,\n setLastAddedAPIKey\n} from '../reducers/apiKeys'\nimport { flatten } from 'lodash'\nimport { ROLE_TYPES_EXT } from '../helpers/project'\n\nexport default function* watchAdmin() {\n yield takeEvery(LOAD_API_ACCESS, fetchApiAccess)\n yield takeEvery(CREATE_API_ACCESS, createApiAccess)\n yield takeEvery(UPDATE_API_ACCESS, updateApiAccess)\n yield takeEvery(DELETE_API_ACCESS, deleteApiAccess)\n yield takeEvery(CREATE_API_KEY, createApiKey)\n yield takeEvery(UPDATE_API_KEY, updateApiKey)\n yield takeEvery(DELETE_API_KEYS, deleteApiKeys)\n}\n\nexport function* fetchApiAccess(action: LoadAPIAccessListType) {\n if (action.tenantId === '') {\n return\n }\n\n try {\n yield put(setApiAccessLoadingState({ loadingState: true }))\n\n const usersRoles = yield call(getUsers, action.tenantId)\n const response = yield call(getAccounts, action.tenantId)\n\n const accountsWithRoles = response.data.map(account => {\n const foundRole = usersRoles.data.find(\n user => user.userId === account.accountId\n )?.role\n\n if (foundRole) {\n account.role = foundRole\n }\n\n return account\n })\n\n if (accountsWithRoles?.length > 0) {\n yield put(setAPIAccesssList({ apiAccess: accountsWithRoles }))\n }\n\n const keyList = yield all(\n accountsWithRoles.map((account: IAPIAccess) =>\n call(getApiKeys, action.tenantId, account)\n )\n )\n\n yield put(\n setAPIKeysList({ apiKeys: flatten(keyList.map(item => item.data)) })\n )\n } catch (error) {\n yield put(addError(LOAD_API_ACCESS, error))\n }\n}\n\nexport function* createApiAccess(action: CreateUpdateAPIAccessType) {\n try {\n const response = yield call(\n postAccount,\n action.tenantId as any,\n action.apiAccess as any\n )\n\n if (action.apiAccess.role !== ROLE_TYPES_EXT.NONE) {\n yield call(\n postUser,\n { userId: response.accountId, role: action.apiAccess.role } as any,\n action.tenantId as any\n )\n }\n\n yield put(loadAPIAccessList(action.tenantId))\n } catch (error) {\n yield put(addError(CREATE_API_ACCESS, error))\n }\n}\n\nexport function* updateApiAccess(action: CreateUpdateAPIAccessType) {\n try {\n const { accountId, role } = action.apiAccess\n\n yield call(patchAccount, action.tenantId, action.apiAccess)\n\n const user = {\n userId: accountId,\n role\n }\n\n yield call(delUser, accountId as string, action.tenantId)\n\n if (role === ROLE_TYPES_EXT.NONE) {\n yield call(delUser, accountId as string, action.tenantId)\n } else {\n yield call(postUser, user as any, action.tenantId as any)\n }\n\n yield put(loadAPIAccessList(action.tenantId))\n } catch (error) {\n yield put(addError(CREATE_API_ACCESS, error))\n }\n}\n\nexport function* deleteApiAccess(action: DeleteAPIAccessType) {\n try {\n yield put(deleteAPIAccessList({ apiAccessList: action.apiAccessList }))\n yield call(deleteAccounts, action.tenantId, action.apiAccessList)\n } catch (error) {\n yield put(addAPIAccessList({ apiAccessList: action.apiAccessList }))\n yield put(addError(CREATE_API_ACCESS, error))\n }\n}\n\nexport function* createApiKey(action: CreateUpdateAPIKeyType) {\n try {\n const result = yield call(\n postAPIKey,\n action.tenantId,\n action.apiAccess,\n action.apiKey\n )\n yield put(setLastAddedAPIKey({ apiKey: result }))\n yield put(loadAPIAccessList(action.tenantId))\n } catch (error) {\n yield put(addError(CREATE_API_ACCESS, error))\n }\n}\n\nexport function* updateApiKey(action: CreateUpdateAPIKeyType) {\n try {\n yield call(patchAPIKey, action.tenantId, action.apiAccess, action.apiKey)\n yield put(loadAPIAccessList(action.tenantId))\n } catch (error) {\n yield put(addError(CREATE_API_ACCESS, error))\n }\n}\n\nexport function* deleteApiKeys(action: DeleteAPIKeysType) {\n try {\n yield put(deleteAPIKeyList({ apiKeys: action.apiKeyList }))\n yield call(deleteAPIKeys, action.tenantId, action.apiKeyList)\n } catch (error) {\n yield put(\n addAPIKeyList({\n apiKeys: action.apiKeyList\n })\n )\n yield put(addError(CREATE_API_ACCESS, error))\n }\n}\n","import { administration } from './support'\n\nimport ITenantGroup from '../model/ITenantGroup'\n\nexport interface GetGroupsReturnType {\n data: ITenantGroup[]\n}\n\nconst BASE_IAM_URL = 'iam'\n\nexport const getGroups = (tenantId: string) =>\n administration.getJson(\n `${BASE_IAM_URL}/project/${tenantId}/membergroup/list`,\n 3\n ) as Promise\n\nexport const createGroup = (tenantId: string, group: ITenantGroup) =>\n administration.postJson(\n `${BASE_IAM_URL}/project/${tenantId}/membergroup`,\n group,\n 3\n )\n\nexport const deleteGroup = (groupId: string, tenantId: string) =>\n administration.delJson(\n `${BASE_IAM_URL}/project/${tenantId}/membergroup/${groupId}`,\n 3\n )\n\nexport const patchGroup = (tenantId: string, name: any, gId: string) =>\n administration.putJson(\n `${BASE_IAM_URL}/project/${tenantId}/membergroup/${gId}`,\n name,\n 3\n )\n","import ITenantGroup from '../model/ITenantGroup'\n\nexport const LOAD_GROUPS = 'GROUPS/LOAD'\n\nexport type LoadGroupsType = {\n type: string\n tenantId: string\n}\nexport const loadGroups = (tenantId: string): LoadGroupsType => ({\n type: LOAD_GROUPS,\n tenantId\n})\n\nexport const SET_GROUPS = 'GROUPS/SET'\nexport const setGroups = (groups: ITenantGroup[]) => ({\n type: SET_GROUPS,\n groups\n})\n\nexport type CreateUpdateGroupType = {\n type: string\n group: any\n tenantId: string\n}\n\nexport const CREATE_GROUP = 'GROUP/CREATE'\nexport const createGroup = (tenantId: string, group: ITenantGroup) =>\n ({\n type: CREATE_GROUP,\n group,\n tenantId\n } as CreateUpdateGroupType)\n\nexport const UPDATE_GROUP = 'GROUP/UPDATE'\nexport const updateGroup = (tenantId: string, group: ITenantGroup) =>\n ({\n type: UPDATE_GROUP,\n group,\n tenantId\n } as CreateUpdateGroupType)\n\nexport const DELETE_GROUPS = 'GROUPS/DELETE'\nexport type DeleteGroupsType = {\n type: string\n tenantId: string\n groups: ITenantGroup[]\n}\nexport const deleteGroups = (groups: ITenantGroup[], tenantId: string) =>\n ({\n type: DELETE_GROUPS,\n groups,\n tenantId\n } as DeleteGroupsType)\n","import { call, put, takeLatest, takeEvery, all, fork } from 'redux-saga/effects'\n\nimport { getTenantUsers } from '../apis/admin'\n\nimport { getGroups, createGroup, deleteGroup, patchGroup } from '../apis/groups'\n\nimport {\n LOAD_GROUPS,\n CREATE_GROUP,\n UPDATE_GROUP,\n DELETE_GROUPS,\n loadGroups,\n // updateGroup,\n CreateUpdateGroupType,\n LoadGroupsType,\n DeleteGroupsType\n} from '../actions/groups'\n\nimport { addError } from '../actions/errors'\n\nimport { notify } from '../helpers/saga'\n\nimport { setGroupsList, setGroupsLoadingState } from '../reducers/groups'\nimport ITenantGroup from '../model/ITenantGroup'\n\nexport default function* watchGroup() {\n yield takeLatest(LOAD_GROUPS, fetchGroups)\n yield takeEvery(CREATE_GROUP, postGroup)\n yield takeEvery(DELETE_GROUPS, delGroup)\n yield takeEvery(UPDATE_GROUP, updtGroup)\n}\n\nexport function* fetchGroups(action: LoadGroupsType) {\n try {\n yield put(setGroupsLoadingState({ loadingState: true }))\n const tenantUsers = (yield call(getTenantUsers)).users\n const groups = (yield call(getGroups, action.tenantId)).data\n yield put(setGroupsList({ groups: groups, tenantUsers: tenantUsers }))\n } catch (error) {\n yield put(addError(LOAD_GROUPS, error))\n } finally {\n yield put(setGroupsLoadingState({ loadingState: false }))\n }\n}\n\nexport function* postGroup(action: CreateUpdateGroupType) {\n try {\n const formData = action.group\n const group = {\n name: formData.name,\n members: formData.members\n }\n const ids = formData.members.map(member => {\n return member.id\n })\n const createPayload: any = { name: group.name, members: ids }\n yield call(createGroup, action.tenantId, createPayload)\n yield put(loadGroups(action.tenantId))\n\n yield fork(notify, `Group \"${action.group.name}\" was created!`)\n } catch (error) {\n yield put(addError(UPDATE_GROUP, error))\n }\n}\n\nexport function* delGroup(action: DeleteGroupsType) {\n const { groups, tenantId } = action\n\n try {\n yield all(\n groups.map((group: ITenantGroup) => call(deleteGroup, group.id, tenantId))\n )\n yield put(loadGroups(tenantId))\n yield fork(\n notify,\n groups.length > 1\n ? `${groups.length} groups were deleted!`\n : 'The group was deleted!'\n )\n } catch (error) {\n yield put(addError(DELETE_GROUPS, error))\n }\n}\n\nexport function* updtGroup(action: CreateUpdateGroupType) {\n try {\n const formData = action.group\n const name = {\n name: formData.name\n } as any\n const gId = formData.id\n yield call(patchGroup, action.tenantId, name, gId)\n yield put(loadGroups(action.tenantId))\n yield fork(notify, `Group \"${action.group.name}\" was updated!`)\n } catch (error) {\n yield put(addError(UPDATE_GROUP, error))\n }\n}\n","import { administration } from './support'\n\nconst BASE_URL = 'admin'\n\nexport const getTenantFeatures = () =>\n administration.getJson(`${BASE_URL}/feature/tenant/list`, 3)\n\nexport const setFeatureStatus = (\n appId: string,\n tenantId: string,\n status: boolean\n) => {\n return administration.patchJson(\n `${BASE_URL}/feature/${appId}/tenant/${tenantId}`,\n {\n enabled: status\n },\n 3,\n {\n 'dhi-project-id': tenantId\n }\n )\n}\n","const getConfigUrl = () => {\n switch (process.env.REACT_APP__DHI_TARGET_ENV) {\n case 'dev':\n return '/config/app.config-dev.json'\n case 'dev0':\n return '/config/app.config-dev0.json'\n case 'localhost':\n return '/config/app.config-local.json'\n default:\n return '/config/appsettings.json'\n }\n}\n\nasync function fetchConfig() {\n const configPath = getConfigUrl()\n const resp = await fetch(configPath)\n\n return await resp.json()\n}\n\nexport default fetchConfig\n","import { call, put, takeEvery, takeLatest } from 'redux-saga/effects'\n\nimport { getTenantFeatures, setFeatureStatus } from '../apis/features'\nimport fetchConfig from '../apis/config'\n\nimport {\n LOAD_TENANT_FEATURES,\n UPDATE_TENANT_APPLICATION,\n loadTenantFeatures\n} from '../actions/features'\n\nimport { addError } from '../actions/errors'\n\nimport { setFeaturesList, setFeaturesLoadingState } from '../reducers/features'\nimport IFeature from '../model/IFeature'\n\nexport default function* watchFeatures() {\n yield takeLatest(LOAD_TENANT_FEATURES, fetchFeatures)\n yield takeEvery(UPDATE_TENANT_APPLICATION, patchApplication)\n}\n\nexport function* fetchFeatures() {\n try {\n yield put(setFeaturesLoadingState({ loadingState: true }))\n const configuration = yield call(fetchConfig)\n const allFeatures: IFeature[] = (yield call(getTenantFeatures)).data\n //FeatureId of Cloud Admin in dev0, dev and test (needed when Cloud Admin is started locally)\n let ownFeatureId = '0fb30fa4-aa18-ed11-b83e-002248818247'\n if (!process.env.REACT_APP__DHI_TARGET_ENV) {\n // On deployed version FeatureId is injected during deployment\n if (configuration.auth.clientName) {\n ownFeatureId = configuration.auth.clientName\n }\n }\n const features = allFeatures.filter(\n (feature: IFeature) => feature.featureId !== ownFeatureId\n )\n\n yield put(setFeaturesList({ features }))\n } catch (error) {\n yield put(addError(LOAD_TENANT_FEATURES, error))\n } finally {\n yield put(setFeaturesLoadingState({ loadingState: false }))\n }\n}\n\nexport function* patchApplication(action) {\n try {\n yield put(setFeaturesLoadingState({ loadingState: true }))\n yield call(setFeatureStatus, action.appId, action.tenantId, action.status)\n yield put(loadTenantFeatures())\n } catch (error) {\n yield put(addError(LOAD_TENANT_FEATURES, error))\n } finally {\n yield put(setFeaturesLoadingState({ loadingState: false }))\n }\n}\n","import { SiteCpuUsageQueryParams } from '../reducers/siteCpuUsage'\n\nexport const LOAD_SITE_CPU_USAGE = 'CPU-USAGE/LOAD'\nexport type LoadSiteCpuUsageType = {\n type: string\n tenantId: string\n params: SiteCpuUsageQueryParams\n}\nexport const loadSiteCpuUsage = (tenantId, params) =>\n ({\n type: LOAD_SITE_CPU_USAGE,\n tenantId,\n params\n } as LoadSiteCpuUsageType)\n","import { postConsumptionRequest } from './support'\nimport {\n getCurrentConsumptionLogUrl,\n getSASToken,\n SASTokenReturnType\n} from './admin'\n\nexport type ConsumptionLogQueryType = {\n projectId: string\n metricType?: 'ComputeTime' | 'StorageUsage'\n offset: number\n limit: number\n orderBy: string\n sortOrder: string\n from: string\n to: string\n}\n\nexport const postConsumptionMyList = (params: ConsumptionLogQueryType) =>\n getCurrentConsumptionLogUrl().then(({ data: consumptionUrl }) => {\n return getSASToken(params.projectId).then((token: SASTokenReturnType) => {\n return postConsumptionRequest(\n `${consumptionUrl}consumption/log/my-list`,\n {\n metricType: params.metricType,\n aggregateBy: {\n ProjectId: ''\n },\n from: params.from,\n to: params.to,\n sortBy: params.orderBy,\n sortOrder: params.sortOrder,\n offset: params.offset,\n limit: params.limit\n },\n 3,\n {\n 'dhi-sas-token': token.data\n }\n )\n })\n })\n","import { call, put, takeEvery } from 'redux-saga/effects'\nimport {\n LOAD_SITE_CPU_USAGE,\n LoadSiteCpuUsageType\n} from '../actions/siteCpuUsage'\nimport { postConsumptionMyList } from '../apis/consumptionLog'\nimport {\n setCpuQueryParams,\n setCpuUsageData,\n setCpuUsageLoadingState,\n setCpuUsageState,\n setTotalCount\n} from '../reducers/siteCpuUsage'\nimport { StateEnum } from '../model/StateEnum'\nimport { addError } from '../actions/errors'\n\nexport default function* watchSiteCpuUsage() {\n yield takeEvery(LOAD_SITE_CPU_USAGE, fetchSiteCpuUsage)\n}\n\nexport function* fetchSiteCpuUsage(action: LoadSiteCpuUsageType) {\n yield put(setCpuUsageLoadingState({ loadingState: true }))\n yield put(setCpuQueryParams(action.params))\n\n const params = action.params\n const result = yield call(postConsumptionMyList, {\n projectId: action.tenantId,\n metricType: 'ComputeTime',\n offset: params.page * params.rowsPerPage,\n limit: params.rowsPerPage,\n orderBy: params.orderBy === 'validFrom' ? 'ValidFrom' : params.orderBy,\n sortOrder: params.sortOrder,\n from: params.startDate,\n to: params.endDate\n })\n\n try {\n if (result.data.length === 0) {\n if (params.page === 0) {\n yield put(\n setCpuUsageState({\n state: StateEnum.LOADED,\n cpuUsage: [],\n totalCount: 0,\n params\n })\n )\n } else {\n yield put(setCpuUsageLoadingState({ loadingState: false }))\n yield put(\n setTotalCount({ totalCount: params.page * params.rowsPerPage })\n )\n }\n } else {\n if (result.data.length < params.rowsPerPage) {\n yield put(\n setTotalCount({\n totalCount: params.page * params.rowsPerPage + result.data.length\n })\n )\n } else if (params.page === 0) {\n yield put(setTotalCount({ totalCount: -1 }))\n }\n\n yield put(setCpuUsageLoadingState({ loadingState: false }))\n yield put(setCpuUsageData(result.data.slice(0, params.rowsPerPage)))\n }\n } catch (error) {\n yield put(addError(LOAD_SITE_CPU_USAGE, error))\n }\n}\n","import { SiteStorageUsageQueryParams } from '../reducers/siteStorageUsage'\n\nexport const LOAD_SITE_STORAGE_USAGE = 'STORAGE-USAGE/LOAD'\nexport type LoadSiteStorageUsageType = {\n type: string\n tenantId: string\n params: SiteStorageUsageQueryParams\n}\nexport const loadSiteStorageUsage = (tenantId, params) =>\n ({\n type: LOAD_SITE_STORAGE_USAGE,\n tenantId,\n params\n } as LoadSiteStorageUsageType)\n","import { call, put, takeEvery } from 'redux-saga/effects'\nimport {\n LOAD_SITE_STORAGE_USAGE,\n LoadSiteStorageUsageType\n} from '../actions/siteStorageUsage'\nimport { postConsumptionMyList } from '../apis/consumptionLog'\nimport {\n setCpuQueryParams,\n setStorageUsageData,\n setStorageUsageLoadingState,\n setStorageUsageState,\n setTotalCount\n} from '../reducers/siteStorageUsage'\nimport { StateEnum } from '../model/StateEnum'\nimport moment from 'moment'\n\nexport default function* watchSiteStorageUsage() {\n yield takeEvery(LOAD_SITE_STORAGE_USAGE, fetchSiteStorageUsage)\n}\n\nexport function* fetchSiteStorageUsage(action: LoadSiteStorageUsageType) {\n yield put(setStorageUsageLoadingState({ loadingState: true }))\n yield put(setCpuQueryParams(action.params))\n\n const params = action.params\n const result = yield call(postConsumptionMyList, {\n projectId: action.tenantId,\n metricType: 'StorageUsage',\n offset: params.page * params.rowsPerPage,\n limit: params.rowsPerPage,\n orderBy: params.orderBy === 'validFrom' ? 'ValidFrom' : params.orderBy,\n sortOrder: params.sortOrder,\n from: moment()\n .subtract(1, 'days')\n .startOf('day')\n .format('YYYY-MM-DDTHH:mm'),\n to: moment()\n .endOf('day')\n .format('YYYY-MM-DDTHH:mm')\n })\n\n if (result.data.length === 0) {\n if (params.page === 0) {\n yield put(\n setStorageUsageState({\n state: StateEnum.LOADED,\n storageUsage: [],\n totalCount: 0,\n params\n })\n )\n } else {\n yield put(setStorageUsageLoadingState({ loadingState: false }))\n yield put(setTotalCount({ totalCount: params.page * params.rowsPerPage }))\n }\n } else {\n if (result.data.length < params.rowsPerPage) {\n yield put(\n setTotalCount({\n totalCount: params.page * params.rowsPerPage + result.data.length\n })\n )\n } else if (params.page === 0) {\n yield put(setTotalCount({ totalCount: -1 }))\n }\n\n yield put(setStorageUsageLoadingState({ loadingState: false }))\n yield put(setStorageUsageData(result.data.slice(0, params.rowsPerPage)))\n }\n}\n","export type LoadProjectNamesType = {\n type: string\n tenantId: string\n}\nexport const LOAD_PROJECT_NAMES = 'PROJECTNAMES/LOAD_NAMES'\nexport const loadProjectNames = (tenantId: string) =>\n ({\n type: LOAD_PROJECT_NAMES,\n tenantId\n } as LoadProjectNamesType)\n","import { call, put, takeEvery } from 'redux-saga/effects'\nimport {\n LOAD_PROJECT_NAMES,\n LoadProjectNamesType\n} from '../actions/projectNames'\nimport {\n appendProjectNames,\n setProjectNamesLoadingState\n} from '../reducers/projectNames'\nimport { getProjects } from '../apis/projects'\n\nexport default function* watchProjectNames() {\n yield takeEvery(LOAD_PROJECT_NAMES, fetchProjectNames)\n}\n\nexport function* fetchProjectNames(action: LoadProjectNamesType) {\n yield put(setProjectNamesLoadingState({ loadingState: true }))\n let list = []\n let offset = 0\n do {\n const { data } = yield call(\n getProjects,\n offset,\n 1000,\n 'Name',\n 'asc',\n '',\n true\n )\n list = data\n\n const nameHash = data.reduce((acc, project) => {\n acc[project.id] = project.name\n return acc\n }, {})\n\n yield put(appendProjectNames(nameHash))\n offset += 1000\n } while (list.length === 1000)\n yield put(setProjectNamesLoadingState({ loadingState: false }))\n}\n","import { RootProjectListQueryParams } from '../reducers/rootProjectList'\n\nexport const LOAD_ROOT_PROJECT_LIST = 'ROOT_PROJECT_LIST/LOAD'\nexport type LoadRootProjectListType = {\n type: string\n params: RootProjectListQueryParams\n}\nexport const loadRootProjectList = params =>\n ({\n type: LOAD_ROOT_PROJECT_LIST,\n params\n } as LoadRootProjectListType)\n","import { call, put, takeEvery } from 'redux-saga/effects'\nimport { addError } from '../actions/errors'\nimport {\n LoadRootProjectListType,\n LOAD_ROOT_PROJECT_LIST\n} from '../actions/rootProjectActions'\nimport { getRootProjectList } from '../apis/projects'\nimport {\n setRootProjectListData,\n setRootProjectListLoadingState,\n setRootProjectQueryParams,\n setTotalCount\n} from '../reducers/rootProjectList'\n\nexport default function* watchRootProjectList() {\n yield takeEvery(LOAD_ROOT_PROJECT_LIST, fetchRootProjectList)\n}\n\nexport function* fetchRootProjectList(action: LoadRootProjectListType) {\n yield put(setRootProjectListLoadingState({ loadingState: true }))\n yield put(setRootProjectQueryParams(action.params))\n try {\n const result = yield call(getRootProjectList, action.params)\n\n yield put(setRootProjectListData(result.data))\n yield put(setTotalCount({ totalCount: result.totalCount }))\n } catch (error) {\n yield put(addError(LOAD_ROOT_PROJECT_LIST, error))\n } finally {\n yield put(setRootProjectListLoadingState({ loadingState: false }))\n }\n}\n","import IBillingInformation from '../model/IBillingInformation'\nimport { administration } from './support'\n\nconst BASE_CRED_URL = 'iam/credit'\nconst IAM = 4\n\nexport interface IAddCreditsData {\n credits: number\n billingReference: IBillingInformation\n subscriptionOrderId: string\n expiresAt: string\n tenantId: string\n}\n\nexport interface ITenantCreditsDetailsInput {\n statusFilter: string[]\n offset: number\n limit: number\n tenantId: string\n}\n\nexport interface IMoveCreditsInput {\n credits: number\n sourceTenantId: string | null\n targetTenantId: string | null // Nechat volny, null, podle toho kam to presunu\n}\n\nexport interface IReserveOrSpendCreditsInput {\n credits: number\n tenantId: string\n operationId: string\n projectId: string\n}\n\nexport interface IBillingReferenceCreditsDetailsInput {\n statusFilter: string[]\n offset: number\n limit: number\n billingReference?: IBillingInformation\n billingInformation?: IBillingInformation\n}\n\nexport const postApiCredit = async (data: IAddCreditsData) => {\n try {\n const response = await administration.postJson(BASE_CRED_URL, data, IAM)\n return response\n } catch (_error) {\n return []\n }\n}\n\nexport const postApiCreditDetails = async (\n data: ITenantCreditsDetailsInput\n) => {\n try {\n const response = await administration.postJson(\n BASE_CRED_URL + '/details',\n data,\n IAM\n )\n return response\n } catch (_error) {\n return []\n }\n}\n\nexport const postApiCreditDetailsExtended = async (\n data: ITenantCreditsDetailsInput\n) => {\n try {\n const response = await administration.postJson(\n BASE_CRED_URL + '/details/extended',\n data,\n IAM\n )\n return response\n } catch (_error) {\n return []\n }\n}\n\nexport const putApiCreditMove = async (data: IMoveCreditsInput) => {\n try {\n const response = await administration.putJson(\n BASE_CRED_URL + '/move',\n data,\n IAM\n )\n return response\n } catch (_error) {\n return []\n }\n}\n\nexport const putApiCreditReserve = async (\n data: IReserveOrSpendCreditsInput\n) => {\n try {\n const response = await administration.putJson(\n BASE_CRED_URL + '/reserve',\n data,\n IAM\n )\n return response\n } catch (_error) {\n return []\n }\n}\n\nexport const putApiCreditSpend = async (data: IReserveOrSpendCreditsInput) => {\n try {\n const response = await administration.putJson(\n BASE_CRED_URL + '/spend',\n data,\n IAM\n )\n return response\n } catch (_error) {\n return []\n }\n}\n\nexport const postApiCreditUnassigned = async (\n data: IBillingInformation,\n filter?: string[] | null\n) => {\n try {\n const query = filter ? `?filter=${filter}` : ''\n const response = await administration.postJson(\n BASE_CRED_URL + `/unassigned${query}`,\n data,\n 4\n )\n return response\n } catch (_error) {\n return []\n }\n}\n\nexport const postApiCreditUnassignedDetails = async (\n data: IBillingReferenceCreditsDetailsInput\n) => {\n try {\n const response = await administration.postJson(\n BASE_CRED_URL + '/unassigned/details',\n data,\n IAM\n )\n return response\n } catch (_error) {\n return []\n }\n}\n\nexport const getApiCredit = async (\n tenantId: string,\n filter?: string[] | null\n) => {\n try {\n const query = filter ? `?filter=${filter}` : ''\n const response = await administration.getJson(\n BASE_CRED_URL + `/${tenantId}${query}`,\n IAM\n )\n return response.data\n } catch (_error) {\n return []\n }\n}\n","export enum ReportTypeEnum {\n CREDITS = 'Credits',\n CONSUMPTION = 'Consumption'\n}\n","export enum ImageNameEnum {\n // CREDIT_MANAGEMENT = 'dhiacrdev.azurecr.io/platform/iam-jobs:20240226.3-74697-credit-management-details-reports'\n CREDIT_MANAGEMENT = 'dhiacrdev.azurecr.io/platform/iam-jobs:20240527.1-develop'\n}\n","import { ReportTypeEnum } from './enums'\n\nexport const getReportRequestBody = (\n tenantId: string,\n reportType: ReportTypeEnum\n): Record => ({\n tenantId,\n reportType,\n reportName: generateFileName(),\n folder: `Credit Reports\\\\${generateFolderName()}`\n})\n\nconst generateFileName = (): string => {\n const today = new Date()\n const hours = String(today.getHours()).padStart(2, '0')\n const minutes = String(today.getMinutes()).padStart(2, '0')\n const seconds = String(today.getSeconds()).padStart(2, '0')\n\n const formattedTime = `${hours}${minutes}${seconds}`\n return `credit-report-${formattedTime}.csv`\n}\n\nexport const generateFolderName = (): string => {\n const today = new Date()\n const day = String(today.getDate()).padStart(2, '0')\n const month = String(today.getMonth() + 1).padStart(2, '0')\n const year = today.getFullYear()\n\n const formattedDate = `${year}${month}${day}`\n return `Credit Reports ${formattedDate}`\n}\n","import { metadata } from '../support'\nimport { ReportTypeEnum } from './enums'\nimport { getReportRequestBody } from './utils'\n\nconst BASE_API_URL = 'admin/credit/report'\nconst VERSION = 4\n\nexport const postApiReport = async (\n tenantId: string,\n reportType: ReportTypeEnum\n) => {\n const body = getReportRequestBody(tenantId, reportType)\n\n try {\n return await metadata.postJson(BASE_API_URL, body, VERSION)\n } catch (_error) {\n return []\n }\n}\n","import { call, put, takeEvery, fork } from 'redux-saga/effects'\nimport { addError } from '../actions/errors'\nimport {\n CALL_CREDIT_POST,\n CALL_CREDIT_DETAILS_POST,\n CALL_CREDIT_DETAILS_EXTENDED_POST,\n CALL_CREDIT_MOVE_PUT,\n CALL_CREDIT_RESERVE_PUT,\n CALL_CREDIT_SPEND_PUT,\n CALL_CREDIT_UNASSIGNED_POST,\n CALL_CREDIT_UNASSIGNED_DETAILS_POST,\n CALL_CREDIT_TENANT_GET,\n setCreditDetails,\n setCreditDetailsExt,\n setCreditUnassigned,\n setCreditUnassignedExt,\n setCreditTenant,\n setCreditLoading,\n CALL_CREDIT_AVAILABLE_GET,\n setCreditAvailable,\n setCreditAvailableInfoData,\n CALL_CREDIT_REPORT_POST\n} from '../actions/credits'\nimport {\n postApiCredit,\n postApiCreditDetails,\n postApiCreditDetailsExtended,\n putApiCreditMove,\n putApiCreditReserve,\n putApiCreditSpend,\n postApiCreditUnassigned,\n postApiCreditUnassignedDetails,\n getApiCredit\n} from '../apis/credits'\nimport { postApiReport } from '../apis/reports'\nimport { notify } from '../helpers/saga'\nimport { generateFolderName } from '../apis/reports/utils'\n\nvar moment = require('moment')\nrequire('moment-duration-format')\n\nexport default function* watchCredits() {\n yield takeEvery(CALL_CREDIT_POST, watchCreditPost)\n yield takeEvery(CALL_CREDIT_DETAILS_POST, watchCreditDetailsPost)\n yield takeEvery(\n CALL_CREDIT_DETAILS_EXTENDED_POST,\n watchCreditDetailsExtendedPost\n )\n yield takeEvery(CALL_CREDIT_MOVE_PUT, watchCreditMovePut)\n yield takeEvery(CALL_CREDIT_REPORT_POST, watchCreditReportPost)\n yield takeEvery(CALL_CREDIT_RESERVE_PUT, watchCreditReservePut)\n yield takeEvery(CALL_CREDIT_SPEND_PUT, watchCreditSpendPut)\n yield takeEvery(CALL_CREDIT_UNASSIGNED_POST, watchCreditUnassignedPost)\n yield takeEvery(\n CALL_CREDIT_UNASSIGNED_DETAILS_POST,\n watchCreditUnassignedDetailsPost\n )\n yield takeEvery(CALL_CREDIT_TENANT_GET, watchCreditTenantGet)\n yield takeEvery(CALL_CREDIT_AVAILABLE_GET, watchCreditAvailableGet)\n}\n\nexport function* watchCreditPost(action) {\n try {\n yield put(setCreditLoading(true))\n yield call(postApiCredit, action.data)\n } catch (error) {\n yield put(addError(CALL_CREDIT_POST, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n\nexport function* watchCreditDetailsPost(action) {\n try {\n yield put(setCreditLoading(true))\n const data = yield call(postApiCreditDetails, action.data)\n yield put(setCreditDetails(data))\n } catch (error) {\n yield put(addError(CALL_CREDIT_DETAILS_POST, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n\nconst calcExecTime = item => {\n const startD = moment(item.startedAt)\n const endD = moment(item.finishedAt)\n const duration = moment.duration(endD.diff(startD))\n item.executionTime = duration.format('d [days] h[h] m[m] s[s]')\n}\n\nexport function* watchCreditDetailsExtendedPost(action) {\n try {\n yield put(setCreditLoading(true))\n const data = yield call(postApiCreditDetailsExtended, action.data)\n const endD = moment()\n data.data.forEach(item => {\n let state = 0\n const startD = moment(item.expiresAt).add('days', 1)\n const duration = moment.duration(startD.diff(endD))\n if (duration.asDays() < 30) state = 1\n if (duration.asDays() < 10) state = 2\n const durationFormat =\n duration.asDays() <= 1 ? 'h [hours]' : 'M [months] d [days]'\n const formattedDuration = duration.format(durationFormat)\n item.validity = [formattedDuration, state]\n calcExecTime(item)\n })\n yield put(setCreditDetailsExt(data))\n } catch (error) {\n yield put(addError(CALL_CREDIT_DETAILS_EXTENDED_POST, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n\nexport function* watchCreditReportPost(action) {\n try {\n yield call(postApiReport, action.tenantId, action.reportType)\n yield fork(\n notify,\n `Report generation started, it will be available in \"Credit Reports\\\\${generateFolderName()}\" directory soon.`\n )\n } catch (error) {\n yield put(\n addError(\n CALL_CREDIT_REPORT_POST,\n 'Something went wrong while starting report generation'\n )\n )\n }\n}\n\nexport function* watchCreditMovePut(action) {\n try {\n yield put(setCreditLoading(true))\n yield call(putApiCreditMove, action.data)\n } catch (error) {\n yield put(addError(CALL_CREDIT_MOVE_PUT, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n\nexport function* watchCreditReservePut(action) {\n try {\n yield put(setCreditLoading(true))\n yield call(putApiCreditReserve, action.data)\n } catch (error) {\n yield put(addError(CALL_CREDIT_RESERVE_PUT, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n\nexport function* watchCreditSpendPut(action) {\n try {\n yield put(setCreditLoading(true))\n yield call(putApiCreditSpend, action.data)\n } catch (error) {\n yield put(addError(CALL_CREDIT_SPEND_PUT, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n\nexport function* watchCreditUnassignedPost(action) {\n try {\n yield put(setCreditLoading(true))\n const data = yield call(postApiCreditUnassigned, action.data, action.filter)\n yield put(setCreditUnassigned(data))\n } catch (error) {\n yield put(addError(CALL_CREDIT_UNASSIGNED_POST, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n\nexport function* watchCreditUnassignedDetailsPost(action) {\n try {\n yield put(setCreditLoading(true))\n const data = yield call(postApiCreditUnassignedDetails, action.data)\n\n const endD = moment()\n data.data?.forEach(item => {\n let state = 0\n\n const startD = moment(item.expiresAt).add('days', 1)\n const duration = moment.duration(startD.diff(endD))\n if (duration.asDays() < 30) state = 1\n if (duration.asDays() < 10) state = 2\n const durationFormat =\n duration.asDays() <= 1 ? 'h [hours]' : 'M [months] d [days]'\n const formattedDuration = duration.format(durationFormat)\n item.validity = [formattedDuration, state]\n })\n yield put(setCreditUnassignedExt(data))\n } catch (error) {\n yield put(addError(CALL_CREDIT_UNASSIGNED_DETAILS_POST, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n\nexport function* watchCreditTenantGet(action) {\n try {\n yield put(setCreditLoading(true))\n const data = yield call(getApiCredit, action.tenantId, action.filter)\n yield put(setCreditTenant(data))\n } catch (error) {\n yield put(addError(CALL_CREDIT_TENANT_GET, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n\nexport function* watchCreditAvailableGet(action) {\n try {\n yield put(setCreditLoading(true))\n if (action.tenantId) {\n const data2 = {\n statusFilter: ['Available'], //, 'Spent', 'Reserved', 'Repaid'\n offset: 0,\n limit: 25,\n tenantId: action.tenantId\n }\n const data3 = yield call(postApiCreditDetailsExtended, data2)\n yield put(setCreditAvailableInfoData(data3))\n }\n\n const data = yield call(getApiCredit, action.tenantId, ['Available'])\n const availableCredits = data[0]?.credits ?? 0\n yield put(setCreditAvailable(availableCredits))\n } catch (error) {\n yield put(addError(CALL_CREDIT_AVAILABLE_GET, error))\n } finally {\n yield put(setCreditLoading(false))\n }\n}\n","import { all } from 'redux-saga/effects'\n\nimport watchCustomerUsers from './customerUsers'\n\nimport watchDatasetReaders from './datasetReaders'\nimport watchErrors from './errors'\nimport watchExportAndDownload from './exportAndDownload'\nimport watchExports from './exports'\nimport watchImports from './imports'\nimport watchIntl from './intl'\nimport watchProject from './project'\nimport watchProjects from './projects'\nimport watchRecycleBin from './recycleBin'\nimport watchUi from './ui'\nimport watchUploadAndImport, {\n watchUploadAndImportMany\n} from './uploadAndImport'\nimport watchUploads from './uploads'\nimport watchFetchApps from './applications'\nimport watchAuth from './auth'\nimport watchProgress from './progressItems'\nimport watchConverts from './converts'\nimport watchDatasetWriters from './datasetWriters'\nimport watchFetchCoordinateSystems from './coordinateSystems'\nimport watchAdmin from './admin'\nimport watchUsers from './users'\nimport watchApiAccess from './apiAccess'\nimport watchGroup from './groups'\nimport watchFeatures from './features'\nimport watchSiteCpuUsage from './siteCpuUsage'\nimport watchSiteStorageUsage from './siteStorageUsage'\nimport watchProjectNames from './projectNames'\nimport watchRootProjectList from './rootProjectList'\nimport watchCredits from './credits'\n\nexport default function* rootSaga() {\n yield all([\n watchAuth(),\n watchAdmin(),\n watchCredits(),\n watchConverts(),\n watchCustomerUsers(),\n watchDatasetReaders(),\n watchErrors(),\n watchExportAndDownload(),\n watchExports(),\n watchImports(),\n watchIntl(),\n watchProject(),\n watchProjects(),\n watchRecycleBin(),\n watchUi(),\n watchUploadAndImport(),\n watchUploadAndImportMany(),\n watchUploads(),\n watchProgress(),\n watchDatasetWriters(),\n watchFetchApps(),\n watchFetchCoordinateSystems(),\n watchUsers(),\n watchApiAccess(),\n watchGroup(),\n watchFeatures(),\n watchSiteCpuUsage(),\n watchSiteStorageUsage(),\n watchProjectNames(),\n watchRootProjectList()\n ])\n}\n","import { ApplicationInsights } from '@microsoft/applicationinsights-web'\n\nlet _ai\n\nexport function initAi(instrumentationKey) {\n if (instrumentationKey) {\n _ai = new ApplicationInsights({\n config: {\n instrumentationKey,\n enableAutoRouteTracking: true\n }\n })\n _ai.loadAppInsights()\n } else {\n _ai = {\n setAuthenticatedUserContext: () => {}\n }\n }\n}\n\nexport function instance() {\n return _ai\n}\n","/* eslint-disable no-console */\nimport { call, put } from 'redux-saga/effects'\nimport * as qs from 'query-string'\n/* import difference from 'lodash/difference'\nimport map from 'lodash/fp/map'\nimport isEmpty from 'lodash/isEmpty' */\n\nimport getConfig from '../apis/config'\n\nimport initApis from '../apis'\n\nimport { initAi } from '../apis/appInsights'\n\n/* import { getTransfer, TRANSFER_STATUSES } from '../apis/transfer'\n\nimport {\n MONITOR_TRANSFERS_DELAY,\n MONITOR_TRANSFERS_ERROR_DELAY,\n MONITOR_TRANSFERS_TRACKING_DELAY,\n IMPORT_REMOVE_ON_DONE_DELAY\n} from '../shared/constants' */\n\nimport { ERROR_CODES } from '../helpers/errors'\n/* import { IMPORT_TYPE } from '../helpers/import'\nimport { EXPORT_TYPE } from '../helpers/export'\nimport { CONVERT_TYPE } from '../helpers/convert' */\n\n/* import {\n updateProgress,\n importFail,\n importStart,\n importComplete,\n removeImport\n} from '../actions/imports' */\n\nimport { addError } from '../actions/errors'\nimport { setConfig } from '../actions/ui'\n// import { getImports, getUser } from '../state'\n\n// import { loadMessages } from './intl'\n\n// const TAG = '@bootstrap'\n\nexport default function* bootstrap() {\n try {\n const config = yield call(getConfig)\n\n // If url contains a session id we send it to mike-login's config\n // so that the user is logged in silently (SSO)\n const queryString = window.location.search\n if (queryString) {\n const parameters = qs.parse(queryString.split('?')[1]) || {}\n if (parameters.sid) {\n config.sessionId = '' + parameters.sid\n }\n }\n\n yield put(setConfig(config))\n\n // const { strict, fallback } = config.intl.languages\n\n // const lang = strict || (fallback || 'en')\n\n const appInsightsKey = (config.appInsights || {}).key\n\n // yield call(loadMessages, lang)\n yield call(initApis, config)\n yield call(initAi, appInsightsKey)\n // yield spawn(monitorTransfers) // Might be re-activated if we have a UI design for monitoring remote transfers\n } catch (error) {\n yield put(addError(ERROR_CODES.AUTH_FAILED, error))\n }\n}\n\n/* const MONITOR_TAG = `${TAG}.monitorTransfers`\n\nexport function* monitorTransfers() {\n console.log(MONITOR_TAG, 'Stating monitoring transfers...')\n\n let prevActiveTransfers = []\n\n while (true) {\n try {\n const user = yield select(getUser)\n\n if (user) {\n const transfers = yield call(getTransfers, {\n statuses: [TRANSFER_STATUSES.PENDING, TRANSFER_STATUSES.IN_PROGRESS]\n })\n const remoteTransfers = toTransferIds(transfers) \n\n const imports = yield select(getImports)\n const localTransfers = toTransferIds(imports)\n\n const activeTransfers = localTransfers //union(remoteTransfers, localTransfers)\n\n const newActiveTransfers = difference(\n activeTransfers,\n prevActiveTransfers\n )\n\n if (!isEmpty(newActiveTransfers)) {\n yield fork(trackNewActiveTransfers, newActiveTransfers)\n }\n\n prevActiveTransfers = activeTransfers\n }\n\n yield delay(MONITOR_TRANSFERS_DELAY)\n } catch (error) {\n console.error(MONITOR_TAG, error)\n yield delay(MONITOR_TRANSFERS_ERROR_DELAY)\n }\n }\n}\n\nexport function* trackNewActiveTransfers(transferIds) {\n for (const id of transferIds) {\n const info = yield call(getTransfer, id)\n\n console.log(MONITOR_TAG, id, 'Init transfer', { info })\n\n if (info.type === EXPORT_TYPE) {\n // TODO: monitoring also the export transfers\n return\n } else if (info.type === IMPORT_TYPE) {\n const {\n projectId,\n createdBy,\n datasetImportData: { name },\n importParameters: { fileName }\n } = info\n\n yield put(\n importStart(id, createdBy, projectId, TRANSFER_STATUSES.IN_PROGRESS, {\n name,\n fileName\n })\n )\n\n yield fork(trackTransfer, id)\n } else if (info.type === CONVERT_TYPE) {\n const { projectId, createdBy } = info\n\n let name = id\n\n if (info.datasetImportData && info.datasetImportData.name) {\n name = info.datasetImportData.name\n }\n\n yield put(\n importStart(id, createdBy, projectId, TRANSFER_STATUSES.IN_PROGRESS, {\n name,\n fileName: name\n })\n )\n\n yield fork(trackTransfer, id)\n } else {\n console.warn(MONITOR_TAG, `Unknown transfer type \"${info.type}\"`)\n }\n }\n}\n\nexport function* trackTransfer(id) {\n while (true) {\n try {\n const info = yield call(getTransfer, id)\n console.log(MONITOR_TAG, id, 'Tracking transfer', { info })\n\n if (\n [\n TRANSFER_STATUSES.NONE,\n TRANSFER_STATUSES.PENDING,\n TRANSFER_STATUSES.IN_PROGRESS\n ].includes(info.status)\n ) {\n yield put(updateProgress(id, 0))\n } else {\n if (info.status === TRANSFER_STATUSES.COMPLETED) {\n yield put(importComplete(id))\n yield delay(IMPORT_REMOVE_ON_DONE_DELAY)\n yield put(removeImport(id))\n } else if (info.status === TRANSFER_STATUSES.ERROR) {\n yield put(importFail(id, new Error(info.errorMessage)))\n } else {\n yield put(\n importFail(\n id,\n new Error(`Unknown transfer status \"${info.status}\"`)\n )\n )\n }\n\n return\n }\n\n yield delay(MONITOR_TRANSFERS_TRACKING_DELAY)\n } catch (error) {\n console.error(MONITOR_TAG, error)\n yield delay(MONITOR_TRANSFERS_ERROR_DELAY)\n }\n }\n} \n\nconst toTransferIds = map('id') */\n","import PropTypes from 'prop-types'\n\nimport { ACCESS_LEVELS, ROLE_TYPES } from '../helpers/project'\nimport { PARAMETER_TYPES } from '../helpers/parameters'\nimport { UPLOAD_STATES } from '../helpers/upload'\nimport { TRANSFER_STATUSES } from '../apis/transfer'\nimport { EXPORT_STATES } from '../helpers/export'\n\nimport { MDUI_SIZES, MDUI_PLACEMENTS } from '../shared/constants'\n\nconst loginConfig = PropTypes.exact({\n clientId: PropTypes.string.isRequired,\n tenantId: PropTypes.string.isRequired,\n resourceId: PropTypes.string.isRequired,\n sessionId: PropTypes.string\n})\n\nconst role = PropTypes.oneOf(Object.values(ROLE_TYPES))\n\nconst mduiSizes = PropTypes.oneOf(Object.values(MDUI_SIZES))\n\nconst mduiPlacements = PropTypes.oneOf(Object.values(MDUI_PLACEMENTS))\n\nconst projectCapabilities = PropTypes.exact({\n canCreateContent: PropTypes.bool.isRequired,\n canDelete: PropTypes.bool.isRequired,\n canDeleteContent: PropTypes.bool.isRequired,\n canEdit: PropTypes.bool.isRequired,\n canEditAccessLevel: PropTypes.bool.isRequired,\n canGrantAccess: PropTypes.bool.isRequired,\n canListContent: PropTypes.bool.isRequired,\n canReadContent: PropTypes.bool.isRequired,\n canUpdateContent: PropTypes.bool.isRequired\n})\n\nconst language = PropTypes.exact({\n code: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired\n})\n\nconst coordinateSystem = PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n wkt: PropTypes.string.isRequired,\n proj4String: PropTypes.string.isRequired\n})\n\nconst customerUser = PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired\n})\n\nconst projectMember = PropTypes.shape({\n userId: PropTypes.string.isRequired,\n role: role.isRequired,\n displayName: PropTypes.string\n})\n\nconst apiError = PropTypes.shape({\n httpStatus: PropTypes.number.isRequired,\n httpStatusText: PropTypes.string.isRequired,\n body: PropTypes.any\n})\n\nconst error = PropTypes.exact({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n message: PropTypes.string.isRequired,\n isApiError: PropTypes.bool.isRequired,\n source: PropTypes.object, //PropTypes.oneOfType([apiError, PropTypes.instanceOf(Error)]),\n timestamp: PropTypes.number.isRequired\n})\n\nconst upload = PropTypes.exact({\n id: PropTypes.string.isRequired,\n fileName: PropTypes.string.isRequired,\n file: PropTypes.object.isRequired,\n state: PropTypes.oneOf(Object.values(UPLOAD_STATES)).isRequired,\n fileUrl: PropTypes.string,\n blobName: PropTypes.string,\n progress: PropTypes.number,\n error\n})\n\nconst exportForm = PropTypes.exact({\n coordinateSystemId: PropTypes.number,\n exporterId: PropTypes.string.isRequired\n})\n\nconst exporter = PropTypes.shape({\n format: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n description: PropTypes.string,\n datasetTypes: PropTypes.arrayOf(PropTypes.string).isRequired\n})\n\nconst exportData = PropTypes.exact({\n id: PropTypes.string.isRequired,\n state: PropTypes.oneOf(Object.values(EXPORT_STATES)).isRequired,\n fileName: PropTypes.string.isRequired,\n data: exportForm,\n projectId: PropTypes.string,\n datasetId: PropTypes.string,\n progress: PropTypes.number,\n error\n})\n\nconst importForm = PropTypes.exact({\n coordinateSystemId: PropTypes.number,\n description: PropTypes.string,\n fileName: PropTypes.string.isRequired,\n transferUpload: PropTypes.bool,\n importerId: PropTypes.string,\n importerParameters: PropTypes.object,\n name: PropTypes.string.isRequired,\n reader: PropTypes.string,\n writer: PropTypes.string,\n advancedOptions: PropTypes.bool,\n readerParameters: PropTypes.object\n})\n\nconst importData = PropTypes.exact({\n id: PropTypes.string.isRequired,\n state: PropTypes.oneOf(Object.values(TRANSFER_STATUSES)).isRequired,\n data: importForm,\n fileUrl: PropTypes.string,\n projectId: PropTypes.string,\n createdBy: PropTypes.string,\n progress: PropTypes.number,\n error,\n initialId: PropTypes.string\n})\n\nconst parameter = PropTypes.shape({\n name: PropTypes.string.isRequired,\n dataType: PropTypes.oneOf(Object.values(PARAMETER_TYPES)).isRequired,\n displayName: PropTypes.string.isRequired,\n required: PropTypes.bool.isRequired\n})\n\nconst datasetImporter = PropTypes.shape({\n format: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n description: PropTypes.string,\n parameters: PropTypes.arrayOf(parameter)\n})\n\nconst datasetReader = PropTypes.shape({\n name: PropTypes.string.isRequired,\n description: PropTypes.string,\n writers: PropTypes.arrayOf(PropTypes.string)\n})\n\nconst datasetWriter = PropTypes.shape({\n name: PropTypes.string.isRequired,\n description: PropTypes.string,\n datasetFormat: PropTypes.string,\n parameters: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n description: PropTypes.string,\n dataType: PropTypes.string,\n required: PropTypes.bool\n })\n )\n})\n\nconst user = PropTypes.shape({\n id: PropTypes.string.isRequired,\n initials: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n tenantId: PropTypes.string.isRequired,\n tenantName: PropTypes.string.isRequired,\n roles: PropTypes.arrayOf(PropTypes.string)\n})\n\nconst projectAccessLevel = PropTypes.oneOf(Object.values(ACCESS_LEVELS))\n\nconst project = PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n accessLevel: projectAccessLevel,\n description: PropTypes.string,\n members: PropTypes.arrayOf(projectMember),\n createdAt: PropTypes.string,\n updatedAt: PropTypes.string,\n lastActivityAt: PropTypes.string\n})\n\nconst dataset = PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n description: PropTypes.string,\n tags: PropTypes.arrayOf(PropTypes.string),\n createdAt: PropTypes.string,\n updatedAt: PropTypes.string,\n datasetType: PropTypes.string\n})\n\nconst recycleBinContent = PropTypes.exact({\n projects: PropTypes.arrayOf(project).isRequired,\n datasets: PropTypes.arrayOf(dataset).isRequired,\n datasetProjects: PropTypes.objectOf(project).isRequired\n})\n\nconst support = PropTypes.exact({\n toEmail: PropTypes.string.isRequired,\n subject: PropTypes.string,\n body: PropTypes.string,\n portalLink: PropTypes.string\n})\n\nconst tutorial = PropTypes.exact({\n link: PropTypes.string.isRequired,\n linkLibrary: PropTypes.string.isRequired,\n platformDocumentation: PropTypes.string.isRequired\n})\n\nconst appPropTypes = {\n apiError,\n coordinateSystem,\n customerUser,\n dataset,\n datasetImporter,\n error,\n exportData,\n exporter,\n importData,\n importForm,\n language,\n loginConfig,\n mduiPlacements,\n mduiSizes,\n parameter,\n project,\n projectAccessLevel,\n projectCapabilities,\n projectMember,\n recycleBinContent,\n role,\n upload,\n user,\n support,\n tutorial,\n datasetReader,\n datasetWriter\n}\n\nexport default appPropTypes\n","export const PARAMETER_TYPES = {\n INTEGER: 'integer',\n STRING: 'string',\n BOOL: 'bool'\n}\n","import React, { useState } from 'react'\nimport { useOidc } from '@axa-fr/react-oidc'\nimport Fab from '@material-ui/core/Fab'\nimport { Typography } from '@material-ui/core'\nimport { useTypedSelector } from '../../reducers'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button/MikeButton'\n\nimport './mike-login.css'\nimport Menu from '@material-ui/core/Menu'\n\ninterface IProps {\n logInLabel?: string\n logOutLabel?: string\n flat?: boolean\n logoutClickCallback?: any\n}\n\nexport const LOGGING_OUT = 'loggingOut'\n\n/**\n * @name MikeLogin\n * @summary Login component for use within CloudBridge applications.\n */\nconst MikeLogin = (props: IProps) => {\n const { logOutLabel, flat, logoutClickCallback } = props\n const { logout } = useOidc()\n\n const user = useTypedSelector(state => state['auth'].user)\n\n const [anchorEl, setAnchorEl] = useState(null)\n\n const handleLogout = async () => {\n logoutClickCallback()\n sessionStorage.setItem(LOGGING_OUT, 'true')\n logout('/')\n }\n\n const open = Boolean(anchorEl!)\n\n const handleOpen = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = () => {\n setAnchorEl(null)\n }\n\n const fabStyle = {\n fontWeight: 300,\n fontSize: 12,\n minHeight: 0,\n width: 32,\n height: 32,\n boxShadow: flat ? 'none' : undefined\n }\n\n return (\n <>\n \n {user?.initials || ''}\n \n \n \n {user?.name}\n \n {logOutLabel}\n \n \n \n \n )\n}\n\nexport default MikeLogin\n","// import MikeTooltip from '@mike/mike-shared-frontend/mike-tooltip/MikeTooltip'\nimport PropTypes from 'prop-types'\nimport React, { useMemo } from 'react'\nimport messages from '../../shared/messages'\nimport { ReactComponent as Projects } from '@mike/mike-shared-frontend/media/icons/Projects'\nimport { ReactComponent as Delete } from '@mike/mike-shared-frontend/media/icons/Delete'\nimport { Tabs, Tab } from '@material-ui/core'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport { useIntl } from 'react-intl'\nimport { useLocation, Link } from 'react-router-dom'\n\nconst useAppNavStyles = makeStyles(theme =>\n createStyles({\n tabsIndicator: {\n height: 3\n },\n hiddenTabRoot: {\n minWidth: 0,\n padding: 0,\n margin: 0,\n minHeight: 48\n },\n root: {\n borderBottom: '1px solid' + theme.palette.grey[300],\n paddingLeft: '40px',\n marginBottom: '20px'\n },\n activeLabel: {\n fontWeight: 'bold',\n color: theme.palette.secondary.main\n },\n svg: {\n filter: 'invert(0.5) sepia(1) saturate(5) hue-rotate(175deg)'\n }\n })\n)\n\nconst AppNav = ({ tenantId }) => {\n const intl = useIntl()\n const classes = useAppNavStyles()\n\n function usePath() {\n return useLocation().pathname\n }\n\n let currentPath = usePath()\n\n const activeTab = useMemo(() => {\n if (currentPath.startsWith('/site') || currentPath.startsWith('/project')) {\n return 1\n }\n\n if (currentPath === `/recycle-bin/${tenantId}`) {\n return 2\n }\n\n return 0\n }, [tenantId, currentPath])\n\n return (\n \n \n \n {intl.formatMessage(messages.siteData)}\n \n }\n icon={}\n />\n \n {intl.formatMessage(messages.recycleBin)}\n \n }\n icon={}\n />\n \n )\n}\nAppNav.propTypes = {\n tenantId: PropTypes.string\n}\n\nconst useTabStyles = makeStyles(\n createStyles({\n root: {\n textTransform: 'capitalize',\n fontSize: '1em',\n opacity: 1,\n minHeight: 48,\n padding: 0,\n margin: 0\n },\n wrapper: {\n paddingRight: '12px',\n flexDirection: 'row',\n '&&& > .icon': {\n marginLeft: -10,\n marginBottom: 0\n }\n }\n })\n)\n\nexport const LinkTab = ({ to, label, icon, disabled }) => {\n const classes = useTabStyles()\n\n return (\n \n )\n}\n\nLinkTab.propTypes = {\n to: PropTypes.string.isRequired,\n label: PropTypes.object.isRequired,\n icon: PropTypes.object.isRequired,\n disabled: PropTypes.bool\n}\n\nexport default AppNav\n","import React, { useMemo } from 'react'\nimport messages from '../../shared/messages'\nimport { ReactComponent as MyProjects } from '@mike/mike-shared-frontend/media/icons/MyProjects'\nimport { ReactComponent as TableResults } from '@mike/mike-shared-frontend/media/icons/TableResults'\nimport { ReactComponent as Users } from '@mike/mike-shared-frontend/media/icons/Users'\nimport { Tabs, Tab } from '@material-ui/core'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport { useIntl } from 'react-intl'\nimport { useLocation } from 'react-router-dom'\nimport { LinkTab } from '../AppNav'\n\nconst useAppNavStyles = makeStyles(theme =>\n createStyles({\n tabsIndicator: {\n height: 3\n },\n hiddenTabRoot: {\n minWidth: 0,\n padding: 0,\n margin: 0,\n minHeight: 48\n },\n activeLabel: {\n fontWeight: 'bold',\n color: theme.palette.secondary.main\n },\n svg: {\n filter: 'invert(0.5) sepia(1) saturate(5) hue-rotate(175deg)'\n }\n })\n)\n\ninterface IProps {\n showSiteAccess?: boolean\n}\n\nconst IAMNav = (props: IProps) => {\n const { showSiteAccess } = props\n const intl = useIntl()\n const classes = useAppNavStyles()\n\n function usePath() {\n return useLocation().pathname\n }\n\n let currentPath = usePath()\n\n const activeTab = useMemo(() => {\n if (currentPath.startsWith('/site-access')) {\n return 2\n }\n\n if (currentPath.startsWith('/site-info')) {\n return 3\n }\n\n if (\n currentPath.startsWith('/site') ||\n currentPath.startsWith('/project') ||\n currentPath.startsWith('/recycle-bin')\n ) {\n return 1\n }\n\n return 0\n }, [currentPath])\n\n return (\n \n \n \n {intl.formatMessage(messages.data)}\n \n }\n icon={}\n />\n {showSiteAccess ? (\n \n {intl.formatMessage(messages.tenantAccess)}\n \n }\n icon={}\n />\n ) : (\n \n )}\n {showSiteAccess ? (\n \n {intl.formatMessage(messages.tenantInfo)}\n \n }\n icon={}\n />\n ) : (\n \n )}\n \n )\n}\n\nexport default IAMNav\n","import { get, has, isNil, isArray, first } from 'lodash'\nimport { compose, withProps } from 'recompose'\n\nimport { connect as formikConnect } from 'formik'\n\nexport default compose(\n formikConnect,\n\n withProps(({ formik, ...props }) => {\n const touched = get(formik.touched, props.name)\n\n const onBlur = formik.handleBlur\n const onChange = props.onChange || formik.handleChange\n\n const errorMessageOrErrors = get(formik.errors, props.name)\n const errorMessage = isArray(errorMessageOrErrors)\n ? first(errorMessageOrErrors)\n : errorMessageOrErrors\n\n const error = isNil(props.error)\n ? (touched || formik.submitCount > 0) && Boolean(errorMessage)\n : props.error\n\n const value = isNil(props.value)\n ? has(formik.values, props.name)\n ? get(formik.values, props.name)\n : ''\n : props.value\n\n const helperText = isNil(props.helperText)\n ? error\n ? errorMessage\n : ''\n : props.helperText\n\n return {\n onBlur,\n onChange,\n error,\n value,\n helperText\n }\n })\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport MuiTextField from '@material-ui/core/TextField'\n\nimport withFormik from './withFormik'\n\nconst TextField = ({\n autoComplete = 'off',\n autoFocus,\n disabled,\n error,\n fullWidth,\n helperText,\n label,\n name,\n onBlur,\n onChange,\n required,\n rows = 3,\n type = 'text',\n value,\n addPlaceHolder = false\n}) => (\n <>\n \n {/* To avoid jumping when error message appears */}\n {addPlaceHolder && !helperText && (\n \n )}\n \n)\nTextField.propTypes = {\n autoComplete: PropTypes.string,\n autoFocus: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n fullWidth: PropTypes.bool,\n helperText: PropTypes.string,\n label: PropTypes.string,\n name: PropTypes.string.isRequired,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n required: PropTypes.bool,\n rows: PropTypes.number,\n type: PropTypes.string,\n value: PropTypes.any.isRequired,\n addPlaceHolder: PropTypes.bool\n}\n\nexport default withFormik(TextField)\n","import React, { useEffect, useState } from 'react'\nimport objectHash from 'object-hash'\nimport { Form, Formik } from 'formik'\nimport { Grid } from '@material-ui/core'\nimport TextField from '../formik/TextField'\nimport * as Yup from 'yup'\nimport { useIntl } from 'react-intl'\nimport messages from '../../shared/messages'\nimport { MikeButton } from '@mike/mike-shared-frontend'\nimport { css } from 'emotion'\nimport {\n getProject,\n IBillingInformation,\n ICreateTenantFormValues\n} from '../../apis/admin'\nimport { useTypedSelector } from '../../reducers'\n\nconst submitButtonStyle = css`\n float: right;\n`\nconst validationSchema = Yup.object().shape({\n name: Yup.string()\n .required('Required')\n .min(3, 'Too short')\n .max(50, 'Too long')\n .matches(\n /^[a-zA-Z0-9\\s]*$/,\n 'Only letters, numbers and spaces are allowed'\n ),\n billingReference: Yup.string().required('Required'),\n billingReferenceType: Yup.string().required('Required'),\n billingReferenceTag: Yup.string()\n})\n\ninterface IProps {\n handleCreateTenant: (values: ICreateTenantFormValues) => void\n}\n\nconst CreateTenantForm = ({ handleCreateTenant }: IProps) => {\n const [billingInformation, setBillingInformation] = useState<\n IBillingInformation\n >({\n billingReference: '',\n billingReferenceTag: '',\n billingReferenceType: ''\n })\n const intl = useIntl()\n const tenantId = useTypedSelector(state => state['auth'].user?.tenantId) || ''\n\n const defaultInitialValues: ICreateTenantFormValues = {\n name: '',\n billingReference: billingInformation.billingReference,\n billingReferenceType: billingInformation.billingReferenceType as\n | 'Maconomy'\n | 'DHI',\n billingReferenceTag: billingInformation.billingReferenceTag\n }\n\n useEffect(() => {\n const fetchBillingInformation = async () => {\n const project = await getProject(tenantId)\n setBillingInformation(project.billingInformation)\n }\n\n fetchBillingInformation().catch(console.error)\n }, [])\n\n return (\n \n {({ handleSubmit, handleChange, setFieldTouched }) => {\n const change = (name, e) => {\n e.persist()\n handleChange(e)\n setFieldTouched(name, true, false)\n }\n\n return (\n
\n \n \n \n \n {/**/}\n {/* */}\n {/**/}\n \n handleSubmit()}\n type=\"button\"\n >\n {intl.formatMessage({\n id: 'createTenantForm.createTenantButton'\n })}\n \n \n \n
\n )\n }}\n \n )\n}\n\nexport default CreateTenantForm\n","import { css } from 'emotion'\nimport { mikePalette } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { makeStyles, createStyles } from '@material-ui/core'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\n\nexport const useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n button: {\n color: theme.palette.secondary.main,\n '&:disabled': {\n color: theme.palette.secondary.light\n }\n },\n\n buttonSecondaryBorder: {\n padding: 0,\n paddingRight: 12,\n minWidth: 160,\n border: '2px solid ' + mikePalette.secondary.main,\n backgroundColor: mikePalette.lightGrey.main,\n color: mikePalette.secondary.main,\n '&[disabled]': {\n color: mikePalette.secondary.light,\n opacity: 0.5,\n cursor: 'not-allowed'\n }\n },\n buttonSecondaryBorderWhite: {\n padding: 0,\n paddingRight: 12,\n border: '2px solid ' + mikePalette.secondary.main,\n color: mikePalette.text.primary,\n '&[disabled]': {\n color: mikePalette.secondary.light,\n opacity: 0.5,\n cursor: 'not-allowed'\n }\n }\n })\n})\n\nexport const iconButtonStyle = css`\n button {\n color: ${mikePalette.secondary.main};\n '&:disabled': {\n color: theme.palette.primary.light;\n }\n }\n`\n\nexport const iconStyle = css`\n path {\n fill: ${mikePalette.secondary.main};\n }\n`\n\nexport const iconPrimaryStyle = (disabled = false) => {\n const color = disabled ? mikePalette.primary.light : mikePalette.primary.main\n return css`\n path {\n fill: ${color};\n }\n `\n}\n\nexport const iconSecondaryStyle = (disabled = false) => {\n const color = disabled\n ? mikePalette.secondary.light\n : mikePalette.secondary.main\n return css`\n path {\n fill: ${color};\n }\n `\n}\n\nexport const iconCustomSizeStyle = (size = 32) => {\n const height = size\n return css`\n svg {\n height: ${height};\n width: ${height};\n }\n `\n}\n","import React from 'react'\nimport { FormattedMessage } from 'react-intl'\nimport Button from '@material-ui/core/Button'\nimport { ButtonProps as MuiButtonProps } from '@material-ui/core/Button'\nimport { useStyles } from './iconStyles'\nimport { useOidc } from '@axa-fr/react-oidc'\n\nconst ChangeSiteButton = (buttonProps: MuiButtonProps) => {\n const classes = useStyles()\n const { login } = useOidc()\n return (\n {\n login('/')\n }}\n >\n \n \n )\n}\n\nexport default ChangeSiteButton\n","import { AppIconName } from '@mike/mike-shared-frontend/mike-icon/MikeAppIcon'\n\nconst MIKEPREFIX = 'MIKE '\nexport const ERROR = 'Error'\n\nexport function appName(name: string): string {\n const appName = name.startsWith(MIKEPREFIX)\n ? name.slice(MIKEPREFIX.length)\n : name\n return appName\n}\n\nexport function projectQueryParameter(\n appId: string,\n projectId: string,\n tenantId: string\n): string {\n let queryParameter = ''\n switch (appId) {\n case 'Data Link':\n queryParameter = projectId\n ? '/map?projectID=' + projectId + '&tenantId=' + tenantId\n : '?tenantId=' + tenantId\n break\n case 'Flood Screener':\n queryParameter = ''\n break\n case 'Mesh Builder':\n queryParameter = projectId\n ? '/project/' + projectId + '/workspace-list?tenantId=' + tenantId\n : '?tenantId=' + tenantId\n break\n case 'Bathymetry Builder':\n queryParameter = '/project/' + projectId + '?tenantId=' + tenantId\n break\n case 'MIKE 3D World':\n queryParameter = projectId\n ? '/project/' + projectId + '?tenantId=' + tenantId\n : '?tenantId=' + tenantId\n break\n case 'Fast Wave Emulator':\n case 'MetOcean Simulator':\n case 'Metocean Simulator':\n queryParameter = projectId\n ? '/project/' + projectId + '?tenantId=' + tenantId\n : '?tenantId=' + tenantId\n break\n default:\n break\n }\n return queryParameter\n}\n\nexport function appIconName(appName: string): AppIconName {\n let appIcon\n switch (appName) {\n case 'Data Link':\n appIcon = 'dataLink'\n break\n case 'Mesh Builder':\n appIcon = 'meshBuilder'\n break\n case 'MIKE 3D World':\n appIcon = 'mike3DWorld'\n break\n case 'Flood Screener':\n appIcon = 'floodScreener'\n break\n case 'Company Subscription (giving access to Cloud Admin)':\n appIcon = 'adminCenter'\n break\n case 'Bathymetry Builder':\n appIcon = 'bathymetryBuilder'\n break\n case 'Global Seas':\n appIcon = 'globalSeas'\n break\n case 'Fast Wave Emulator':\n case 'MetOcean Simulator':\n case 'Metocean Simulator':\n appIcon = 'MIKE Fast Wave Emulator'\n break\n default:\n break\n }\n return appIcon\n}\n","/* eslint-disable react/prop-types */\nimport React from 'react'\n\nimport {\n makeStyles,\n createStyles,\n Typography,\n Grid,\n Button\n} from '@material-ui/core'\nimport { IApplication } from '../../model/Applications'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport MikeAppIcon, {\n AppIconName\n} from '@mike/mike-shared-frontend/mike-icon/MikeAppIcon'\nimport { appIconName, projectQueryParameter } from './configuration'\n\ninterface IProps {\n application: IApplication\n projectId: string\n linkToRootUrl: boolean\n tenantId: string\n disabled?: boolean\n}\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n button: {\n backgroundColor: theme.palette.background.paper,\n borderRadius: '12px',\n boxShadow: '0px 4px 4px rgba(0, 0, 0, 0.16)',\n height: theme.spacing(10),\n width: theme.spacing(10),\n '&:hover': {\n backgroundColor: theme.palette.primary,\n boxShadow: '0px 8px 8px rgba(0, 0, 0, 0.16)'\n }\n },\n appName: {\n width: theme.spacing(16),\n paddingTop: theme.spacing(1)\n },\n appNameWithError: {\n paddingTop: theme.spacing(1)\n },\n status: {\n paddingLeft: theme.spacing(0.5)\n },\n warnIcon: {\n height: 14.68,\n width: 13\n },\n ellipsis: {\n maxWidth: theme.spacing(12),\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n })\n})\n\nconst MikeCloudApp = (props: IProps) => {\n const classes = useStyles()\n const { application, projectId, linkToRootUrl, tenantId, disabled } = props\n\n const iconName: AppIconName =\n appIconName(application.name) !== undefined\n ? appIconName(application.name)\n : 'genericApp'\n\n const queryParameter = linkToRootUrl\n ? '?tenantId=' + tenantId\n : application.name === 'MIKE 3D World'\n ? projectQueryParameter('MIKE 3D World', projectId, tenantId)\n : projectQueryParameter(application.name, projectId, tenantId)\n\n return (\n \n \n {iconName && application.name === 'MIKE Mine' ? (\n \n ) : (\n \n )}\n \n\n \n \n \n {application.name}\n \n \n \n \n )\n}\n\nexport default MikeCloudApp\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport Skeleton from '@material-ui/lab/Skeleton'\nimport Grid from '@material-ui/core/Grid'\nimport { makeStyles, createStyles } from '@material-ui/core'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { PaletteColor } from '@material-ui/core/styles/createPalette'\n\ninterface IProps {\n count?: number\n width?: number\n height?: number\n}\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n const lightGrey = theme.palette.lightGrey as PaletteColor // TS fix: possibly undefined\n const mediumGrey = theme.palette.mediumGrey as PaletteColor // TS fix: possibly undefined\n return createStyles({\n container: {\n padding: theme.spacing(6),\n backgroundColor: lightGrey.main,\n border: '1px solid ' + mediumGrey.main\n },\n item: {\n paddingRight: theme.spacing(6)\n }\n })\n})\n\nconst AppsSkeleton = (props: IProps) => {\n const { count = 3, width = 80, height = 80 } = props\n const classes = useStyles()\n return (\n \n {Array.from(new Array(count)).map((item, key) => (\n \n \n \n \n ))}\n \n )\n}\n\nexport default AppsSkeleton\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport { makeStyles, createStyles, Grid } from '@material-ui/core'\nimport { IApplication } from '../../model/Applications'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport MikeCloudApp from './MikeCloudApp'\nimport { PaletteColor } from '@material-ui/core/styles/createPalette'\nimport AppsSkeleton from './AppsSkeleton'\nimport { useRouteMatch } from 'react-router-dom'\n\ninterface IProps {\n applications: Array\n loading: boolean\n projectId: string\n tenantId: string\n}\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n const mediumGrey = theme.palette.mediumGrey as PaletteColor // TS fix: possibly undefined\n return createStyles({\n container: {\n padding: theme.spacing(6),\n backgroundColor: mediumGrey.light,\n border: '1px solid ' + mediumGrey.main\n },\n item: {\n paddingRight: theme.spacing(6)\n }\n })\n})\n\nconst MikeCloudApps = (props: IProps) => {\n const classes = useStyles()\n const { applications, loading, projectId, tenantId } = props\n\n const match = useRouteMatch({\n path: '/project/:id',\n strict: true,\n sensitive: true\n })\n\n return loading ? (\n \n ) : (\n \n <>\n {applications.map((app: IApplication, index: number) => {\n return (\n app.enabled && (\n \n \n \n )\n )\n })}\n \n \n )\n}\n\nexport default MikeCloudApps\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst BASE_COLOR = '#00A4EC'\n\nconst CreditsIcon = ({ colorR = BASE_COLOR, fillR = true, ...props }) => (\n \n \n \n \n \n \n \n \n // \n)\nCreditsIcon.propTypes = {\n colorR: PropTypes.string,\n fillR: PropTypes.bool\n}\nexport default CreditsIcon\n","import { createTheme } from '@material-ui/core/styles'\nimport MikeSharedTheme from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport MIKE_COLORS from '@mike/mike-shared-frontend/mike-shared-styles/mike-colors'\n\nconst DataAdminTheme = {\n ...MikeSharedTheme,\n // Add special cloud admin styles to the theme if needed\n overrides: {\n ...MikeSharedTheme.overrides,\n MuiFormLabel: {\n root: {\n '&$focused': {\n color: MIKE_COLORS.DARKGREY_DEFAULT\n },\n '&$error': {\n color: MIKE_COLORS.PINK_DEFAULT\n }\n }\n },\n MuiFilledInputLabel: {\n root: {\n color: MIKE_COLORS.DARKGREY_DEFAULT,\n fontSize: '1rem', // 16px\n lineHeight: 1.374, // 22px\n '&:focused &:not($error)': {\n color: MIKE_COLORS.DARKGREY_DEFAULT\n },\n '&:error': {\n color: MIKE_COLORS.PINK_DEFAULT\n },\n '&:disabled': {\n color: MIKE_COLORS.MEDIUMGREY_LIGHT\n }\n }\n },\n MuiFilledInput: {\n root: {\n color: MIKE_COLORS.DARKGREY_DEFAULT,\n backgroundColor: MIKE_COLORS.MEDIUMGREY_LIGHT,\n '&:hover': {\n backgroundColor: MIKE_COLORS.MEDIUMGREY_DEFAULT\n },\n '&:error': {\n backgroundColor: MIKE_COLORS.MEDIUMGREY_DARK\n },\n '&$disabled': {\n backgroundColor: MIKE_COLORS.MEDIUMGREY_LIGHT\n },\n '&$focused': {\n color: MIKE_COLORS.BRANDBLUE_DEFAULT,\n backgroundColor: MIKE_COLORS.MEDIUMGREY_DARK\n }\n },\n underline: {\n color: MIKE_COLORS.BRANDBLUE_DEFAULT,\n '&:after &:not($error)': {\n borderBottom: '1px solid ' + MIKE_COLORS.DARKGREY_DEFAULT\n },\n '&:before &:not($error)': {\n borderBottom: '1px solid ' + MIKE_COLORS.DARKGREY_DEFAULT\n },\n '&$focused:before': {\n borderBottom: '2px solid ' + MIKE_COLORS.BRANDBLUE_DEFAULT\n },\n '&$focused:after': {\n borderBottom: '2px solid ' + MIKE_COLORS.BRANDBLUE_DEFAULT\n },\n '&$error:before': {\n borderBottom: '2px solid ' + MIKE_COLORS.PINK_DEFAULT\n },\n '&$error:after': {\n borderBottom: '2px solid ' + MIKE_COLORS.PINK_DEFAULT\n }\n },\n multiline: {\n color: MIKE_COLORS.BRANDBLUE_DEFAULT,\n '&:before &:not($error)': {\n borderBottom: '1px solid ' + MIKE_COLORS.DARKGREY_DEFAULT\n },\n '&:after &:not($error)': {\n borderBottom: '1px solid ' + MIKE_COLORS.DARKGREY_DEFAULT\n },\n '&$focused:before': {\n borderBottom: '2px solid ' + MIKE_COLORS.BRANDBLUE_DEFAULT\n },\n '&$focused:after': {\n borderBottom: '2px solid ' + MIKE_COLORS.BRANDBLUE_DEFAULT\n },\n '&$error:before': {\n borderBottom: '2px solid ' + MIKE_COLORS.PINK_DEFAULT\n },\n '&$error:after': {\n borderBottom: '2px solid ' + MIKE_COLORS.PINK_DEFAULT\n }\n }\n },\n MuiFormHelperText: {\n root: {\n fontSize: '0.75rem',\n lineHeight: 1.66,\n color: MIKE_COLORS.DARKGREY_DEFAULT,\n backgroundColor: 'transparent',\n '&$error': {\n color: MIKE_COLORS.PINK_DEFAULT\n }\n }\n },\n MuiSelect: {\n selectMenu: {\n backgroundColor: MIKE_COLORS.MEDIUMGREY_LIGHT\n }\n },\n\n MuiMenuItem: {\n root: {\n color: MIKE_COLORS.BRANDBLUE_DEFAULT,\n backgroundColor: MIKE_COLORS.MEDIUMGREY_LIGHT,\n '&:hover': {\n backgroundColor: MIKE_COLORS.MEDIUMGREY_DEFAULT\n },\n '&$selected, &$selected:hover, &$selected:focus': {\n backgroundColor: MIKE_COLORS.MEDIUMGREY_DARK,\n fontWeight: 'bold'\n }\n }\n },\n props: {\n ...MikeSharedTheme.props,\n MuiInput: {\n margin: 'dense'\n },\n MuiTextField: {\n variant: 'filled',\n margin: 'dense'\n },\n MuiMenuItem: {\n margin: 'dense'\n }\n }\n }\n}\n\nexport const theme = createTheme(DataAdminTheme)\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useEffect, useState } from 'react'\nimport {\n Button,\n CircularProgress,\n createStyles,\n Divider,\n IconButton,\n makeStyles,\n Popover,\n Tooltip,\n Typography\n} from '@material-ui/core'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport ButtonBase from '@material-ui/core/ButtonBase'\nimport { useTypedSelector } from '../../../reducers'\nimport { useDispatch } from 'react-redux'\nimport CreditsIcon from '../../icons/CreditsIcon'\nimport {\n ArrowRightAlt,\n Close,\n Input,\n Refresh,\n WarningSharp\n} from '@material-ui/icons'\nimport { useHistory } from 'react-router-dom'\nimport { theme } from '../../../styles/theme'\nimport { useIntl } from 'react-intl'\nimport { callCreditAvailableGet } from '../../../actions/credits'\nimport moment from 'moment'\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n button: (props: IProps) => ({\n cursor: props.disabled ? 'default' : 'pointer',\n paddingRight: theme.spacing(2)\n }),\n popover: {\n maxWidth: '75vw'\n },\n popper: {\n maxWidth: 'none'\n },\n content: {\n padding: theme.spacing(2),\n background: '#dddddd'\n },\n padIcon: {\n marginRight: theme.spacing(1),\n color: theme.palette.secondary.main\n },\n innerButton: {\n width: 'max-content',\n marginTop: 0,\n marginBottom: 0\n },\n popHeader: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'space-between'\n },\n closeButton: {\n margin: '-7px'\n },\n innerBlock: {\n marginTop: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n background: 'white',\n borderRadius: '5px'\n },\n messageBlock: {\n display: 'grid',\n gap: 'auto',\n gridTemplateColumns: '1fr 24px 1fr',\n alignItems: 'center',\n width: '100%'\n }\n })\n})\n\ninterface IProps {\n disabled?: boolean\n}\n\nconst CreditsInfo = (props: IProps) => {\n const classes = useStyles(props)\n const { disabled } = props\n\n const [anchorEl, setAnchorEl] = React.useState(null)\n\n const handleClick = event => {\n if (disabled) return\n\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = event => {\n event.stopPropagation()\n\n setAnchorEl(null)\n }\n\n const intl = useIntl()\n const open = Boolean(anchorEl)\n const id = open ? 'context-help' : undefined\n\n const isAdmin = useTypedSelector(state => state['admin'].isAdmin) || false\n const creditAvailableInfoData = useTypedSelector(\n state => state['credits'].creditAvailableInfoData\n )\n const creditAvailable = useTypedSelector(\n state => state['credits'].creditAvailable\n )\n const creditLoading = useTypedSelector(state => state['credits'].loadingState)\n const tenantId =\n useTypedSelector(state => state['auth']?.user?.tenantId) || null\n\n const dispatch = useDispatch()\n\n // const [credInfo, setCredInfo] = useState()\n const [expirationData, setExpirationData] = useState([])\n const [reload, setReload] = useState(false)\n const [expDate, setExpDate] = useState('--')\n const [expCredits, setExpCredits] = useState(0)\n const history = useHistory()\n\n const validateDate = (sourceDate, transparent = false) => {\n const endD = moment()\n const startD = moment(sourceDate).add('days', 1)\n const duration = moment.duration(startD.diff(endD))\n if (duration.asDays() <= 10) return 'red'\n if (duration.asDays() <= 30) return 'orange'\n return transparent ? 'transparent' : theme.palette.secondary.main\n }\n\n //VSE: 'Available, Reserved, ExpiredInUse, Spent, Expired, Repaid'\n useEffect(() => {\n if (!tenantId) return\n\n dispatch(callCreditAvailableGet(tenantId))\n }, [tenantId, reload])\n\n const formatDate = (dateIn: string) => {\n return moment(dateIn).format('DD MMM YYYY')\n }\n\n useEffect(() => {\n if (\n !(\n creditAvailableInfoData &&\n creditAvailableInfoData.data &&\n creditAvailableInfoData.data.length > 0\n )\n )\n return\n\n const expiration = creditAvailableInfoData.data[0]?.expiresAt ?? '0'\n\n setExpDate(formatDate(expiration))\n\n const sumData = creditAvailableInfoData.data.reduce(\n (total, item) =>\n item.expiresAt === expiration ? total + item.credits : total,\n 0\n )\n\n setExpCredits(sumData)\n setExpirationData(creditAvailableInfoData.data.slice(0, 5))\n }, [creditAvailableInfoData, creditAvailable])\n\n const addSpace = (num, separator) => {\n const mainString = num.toString()\n\n const reversed = mainString\n .split('')\n .reverse()\n .join('')\n\n const joinedWithSeparator = reversed.match(/.{1,3}/g).join(separator)\n\n return joinedWithSeparator\n .split('')\n .reverse()\n .join('')\n }\n\n return (\n <>\n \n \n {addSpace(Math.round(creditAvailable), ' ') +\n intl.formatMessage({\n id: 'credits.creditsInfo.tooltip2'\n })}\n \n \n {addSpace(Math.round(expCredits), ' ') +\n intl.formatMessage({\n id: 'credits.creditsInfo.tooltip3'\n }) +\n expDate}\n \n \n }\n classes={{ tooltip: classes.popper }}\n >\n \n \n \n \n {addSpace(Math.round(creditAvailable), ' ')}\n {' '}\n \n \n \n
\n
\n \n {intl.formatMessage({\n id: 'credits.creditsInfo.creditsButton'\n })}\n \n \n {' '}\n \n
\n
\n }\n variant=\"text\"\n onClick={event => {\n event.stopPropagation()\n setReload(!reload)\n }}\n >\n {intl.formatMessage({\n id: 'credits.creditsInfo.remainingCreditsButton'\n }) +\n Number(parseFloat(creditAvailable).toFixed(2)).toLocaleString(\n 'fr'\n )}\n \n \n {intl.formatMessage({\n id: 'credits.creditsInfo.nearestExp'\n })}\n \n \n \n
\n {!creditLoading &&\n expirationData &&\n expirationData?.map((item, index) => {\n return (\n
\n {index !== 0 && }\n
\n \n {Number((item?.credits).toFixed(2)).toLocaleString(\n 'fr'\n ) + ' Credits '}\n \n \n \n {formatDate(item?.expiresAt)}\n \n
\n
\n )\n })}\n\n {isAdmin && (\n }\n variant=\"text\"\n onClick={event => {\n event.stopPropagation()\n setAnchorEl(null)\n history.push(`/site-info/credits`)\n }}\n >\n {intl.formatMessage({\n id: 'credits.creditsInfo.moreInfo'\n })}\n \n )}\n
\n \n \n \n )\n}\n\nexport default CreditsInfo\n","import React, { useEffect, useState } from 'react'\nimport Button from '@material-ui/core/Button'\nimport { Dialog, Divider, IconButton, Typography } from '@material-ui/core'\nimport { getTenantUsers, getUsers } from '../../apis/admin'\nimport CloseIcon from '@material-ui/icons/Close'\n\ntype Props = {\n isMenuOpen: boolean\n classes: Record<'buttonSecondaryBorderWhite', string>\n}\n\ntype GetTenantUsersResponseUser = {\n email: string\n name: string\n userIdentityId: string\n}\n\ntype GetTenantUsersResponse = {\n users: GetTenantUsersResponseUser[]\n tenantId: string\n}\n\ntype GetUsersResponseDataItem = {\n principalType: string\n userId: string\n role: string\n}\n\ntype GetUsersResponse = {\n data: GetUsersResponseDataItem[]\n}\n\ntype UseApiUsersReturnTypeApiUsers = {\n email: string\n name: string\n}\n\ntype UseApiUsersReturnType = {\n apiUsers: UseApiUsersReturnTypeApiUsers[]\n}\n\nconst useApiUsers = (): UseApiUsersReturnType => {\n const [apiUsers, setApiUsers] = useState([])\n\n useEffect(() => {\n const handleGetAndMergeUsers = async () => {\n const { tenantId, users }: GetTenantUsersResponse = await getTenantUsers()\n const { data }: GetUsersResponse = await getUsers(tenantId)\n\n const finalUsers = data\n .filter((u: GetUsersResponseDataItem) => u.role === 'Owner')\n .filter(\n (u: GetUsersResponseDataItem) => u.principalType === 'UserIdentity'\n )\n .reduce((acc: any, dataItem: GetUsersResponseDataItem) => {\n const user = users.find(\n (item: GetTenantUsersResponseUser) =>\n item.userIdentityId === dataItem.userId\n )\n\n if (!user) return acc\n\n acc.push({\n email: user.email,\n name: user.name\n })\n\n return acc\n }, [])\n\n setApiUsers(finalUsers)\n }\n\n handleGetAndMergeUsers().catch(console.error)\n }, [])\n\n return {\n apiUsers\n }\n}\n\nexport const SiteOwnersDialogButton = (props: Props) => {\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n\n const { apiUsers } = useApiUsers()\n\n return (\n <>\n setIsDialogOpen(true)}\n >\n Site owners\n \n\n setIsDialogOpen(false)}>\n \n \n Site owners\n setIsDialogOpen(false)}\n >\n \n \n \n {apiUsers.map((user, index) => (\n
\n \n {user.name}\n {user.email}\n
\n \n \n ))}\n \n
\n \n )\n}\n","import React from 'react'\nimport { FormattedMessage } from 'react-intl'\nimport Button from '@material-ui/core/Button'\nimport { iconStyle, useStyles } from './iconStyles'\nimport AddOutlinedIcon from '@material-ui/icons/AddOutlined'\n\nconst LINKS_MAP = {\n dev0:\n 'https://bswebapps-dev.dhigroup.com/DHI.WebApps.ITServices/Pages/Home.html?pn=11817725&env=dev',\n dev:\n 'https://bswebapps-dev.dhigroup.com/DHI.WebApps.ITServices/Pages/Home.html?pn=11817725&env=dev',\n test:\n 'https://bswebapps-test.dhigroup.com/DHI.WebApps.ITServices/Pages/Home.html?pn=11817725',\n prod:\n 'https://bswebapps.dhigroup.com/DHI.WebApps.ITServices/Pages/Home.html?pn=11817725',\n old:\n 'https://dhigroup.sharepoint.com/sites/wiki/SitePages/MIKE-Cloud---How-to-create-new-site.aspx'\n}\n\nexport function CreateInternalTenantButton() {\n const classes = useStyles()\n // const [environment, setEnvironment] = useState('')\n\n // const link = environment ? LINKS_MAP[environment] : LINKS_MAP['prod']\n const link = LINKS_MAP['old']\n\n // Commented out because it's not used in current release, after PO review we can uncomment it and adjust new links\n // useEffect(() => {\n // const getConfig = async () => {\n // const config = await fetchConfig()\n //\n // setEnvironment(config.environment)\n // }\n // getConfig().then()\n // }, [])\n\n return (\n \n \n \n \n )\n}\n","import React from 'react'\nimport { FormattedMessage } from 'react-intl'\nimport Button from '@material-ui/core/Button'\nimport AddOutlinedIcon from '@material-ui/icons/AddOutlined'\nimport { ButtonProps as MuiButtonProps } from '@material-ui/core/Button'\nimport { iconStyle, useStyles } from './iconStyles'\n\nconst CreateTenantButton = (buttonProps: MuiButtonProps) => {\n const classes = useStyles()\n return (\n \n )\n}\n\nexport default CreateTenantButton\n","import React, { useEffect } from 'react'\n\nimport { useOidcAccessToken } from '@axa-fr/react-oidc'\n\nimport { CreateInternalTenantButton } from '../buttons/CreateInternalTenantButton'\nimport CreateTenantButton from '../buttons/CreateTenantButton'\nimport IUserProfile from '../../model/IUserProfile'\nimport { IBillingInformation } from '../../apis/admin'\n\ntype Props = {\n tenants: Tenant[]\n user: IUserProfile\n onOpenCreateTenant: () => void\n}\n\ntype Tenant = {\n id: string\n name: string\n createdAt: string\n updatedAt: string\n billingInformation: IBillingInformation\n}\n\ntype HookProps = {\n user: IUserProfile\n tenants: Tenant[]\n}\n\ntype HookReturn = {\n canCreateTenants: boolean\n canCreateInternalTenants: boolean\n canCreateExternalTenants: boolean\n}\n\nconst InternalTenantBillingReferenceType = 'DHI'\nconst AdminRole = 'MIKE Cloud Administrator'\n\nconst useTenantButtons = ({ user, tenants }: HookProps): HookReturn => {\n const { accessTokenPayload } = useOidcAccessToken()\n\n const [isUserInternal, setIsUserInternal] = React.useState(false)\n const [isSiteInternal, setIsSiteInternal] = React.useState(false)\n const [isAdmin, setIsAdmin] = React.useState(false)\n\n const [canCreateTenants, setCanCreateTenants] = React.useState(false)\n const [\n canCreateInternalTenants,\n setCanCreateInternalTenants\n ] = React.useState(false)\n const [\n canCreateExternalTenants,\n setCanCreateExternalTenants\n ] = React.useState(false)\n\n // Internal user rules\n useEffect(() => {\n setIsUserInternal(user.email.endsWith('@dhigroup.com'))\n }, [user])\n\n // Internal site rules\n useEffect(() => {\n if (!user || !tenants) {\n setIsSiteInternal(false)\n\n return\n }\n\n const currentTenant = tenants.find(t => t.id === user.tenantId)\n\n if (!currentTenant) {\n setIsSiteInternal(false)\n\n return\n }\n\n const tenantType = currentTenant.billingInformation?.billingReferenceType\n\n setIsSiteInternal(tenantType === InternalTenantBillingReferenceType)\n }, [tenants, user])\n\n // External user admin rules\n useEffect(() => {\n if (!accessTokenPayload) {\n setIsAdmin(false)\n\n return\n }\n\n const roles = accessTokenPayload[\n 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role'\n ] as string[]\n\n if (!roles) {\n setIsAdmin(false)\n\n return\n }\n\n const isAdmin = roles.includes(AdminRole)\n\n setIsAdmin(isAdmin)\n }, [accessTokenPayload])\n\n // Tenant creation rules\n useEffect(() => {\n if (isSiteInternal && isUserInternal) {\n setCanCreateInternalTenants(true)\n setCanCreateExternalTenants(false)\n setCanCreateTenants(true)\n } else if (!isSiteInternal && isAdmin) {\n setCanCreateExternalTenants(true)\n setCanCreateInternalTenants(false)\n setCanCreateTenants(true)\n } else {\n setCanCreateInternalTenants(false)\n setCanCreateExternalTenants(false)\n setCanCreateTenants(false)\n }\n }, [isAdmin, isSiteInternal, isUserInternal])\n\n return {\n canCreateTenants,\n canCreateInternalTenants,\n canCreateExternalTenants\n }\n}\n\nexport const TenantButtons = ({ tenants, user, onOpenCreateTenant }: Props) => {\n const {\n canCreateTenants,\n canCreateInternalTenants,\n canCreateExternalTenants\n } = useTenantButtons({ user, tenants })\n\n if (!canCreateTenants) return null\n\n if (canCreateInternalTenants) {\n return \n }\n\n if (canCreateExternalTenants) {\n return \n }\n\n return null\n}\n","import AppPropTypes from '../../shared/appPropTypes'\nimport CssBaseline from '@material-ui/core/CssBaseline'\nimport Fade from '@material-ui/core/Fade'\nimport MikeLogin from '../../components/mike-login/MikeLogin'\nimport IAMNav from '../../components/IAMNav'\nimport MikeSupportMenuContainer from '@mike/mike-shared-frontend/mike-support'\nimport { ReactComponent as DataAdmin } from '@mike/mike-shared-frontend/media/icons/DataAdmin'\nimport MikeTopbar from '@mike/mike-shared-frontend/mike-topbar/mike-topbar'\nimport ProgressSpinner from '@mike/mike-shared-frontend/mike-topbar-progress-spinner'\nimport MikeNavWarnBanner from '@mike/mike-shared-frontend/mike-nav-warn-banner/MikeNavWarnBanner'\nimport MikeSlidingPanel from '@mike/mike-shared-frontend/mike-sliding-panel'\nimport PropTypes from 'prop-types'\nimport React, { CSSProperties, Fragment, useState } from 'react'\nimport { useIntl } from 'react-intl'\nimport { compose } from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport { Typography } from '@material-ui/core'\nimport CreateTenantForm from '../../components/CreateTenantForm'\n\nimport Grid from '@material-ui/core/Grid'\nimport ChangeSiteButton from '../buttons/ChangeSiteButton'\nimport MikeCloudApps from '../MikeCloudApps'\nimport CreditsInfo from '../Credits/CreditsToolbar/CreditsInfo'\nimport Menu from '@material-ui/core/Menu'\nimport { SiteOwnersDialogButton } from './SiteOwnersDialogButton'\nimport { TenantButtons } from './TenantButtons'\nimport { useTypedSelector } from '../../reducers'\n\nconst styles = theme => ({\n root: {\n display: 'flex'\n },\n appBarSpacer: {\n minHeight: theme.spacing(5),\n backgroundColor: theme.palette.lightGrey.main\n },\n content: {\n flexGrow: 1,\n height: '100vh',\n overflow: 'auto',\n paddingBottom: theme.spacing(3),\n paddingLeft: theme.spacing(0),\n paddingRight: theme.spacing(0),\n paddingTop: theme.spacing(3),\n backgroundColor: theme.palette.lightGrey.main\n },\n header: {\n paddingLeft: theme.spacing(4),\n paddingTop: theme.spacing(5),\n paddingBottom: theme.spacing(5),\n borderBottom: '2px solid ' + theme.palette.mediumGrey.main,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-end'\n },\n tenantContainer: {\n display: 'flex',\n alignItems: 'flex-end',\n width: '33vw'\n },\n tenantSelect: {\n width: '15vw'\n },\n tenantButton: {\n backgroundColor: theme.palette.lightGrey.main,\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1)\n },\n placeHolder: {\n backgroundColor: theme.palette.lightGrey.main,\n minHeight: theme.spacing(1.5)\n },\n placeSelectTop: {\n backgroundColor: theme.palette.lightGrey.main,\n minHeight: theme.spacing(0.5)\n },\n placeSelectBottom: {\n backgroundColor: theme.palette.lightGrey.main,\n minHeight: theme.spacing(1)\n },\n headerRightPlaceHolder: {\n minWidth: '33vw'\n },\n iamNav: {\n width: '33vw',\n backgroundColor: theme.palette.lightGrey.main\n },\n actions: {\n display: 'flex',\n '& div': {\n '& svg': {\n fill: 'grey'\n }\n }\n },\n creditsItem: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n color: theme.palette.primary.main,\n cursor: 'pointer'\n },\n creditsText: {\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n color: theme.palette.secondary.main\n },\n rightActionButtons: {\n display: 'flex',\n justifyContent: 'right',\n marginRight: '32px'\n },\n switchTenantButton: {\n marginRight: 20\n }\n})\n\nconst APPLICATION_TYPE = 'Application'\n\nconst APP_TO_FILTER = [\n 'Company Subscription (giving access to Cloud Admin)',\n 'Flood Screener',\n 'Global Seas'\n]\n\nconst AppLayout = ({\n children,\n classes,\n support,\n tutorial,\n progressItems,\n tenants,\n openCreateTenant,\n onCreateTenantCloseClick,\n onCreateTenant,\n onOpenCreateTenant,\n isAdmin,\n loadingApps,\n features,\n currentProject,\n user\n}) => {\n const [menuAnchorEl, setMenuAnchorEl] = useState(null)\n\n const isMenuOpen = Boolean(menuAnchorEl!)\n\n const handleOpenMenuClick = (event: React.MouseEvent) => {\n setMenuAnchorEl(event.currentTarget)\n }\n\n const handleMenuClose = () => {\n setMenuAnchorEl(null)\n }\n\n const intl = useIntl()\n\n const apps = features.filter(feat => {\n return feat.type === APPLICATION_TYPE && !APP_TO_FILTER.includes(feat.name)\n })\n\n const tenantName = useTypedSelector((state) => {\n const foundTenant = state.tenant.tenants.find((tenant) => tenant.id === state.auth.user?.tenantId);\n return foundTenant?.name || ''\n })\n\n const mailConfig = {\n to: support.toEmail,\n subject: support.subject,\n body: support.body\n }\n const documentationConfig = { href: tutorial.link, target: '_blank' }\n const documentationLibraryConfig = {\n href: tutorial.linkLibrary,\n target: '_blank',\n label: 'Documentation Library'\n }\n const platformDocumentationConfig = {\n href: tutorial.platformDocumentation,\n target: '_blank',\n label: 'Platform Documentation'\n }\n\n const portalSupportConfig = {\n href: support.portalLink,\n target: '_blank',\n label: 'Support portal'\n }\n\n const logoutCallback = React.useCallback(() => {\n const _paq = (window['_paq'] = window['_paq'] || [])\n _paq.push(['resetUserId'])\n _paq.push(['appendToTrackingUrl', 'new_visit=1'])\n _paq.push(['trackPageView'])\n _paq.push(['appendToTrackingUrl', ''])\n }, [])\n\n const loginProps = () => ({\n logInLabel: 'Log in',\n logOutLabel: 'Log out',\n logoutClickCallback: logoutCallback\n })\n\n const topBarProps = {\n appIcon: ,\n appTitle: 'MIKE Cloud Admin',\n loginButton: ,\n supportButton: (\n \n ),\n actionsArea: (\n
\n {progressItems && }\n
\n ),\n homeButton: null\n }\n\n const gridStyles: CSSProperties = {\n paddingBottom: 20,\n paddingTop: 20\n }\n\n const pageHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'column',\n marginLeft: '40px'\n }\n\n const menuSpanStyle: CSSProperties = {\n textDecoration: 'underline',\n cursor: 'pointer',\n color: '#46b1e1'\n }\n\n const menuStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n padding: '1rem'\n }\n\n return (\n <>\n \n\n \n
\n \n\n
\n
\n \n\n \n \n {tenantName}\n\n \n Manage Sites\n \n\n \n
\n {tenants?.length > 1 && (\n \n )}\n\n \n\n \n
\n \n
\n \n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n {user && user.tenantId ? (\n \n \n
\n ) : null}\n\n \n
\n \n
\n \n \n \n {children}\n
\n
\n
\n \n )\n}\n\nAppLayout.propTypes = {\n children: PropTypes.node.isRequired,\n classes: PropTypes.object.isRequired,\n loginConfig: AppPropTypes.loginConfig.isRequired,\n support: AppPropTypes.support.isRequired,\n tutorial: AppPropTypes.tutorial.isRequired,\n user: AppPropTypes.user,\n appNotifications: PropTypes.array.isRequired,\n progressItems: PropTypes.array,\n loadingTenants: PropTypes.bool.isRequired,\n tenants: PropTypes.array,\n tenantId: PropTypes.string,\n openCreateTenant: PropTypes.bool,\n onCreateTenantCloseClick: PropTypes.func.isRequired,\n onCreateTenant: PropTypes.func.isRequired,\n onOpenCreateTenant: PropTypes.func.isRequired,\n isAdmin: PropTypes.bool,\n isBackOffice: PropTypes.bool,\n loadingApps: PropTypes.bool,\n apps: PropTypes.object,\n project: PropTypes.object,\n features: PropTypes.array,\n currentProject: PropTypes.object\n}\n\nconst enhance = compose(withStyles(styles))\n\nexport default enhance(AppLayout)\n","import React from 'react'\nimport { css } from 'emotion'\nimport Typography from '@material-ui/core/Typography'\nimport theme from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\n\nconst paddingStyle = css`\n padding: ${theme.spacing(1)}px;\n`\n\nconst PageNotFound = () => (\n \n Page Not Found!\n \n)\n\nexport default PageNotFound\n","import React, { useCallback } from 'react'\nimport PropTypes from 'prop-types'\n\nimport SearchIcon from '@material-ui/icons/Search'\nimport ClearIcon from '@material-ui/icons/Clear'\nimport Input from '@material-ui/core/Input'\nimport InputAdornment from '@material-ui/core/InputAdornment'\nimport IconButton from '@material-ui/core/IconButton'\n\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n searchField: {\n padding: theme.spacing(1 / 4, 2),\n width: 320,\n height: 40,\n backgroundColor: theme.palette.background.paper,\n borderRadius: '25px',\n border: '1px solid ' + theme.palette.devider.default\n }\n })\n)\n\nconst useTextChange = onTextChange => [\n event => onTextChange(event.target.value),\n () => onTextChange('')\n]\n\nconst SearchInput = ({ text, onTextChange, ...inputProps }) => {\n const classes = useStyles()\n const [handleTextChange, resetTextChange] = useTextChange(onTextChange)\n\n return (\n \n \n \n }\n endAdornment={\n text && (\n \n \n \n \n \n )\n }\n />\n )\n}\nSearchInput.propTypes = {\n text: PropTypes.string,\n onTextChange: PropTypes.func\n}\n\nexport default SearchInput\n","import React from 'react'\nimport { FormattedMessage } from 'react-intl'\nimport Button from '@material-ui/core/Button'\nimport { ReactComponent as Refresh } from '@mike/mike-shared-frontend/media/icons/Refresh'\nimport { ButtonProps as MuiButtonProps } from '@material-ui/core/Button'\nimport messages from '../../shared/messages'\nimport { iconSecondaryStyle, useStyles } from './iconStyles'\n\nconst RefreshButton = (buttonProps: MuiButtonProps) => {\n const classes = useStyles()\n return (\n \n )\n}\n\nexport default RefreshButton\n","import React from 'react'\nimport { FormattedMessage } from 'react-intl'\nimport { ReactComponent as Delete } from '@mike/mike-shared-frontend/media/icons/Delete'\nimport Button from '@material-ui/core/Button'\nimport { ButtonProps as MuiButtonProps } from '@material-ui/core/Button'\nimport messages from '../../shared/messages'\n\nimport { iconSecondaryStyle, useStyles } from './iconStyles'\n\nconst DeleteButton = (buttonProps: MuiButtonProps) => {\n const classes = useStyles()\n return (\n \n )\n}\n\nexport default DeleteButton\n","import { orderBy } from 'lodash'\n\nexport const getSortedPageRows = props => {\n const { data, rowsPerPage, _order, _orderBy, page } = props\n const sortedData = orderBy(data, _orderBy, _order)\n return getPageRows(page, rowsPerPage, sortedData)\n}\n\nexport const compareValues = (a, b) => (b < a ? -1 : b > a ? 1 : 0)\n\nconst getPageRows = (page, rowsPerPage, data) =>\n data.slice(page * rowsPerPage, (page + 1) * rowsPerPage)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\nimport { compose, pure } from 'recompose'\n\nimport { withStyles } from '@material-ui/core/styles'\n\nconst LinkRenderer = (configure, options = {}) => {\n return function renderLink(value, item) {\n const { text, to, icon } = configure(value, item)\n\n return \n }\n}\n\nexport default LinkRenderer\n\nconst cellLinkStyle = theme => ({\n root: {\n color: theme.palette.text.primary,\n textDecoration: 'none',\n fontSize: 14,\n '&>span:hover': {\n textDecoration: 'underline'\n },\n '&>svg': {\n verticalAlign: 'middle',\n marginRight: theme.spacing(1)\n }\n }\n})\n\nconst BaseCellLink = ({ style, classes, to, text, icon }) => (\n event.stopPropagation()}\n >\n {icon && React.cloneElement(icon)}\n {text}\n \n)\nBaseCellLink.propTypes = {\n classes: PropTypes.object.isRequired,\n to: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n icon: PropTypes.node,\n style: PropTypes.object\n}\n\nconst CellLink = compose(withStyles(cellLinkStyle), pure)(BaseCellLink)\n","/* eslint-disable import/no-anonymous-default-export */\nimport React from 'react'\n\nimport filesize from 'filesize'\nimport isNil from 'lodash/isNil'\n\nimport Typography from '@material-ui/core/Typography'\nimport { mikePalette } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { ReactComponent as Projects } from '@mike/mike-shared-frontend/media/icons/Projects'\nimport { ReactComponent as Undo } from '@mike/mike-shared-frontend/media/icons/Undo'\nimport { ReactComponent as Delete } from '@mike/mike-shared-frontend/media/icons/Delete'\nimport { ReactComponent as Edit } from '@mike/mike-shared-frontend/media/icons/Edit'\nimport { ReactComponent as Download } from '@mike/mike-shared-frontend/media/icons/Download'\nimport { ReactComponent as ConvertData } from '@mike/mike-shared-frontend/media/icons/ConvertData'\nimport { isDataset } from './../../../helpers/projectContent'\nimport { css } from 'emotion'\n\nimport link from './Link'\n\nexport const iconStyle = (disabled = false) => {\n return css`\n path {\n fill: ${disabled ? mikePalette.primary.light : mikePalette.primary.main};\n }\n `\n}\n\nconst iconActionStyle = (disabled = false) => {\n return css`\n path {\n fill: ${disabled\n ? mikePalette.secondary.light\n : mikePalette.secondary.main};\n }\n `\n}\n\nexport const actionStyle = (disabled = false) => {\n return css`\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n color: ${disabled\n ? mikePalette.primary.light\n : mikePalette.primary.default};\n background-color: ${mikePalette.mediumGrey.light};\n cursor: ${disabled ? 'no-drop' : 'pointer'};\n padding-bottom: 0px;\n padding-top: 0px;\n padding-right: 4px;\n `\n}\n\nconst renderEdit = () => {\n return (\n
\n \n Edit\n
\n )\n}\n\nconst renderDelete = () => {\n return (\n
\n \n Delete\n
\n )\n}\n\nconst renderEditProject = row => {\n const canEdit =\n row.capabilities &&\n (row.capabilities.canEdit ||\n row.capabilities.canEditAccessLevel ||\n row.capabilities.canGrantAccess)\n\n return (\n
\n \n Edit\n
\n )\n}\n\nconst renderEditItem = (row, parentCapabilities) => {\n if (isDataset(row)) {\n const canEdit = parentCapabilities.canUpdateContent\n\n return (\n
\n \n Edit\n
\n )\n } else {\n return null\n }\n}\n\nconst renderDownloadDataset = (row, parentCapabilities) => {\n if (isDataset(row)) {\n const canDownload = parentCapabilities.canReadContent\n\n return (\n
\n \n Download\n
\n )\n } else {\n return null\n }\n}\n\nconst renderDeleteItem = (row, parentCapabilities) => {\n const canDelete = isDataset(row)\n ? parentCapabilities.canDeleteContent\n : row.capabilities && row.capabilities.canDelete\n\n return (\n
\n \n Delete\n
\n )\n}\n\nconst renderDeleteProject = row => {\n const canDelete = row.capabilities && row.capabilities.canDelete\n\n return (\n
\n \n Delete\n
\n )\n}\n\nconst renderConvertDataset = (row, parentCapabilities) => {\n if (isDataset(row)) {\n const canConvert = parentCapabilities.canCreateContent\n return (\n
\n \n Convert\n
\n )\n } else {\n return null\n }\n}\n\nconst renderPath = row => {\n const path = row.path\n const names = path.map(p => {\n return p.name\n })\n const backgroundColor = row.canRestore\n ? mikePalette.mediumGrey.dark\n : mikePalette.mediumGrey.light\n const cursor = row.canRestore ? 'pointer' : 'no-drop'\n\n const originalLocation = 'Projects > ' + names.join(' > ')\n return (\n
\n \n Original location\n {originalLocation}\n
\n \n \n Restore\n \n \n )\n}\n\nconst size = (multi = 1) => value =>\n isNil(value) ? '' : value === 0 ? '< 1KB' : filesize(value * multi)\n\nconst makeProjectNameLink = (\n uri,\n options = {\n style: {\n whiteSpace: 'nowrap'\n }\n }\n) =>\n link(\n (name, project) => ({\n text: name,\n to: `${uri}/${project.id}`,\n icon: \n }),\n options\n )\n\nconst makeProjectContentNameLink = (\n uri,\n options = {\n style: {\n whiteSpace: 'nowrap'\n }\n }\n) =>\n link(\n (name, project) => ({\n text: name,\n to: `${uri}/${project.id}`\n }),\n options\n )\n\nconst makeProjectNotificationLink = (\n uri,\n options = {\n style: {\n whiteSpace: 'nowrap',\n fontWeight: 'bold'\n }\n }\n) =>\n link(\n (name, project) => ({\n text: name,\n to: `${uri}/${project.id}`\n }),\n options\n )\n\nexport default {\n iconActionStyle,\n renderEdit,\n renderDelete,\n renderEditItem,\n renderDeleteItem,\n renderEditProject,\n renderDeleteProject,\n renderConvertDataset,\n renderDownloadDataset,\n renderPath,\n size,\n link,\n makeProjectNameLink,\n makeProjectContentNameLink,\n makeProjectNotificationLink\n}\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { ReactComponent as UploadCloud } from '@mike/mike-shared-frontend/media/icons/UploadCloud'\nimport Renders from './renders'\nimport {\n makeStyles,\n createStyles,\n Typography,\n TableBody,\n TableRow,\n TableCell\n} from '@material-ui/core'\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n dragArea: (props: IProps) => ({\n height: props.height && props.height,\n backgroundImage: props.dragOver\n ? ''\n : 'repeating-linear-gradient(to right, ' +\n theme.palette.secondary.main +\n ' 0%, ' +\n theme.palette.secondary.main +\n ' 50%, transparent 50%, transparent 100%), repeating-linear-gradient(to right, ' +\n theme.palette.secondary.main +\n ' 0%, ' +\n theme.palette.secondary.main +\n ' 50%, transparent 50%, transparent 100%), repeating-linear-gradient(to bottom, ' +\n theme.palette.secondary.main +\n ' 0%, ' +\n theme.palette.secondary.main +\n ' 50%, transparent 50%, transparent 100%), repeating-linear-gradient(to bottom, ' +\n theme.palette.secondary.main +\n ' 0%, ' +\n theme.palette.secondary.main +\n ' 50%, transparent 50%, transparent 100%)',\n backgroundPosition: props.dragOver\n ? ''\n : 'left top, left bottom, left top, right top',\n backgroundRepeat: props.dragOver\n ? ''\n : 'repeat-x, repeat-x, repeat-y, repeat-y',\n backgroundSize: props.dragOver\n ? ''\n : '20px 3px, 20px 3px, 3px 20px, 3px 20px',\n borderTop: props.dragOver\n ? '3px solid ' + theme.palette.secondary.main\n : 'none',\n borderBottom: props.dragOver\n ? '3px solid ' + theme.palette.secondary.main\n : 'none',\n borderLeft: props.dragOver\n ? '3px solid ' + theme.palette.secondary.main\n : 'none',\n backgroundColor: !props.dragOver\n ? theme.palette.background.paper\n : theme.palette.mediumGrey && theme.palette.mediumGrey.main,\n opacity: props.dragOver ? 0.8 : 1\n }),\n dragLabel: {\n color: theme.palette.secondary.main\n },\n firstColumn: {\n paddingLeft: theme.spacing(4)\n },\n lastColumn: {\n paddingRight: theme.spacing(4)\n },\n dragIconLabelContainer: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n }\n })\n})\n\ninterface IProps {\n columns: Array\n dragOver: boolean\n label?: string\n height?: string\n}\n\nconst TableBodyDragAndDropArea = (props: IProps) => {\n const classes = useStyles(props)\n const { columns, label = 'Drop to upload' } = props\n\n const [columsMid, setColumsMid] = React.useState(0)\n\n React.useEffect(() => {\n setColumsMid(Math.floor(columns.length / 2) - 1)\n }, [columns])\n\n return (\n \n \n {columns.map((_head, index) => {\n return (\n \n {index === columsMid && (\n
\n \n \n {label}\n \n
\n )}\n \n )\n })}\n
\n
\n )\n}\n\nexport default TableBodyDragAndDropArea\n","import React, { Suspense, useRef, useMemo } from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, withState, withHandlers, defaultProps } from 'recompose'\nimport { withRouter } from 'react-router-dom'\nimport find from 'lodash/find'\nimport findIndex from 'lodash/findIndex'\nimport get from 'lodash/fp/get'\nimport isEmpty from 'lodash/isEmpty'\nimport isFunction from 'lodash/isFunction'\nimport classNames from 'classnames'\nimport { withStyles } from '@material-ui/core/styles'\nimport IconButton from '@material-ui/core/IconButton'\nimport Table from '@material-ui/core/Table'\nimport TableBody from '@material-ui/core/TableBody'\nimport TableCell from '@material-ui/core/TableCell'\nimport TableHead from '@material-ui/core/TableHead'\nimport TablePagination from '@material-ui/core/TablePagination'\nimport TableRow from '@material-ui/core/TableRow'\nimport TableSortLabel from '@material-ui/core/TableSortLabel'\nimport Checkbox from '@material-ui/core/Checkbox'\nimport Paper from '@material-ui/core/Paper'\nimport Skeleton from '@material-ui/lab/Skeleton'\nimport MoreVert from '@material-ui/icons/MoreVert'\nimport Menu from '@material-ui/core/Menu'\nimport MenuItem from '@material-ui/core/MenuItem'\nimport PopupState, { bindTrigger, bindMenu } from 'material-ui-popup-state'\nimport { MIKE_COLORS } from '@mike/mike-shared-frontend/mike-shared-styles/mike-colors'\nimport { getSortedPageRows } from './support'\nimport TableBodyDragAndDropArea from './TableBodyDragAndDropArea'\n\nconst styles = theme => {\n return {\n root: {\n width: '100%',\n position: 'relative'\n },\n table: {\n width: '100%'\n },\n stickyHeader: props => ({\n position: 'sticky',\n top: props.topOffset,\n zIndex: 1,\n whiteSpace: 'nowrap',\n backgroundColor: props.headerColor || 'transparent'\n }),\n stickyActionHeader: props => ({\n position: 'sticky',\n top: props.topOffset,\n width: 40,\n zIndex: 1,\n backgroundColor: props.headerColor || 'transparent'\n }),\n tableHeader: {\n zIndex: 1\n },\n dragHeader: {\n borderBottom: 'none'\n },\n dragArea: {\n border: '3px solid ' + theme.palette.secondary.main\n },\n dragOverColor: {\n backgroundColor: theme.palette.mediumGrey.main,\n opacity: 0.8\n },\n actionButton: {\n width: 40,\n paddingRight: theme.spacing(4)\n },\n firstColumn: {\n paddingLeft: theme.spacing(4)\n }\n }\n}\n\nconst DataTable = props => {\n const {\n headerColor,\n actions,\n classes,\n loading,\n columns,\n idField,\n rowsPerPage,\n rowsPerPageOptions,\n hasSelection,\n selectedRows = [],\n data = [],\n page,\n totalCount,\n notSortableColumns,\n // eslint-disable-next-line\n topOffset,\n // eslint-disable-next-line\n onChangePage,\n // eslint-disable-next-line\n onChangeRowsPerPage,\n // eslint-disable-next-line\n onColumnClick,\n // eslint-disable-next-line\n onHandleRequestSort,\n // eslint-disable-next-line\n onSelectionChange,\n hasMorePages,\n isSelected,\n processDroppedFiles,\n actionsPopupStateChange,\n _order,\n _orderBy,\n _handleRequestSort,\n _isSelected,\n _handleActionClick,\n _handleClick,\n _handleColumnClick,\n _handleChangePage,\n _handleChangeRowsPerPage,\n // eslint-disable-next-line react/prop-types\n _rowsPerPage\n } = props\n\n // If totalCount is available or hasMorePages is true, pagination is done server side\n const pageRows = totalCount || hasMorePages ? data : getSortedPageRows(props)\n const selectedRowCount = useMemo(() => {\n if (isSelected) {\n return pageRows.reduce((count, row) => {\n return count + (isSelected(row) ? 1 : 0)\n }, 0)\n }\n return selectedRows.length\n }, [isSelected, selectedRows.length, pageRows])\n const allPageRowsSelected =\n totalCount > 0 && totalCount - selectedRowCount === 0\n const partiallyPageRowsSelected = selectedRowCount > 0 && !allPageRowsSelected\n\n const manyRowsSelected = !isEmpty(selectedRows) && selectedRows.length > 1\n const dataCount = totalCount > 0 ? totalCount : data ? data.length : 0\n\n const dragEnterCounter = useRef(0)\n\n const [dragOver, setDragOver] = React.useState(false)\n const handleDrop = React.useCallback(\n event => {\n event.stopPropagation()\n event.preventDefault()\n if (processDroppedFiles) {\n processDroppedFiles(event.dataTransfer.files)\n dragEnterCounter.current = 0\n setDragOver(false)\n }\n },\n [processDroppedFiles]\n )\n\n const handleDragOver = React.useCallback(event => {\n event.stopPropagation()\n event.preventDefault()\n }, [])\n\n const handleDragLeave = React.useCallback(() => {\n if (processDroppedFiles) {\n dragEnterCounter.current = dragEnterCounter.current - 1\n if (dragEnterCounter === 0) {\n setDragOver(false)\n }\n }\n }, [dragEnterCounter, processDroppedFiles])\n\n const handleDragEnter = React.useCallback(\n event => {\n event.stopPropagation()\n event.preventDefault()\n if (processDroppedFiles) {\n dragEnterCounter.current = dragEnterCounter.current + 1\n setDragOver(true)\n }\n },\n [dragEnterCounter, processDroppedFiles]\n )\n\n const emptyTableWithDragFunctionaly =\n processDroppedFiles && (dataCount === 0 || dragOver)\n\n const tableHeadCheckboxChange = event => {\n const newSelected =\n event.target.checked && !(selectedRowCount === rowsPerPage)\n ? getSortedPageRows(props)\n : []\n onSelectionChange(newSelected)\n }\n\n return (\n \n \n !item.hide || item.hide === false)}\n noBottomBorder={emptyTableWithDragFunctionaly}\n notSortableColumns={notSortableColumns}\n onRequestSort={_handleRequestSort}\n onTableHeadCheckboxChange={tableHeadCheckboxChange}\n order={_order}\n orderBy={_orderBy}\n partiallyPageRowsSelected={partiallyPageRowsSelected}\n hasSelection={hasSelection}\n />\n\n {loading ? (\n \n ) : processDroppedFiles && dataCount === 0 ? (\n \n ) : (\n \n {pageRows.map(item => {\n const rowKey = getIdFieldValue(item, idField)\n const isItemSelected = isSelected\n ? isSelected(item)\n : _isSelected(item)\n\n return (\n \n {hasSelection !== false && (\n _handleClick(event, item)}\n >\n \n \n )}\n\n {columns\n .filter(item => !item.hide || item.hide === false)\n .map((col, index) => {\n const value = getValue(col, item, data)\n const cellKey = getCellKey(col, item)\n const render = getRender(col)\n\n return (\n _handleColumnClick(event, item)}\n >\n {render(value, item, data)}\n \n )\n })}\n {actions ? (\n _handleActionClick(event)}\n >\n \n \n \n \n ) : null}\n \n )\n })}\n \n )}\n \n {(dataCount > 10 || totalCount === -1) && (\n \n )}\n \n )\n}\n\nexport const columnPropType = PropTypes.exact({\n field: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\n label: PropTypes.string.isRequired,\n numeric: PropTypes.bool,\n hide: PropTypes.bool,\n disablePadding: PropTypes.bool,\n render: PropTypes.func,\n comparator: PropTypes.func,\n className: PropTypes.any\n})\n\nDataTable.propTypes = {\n headerColor: PropTypes.string,\n actions: PropTypes.array,\n classes: PropTypes.object.isRequired,\n loading: PropTypes.bool,\n columns: PropTypes.arrayOf(columnPropType).isRequired,\n idField: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\n rowsPerPageOptions: PropTypes.arrayOf(PropTypes.number),\n rowsPerPage: PropTypes.number,\n isSelected: PropTypes.func,\n data: PropTypes.array,\n hasSelection: PropTypes.bool,\n selectedRows: PropTypes.array,\n totalCount: PropTypes.number,\n onChangeRowsPerPage: PropTypes.func,\n onColumnClick: PropTypes.func,\n onHandleRequestSort: PropTypes.func,\n onPageChange: PropTypes.func,\n onSelectionChange: PropTypes.func,\n page: PropTypes.number,\n notSortableColumns: PropTypes.array,\n hasMorePages: PropTypes.bool,\n processDroppedFiles: PropTypes.func,\n actionsPopupStateChange: PropTypes.func,\n _order: PropTypes.arrayOf(PropTypes.string),\n _orderBy: PropTypes.array,\n _handleRequestSort: PropTypes.func.isRequired,\n _isSelected: PropTypes.func.isRequired,\n _handleActionClick: PropTypes.func.isRequired,\n _handleColumnClick: PropTypes.func.isRequired,\n _handleClick: PropTypes.func.isRequired,\n _handleChangePage: PropTypes.func.isRequired,\n _handleChangeRowsPerPage: PropTypes.func.isRequired\n}\n\nconst getValue = (col, item, data) =>\n isFunction(col.value)\n ? col.value(item, data)\n : get(getCellKey(col, item))(item)\n\nconst getCellKey = (col, item) =>\n isFunction(col.field) ? col.field(item) : col.field\n\nconst getRender = col => col.render || (value => value)\n\nconst EnhancedTableHead = ({\n actions,\n allPageRowsSelected,\n classes,\n columns,\n noBottomBorder,\n notSortableColumns,\n onRequestSort,\n onTableHeadCheckboxChange,\n order,\n orderBy,\n partiallyPageRowsSelected,\n hasSelection\n}) => (\n \n \n {hasSelection !== false && (\n \n \n \n )}\n\n {columns.map((col, index) => {\n return (\n \n {!notSortableColumns.includes(col.field) ? (\n \n onRequestSort(\n event,\n col.comparator ? col.comparator : col.field\n )\n }\n >\n {col.label}\n \n ) : (\n col.label\n )}\n \n )\n })}\n {actions ? (\n \n ) : null}\n \n \n)\nEnhancedTableHead.propTypes = {\n actions: PropTypes.array,\n allPageRowsSelected: PropTypes.bool.isRequired,\n classes: PropTypes.object.isRequired,\n columns: PropTypes.arrayOf(columnPropType).isRequired,\n noBottomBorder: PropTypes.bool,\n notSortableColumns: PropTypes.array,\n onRequestSort: PropTypes.func.isRequired,\n onTableHeadCheckboxChange: PropTypes.func.isRequired,\n order: PropTypes.arrayOf(PropTypes.string),\n orderBy: PropTypes.array,\n partiallyPageRowsSelected: PropTypes.bool.isRequired,\n hasSelection: PropTypes.bool\n}\n\nconst TableBodySkeleton = ({ skeletonRows, skeletonHead }) => (\n \n {skeletonRows.map(ind => {\n return (\n \n {skeletonHead.map((_head, index) => {\n return (\n \n \n \n )\n })}\n \n \n \n \n )\n })}\n \n)\nTableBodySkeleton.propTypes = {\n skeletonRows: PropTypes.array.isRequired,\n skeletonHead: PropTypes.array.isRequired\n}\n\nconst lazyLoadIconByName = name => {\n return React.lazy(() =>\n import(`@mike/mike-shared-frontend/media/icons/${name.name}`).then(\n module => {\n return {\n default: module.ReactComponent\n }\n }\n )\n )\n}\n\nconst ActionIcon = name => {\n const Icon = lazyLoadIconByName(name)\n return (\n <>\n \n \n \n \n )\n}\n\nconst Actions = ({ row, actions, actionsPopupStateChange }) => (\n \n {popupState => {\n actionsPopupStateChange && actionsPopupStateChange(popupState.isOpen, row)\n return (\n \n \n \n {actions\n .map((a, index) => {\n const renderedValue = a.render\n ? a.render(row, a.parentCapabilities)\n : a.name\n if (renderedValue) {\n return (\n {\n e.preventDefault()\n popupState.close()\n a.callBack(row, a.name)\n }}\n disableGutters={a.disableGutters}\n >\n {a.icon ? : ''}\n {renderedValue}\n \n )\n }\n return null\n })\n .filter(val => val !== null)}\n \n \n )\n }}\n \n)\nActions.propTypes = {\n row: PropTypes.object.isRequired,\n actions: PropTypes.array.isRequired,\n actionsPopupStateChange: PropTypes.func\n}\n\nconst getPadding = col => (col.disablePadding ? 'none' : 'normal')\n\nconst capitalize = s => {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nconst getIdFieldValue = (item, idField) => {\n if (typeof idField === 'function') {\n return idField(item)\n }\n return item[idField]\n}\n\nconst enhance = compose(\n withRouter,\n\n withStyles(styles),\n\n defaultProps({\n loading: false,\n rowsPerPageOptions: [10, 25, 50],\n data: [],\n notSortableColumns: []\n }),\n\n withState('_order', '_setOrder', props =>\n props._order ? props._order : ['asc']\n ),\n withState('_orderBy', '_setOrderBy', props =>\n props._orderBy\n ? props._orderBy\n : [\n props.columns[0].comparator\n ? props.columns[0].comparator\n : props.columns[0].field\n ]\n ),\n withState('_rowsPerPage', '_setRowsPerPage', props =>\n props._rowsPerPage ? props._rowsPerPage : 25\n ),\n withState('_page', '_setPage', props => (props.page ? props.page : 0)),\n\n withHandlers({\n _isSelected: ({ selectedRows, idField }) => item => {\n const itemId = getIdFieldValue(item, idField)\n\n return Boolean(\n find(\n selectedRows,\n rowItem => getIdFieldValue(rowItem, idField) === itemId\n )\n )\n },\n\n _handleRequestSort: props => (_event, property) => {\n const {\n _orderBy,\n _order,\n _setOrder,\n _setOrderBy,\n onHandleRequestSort\n } = props\n\n const order =\n _orderBy.includes(property) &&\n _order[_orderBy.indexOf(property)] === 'desc'\n ? 'asc'\n : 'desc'\n\n _setOrder([order])\n\n _setOrderBy([property])\n\n onHandleRequestSort && onHandleRequestSort(property, order)\n },\n\n _handleActionClick: () => _event => {\n _event.stopPropagation()\n },\n\n _handleColumnClick: props => (_event, item) => {\n const { onColumnClick } = props\n _event.stopPropagation()\n onColumnClick && onColumnClick(item)\n },\n\n _handleClick: props => (_event, item) => {\n const { onSelectionChange, selectedRows, idField } = props\n\n const itemId = getIdFieldValue(item, idField)\n\n const selectedIndex = findIndex(\n selectedRows,\n rowItem => getIdFieldValue(rowItem, idField) === itemId\n )\n\n let newSelected = []\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(selectedRows, item)\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(selectedRows.slice(1))\n } else if (selectedIndex === selectedRows.length - 1) {\n newSelected = newSelected.concat(selectedRows.slice(0, -1))\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(\n selectedRows.slice(0, selectedIndex),\n selectedRows.slice(selectedIndex + 1)\n )\n }\n\n onSelectionChange(newSelected)\n },\n\n _handleChangePage: props => (_event, page) => {\n const { onChangePage } = props\n onChangePage\n ? onChangePage(\n page,\n capitalize(props._orderBy),\n capitalize(props._order[0])\n )\n : props._setPage(page)\n },\n\n _handleChangeRowsPerPage: props => event => {\n const { onChangeRowsPerPage } = props\n onChangeRowsPerPage &&\n onChangeRowsPerPage(\n event.target.value,\n capitalize(props._orderBy),\n capitalize(props._order[0])\n )\n\n props._setRowsPerPage(event.target.value)\n }\n })\n)\n\nexport default enhance(DataTable)\n","// import MikeTooltip from '@mike/mike-shared-frontend/mike-tooltip/MikeTooltip'\n\nimport React from 'react'\nimport messages from '../../shared/messages'\nimport { ReactComponent as Users } from '@mike/mike-shared-frontend/media/icons/Users'\nimport { ReactComponent as User } from '@mike/mike-shared-frontend/media/icons/User'\n\nimport { Tabs, Tab } from '@material-ui/core'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport { useIntl } from 'react-intl'\nimport { useLocation } from 'react-router-dom'\nimport { LinkTab } from '../AppNav'\nimport { ReactComponent as Apps } from '@mike/mike-shared-frontend/media/icons/Apps'\n\nconst useAppNavStyles = makeStyles(theme =>\n createStyles({\n tabsIndicator: {\n height: 3\n },\n hiddenTabRoot: {\n minWidth: 0,\n padding: 0,\n margin: 0,\n minHeight: 48\n },\n root: {\n borderBottom: '1px solid' + theme.palette.grey[300],\n paddingLeft: '40px',\n marginBottom: '20px'\n },\n activeLabel: {\n fontWeight: 'bold',\n color: theme.palette.secondary.main\n },\n svg: {\n filter: 'invert(0.5) sepia(1) saturate(5) hue-rotate(175deg)'\n }\n })\n)\n\nconst UsersNav = () => {\n const intl = useIntl()\n const classes = useAppNavStyles()\n\n function usePath() {\n return useLocation().pathname\n }\n\n let currentPath = usePath()\n\n let activeTab\n\n switch (currentPath) {\n case '/site-access/users' || '/site-access':\n activeTab = 1\n break\n case '/site-access/api':\n activeTab = 2\n break\n case '/site-access/applications':\n activeTab = 3\n break\n case '/site-access/groups':\n activeTab = 4\n break\n default:\n activeTab = 0\n }\n return (\n \n \n \n {intl.formatMessage(messages.tenantUsers)}\n \n }\n icon={}\n />\n \n {intl.formatMessage(messages.tenantApiAccess)}\n \n }\n icon={}\n />\n\n {\n \n {intl.formatMessage(messages.tenantApplications)}\n \n }\n icon={}\n />\n }\n {/*TODO(masm): we are hiding the groups functionalities till we dont have API fully supporting roles/groups */}\n {/* \n {intl.formatMessage(messages.tenantGroups)}\n // \n }\n icon={}\n /> */}\n \n )\n}\n\nexport default UsersNav\n","import React, { cloneElement, ReactElement } from 'react'\nimport { FormattedMessage } from 'react-intl'\nimport Button from '@material-ui/core/Button'\nimport { ButtonProps as MuiButtonProps } from '@material-ui/core/Button'\n\nimport { ReactComponent as NewProject } from '@mike/mike-shared-frontend/media/icons/NewProject'\nimport { iconStyle, useStyles } from './iconStyles'\n\ntype IconButtonType = {\n icon?: ReactElement\n messageId: string\n}\n\nconst IconButton = (props: MuiButtonProps & IconButtonType) => {\n const { icon, messageId, ...buttonProps } = props\n const classes = useStyles()\n const iconComponent = icon || \n const iconElement = cloneElement(iconComponent, {\n className: iconStyle\n })\n return (\n \n )\n}\n\nexport default IconButton\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport get from 'lodash/get'\nimport { withStyles } from '@material-ui/core/styles'\nimport FormControl from '@material-ui/core/FormControl'\nimport FormHelperText from '@material-ui/core/FormHelperText'\nimport InputLabel from '@material-ui/core/InputLabel'\nimport Select from '@material-ui/core/Select'\nimport LinearProgress from '@material-ui/core/LinearProgress'\nimport MenuItem from '@material-ui/core/MenuItem'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport { MIKE_COLORS } from '@mike/mike-shared-frontend/mike-shared-styles/mike-colors'\nimport withFormik from './withFormik'\n\nconst styles = theme => ({\n progress: {\n position: 'absolute',\n top: theme.spacing(6),\n left: 0,\n width: '100%'\n },\n formControl: {\n height: 'auto',\n minWidth: theme.spacing(15)\n },\n input: {\n paddingTop: theme.spacing(2.25),\n paddingBottom: 0\n },\n inputNoLabel: {\n paddingTop: theme.spacing(1.5),\n paddingBottom: theme.spacing(0.75)\n },\n iconDisabled: {\n fill: theme.palette.mediumGrey && theme.palette.mediumGrey.main\n },\n iconError: {\n fill: theme.palette.error.main\n },\n iconHidden: {\n opacity: 0\n },\n primaryDisabled: {\n color: theme.palette.mediumGrey.main\n },\n primarySelected: {\n color: theme.palette.primary.main,\n fontWeight: theme.typography.fontWeightBold\n },\n helperTextPlaceHolder: {\n minHeight: theme.spacing(2),\n backgroundColor: 'transparent'\n },\n menuList: {\n backgroundColor: MIKE_COLORS.MEDIUMGREY_LIGHT\n }\n})\n\nconst SelectField = ({\n autoFocus,\n classes,\n disabled,\n error,\n fullWidth,\n helperText,\n hideIcon,\n items,\n label,\n loading,\n name,\n onBlur,\n onChange,\n onSelectClose,\n onSelectOpen,\n primaryField,\n required,\n secondaryField,\n selectOpen,\n value,\n valueField,\n formik\n}) => {\n const [open, setOpen] = useState(false)\n\n const isOpen = selectOpen || open\n\n const handleOpen = (...args) => {\n onSelectOpen && onSelectOpen(...args)\n setOpen(true)\n }\n\n const handleClose = (...args) => {\n onSelectClose && onSelectClose(...args)\n setOpen(false)\n }\n\n const handleChange = (...args) => {\n setOpen(false)\n onChange(...args)\n }\n\n const forceUpdateOnItemListChange = `${name}-${items.length}`\n\n return (\n \n {label && (\n \n {label}\n \n )}\n\n \n {items.map(item => {\n const itemValue = get(item, valueField)\n const selectedItemValue = get(formik.values, name)\n const primary = get(item, primaryField)\n const secondary = get(item, secondaryField)\n\n return (\n \n \n \n )\n })}\n \n\n {loading && }\n\n {helperText ? (\n {helperText}\n ) : (\n
\n )}\n \n )\n}\nSelectField.propTypes = {\n autoFocus: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n formik: PropTypes.object.isRequired,\n fullWidth: PropTypes.bool,\n helperText: PropTypes.string,\n hideIcon: PropTypes.bool,\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\n label: PropTypes.string,\n loading: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onSelectClose: PropTypes.func,\n onSelectOpen: PropTypes.func,\n primaryField: PropTypes.string.isRequired,\n required: PropTypes.bool,\n secondaryField: PropTypes.string,\n selectOpen: PropTypes.bool,\n value: PropTypes.any.isRequired,\n valueField: PropTypes.string.isRequired\n}\n\nexport default withFormik(withStyles(styles)(SelectField))\n","import React from 'react'\nimport objectHash from 'object-hash'\nimport { Form, Formik } from 'formik'\nimport { Grid } from '@material-ui/core'\nimport TextField from '../formik/TextField'\nimport * as Yup from 'yup'\nimport { useIntl } from 'react-intl'\nimport messages from '../../shared/messages'\nimport { MikeButton } from '@mike/mike-shared-frontend'\nimport { css } from 'emotion'\nimport merge from 'lodash/merge'\nimport IAPIAccess from '../../model/IAPIAccess'\nimport SelectField from '../formik/SelectField'\nimport { ROLE_TYPES_EXT } from '../../helpers/project'\nimport map from 'lodash/map'\n\nconst submitButtonStyle = css`\n float: right;\n`\n\nconst validationSchema = Yup.object().shape({\n name: Yup.string().required('Required')\n})\n\ninterface IProps {\n initialValues: IAPIAccess\n handleSubmit: (values: IAPIAccess) => void\n}\n\nconst APIAccessForm = (props: IProps) => {\n const intl = useIntl()\n const { handleSubmit, initialValues } = props\n const editing = initialValues.accountId !== undefined\n\n const defaultInitialValues: IAPIAccess = {\n name: '',\n role: ROLE_TYPES_EXT.NONE\n }\n\n const mergedInitialValues = editing\n ? {\n ...merge({}, defaultInitialValues, initialValues)\n }\n : {\n ...defaultInitialValues\n }\n\n return (\n \n {formik => {\n const { handleChange, setFieldTouched } = formik\n\n const change = (name, e) => {\n e.persist()\n handleChange(e)\n setFieldTouched(name, true, false)\n }\n\n return (\n
\n \n \n \n \n \n ({\n name: role\n }))}\n fullWidth\n onChange={change.bind(null, 'role')}\n />\n \n \n \n {editing\n ? intl.formatMessage({\n id: 'apiAccessForm.updateAPIAccessButton'\n })\n : intl.formatMessage({\n id: 'apiAccessForm.createAPIAccessButton'\n })}\n \n \n \n
\n )\n }}\n \n )\n}\n\nexport default APIAccessForm\n","import React from 'react'\nimport objectHash from 'object-hash'\nimport { Form, Formik } from 'formik'\nimport { Grid } from '@material-ui/core'\nimport TextField from '../formik/TextField'\nimport * as Yup from 'yup'\nimport { useIntl } from 'react-intl'\nimport messages from '../../shared/messages'\nimport { MikeButton } from '@mike/mike-shared-frontend'\nimport { css } from 'emotion'\nimport merge from 'lodash/merge'\nimport IAPIKey from '../../model/IAPIKey'\nimport moment from 'moment'\n\nconst submitButtonStyle = css`\n float: right;\n`\n\nconst validationSchema = Yup.object().shape({\n name: Yup.string().required('Required')\n})\n\ninterface IProps {\n initialValues: IAPIKey\n handleSubmit: (values: IAPIKey) => void\n}\n\nconst APIKeyForm = (props: IProps) => {\n const intl = useIntl()\n const { handleSubmit, initialValues } = props\n const editing = initialValues.accountId !== undefined\n\n const defaultInitialValues: IAPIKey = {\n name: '',\n expirationDate: moment()\n .add(1, 'year')\n .toJSON()\n }\n\n const mergedInitialValues = editing\n ? {\n ...merge({}, defaultInitialValues, initialValues)\n }\n : {\n ...defaultInitialValues\n }\n\n const convertToRepresentation = (dateString: string | undefined) => {\n const date = moment.utc(dateString).local()\n return moment(date).format('YYYY-MM-DDTHH:mm')\n }\n\n const convertToModel = (dateString: string) => {\n const date = moment(dateString).toDate()\n return moment(date)\n .utc()\n .format('YYYY-MM-DDTHH:mm')\n }\n\n return (\n \n {formik => {\n const { handleChange, setFieldTouched, setFieldValue } = formik\n const change = (name, e) => {\n e.persist()\n handleChange(e)\n setFieldTouched(name, true, false)\n }\n\n const changeDate = (name, e) => {\n if (!editing) {\n e.persist()\n setFieldValue(\n 'expirationDate',\n convertToModel(e.target.value),\n true\n )\n setFieldTouched(name, true, false)\n }\n }\n\n return (\n
\n \n \n \n \n \n \n \n {editing && (\n \n \n \n )}\n \n \n {editing\n ? intl.formatMessage({\n id: 'apiKeyForm.updateAPIKeyButton'\n })\n : intl.formatMessage({\n id: 'apiKeyForm.createAPIKeyButton'\n })}\n \n \n \n
\n )\n }}\n \n )\n}\n\nexport default APIKeyForm\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport MikeTooltip from '@mike/mike-shared-frontend/mike-tooltip/MikeTooltip'\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n root: {\n display: 'flex',\n alignItems: 'center'\n },\n icon: {\n paddingTop: theme.spacing(0.5),\n marginRight: theme.spacing(1)\n },\n longText: {\n maxWidth: '25vw',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'table-cell',\n paddingRight: 8\n },\n bold: {\n fontWeight: 'bold'\n }\n })\n)\n\nconst LongName = ({ longName, icon: Icon, variant }) => {\n const classes = useStyles()\n\n return (\n
\n {Icon && (\n
\n \n
\n )}\n \n \n {longName}\n
\n \n
\n )\n}\n\nLongName.propTypes = {\n icon: PropTypes.any,\n longName: PropTypes.string.isRequired,\n variant: PropTypes.oneOf(['default', 'bold'])\n}\n\nexport default React.memo(LongName)\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\n\nimport {\n makeStyles,\n createStyles,\n Typography,\n IconButton\n} from '@material-ui/core'\n\nimport CloseIcon from '@material-ui/icons/Close'\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n titleBar: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n onlyIconBar: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n titleHeadings: {\n paddingTop: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingBottom: theme.spacing(2)\n },\n closeButton: {\n padding: 0,\n color: theme.palette.primary.main\n }\n })\n})\n\ninterface IProps {\n title?: string\n onClose: () => void\n}\n\nconst DialogTitle = (props: IProps) => {\n const classes = useStyles()\n const { title, onClose } = props\n\n return (\n
\n {title ? (\n
\n {title}\n
\n ) : null}\n
\n \n \n \n
\n
\n )\n}\n\nexport default DialogTitle\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\n\nimport { makeStyles, createStyles, Dialog, Typography } from '@material-ui/core'\nimport MuiDialogTitle from '@material-ui/core/DialogTitle'\nimport MuiDialogContent from '@material-ui/core/DialogContent'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button'\nimport DialogTitle from './DialogTitle'\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n title: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(1),\n paddingTop: theme.spacing(1)\n },\n dialogContent: {\n maxWidth: 378,\n paddingBottom: theme.spacing(3),\n paddingRight: theme.spacing(3),\n backgroundColor: theme.palette.background.paper\n },\n dialogTitle: {\n padding: theme.spacing(1),\n color: theme.palette.background.paper,\n height: theme.spacing(2),\n width: '100%'\n },\n dialogActions: {\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.background.paper,\n paddingBottom: theme.spacing(3),\n paddingRight: theme.spacing(3),\n width: '100%'\n }\n })\n})\n\ninterface IProps {\n open: boolean\n onCancel: () => void\n onOk: () => void\n children?: React.ReactNode\n title?: string\n message?: string\n cancel?: string\n ok?: string\n hideCancelButton?: boolean\n}\n\nconst ConfirmationDialog = (props: IProps) => {\n const classes = useStyles()\n const {\n children,\n open,\n message,\n title,\n ok = 'Ok',\n cancel = 'Cancel',\n onCancel,\n onOk\n } = props\n\n return (\n \n \n \n \n {children ? (\n children\n ) : (\n \n \n {title}\n \n {message}\n \n )}\n \n {!props.hideCancelButton && (\n \n {cancel}\n \n )}\n \n {ok}\n \n \n \n )\n}\n\nexport default ConfirmationDialog\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport MuiDialogContent from '@material-ui/core/DialogContent'\nimport { useTypedSelector } from '../../reducers'\nimport moment from 'moment'\nimport {\n deleteAPIAccess,\n deleteAPIKeys,\n loadAPIAccessList\n} from '../../actions/apiAccess'\nimport { useDispatch } from 'react-redux'\nimport {\n Input,\n InputAdornment,\n makeStyles,\n Typography,\n Box,\n Tooltip\n} from '@material-ui/core'\nimport SearchInput from '../SearchInput'\nimport { defineMessages, useIntl } from 'react-intl'\nimport RefreshButton from '../buttons/RefreshButton'\nimport DeleteButton from '../buttons/DeleteButton'\nimport DataTable from '../DataTable'\nimport UsersNav from '../UsersNav'\nimport IconButton from '../buttons/IconButton'\nimport APIAccessForm from '../APIAccessForm'\nimport APIKeyForm from '../APIKeyForm'\nimport { MikeSlidingPanel } from '@mike/mike-shared-frontend'\nimport IAPIAccess from '../../model/IAPIAccess'\nimport IAPIKey from '../../model/IAPIKey'\nimport { createAPIAccess, updateAPIAccess } from '../../actions/apiAccess'\nimport { createAPIKey, updateAPIKey } from '../../actions/apiAccess'\nimport { StateEnum } from '../../model/StateEnum'\nimport LongName from '../DataTable/renders/LongName'\nimport Renders from '../DataTable/renders'\nimport messages from '../../shared/messages'\nimport { flatten } from 'lodash'\nimport { ReactComponent as Duplicate } from '@mike/mike-shared-frontend/media/icons/Duplicate'\nimport Button from '@material-ui/core/Button'\nimport copy from 'clipboard-copy'\nimport { css } from 'emotion'\nimport ConfirmationDialog from '../Dialog/ConfirmationDialog'\nimport { setLastAddedAPIKey } from '../../reducers/apiKeys'\nimport { ReactComponent as Alert } from '@mike/mike-shared-frontend/media/icons/Alert'\n\nconst localMessages = defineMessages({\n title: {\n id: 'screens.apiAccess.title'\n },\n confirmationDialogTitle: {\n id: 'screens.apiAccess.confirmationDialog.title'\n },\n confirmationDialogMessage: {\n id: 'screens.apiAccess.confirmationDialog.message'\n },\n searchPlaceholder: {\n id: 'screens.apiAccess.input.search.placeholder'\n },\n createApiKey: {\n id: 'screens.apiAccess.button.createApiKey'\n },\n key: {\n id: 'screens.apiAccess.apiKey'\n },\n expirationDate: {\n id: 'screens.apiAccess.expirationDate'\n },\n keyGeneratedTitle: {\n id: 'screens.apiAccess.keyGenerated.title'\n },\n keyGeneratedMessage: {\n id: 'screens.apiAccess.keyGenerated.message'\n }\n})\n\nconst hoverStyle = () => {\n return css`\n &:hover {\n cursor: pointer;\n }\n `\n}\n\nconst useStyles = makeStyles(theme => ({\n tableTopHeader: {\n position: 'sticky',\n top: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: '#f2f5f7'\n },\n tableTopActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(3)\n },\n leftActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-start'\n },\n rightActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-end'\n },\n apiAccountRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '20px'\n },\n apiKeyRow: {\n paddingLeft: '20px'\n },\n expirationRow: {\n display: 'flex'\n },\n dialogTitle: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(1),\n paddingTop: theme.spacing(1)\n },\n dialogContent: {\n maxWidth: 378,\n paddingBottom: theme.spacing(3),\n paddingRight: theme.spacing(3),\n backgroundColor: theme.palette.background.paper\n }\n}))\n\nconst FIRST_PAGE = 0\n\nconst APIAccess = props => {\n const tenantId = useTypedSelector(state => state.auth?.user?.tenantId) || ''\n const apiAccessList = useTypedSelector(state => state.apiAccess.apiAccessList)\n const apiKeyList = useTypedSelector(state => state.apiKeys.apiKeyList)\n const latestAddedApiKey = useTypedSelector(\n state => state.apiKeys.lastAddedApiKey\n )\n const loadingApiAccess =\n useTypedSelector(state => state.apiAccess.state) === StateEnum.LOADING\n const dispatch = useDispatch()\n const intl = useIntl()\n const [searchText, setSearchText] = useState('')\n const classes = useStyles(props)\n const [openAPIAccessEditor, setOpenAPIAccessEditor] = useState(false)\n const [selectedRows, setSelectedRows] = useState<(IAPIAccess & IAPIKey)[]>([])\n const [sortOrder, setSortOrder] = useState(['asc'])\n const [sortOrderBy, setSortOrderBy] = useState(['name'])\n const [openDeleteConfirmation, setOpenDeleteConfirmation] = useState(\n false\n )\n const [itemsToBeDeleted, setItemsToBeDeleted] = useState<\n (IAPIAccess & IAPIKey)[]\n >([])\n const [currentEditingApiAccess, setCurrentEditingApiAccess] = useState<\n IAPIAccess\n >({\n name: '',\n role: ''\n })\n const [openKeyEditor, setOpenKeyEditor] = useState(false)\n const [currentEditingKey, setCurrentEditingKey] = useState({\n name: ''\n })\n\n const projectNameRender = (value, item: IAPIAccess & IAPIKey) => {\n if (item && item.key) {\n return (\n
\n \n
\n )\n }\n\n return (\n
\n \n {\n event.stopPropagation()\n setOpenKeyEditor(true)\n setCurrentEditingApiAccess(item)\n setCurrentEditingKey({ name: '' })\n }}\n >\n {intl.formatMessage(localMessages.createApiKey)}\n \n
\n )\n }\n\n const projectKeyRender = (value, item: IAPIAccess & IAPIKey) => {\n if (item && item.key) {\n return \n }\n }\n\n const projectExpirationDateRender = (value, item: IAPIAccess & IAPIKey) => {\n if (item && item.key) {\n const local = moment.utc(value).local()\n const soonDate = moment(new Date()).add(7, 'days')\n\n return (\n
\n \n {local < soonDate && }\n
\n )\n }\n }\n\n const roleRender = (value, item: IAPIAccess & IAPIKey) => {\n if (!item?.['createdBy']) return ''\n\n if (!value || value === 'undefined') return \n\n return \n }\n\n useEffect(() => {\n dispatch(loadAPIAccessList(tenantId))\n }, [dispatch, tenantId])\n\n const [topOffset, setTopOffset] = useState(0)\n const measuredRef = useCallback(node => {\n if (node !== null) {\n setTopOffset(node.getBoundingClientRect().height + 8)\n }\n }, [])\n\n const onRefresh = () => {\n dispatch(loadAPIAccessList(tenantId))\n }\n\n const onDelete = item => {\n setItemsToBeDeleted([item])\n setOpenDeleteConfirmation(true)\n }\n\n const onDeleteItems = () => {\n setItemsToBeDeleted(selectedRows)\n setOpenDeleteConfirmation(true)\n }\n\n const onColumnClick = (column: IAPIAccess & IAPIKey) => {\n if (column && column.key) {\n const apiAccess = apiAccessList.find(\n item => item.accountId === column.accountId\n )\n apiAccess && setCurrentEditingApiAccess(apiAccess)\n setCurrentEditingKey(column)\n setOpenKeyEditor(true)\n } else {\n setCurrentEditingApiAccess(column)\n setOpenAPIAccessEditor(true)\n }\n }\n\n const onHandleRequestSort = (orderBy: string, order: string) => {\n setSortOrder([order])\n setSortOrderBy([orderBy])\n }\n\n const sorterdAPIAccesList: (IAPIAccess | IAPIKey)[] = useMemo(() => {\n if (searchText?.length === 0) {\n return flatten(\n apiAccessList.map(apiAccess => {\n if (apiAccess.accountId) {\n return [apiAccess].concat(apiKeyList[apiAccess.accountId] || [])\n }\n return apiAccess\n })\n )\n }\n\n const lowerSearch = searchText.toLowerCase()\n\n return flatten(\n apiAccessList.map(apiAccess => {\n if (apiAccess.accountId === undefined) return []\n\n if (apiAccess.name.toLowerCase().includes(lowerSearch)) {\n return [apiAccess].concat(apiKeyList[apiAccess.accountId] || [])\n }\n\n const filteredKeys = apiKeyList[apiAccess.accountId]?.filter(\n key =>\n key.name.toLowerCase().includes(lowerSearch) ||\n key.key.toLowerCase().includes(lowerSearch)\n )\n\n if (filteredKeys?.length) {\n return [apiAccess].concat(filteredKeys)\n }\n\n return []\n })\n )\n }, [apiAccessList, apiKeyList, searchText])\n\n const onOkDeleteItems = () => {\n const apiAccess = itemsToBeDeleted.filter(\n item => item && !item.key\n ) as IAPIAccess[]\n const apiAccessIds = apiAccess.map(item => item.accountId)\n const apiKeys = itemsToBeDeleted.filter(\n item => item && item.key && !apiAccessIds.includes(item.accountId)\n ) as IAPIKey[]\n\n if (apiAccess.length > 0) {\n dispatch(deleteAPIAccess(apiAccess, tenantId))\n }\n if (apiKeys.length > 0) {\n dispatch(deleteAPIKeys(apiKeys, tenantId))\n }\n setSelectedRows([])\n setOpenDeleteConfirmation(false)\n }\n\n const onCancelDeleteItems = () => {\n setOpenDeleteConfirmation(false)\n }\n\n const onOkLatestAddedApiKey = () => {\n dispatch(setLastAddedAPIKey({ apiKey: null }))\n }\n\n const handleCopyApiKey = () => {\n if (latestAddedApiKey?.key) {\n copy(latestAddedApiKey.key)\n }\n }\n\n const getIdForField = (item: IAPIAccess & IAPIKey) => {\n if (item && item.key) {\n return item.publicId\n }\n return item.accountId\n }\n\n return (\n <>\n \n {latestAddedApiKey && (\n \n \n \n {intl.formatMessage(localMessages.keyGeneratedTitle)}\n \n \n \n {intl.formatMessage(localMessages.keyGeneratedMessage)}\n \n \n \n \n \n \n \n \n }\n />\n \n \n \n )}\n \n
\n \n {intl.formatMessage(localMessages.title)}\n \n
\n
\n \n\n \n\n {selectedRows.length > 0 && (\n \n )}\n
\n
\n {\n setCurrentEditingApiAccess({ name: '' })\n setOpenAPIAccessEditor(true)\n }}\n />\n
\n
\n
\n\n \n \n {intl.formatMessage(messages.userRole)}\n \n \n ),\n render: roleRender\n }\n ]}\n idField={getIdForField}\n data={sorterdAPIAccesList}\n onColumnClick={onColumnClick}\n onHandleRequestSort={onHandleRequestSort}\n onSelectionChange={setSelectedRows}\n selectedRows={selectedRows}\n headerColor={'#fff'}\n isSelected={(item: IAPIAccess & IAPIKey) => {\n if (item && item.key) {\n return Boolean(\n selectedRows.find(row => {\n if (row && row.key) {\n return row.publicId === item.publicId\n }\n return row.accountId === item.accountId\n })\n )\n } else {\n const id = getIdForField(item)\n return Boolean(selectedRows.find(row => getIdForField(row) === id))\n }\n }}\n topOffset={topOffset}\n totalCount={sorterdAPIAccesList.length}\n page={FIRST_PAGE}\n rowsPerPage={sorterdAPIAccesList.length}\n _order={sortOrder}\n _orderBy={sortOrderBy}\n />\n\n {\n setOpenKeyEditor(false)\n }}\n titleArea={\n currentEditingKey.accountId\n ? intl.formatMessage({\n id: 'screens.apiAccess.updateApiKey'\n })\n : intl.formatMessage({\n id: 'screens.apiAccess.createApiKey'\n })\n }\n contentArea={\n {\n if (currentEditingKey.accountId) {\n dispatch(updateAPIKey(data, currentEditingApiAccess, tenantId))\n } else {\n dispatch(createAPIKey(data, currentEditingApiAccess, tenantId))\n }\n setOpenKeyEditor(false)\n }}\n />\n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n {\n setOpenAPIAccessEditor(false)\n }}\n titleArea={\n currentEditingApiAccess.accountId\n ? intl.formatMessage({\n id: 'screens.apiAccess.updateApiAccount'\n })\n : intl.formatMessage({\n id: 'screens.apiAccess.createApiAccount'\n })\n }\n contentArea={\n {\n if (currentEditingApiAccess.accountId) {\n dispatch(updateAPIAccess(data, tenantId))\n } else {\n dispatch(createAPIAccess(data, tenantId))\n }\n setOpenAPIAccessEditor(false)\n }}\n />\n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n \n )\n}\n\nexport default APIAccess\n","import React from 'react'\nimport Autocomplete from '@material-ui/lab/Autocomplete'\n\nimport Button from '@material-ui/core/Button'\nimport Typography from '@material-ui/core/Typography'\nimport Chip from '@material-ui/core/Chip'\nimport AddOutlinedIcon from '@material-ui/icons/AddOutlined'\nimport DoneIcon from '@material-ui/icons/Done'\nimport Popper from '@material-ui/core/Popper'\nimport InputBase from '@material-ui/core/InputBase'\nimport { FormattedMessage } from 'react-intl'\nimport { ROLE_TYPES } from '../../helpers/project'\nimport ITenantUser from '../../model/ITenantUser'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\n\nexport interface ITextResources {\n label: string\n loading: string\n noData: string\n placeholder: string\n title: string\n}\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n container: {\n padding: 15\n }\n })\n)\ninterface IProps {\n /**\n * Tenant selected callback\n */\n onMemberSelected: (members: ITenantUser[]) => void\n /**\n * Tenants matching search string (to be updated by onTenantSearchTextChanged)\n */\n members: Array\n /**\n * Loading state\n */\n membersLoading?: boolean\n /**\n * Selected tenant\n */\n selectedMembers?: Array\n /**\n * To overwrite text resources like e.g. input field label\n */\n textResources?: ITextResources\n\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean | undefined\n ) => any\n\n users: Array\n}\n\n/**\n * @name TenantSelect\n * @summary An autocomplete component to select tenant by name\n *\n * @param props\n */\nconst TenantMembersSelect = (props: IProps) => {\n const {\n // membersLoading = false,\n users = [],\n members = [],\n textResources = {\n label: 'Current members',\n loading: 'Loading...',\n noData: 'No member found',\n placeholder: 'Search user to add',\n title: 'Members'\n },\n setFieldValue\n } = props\n\n const classes = useStyles()\n const [anchorEl, setAnchorEl] = React.useState(null)\n const [value, setValue] = React.useState(members)\n const [pendingValue, setPendingValue] = React.useState([])\n\n const open = Boolean(anchorEl)\n const id = open ? 'tenant-member-select' : undefined\n\n const renderOption = (option: ITenantUser, param) => {\n return (\n \n \n {option.name}\n \n )\n }\n\n const handleButtonClick = event => {\n setPendingValue(value)\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = (event, reason) => {\n if (reason === 'toggleInput') {\n return\n }\n setValue(pendingValue)\n if (anchorEl) {\n anchorEl.focus()\n }\n setAnchorEl(null)\n }\n\n const colorByRole = role =>\n role === ROLE_TYPES.OWNER\n ? 'primary'\n : role === ROLE_TYPES.CONTRIBUTOR\n ? 'secondary'\n : undefined\n\n const handleDelete = (member: ITenantUser) => {\n const newValue = value.filter(v => {\n return v.id !== member.id\n })\n setValue(newValue)\n }\n\n return (\n <>\n {textResources.title}\n
\n \n \n \n \n
\n {value &&\n value.map((v: ITenantUser, index) => {\n return (\n handleDelete(v)}\n />\n )\n })}\n
\n\n \n
{textResources.placeholder}
\n {\n setPendingValue(newValue)\n setFieldValue('members', newValue)\n }}\n disableCloseOnSelect\n disablePortal\n renderTags={() => null}\n noOptionsText=\"No users\"\n renderOption={renderOption}\n options={users}\n getOptionSelected={(option, value) => value.id === option.id}\n getOptionLabel={(option: ITenantUser) => option.name}\n renderInput={params => {\n return (\n \n )\n }}\n />\n \n \n )\n}\n\nexport default TenantMembersSelect\n","import React from 'react'\nimport objectHash from 'object-hash'\nimport { Form, Formik } from 'formik'\nimport { Grid } from '@material-ui/core'\nimport TextField from '../formik/TextField'\n\nimport * as Yup from 'yup'\nimport { useIntl } from 'react-intl'\nimport messages from '../../shared/messages'\nimport { MikeButton } from '@mike/mike-shared-frontend'\nimport { css } from 'emotion'\nimport merge from 'lodash/merge'\nimport TenantMembersSelect from '../TenantMembersSelect/TenantMembersSelect'\nimport ITenantGroup from '../../model/ITenantGroup'\nimport { useTypedSelector } from '../../reducers'\n\nconst submitButtonStyle = css`\n float: right;\n`\n\nconst validationSchema = Yup.object().shape({\n name: Yup.string().required('Required')\n})\n\ninterface IProps {\n initialValues: ITenantGroup\n handleSubmit: (values: ITenantGroup) => void\n}\n\nconst UserGroupForm = (props: IProps) => {\n const intl = useIntl()\n const { handleSubmit, initialValues } = props\n\n const users = useTypedSelector(state => state.users.users)\n\n const [selectedMembers, setSelectedMembers] = React.useState(\n initialValues.members\n )\n\n const editing = initialValues.name !== ''\n\n const defaultInitialValues: ITenantGroup = {\n id: '',\n name: '',\n members: []\n }\n\n let mergedInitialValues = editing\n ? {\n ...merge({}, defaultInitialValues, initialValues)\n }\n : {\n ...defaultInitialValues\n }\n\n const handleMemberSelected = members => {\n mergedInitialValues.members = members\n setSelectedMembers(members)\n }\n\n return (\n \n {formik => {\n const { handleChange, setFieldTouched, setFieldValue } = formik\n\n const change = (name, e) => {\n e.persist()\n handleChange(e)\n setFieldTouched(name, true, false)\n }\n\n return (\n
\n \n \n \n \n {\n \n {!editing && (\n \n )}\n \n }\n \n \n {editing\n ? intl.formatMessage({\n id: 'userGroupForm.updateGroup'\n })\n : intl.formatMessage({\n id: 'userGroupForm.createGroup'\n })}\n \n \n \n
\n )\n }}\n \n )\n}\n\nexport default UserGroupForm\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { useTypedSelector } from '../../reducers'\nimport {\n deleteGroups,\n createGroup,\n updateGroup,\n loadGroups\n} from '../../actions/groups'\nimport { useDispatch } from 'react-redux'\nimport { makeStyles, Typography } from '@material-ui/core'\nimport SearchInput from '../SearchInput'\nimport { defineMessages, useIntl } from 'react-intl'\nimport RefreshButton from '../buttons/RefreshButton'\nimport DeleteButton from '../buttons/DeleteButton'\nimport DataTable from '../DataTable'\nimport IconButton from '../buttons/IconButton'\nimport { MikeSlidingPanel } from '@mike/mike-shared-frontend'\nimport { StateEnum } from '../../model/StateEnum'\nimport LongName from '../DataTable/renders/LongName'\nimport Renders from '../DataTable/renders'\nimport messages from '../../shared/messages'\nimport { css } from 'emotion'\nimport ConfirmationDialog from '../Dialog/ConfirmationDialog'\nimport { ReactComponent as Users } from '@mike/mike-shared-frontend/media/icons/Users'\n\nimport UserGroupForm from '../UserGroupForm/UserGroupForm'\nimport ITenantGroup from '../../model/ITenantGroup'\n\nconst localMessages = defineMessages({\n title: {\n id: 'screens.userGroups.title'\n },\n confirmationDialogTitle: {\n id: 'screens.userGroups.confirmationDialog.title'\n },\n confirmationDialogMessage: {\n id: 'screens.userGroups.confirmationDialog.message'\n },\n searchPlaceholder: {\n id: 'screens.userGroups.input.search.placeholder'\n },\n numberOfUsers: {\n id: 'screens.userGroups.numberOfUsers'\n },\n accessLevel: {\n id: 'screens.userGroups.accessLevel'\n }\n})\n\nconst hoverStyle = () => {\n return css`\n &:hover {\n cursor: pointer;\n }\n `\n}\n\nconst useStyles = makeStyles(theme => ({\n tableTopHeader: {\n position: 'sticky',\n top: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: '#f2f5f7'\n },\n tableTopActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(3)\n },\n leftActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-start'\n },\n rightActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-end'\n },\n nameRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '20px'\n },\n groupRow: {\n paddingLeft: '20px'\n },\n dialogTitle: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(1),\n paddingTop: theme.spacing(1)\n },\n dialogContent: {\n maxWidth: 378,\n paddingBottom: theme.spacing(3),\n paddingRight: theme.spacing(3),\n backgroundColor: theme.palette.background.paper\n }\n}))\n\nconst FIRST_PAGE = 0\n\nconst UserGroups = props => {\n const tenantId = useTypedSelector(state => state.auth?.user?.tenantId) || ''\n\n const loadingGroups =\n useTypedSelector(state => state.groups.loadingState) === StateEnum.LOADING\n const dispatch = useDispatch()\n const intl = useIntl()\n const [searchText, setSearchText] = useState('')\n const classes = useStyles(props)\n const [selectedRows, setSelectedRows] = useState([])\n const [sortOrder, setSortOrder] = useState(['asc'])\n const [sortOrderBy, setSortOrderBy] = useState(['name'])\n const [openDeleteConfirmation, setOpenDeleteConfirmation] = useState(\n false\n )\n const [itemsToBeDeleted, setItemsToBeDeleted] = useState([])\n const [currentEditingUserGroup, setCurrentEditingUserGroup] = useState<\n ITenantGroup\n >({\n name: '',\n id: ''\n })\n const [openGroupEditor, setOpenGroupEditor] = useState(false)\n\n const groups = useTypedSelector(state => state.groups.groups)\n\n useEffect(() => {\n if (tenantId) {\n dispatch(loadGroups(tenantId))\n }\n }, [dispatch, tenantId])\n\n const groupNameRender = (value, item: ITenantGroup) => {\n if (item && item.name) {\n return (\n
\n \n
\n )\n }\n }\n\n const numberofUserRender = (value, item: ITenantGroup) => {\n if (item && item.members) {\n return
{item.members.length}
\n }\n }\n\n useEffect(() => {\n dispatch(loadGroups(tenantId))\n }, [dispatch, tenantId])\n\n const [topOffset, setTopOffset] = useState(0)\n const measuredRef = useCallback(node => {\n if (node !== null) {\n setTopOffset(node.getBoundingClientRect().height + 8)\n }\n }, [])\n\n const onRefresh = () => {\n dispatch(loadGroups(tenantId))\n }\n\n const onDelete = item => {\n setItemsToBeDeleted([item])\n setOpenDeleteConfirmation(true)\n }\n\n const onDeleteItems = () => {\n setItemsToBeDeleted(selectedRows)\n setOpenDeleteConfirmation(true)\n }\n\n const onColumnClick = column => {\n if (column && column.key) {\n const group = groups.find(item => item.name === column.name)\n group && setCurrentEditingUserGroup(group)\n setCurrentEditingUserGroup(column)\n setOpenGroupEditor(true)\n } else {\n setCurrentEditingUserGroup(column)\n setOpenGroupEditor(true)\n }\n }\n\n const onHandleRequestSort = (orderBy: string, order: string) => {\n setSortOrder([order])\n setSortOrderBy([orderBy])\n }\n\n const onOkDeleteGroups = () => {\n dispatch(deleteGroups(itemsToBeDeleted, tenantId))\n setSelectedRows([])\n setOpenDeleteConfirmation(false)\n }\n\n const onCancelDeleteGroups = () => {\n setOpenDeleteConfirmation(false)\n }\n\n return (\n <>\n
\n \n {intl.formatMessage(localMessages.title)}\n \n
\n
\n \n\n \n\n {selectedRows.length > 0 && (\n \n )}\n
\n
\n }\n messageId=\"screens.userGroups.newGroup\"\n onClick={() => {\n setCurrentEditingUserGroup({\n name: '',\n id: ''\n })\n setOpenGroupEditor(true)\n }}\n />\n
\n
\n
\n\n {\n const found = selectedRows.find(row => {\n return row.id === item.id\n })\n return found ? true : false\n }}\n topOffset={topOffset}\n totalCount={groups.length}\n page={FIRST_PAGE}\n rowsPerPage={groups.length}\n _order={sortOrder}\n _orderBy={sortOrderBy}\n />\n\n {\n setOpenGroupEditor(false)\n }}\n titleArea={\n currentEditingUserGroup.name\n ? intl.formatMessage({\n id: 'screens.userGroups.updateGroup'\n })\n : intl.formatMessage({\n id: 'screens.userGroups.createGroup'\n })\n }\n contentArea={\n {\n if (currentEditingUserGroup.name) {\n dispatch(updateGroup(tenantId, data))\n } else {\n dispatch(createGroup(tenantId, data))\n }\n setOpenGroupEditor(false)\n }}\n />\n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n \n {\n setOpenGroupEditor(false)\n }}\n titleArea={\n currentEditingUserGroup.name\n ? intl.formatMessage({\n id: 'screens.userGroups.updateGroup'\n })\n : intl.formatMessage({\n id: 'screens.userGroups.createGroup'\n })\n }\n contentArea={\n {\n if (currentEditingUserGroup.name) {\n dispatch(updateGroup(tenantId, data))\n } else {\n dispatch(createGroup(tenantId, data))\n }\n setOpenGroupEditor(false)\n }}\n />\n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n \n )\n}\n\nexport default UserGroups\n","export const CONVERT_TYPE = 'Conversion'\n","import React from 'react'\nimport { FormattedMessage } from 'react-intl'\nimport Button from '@material-ui/core/Button'\nimport { ReactComponent as Download } from '@mike/mike-shared-frontend/media/icons/Download'\nimport { ButtonProps as MuiButtonProps } from '@material-ui/core/Button'\nimport messages from '../../shared/messages'\nimport { iconSecondaryStyle, useStyles } from './iconStyles'\n\nconst DownloadButton = (buttonProps: MuiButtonProps) => {\n const classes = useStyles()\n return (\n \n )\n}\n\nexport default DownloadButton\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { withStyles } from '@material-ui/core'\nimport Button from '@material-ui/core/Button'\nimport Tooltip from '@material-ui/core/Tooltip'\nimport { ReactComponent as Edit } from '@mike/mike-shared-frontend/media/icons/Edit'\nimport { mikePalette } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { css } from 'emotion'\n\nconst styles = () => ({\n button: {\n // color: mikePalette.primary.main,\n '&[disabled]': {\n color: mikePalette.secondary.light,\n opacity: 0.5,\n cursor: 'not-allowed'\n }\n }\n})\n\nconst iconStyle = css`\n path {\n fill: ${mikePalette.secondary.main};\n }\n`\n\nconst EditProjectButton = ({ classes, tip = '', label, ...buttonProps }) => (\n \n \n \n \n \n)\n\nEditProjectButton.propTypes = {\n classes: PropTypes.object.isRequired,\n tip: PropTypes.string,\n label: PropTypes.string\n}\n\nexport default withStyles(styles)(EditProjectButton)\n","import React from 'react'\nimport { FormattedMessage } from 'react-intl'\nimport Button from '@material-ui/core/Button'\nimport { ReactComponent as ProjectMoveTo } from '@mike/mike-shared-frontend/media/icons/ProjectMoveTo'\nimport { ButtonProps as MuiButtonProps } from '@material-ui/core/Button'\n\nimport { iconSecondaryStyle, useStyles } from './iconStyles'\n\nconst MoveToButton = (buttonProps: MuiButtonProps) => {\n const classes = useStyles()\n return (\n \n )\n}\n\nexport default MoveToButton\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose } from 'recompose'\nimport { injectIntl, defineMessages } from 'react-intl'\nimport { withStyles } from '@material-ui/core'\nimport Button from '@material-ui/core/Button'\nimport AppPropTypes from '../../shared/appPropTypes'\nimport { mikePalette } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { ReactComponent as Folder } from '@mike/mike-shared-frontend/media/icons/Folder'\nimport { css } from 'emotion'\n\nconst localMessages = defineMessages({\n createSubprojectButton: {\n id: 'createProjectForm.createSubprojectButton'\n }\n})\n\nconst styles = () => ({\n root: {\n textTransform: 'none'\n },\n button: {\n padding: 0,\n paddingRight: 12,\n width: 150,\n border: '2px solid ' + mikePalette.secondary.main,\n color: mikePalette.secondary.main,\n '&[disabled]': {\n color: mikePalette.secondary.light,\n opacity: 0.5,\n cursor: 'not-allowed'\n }\n }\n})\n\nconst iconStyle = css`\n path {\n fill: ${mikePalette.secondary.main};\n }\n`\n\nconst CreateSubprojectButton = ({ classes, intl, size, ...buttonProps }) => (\n \n)\nCreateSubprojectButton.propTypes = {\n classes: PropTypes.object.isRequired,\n size: AppPropTypes.mduiSizes,\n intl: PropTypes.object.isRequired\n}\n\nconst enhance = compose(injectIntl, withStyles(styles))\n\nexport default enhance(CreateSubprojectButton)\n","import React from 'react'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport { useIntl, defineMessages } from 'react-intl'\nimport Button from '@material-ui/core/Button'\nimport { mikePalette } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { ReactComponent as Upload } from '@mike/mike-shared-frontend/media/icons/Upload'\nimport { css } from 'emotion'\n\ninterface IProps {\n /**\n * File select callback.\n */\n onFileSelect: () => void\n /**\n * Disabled style.\n */\n disabled: boolean\n}\n\nconst localMessages = defineMessages({\n uploadContentButton: {\n id: 'projectContent.uploadContentButton'\n }\n})\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n button: {\n padding: 0,\n paddingRight: theme.spacing(1.5),\n width: 150,\n border: '2px solid ' + theme.palette.secondary.main,\n color: theme.palette.secondary.main,\n cursor: 'pointer'\n },\n buttonDisabled: {\n padding: 0,\n paddingRight: theme.spacing(1.5),\n width: 150,\n border: '2px solid ' + theme.palette.secondary.main,\n color: theme.palette.secondary.light,\n opacity: 0.5,\n cursor: 'not-allowed'\n },\n input: {\n display: 'none'\n }\n })\n})\n\nconst iconStyle = (disabled: boolean) => {\n const color = disabled\n ? mikePalette.secondary.light\n : mikePalette.secondary.main\n return css`\n path {\n fill: ${color};\n }\n `\n}\n\nconst disabledButton = (classes, intl) => (\n \n)\n\nconst enabledButton = (classes, intl, onFileSelect) => (\n <>\n \n\n \n \n)\n\nconst FileChooserButton = (props: IProps) => {\n const { disabled, onFileSelect } = props\n const intl = useIntl()\n const classes = useStyles()\n\n return disabled\n ? disabledButton(classes, intl)\n : enabledButton(classes, intl, onFileSelect)\n}\n\nexport default FileChooserButton\n","import { makeStyles, createStyles } from '@material-ui/core'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\n\nexport const useMetadataStyles = makeStyles((theme: IMikeTheme) => {\n const grey = theme.palette.mediumGrey && theme.palette.mediumGrey.main\n const lightgrey = theme.palette.lightGrey && theme.palette.lightGrey.main\n return createStyles({\n longText: {\n maxWidth: '6vw',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'table-cell',\n paddingRight: theme.spacing(1)\n },\n bottomBorder: {\n paddingBottom: theme.spacing(1),\n paddingTop: theme.spacing(1),\n backgroundColor: lightgrey,\n borderBottom: '1px solid ' + grey\n },\n tooltip: {\n maxHeight: '100%',\n height: '100%'\n }\n })\n})\n","/* eslint-disable react/prop-types */\nimport React, { useMemo, useState } from 'react'\nimport { Field } from 'formik'\nimport Grid from '@material-ui/core/Grid'\nimport Typography from '@material-ui/core/Typography'\nimport Button from '@material-ui/core/Button'\nimport Tooltip from '@material-ui/core/Tooltip'\nimport { ReactComponent as Delete } from '@mike/mike-shared-frontend/media/icons/Delete'\nimport { ReactComponent as Plus } from '@mike/mike-shared-frontend/media/icons/Plus'\nimport { ReactComponent as Edit } from '@mike/mike-shared-frontend/media/icons/Edit'\nimport TextField from '../formik/TextField'\nimport { useIntl } from 'react-intl'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button'\nimport { iconStyle } from '../buttons/iconStyles'\nimport { useMetadataStyles } from './useMetadataStyles'\n\nexport interface IMetaData {\n key: string\n value: string\n}\n\ninterface IProps {\n name: string\n values: Array\n onChangeMetadata: (metaDatas: Array) => void\n editing: boolean\n setEditing: () => void\n}\n\nconst EditMetadata = (props: IProps) => {\n const { name, values, onChangeMetadata, editing, setEditing } = props\n\n const classes = useMetadataStyles()\n\n const intl = useIntl()\n\n const [vals, setVals] = useState(values)\n\n const removeMetaDataLocal = (md: IMetaData, metaDatas: Array) => {\n const newVals = metaDatas.filter(metadata => metadata.key !== md.key)\n setVals(newVals)\n onChangeMetadata(newVals)\n }\n\n const addMetaDataLocal = (metaDatas: Array) => {\n const newVals = [...metaDatas, { key: '', value: '' }]\n setVals(newVals)\n onChangeMetadata(newVals)\n }\n\n return editing ? (\n \n {({\n form: { values } // also touched, errors, setXXXX, handleXXXX, dirty, isValid, status, etc.\n }) => (\n \n \n \n \n \n {intl.formatMessage({\n id: 'editDatasetForm.metadata.editing'\n })}\n \n \n \n \n addMetaDataLocal(values.metadata)}\n >\n {intl.formatMessage({ id: 'editDatasetForm.metadata.create' })}\n \n \n \n addMetaDataLocal(values.metadata)}\n >\n \n \n \n \n {vals.map((val: IMetaData, index: number) => (\n \n \n \n \n \n \n \n \n removeMetaDataLocal(val, values.metadata)}\n >\n \n \n \n \n ))}\n \n )}\n \n ) : (\n \n \n \n \n \n {intl.formatMessage({ id: 'editDatasetForm.metadata.current' })}\n \n \n \n \n setEditing()}>\n {intl.formatMessage({ id: 'editDatasetForm.metadata.setEditing' })}\n \n \n \n \n {vals.map((val: IMetaData, index) => (\n \n \n \n {val.key}\n \n \n \n \n {val.value}\n \n \n \n ))}\n \n )\n}\n\nexport default EditMetadata\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { Formik, Form } from 'formik'\nimport { compose } from 'recompose'\nimport { injectIntl, FormattedMessage } from 'react-intl'\nimport merge from 'lodash/fp/merge'\nimport EditMetadata from './EditMetadata'\nimport { withStyles } from '@material-ui/core'\nimport Grid from '@material-ui/core/Grid'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button'\nimport messages from '../../shared/messages'\nimport TextField from '../formik/TextField'\n\nconst defaultInitialValues = {\n name: '',\n description: '',\n metadata: []\n}\n\n/* Did not get it to work...\nconst validationSchema = Yup.object().shape({\n name: Yup.string().required('Required'),\n description: Yup.string(),\n metadata: Yup.array()\n .of(\n Yup.object({\n key: Yup.string().required('Required').matches(/^[A-Za-z0-9_]+$/g, \"Only latin characters\"),\n value: Yup.string().required('Required')\n })\n ) \n}) */\n\nconst validateForm = values => {\n const errors = {}\n const REQUIRED = 'Required'\n const INVALIDKEY = 'Invalid key'\n const UNIQUEKEY = 'Key not unique'\n\n if (!values.name) {\n errors.name = REQUIRED\n }\n if (values.metadata && values.metadata.length > 0) {\n const metadata = []\n const keys = values.metadata.map(md => md.key)\n\n values.metadata.forEach(md => {\n const sameKeys = keys.filter(existingKey => existingKey === md.key)\n const keyMessage =\n md.key.length === 0\n ? REQUIRED\n : !/^[A-Za-z0-9_]+$/g.test(md.key)\n ? INVALIDKEY\n : sameKeys.length > 1\n ? UNIQUEKEY\n : ''\n const errorMessage = {\n key: keyMessage,\n value: md.value.length > 0 ? '' : REQUIRED\n }\n metadata.push(errorMessage)\n })\n const check = metadata.filter(\n md =>\n md.value === REQUIRED || md.key === INVALIDKEY || md.key === UNIQUEKEY\n )\n if (check.length > 0) {\n errors.metadata = metadata\n }\n }\n\n return errors\n}\n\nconst styles = theme => ({\n closeButton: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1)\n },\n submitButton: {\n width: theme.spacing(39) // width of shared mike-sliding-panel (360px) - left and right padding (24px each)\n }\n})\n\nconst EditDatasetForm = ({ classes, initialValues, intl, onSubmit }) => {\n const mergedInitialValues = merge(defaultInitialValues, initialValues)\n\n const values = {\n name: mergedInitialValues.name,\n description: mergedInitialValues.description,\n metadata: Object.entries(mergedInitialValues.metadata).map(\n ([key, value]) => ({\n key,\n value: typeof value === 'object' ? JSON.stringify(value) : value\n })\n )\n }\n\n const onUpdate = values => {\n const metas = values.metadata.map(({ key, value }) => [key, value])\n const md = Object.fromEntries(metas)\n const updatedValues = {\n ...mergedInitialValues,\n name: values.name,\n description: values.description,\n metadata: md\n }\n onSubmit(updatedValues)\n }\n\n const [editingMetadata, setEditingMetdata] = useState(false)\n\n const handleSetEditMetadata = () => {\n setEditingMetdata(true)\n }\n\n return (\n {\n const { setFieldValue } = formikProps\n const handleChangeMetadata = metaDatas => {\n setFieldValue('metadata', metaDatas)\n }\n\n return (\n
\n \n \n \n \n\n \n \n \n\n \n\n \n \n \n \n \n \n
\n )\n }}\n />\n )\n}\nEditDatasetForm.propTypes = {\n classes: PropTypes.object.isRequired,\n initialValues: PropTypes.object.isRequired,\n intl: PropTypes.object.isRequired,\n onSubmit: PropTypes.func.isRequired\n}\n\nconst enhance = compose(injectIntl, withStyles(styles))\n\nexport default enhance(EditDatasetForm)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { FieldArray } from 'formik'\nimport map from 'lodash/map'\nimport uniqBy from 'lodash/uniqBy'\nimport Chip from '@material-ui/core/Chip'\nimport Avatar from '@material-ui/core/Avatar'\nimport CircularProgress from '@material-ui/core/CircularProgress'\nimport Grid from '@material-ui/core/Grid'\nimport AppPropTypes from '../../shared/appPropTypes'\nimport { getNameInitials } from '../../helpers/common'\nimport { ROLE_TYPES } from '../../helpers/project'\nimport Tooltip from '@material-ui/core/Tooltip'\n\nimport withFormik from './withFormik'\nimport SelectField from './SelectField'\n\nconst ProjectMembersField = ({ name, loading, value, disabled }) => {\n const members = uniqBy(value, 'userId')\n\n return loading ? (\n
\n \n
\n ) : (\n \n {arrayHelpers => (\n \n {map(members, (member, index) => (\n arrayHelpers.remove(index)}\n />\n ))}\n \n )}\n \n )\n}\nProjectMembersField.propTypes = {\n disabled: PropTypes.bool,\n name: PropTypes.string.isRequired,\n loading: PropTypes.bool,\n value: PropTypes.arrayOf(AppPropTypes.projectMember)\n}\n\n// TODO: missing reader color like in ProjectMembers\nconst colorByRole = role =>\n role === ROLE_TYPES.OWNER\n ? 'primary'\n : role === ROLE_TYPES.CONTRIBUTOR\n ? 'secondary'\n : undefined\n\nconst MemberListItem = ({ name, index, member, disabled, onDelete }) => {\n const { name: displayName, role } = member\n const initials = getNameInitials(displayName)\n const roleFieldName = `${name}[${index}].role`\n\n if (member.type === 'OpenAPIAccount') {\n return (\n \n \n {initials}}\n label={displayName ? displayName : 'Deleted User'}\n onDelete={disabled ? null : onDelete}\n />\n \n \n ({\n name: role\n }))}\n required={!disabled}\n fullWidth\n />\n \n \n )\n } else {\n return (\n \n \n \n {initials}}\n label={displayName ? displayName : 'Deleted User'}\n onDelete={disabled ? null : onDelete}\n />\n \n \n ({\n name: role\n }))}\n required={!disabled}\n fullWidth\n />\n \n \n \n )\n }\n}\nMemberListItem.propTypes = {\n disabled: PropTypes.bool,\n index: PropTypes.number.isRequired,\n member: AppPropTypes.projectMember,\n name: PropTypes.string.isRequired,\n onDelete: PropTypes.func.isRequired\n}\n\nexport default withFormik(ProjectMembersField)\n","import each from 'lodash/each'\nimport first from 'lodash/first'\nimport last from 'lodash/last'\n\nexport const isNumeric = n => {\n return !isNaN(parseFloat(n)) && isFinite(n)\n}\n\nexport const bindCallbackToPromise = () => {\n let _resolve\n let _reject\n\n const promise = () =>\n new Promise((resolve, reject) => {\n _resolve = resolve\n _reject = reject\n })\n\n const cb = (error, result) => (error ? _reject(error) : _resolve(result))\n\n return {\n promise,\n cb\n }\n}\n\nexport const cleanLocation = () => {\n if (cleanUri(window.location.href) !== cleanUri(window.location.origin)) {\n window.location.href = window.location.origin\n }\n}\n\nexport const cleanUri = uri =>\n uri.endsWith('/') ? uri.substring(0, uri.length - 1) : uri\n\nexport const replaceAll = map => obj => {\n each(obj, (v, k) => {\n if (map[k]) {\n obj[k] = map[k]\n } else if (typeof v === 'object') {\n replaceAll(map)(v)\n }\n })\n return obj\n}\n\nexport const getNameInitials = fullName => {\n if (!fullName) {\n return '??'\n }\n\n const parts = fullName.split(' ')\n return first(parts)[0] + last(parts)[0]\n}\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { injectIntl, defineMessages } from 'react-intl'\nimport { compose } from 'recompose'\nimport { Formik, Form } from 'formik'\nimport merge from 'lodash/merge'\nimport objectHash from 'object-hash'\nimport { useDispatch } from 'react-redux'\nimport { withStyles } from '@material-ui/core'\nimport Grid from '@material-ui/core/Grid'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button'\nimport Autocomplete from '@material-ui/lab/Autocomplete'\n\nimport AppPropTypes from '../../shared/appPropTypes'\nimport messages from '../../shared/messages'\nimport { ROLE_TYPES, ACCESS_LEVELS } from '../../helpers/project'\n\nimport TextField from '../formik/TextField'\nimport ProjectMembersField from '../formik/ProjectMembersField'\nimport { TextField as MuiTextField } from '@material-ui/core'\nimport { loadProjectMembers } from '../../actions/project'\nimport { useTypedSelector } from '../../reducers'\nimport { loadCustomerUsers } from '../../actions/customerUsers'\n\nconst defaultInitialValues = {\n name: '',\n description: '',\n accessLevel: ACCESS_LEVELS.SHARED,\n members: []\n}\n\nconst validateForm = values => {\n const errors = {}\n\n if (!values.name) {\n errors.name = 'Required'\n }\n\n return errors\n}\n\nconst localMessages = defineMessages({\n membersPlaceholder: {\n id: 'createProjectForm.members.placeholder'\n },\n createProjectButton: {\n id: 'createProjectForm.createProjectButton'\n },\n editProjectButton: {\n id: 'createProjectForm.editProjectButton'\n },\n createSubprojectButton: {\n id: 'createProjectForm.createSubprojectButton'\n },\n editSubprojectButton: {\n id: 'createProjectForm.editSubprojectButton'\n }\n})\n\nconst styles = theme => ({\n closeButton: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1)\n },\n submitButton: {\n float: 'right'\n }\n})\n\nconst CreateProjectForm = props => {\n const {\n classes,\n editing = false,\n intl,\n initialValues,\n loadingCustomerUsers = false,\n loadingProjectMembers = false,\n onSubmit,\n isSubProject = false,\n isFolder = false,\n user\n } = props\n\n const customerUsers = useTypedSelector(state => state['customerUsers'].data)\n const tenantId = useTypedSelector(state => state['auth'].user?.tenantId)\n\n const mergedInitialValues = editing\n ? {\n ...merge({}, defaultInitialValues, initialValues),\n members: initialValues.members ?? []\n }\n : {\n ...defaultInitialValues,\n members: []\n }\n\n const [customerUsersArray, setCustomerUsersArray] = useState([])\n\n const dispatch = useDispatch()\n\n useEffect(() => {\n if (!customerUsers || Object.keys(customerUsers).length === 0) {\n dispatch(loadCustomerUsers(tenantId))\n }\n }, [])\n\n useEffect(() => {\n if (initialValues?.id) {\n dispatch(loadProjectMembers(initialValues.id))\n }\n }, [dispatch, initialValues?.id])\n\n useEffect(() => {\n const loggedInUserId = user.id\n const users = Object.values(customerUsers)\n // NOTE: on creation the logged-in user cannot be added as a member because the API will fail\n editing\n ? setCustomerUsersArray(users)\n : setCustomerUsersArray(users.filter(u => u.userId !== loggedInUserId))\n }, [customerUsers, editing, user])\n\n const { canEdit = true, canGrantAccess = true } = editing\n ? initialValues.capabilities\n : {}\n\n return (\n \n {formik => {\n const {\n handleSubmit,\n setFieldValue,\n handleChange,\n setFieldTouched,\n values,\n errors\n } = formik\n\n const change = (name, e) => {\n e.persist()\n handleChange(e)\n setFieldTouched(name, true, false)\n }\n\n const onSelectedCustomerChange = (_event, newCustomer) => {\n if (newCustomer) {\n let role = newCustomer.role\n if (!role) {\n role =\n newCustomer.id === user.id\n ? ROLE_TYPES.OWNER\n : ROLE_TYPES.READER\n }\n const item = values?.members?.find(\n el => el.userId === newCustomer.userId\n )\n\n const member = { ...newCustomer, userId: newCustomer.id }\n\n if (!item) {\n setFieldValue('members', [\n ...values.members,\n { ...member, role: role }\n ])\n }\n }\n }\n\n return (\n
\n \n \n \n \n\n \n \n \n\n \n {canGrantAccess && (\n option.name}\n onChange={onSelectedCustomerChange}\n renderInput={params => (\n \n )}\n renderOption={params => params.name}\n />\n )}\n\n \n \n \n \n {editing\n ? isSubProject\n ? intl.formatMessage(localMessages.editSubprojectButton)\n : intl.formatMessage(localMessages.editProjectButton)\n : isSubProject\n ? intl.formatMessage(localMessages.createSubprojectButton)\n : intl.formatMessage(\n isFolder\n ? localMessages.createSubprojectButton\n : localMessages.createProjectButton\n )}\n \n \n \n
\n )\n }}\n \n )\n}\nCreateProjectForm.propTypes = {\n classes: PropTypes.object.isRequired,\n editing: PropTypes.bool,\n intl: PropTypes.object.isRequired,\n initialValues: PropTypes.object,\n loadingCustomerUsers: PropTypes.bool,\n loadingProjectMembers: PropTypes.bool,\n onSubmit: PropTypes.func.isRequired,\n isSubProject: PropTypes.bool,\n isFolder: PropTypes.bool,\n user: AppPropTypes.user.isRequired\n}\n\nconst enhance = compose(injectIntl, withStyles(styles))\n\nexport default enhance(CreateProjectForm)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\nimport Tooltip from '@material-ui/core/Tooltip'\n\nconst DateTime = ({ jsonTime }) => {\n const local = moment\n .utc(jsonTime)\n .local()\n .toDate()\n\n return (\n \n
\n {moment(local).format('DD MMM YYYY')}\n
\n
\n )\n}\n\nDateTime.propTypes = {\n jsonTime: PropTypes.string.isRequired\n}\n\nexport default React.memo(DateTime)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { makeStyles } from '@material-ui/core/styles'\nimport MikeTooltip from '@mike/mike-shared-frontend/mike-tooltip/MikeTooltip'\n\nconst useStyles = makeStyles({\n longText: {\n maxWidth: '25vw',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'table-cell',\n paddingRight: 8\n }\n})\n\nconst LongText = ({ longText }) => {\n const classes = useStyles()\n\n return (\n \n
{longText}
\n
\n )\n}\n\nLongText.propTypes = {\n longText: PropTypes.string\n}\n\nexport default React.memo(LongText)\n","import React, { useMemo, useState, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport { injectIntl } from 'react-intl'\nimport { compose, withProps, defaultProps } from 'recompose'\nimport { useHistory } from 'react-router-dom'\nimport capitalize from 'lodash/capitalize'\nimport AppPropTypes from '../../shared/appPropTypes'\nimport messages from '../../shared/messages'\nimport DataTable, { columnPropType } from '../DataTable'\nimport Renders from '../DataTable/renders'\nimport DataTableRenders from '../DataTable/renders'\nimport DateTime from '../DataTable/renders/DateTime'\nimport LongText from '../DataTable/renders/LongText'\nimport LongName from '../DataTable/renders/LongName'\nimport { CONVERT_TYPE } from '../../helpers/convert'\nimport { DOWNLOAD_TYPE } from '../../helpers/export'\nimport { ReactComponent as DataSet } from '@mike/mike-shared-frontend/media/icons/DataSet'\nimport { ReactComponent as Folder } from '@mike/mike-shared-frontend/media/icons/Folder'\nimport { css } from 'emotion'\nimport { getCapabilities } from '../../apis/project'\nimport { useTypedSelector } from '../../reducers'\nimport { isDataset } from './../../helpers/projectContent'\n\nconst ProjectContentTable = props => {\n const {\n projectContent,\n loading,\n selectedItems,\n onSelectionChange,\n onDelete,\n onEdit,\n onConvert,\n onDownload,\n onHandleRequestSort,\n _columns,\n topOffset,\n parentCapabilities,\n processDroppedFiles,\n onChangePage,\n onChangeRowsPerPage,\n page,\n rowsPerPage,\n totalCount,\n sortBy,\n sortOrder\n } = props\n\n const history = useHistory()\n const tenantId = useTypedSelector(state => state.auth?.user?.tenantId) || ''\n\n const [capabilities, setCapabilities] = useState({})\n\n const fetchCapabilitiesIfNeeded = useCallback(\n item => {\n if (\n !isDataset(item) &&\n (capabilities[item.id] === null || capabilities[item.id] === undefined)\n ) {\n return getCapabilities(item.id, tenantId).then(newCap => {\n setCapabilities({ ...capabilities, [item.id]: newCap })\n return newCap\n })\n }\n\n return new Promise(resolve => {\n resolve(capabilities[item.id])\n })\n },\n [capabilities, tenantId]\n )\n\n const actionPopupStateChange = (open, row) => {\n if (open) {\n fetchCapabilitiesIfNeeded(row)\n }\n }\n\n const onSelectionChangeWrapper = items => {\n items.forEach(item => {\n fetchCapabilitiesIfNeeded(item)\n })\n onSelectionChange(items)\n }\n\n const onColumnClick = React.useCallback(\n item => {\n fetchCapabilitiesIfNeeded(item).then(cap => {\n if (cap?.canListContent) {\n history.push(`/project/${item.id}`)\n }\n })\n },\n [fetchCapabilitiesIfNeeded, history]\n )\n\n const items = useMemo(() => {\n return projectContent.map(item => {\n return {\n ...item,\n capabilities: capabilities[item.id] || null\n }\n })\n }, [projectContent, capabilities])\n\n return (\n \n )\n}\nProjectContentTable.propTypes = {\n projectContent: PropTypes.arrayOf(AppPropTypes.dataset),\n selectedItems: PropTypes.arrayOf(AppPropTypes.dataset),\n loading: PropTypes.bool,\n onSelectionChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onEdit: PropTypes.func.isRequired,\n onConvert: PropTypes.func.isRequired,\n onDownload: PropTypes.func.isRequired,\n onHandleRequestSort: PropTypes.func.isRequired,\n _columns: PropTypes.arrayOf(columnPropType).isRequired,\n topOffset: PropTypes.number,\n parentCapabilities: PropTypes.object,\n processDroppedFiles: PropTypes.func.isRequired,\n page: PropTypes.number.isRequired,\n rowsPerPage: PropTypes.number.isRequired,\n onChangePage: PropTypes.func.isRequired,\n onChangeRowsPerPage: PropTypes.func.isRequired,\n totalCount: PropTypes.number.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired\n}\n\nconst formatRender = value => {\n return value ? capitalize(value) : 'Folder'\n}\n\nconst longTextRender = value => \n\nconst itemNameRender = (value, item) => (\n \n)\n\nconst dateTimeRender = value => \n\nconst hoverStyle = item => {\n const className =\n 'datasetType' in item\n ? null\n : css`\n &:hover {\n cursor: pointer;\n }\n `\n return className\n}\n\nconst enhance = compose(\n injectIntl,\n\n defaultProps({\n searchText: '',\n loading: false\n }),\n\n withProps(({ intl }) => ({\n _columns: [\n {\n field: 'name',\n label: intl.formatMessage(messages.name),\n render: itemNameRender,\n className: hoverStyle\n },\n {\n field: 'description',\n label: intl.formatMessage(messages.description),\n render: longTextRender,\n className: hoverStyle\n },\n {\n field: 'datasetType',\n label: intl.formatMessage(messages.type),\n render: formatRender,\n className: hoverStyle\n },\n {\n field: 'datasetFormat',\n label: intl.formatMessage(messages.format),\n render: formatRender,\n className: hoverStyle\n },\n {\n field: 'storageSize',\n label: intl.formatMessage(messages.size),\n render: DataTableRenders.size(1024),\n className: hoverStyle\n },\n {\n field: 'createdAt',\n label: intl.formatMessage(messages.createdAt),\n render: dateTimeRender,\n className: hoverStyle\n },\n {\n field: 'updatedAt',\n label: intl.formatMessage(messages.editedAt),\n render: dateTimeRender,\n className: hoverStyle\n }\n ]\n }))\n)\n\nexport default enhance(ProjectContentTable)\n","import { connect } from 'react-redux'\nimport { createSelector } from 'reselect'\nimport { compose, lifecycle } from 'recompose'\nimport { withRouter } from 'react-router-dom'\nimport { loadCoordinateSystems } from '../actions/coordinateSystems'\nimport { loadProjectContent } from '../actions/project'\n\nimport {\n getProjectContent,\n getLoadingProjectDatasets,\n getLoadingProjectSubprojects,\n getProjectPagination,\n getProjectRowsPerPage,\n getProjectContentTotalCount,\n getProjectContentSortBy,\n getProjectContentSortOrder\n} from '../state'\n\nimport ProjectContentTable from '../components/ProjectContentTable'\n\nconst mapStateToProps = createSelector(\n [\n getProjectContent,\n getLoadingProjectDatasets,\n getLoadingProjectSubprojects,\n getProjectPagination,\n getProjectRowsPerPage,\n getProjectContentTotalCount,\n getProjectContentSortBy,\n getProjectContentSortOrder\n ],\n (\n projectContent,\n loadingDatasets,\n loadingSubprojects,\n page,\n rowsPerPage,\n totalCount,\n sortBy,\n sortOrder\n ) => ({\n projectContent,\n loading: loadingDatasets || loadingSubprojects,\n page,\n rowsPerPage,\n totalCount,\n sortBy,\n sortOrder\n })\n)\n\nconst enhance = compose(\n withRouter,\n\n connect(mapStateToProps, dispatch => ({ dispatch })),\n\n lifecycle({\n componentDidMount() {\n this.props.dispatch(loadProjectContent(this.props.match.params.id))\n this.props.dispatch(loadCoordinateSystems())\n },\n componentDidUpdate(prevProps) {\n if (prevProps.match.params.id !== this.props.match.params.id) {\n this.props.dispatch(loadProjectContent(this.props.match.params.id))\n }\n }\n })\n)\n\nexport default enhance(ProjectContentTable)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { makeStyles } from '@material-ui/core/styles'\nimport TreeView from '@material-ui/lab/TreeView'\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore'\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight'\nimport TreeItem from '@material-ui/lab/TreeItem'\nimport { mikePalette } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport Tooltip from '@material-ui/core/Tooltip'\nimport uniq from 'lodash/uniq'\n\nconst useStyles = makeStyles({\n root: {\n height: 216,\n flexGrow: 1,\n maxWidth: 400\n }\n})\n\nconst useTreeItemStyles = makeStyles({\n root: {\n color: mikePalette.primary.main,\n '&:hover > $content': {\n backgroundColor: mikePalette.secondary.light\n },\n '&:focus > $content, &$selected > $content': {\n backgroundColor: mikePalette.primary.main,\n color: mikePalette.secondary.contrastText\n },\n '&:focus > $content $label, &:hover > $content $label, &$selected > $content $label': {\n backgroundColor: 'transparent'\n }\n },\n label: {\n color: 'inherit'\n },\n selected: {},\n expanded: {},\n disabled: {\n color: mikePalette.primary.light\n }\n})\n\nconst ProjectsTree = ({\n onExpand,\n onSelect,\n projectTree,\n selectedIds,\n disabledIds,\n parentId,\n parentIdTooltip,\n tooltip,\n selectedItemTooltip\n}) => {\n const classes = useStyles()\n const itemClasses = useTreeItemStyles()\n\n const allDisabledIds = uniq(\n [parentId].concat(selectedIds).concat(disabledIds)\n )\n\n const handleChange = (event, nodeIds) => {\n event.preventDefault()\n\n if (nodeIds[0] !== 'project' && !selectedIds.includes(nodeIds[0])) {\n onExpand(nodeIds[0])\n }\n }\n\n const handleSelect = (event, nodeId) => {\n event.preventDefault()\n const selectedId = allDisabledIds.includes(nodeId) ? null : nodeId\n onSelect(selectedId)\n }\n\n const getTooltip = id => {\n if (parentId === id) return parentIdTooltip\n\n if (disabledIds.includes(id)) return tooltip\n\n if (selectedIds.includes(id)) return selectedItemTooltip\n\n return null\n }\n\n const renderTree = children => {\n return children?.map((child, index) => {\n const childrenNodes =\n projectTree[child.id]?.length > 0\n ? renderTree(projectTree[child.id])\n : [
]\n\n const tip = getTooltip(child.id)\n const disabled = tip !== null\n\n return (\n \n {child.name}\n \n ) : (\n
{child.name}
\n )\n }\n classes={{\n root: disabled ? itemClasses.disabled : itemClasses.root,\n label: disabled ? itemClasses.disabled : itemClasses.label,\n selected: disabled ? itemClasses.disabled : itemClasses.selected,\n expanded: disabled ? itemClasses.disabled : itemClasses.selected\n }}\n >\n {childrenNodes}\n \n )\n })\n }\n\n return (\n }\n expanded={projectTree && Object.keys(projectTree)}\n defaultExpandIcon={}\n onNodeToggle={handleChange}\n onNodeSelect={handleSelect}\n >\n {projectTree && projectTree.project && renderTree(projectTree.project)}\n \n )\n}\n\nProjectsTree.propTypes = {\n projectTree: PropTypes.object,\n selectedIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n disabledIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n parentId: PropTypes.string,\n parentIdTooltip: PropTypes.string.isRequired,\n selectedItemTooltip: PropTypes.string.isRequired,\n tooltip: PropTypes.string.isRequired,\n onExpand: PropTypes.func.isRequired,\n onSelect: PropTypes.func.isRequired\n}\n\nexport default ProjectsTree\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { useIntl } from 'react-intl'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport IconButton from '@material-ui/core/IconButton'\nimport CloseIcon from '@material-ui/icons/Close'\n\nimport DialogTitle from '@material-ui/core/DialogTitle'\nimport DialogContent from '@material-ui/core/DialogContent'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport Dialog from '@material-ui/core/Dialog'\nimport MikeColors from '@mike/mike-shared-frontend/mike-shared-styles/mike-colors'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button'\nimport ProjectsTree from '../ProjectsTree'\nimport CircularProgress from '@material-ui/core/CircularProgress'\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n closeButton: {\n marginLeft: theme.spacing(1)\n },\n button: {\n margin: theme.spacing(1)\n },\n dialog: {\n minWidth: 560,\n maxHeight: 590\n // padding: theme.spacing(3)\n },\n dialogContent: {\n maxHeight: 542,\n overflowY: 'auto',\n scrollbarWidth: 'thin',\n scrollbarColor: MikeColors.DARKGREY_DEFAULT + ' ' + MikeColors.WHITE,\n '&::-webkit-scrollbar': {\n width: 24,\n borderRadius: '4px 4px'\n },\n '&::-webkit-scrollbar-track': {\n borderRadius: '4px 4px',\n backgroundColor: MikeColors.MEDIUMGREY_LIGHT,\n borderRight: '8px solid ' + MikeColors.WHITE,\n borderLeft: '12px solid ' + MikeColors.WHITE\n },\n '&::-webkit-scrollbar-thumb': {\n borderRadius: '4px 4px',\n backgroundColor: MikeColors.DARKGREY_DEFAULT,\n borderRight: '8px solid ' + MikeColors.WHITE,\n borderLeft: '12px solid ' + MikeColors.WHITE,\n '&:hover': {\n borderRight: '8px solid ' + MikeColors.WHITE,\n borderLeft: '12px solid ' + MikeColors.WHITE\n }\n }\n }\n })\n)\n\nfunction ProjectsTreeDialog({\n onExpand,\n open,\n onClose,\n onMove,\n projectTree,\n selectedIds,\n disabledIds,\n loadingInitialTree,\n parentId\n}) {\n const intl = useIntl()\n const classes = useStyles()\n\n const [selectedProjectId, setSelectedProjectId] = React.useState(null)\n\n const selectedTooltip = intl.formatMessage({\n id: 'projectTree.tooltip.selected'\n })\n\n const parentTooltip = intl.formatMessage({ id: 'projectTree.tooltip.parent' })\n\n const tooltip =\n selectedIds?.length > 1\n ? intl.formatMessage({ id: 'projectTree.tooltip.plural' })\n : intl.formatMessage({ id: 'projectTree.tooltip.singular' })\n\n const title =\n selectedIds?.length > 1\n ? intl.formatMessage({ id: 'projectTreeDialog.heading.title.plural' })\n : intl.formatMessage({ id: 'projectTreeDialog.heading.title.singular' })\n\n const handleMove = () => {\n onMove(selectedProjectId)\n }\n\n return (\n \n \n {title}\n \n \n \n \n \n {loadingInitialTree ? (\n \n ) : (\n \n )}\n \n \n \n Cancel\n \n \n {intl.formatMessage({ id: 'projectTreeDialog.moveButton.label' })}\n \n \n \n )\n}\n\nProjectsTreeDialog.propTypes = {\n onExpand: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n onMove: PropTypes.func.isRequired,\n open: PropTypes.bool.isRequired,\n projectTree: PropTypes.object,\n selectedIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n disabledIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n loadingInitialTree: PropTypes.bool.isRequired,\n parentId: PropTypes.string\n}\n\nexport default ProjectsTreeDialog\n","import { makeStyles, createStyles } from '@material-ui/core'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { PaletteColor } from '@material-ui/core/styles/createPalette'\n\nexport const useDialogContentStyles = makeStyles((theme: IMikeTheme) => {\n const mediumGrey = theme.palette.mediumGrey as PaletteColor\n const darkGrey = theme.palette.darkGrey as PaletteColor\n return createStyles({\n dialogContent: {\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(10),\n minWidth: theme.spacing(70),\n borderRadius: 4,\n backgroundColor: theme.palette.background.paper,\n overflowY: 'auto',\n scrollbarWidth: 'thin',\n scrollbarColor: `${darkGrey.main} ${mediumGrey.main}`,\n '&::-webkit-scrollbar': {\n width: 10,\n borderRadius: '4px 4px',\n zIndex: 1\n },\n '&::-webkit-scrollbar-thumb': {\n borderRadius: '4px 4px',\n backgroundColor: darkGrey.main,\n zIndex: 1\n }\n },\n dialogActions: {\n zIndex: 11,\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.background.paper,\n boxShadow: '0px -4px 4px rgba(0, 0, 0, 0.16)',\n height: theme.spacing(8),\n width: '100%'\n },\n button: {\n margin: theme.spacing(1)\n },\n form: {\n padding: theme.spacing(0)\n },\n title: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(1),\n paddingTop: theme.spacing(1)\n }\n })\n})\n","import React, { useState } from 'react'\nimport classNames from 'classnames'\nimport { makeStyles, createStyles, Collapse } from '@material-ui/core'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport IProjection from './model/IProjection'\nimport Button from '@material-ui/core/Button'\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n detail: {\n fontSize: '0.8em'\n },\n code: {\n fontSize: '0.8em'\n },\n noDetail: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline'\n },\n button: {\n height: theme.spacing(0.5),\n fontSize: '0.8em'\n },\n label: {\n fontWeight: 'bold'\n },\n section: {\n whiteSpace: 'normal',\n wordBreak: 'break-all'\n },\n expandedSection: {\n maxWidth: '50vw'\n }\n })\n})\n\ninterface IProps {\n item: IProjection\n}\n\nconst formatWkt = (wkt: string) => wkt.trim().replace(/"/g, '\"')\n\nconst ProjectionDetails = (props: IProps) => {\n const classes = useStyles(props)\n const { item } = props\n\n const [open, setOpen] = useState(false)\n\n const changeOpen = (open: boolean) => (event: any) => {\n event.stopPropagation()\n setOpen(open)\n }\n\n const wkt = formatWkt(item.wkt)\n const proj4String = item.proj4String.trim()\n\n return (\n
\n {open ? (\n \n
\n
\n \n \n {wkt}\n \n
\n\n
\n \n \n {proj4String}\n \n \n
\n
\n
\n ) : (\n
\n
Code: {item.id}
\n \n
\n )}\n
\n )\n}\n\nexport default ProjectionDetails\n","import { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { makeStyles, createStyles } from '@material-ui/core'\n\nexport const useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n /* Styles applied to the option elements. */\n option: {\n overflowX: 'hidden'\n },\n /* Styles applied to the `listbox` component. */\n listbox: {\n maxHeight: '20vh'\n },\n primary: {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n }\n })\n})\n","import React, { ChangeEvent, useRef } from 'react'\nimport debounce from 'lodash/debounce'\nimport size from 'lodash/size'\nimport Autocomplete from '@material-ui/lab/Autocomplete'\nimport { TextField, CircularProgress, ListItemText } from '@material-ui/core'\nimport SearchOutlinedIcon from '@material-ui/icons/SearchOutlined'\nimport IProjection from './model/IProjection'\nimport { useMounted } from '../../../helpers/hooks'\nimport ProjectionDetails from './ProjectionDetails'\nimport { useStyles } from './styles'\nimport { Field } from 'formik'\n\nexport interface ITextResources {\n code: string\n label: string\n loading: string\n noData: string\n placeholder: string\n}\n\ninterface IProps {\n /**\n * Name property to be used by the formik field\n */\n name: string\n /**\n * Text input change callback (to fetch respective projections)\n */\n onProjectionSearchTextChanged: (searchText: string) => void\n /**\n * Projections matching search string (to be updated by onProjectionSearchTextChanged)\n */\n projections: IProjection[]\n /**\n * Loading state\n */\n projectionsLoading: boolean\n /**\n * Set to true to use projection id in getOptionLabel (otherwise projection name is taken)\n */\n searchById?: boolean\n /**\n * To overwrite text resources like e.g. input field label\n */\n textResources?: ITextResources\n}\n\nconst COORDINATE_SYSTEM_SEARCH_TEXT_MIN_LEN = 3\n//const COORDINATE_SYSTEM_MAX_DESCRIPTION_LEN = 30\n\n/**\n * An autocomplete component to select projection systems by id or name wrapped into a formik field\n */\nconst ProjectionSelect = (props: IProps) => {\n const classes = useStyles()\n const {\n name,\n onProjectionSearchTextChanged,\n projectionsLoading,\n projections,\n searchById,\n textResources = {\n code: 'Authority code',\n label: 'Current projection system',\n loading: 'Loading...',\n noData: 'No projection found',\n placeholder: 'Type at least 3 chars of code or name'\n }\n } = props\n\n const isMounted = useMounted()\n\n const debouncedSave = useRef(\n debounce(newSearchText => onProjectionSearchTextChanged(newSearchText), 500)\n ).current\n\n /**\n * Callback for when the projection search input has changed.\n * @param _event\n * @param newSearchText\n */\n const onProjectionInputChange = (_event, newSearchText) => {\n if (!isMounted) {\n return\n }\n\n if (size(newSearchText) >= COORDINATE_SYSTEM_SEARCH_TEXT_MIN_LEN) {\n debouncedSave(newSearchText)\n }\n }\n\n return (\n \n {({ form: { setFieldValue } }) => (\n \n searchById ? option.id.toString() : option.name\n }\n getOptionSelected={(option, value) => {\n return option.id === value.id\n }}\n onChange={(\n _event: ChangeEvent<{}>,\n newProjection: IProjection | null\n ) => {\n setFieldValue(name, newProjection && newProjection.id)\n }}\n onInputChange={onProjectionInputChange}\n noOptionsText={textResources.noData}\n loadingText={textResources.loading}\n selectOnFocus={true}\n forcePopupIcon={false}\n clearOnEscape={true}\n disableListWrap={true}\n renderOption={params => (\n }\n />\n )}\n renderInput={params => (\n \n \n {params.InputProps.startAdornment}\n \n ),\n endAdornment: (\n <>\n {projectionsLoading ? (\n \n ) : null}\n {params.InputProps.endAdornment}\n \n )\n }}\n InputLabelProps={{\n ...params.InputLabelProps\n }}\n />\n )}\n />\n )}\n \n )\n}\n\nexport default ProjectionSelect\n","import React from 'react'\n\nexport const useWhenDone = (doneCondition, onDoneCallback) => {\n const readyRef = React.useRef(doneCondition)\n\n React.useEffect(() => {\n if (readyRef.current && !doneCondition) {\n onDoneCallback()\n }\n readyRef.current = doneCondition\n }, [doneCondition, onDoneCallback])\n}\n\nexport const useMounted = () => {\n const mounted = React.useRef(false)\n\n React.useEffect(() => {\n mounted.current = true\n return () => {\n mounted.current = false\n }\n }, [])\n\n return mounted\n}\n","import { makeStyles, createStyles } from '@material-ui/core'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\n\nexport const useConversionStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n plusButton: {\n marginLeft: theme.spacing(-2.5)\n },\n plusButtonDisabled: {\n color: theme.palette.secondary.light\n },\n textField: {\n width: 200\n },\n marginTopArrow: {\n marginTop: theme.spacing(1.5)\n },\n marginTop: {\n marginTop: theme.spacing(2)\n },\n marginBottom: {\n marginBottom: theme.spacing(2)\n }\n })\n})\n","import { css } from 'emotion'\nimport { mikePalette } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\n\nexport const iconStyle = (disabled = false) => {\n const color = disabled\n ? mikePalette.secondary.light\n : mikePalette.secondary.main\n return css`\n path {\n fill: ${color};\n }\n `\n}\n","const readerWriterTranslations = {\n 'import.readers.AsciiReader': 'Ascii grid file (.asc, .ascii)',\n 'import.readers.AsciiReader.description': '(.asc, .ascii)',\n 'import.readers.CopernicusGlobalAnalysisForecast':\n 'Copernicus NetCDF file (.nc)',\n 'import.readers.CopernicusGlobalAnalysisForecast.description':\n 'Data from copernicus marine environment monitoring service',\n 'import.readers.CsvZipReader': 'ZIP file of time series and metadata (.zip)',\n 'import.readers.CsvZipReader.description':\n 'ZIP file with time series in CSV format, corresponding metadata and a flagsdef file in JSON format (.zip)',\n 'import.readers.CSVReader': 'File of comma seperated values (.csv)',\n 'import.readers.CSVReader.description': '(.csv)',\n 'import.readers.Dfs0Reader': 'Time series file (.dfs0)',\n 'import.readers.Dfs0Reader.description': '(.dfs0)',\n 'import.readers.Dfs1Reader': 'Profile series file (.dfs1)',\n 'import.readers.Dfs1Reader.description': '(.dfs1)',\n 'import.readers.Dfs2Reader': '2D Grid series file (.dfs2)',\n 'import.readers.Dfs2Reader.description': '(.dfs2)',\n 'import.readers.Dfs3Reader': '3D Grid series file (.dfs3)',\n 'import.readers.Dfs3Reader.description': '(.dfs3)',\n 'import.readers.DfsuReader': '2D or 3D unstructured data file (.dfsu)',\n 'import.readers.DfsuReader.description': '(.dfsu)',\n 'import.readers.FileReader': 'Unspecified file type',\n 'import.readers.FileReader.description': 'Arbitrary file',\n 'import.readers.GeoJsonReader': 'GeoJSON (.json)',\n 'import.readers.GeoJsonReader.description': '(.json)',\n 'import.readers.GeoTiffReader': 'GeoTIFF file (.tif, .tiff)',\n 'import.readers.GeoTiffReader.description': '(.tif, .tiff)',\n 'import.readers.GISReader': 'Gis vector data',\n 'import.readers.GISReader.description': 'Data from GIS storage',\n 'import.readers.HycomGLBa008Reader': 'Hycom glba0.08 file (.nc)',\n 'import.readers.HycomGLBa008Reader.description':\n 'NetCDF file containing hycom glba0.08 product',\n 'import.readers.HycomGLBv008Reader': 'Hycom glbv0.08 file (.nc)',\n 'import.readers.HycomGLBv008Reader.description':\n 'NetCDF file containing hycom glbv0.08 product',\n 'import.readers.HycomReader': 'Hycom file (.nc, .nc4)',\n 'import.readers.HycomReader.description':\n 'Netcdf file produced by Hycom - GLBa0.08, GLBv0.08, GLBy0.08',\n 'import.readers.inputParameters.AllowedItemNames': 'Items to be imported',\n 'import.readers.inputParameters.CoordinateInterpretationType':\n 'Coordinate interpretation',\n 'import.readers.inputParameters.QuantityMapItems': 'Quantity map items',\n 'import.readers.inputParameters.ZColumnIndex': 'Z',\n 'import.readers.inputParameters.ConnectColumnIndex': 'Connect',\n 'import.readers.GHMReader':\n 'ZIP file of Global hydrological model files (.zip)',\n 'import.readers.GHMReader.description': '(.zip)',\n 'import.readers.MeshFileReader': 'Mesh file (.mesh)',\n 'import.readers.MeshFileReader.description': '(.mesh)',\n 'import.readers.MDReader': 'Multidimensional dataset',\n 'import.readers.MDReader.description': 'File in the multidimensional storage',\n 'import.readers.NoaaGribReader':\n 'Noaa Grib file (.grb, .grb2, .grib, .grib2)',\n 'import.readers.NoaaGribReader.description':\n 'GFS/CFS NOAA files in GRIB2 format',\n 'import.readers.ShpReader': 'Shape file (.zip)',\n 'import.readers.ShpReader.description': '(.zip)',\n 'import.readers.TimeSeriesDfs0Reader': 'Time series multidimensional (.dfs0)',\n 'import.readers.TimeSeriesDfs0Reader.description': '(.dfs0)',\n 'import.readers.TimeSeriesReader': 'Time series storage reader',\n 'import.readers.TimeSeriesReader.description':\n 'Reads data from time series storage',\n 'import.readers.XyzReader': 'XYZ text file (.xyz)',\n 'import.readers.XyzReader.description':\n 'Text file with columns of x and y coordinates and elevation values (.xyz)',\n 'import.readers.VtuReader': 'VTK Unstructured Grid (.vtu)',\n 'import.readers.VtuReader.description':\n 'Visualization file (from Mesh Builder)',\n 'import.readers.VtiReader': 'VTK Image Data (.vti)',\n 'import.readers.VtiReader.description':\n 'Visualization file (from Mesh Builder)',\n 'import.writers.AsciiWriter': 'Ascii grid file (.asc, .ascii)',\n 'import.writers.AsciiWriter.description': '(.asc, .ascii)',\n 'import.writers.Dfs2Writer': '2D Grid series file (.dfs2)',\n 'import.writers.Dfs2Writer.description': '(.dfs2)',\n 'import.writers.DfsuWriter': '2D or 3D unstructured data file (.dfsu)',\n 'import.writers.DfsuWriter.description': '(.dfsu)',\n 'import.writers.file': 'Regular file (as-is)',\n 'import.writers.file.description':\n 'The file will be stored without modifications',\n 'import.writers.FileWriter': 'Regular file (as-is)',\n 'import.writers.FileWriter.description':\n 'The file will be stored without modifications',\n 'import.writers.GeoJsonWriter': 'GeoJSON (.json)',\n 'import.writers.GeoJsonWriter.description':\n 'Geographic data structures in json file',\n 'import.writers.GeoTiffWriter': 'GeoTiff file (.tif, .tiff)',\n 'import.writers.GeoTiffWriter.description': '(.tif, .tiff)',\n 'import.writers.GISWriter': 'Gis vector data',\n 'import.writers.GISWriter.description':\n 'Queryable file format useable in applications such as Mesh Builder',\n 'import.writers.MDWriter': 'Multidimensional dataset',\n 'import.writers.MDWriter.description':\n 'Upload the file to the multidimensional storage, which will allow you to do spatial and temporal queries',\n 'import.writers.NetcdfWriter': 'NetCDF file (.nc)',\n 'import.writers.NetcdfWriter.description': 'Network Common Data Form',\n 'import.writers.ShpWriter': 'Shape file (.zip)',\n 'import.writers.ShpWriter.description':\n 'Geospatial vector data format for geographic information system (GIS) software',\n 'import.writers.TilingWriter': 'Tiles',\n 'import.writers.TilingWriter.description': 'Tiles',\n 'import.writers.TimeSeriesCsvWriter':\n 'ZIP file of time series and metadata (.zip)',\n 'import.writers.TimeSeriesCsvWriter.description':\n 'ZIP file with time series in CSV format and corresponding metadata in JSON format (.zip)',\n 'import.writers.TimeSeriesDfs0Writer': 'Timeseries file (.dfs0)',\n 'import.writers.TimeSeriesDfs0Writer.description': '(.dfs0)',\n 'import.writers.TSWriter': 'Timeseries storage',\n 'import.writers.TSWriter.description': 'Writes into timeseries storage',\n 'import.writers.VtiWriter': 'VTK Image Data (.vti)',\n 'import.writers.VtiWriter.description':\n 'Visualization file format, often used in Mesh Builder',\n 'import.writers.VtuWriter': 'VTK Unstructured Grid (.vtu)',\n 'import.writers.VtuWriter.description':\n 'Visualization file format, often used in Mesh Builder',\n 'import.writers.outputParameters.UseSpatialIndex': 'Use spatial index',\n 'import.writers.outputParameters.TimeSeriesProperties':\n 'Time series properties',\n 'import.writers.outputParameters.WriteAsFloat': 'Write as float',\n 'import.writers.outputParameters.UseNetcdfVersion3': 'Use netcdf version 3',\n 'import.writers.outputParameters.ItemMap': 'Item map'\n}\n\nexport default readerWriterTranslations\n","import React from 'react'\nimport {\n makeStyles,\n createStyles,\n Popover,\n Typography\n} from '@material-ui/core'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport ButtonBase from '@material-ui/core/ButtonBase'\n\nimport { ReactComponent as Info } from '@mike/mike-shared-frontend/media/icons/Info'\nimport { iconPrimaryStyle } from '../buttons/iconStyles'\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n button: (props: IProps) => ({\n cursor: props.disabled ? 'default' : 'pointer'\n }),\n popover: {\n maxWidth: '75vw'\n },\n content: {\n padding: theme.spacing(2)\n }\n })\n})\n\ninterface IProps {\n helpTexts: string[]\n disabled?: boolean\n}\n\nconst ContextHelp = (props: IProps) => {\n const classes = useStyles(props)\n const { helpTexts, disabled } = props\n\n const [anchorEl, setAnchorEl] = React.useState(null)\n\n const handleClick = event => {\n event.stopPropagation()\n !disabled && setAnchorEl(event.currentTarget)\n }\n\n const handleClose = event => {\n event.stopPropagation()\n setAnchorEl(null)\n }\n\n const open = Boolean(anchorEl)\n const id = open ? 'context-help' : undefined\n\n return (\n <>\n \n \n \n \n
\n {helpTexts.map((helpText, index) => {\n return {helpText}\n })}\n
\n \n \n )\n}\n\nexport default ContextHelp\n","const parameterInputFieldTranslations = {\n coordinateSystem: 'Projection system',\n coordinateSystemHelp:\n '(Required only if .zip file does not contain projection file)'\n}\n\nexport default parameterInputFieldTranslations\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport Radio from '@material-ui/core/Radio'\nimport RadioGroup from '@material-ui/core/RadioGroup'\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\n\nconst FormikRadioGroup = ({\n disabled,\n field,\n form: { setFieldValue },\n options,\n ...props\n}) => {\n const [value, setValue] = React.useState('')\n\n const handleChange = event => {\n setValue(event.target.value)\n setFieldValue(field.name, event.target.value)\n }\n\n return (\n \n \n {options.map((option, index) => (\n }\n label={option.label}\n />\n ))}\n \n \n )\n}\n\nexport default FormikRadioGroup\n","const xyzReaderParameterTranslations = {\n title: 'Set column sequence',\n subTitle: 'The data will not be restructured',\n xyczOption: 'X, Y, Connection id, and Z',\n xyzcOption: 'X, Y, Z, and Connection id',\n xycOption: 'X, Y, and Connection id',\n xyzOption: 'X, Y, and Z',\n xyOption: 'X, and Y',\n info:\n 'You need to indicate the sequence of the data cloumns in the current file.'\n}\n\nexport default xyzReaderParameterTranslations\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { makeStyles, createStyles, Typography } from '@material-ui/core'\nimport RadioGroup from './../formik/RadioGroup'\nimport { Field } from 'formik'\nimport ContextHelpContainer from '../ContextHelp'\nimport xyzReaderParameterTranslations from './translations/xyzReaderParameterTranslations'\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n titleContainer: {\n display: 'flex'\n },\n title: {\n paddingBottom: theme.spacing(0),\n paddingTop: theme.spacing(1)\n },\n subTitle: {\n fontSize: '0.75rem',\n color: theme.palette.darkGrey && theme.palette.darkGrey.main\n },\n disabledTitle: {\n paddingBottom: theme.spacing(0),\n paddingTop: theme.spacing(1),\n color: theme.palette.darkGrey && theme.palette.darkGrey.main\n },\n group: {\n margin: theme.spacing(1, 0)\n },\n color: {\n color: theme.palette.primary.main,\n '& .MuiTypography-root, .MuiTypography-root.Mui-disabled, .MuiFormControlLabel-root': {\n color: theme.palette.primary.main\n }\n },\n disabledColor: {\n color: theme.palette.primary.light,\n '& .MuiTypography-root, .MuiTypography-root.Mui-disabled, .MuiFormControlLabel-root': {\n color: theme.palette.primary.light\n }\n }\n })\n})\n\ninterface IProps {\n name: string\n disabled?: boolean\n}\n\n/* The XYZ Reader expects the \n- x coordinate in the first column ( = column index 0), \n- the y coordinate in the second column (= column index 1),\n- the connectivity column in third or fourth column ( = column index 2 or 3)\n- the z column index in third or fourth column ( = column index 2 or 3) \n- or if you do not specify the connectivity index in third column (column index 2) */\nconst DatasetXYZParameters = (props: IProps) => {\n const classes = useStyles()\n\n const { name, disabled } = props\n\n return (\n <>\n
\n
\n \n {xyzReaderParameterTranslations.title}\n \n \n {xyzReaderParameterTranslations.subTitle}\n \n
\n \n
\n\n \n \n )\n}\n\nexport default DatasetXYZParameters\n","const writerFileExtension = {\n AsciiWriter: 'asc',\n Dfs2Writer: 'dfs2',\n DfsuWriter: 'dfsu',\n GISWriter: '',\n GeoJsonWriter: 'json',\n GeoTiffWriter: 'tif',\n MDWriter: '',\n NetcdfWriter: 'nc',\n ShpWriter: 'zip',\n TSWriter: '',\n TimeSeriesCsvWriter: 'zip',\n TimeSeriesDfs0Writer: 'dfs0',\n VtuWriter: 'vtu',\n VtiWriter: 'vti'\n}\n\nexport default writerFileExtension\n","import writerFileExtension from '../configuration/writerFileExtension'\n\nfunction getNameWithoutExtension(name: string): string {\n const pos = name.lastIndexOf('.')\n return name.substr(0, pos < 0 ? name.length : pos)\n}\n\nfunction getNameExtension(name: string): string {\n const extension = name.split('.').pop()\n return extension ? '.' + extension : ''\n}\n\nexport function adaptedFileName(initialName: string, writer: string): string {\n let adaptedName: string = initialName\n if (writer in writerFileExtension) {\n const targetFileExtension = writerFileExtension[writer]\n const origFileExtension = initialName.split('.').pop()\n if (targetFileExtension !== origFileExtension) {\n const nameWithoutExtension = getNameWithoutExtension(initialName)\n const targetExtension = targetFileExtension\n ? '.' + targetFileExtension\n : ''\n adaptedName = nameWithoutExtension + targetExtension\n }\n }\n return adaptedName\n}\n\nexport function resetFileExtension(\n initialName: string,\n newName: string\n): string {\n return getNameWithoutExtension(newName) + getNameExtension(initialName)\n}\n\nexport function insertSpaces(string) {\n string = string.replace(/([a-z])([A-Z])/g, '$1 $2')\n string = string.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')\n return string\n}\n","import React, { useState, useEffect } from 'react'\nimport Collapse from '@material-ui/core/Collapse'\nimport Grid from '@material-ui/core/Grid'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button'\nimport { ReactComponent as Plus } from '@mike/mike-shared-frontend/media/icons/Plus'\nimport TextField from '../formik/TextField'\nimport ProjectionSelect from '../formik/ProjectionSelect'\nimport IProjection from '../../model/IProjection'\nimport classNames from 'classnames'\nimport { useConversionStyles } from './styles/useConversionStyles'\nimport { iconStyle } from './styles/iconStyles'\nimport readerWriterTranslation from './translations/readerWriterTranslations'\nimport ContextHelpContainer from '../ContextHelp'\nimport parameterInputFieldTranslations from './translations/parameterInputFieldTranslations'\nimport DatasetXYZParameters from './DatasetXYZParameters'\nimport {\n SRID_PARAM,\n ZCOLUMNINDEX_PARAM,\n CONNECTCOLUMNINDEX_PARAM,\n XYZCOLUMNSSEQUENCE\n} from '../../helpers/import'\nimport { IParameterErrors } from './DatasetConversion'\nimport { insertSpaces } from './support'\n\ninterface IParameter {\n name: string\n description: string\n dataType: string\n required: boolean\n}\n\ninterface IProps {\n parameter: IParameter\n key: string\n disabled?: boolean\n reset: boolean\n handleReset: () => void\n parameterErrors?: IParameterErrors\n projections: IProjection[]\n projectionsLoading: boolean\n onProjectionSearchTextChanged: (searchText: string) => void\n searchCoordinateSystemsById: boolean\n}\n\n/**\n * @name ParameterInputField\n * @summary The paramter input field for reader specific input parameters.\n */\nexport const ParameterInputField = (props: IProps) => {\n const classes = useConversionStyles()\n const [expandSRID, setExpandSRID] = useState(false)\n const [expandNumericField, setExpandNumericField] = useState(false)\n const [expandParameter, setExpandParameter] = useState(false)\n\n const {\n parameter,\n disabled,\n reset,\n handleReset,\n parameterErrors,\n projections,\n projectionsLoading,\n onProjectionSearchTextChanged,\n searchCoordinateSystemsById\n } = props\n\n useEffect(() => {\n if (reset) {\n setExpandSRID(false)\n setExpandNumericField(false)\n setExpandParameter(false)\n handleReset()\n }\n }, [reset, handleReset])\n\n const formatParameterName = inputParameter => {\n const id = 'import.readers.inputParameters.' + inputParameter\n return readerWriterTranslation[id]\n ? readerWriterTranslation[id]\n : insertSpaces(inputParameter)\n }\n\n let inputField\n switch (parameter.dataType) {\n case 'int':\n inputField =\n parameter.name === CONNECTCOLUMNINDEX_PARAM ? (\n ''\n ) : parameter.name === SRID_PARAM ? (\n \n \n \n \n \n {\n !disabled && setExpandSRID(true)\n }}\n buttontype=\"text\"\n className={classNames(\n classes.plusButton,\n disabled && classes.plusButtonDisabled\n )}\n >\n \n {parameterInputFieldTranslations.coordinateSystem}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ) : parameter.name === ZCOLUMNINDEX_PARAM ? (\n \n \n \n \n \n ) : (\n \n \n \n \n \n {\n !disabled && setExpandNumericField(true)\n }}\n buttontype=\"text\"\n className={classNames(\n classes.plusButton,\n disabled && classes.plusButtonDisabled\n )}\n >\n \n {formatParameterName(parameter.name)}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n break\n default:\n inputField = (\n \n \n \n \n \n {\n !disabled && setExpandParameter(true)\n }}\n buttontype=\"text\"\n className={classNames(\n classes.plusButton,\n disabled && classes.plusButtonDisabled\n )}\n >\n \n {formatParameterName(parameter.name)}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n }\n\n return inputField\n}\n\nexport default ParameterInputField\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\n\nimport {\n makeStyles,\n createStyles,\n Typography,\n Dialog,\n IconButton,\n RadioProps\n} from '@material-ui/core'\nimport MuiDialogTitle from '@material-ui/core/DialogTitle'\nimport CloseIcon from '@material-ui/icons/Close'\nimport DatasetConversion from './DatasetConversion'\nimport defaultReader from './configuration/defaultReader'\nimport IDatasetReader from './model/IDatasetReader'\nimport IDatasetWriter from './model/IDatasetWriter'\nimport DatasetConversionOptions from './DatasetConversionOptions'\nimport conversionDialogTranslations from './translations/conversionDialogTranslations'\nimport conversionTranslations from './translations/conversionTranslations'\nimport conversionOptionsTranslations from './translations/conversionOptionsTranslations'\nimport { ITextResources } from './DatasetConversion'\nimport { ITextResources as IConversionOptionsTextResources } from './DatasetConversionOptions'\nimport { FILEWRITER } from './model/asIfReaderWriter'\nimport { adaptedFileName } from './support'\nimport IProjection from '../../model/IProjection'\n\nexport enum dialogMode {\n UPLOAD = 'Upload',\n CONVERSION = 'Conversion',\n DOWNLOAD = 'Download'\n}\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n dialog: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }\n },\n dialogTitle: {\n padding: theme.spacing(1),\n color: theme.palette.background.paper,\n zIndex: 11,\n borderRadius: '4px 4px 0px 0px',\n boxShadow: '0px 4px 4px rgba(0, 0, 0, 0.16)',\n height: theme.spacing(8),\n width: '100%'\n },\n titleBar: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n titleHeadings: {\n paddingTop: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingBottom: theme.spacing(2)\n },\n closeButton: {\n padding: 0,\n color: theme.palette.primary.main\n }\n })\n})\n\ninterface IProps {\n datasetId?: string\n disableConvert?: boolean\n mode: dialogMode.UPLOAD | dialogMode.CONVERSION | dialogMode.DOWNLOAD\n datasetReaders: IDatasetReader[]\n loadingDatasetReaders: boolean\n fileName: string\n initialStep?: number\n open: boolean\n datasetWriters: IDatasetWriter[]\n dedicatedWriters: string[]\n handleClose: () => void\n handleUpload: (\n mode: dialogMode.UPLOAD | dialogMode.CONVERSION | dialogMode.DOWNLOAD,\n importValues?: any,\n datasetId?: string,\n fileName?: string\n ) => void\n projections: IProjection[]\n projectionsLoading: boolean\n onProjectionSearchTextChanged: (searchText: string) => void\n searchCoordinateSystemsById: boolean\n}\n\nconst DatasetConversionDialog = (props: IProps) => {\n const classes = useStyles()\n const {\n datasetId,\n disableConvert,\n datasetReaders,\n loadingDatasetReaders,\n fileName,\n mode,\n open,\n datasetWriters,\n dedicatedWriters,\n handleClose,\n handleUpload,\n initialStep = 1,\n projections,\n projectionsLoading,\n onProjectionSearchTextChanged,\n searchCoordinateSystemsById\n } = props\n\n const [textResources, setTextResources] = React.useState({} as ITextResources)\n const [optionsTextResources, setOptionsTextResources] = React.useState(\n {} as IConversionOptionsTextResources\n )\n const [writersToHide, setWritersToHide] = React.useState([] as string[])\n const [name, setName] = React.useState('')\n const [reader, setReader] = React.useState('')\n const [writer, setWriter] = React.useState('')\n const [convert, setConvert] = React.useState('false')\n const [step, setStep] = React.useState(1)\n const [dialogTitle, setDialogTitle] = React.useState('')\n\n React.useEffect(() => {\n setName(fileName)\n }, [fileName])\n\n React.useEffect(() => {\n setStep(initialStep ? initialStep : 1)\n setConvert('false')\n setReader('')\n setWriter('')\n if (datasetReaders) {\n if (datasetReaders.length === 1) {\n setReader(datasetReaders[0].name)\n } else {\n const fileExtension = fileName && fileName.split('.').pop()\n if (fileExtension && fileExtension in defaultReader) {\n const readerObj = datasetReaders.find(\n el => el.id === defaultReader[fileExtension]\n )\n if (readerObj) {\n setReader(defaultReader[fileExtension])\n }\n }\n }\n }\n }, [fileName, datasetReaders, initialStep])\n\n React.useEffect(() => {\n switch (mode) {\n case dialogMode.UPLOAD:\n setDialogTitle(\n step === 1\n ? conversionDialogTranslations.uploadTitle\n : conversionTranslations.submitUpload\n )\n setTextResources({\n cancel: conversionTranslations.cancel,\n submit: conversionTranslations.submitUpload,\n readerDropDown: conversionTranslations.readerDropDown\n })\n setOptionsTextResources({\n submit: conversionOptionsTranslations.upload,\n title: conversionOptionsTranslations.title,\n asIfOption: conversionOptionsTranslations.uploadAsIs,\n convertToDifferentFormatOption:\n conversionOptionsTranslations.convertToDifferentFormat\n })\n setWritersToHide([])\n break\n\n case dialogMode.CONVERSION:\n setDialogTitle(conversionDialogTranslations.convertTitle)\n setTextResources({\n cancel: conversionTranslations.cancel,\n submit: conversionTranslations.submitConvert,\n readerDropDown: conversionTranslations.readerDropDownConvert\n })\n setWritersToHide([])\n break\n case dialogMode.DOWNLOAD:\n setDialogTitle(\n step === 1\n ? conversionDialogTranslations.downloadTitle\n : conversionTranslations.submitDownload\n )\n setTextResources({\n cancel: conversionTranslations.cancel,\n submit: conversionTranslations.submitDownload,\n readerDropDown: conversionTranslations.readerDropDownConvert\n })\n setOptionsTextResources({\n submit: conversionOptionsTranslations.download,\n title: conversionOptionsTranslations.downloadTitle,\n asIfOption: conversionOptionsTranslations.downloadAsIs,\n convertToDifferentFormatOption:\n conversionOptionsTranslations.downloadInDifferentFormat\n })\n // Dedicated writers cannot be used in download mode\n // as they write to dedicated Platform storage (GIS, TS, MD)\n // File writer + specific reader only writes coordinate system to metadata\n // But metadata is not downloadable - so file writer makes no sense\n setWritersToHide([...dedicatedWriters, FILEWRITER])\n break\n default:\n break\n }\n }, [mode, dedicatedWriters, step])\n\n React.useEffect(() => {\n if (datasetReaders && reader && fileName) {\n const readerObj = datasetReaders.find(el => el.id === reader)\n if (readerObj) {\n const availableWriters = readerObj.writers.filter(\n (w: string) => !writersToHide.includes(w)\n )\n const theOneAndOnly =\n availableWriters.length === 1 ? availableWriters[0] : ''\n setWriter(theOneAndOnly)\n const fileNameWithAdaptedExtension = adaptedFileName(\n fileName,\n theOneAndOnly\n )\n fileNameWithAdaptedExtension && setName(fileNameWithAdaptedExtension)\n }\n }\n }, [reader, datasetReaders, writersToHide, fileName])\n\n const defaultUploadValues = {\n description: '',\n name: name,\n reader: reader,\n writer: writer\n }\n\n React.useEffect(() => {\n setStep(initialStep)\n }, [initialStep])\n\n const handleOnClose = React.useCallback(() => {\n setStep(1)\n setConvert('false')\n setWritersToHide([])\n setReader('')\n setWriter('')\n handleClose()\n }, [handleClose])\n\n const handleOnClick = React.useCallback(() => {\n if (convert === 'false') {\n setStep(1)\n handleUpload(mode, null, datasetId, fileName)\n } else {\n if (step === 1) {\n setStep(2)\n }\n }\n }, [convert, handleUpload, step, mode, datasetId, fileName])\n\n const handleConvert = React.useCallback(\n values => {\n handleUpload(mode, values, datasetId, fileName)\n },\n [handleUpload, mode, datasetId, fileName]\n )\n\n function handleChange(event: React.ChangeEvent) {\n if (event && event.target && (event.target as HTMLInputElement).value) {\n const option = (event.target as HTMLInputElement)\n .value as RadioProps['value']\n if (typeof option === 'string') {\n setConvert(option)\n }\n }\n }\n\n const DialogTitle = () => {\n return (\n
\n
\n {dialogTitle}\n
\n
\n \n \n \n
\n
\n )\n }\n\n return (\n \n \n \n \n {step === 1 ? (\n \n ) : (\n \n )}\n \n )\n}\n\nexport default DatasetConversionDialog\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\nimport Checkbox from '@material-ui/core/Checkbox'\n\nimport withFormik from './withFormik'\n\nconst CheckboxField = ({ disabled, label, name, onBlur, onChange, value }) => (\n }\n disabled={disabled}\n label={label}\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n />\n)\nCheckboxField.propTypes = {\n disabled: PropTypes.bool,\n label: PropTypes.string,\n name: PropTypes.string.isRequired,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n value: PropTypes.any.isRequired\n}\n\nexport default withFormik(CheckboxField)\n","import React, { useState, useEffect } from 'react'\nimport Collapse from '@material-ui/core/Collapse'\nimport Grid from '@material-ui/core/Grid'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button'\nimport { ReactComponent as Plus } from '@mike/mike-shared-frontend/media/icons/Plus'\nimport TextField from '../formik/TextField'\nimport CheckboxField from '../formik/CheckboxField'\nimport classNames from 'classnames'\nimport { useConversionStyles } from './styles/useConversionStyles'\nimport { iconStyle } from './styles/iconStyles'\nimport readerWriterTranslation from './translations/readerWriterTranslations'\nimport ContextHelpContainer from '../ContextHelp'\nimport { IParameterErrors } from './DatasetConversion'\nimport { insertSpaces } from './support'\n\ninterface IParameter {\n name: string\n description: string\n dataType: string\n required: boolean\n}\n\ninterface IProps {\n parameter: IParameter\n key: string\n disabled?: boolean\n reset: boolean\n handleReset: () => void\n parameterErrors?: IParameterErrors\n}\n\n/**\n * @name ParameterOutputField\n * @summary The paramter output field for writer specific output parameters.\n */\nexport const ParameterOutputField = (props: IProps) => {\n const classes = useConversionStyles()\n const [expandBooleanField, setExpandBooleanField] = useState(false)\n const [expandNumericField, setExpandNumericField] = useState(false)\n const [expandParameter, setExpandParameter] = useState(false)\n\n const { parameter, disabled, reset, handleReset, parameterErrors } = props\n\n useEffect(() => {\n if (reset) {\n setExpandBooleanField(false)\n setExpandNumericField(false)\n setExpandParameter(false)\n handleReset()\n }\n }, [reset, handleReset])\n\n const formatParameterName = outputParameter => {\n const id = 'import.writers.outputParameters.' + outputParameter\n return readerWriterTranslation[id]\n ? readerWriterTranslation[id]\n : insertSpaces(outputParameter)\n }\n\n let outputField\n switch (parameter.dataType) {\n case 'boolean':\n outputField = ''\n break\n case 'int':\n outputField = (\n \n \n \n \n \n {\n !disabled && setExpandNumericField(true)\n }}\n buttontype=\"text\"\n className={classNames(\n classes.plusButton,\n disabled && classes.plusButtonDisabled\n )}\n >\n \n {formatParameterName(parameter.name)}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n break\n case 'bool':\n outputField = (\n \n \n \n \n \n {\n !disabled && setExpandBooleanField(true)\n }}\n buttontype=\"text\"\n className={classNames(\n classes.plusButton,\n disabled && classes.plusButtonDisabled\n )}\n >\n \n {formatParameterName(parameter.name)}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n break\n default:\n outputField = (\n \n \n \n \n \n {\n !disabled && setExpandParameter(true)\n }}\n buttontype=\"text\"\n className={classNames(\n classes.plusButton,\n disabled && classes.plusButtonDisabled\n )}\n >\n \n {formatParameterName(parameter.name)}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n }\n\n return outputField\n}\n\nexport default ParameterOutputField\n","const conversionTranslations = {\n name: 'Rename (optional)',\n description: 'Description (optional)',\n submitDownload: 'Download and convert',\n submitConvert: 'Convert',\n submitUpload: 'Upload and convert',\n cancel: 'Cancel',\n readerDropDown: 'Current data type',\n readerDropDownConvert: 'Current data type',\n writerDropDown: 'Convert to',\n fileWriterAndSRIDHelp:\n 'Apart from the coordinate system, no other input parameters are considered.',\n conversionOptions: 'Conversion options'\n}\n\nexport default conversionTranslations\n","/* eslint-disable react/prop-types */\nimport React from 'react'\n\nimport ButtonBase from '@material-ui/core/ButtonBase'\nimport { ReactComponent as ConvertTo } from '../icons/ConvertTo'\n\nexport const ConvertToIcon = () => (\n \n \n \n)\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport IDatasetReader from './model/IDatasetReader'\nimport IDatasetWriter from './model/IDatasetWriter'\nimport { FieldArray, Form, Formik, FormikProps } from 'formik'\nimport map from 'lodash/map'\nimport { ReactComponent as Plus } from '@mike/mike-shared-frontend/media/icons/Plus'\nimport * as Yup from 'yup'\nimport Typography from '@material-ui/core/Typography'\nimport Collapse from '@material-ui/core/Collapse'\nimport Grid from '@material-ui/core/Grid'\nimport MuiDialogContent from '@material-ui/core/DialogContent'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button'\nimport TextField from '../formik/TextField'\nimport SelectField from '../formik/SelectField'\nimport { iconStyle } from '../buttons/iconStyles'\nimport { useDialogContentStyles } from './styles/datasetUploadStyles'\nimport ParameterInputField from './ParameterInputField'\nimport ParameterOutputField from './ParameterOutputField'\nimport conversionTranslations from './translations/conversionTranslations'\nimport readerWriterTranslations from './translations/readerWriterTranslations'\nimport { useConversionStyles } from './styles/useConversionStyles'\nimport { SRID_PARAM, XYZCOLUMNSSEQUENCE } from '../../helpers/import'\nimport ContextHelpContainer from '../ContextHelp'\nimport classNames from 'classnames'\nimport { ConvertToIcon } from './ConvertToIcon'\nimport { FILEWRITER } from './model/asIfReaderWriter'\nimport { dialogMode } from './DatasetConversionDialog'\nimport { adaptedFileName, insertSpaces, resetFileExtension } from './support'\nimport IProjection from '../../model/IProjection'\n\ninterface IState {\n writer: string\n reader: string\n name: string\n description: string\n}\n\nexport interface ITextResources {\n cancel: string\n submit: string\n readerDropDown: string\n}\n\nexport interface IParameterErrors {\n readerParameters?: string[]\n writerParameters?: string[]\n}\n\ninterface IProps {\n initialValues: IState\n handleUpload: (values: IState) => void\n handleCancel: () => void\n datasetReaders: IDatasetReader[]\n datasetWriters: IDatasetWriter[]\n mode: dialogMode.UPLOAD | dialogMode.CONVERSION | dialogMode.DOWNLOAD\n showDatasetReadersLoading: boolean\n textResources?: ITextResources\n writersToHide?: string[]\n projections: IProjection[]\n projectionsLoading: boolean\n onProjectionSearchTextChanged: (searchText: string) => void\n searchCoordinateSystemsById: boolean\n}\n\nconst validationSchema = Yup.object().shape({\n name: Yup.string().required('The file needs to have a name'),\n description: Yup.string(),\n reader: Yup.string().required('Current data type needs to be specified'),\n writer: Yup.string().required('Target data type needs to be specified')\n})\n\nconst DatasetConversion = (props: IProps) => {\n const classes = useConversionStyles()\n const dialogContentClasses = useDialogContentStyles()\n\n const {\n initialValues,\n handleUpload,\n handleCancel,\n datasetReaders,\n datasetWriters,\n mode,\n showDatasetReadersLoading,\n textResources = {\n cancel: 'Cancel',\n submit: 'Upload & Convert',\n readerDropDown: 'Uploaded file type'\n },\n writersToHide = [],\n projections,\n projectionsLoading,\n onProjectionSearchTextChanged,\n searchCoordinateSystemsById\n } = props\n\n const inDownloadMode = mode === dialogMode.DOWNLOAD\n const [values, setValues] = React.useState(initialValues)\n React.useEffect(() => {\n setValues(initialValues)\n }, [initialValues])\n\n const [expandDescription, setExpandDescription] = React.useState(false)\n const [resetInputParameter, setResetInputParameter] = React.useState(false)\n const [resetExportParameter, setResetExportParameter] = React.useState(false)\n\n const formatMessage = React.useCallback((id, defaultValue = '') => {\n return readerWriterTranslations[id]\n ? readerWriterTranslations[id]\n : insertSpaces(defaultValue)\n }, [])\n\n const formatTypeMessage = React.useCallback(\n (id, defaultValue = '') => {\n return [\n formatMessage(id, defaultValue),\n formatMessage(id + '.description', defaultValue)\n ]\n },\n [formatMessage]\n )\n\n const getAvailableWriters = React.useCallback(\n readerObj =>\n readerObj &&\n readerObj.writers.filter((w: string) => !writersToHide.includes(w)),\n [writersToHide]\n )\n\n const getWriters = React.useCallback(\n readerObj =>\n readerObj &&\n readerObj.writers\n .filter((w: string) => !writersToHide.includes(w))\n .map((w: string) => {\n const [writerTypeName, writerTypeDesc] = formatTypeMessage(\n `import.writers.${w}`,\n w\n )\n\n return {\n id: w,\n writerTypeName,\n writerTypeDesc\n }\n }),\n [formatTypeMessage, writersToHide]\n )\n\n const localizedReaders = React.useMemo(\n () =>\n datasetReaders?.map(el => {\n const fileTypeKey = `import.readers.${el.name}`\n\n const [fileTypeName, fileTypeDesc] = formatTypeMessage(\n fileTypeKey,\n el.name\n )\n return {\n fileTypeName,\n fileTypeDesc,\n ...el\n }\n }),\n [datasetReaders, formatTypeMessage]\n )\n\n const reorderedParameters = params => {\n // reorder elements so that SRID parameter is at the beginning\n return params.length > 0\n ? [\n params.find(item => item.name === SRID_PARAM),\n ...params.filter(item => item.name !== SRID_PARAM)\n ]\n : []\n }\n\n const handleResetInputParameters = React.useCallback(() => {\n setResetInputParameter(false)\n }, [setResetInputParameter])\n\n const handleResetExportParameters = React.useCallback(() => {\n setResetExportParameter(false)\n }, [setResetExportParameter])\n\n const validateParameters = React.useCallback(\n ({ reader, readerParameters, writer, writerParameters }) => {\n const errors = {} as IParameterErrors\n if (reader) {\n const readerObj = datasetReaders.find(el => el.id === reader)\n const params = readerObj && readerObj.parameters\n if (params) {\n const requiredParams = params\n .filter(p => p.required === true)\n .map(rp => {\n return rp.name\n })\n if (requiredParams.length > 0) {\n if (!readerParameters) {\n errors.readerParameters = requiredParams\n return errors\n } else {\n const requiredErrors = Array()\n const requiredParameter: string = requiredParams[0]\n if (!(requiredParameter in readerParameters)) {\n requiredErrors.push(requiredParams[0])\n }\n if (requiredErrors.length > 0) {\n errors.readerParameters = requiredErrors\n }\n return errors\n }\n }\n }\n }\n if (writer) {\n const writerObj = datasetWriters.find(el => el.name === writer)\n const params = writerObj && writerObj.parameters\n if (params) {\n const requiredParams = params\n .filter(p => p.required === true && p.dataType !== 'boolean')\n .map(rp => {\n return rp.name\n })\n if (requiredParams.length > 0) {\n if (!writerParameters) {\n errors.writerParameters = requiredParams\n return errors\n } else {\n const requiredErrors = Array()\n const requiredParameter: string = requiredParams[0]\n if (!(requiredParameter in writerParameters)) {\n requiredErrors.push(requiredParams[0])\n }\n if (requiredErrors.length > 0) {\n errors.writerParameters = requiredErrors\n }\n return errors\n }\n }\n }\n }\n return errors\n },\n [datasetReaders, datasetWriters]\n )\n\n return (\n ) => {\n const {\n values,\n handleChange,\n setFieldTouched,\n errors,\n setFieldValue\n } = formikProps\n\n const readerObj = datasetReaders.find(el => el.id === values.reader)\n const writers = values.reader && readerObj ? getWriters(readerObj) : []\n\n const parameters =\n values.reader && readerObj && readerObj.parameters\n ? reorderedParameters(readerObj.parameters)\n : []\n\n const datasetWriter =\n values.writer &&\n datasetWriters.find(\n datasetWriter => datasetWriter.name === values.writer\n )\n\n const writerParameters = datasetWriter && datasetWriter.parameters\n\n const handleFileTypeChange = e => {\n setFieldValue('readerParameters', null)\n setFieldValue('coordinateSystemId', null)\n setFieldValue(XYZCOLUMNSSEQUENCE, null)\n setResetInputParameter(true)\n setFieldValue('writerParameters', null)\n setResetExportParameter(true)\n setFieldValue('reader', e.target.value)\n const readerObject = datasetReaders.find(\n el => el.id === e.target.value\n )\n\n /* const getDefaultConversion = (selectedReader, writers) => {\n if (\n selectedReader in defaultWriter &&\n writers.includes(defaultWriter[selectedReader])\n ) {\n return defaultWriter[selectedReader]\n }\n } */\n\n if (readerObject) {\n const availableWriters = getAvailableWriters(readerObject)\n const count = availableWriters ? availableWriters.length : 0\n if (count > 0) {\n if (count === 1) {\n setFieldValue('writer', availableWriters[0])\n } else {\n setFieldValue(\n 'writer',\n '' //getDefaultConversion(e.target.value, readerObject.writers)\n )\n }\n }\n } else {\n setFieldValue('writer', '')\n }\n }\n\n const handleSaveAsChange = e => {\n setFieldValue('writerParameters', null)\n setResetExportParameter(true)\n const selectedWriter = e.target.value\n setFieldValue('writer', selectedWriter)\n const saveAsName = values.name ? values.name : initialValues.name\n if (selectedWriter === FILEWRITER) {\n setFieldValue(\n 'name',\n resetFileExtension(initialValues.name, saveAsName)\n )\n } else {\n const fileNameWithAdaptedExtension = adaptedFileName(\n saveAsName,\n selectedWriter\n )\n fileNameWithAdaptedExtension &&\n setFieldValue('name', fileNameWithAdaptedExtension)\n }\n }\n\n const fileWriterAndSRID =\n values.writer === FILEWRITER &&\n parameters &&\n parameters.filter(p => p.name === SRID_PARAM).length > 0\n\n const change = (name: string, e: any) => {\n e.persist()\n handleChange(e)\n setFieldTouched(name, true, false)\n }\n\n return (\n
\n \n \n \n \n \n \n\n {!inDownloadMode && (\n \n \n {\n setExpandDescription(true)\n }}\n buttontype=\"text\"\n className={classes.plusButton}\n >\n \n {conversionTranslations.description}\n \n \n \n \n \n \n )}\n \n \n \n \n {conversionTranslations.conversionOptions}\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n {fileWriterAndSRID && (\n \n \n \n )}\n \n\n \n {parameters && parameters.length > 0 && (\n \n (\n
\n {/* */}\n {map(parameters, (parameter, index) => (\n \n ))}\n {/* */}\n
\n )}\n />\n
\n )}\n \n {writerParameters && writerParameters.length > 0 && (\n \n (\n
\n \n {map(\n writerParameters,\n (writerParameter, index) => (\n \n )\n )}\n \n
\n )}\n />\n
\n )}\n
\n
\n \n
\n \n \n {textResources.cancel}\n \n \n {textResources.submit}\n \n \n
\n )\n }}\n />\n )\n}\n\nexport default DatasetConversion\n","const defaultReader = {\n dfs0: 'Dfs0Reader',\n dfs1: 'Dfs1Reader',\n dfs2: 'Dfs2Reader',\n dfs3: 'Dfs3Reader',\n dfsu: 'DfsuReader',\n xyz: 'XyzReader',\n asc: 'AsciiReader',\n tif: 'GeoTiffReader',\n tiff: 'GeoTiffReader',\n geotiff: 'GeoTiffReader',\n geojson: 'GeoJsonReader',\n csv: 'CSVReader'\n}\n\nexport default defaultReader\n","const conversionOptionsTranslations = {\n title: 'Upload as-is or convert data?',\n downloadTitle: 'Download as-is or convert data?',\n selectedFile: 'Selected file',\n uploadAsIs: 'Upload as-is',\n downloadAsIs: 'Download as-is',\n downloadInDifferentFormat: 'Download and change or convert',\n convertToDifferentFormat: 'Upload and change or convert',\n upload: 'Upload',\n download: 'Download',\n cancel: 'Cancel',\n next: 'Next'\n}\n\nexport default conversionOptionsTranslations\n","const uploadManyDialogTranslations = {\n message:\n 'Files will be uploaded without any conversion (as-is). In order to convert files, select only one file at a time when uploading.',\n additionalMessageForZippedFiles:\n 'Uploading a .zip file as-is, only serves as storage, you will not be able to change or convert the file at a later stage.',\n cancel: 'Cancel',\n ok: 'Upload',\n titlePart1: 'Upload',\n titlePart2: 'selected files'\n}\n\nexport default uploadManyDialogTranslations\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { makeStyles, createStyles, Typography } from '@material-ui/core'\nimport MuiDialogContent from '@material-ui/core/DialogContent'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport Radio from '@material-ui/core/Radio'\nimport RadioGroup from '@material-ui/core/RadioGroup'\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\nimport FormControl from '@material-ui/core/FormControl'\nimport MikeButton from '@mike/mike-shared-frontend/mike-button'\nimport conversionOptionsTranslations from './translations/conversionOptionsTranslations'\nimport uploadManyDialogTranslations from './translations/uploadManyDialogTranslations'\nimport { useDialogContentStyles } from './styles/datasetUploadStyles'\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n conversionOptionsTitle: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(1)\n },\n conversionOptionsSubtitle: {\n paddingBottom: theme.spacing(3)\n },\n distance: {\n paddingBottom: theme.spacing(1)\n },\n distanceTop: {\n paddingTop: theme.spacing(1)\n },\n color: {\n color: theme.palette.primary.main,\n '& .MuiTypography-root, .MuiTypography-root.Mui-disabled, .MuiFormControlLabel-root': {\n color: theme.palette.primary.main\n }\n }\n })\n})\n\nexport interface ITextResources {\n convertToDifferentFormatOption: string\n asIfOption: string\n submit: string\n title: string\n}\n\ninterface IProps {\n isZippedFile: boolean\n convert: string\n disableConvert?: boolean\n fileName: string\n handleOnClose: () => void\n handleChange: (event: React.ChangeEvent) => void\n handleOnClick: () => void\n textResources?: ITextResources\n}\n\nconst DatasetConversionOptions = (props: IProps) => {\n const classes = useStyles()\n const dialogContentClasses = useDialogContentStyles()\n const {\n convert,\n disableConvert = false,\n isZippedFile,\n fileName,\n handleOnClose,\n handleChange,\n handleOnClick,\n textResources = {\n submit: conversionOptionsTranslations.upload,\n asIfOption: conversionOptionsTranslations.uploadAsIs,\n title: conversionOptionsTranslations.title,\n convertToDifferentFormatOption:\n conversionOptionsTranslations.convertToDifferentFormat\n }\n } = props\n const [buttonLabel, setButtonLabel] = React.useState(\n conversionOptionsTranslations.upload\n )\n\n React.useEffect(() => {\n setButtonLabel(\n convert === 'false'\n ? textResources.submit\n : conversionOptionsTranslations.next\n )\n }, [convert, textResources.submit])\n\n return (\n <>\n \n \n {textResources.title}\n \n\n \n {conversionOptionsTranslations.selectedFile + ': ' + fileName}\n \n\n \n \n }\n label={textResources.asIfOption}\n />\n }\n label={textResources.convertToDifferentFormatOption}\n />\n \n \n {isZippedFile && (\n \n {uploadManyDialogTranslations.additionalMessageForZippedFiles}\n \n )}\n \n \n \n {conversionOptionsTranslations.cancel}\n \n \n {buttonLabel}\n \n \n \n )\n}\n\nexport default DatasetConversionOptions\n","const conversionDialogTranslations = {\n uploadTitle: 'Upload',\n convertTitle: 'Convert',\n downloadTitle: 'Download'\n}\n\nexport default conversionDialogTranslations\n","import { useOidc, useOidcIdToken } from '@axa-fr/react-oidc'\nimport {\n CircularProgress,\n CssBaseline,\n makeStyles,\n Typography\n} from '@material-ui/core'\nimport React, { ReactNode, useState } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { useIntl } from 'react-intl'\nimport { acceptInvitation } from '../../apis/admin'\nimport localStorage from '../../helpers/localStore'\nimport {\n INVITATION,\n INVITATION_IV,\n INVITATION_VERSION\n} from '../../helpers/search-params.const'\n\ntype Props = {\n children?: ReactNode\n}\n\nexport const INVITATION_TOKEN = 'invitationToken'\n\nconst getQueryParams = () => {\n let urlParams\n // The invitation system has a bug where it doesn't dencode the invitation before\n // redirecting to the app. This is a workaround to decode the invitation before\n if (window.location.search.includes('invitationVersion%3D1')) {\n urlParams = new URLSearchParams(decodeURIComponent(window.location.search))\n } else {\n urlParams = new URLSearchParams(window.location.search)\n }\n\n return new URLSearchParams(urlParams)\n}\n\nconst useStyles = makeStyles(theme => ({\n waitingBox: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100vw',\n height: '100vh'\n },\n waitingText: {\n marginLeft: theme.spacing(2)\n }\n}))\n\nenum CurrentRenderStateEnum {\n normal,\n acceptingInvitation\n}\n\nconst InvitationProvider = ({ children }: Props) => {\n const { idTokenPayload } = useOidcIdToken()\n const params = getQueryParams()\n const invitationVersion = params.get(INVITATION_VERSION)\n const invitationIv = params.get(INVITATION_IV)\n const invitation = params.get(INVITATION)\n const classes = useStyles()\n const { login } = useOidc()\n const intl = useIntl()\n const { search, pathname } = useLocation()\n const [currentRenderState, setCurrentRenderState] = useState<\n CurrentRenderStateEnum\n >(CurrentRenderStateEnum.normal)\n\n if (invitationVersion && invitationIv && invitation) {\n localStorage.set(INVITATION_TOKEN, {\n invitationVersion,\n invitationIv,\n invitation\n })\n window.history.replaceState({}, document.title, window.location.pathname)\n }\n\n const invitationStored = localStorage.get(INVITATION_TOKEN)\n if (idTokenPayload && invitationStored?.invitation) {\n const { invitationVersion, invitationIv, invitation } = invitationStored\n if (invitationVersion && invitationIv && invitation) {\n setCurrentRenderState(CurrentRenderStateEnum.acceptingInvitation)\n localStorage.set(INVITATION_TOKEN, null)\n acceptInvitation(invitationVersion, invitationIv, invitation).then(\n res => {\n if (res.isUserAlreadyMember && res.tenantId) {\n const extras = {\n prompt: 'none',\n tenantId: res.tenantId.toString()\n }\n\n login('/', extras)\n } else {\n login(search?.length > 1 ? pathname + search : pathname, {\n noTenant: 'true'\n })\n }\n }\n )\n // .finally(() => {\n // login(search?.length > 1 ? pathname + search : pathname, {\n // noTenant: 'true'\n // })\n // })\n }\n }\n\n if (currentRenderState === CurrentRenderStateEnum.acceptingInvitation) {\n return (\n <>\n \n
\n \n \n \n {intl.formatMessage({ id: 'screens.invitationScreen.waiting' })}\n \n \n
\n \n )\n } else {\n return <>{children}\n }\n}\n\nexport default InvitationProvider\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport { IMikeTheme } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { makeStyles, createStyles, Typography } from '@material-ui/core'\nimport MuiDialogContent from '@material-ui/core/DialogContent'\nimport ConfirmationDialog from '../Dialog/ConfirmationDialog'\nimport uploadManyDialogTranslations from './translations/uploadManyDialogTranslations'\n\nconst useStyles = makeStyles((theme: IMikeTheme) => {\n return createStyles({\n distance: {\n paddingTop: theme.spacing(1)\n },\n title: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(1),\n paddingTop: theme.spacing(1)\n },\n dialogContent: {\n maxWidth: 378,\n paddingBottom: theme.spacing(3),\n paddingRight: theme.spacing(3),\n backgroundColor: theme.palette.background.paper\n }\n })\n})\n\ninterface IProps {\n includesZippedFiles: boolean\n selectedFilesCount: number\n open: boolean\n onCancel: () => void\n onOk: () => void\n}\n\nconst DatasetUploadManyDialog = (props: IProps) => {\n const classes = useStyles()\n const {\n includesZippedFiles,\n open,\n onCancel,\n onOk,\n selectedFilesCount\n } = props\n\n return (\n \n \n \n {uploadManyDialogTranslations.titlePart1 +\n ' ' +\n selectedFilesCount +\n ' ' +\n uploadManyDialogTranslations.titlePart2}\n \n \n {uploadManyDialogTranslations.message}\n \n {includesZippedFiles && (\n \n {uploadManyDialogTranslations.additionalMessageForZippedFiles}\n \n )}\n \n \n )\n}\n\nexport default DatasetUploadManyDialog\n","const uploadManyDialogTranslations = {\n message:\n 'File datasets will be downloaded without any conversion (as-is). Batch download of datasets of type Gisvectordata, Timeseries or Multidimensional is not supported yet and require a conversion. In order to convert datasets, select only one dataset at a time when downloading.',\n cancel: 'Cancel',\n ok: 'Download',\n titlePart1: 'Download',\n titlePart2: 'selected datasets of type file'\n}\n\nexport default uploadManyDialogTranslations\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport ConfirmationDialog from '../Dialog/ConfirmationDialog'\nimport downloadManyDialogTranslations from './translations/downloadManyDialogTranslations'\n\ninterface IProps {\n selectedFilesCount: number\n open: boolean\n onCancel: () => void\n onOk: () => void\n}\n\nconst DatasetDownloadManyDialog = (props: IProps) => {\n const { open, onCancel, onOk, selectedFilesCount } = props\n\n return (\n \n )\n}\n\nexport default DatasetDownloadManyDialog\n","import React from 'react'\nimport objectHash from 'object-hash'\nimport map from 'lodash/map'\nimport { Form, Formik } from 'formik'\nimport { Grid } from '@material-ui/core'\nimport TextField from '../formik/TextField'\nimport * as Yup from 'yup'\nimport { useIntl } from 'react-intl'\nimport messages from '../../shared/messages'\nimport { MikeButton } from '@mike/mike-shared-frontend'\nimport { css } from 'emotion'\nimport merge from 'lodash/merge'\nimport SelectField from '../formik/SelectField'\nimport { ROLE_TYPES } from '../../helpers/project'\n\n// type TenantFeature = {\n// url?: string\n// featureId: string\n// name: string\n// type: 'Application'\n// enabled: boolean\n// }\n\nconst submitButtonStyle = css`\n float: right;\n`\nconst validationSchema = Yup.object().shape({\n email: Yup.string()\n .email()\n .required('Required'),\n role: Yup.string().required('Required'),\n url: Yup.string()\n})\n\nexport type UserInviteType = {\n email: string\n role: string\n url: string\n}\n\ninterface IProps {\n shouldAutoFocus?: boolean\n isEditMode?: boolean\n initialValues?: UserInviteType\n handleSubmit: (values: UserInviteType) => void\n}\n\nconst UserInviteForm = (props: IProps) => {\n // const [redirects, setRedirects] = useState<{ label: string; id: string }[]>([\n // { label: 'None', id: '' }\n // ])\n const intl = useIntl()\n const {\n // isEditMode = false,\n handleSubmit,\n initialValues,\n shouldAutoFocus\n } = props\n\n const defaultInitialValues: UserInviteType = {\n email: '',\n role: 'Reader',\n url: 'none'\n }\n\n const mergedInitialValues = {\n ...merge({}, defaultInitialValues, initialValues)\n }\n\n // useEffect(() => {\n // const getTenantFeaturesFromApi = async () => {\n // const tenantFeatures: { data: TenantFeature[] } = await getTenantFeatures()\n //\n // const parsedFeatures: { label: string; id: string }[] = tenantFeatures.data\n // .filter(feature => Boolean(feature?.url))\n // .filter(feature => feature.enabled)\n // .map(feature => ({\n // label: feature.name,\n // id: feature.url!\n // }))\n //\n // parsedFeatures.unshift({ label: 'None', id: 'none' })\n //\n // setRedirects(parsedFeatures)\n // }\n //\n // getTenantFeaturesFromApi().catch(console.error)\n // }, [])\n\n return (\n \n {formik => {\n const { handleChange, setFieldTouched } = formik\n\n const change = (name, e) => {\n e.persist()\n handleChange(e)\n setFieldTouched(name, true, false)\n }\n\n return (\n
\n \n \n \n \n\n \n ({\n name: role\n }))}\n fullWidth\n />\n \n\n {/*{!isEditMode && (*/}\n {/* */}\n {/* */}\n {/* }>*/}\n {/* Advanced settings*/}\n {/* */}\n\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/*)}*/}\n\n \n \n {intl.formatMessage({\n id: 'inviteUserForm.inviteButton'\n })}\n \n \n \n
\n )\n }}\n \n )\n}\n\nexport default UserInviteForm\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n root: {\n color: theme.palette.text.primary,\n textDecoration: 'none',\n fontSize: 14,\n '&>span:hover': {\n textDecoration: 'underline'\n },\n '&>svg': {\n verticalAlign: 'middle',\n marginRight: theme.spacing(1)\n }\n }\n })\n)\n\ninterface IProps {\n to: string\n text: string\n}\n\nconst ProjectLink = (props: IProps) => {\n const { to, text } = props\n const classes = useStyles()\n return (\n event.stopPropagation()}\n >\n {text}\n \n )\n}\n\nexport default ProjectLink\n","import React, { useMemo } from 'react'\nimport { Typography, Breadcrumbs, Tooltip } from '@material-ui/core'\nimport NavigateNextIcon from '@material-ui/icons/NavigateNext'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport IProject from '../../model/IProject'\nimport ProjectLink from '../ProjectLink'\nimport { useTypedSelector } from '../../reducers'\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n mikeBreadcrumbsLinkLabel: {\n cursor: 'pointer',\n color: theme.palette.text.primary,\n '&:hover': {\n color: theme.palette.text.primary\n },\n '&:active': {\n color: theme.palette.text.primary\n },\n '&:focus': {\n color: theme.palette.text.primary\n },\n maxWidth: '15vw',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'block'\n },\n mikeBreadcrumbsLastLabel: {\n fontWeight: 'bold',\n color: theme.palette.text.primary,\n maxWidth: '15vw',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'block',\n margin: '15px'\n }\n })\n)\n\nconst AppBreadcrumbNav = () => {\n const projectPath = useTypedSelector(\n state => state['project'].path.data\n )\n\n const tenantName = useTypedSelector((state) => {\n const foundTenant = state.tenant.tenants.find((tenant) => tenant.id === state.auth.user?.tenantId);\n return foundTenant?.name || ''\n })\n\n const tenantId =\n useTypedSelector(state => state['auth'].user?.tenantId) || null\n\n const effectiveRole = useTypedSelector(state => {\n const data = state['customerUsers']?.data\n const userId = state['auth']?.user?.id\n\n if (data && userId && !state.customerUsers.loading) return data[userId]?.role || ''\n\n return ''\n })\n\n const usersAmount = useTypedSelector(state => {\n return state.users.users.length\n })\n\n const classes = useStyles()\n\n const path: IProject[] | null = useMemo(() => {\n if (projectPath && projectPath[0]?.id !== tenantId) {\n return [\n ({\n id: tenantId,\n name: tenantName,\n parentProjectId: null,\n effectiveUserRole: usersAmount ? effectiveRole : ''\n } as unknown) as IProject,\n ...projectPath\n ]\n }\n\n return projectPath\n }, [projectPath, tenantId, tenantName, effectiveRole, usersAmount])\n\n return (\n }>\n {path?.map((item: IProject, index, array) => {\n const { name, id, parentProjectId, effectiveUserRole } = item\n const last = index === array.length - 1\n const shownName = index === 0 ? tenantName : name;\n const title = effectiveUserRole\n ? `${shownName} [${effectiveUserRole}]`\n : shownName\n\n return (\n \n \n \n {last ? (\n name\n ) : (\n \n )}\n \n {effectiveUserRole ? (\n \n [\n \n {effectiveUserRole}\n \n ]\n \n ) : null}\n
\n \n )\n })}\n \n )\n}\n\nexport default AppBreadcrumbNav\n","import React, { useEffect, useState, useCallback } from 'react'\nimport toLower from 'lodash/fp/toLower'\nimport PropTypes from 'prop-types'\nimport { injectIntl, defineMessages, FormattedMessage } from 'react-intl'\nimport { useDispatch } from 'react-redux'\nimport { compose } from 'recompose'\nimport size from 'lodash/fp/size'\nimport get from 'lodash/get'\nimport map from 'lodash/map'\nimport every from 'lodash/every'\nimport xor from 'lodash/xor'\nimport { withStyles } from '@material-ui/core'\nimport Typography from '@material-ui/core/Typography'\nimport MikeSlidingPanel from '@mike/mike-shared-frontend/mike-sliding-panel'\nimport AppPropTypes from '../../shared/appPropTypes'\nimport messages from '../../shared/messages'\nimport { enhanceProjectMembers } from '../../helpers/project'\nimport RefreshButton from '../buttons/RefreshButton'\nimport DownloadButton from '../buttons/DownloadButton'\nimport EditProjectButton from '../buttons/EditProjectButton'\nimport DeleteButton from '../buttons/DeleteButton'\nimport MoveToButton from '../buttons/MoveToButton'\nimport CreateSubprojectButton from '../buttons/CreateSubprojectButton'\nimport FileChooserButton from '../buttons/FileChooserButton'\nimport SearchInput from '../SearchInput'\nimport ConfirmationDialog from '../Dialog/ConfirmationDialog'\nimport EditDatasetForm from '../EditDatasetForm'\nimport CreateProjectForm from '../CreateProjectForm'\nimport ConnectedProjectContentTable from '../../containers/ConnectedProjectContentTable'\nimport ProjectsTreeDialog from '../ProjectsTreeDialog'\nimport AppNav from '../AppNav'\nimport DatasetConversionDialog from '../DatasetConversionDialog'\nimport DatasetUploadManyDialog from '../DatasetConversionDialog/DatasetUploadManyDialog'\nimport DatasetDownloadManyDialog from '../DatasetConversionDialog/DatasetDownloadManyDialog'\nimport { UPLOAD_TYPE } from '../../helpers/upload'\nimport { CONVERT_TYPE } from '../../helpers/convert'\nimport { DOWNLOAD_TYPE } from '../../helpers/export'\nimport { useTypedSelector } from '../../reducers'\nimport UserInviteForm from '../UserInviteForm/UserInviteForm'\nimport { inviteUser } from '../../actions/users'\nimport AppBreadcrumbNav from '../AppBreadcrumpsNav'\n\nimport asIfReaderWriter, {\n FILEWRITER\n} from '../DatasetConversionDialog/model/asIfReaderWriter'\nimport { isDataset, DATASETFORMAT } from '../../helpers/projectContent'\n\nconst localMessages = defineMessages({\n projectTableHeader: {\n id: 'projectContent.table.header'\n },\n confirmationDeleteTitle: {\n id: 'projectContent.confirmation.deleteItems.title'\n },\n searchPlaceholder: {\n id: 'projectDetails.input.search.placeholder'\n },\n editProjectButtonTipFolder: {\n id: 'projectDetails.button.editProject.tipFolder'\n },\n descriptionLabel: {\n id: 'projectContent.descriptionLabel'\n },\n membersLabel: {\n id: 'projectContent.membersLabel'\n },\n accessLevelLabel: {\n id: 'projectContent.accessLevelLabel'\n },\n noWriterToDownload: {\n id: 'projectContent.noWriterToDownload'\n },\n noWriterToConvert: {\n id: 'projectContent.noWriterToConvert'\n },\n editProjectTitle: {\n id: 'createProjectForm.heading.label'\n },\n createFolderTitle: {\n id: 'createProjectForm.headingFolder.title'\n },\n editDatasetTitle: {\n id: 'editDatasetForm.heading.label.dataset'\n },\n editFileTitle: {\n id: 'editDatasetForm.heading.label.file'\n },\n inviteUserTitle: {\n id: 'projectContent.inviteUserTitle'\n },\n inviteUser: {\n id: 'projectContent.confirmationDialog.message.inviteUser'\n },\n confirmationInviteTitle: {\n id: 'projectContent.confirmationDialog.title.inviteUser'\n }\n})\n\nconst styles = theme => ({\n projectDetails: {\n display: 'flex',\n paddingLeft: '40px',\n paddingRight: theme.spacing(2),\n paddingBottom: theme.spacing(3),\n position: 'sticky',\n zIndex: 1\n },\n\n tableTopHeader: {\n position: 'sticky',\n top: theme.spacing(3),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: theme.palette.lightGrey.main\n },\n tableTopHeaderTitle: {\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n paddingLeft: theme.spacing(5)\n },\n title: {\n paddingBottom: theme.spacing(0.5)\n },\n tableTopActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n paddingBottom: theme.spacing(3),\n marginLeft: theme.spacing(-1),\n paddingLeft: theme.spacing(5)\n },\n leftActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-end'\n },\n rightActionButtons: {\n display: 'flex',\n justifyContent: 'center'\n },\n createSubprojectButton: {\n marginLeft: 20\n },\n accessContainer: {\n paddingTop: theme.spacing(2)\n },\n members: {\n paddingTop: theme.spacing(2)\n },\n inviteUserForm: {\n marginTop: theme.spacing(4),\n paddingTop: theme.spacing(4),\n borderTop: `1px solid ${theme.palette.mediumGrey.main}`\n }\n})\nconst ProjectContent = ({\n classes,\n createSubProject,\n // customerId,eslint-disable-next-line react/prop-types\n customerUsers,\n editableDataset,\n editingCurrentProject,\n intl,\n loading,\n loadingInitialTree,\n onChangePage,\n onChangeRowsPerPage,\n onCloseTreeDialog,\n onCreateProject,\n onCreateProjectCloseClick,\n onCreateProjectOpenClick,\n onDelete,\n onDownloadMany,\n onEdit,\n onHandleRequestSort,\n onError,\n onEditCurrentProject,\n onExpand,\n onImportDialogDone,\n onMoveToClick,\n onMoveTo,\n onRefreshClick,\n onSearchTextChange,\n onSelectionChange,\n onUploadMany,\n onUpdateDataset,\n openCreateProject,\n openDeleteConfirmation,\n openDownloadManyDialog,\n openEditDataset,\n openUploadManyDialog,\n openProjectTreeDialog,\n project,\n projectTree,\n searchText,\n selectedItems,\n setOpenDeleteConfirmation,\n setOpenDownloadManyDialog,\n setOpenEditDataset,\n setOpenUploadManyDialog,\n user,\n datasetReaders,\n datasetFileReaders,\n showDatasetReadersLoader,\n datasetWriters,\n dedicatedWriters,\n showDatasetWritersLoader,\n loadingCoordinateSystems,\n selectedCoordinateSystems,\n onSearchProjection,\n searchCoordinateSystemsById,\n totalCount\n}) => {\n const tenantId = useTypedSelector(state => state['auth'].user?.tenantId)\n const dispatch = useDispatch()\n const selectionSize = size(selectedItems)\n const selectedFolders = selectedItems.filter(item => !isDataset(item))\n const selectedDatasets = xor(selectedItems, selectedFolders)\n const selectionOfDatasetsSize = size(selectedDatasets)\n\n const {\n canEdit,\n canEditAccessLevel,\n canGrantAccess,\n canCreateContent,\n canDeleteContent,\n canReadContent,\n canUpdateContent\n } = get(project, 'capabilities', {})\n\n // FIXME: use the intl message format for plurals (https://github.com/yahoo/react-intl/wiki/API#message-syntax)\n const messageSingleDataset = intl.formatMessage({\n id: 'projectContent.confirmationDialog.message.singleItem'\n })\n const messageMultipleDatasets = intl.formatMessage({\n id: 'projectContent.confirmationDialog.message.multipleItems'\n })\n\n const canDownload = canReadContent && selectionOfDatasetsSize >= 1\n // canReadContent && selectionOfDatasetsSize === 1 && selectionSize === 1\n const canEditProject = canEdit || canEditAccessLevel || canGrantAccess\n // For deleting, either the parent projects needs to can delete content or\n // In case only folders are selected, they can also be deleted when each folder allows it\n const canDelete =\n (selectionSize > 0 && canDeleteContent) ||\n (selectionSize > 0 &&\n selectionOfDatasetsSize === 0 &&\n every(selectedFolders, 'capabilities.canDelete'))\n // For moving same access rights are needed than for deleting\n const canMove = canDelete\n\n const members = enhanceProjectMembers(get(project, 'members'), customerUsers)\n\n const editableProject = {\n ...project,\n members\n }\n\n const subprojectIds = map(selectedFolders, 'id')\n\n const disabledMovingTargetIds = () => {\n let cannotCreateContentIds = []\n\n projectTree &&\n Object.values(projectTree).forEach(subprojects => {\n const ids = map(\n subprojects.filter(\n subproject =>\n !subproject.capabilities ||\n !subproject.capabilities.canCreateContent\n ),\n 'id'\n )\n cannotCreateContentIds = cannotCreateContentIds.concat(ids)\n })\n return cannotCreateContentIds\n }\n const [\n selectedDatasetsNotInDedicatedStorage,\n setSelectedDatasetsNotInDedicatedStorage\n ] = useState([])\n const [conversionName, setConversionName] = useState('')\n const [conversionDatasetId, setConversionDatasetId] = useState()\n const [topOffset, setTopOffset] = useState(0)\n const measuredRef = useCallback(node => {\n if (node !== null) {\n setTopOffset(node.getBoundingClientRect().height)\n }\n }, [])\n\n const [conversionDialogMode, setConversionDialogMode] = useState(UPLOAD_TYPE)\n const [initialConversionStep, setInitialConversionStep] = useState(1)\n const [fileToUpload, setFileToUpload] = useState(null)\n const [manyFilesToUpload, setManyFilesToUpload] = useState(null)\n const [conversionDialogIsOpen, setConversionDialogIsOpen] = useState(false)\n const [suitableReaders, setSuitableReaders] = useState(null)\n const [itemsToBeDeleted, setItemsToBeDeleted] = useState(null)\n const [disableConvert, setDisableConvert] = useState(false)\n const [isOpenInvite, setIsOpenInvite] = useState(false)\n const [inviteEmail, setInviteEmail] = useState(null)\n const [inviteRole, setInviteRole] = useState(null)\n const [inviteUrl, setInviteUrl] = useState(null)\n\n const openUploadDialog = useCallback(\n open => {\n setConversionDialogMode(UPLOAD_TYPE)\n setSuitableReaders(datasetFileReaders)\n setConversionDialogIsOpen(open)\n },\n [datasetFileReaders]\n )\n\n const processFiles = useCallback(\n files => {\n const selectedFileCount = files ? files.length : 0\n setDisableConvert(false)\n if (selectedFileCount === 1) {\n setFileToUpload(files[0])\n setConversionName(files[0].name)\n openUploadDialog(true)\n } else if (selectedFileCount > 1) {\n let selectedFiles = []\n for (var i = 0; i < selectedFileCount; i++) {\n selectedFiles.push(files[i])\n }\n setManyFilesToUpload(selectedFiles)\n setOpenUploadManyDialog(true)\n }\n },\n [\n openUploadDialog,\n setDisableConvert,\n setFileToUpload,\n setConversionName,\n setManyFilesToUpload,\n setOpenUploadManyDialog\n ]\n )\n\n const onFileDropped = useCallback(\n files => {\n processFiles(files)\n },\n [processFiles]\n )\n\n const onFileSelect = useCallback(\n event => {\n event.target && event.target.files && processFiles(event.target.files)\n event.target.value = null\n },\n [processFiles]\n )\n\n const handleCloseConfirmConvertManyDialog = useCallback(() => {\n setManyFilesToUpload(null)\n setOpenUploadManyDialog(false)\n }, [setOpenUploadManyDialog, setManyFilesToUpload])\n\n const handleUploadManyFiles = useCallback(() => {\n onUploadMany(manyFilesToUpload)\n setOpenUploadManyDialog(false)\n }, [onUploadMany, manyFilesToUpload, setOpenUploadManyDialog])\n\n const handleCloseConfirmDownloadManyDialog = useCallback(() => {\n setManyFilesToUpload(null)\n setOpenDownloadManyDialog(false)\n }, [setOpenDownloadManyDialog, setManyFilesToUpload])\n\n const handleDownloadManyFiles = useCallback(() => {\n onDownloadMany(selectedDatasetsNotInDedicatedStorage)\n setOpenDownloadManyDialog(false)\n onSelectionChange([])\n }, [\n onDownloadMany,\n selectedDatasetsNotInDedicatedStorage,\n setOpenDownloadManyDialog,\n onSelectionChange\n ])\n\n const handleCloseConversionDialog = useCallback(() => {\n setDisableConvert(false)\n setInitialConversionStep(1)\n setConversionDialogIsOpen(false)\n setFileToUpload(null)\n setConversionName('')\n setConversionDatasetId(null)\n }, [\n setInitialConversionStep,\n setConversionDialogIsOpen,\n setFileToUpload,\n setConversionName,\n setConversionDatasetId\n ])\n\n const onUpload = useCallback(\n (mode, conversionValues, datasetId, fileName) => {\n const name =\n mode === UPLOAD_TYPE\n ? fileToUpload.name\n : fileName\n ? fileName\n : 'Export'\n const data = conversionValues\n ? { ...conversionValues }\n : {\n name: name,\n reader: asIfReaderWriter.reader,\n writer: asIfReaderWriter.writer\n }\n const payload =\n mode === UPLOAD_TYPE\n ? {\n file: fileToUpload,\n importData: data\n }\n : {\n importData: data\n }\n onImportDialogDone(payload, mode, datasetId)\n setConversionDialogIsOpen(false)\n setFileToUpload(null)\n setConversionName('')\n setConversionDatasetId(null)\n onSelectionChange([])\n },\n [fileToUpload, onImportDialogDone, onSelectionChange]\n )\n\n useEffect(() => {\n setSuitableReaders(datasetReaders)\n }, [datasetReaders])\n\n const onDeleteOneItem = useCallback(\n item => {\n setItemsToBeDeleted([item])\n setOpenDeleteConfirmation(true)\n },\n [setOpenDeleteConfirmation, setItemsToBeDeleted]\n )\n const onDeleteItems = useCallback(() => {\n setItemsToBeDeleted(selectedItems)\n setOpenDeleteConfirmation(true)\n }, [setOpenDeleteConfirmation, setItemsToBeDeleted, selectedItems])\n\n const onOkDeleteItems = useCallback(() => {\n onDelete(itemsToBeDeleted)\n }, [onDelete, itemsToBeDeleted])\n\n const onOkInviteExternal = useCallback(() => {\n if (project && project.id) {\n dispatch(inviteUser(inviteEmail, inviteRole, inviteUrl, project.id))\n setIsOpenInvite(false)\n onCreateProjectCloseClick()\n }\n }, [\n project,\n dispatch,\n inviteUrl,\n inviteEmail,\n inviteRole,\n onCreateProjectCloseClick\n ])\n\n const onEditOneItem = useCallback(\n item => {\n onEdit(item)\n },\n [onEdit]\n )\n\n const onConvertDataset = useCallback(\n (item, name) => {\n if (DATASETFORMAT in item) {\n setConversionName(item.name)\n setConversionDatasetId(item.id)\n const readersForDatasetFormat = datasetReaders.filter(reader => {\n return toLower(reader.datasetFormat) === toLower(item.datasetFormat)\n })\n setSuitableReaders(readersForDatasetFormat)\n setConversionDialogMode(\n name === CONVERT_TYPE ? CONVERT_TYPE : DOWNLOAD_TYPE\n )\n const writers =\n readersForDatasetFormat &&\n readersForDatasetFormat.length > 0 &&\n readersForDatasetFormat[0].writers\n\n if (!writers) {\n // There might be dataset formats without writer support\n onError(\n 'noWriter',\n intl.formatMessage(\n name === CONVERT_TYPE\n ? localMessages.noWriterToConvert\n : localMessages.noWriterToDownload\n )\n )\n } else {\n // For converts of existing datasets and\n // downloads without FileWriter available\n // we want to hide save as-if option\n setInitialConversionStep(\n name === CONVERT_TYPE\n ? 2\n : writers && writers.includes(FILEWRITER)\n ? 1\n : 2\n )\n // For downloads with only FileWriter available\n // we want to disable conversion option\n setDisableConvert(\n name === CONVERT_TYPE\n ? false\n : writers && writers.length === 1 && writers.includes(FILEWRITER)\n )\n setConversionDialogIsOpen(true)\n }\n }\n },\n [datasetReaders, onError, intl]\n )\n\n const onCancelDeleteItems = useCallback(() => {\n setItemsToBeDeleted(null)\n setOpenDeleteConfirmation(false)\n }, [setOpenDeleteConfirmation, setItemsToBeDeleted])\n\n const onCancelInviteExternal = useCallback(() => {\n setIsOpenInvite(false)\n }, [])\n\n const onDownloadClick = useCallback(() => {\n if (!canDownload) return\n\n if (selectedDatasets.length === 1) {\n onConvertDataset(selectedDatasets[0], DOWNLOAD_TYPE)\n } else {\n const dedicatedStorage =\n dedicatedWriters &&\n dedicatedWriters.map(dedicatedWriter => dedicatedWriter.datasetFormat)\n if (dedicatedStorage && dedicatedStorage.length) {\n const filterDatasets = selectedDatasets\n ? selectedDatasets.filter(\n selectedDataset =>\n !dedicatedStorage.includes(selectedDataset.datasetFormat)\n )\n : []\n setSelectedDatasetsNotInDedicatedStorage(filterDatasets)\n setOpenDownloadManyDialog(true)\n }\n }\n }, [\n onConvertDataset,\n selectedDatasets,\n canDownload,\n dedicatedWriters,\n setOpenDownloadManyDialog\n ])\n\n const onUserInviteClick = (email, role, redirectUri) => {\n setInviteEmail(email)\n setInviteRole(role)\n setInviteUrl(redirectUri)\n setIsOpenInvite(true)\n }\n\n return (\n <>\n \n \n\n 1 ? messageMultipleDatasets : messageSingleDataset\n }\n ok={intl.formatMessage(messages.yesDelete)}\n onOk={onOkDeleteItems}\n onCancel={onCancelDeleteItems}\n />\n \n\n file.name.endsWith('.zip')).length >\n 0\n }\n selectedFilesCount={manyFilesToUpload ? manyFilesToUpload.length : 0}\n />\n\n \n\n {!loading && !project && (\n \n \n \n )}\n\n 0\n ? dedicatedWriters.map(dedicated => dedicated.name)\n : []\n }\n disableConvert={disableConvert}\n loadingDatasetReaders={\n showDatasetReadersLoader || showDatasetWritersLoader\n }\n fileName={conversionName}\n mode={conversionDialogMode}\n open={conversionDialogIsOpen}\n handleUpload={onUpload}\n initialStep={initialConversionStep}\n handleClose={handleCloseConversionDialog}\n projections={selectedCoordinateSystems}\n projectionsLoading={loadingCoordinateSystems}\n onProjectionSearchTextChanged={onSearchProjection}\n searchCoordinateSystemsById={searchCoordinateSystemsById}\n />\n
\n
\n \n {project && project.id !== tenantId && (\n \n )}\n
\n
\n
\n \n\n \n\n {selectionSize > 0 && (\n \n )}\n {selectionSize > 0 && (\n \n )}\n {selectionSize > 0 && (\n \n )}\n
\n
\n \n {/* {showFolderUI && ( */}\n
\n \n
\n {/* )} */}\n
\n
\n
\n\n {}}\n onEdit={canUpdateContent ? onEditOneItem : () => {}}\n onDownload={onConvertDataset}\n onConvert={canUpdateContent ? onConvertDataset : () => {}}\n topOffset={topOffset}\n parentCapabilities={{\n canDeleteContent: canDeleteContent,\n canUpdateContent: canUpdateContent,\n canCreateContent: canCreateContent,\n canReadContent: canReadContent\n }}\n processDroppedFiles={canCreateContent ? onFileDropped : () => {}}\n onHandleRequestSort={onHandleRequestSort}\n />\n\n setOpenEditDataset(false)}\n titleArea={\n editableDataset && editableDataset.datasetType === 'file'\n ? intl.formatMessage(localMessages.editFileTitle)\n : intl.formatMessage(localMessages.editDatasetTitle)\n }\n contentArea={\n \n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n \n \n {editingCurrentProject && canGrantAccess && (\n
\n \n {intl.formatMessage(localMessages.inviteUserTitle)}\n \n {\n onUserInviteClick(data.email, data.role, data.url)\n }}\n />\n
\n )}\n \n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n \n )\n}\nProjectContent.propTypes = {\n classes: PropTypes.object.isRequired,\n createSubProject: PropTypes.bool,\n customerUsers: PropTypes.objectOf(AppPropTypes.customerUser).isRequired,\n datasetToBeConverted: AppPropTypes.dataset,\n editableDataset: AppPropTypes.dataset,\n editingCurrentProject: PropTypes.bool.isRequired,\n intl: PropTypes.object.isRequired,\n loading: PropTypes.bool.isRequired,\n loadingInitialTree: PropTypes.bool.isRequired,\n onChangePage: PropTypes.func.isRequired,\n onChangeRowsPerPage: PropTypes.func.isRequired,\n onCloseTreeDialog: PropTypes.func.isRequired,\n onCreateProject: PropTypes.func.isRequired,\n onCreateProjectCloseClick: PropTypes.func.isRequired,\n onCreateProjectOpenClick: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onDownloadMany: PropTypes.func.isRequired,\n onEdit: PropTypes.func.isRequired,\n onHandleRequestSort: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n onEditCurrentProject: PropTypes.func.isRequired,\n onExpand: PropTypes.func.isRequired,\n onImportDialogDone: PropTypes.func.isRequired,\n onMoveToClick: PropTypes.func.isRequired,\n onMoveTo: PropTypes.func.isRequired,\n onRefreshClick: PropTypes.func.isRequired,\n onSearchTextChange: PropTypes.func.isRequired,\n onSelectionChange: PropTypes.func.isRequired,\n onUploadMany: PropTypes.func.isRequired,\n onUpdateDataset: PropTypes.func.isRequired,\n openDeleteConfirmation: PropTypes.bool.isRequired,\n openCreateProject: PropTypes.bool.isRequired,\n openDownloadManyDialog: PropTypes.bool.isRequired,\n openEditDataset: PropTypes.bool.isRequired,\n openUploadManyDialog: PropTypes.bool.isRequired,\n openProjectTreeDialog: PropTypes.bool.isRequired,\n path: PropTypes.array,\n project: AppPropTypes.project,\n projectTree: PropTypes.object,\n searchText: PropTypes.string.isRequired,\n selectedItems: PropTypes.arrayOf(AppPropTypes.dataset).isRequired,\n setOpenDeleteConfirmation: PropTypes.func.isRequired,\n setOpenDownloadManyDialog: PropTypes.func.isRequired,\n setOpenEditDataset: PropTypes.func.isRequired,\n setOpenUploadManyDialog: PropTypes.func.isRequired,\n setOpenProjectTreeDialog: PropTypes.func.isRequired,\n user: AppPropTypes.user,\n datasetReaders: PropTypes.arrayOf(AppPropTypes.datasetReader).isRequired,\n datasetFileReaders: PropTypes.arrayOf(AppPropTypes.datasetReader),\n showDatasetReadersLoader: PropTypes.bool.isRequired,\n datasetWriters: PropTypes.arrayOf(AppPropTypes.datasetWriter),\n dedicatedWriters: PropTypes.arrayOf(AppPropTypes.datasetWriter),\n showDatasetWritersLoader: PropTypes.bool.isRequired,\n loadingApps: PropTypes.bool,\n apps: PropTypes.object,\n loadingCoordinateSystems: PropTypes.bool,\n selectedCoordinateSystems: PropTypes.array,\n onSearchProjection: PropTypes.func.isRequired,\n searchCoordinateSystemsById: PropTypes.bool,\n totalCount: PropTypes.number,\n features: PropTypes.array\n}\n\nconst enhance = compose(injectIntl, withStyles(styles))\n\nexport default enhance(ProjectContent)\n","import { connect } from 'react-redux'\nimport { createSelector } from 'reselect'\nimport { compose, lifecycle, withState, withHandlers } from 'recompose'\nimport { withRouter } from 'react-router-dom'\nimport first from 'lodash/first'\nimport map from 'lodash/map'\nimport find from 'lodash/find'\nimport { isNumeric } from '../helpers/common'\n\nimport { loadCustomerUsers } from '../actions/customerUsers'\nimport {\n loadProjectDetails,\n loadProjectSubprojects,\n deleteProjectDatasets,\n updateProjectDataset,\n deleteSubProjects,\n updateProjectDetails,\n moveContent,\n loadProjectRoot,\n resetProjectInitialTree,\n loadProjectPath,\n setProjectPagination,\n loadProjectContent,\n setProjectRowsPerPage\n} from '../actions/project'\n\nimport { loadDatasetReaders } from '../actions/datasetReaders'\nimport { loadDatasetWriters } from '../actions/datasetWriters'\n\nimport { createNewFolder } from '../actions/projects'\n\nimport { addError } from '../actions/errors'\n\nimport {\n uploadAndImportFile,\n uploadAndImportManyFiles\n} from '../actions/uploadAndImport'\nimport {\n exportAndDownloadDataset,\n exportAndDownloadManyDatasets\n} from '../actions/exportAndDownload'\nimport { convertDataset } from '../actions/converts'\n\nimport { DOWNLOAD_TYPE } from '../helpers/export'\nimport { UPLOAD_TYPE } from '../helpers/upload'\nimport { CONVERT_TYPE } from '../helpers/convert'\nimport asIfReaderWriter from '../components/DatasetConversionDialog/model/asIfReaderWriter'\n\nimport {\n getUser,\n getCustomerUsers,\n getLoadingCustomerUsers,\n getProjectDetails,\n getProjectContent,\n getLoadingProjectDetails,\n getLoadingProjectInitialTree,\n getProjectTree,\n getLoadingProjectPath,\n getProjectPath,\n getDatasetReaders,\n getDatasetFileReaders,\n getLoadingDatasetReaders,\n getDatasetWriters,\n getDatasetDedicatedWriters,\n getLoadingDatasetWriters,\n getLoadingApplications,\n getApplications,\n getCoordinateSystemsLoading,\n getSelectedCoordinateSystems,\n getSearchCoordinateSystemsById,\n getProjectContentPagination,\n getProjectContentRowsPerPage,\n getProjectContentNamePrefix,\n getProjectContentSortBy,\n getProjectContentSortOrder,\n getTenantFeatures\n} from '../state'\n\nimport ProjectContent from '../components/ProjectContent'\nimport { isDataset } from '../helpers/projectContent'\nimport {\n filterCoordinateSystems,\n getCoordinateSystemsById\n} from '../actions/coordinateSystems'\n\nconst mapStateToProps = createSelector(\n [\n getUser,\n getCustomerUsers,\n getLoadingCustomerUsers,\n getProjectDetails,\n getProjectContent,\n getLoadingProjectDetails,\n getLoadingProjectInitialTree,\n getProjectTree,\n getLoadingProjectPath,\n getProjectPath,\n getDatasetReaders,\n getDatasetFileReaders,\n getLoadingDatasetReaders,\n getDatasetWriters,\n getDatasetDedicatedWriters,\n getLoadingDatasetWriters,\n getLoadingApplications,\n getApplications,\n getCoordinateSystemsLoading,\n getSelectedCoordinateSystems,\n getSearchCoordinateSystemsById,\n getProjectContentPagination,\n getProjectContentRowsPerPage,\n getProjectContentNamePrefix,\n getProjectContentSortBy,\n getProjectContentSortOrder,\n getTenantFeatures\n ],\n (\n user,\n customerUsers,\n loadingCustomerUsers,\n project,\n projectContent,\n loadingProjectDetails,\n loadingInitialTree,\n projectTree,\n loadingProjectPath,\n path,\n datasetReaders,\n datasetFileReaders,\n showDatasetReadersLoader,\n datasetWriters,\n dedicatedWriters,\n showDatasetWritersLoader,\n loadingApps,\n apps,\n loadingCoordinateSystems,\n selectedCoordinateSystems,\n searchCoordinateSystemsById,\n page,\n rowsPerPage,\n namePrefix,\n sortBy,\n sortOrder,\n features\n ) => ({\n user,\n customerUsers,\n project,\n projectContent,\n loading:\n loadingProjectDetails || loadingCustomerUsers || loadingProjectPath,\n loadingInitialTree,\n projectTree,\n path,\n datasetReaders,\n datasetFileReaders,\n showDatasetReadersLoader,\n datasetWriters,\n dedicatedWriters,\n showDatasetWritersLoader,\n loadingApps,\n apps,\n loadingCoordinateSystems,\n selectedCoordinateSystems,\n searchCoordinateSystemsById,\n page,\n rowsPerPage,\n namePrefix,\n sortBy,\n sortOrder,\n features\n })\n)\n\nconst enhance = compose(\n withRouter,\n\n connect(mapStateToProps, dispatch => ({ dispatch })),\n withState('searchText', 'setSearchText', ''),\n withState('selectedItems', 'setSelectedItems', []),\n withState('openCreateProject', 'setOpenCreateProject', false),\n withState('openDeleteConfirmation', 'setOpenDeleteConfirmation', false),\n withState('openDownloadManyDialog', 'setOpenDownloadManyDialog', false),\n withState('openEditDataset', 'setOpenEditDataset', false),\n withState('openImportDialog', 'setOpenImportDialog', false),\n withState('openUploadManyDialog', 'setOpenUploadManyDialog', false),\n withState('editableDataset', 'setEditableDataset'),\n withState('editingCurrentProject', 'setEditingCurrentProject', false),\n withState('createSubProject', 'setCreateSubProject', false),\n withState('openProjectTreeDialog', 'setOpenProjectTreeDialog', false),\n\n lifecycle({\n componentDidMount() {\n const projectId = this.props.match.params.id\n this.props.dispatch(loadProjectDetails(projectId))\n this.props.dispatch(loadCustomerUsers(projectId))\n this.props.dispatch(loadDatasetReaders())\n this.props.dispatch(loadDatasetWriters())\n },\n componentDidUpdate(prevProps) {\n if (prevProps.match.params.id !== this.props.match.params.id) {\n const projectId = this.props.match.params.id\n this.props.dispatch(loadProjectDetails(projectId))\n }\n }\n }),\n\n withHandlers({\n onSearchProjection: props => id => {\n isNumeric(id)\n ? props.dispatch(getCoordinateSystemsById(id))\n : props.dispatch(filterCoordinateSystems(id))\n },\n\n onError: props => (name, error) => {\n props.dispatch(addError(name, error))\n },\n\n onRefreshClick: props => () => {\n props.dispatch(\n loadProjectContent(\n props.match.params.id,\n props.page,\n props.rowsPerPage,\n props.orderBy,\n props.order,\n props.namePrefix\n )\n )\n },\n\n // Open side panel to edit the selected dataset\n onEdit: props => item => {\n if (item) {\n if (isDataset(item)) {\n props.setEditableDataset(item)\n props.setOpenEditDataset(true)\n }\n } else {\n // find a fresh copy of the dataset before editing it\n const dataset = find(props.datasets, {\n id: first(props.selectedItems).id\n })\n props.setEditableDataset(dataset)\n props.setOpenEditDataset(true)\n }\n },\n\n onUpdateDataset: props => data => {\n props.dispatch(updateProjectDataset(props.project.id, data))\n props.setOpenEditDataset(false)\n },\n\n onDelete: props => itemsToBeDeleted => {\n const ids = map(itemsToBeDeleted, 'id')\n props.setSelectedItems(\n props.selectedItems.filter(item => {\n return !ids.includes(item.id)\n })\n )\n const datasetIds = map(\n itemsToBeDeleted.filter(item => 'datasetType' in item),\n 'id'\n )\n const subprojectIds = map(\n itemsToBeDeleted.filter(item => !('datasetType' in item)),\n 'id'\n )\n if (datasetIds.length > 0) {\n props.dispatch(deleteProjectDatasets(props.project.id, datasetIds))\n }\n\n if (subprojectIds.length > 0) {\n props.dispatch(deleteSubProjects(props.project.id, subprojectIds))\n }\n props.setOpenDeleteConfirmation(false)\n },\n\n onUploadMany: props => filesToBeUploaded => {\n if (filesToBeUploaded.length > 0) {\n props.dispatch(\n uploadAndImportManyFiles(props.project.id, filesToBeUploaded)\n )\n }\n props.setOpenUploadManyDialog(false)\n },\n\n onDownloadMany: props => datasetsToBeDownloaded => {\n if (datasetsToBeDownloaded.length > 0) {\n props.dispatch(\n exportAndDownloadManyDatasets(datasetsToBeDownloaded, {\n reader: asIfReaderWriter.reader,\n writer: asIfReaderWriter.writer\n })\n )\n }\n props.setOpenDownloadManyDialog(false)\n },\n\n onSelectionChange: props => selection => {\n props.setSelectedItems(selection)\n },\n\n onSearchTextChange: props => searchText => {\n props.setSearchText(searchText)\n props.dispatch(setProjectPagination(0))\n props.dispatch(\n loadProjectContent(\n props.project.id,\n 0,\n props.rowsPerPage,\n props.orderBy,\n props.order,\n searchText\n )\n )\n },\n\n onChangePage: props => page => {\n props.dispatch(\n loadProjectContent(\n props.project.id,\n page,\n props.rowsPerPage,\n props.orderBy,\n props.order,\n props.namePrefix\n )\n )\n props.dispatch(setProjectPagination(page))\n },\n\n onChangeRowsPerPage: props => rowsPerPage => {\n props.dispatch(setProjectRowsPerPage(rowsPerPage))\n props.dispatch(\n loadProjectContent(\n props.project.id,\n props.page,\n rowsPerPage,\n props.orderBy,\n props.order,\n props.namePrefix\n )\n )\n },\n\n onImportDialogDone: props => (data, mode, datasetId) => {\n switch (mode) {\n case UPLOAD_TYPE:\n props.dispatch(uploadAndImportFile(props.project.id, data))\n break\n case CONVERT_TYPE:\n props.dispatch(\n convertDataset(\n props.project.id,\n datasetId,\n data,\n data.importData.name\n )\n )\n break\n case DOWNLOAD_TYPE:\n props.dispatch(\n exportAndDownloadDataset(\n data.importData.name,\n datasetId,\n props.project.id,\n data\n )\n )\n break\n default:\n break\n }\n\n props.setOpenImportDialog(false)\n },\n\n // Parent project is to be edited\n onEditCurrentProject: props => () => {\n props.setCreateSubProject(false)\n props.setEditingCurrentProject(true)\n props.setOpenCreateProject(true)\n },\n\n // Action button to create new folder has been clicked\n onCreateProjectOpenClick: props => () => {\n props.setCreateSubProject(true)\n props.setEditingCurrentProject(false)\n props.setOpenCreateProject(true)\n },\n\n // When submit of side panel has been clicked we need to distinguish if\n // Either the parent project shall be updated or a new folder shall be created\n onCreateProject: props => data => {\n if (props.editingCurrentProject) {\n props.dispatch(updateProjectDetails(data))\n props.dispatch(loadProjectPath(props.project.id))\n } else {\n // OnCreate backend fails if members include logged in user\n data.members = data.members.filter(member => {\n return member.userId !== props.user.id\n })\n data.parentProjectId = props.project.id\n props.dispatch(\n createNewFolder(data, () => {\n props.dispatch(\n loadProjectContent(\n props.project.id,\n props.page,\n props.rowsPerPage,\n props.orderBy,\n props.order,\n props.namePrefix\n )\n )\n props.dispatch(loadProjectPath(props.project.id))\n })\n )\n }\n\n props.setOpenCreateProject(false)\n },\n\n onCreateProjectCloseClick: props => () => props.setOpenCreateProject(false),\n\n onMoveToClick: props => () => {\n props.dispatch(\n loadProjectRoot(\n props.subprojects && props.subprojects.length > 0\n ? props.subprojects[0]\n : props.project\n )\n )\n props.setOpenProjectTreeDialog(true)\n },\n\n onMoveTo: props => parentProjectId => {\n props.setSelectedItems([])\n\n const subprojectIds = map(\n props.selectedItems.filter(item => !('datasetType' in item)),\n 'id'\n )\n\n const datasetIds = map(\n props.selectedItems.filter(item => 'datasetType' in item),\n 'id'\n )\n\n if (subprojectIds.length > 0 || datasetIds.length > 0) {\n props.dispatch(\n moveContent(\n parentProjectId,\n subprojectIds,\n datasetIds,\n props.project.id\n )\n )\n }\n\n props.dispatch(resetProjectInitialTree)\n props.setOpenProjectTreeDialog(false)\n },\n\n onExpand: props => nodeId => {\n if (!(nodeId && nodeId !== 'project')) return\n\n props.dispatch(loadProjectSubprojects(nodeId, false))\n },\n\n onCloseTreeDialog: props => () => {\n props.dispatch(resetProjectInitialTree)\n props.setOpenProjectTreeDialog(false)\n },\n\n onHandleRequestSort: props => (newOrderBy, newOrder) => {\n props.dispatch(setProjectPagination(0))\n props.dispatch(\n loadProjectContent(\n props.project.id,\n 0,\n props.rowsPerPage,\n newOrderBy,\n newOrder,\n props.namePrefix\n )\n )\n }\n })\n)\n\nexport default enhance(ProjectContent)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { FormattedMessage } from 'react-intl'\n\nimport { withStyles } from '@material-ui/core'\nimport Button from '@material-ui/core/Button'\nimport RestoreIcon from '@material-ui/icons/Undo'\n\nimport messages from '../../shared/messages'\n\nconst styles = theme => ({\n leftIcon: {\n marginRight: theme.spacing(1)\n }\n})\n\nconst RestoreButton = ({ classes, ...buttonProps }) => (\n \n)\nRestoreButton.propTypes = {\n classes: PropTypes.object.isRequired\n}\n\nexport default withStyles(styles)(RestoreButton)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { withStyles } from '@material-ui/core'\nimport Grid from '@material-ui/core/Grid'\n\nconst styles = theme => ({\n gutterTop: {\n paddingTop: theme.spacing(2)\n },\n gutterBottom: {\n paddingBottom: theme.spacing(2)\n }\n})\n\nconst ActionsBar = ({ classes, children, align, gutter, ...gridProps }) => (\n 0\n ? gutter === 'top'\n ? classes.gutterTop\n : classes.gutterBottom\n : null\n }\n >\n \n {React.Children.map(children, c => {\n const stretch = Boolean(c.props['data-stretch'])\n\n return (\n \n {c}\n \n )\n })}\n \n \n)\nActionsBar.propTypes = {\n classes: PropTypes.object.isRequired,\n gutter: PropTypes.string.isRequired,\n children: PropTypes.any,\n align: PropTypes.oneOf(['left', 'center', 'right'])\n}\n\nexport default withStyles(styles)(ActionsBar)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { withStyles } from '@material-ui/core'\n\nconst styles = theme => ({\n root: {\n display: 'inline-block',\n whiteSpace: 'nowrap'\n },\n icon: {\n verticalAlign: 'middle',\n marginRight: theme.spacing(1)\n }\n})\n\nconst Text = ({ classes, icon: Icon, children }) => (\n
\n {Icon && }\n {children}\n
\n)\nText.propTypes = {\n classes: PropTypes.object.isRequired,\n icon: PropTypes.any,\n children: PropTypes.any.isRequired\n}\n\nexport default withStyles(styles)(Text)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, withProps, withPropsOnChange } from 'recompose'\nimport { injectIntl } from 'react-intl'\nimport map from 'lodash/fp/map'\n\nimport messages from '../../shared/messages'\n\nimport DataTable, { columnPropType } from '../DataTable'\nimport Renders from '../DataTable/renders'\nimport DateTime from '../DataTable/renders/DateTime'\n\nimport { ReactComponent as DataSet } from '@mike/mike-shared-frontend/media/icons/DataSet'\nimport { ReactComponent as Folder } from '@mike/mike-shared-frontend/media/icons/Folder'\nimport { ReactComponent as Project } from '@mike/mike-shared-frontend/media/icons/Project'\nimport Text from '../Text'\n\nimport { PROJECT_TYPE, FOLDER_TYPE, DATASET_TYPE } from '../../shared/constants'\n\nconst RecycleBinItemsDeletedByMeTable = ({\n _columns,\n data,\n loading,\n selection,\n totalCount,\n onChangePage,\n onChangeRowsPerPage,\n onHandleRequestSort,\n onRestoreOneItem,\n onSelectionChange,\n page,\n topOffset\n}) => (\n \n)\nRecycleBinItemsDeletedByMeTable.propTypes = {\n data: PropTypes.arrayOf(PropTypes.object).isRequired,\n content: PropTypes.arrayOf(PropTypes.object).isRequired,\n searchText: PropTypes.string,\n loading: PropTypes.bool,\n selection: PropTypes.arrayOf(PropTypes.object),\n totalCount: PropTypes.number.isRequired,\n onChangePage: PropTypes.func.isRequired,\n onChangeRowsPerPage: PropTypes.func.isRequired,\n onHandleRequestSort: PropTypes.func.isRequired,\n onRestoreOneItem: PropTypes.func.isRequired,\n onSelectionChange: PropTypes.func.isRequired,\n _columns: PropTypes.arrayOf(columnPropType).isRequired,\n page: PropTypes.number.isRequired,\n topOffset: PropTypes.number\n}\n\nexport const isProject = item => item.$$type === PROJECT_TYPE\nexport const isFolder = item => item.$$type === FOLDER_TYPE\nexport const isDataset = item => item.$$type === DATASET_TYPE\n\nexport const canRestoreItem = item => item.canRestore\n\nexport const enhanceProjects = map(p =>\n p.path.length > 1\n ? { ...p, $$type: FOLDER_TYPE }\n : { ...p, $$type: PROJECT_TYPE }\n)\nconst enhanceDatasets = map(p => ({ ...p, $$type: DATASET_TYPE }))\n\nconst nameRender = (name, item) => (\n \n {name}\n \n)\n\nconst typeRender = (datasetType, item) =>\n isDataset(item)\n ? `Dataset / ${datasetType}`\n : isProject(item)\n ? 'Project'\n : 'Folder'\n\n/* const typeComparator = (_, __, A, B) => {\n const aProj = isProject(A)\n const bProj = isProject(B)\n return aProj && !bProj ? 1 : !aProj && bProj ? -1 : 0\n} */\n\nconst dateTimeRender = value => \n\nconst enhance = compose(\n injectIntl,\n\n withProps(({ intl }) => ({\n _columns: [\n {\n field: 'name',\n label: intl.formatMessage(messages.name),\n render: nameRender\n },\n {\n field: 'datasetType',\n label: intl.formatMessage(messages.type),\n render: typeRender\n // comparator: typeComparator\n },\n {\n field: 'sizeKB',\n label: intl.formatMessage(messages.size),\n render: Renders.size(1024)\n },\n {\n field: 'deletedAt',\n label: intl.formatMessage(messages.deletedAt),\n render: dateTimeRender\n }\n ]\n })),\n\n withPropsOnChange(['content', 'searchText'], props => {\n const { content } = props\n\n const projects = content.filter(item => item.itemType === PROJECT_TYPE)\n const datasets = content.filter(item => item.itemType === DATASET_TYPE)\n\n const data = [...enhanceProjects(projects), ...enhanceDatasets(datasets)]\n\n return {\n data\n }\n })\n)\n\nexport default enhance(RecycleBinItemsDeletedByMeTable)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose } from 'recompose'\nimport { injectIntl, defineMessages } from 'react-intl'\nimport size from 'lodash/fp/size'\nimport every from 'lodash/every'\n\nimport FormControl from '@material-ui/core/FormControl'\nimport Fade from '@material-ui/core/Fade'\nimport Typography from '@material-ui/core/Typography'\nimport { withStyles } from '@material-ui/core'\n\nimport RefreshButton from '../buttons/RefreshButton'\nimport RestoreButton from '../buttons/RestoreButton'\nimport ActionsBar from '../ActionsBar'\nimport AppNav from '../AppNav'\nimport { useTypedSelector } from '../../reducers'\n\nimport RecycleBinItemsDeletedByMeTable, {\n canRestoreItem\n} from '../RecycleBinItemsDeletedByMeTable'\n\nconst styles = theme => ({\n header: {\n position: 'sticky',\n top: theme.spacing(4),\n paddingBottom: theme.spacing(3),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: theme.palette.lightGrey.main\n },\n actionBar: {\n marginLeft: theme.spacing(-1)\n }\n})\n\nconst messages = defineMessages({\n title: {\n id: 'screens.recycleBin.title'\n }\n})\n\nconst RecycleBinItemsDeletedByMe = ({\n classes,\n data,\n totalCount,\n intl,\n loading,\n onRefresh,\n onRestore,\n // onSearchTextChange,\n onRestoreOneItem,\n onChangePage,\n onChangeRowsPerPage,\n onHandleRequestSort,\n onSelectionChange,\n searchText,\n selection,\n page\n}) => {\n const selectionSize = size(selection)\n const canRestore = selectionSize > 0 && every(selection, canRestoreItem)\n const tenantId = useTypedSelector(state => state.auth.user?.tenantId)\n\n const [topOffset, setTopOffset] = React.useState(0)\n const measuredRef = React.useCallback(node => {\n if (node !== null) {\n setTopOffset(node.getBoundingClientRect().height + 8)\n }\n }, [])\n\n return (\n <>\n \n
\n \n {intl.formatMessage(messages.title)}\n \n \n \n \n\n 0}>\n
\n \n
\n
\n
\n
\n
\n \n \n )\n}\nRecycleBinItemsDeletedByMe.propTypes = {\n classes: PropTypes.object.isRequired,\n data: PropTypes.arrayOf(PropTypes.object).isRequired,\n totalCount: PropTypes.number,\n intl: PropTypes.object.isRequired,\n loading: PropTypes.bool.isRequired,\n onRefresh: PropTypes.func.isRequired,\n onRestore: PropTypes.func.isRequired,\n onSearchTextChange: PropTypes.func.isRequired,\n onChangePage: PropTypes.func.isRequired,\n onChangeRowsPerPage: PropTypes.func.isRequired,\n onHandleRequestSort: PropTypes.func.isRequired,\n onRestoreOneItem: PropTypes.func.isRequired,\n onSelectionChange: PropTypes.func.isRequired,\n searchText: PropTypes.string.isRequired,\n selection: PropTypes.arrayOf(PropTypes.object),\n page: PropTypes.number.isRequired\n}\n\nconst enhance = compose(withStyles(styles), injectIntl)\n\nexport default enhance(RecycleBinItemsDeletedByMe)\n","import { connect } from 'react-redux'\nimport { compose, lifecycle, withState, withHandlers } from 'recompose'\nimport { createSelector } from 'reselect'\nimport { withRouter } from 'react-router-dom'\nimport map from 'lodash/map'\n\nimport {\n loadRecycleBinItemsDeletedByMe,\n restoreRecycleBinItemsDeletedByMe\n} from '../actions/recycleBin'\n\nimport {\n getRecycleBinItemsDeletedByMe,\n getLoadingRecycleBinItemsDeletedByMe,\n getRecycleBinItemsDeletedByMeOffset,\n getRecycleBinItemsDeletedByMeLimit,\n getRecycleBinItemsDeletedByMeTotalCount,\n getRestoringRecycleBinItemsDeletedByMe\n} from '../state'\n\nimport RecycleBinItemsDeletedByMe from '../components/RecycleBinItemsDeletedByMe'\n\nconst mapStateToProps = createSelector(\n [\n getRecycleBinItemsDeletedByMe,\n getLoadingRecycleBinItemsDeletedByMe,\n getRecycleBinItemsDeletedByMeOffset,\n getRecycleBinItemsDeletedByMeLimit,\n getRecycleBinItemsDeletedByMeTotalCount,\n getRestoringRecycleBinItemsDeletedByMe\n ],\n (data, loadingContent, offset, limit, totalCount, restoring) => ({\n data,\n loading: loadingContent || restoring,\n offset,\n limit,\n totalCount\n })\n)\n\nconst enhance = compose(\n withRouter,\n\n connect(mapStateToProps, dispatch => ({ dispatch })),\n\n withState('searchText', 'setSearchText', ''),\n withState('selection', 'setSelection', []),\n withState('page', 'setPage', 0),\n\n lifecycle({\n componentDidMount() {\n const tenantId = this.props.match.params.id\n this.props.dispatch(loadRecycleBinItemsDeletedByMe(tenantId))\n },\n componentDidUpdate(prevProps) {\n if (prevProps.match.params.id !== this.props.match.params.id) {\n const tenantId = this.props.match.params.id\n this.props.dispatch(loadRecycleBinItemsDeletedByMe(tenantId))\n }\n }\n }),\n\n withHandlers({\n onRefresh: props => () => {\n props.dispatch(loadRecycleBinItemsDeletedByMe(props.match.params.id))\n },\n\n onRestore: props => () => {\n props.setSelection([])\n const ids = map(props.selection, 'id')\n props.dispatch(\n restoreRecycleBinItemsDeletedByMe(props.match.params.id, ids)\n )\n },\n\n onRestoreOneItem: props => row => {\n props.setSelection([])\n if (row.canRestore) {\n const ids = [row.id]\n props.dispatch(\n restoreRecycleBinItemsDeletedByMe(props.match.params.id, ids)\n )\n }\n },\n\n onSelectionChange: props => selection => {\n props.setSelection(selection)\n },\n\n onSearchTextChange: props => text => {\n props.setSearchText(text)\n },\n\n onChangePage: props => (page, orderBy, order) => {\n props.dispatch(\n loadRecycleBinItemsDeletedByMe(\n props.match.params.id,\n page * props.limit,\n props.limit,\n orderBy,\n order\n )\n )\n props.setPage(page)\n },\n\n onChangeRowsPerPage: props => (limit, orderBy, order) => {\n props.dispatch(\n loadRecycleBinItemsDeletedByMe(\n props.match.params.id,\n props.page,\n limit,\n orderBy,\n order\n )\n )\n },\n\n onHandleRequestSort: props => (orderBy, order) => {\n props.dispatch(\n loadRecycleBinItemsDeletedByMe(\n props.match.params.id,\n props.page,\n props.limit,\n orderBy,\n order\n )\n )\n }\n })\n)\n\nexport default enhance(RecycleBinItemsDeletedByMe)\n","import React from 'react'\nimport objectHash from 'object-hash'\nimport map from 'lodash/map'\nimport { Form, Formik } from 'formik'\nimport { Grid } from '@material-ui/core'\nimport TextField from '../formik/TextField'\nimport * as Yup from 'yup'\nimport { useIntl } from 'react-intl'\nimport messages from '../../shared/messages'\nimport { MikeButton } from '@mike/mike-shared-frontend'\nimport { css } from 'emotion'\nimport ITenantUser from '../../model/ITenantUser'\nimport SelectField from '../formik/SelectField'\nimport { ROLE_TYPES } from '../../helpers/project'\n\nconst submitButtonStyle = css`\n float: right;\n`\nconst validationSchema = Yup.object().shape({\n role: Yup.string().required('Required')\n})\n\ninterface IProps {\n user: ITenantUser\n handleSubmit: (user: ITenantUser) => void\n}\n\nconst UserEditForm = (props: IProps) => {\n const intl = useIntl()\n const { handleSubmit, user } = props\n\n return (\n \n {formik => {\n const { handleChange, setFieldTouched } = formik\n\n const change = (name, e) => {\n e.persist()\n handleChange(e)\n setFieldTouched(name, true, false)\n }\n\n return (\n
\n \n \n \n \n \n \n \n\n \n ({\n value: role,\n name: intl.formatMessage({ id: `common.roles.${role}` })\n }))}\n onChange={change.bind(null, 'role')}\n required\n fullWidth\n />\n \n \n \n {intl.formatMessage({\n id: 'updateUsers.updateButton'\n })}\n \n \n \n
\n )\n }}\n \n )\n}\n\nexport default UserEditForm\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { makeStyles, Typography } from '@material-ui/core'\nimport SearchInput from '../SearchInput'\nimport { defineMessages, useIntl } from 'react-intl'\nimport RefreshButton from '../buttons/RefreshButton'\nimport DeleteButton from '../buttons/DeleteButton'\nimport DataTable from '../DataTable'\nimport IconButton from '../buttons/IconButton'\nimport { MikeSlidingPanel } from '@mike/mike-shared-frontend'\nimport MikeTooltip from '@mike/mike-shared-frontend/mike-tooltip/MikeTooltip'\nimport {\n deleteUsers,\n inviteUser,\n loadUsers,\n updateUser\n} from '../../actions/users'\n\nimport { setUsersRowsPerPage } from '../../reducers/users'\nimport LongName from '../DataTable/renders/LongName'\nimport Renders from '../DataTable/renders'\nimport messages from '../../shared/messages'\nimport { css } from 'emotion'\nimport ConfirmationDialog from '../Dialog/ConfirmationDialog'\nimport LongText from '../DataTable/renders/LongText'\nimport UserInviteForm, {\n UserInviteType\n} from '../UserInviteForm/UserInviteForm'\nimport UserEditForm from '../UserEditForm'\nimport UsersNav from '../UsersNav'\n\nimport { ReactComponent as UserOwner } from '@mike/mike-shared-frontend/media/icons/UserOwner'\nimport { ReactComponent as UserContributor } from '@mike/mike-shared-frontend/media/icons/UserContributor'\nimport { ReactComponent as UserReader } from '@mike/mike-shared-frontend/media/icons/UserReader'\nimport ITenantUser from '../../model/ITenantUser'\nimport { useTypedSelector } from '../../reducers'\n\nconst localMessages = defineMessages({\n title: {\n id: 'screens.users.title'\n },\n confirmationDialogTitle: {\n id: 'screens.users.confirmationDialog.title'\n },\n confirmationDialogMessage: {\n id: 'screens.users.confirmationDialog.message'\n },\n searchPlaceholder: {\n id: 'screens.users.input.search.placeholder'\n },\n inviteUser: {\n id: 'screens.users.button.invuteUser'\n }\n})\n\nconst hoverStyle = () => {\n return css`\n &:hover {\n cursor: pointer;\n }\n `\n}\n\nconst useStyles = makeStyles(theme => ({\n tableTopHeader: {\n position: 'sticky',\n top: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: '#f2f5f7'\n },\n tableTopActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(3)\n },\n leftActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-start'\n },\n rightActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-end'\n },\n dialogTitle: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(1),\n paddingTop: theme.spacing(1)\n },\n dialogContent: {\n maxWidth: 378,\n paddingBottom: theme.spacing(3),\n paddingRight: theme.spacing(3),\n backgroundColor: theme.palette.background.paper\n }\n}))\n\nconst Users = props => {\n const tenantId = useTypedSelector(state => state['auth'].user?.tenantId)\n\n const rowsPerPage = useTypedSelector(state => state['users'].rowsPerPage)\n\n const currentUserRoles = useTypedSelector(state => state['auth'].user?.roles)\n\n const users = useTypedSelector(state => state['users'].users)\n const isLoadingUsers = useTypedSelector(state => state['users'].loadingUsers)\n const dispatch = useDispatch()\n const intl = useIntl()\n const [searchText, setSearchText] = useState('')\n const classes = useStyles(props)\n const [currentPage, setCurrentPage] = useState(0)\n const [openUserEdit, setOpenUserEdit] = useState(false)\n const [inviteUserDialogVisible, setInviteUserDialogVisible] = useState(false)\n const [selectedRows, setSelectedRows] = useState([])\n const [sortOrder, setSortOrder] = useState(['asc'])\n const [sortOrderBy, setSortOrderBy] = useState(['name'])\n const [openDeleteConfirmation, setOpenDeleteConfirmation] = useState(\n false\n )\n const [itemsToBeDeleted, setItemsToBeDeleted] = useState([])\n const [tableActions, setTableActions] = useState[]>([]);\n const [\n currentEditingUser,\n setCurrentEditingUser\n ] = useState(null)\n\n useEffect(() => {\n if (tenantId) {\n dispatch(loadUsers(tenantId))\n }\n }, [dispatch, tenantId])\n\n useEffect(() => {\n const options = [\n {\n name: 'Edit',\n callBack: onColumnClick,\n render: Renders.renderEdit,\n disableGutters: true\n },\n ]\n\n if (currentUserRoles?.includes('UserManager')) {\n options.push({\n name: 'Delete',\n callBack: onDelete,\n render: Renders.renderDelete,\n disableGutters: true\n })\n }\n\n setTableActions(options)\n }, [currentUserRoles])\n\n const [topOffset, setTopOffset] = useState(0)\n const measuredRef = useCallback(node => {\n if (node !== null) {\n setTopOffset(node.getBoundingClientRect().height + 8)\n }\n }, [])\n\n const onRefresh = () => {\n if (tenantId) {\n dispatch(loadUsers(tenantId))\n }\n }\n\n const onDelete = item => {\n setItemsToBeDeleted([item])\n setOpenDeleteConfirmation(true)\n }\n\n const onDeleteItems = () => {\n setItemsToBeDeleted(selectedRows)\n setOpenDeleteConfirmation(true)\n }\n\n const onColumnClick = (column: ITenantUser) => {\n setCurrentEditingUser(column)\n setOpenUserEdit(true)\n }\n\n const onHandleRequestSort = (orderBy: string, order: string) => {\n setSortOrder([order])\n setSortOrderBy([orderBy])\n }\n\n const sortedUsers: ITenantUser[] = useMemo(() => {\n const filteredUsers =\n searchText.length === 0\n ? users\n : users.filter(user => {\n return (\n user.name.toLowerCase().includes(searchText.toLowerCase()) ||\n user.email.toLowerCase().includes(searchText.toLowerCase())\n )\n })\n\n return filteredUsers\n }, [users, searchText])\n\n const onOkDeleteUsers = () => {\n if (tenantId) {\n if (itemsToBeDeleted.length > 0) {\n dispatch(deleteUsers(itemsToBeDeleted, tenantId))\n }\n }\n setSelectedRows([])\n setOpenDeleteConfirmation(false)\n }\n\n const onCancelDeleteUsers = () => {\n setOpenDeleteConfirmation(false)\n }\n\n const longTextRender = value => \n\n const projectNameRender = value => \n\n const accessLevelRender = value => {\n switch (value) {\n case 'Owner':\n return (\n \n \n \n )\n case 'Contributor':\n return \n default:\n return \n }\n }\n\n const handleTablePageChange = page => {\n setCurrentPage(page)\n }\n\n const onChangeRowsPerPage = nRows => {\n if (tenantId) {\n dispatch(setUsersRowsPerPage({ rowsPerPage: nRows }))\n dispatch(loadUsers(tenantId))\n }\n }\n\n return (\n <>\n \n \n
\n \n {intl.formatMessage(localMessages.title)}\n \n
\n
\n \n\n \n\n {selectedRows.length > 0 && (\n \n )}\n
\n
\n {\n setInviteUserDialogVisible(true)\n }}\n />\n
\n
\n
\n\n \n\n {\n setOpenUserEdit(false)\n }}\n titleArea={intl.formatMessage({\n id: 'screens.users.editUser'\n })}\n contentArea={\n currentEditingUser && (\n {\n setOpenUserEdit(false)\n tenantId && dispatch(updateUser(user, tenantId))\n }}\n />\n )\n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n {\n setInviteUserDialogVisible(false)\n }}\n titleArea={intl.formatMessage({\n id: 'screens.users.inviteUser'\n })}\n contentArea={\n {\n setInviteUserDialogVisible(false)\n tenantId &&\n dispatch(inviteUser(data.email, data.role, data.url, tenantId))\n }}\n />\n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n \n )\n}\n\nexport default Users\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport { Snackbar, SnackbarContent } from '@material-ui/core'\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n snackbar: {\n backgroundColor: theme.palette.ultimate.main,\n color: theme.palette.ultimate.contrastText\n }\n })\n)\n\nconst AppNotificationSnack = ({ open, message }) => {\n const classes = useStyles()\n return (\n \n \n \n )\n}\nAppNotificationSnack.propTypes = {\n open: PropTypes.bool.isRequired,\n message: PropTypes.string\n}\n\nexport default AppNotificationSnack\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport { Snackbar, SnackbarContent } from '@material-ui/core'\nimport AppPropTypes from '../../shared/appPropTypes'\nimport DataTableRenders from '../DataTable/renders'\nimport { DEFAULT_LINKNOTIFY_TIMEOUT } from '../../shared/constants'\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n snackbar: {\n backgroundColor: theme.palette.ultimate.main,\n color: theme.palette.ultimate.contrastText\n },\n link: {\n color: theme.palette.text.hint,\n cursor: 'pointer',\n marginRight: theme.spacing(1)\n }\n })\n)\n\nconst LinkNotificationSnack = ({ open, onCloseCallBack, project, message }) => {\n const classes = useStyles()\n const projectContentNameLink = DataTableRenders.makeProjectNotificationLink(\n '/project'\n )\n return (\n \n \n {project && projectContentNameLink('VIEW', project)}\n \n }\n />\n \n )\n}\nLinkNotificationSnack.propTypes = {\n open: PropTypes.bool.isRequired,\n onCloseCallBack: PropTypes.func,\n message: PropTypes.string,\n project: AppPropTypes.project\n}\n\nexport default LinkNotificationSnack\n","import React, { ReactNode } from 'react'\nimport { connect } from 'react-redux'\nimport { Grid, Grow, Typography } from '@material-ui/core'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport { MuiThemeProvider } from '@material-ui/core/styles'\nimport MikeNavWarnBanner from '@mike/mike-shared-frontend/mike-nav-warn-banner/MikeNavWarnBanner'\nimport mikeTheme from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport appLogoImg from './appLogo.png'\n\nimport { ReactComponent as Logo } from '@mike/mike-shared-frontend/media/icons/LandingPage'\n\nimport './landingpage.css'\n\nconst splash = require('./splashscreen.jpg')\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n banner: {\n position: 'absolute',\n top: 0,\n zIndex: 11,\n width: '100%'\n },\n wrapper: {\n padding: '50px 40px 25px 40px'\n },\n header: {\n display: 'inline-block',\n verticalAlign: 'top',\n margin: '0 0 35px 15px'\n }\n })\n)\n\ntype Props = {\n children?: ReactNode\n}\n\nconst LandingLayout = ({ children }: Props) => {\n const classes = useStyles()\n\n const background = {\n backgroundImage: `url(${splash})`\n }\n\n return (\n \n
\n \n
\n
\n
\n \n
\n\n
\n \n
\n \n \n \"logo\"\n \n Cloud Admin\n \n \n\n {children}\n \n
\n
\n
\n
\n
\n )\n}\n\nexport default connect()(LandingLayout)\n","export default \"data:image/png;base64,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\"","export const INVITATION_VERSION = 'invitationVersion' as const\nexport const INVITATION_IV = 'invitationIv' as const\nexport const INVITATION = 'invitation' as const\n","/* eslint-disable import/no-anonymous-default-export */\n/**\n * store\n *\n * Basic local storage wrapper.\n */\nexport default {\n get: (key: string) => {\n const str = localStorage.getItem(key) as string\n try {\n return JSON.parse(str)\n } catch (e) {\n // tslint:disable-next-line:no-console\n console.error(e)\n return str\n }\n },\n set: (key: string, str: any) =>\n localStorage.setItem(key, JSON.stringify(str)),\n remove: (key: string) => localStorage.removeItem(key),\n allItems: (): Array => Object.keys(localStorage)\n}\n","export enum CreditsStateEnum {\n SUMMARY = 'SUMMARY',\n AVAILABLE = 'AVAILABLE',\n RESERVED = 'RESERVED',\n SPENT = 'SPENT',\n ALLOCATION = 'ALLOCATION'\n}\n","import React, { useEffect } from 'react'\nimport { connect } from 'react-redux'\nimport { Grid, Typography } from '@material-ui/core'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport { defineMessages, useIntl } from 'react-intl'\nimport { useLocation } from 'react-router-dom'\nimport qs from 'qs'\nimport { useOidc } from '@axa-fr/react-oidc'\nimport { MikeButton } from '@mike/mike-shared-frontend'\nimport LandingLayout from './LandingLayout'\nimport { StringMap } from '@axa-fr/react-oidc/dist/vanilla/oidc'\nimport { LOGGING_OUT } from '../mike-login'\nimport { INVITATION_VERSION } from '../../helpers/search-params.const'\nimport { INVITATION_TOKEN } from '../InvitationProvider/InvitationProvider'\n\nconst localMessages = defineMessages({\n button: {\n id: 'screens.loginScreen.button'\n },\n unsureHint: {\n id: 'screens.loginScreen.unsureHint'\n },\n unsureLink: {\n id: 'screens.loginScreen.unsureLink'\n }\n})\n\nconst useStyles = makeStyles(() =>\n createStyles({\n notes: {\n marginTop: 20,\n display: 'inline-block'\n }\n })\n)\n\nconst LandingPage = () => {\n const classes = useStyles()\n const { login } = useOidc()\n const intl = useIntl()\n\n const { search, pathname } = useLocation()\n\n const pathAndSearch = search.length > 1 ? pathname + search : pathname\n\n useEffect(() => {\n const loggingOut = sessionStorage.getItem(LOGGING_OUT)\n sessionStorage.removeItem(LOGGING_OUT)\n if (loggingOut !== 'true') {\n let extras: StringMap = {\n prompt: 'none',\n noTenant: search.includes(INVITATION_VERSION).toString()\n }\n\n if (search) {\n const parameters = qs.parse(search.replace('?', '')) || {}\n if (parameters.tenantId) {\n extras = {\n ...extras,\n tenantId: parameters.tenantId.toString(),\n noTenant: search.includes(INVITATION_VERSION).toString()\n }\n }\n }\n\n const invitationToken = localStorage.getItem(INVITATION_TOKEN)\n if (invitationToken?.includes(INVITATION_VERSION)) {\n extras = {\n ...extras,\n noTenant: 'true'\n }\n }\n\n login(pathAndSearch, extras)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n \n <>\n \n {\n login(pathAndSearch)\n }}\n >\n {intl.formatMessage(localMessages.button)}\n \n \n\n \n \n  \n \n {intl.formatMessage(localMessages.unsureLink)}\n \n .\n \n \n \n \n )\n}\n\nexport default connect()(LandingPage)\n","import * as React from 'react'\nimport { Route } from 'react-router-dom'\nimport { css } from 'emotion'\nimport Typography from '@material-ui/core/Typography'\nimport theme from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\n\ninterface PrivateRouteProps {\n // tslint:disable-next-line:no-any\n component: any\n isSignedIn: boolean\n // tslint:disable-next-line:no-any\n location: any\n}\n\nconst paddingStyle = css`\n padding: ${theme.spacing(1)}px;\n`\nconst PrivateRoute = (props: PrivateRouteProps) => {\n const { component: Component, isSignedIn, location, ...rest } = props\n\n return (\n \n isSignedIn ? (\n \n ) : (\n \n You don't have access to this page.\n \n )\n }\n />\n )\n}\n\nexport default PrivateRoute\n","import * as React from 'react'\nimport { Route, Redirect } from 'react-router-dom'\n\ninterface PrivateRouteProps {\n to: string\n // tslint:disable-next-line:no-any\n location: any\n}\n\nconst PrivateRoute = (props: PrivateRouteProps) => {\n const { to, location, ...rest } = props\n\n return (\n (\n \n )}\n />\n )\n}\n\nexport default PrivateRoute\n","import React from 'react'\n\nimport { Tabs } from '@material-ui/core'\nimport { PollOutlined } from '@material-ui/icons'\nimport { makeStyles, createStyles } from '@material-ui/core/styles'\nimport { useIntl } from 'react-intl'\nimport { useLocation } from 'react-router-dom'\nimport { LinkTab } from '../AppNav'\nimport { ReactComponent as TableResults } from '@mike/mike-shared-frontend/media/icons/TableResults'\nimport CreditsIcon from '../icons/CreditsIcon'\nimport { theme } from '../../styles/theme'\n\nconst useAppNavStyles = makeStyles(theme =>\n createStyles({\n tabsIndicator: {\n height: 3\n },\n hiddenTabRoot: {\n minWidth: 0,\n padding: 0,\n margin: 0,\n minHeight: 48\n },\n root: {\n borderBottom: '1px solid' + theme.palette.grey[300],\n paddingLeft: '40px',\n marginBottom: '10px'\n },\n activeLabel: {\n fontWeight: 'bold',\n color: theme.palette.secondary.main\n },\n svg: {\n filter: 'invert(0.5) sepia(1) saturate(5) hue-rotate(175deg)'\n }\n })\n)\n\nconst SiteInfoNav = () => {\n const intl = useIntl()\n const classes = useAppNavStyles()\n\n function usePath() {\n return useLocation().pathname\n }\n\n let currentPath = usePath()\n\n let activeTab\n\n switch (currentPath) {\n case '/site-info/details':\n activeTab = 0\n break\n case '/site-info/cpu':\n activeTab = 1\n break\n case '/site-info/storage':\n activeTab = 2\n break\n case '/site-info/credits':\n activeTab = 3\n break\n default: {\n if (\n currentPath === '/site-info/credits-allocation' ||\n currentPath === '/site-info/credits-available' ||\n currentPath === '/site-info/credits-reserved' ||\n currentPath === '/site-info/credits-spent'\n ) {\n activeTab = 3\n } else {\n activeTab = 0\n }\n }\n }\n return (\n \n \n {intl.formatMessage({ id: 'screens.siteInfo.tab.info' })}\n \n }\n icon={\n \n }\n />\n \n {intl.formatMessage({ id: 'screens.siteInfo.tab.cpu' })}\n \n }\n icon={}\n />\n \n {intl.formatMessage({ id: 'screens.siteInfo.tab.storage' })}\n \n }\n icon={}\n />\n \n {intl.formatMessage({ id: 'screens.siteInfo.tab.credits' })}\n \n }\n icon={\n \n }\n />\n \n )\n}\n\nexport default SiteInfoNav\n","import React from 'react'\nimport objectHash from 'object-hash'\nimport { Form, Formik } from 'formik'\nimport { Grid } from '@material-ui/core'\nimport TextField from '../formik/TextField'\nimport * as Yup from 'yup'\nimport { useIntl } from 'react-intl'\nimport { MikeButton } from '@mike/mike-shared-frontend'\nimport { css } from 'emotion'\nimport { useTypedSelector } from '../../reducers'\n\nconst submitButtonStyle = css`\n float: right;\n`\n\nconst validationSchema = Yup.object().shape({\n tenantName: Yup.string().required('Required'),\n billingReference: Yup.string()\n})\n\nexport type SiteDetailsFormProps = {\n tenantName: string\n billingReference: string\n}\n\ninterface IProps {\n values: SiteDetailsFormProps\n handleSubmit: (values: SiteDetailsFormProps) => void\n}\n\nconst SiteDetailsForm = (props: IProps) => {\n const intl = useIntl()\n const { handleSubmit, values } = props\n const isBackOffice = useTypedSelector(state => state.admin.isBackOffice)\n\n return (\n \n {formik => {\n const { handleChange, setFieldTouched } = formik\n\n const change = (name, e) => {\n e.persist()\n handleChange(e)\n setFieldTouched(name, true, false)\n }\n\n return (\n
\n \n \n \n \n {isBackOffice && (\n \n \n \n )}\n \n \n {intl.formatMessage({\n id: 'screens.siteDetailsForm.updateButton'\n })}\n \n \n \n
\n )\n }}\n \n )\n}\n\nexport default SiteDetailsForm\n","import React, { useEffect, useState } from 'react'\nimport { css } from 'emotion'\nimport Typography from '@material-ui/core/Typography'\nimport theme from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { ReactComponent as Edit } from '@mike/mike-shared-frontend/media/icons/Edit'\nimport Button from '@material-ui/core/Button'\nimport SiteInfoNav from '../SiteInfoNav'\nimport { useDispatch } from 'react-redux'\nimport { makeStyles } from '@material-ui/core'\nimport { useIntl } from 'react-intl'\nimport { useTypedSelector } from '../../reducers'\nimport { getProject } from '../../apis/admin'\nimport { loadAdminCredits } from '../../actions/admin'\nimport { mikePalette } from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { MikeSlidingPanel } from '@mike/mike-shared-frontend'\nimport SiteDetailsForm from '../SiteDetailsForm'\nimport { updateTenant } from '../../actions/tenant'\nimport { setBillingInformation } from '../../actions/billing'\n\nconst paddingStyle = css`\n padding: ${theme.spacing(1)}px;\n`\nconst useStyles = makeStyles(theme => ({\n tableTopHeader: {\n position: 'sticky',\n top: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: '#f2f5f7'\n },\n detailsHeader: {\n display: 'flex'\n },\n detailTable: {\n display: 'grid',\n paddingLeft: theme.spacing(1),\n gridTemplateColumns: 'auto minmax(0, 1fr)',\n gridGap: `0 ${theme.spacing(1)}px`\n }\n}))\n\nconst iconStyle = css`\n path {\n fill: ${mikePalette.secondary.main};\n }\n`\n\nconst SiteDetails = props => {\n const classes = useStyles(props)\n const intl = useIntl()\n const tenantId = useTypedSelector(state => state['auth'].user?.tenantId) || ''\n const tenantName = useTypedSelector((state) => {\n const foundTenant = state.tenant.tenants.find((tenant) => tenant.id === state.auth.user?.tenantId);\n return foundTenant?.name || ''\n })\n const credits = useTypedSelector(state => state['admin'].credits)\n const billingInformation = useTypedSelector(state => state['billing'])\n\n // const [numberOfUsers, setNumberOfUsers] = useState(0)\n // const [numberOfAdmins, setNumberOfAdmins] = useState(0)\n const [showEditor, setShowEditor] = useState(false)\n const dispatch = useDispatch()\n\n useEffect(() => {\n dispatch(loadAdminCredits())\n if (tenantId) {\n getProject(tenantId).then(res => {\n dispatch(setBillingInformation(res?.billingInformation))\n // if (res?.members) {\n // setNumberOfUsers(res.members.length)\n // setNumberOfAdmins(res.members.filter(m => m.role === 'Owner').length)\n // }\n })\n }\n }, [dispatch, tenantId])\n\n return (\n <>\n \n\n
\n
\n \n {intl.formatMessage({ id: 'screens.siteInfo.siteDetails' })}\n \n\n setShowEditor(true)}\n >\n \n \n
\n
\n
\n \n {intl.formatMessage({ id: 'screens.siteInfo.siteName' })}\n \n
\n
{tenantName}
\n
\n \n {intl.formatMessage({ id: 'screens.siteInfo.billingReference' })}\n \n
\n
{billingInformation.billingReference}
\n
\n \n {intl.formatMessage({ id: 'screens.siteInfo.remainingCredits' })}\n \n
\n
{credits}
\n
\n {/**/}\n {/* {intl.formatMessage({ id: 'screens.siteInfo.aboutYourUsers' })}*/}\n {/**/}\n {/*
*/}\n {/*
*/}\n {/* */}\n {/* {intl.formatMessage({ id: 'screens.siteInfo.numberOfUsers' })}*/}\n {/* */}\n {/*
*/}\n {/*
{numberOfUsers}
*/}\n {/*
*/}\n {/* */}\n {/* {intl.formatMessage({*/}\n {/* id: 'screens.siteInfo.usersWithOwnerRights'*/}\n {/* })}*/}\n {/* */}\n {/*
*/}\n {/*
{numberOfAdmins}
*/}\n {/*
*/}\n
\n\n {\n setShowEditor(false)\n }}\n titleArea={intl.formatMessage({\n id: 'screens.siteDetailsForm.headline'\n })}\n contentArea={\n {\n const newBillingInformation = {\n ...billingInformation,\n billingReference: value.billingReference\n }\n dispatch(\n updateTenant(\n {\n id: tenantId,\n name: value.tenantName\n },\n newBillingInformation\n )\n )\n setBillingInformation(newBillingInformation)\n setShowEditor(false)\n }}\n />\n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n \n )\n}\n\nexport default SiteDetails\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { css } from 'emotion'\nimport Typography from '@material-ui/core/Typography'\nimport theme from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport SiteInfoNav from '../SiteInfoNav'\nimport { useTypedSelector } from '../../reducers'\nimport { makeStyles } from '@material-ui/core'\nimport DataTable from '../DataTable'\nimport { useIntl } from 'react-intl'\nimport { StateEnum } from '../../model/StateEnum'\nimport { SiteCpuUsageState } from '../../reducers/siteCpuUsage'\nimport { useDispatch } from 'react-redux'\nimport { loadSiteCpuUsage } from '../../actions/siteCpuUsage'\nimport { DateRangePicker, DateRange } from 'materialui-daterange-picker'\nimport { MikeButton, MikeTooltip } from '@mike/mike-shared-frontend'\nimport moment from 'moment'\nimport LongName from '../DataTable/renders/LongName'\nimport { loadProjectNames } from '../../actions/projectNames'\n\nconst paddingStyle = css`\n padding: ${theme.spacing(1)}px;\n`\n\nconst useStyles = makeStyles(theme => ({\n tableTopHeader: {\n position: 'sticky',\n top: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n paddingBottom: theme.spacing(2),\n zIndex: 1,\n backgroundColor: '#f2f5f7'\n },\n dateRangePicker: {\n paddingLeft: theme.spacing(4),\n paddingBottom: theme.spacing(4)\n },\n dateRangePickerOverlay: {\n position: 'absolute',\n zIndex: 101\n }\n}))\n\nconst hoverStyle = () => css`\n &:hover {\n cursor: pointer;\n }\n`\n\nconst SiteCpuUsage = props => {\n const intl = useIntl()\n const classes = useStyles(props)\n const tenantId = useTypedSelector(state => state.auth?.user?.tenantId)\n const siteCpuUsage = useTypedSelector(\n state => state.siteCpuUsage as SiteCpuUsageState\n )\n const dispatch = useDispatch()\n const [open, setOpen] = React.useState(false)\n const projectNames = useTypedSelector(state => state.projectNames)\n\n useEffect(() => {\n if (tenantId && siteCpuUsage.state === StateEnum.INIT) {\n dispatch(loadSiteCpuUsage(tenantId, siteCpuUsage.params))\n }\n if (tenantId && projectNames.state === StateEnum.INIT) {\n dispatch(loadProjectNames(tenantId))\n }\n }, [tenantId, siteCpuUsage, dispatch, projectNames.state])\n\n const [topOffset, setTopOffset] = useState(0)\n const measuredRef = useCallback(node => {\n if (node !== null) {\n setTopOffset(node.getBoundingClientRect().height + 8)\n }\n }, [])\n\n const projectNameRender = value => {\n if (projectNames.projects[value]) {\n return \n }\n return (\n \n
{value}
\n \n )\n }\n\n const projectTimeRender = value => {\n return (\n
\n {value &&\n Intl.DateTimeFormat(navigator.language, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric'\n }).format(moment(value).toDate())}\n
\n )\n }\n\n const projectMinutesRender = value => {\n return (\n \n {value.toFixed(2)}\n \n )\n }\n\n const onHandleRequestSort = (orderBy: string, sortOrder: string) => {\n dispatch(\n loadSiteCpuUsage(tenantId, {\n ...siteCpuUsage.params,\n page: 0,\n orderBy,\n sortOrder\n })\n )\n }\n\n const onChangePage = page => {\n dispatch(\n loadSiteCpuUsage(tenantId, {\n ...siteCpuUsage.params,\n page\n })\n )\n }\n\n const onChangeRowsPerPage = rowsPerPage => {\n dispatch(\n loadSiteCpuUsage(tenantId, {\n ...siteCpuUsage.params,\n page: Math.floor(\n (siteCpuUsage.params.page * siteCpuUsage.params.rowsPerPage) /\n rowsPerPage\n ),\n rowsPerPage\n })\n )\n }\n\n const setDateRange = (dateRange: DateRange) => {\n const start = moment(dateRange.startDate)\n .startOf('day')\n .format()\n const end = moment(dateRange.endDate)\n .endOf('day')\n .format()\n dispatch(\n loadSiteCpuUsage(tenantId, {\n ...siteCpuUsage.params,\n page: 0,\n startDate: start,\n endDate: end\n })\n )\n }\n\n const startAsDate = useMemo(\n () => moment(siteCpuUsage.params.startDate).toDate(),\n [siteCpuUsage.params.startDate]\n )\n const endAsDate = useMemo(\n () => moment(siteCpuUsage.params.endDate).toDate(),\n [siteCpuUsage.params.endDate]\n )\n\n return (\n <>\n \n
\n \n {intl.formatMessage({\n id: 'screens.siteCpuUsage.cloudCpuUsage'\n })}\n \n
\n\n
\n setOpen(!open)} variant=\"outlined\">\n {Intl.DateTimeFormat(navigator.language, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n }).format(startAsDate)}\n  to \n {Intl.DateTimeFormat(navigator.language, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n }).format(endAsDate)}\n \n setOpen(!open)}\n maxDate={new Date()}\n onChange={range => {\n setDateRange(range)\n setOpen(!open)\n }}\n wrapperClassName={classes.dateRangePickerOverlay}\n closeOnClickOutside={true}\n />\n
\n\n `${item.operationId}-${item.validFrom}`}\n data={siteCpuUsage.cpuUsage}\n onHandleRequestSort={onHandleRequestSort}\n onChangeRowsPerPage={onChangeRowsPerPage}\n onChangePage={onChangePage}\n hasSelection={false}\n topOffset={topOffset}\n totalCount={siteCpuUsage.totalCount}\n hasMorePages={true}\n page={siteCpuUsage.params.page}\n rowsPerPage={siteCpuUsage.params.rowsPerPage}\n _order={[siteCpuUsage.params.sortOrder]}\n _orderBy={[siteCpuUsage.params.orderBy]}\n />\n \n )\n}\n\nexport default SiteCpuUsage\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport SvgIcon from '@material-ui/core/SvgIcon'\n\nconst BASE_COLOR = '#00A4EC'\n\nconst BuyCreditsIcon = ({ colorR = BASE_COLOR, ...props }) => (\n \n \n \n)\nBuyCreditsIcon.propTypes = {\n colorR: PropTypes.string\n}\nexport default BuyCreditsIcon\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport SvgIcon from '@material-ui/core/SvgIcon'\nconst BASE_COLOR = '#00A4EC'\n\nconst ReturnCreditsIcon = ({ colorR = BASE_COLOR, ...props }) => (\n \n \n \n \n \n \n)\nReturnCreditsIcon.propTypes = {\n colorR: PropTypes.string\n}\nexport default ReturnCreditsIcon\n","import React, { useEffect, useState } from 'react'\nimport { css } from 'emotion'\nimport Typography from '@material-ui/core/Typography'\nimport theme from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport { useTypedSelector } from '../../../reducers'\nimport {\n Box,\n Checkbox,\n Divider,\n IconButton,\n Menu,\n MenuItem,\n Popover,\n makeStyles\n} from '@material-ui/core'\nimport { useDispatch } from 'react-redux'\nimport BuyCreditsIcon from '../../icons/BuyCreditsIcon'\nimport Tooltip from '@material-ui/core/Tooltip'\nimport ConfirmationDialog from '../../Dialog/ConfirmationDialog'\nimport MuiDialogContent from '@material-ui/core/DialogContent'\nimport { TextField } from '@material-ui/core'\nimport ReturnCreditsIcon from '../../icons/ReturnCreditsIcon'\nimport { ArrowBack, ArrowDropDown, Settings } from '@material-ui/icons'\nimport { useHistory } from 'react-router-dom'\nimport { CreditsStateEnum } from '../../../model/CreditsStateEnum'\nimport { useIntl } from 'react-intl'\nimport {\n callCreditAvailableGet,\n callCreditMovePut,\n callCreditTenantGet,\n callCreditUnassignedPost,\n callCreditReportPost\n} from '../../../actions/credits'\nimport { getProject } from '../../../apis/admin'\nimport { ReportTypeEnum } from '../../../apis/reports'\n\nconst paddingStyle = css`\n padding: ${theme.spacing(0.7)}px;\n`\nconst paddingStyle2 = css`\n padding: ${theme.spacing(2)}px;\n`\nconst useStyles = makeStyles(theme => ({\n reportCheckWraps: {\n display: 'flex',\n flexDirection: 'column'\n },\n specialTypo: {\n paddingTop: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(1)\n },\n tableTopHeader: {\n display: 'flex',\n position: 'sticky',\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: 'white',\n border: '3px black',\n justifyContent: 'space-between',\n alignContent: 'center'\n },\n navSmallerPadding: {\n paddingBottom: theme.spacing(1)\n },\n dialogTitle: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(2)\n },\n dialogContent: {\n maxWidth: 378,\n paddingBottom: theme.spacing(3),\n paddingRight: theme.spacing(3),\n backgroundColor: theme.palette.background.paper\n },\n iconButton: {\n marginRight: theme.spacing(1),\n alignContent: 'center',\n alignItems: 'center',\n justifyContent: 'center',\n justifyItems: 'center'\n },\n tableTopButtons: {\n display: 'flex',\n justifyContent: 'space-between',\n alignContent: 'flex-end',\n alignItems: 'center'\n },\n menuDropdown: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-end'\n },\n\n popover: {\n maxWidth: '75vw'\n },\n content: {\n padding: theme.spacing(0),\n background: '#F8F8F8',\n width: 'max-content'\n },\n\n popHeader: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n padding: theme.spacing(2),\n paddingRight: theme.spacing(6),\n width: 'max-width'\n },\n\n messageBlock: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n // justifyContent: 'space-between',\n width: '100%'\n }\n}))\n\ninterface IProps {\n displayState: CreditsStateEnum\n disabled?: boolean\n columns?: any[]\n setColumns?: any\n onCreditsChange: () => void\n}\n\nconst CreditsNav = (props: IProps) => {\n const history = useHistory()\n const classes = useStyles(props)\n const intl = useIntl()\n\n const dispatch = useDispatch()\n\n const tenantId =\n useTypedSelector(state => state['auth']?.user?.tenantId) || null\n\n const tenantName = useTypedSelector(state => {\n const foundTenant = state.tenant.tenants.find(\n tenant => tenant.id === state.auth.user?.tenantId\n )\n return foundTenant?.name || '--'\n })\n\n const [openAssignDialog, setOpenAssignDialog] = useState(false)\n const [openReleaseDialog, setOpenReleaseDialog] = useState(false)\n const [openReportDialog, setOpenReportDialog] = useState(false)\n const [openBuyCreditsDialog, setOpenBuyCreditsDialog] = useState(\n false\n )\n\n const [unassignedValue, setUnassignedValue] = useState(0)\n\n const creditsUnassigned = useTypedSelector(\n state => state['credits'].creditUnassigned\n )\n\n const creditAvailable = useTypedSelector(\n state => state['credits'].creditAvailable\n )\n\n const [moveCredits, setMoveCredits] = useState(undefined)\n\n const [anchorEl, setAnchorEl] = React.useState(null)\n const [anchorEl2, setAnchorEl2] = React.useState(null)\n\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = event => {\n event.stopPropagation()\n setAnchorEl(null)\n }\n const handleClose2 = event => {\n event.stopPropagation()\n setAnchorEl2(null)\n }\n\n const valueLimitsTest = (bottomLimit, topLimit) => {\n const bl = parseFloat(bottomLimit)\n const ul = parseFloat(topLimit)\n\n return Boolean(moveCredits && (moveCredits < bl || moveCredits > ul))\n }\n\n const reloadCredits = async () => {\n if (!tenantId) return\n\n dispatch(callCreditTenantGet(tenantId))\n dispatch(callCreditAvailableGet(tenantId))\n const res = await getProject(tenantId)\n\n if (res.billingInformation?.billingReferenceTag) {\n dispatch(callCreditUnassignedPost(res.billingInformation))\n } else {\n dispatch(\n callCreditUnassignedPost({\n billingReferenceTag: '',\n billingReference: res.billingInformation?.billingReference,\n billingReferenceType: res.billingInformation?.billingReferenceType\n })\n )\n }\n\n props.onCreditsChange()\n }\n\n useEffect(() => {\n reloadCredits().catch(console.error)\n }, [])\n\n useEffect(() => {\n const availableCredits = creditsUnassigned?.data?.find(\n item => item.status === 'Available'\n )?.credits\n\n if (!availableCredits) {\n setUnassignedValue(0)\n } else {\n const parsedCredits = Number(parseFloat(availableCredits).toFixed(0))\n\n setUnassignedValue(parsedCredits)\n }\n }, [creditsUnassigned])\n\n const getHeaderLabel = (state: CreditsStateEnum) => {\n switch (state) {\n case CreditsStateEnum.ALLOCATION:\n return intl.formatMessage({\n id: 'credits.creditsNav.allocation'\n })\n case CreditsStateEnum.AVAILABLE:\n return intl.formatMessage({\n id: 'credits.creditsNav.available'\n })\n case CreditsStateEnum.RESERVED:\n return intl.formatMessage({\n id: 'credits.creditsNav.reserved'\n })\n case CreditsStateEnum.SPENT:\n return intl.formatMessage({\n id: 'credits.creditsNav.spent'\n })\n default:\n return intl.formatMessage({\n id: 'credits.creditsNav.summary'\n })\n }\n }\n\n const getHeaderSubtitle = (): string => {\n return props.displayState !== CreditsStateEnum.ALLOCATION\n ? 'on ' + tenantName + ' site'\n : \"from company's account\"\n }\n\n const valueCheckedChange = (itemToChange, oldValue) => {\n const copyArray = props.columns?.map(item => {\n if (item.field === itemToChange.field) return { ...item, hide: !oldValue }\n else return item\n })\n\n props.setColumns(copyArray)\n }\n\n return (\n <>\n {/* //ASSIGN */}\n {\n const error = valueLimitsTest(0, unassignedValue)\n if (!error && moveCredits) {\n const data = {\n credits: moveCredits,\n sourceTenantId: null,\n targetTenantId: tenantId\n }\n dispatch(callCreditMovePut(data))\n await reloadCredits()\n setMoveCredits(undefined)\n setOpenAssignDialog(false)\n }\n }}\n onCancel={() => {\n setMoveCredits(undefined)\n setOpenAssignDialog(false)\n }}\n >\n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.assignCredits'\n })}\n \n \n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.enterNumber'\n })}\n \n \n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.currentBalace'\n })}\n \n \n \n \n {unassignedValue +\n intl.formatMessage({\n id: 'credits.creditsNav.credits'\n })}\n \n \n \n setMoveCredits(parseFloat(e.target.value))}\n fullWidth\n />\n \n \n \n {/* //RELEASE */}\n {\n const error = valueLimitsTest(0, creditAvailable)\n if (!error && moveCredits) {\n const data = {\n credits: moveCredits,\n sourceTenantId: tenantId,\n targetTenantId: null\n }\n dispatch(callCreditMovePut(data))\n await reloadCredits()\n setMoveCredits(undefined)\n setOpenReleaseDialog(false)\n }\n }}\n onCancel={() => {\n setMoveCredits(undefined)\n setOpenReleaseDialog(false)\n }}\n >\n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.returnCredits'\n })}\n \n \n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.enterNumberReturn'\n })}\n \n \n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.creditsExp'\n })}\n \n \n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.currentBalanceAva'\n })}{' '}\n \n \n \n \n {Number(parseFloat(creditAvailable).toFixed(0)).toLocaleString(\n 'fr'\n ) +\n intl.formatMessage({\n id: 'credits.creditsNav.credits'\n })}\n \n \n \n setMoveCredits(parseFloat(e.target.value))}\n fullWidth\n />\n \n \n \n {/* //BUY */}\n {\n setOpenBuyCreditsDialog(false)\n await reloadCredits()\n }}\n onCancel={() => {\n setOpenBuyCreditsDialog(false)\n }}\n >\n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.buyCredits'\n })}\n \n \n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.youAreBuying'\n })}\n \n \n \n \n \n \n \n {/* //REPORT */}\n {\n dispatch(\n callCreditReportPost(tenantId as string, ReportTypeEnum.CREDITS)\n )\n setOpenReportDialog(false)\n }}\n onCancel={() => {\n setOpenReportDialog(false)\n }}\n >\n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.generate'\n })}{' '}\n \n \n \n \n {intl.formatMessage({\n id: 'credits.creditsNav.selectTheRange'\n })}\n \n \n {/*\n \n }\n label=\"Consumption\"\n onChange={() => handleReportSelection(ReportTypeEnum.CONSUMPTION)}\n />\n \n }\n label=\"Credits\"\n onChange={() => handleReportSelection(ReportTypeEnum.CREDITS)}\n /> \n */}\n \n \n {/* //SETTINGS */}\n \n
\n
\n \n {'Displayed fields'}\n \n
\n {props.columns &&\n props.columns?.map((item, index) => {\n return (\n
\n {index !== 0 && }\n
\n {\n valueCheckedChange(item, item.hide)\n }}\n color=\"primary\"\n />\n \n {item.headerName}\n \n
\n
\n )\n })}\n
\n \n
\n {props.displayState === CreditsStateEnum.SUMMARY && (\n \n {getHeaderLabel(props.displayState)}\n \n )}\n\n {props.displayState !== CreditsStateEnum.SUMMARY && (\n
\n {\n history.push(`/site-info/credits`)\n }}\n >\n \n \n \n
\n \n {getHeaderLabel(props.displayState)}\n \n \n
\n \n {getHeaderSubtitle()}\n \n
\n \n {\n history.push(`/site-info/credits`)\n }}\n >\n {' '}\n \n {intl.formatMessage({\n id: 'credits.creditsNav.summary'\n })}\n \n \n \n\n {props.displayState !== CreditsStateEnum.AVAILABLE && (\n {\n history.push(`/site-info/credits-available`)\n }}\n >\n {' '}\n \n {intl.formatMessage({\n id: 'credits.creditsNav.available'\n })}{' '}\n \n \n )}\n {props.displayState !== CreditsStateEnum.RESERVED && (\n
\n \n {\n history.push(`/site-info/credits-reserved`)\n }}\n >\n {' '}\n \n {intl.formatMessage({\n id: 'credits.creditsNav.reserved'\n })}\n \n \n
\n )}\n {props.displayState !== CreditsStateEnum.SPENT && (\n
\n \n {\n history.push(`/site-info/credits-spent`)\n }}\n >\n {' '}\n \n {intl.formatMessage({\n id: 'credits.creditsNav.spent'\n })}\n \n \n
\n )}\n {props.displayState !== CreditsStateEnum.ALLOCATION && (\n
\n \n {\n history.push(`/site-info/credits-allocation`)\n }}\n >\n {' '}\n \n {intl.formatMessage({\n id: 'credits.creditsNav.allocation'\n })}\n \n \n
\n )}\n \n
\n )}\n\n
\n {props.displayState !== CreditsStateEnum.RESERVED &&\n props.displayState !== CreditsStateEnum.SPENT && (\n \n {\n setOpenAssignDialog(true)\n }}\n >\n \n \n \n )}\n {props.displayState !== CreditsStateEnum.RESERVED &&\n props.displayState !== CreditsStateEnum.SPENT && (\n \n {\n setOpenReleaseDialog(true)\n }}\n >\n \n \n \n )}\n\n {/**/}\n {/* setOpenReportDialog(true)}*/}\n {/* >*/}\n {/* */}\n {/* */}\n {/**/}\n\n {props.displayState !== CreditsStateEnum.SUMMARY && (\n \n {\n setAnchorEl2(event.currentTarget)\n }}\n >\n \n \n \n )}\n {/*\n {props.displayState !== CreditsStateEnum.RESERVED &&\n props.displayState !== CreditsStateEnum.SPENT && (\n \n {\n // setOpenBuyCreditsDialog(true)\n }}\n >\n {intl.formatMessage({\n id: 'credits.creditsNav.buyCredits'\n })}\n \n \n )}\n */}\n
\n \n \n )\n}\n\nexport default CreditsNav\n","import React, { useEffect, useState } from 'react'\nimport { css } from 'emotion'\nimport Typography from '@material-ui/core/Typography'\nimport theme from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport SiteInfoNav from '../../SiteInfoNav'\nimport { makeStyles } from '@material-ui/core'\nimport { useIntl } from 'react-intl'\nimport { useDispatch } from 'react-redux'\nimport ContextHelpContainer from '../../ContextHelp'\nimport { Link } from 'react-router-dom'\nimport { ArrowForward } from '@material-ui/icons'\nimport { useHistory } from 'react-router-dom'\nimport CreditsNav from './CreditsNav'\nimport { CreditsStateEnum } from '../../../model/CreditsStateEnum'\nimport { useTypedSelector } from '../../../reducers'\nimport {\n callCreditTenantGet,\n callCreditUnassignedPost\n} from '../../../actions/credits'\nimport { IBillingInformation, getProject } from '../../../apis/admin'\n\nconst useStyles = makeStyles(theme => ({\n tableTopHeader: {\n display: 'flex',\n flexDirectoin: 'row',\n position: 'sticky',\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: 'white',\n border: '3px black',\n justifyContent: 'space-between',\n alignContent: 'center'\n },\n tableTopButtons: {\n display: 'flex',\n flexDirectoin: 'row',\n justifyContent: 'space-between',\n alignContent: 'flex-end',\n alignItems: 'center'\n },\n secondColWrap: {\n display: 'flex',\n flexDirection: 'row',\n width: '58%',\n justifyContent: 'space-between',\n alignContent: 'flex-end',\n alignItems: 'center'\n },\n root: {\n color: theme.palette.text.primary,\n textDecoration: 'underline',\n fontSize: 14,\n '&>span:hover': {\n textDecoration: 'underline'\n },\n '&>svg': {\n verticalAlign: 'middle',\n marginLeft: theme.spacing(1)\n }\n },\n\n dataFrame: {\n display: 'flex',\n flexDirectoin: 'row',\n marginTop: theme.spacing(1),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n alignContent: 'center',\n backgroundColor: 'white',\n cursor: 'pointer'\n },\n sectionFrame: {\n marginTop: 20\n },\n paddedDivider: {\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(1)\n },\n specialTypo: {\n paddingTop: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(1)\n },\n firstColWrap: {\n display: 'flex',\n width: '42%',\n flexDirection: 'row'\n },\n iconButton: {\n marginRight: theme.spacing(1),\n alignContent: 'center',\n alignItems: 'center',\n justifyContent: 'center',\n justifyItems: 'center'\n },\n navSmallerPadding: {\n paddingBottom: theme.spacing(1)\n },\n dialogTitle: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(2)\n },\n dialogContent: {\n maxWidth: 378,\n paddingBottom: theme.spacing(3),\n paddingRight: theme.spacing(3),\n backgroundColor: theme.palette.background.paper\n }\n}))\n\nconst CreditsSummary = props => {\n const intl = useIntl()\n const history = useHistory()\n const classes = useStyles(props)\n\n const [availableValue, setAvailableValue] = useState('--')\n const [reservedValue, setReservedValue] = useState('--')\n const [spentValue, setSpentValue] = useState('--')\n const [allocationValue, setAllocationValue] = useState('--')\n const [billingInformation, setBillingInformation] = useState<\n IBillingInformation\n >()\n\n const dispatch = useDispatch()\n const tenantId =\n useTypedSelector(state => state['auth']?.user?.tenantId) || ''\n\n const credits = useTypedSelector(state => state['credits']?.creditTenant)\n\n const creditsUnassigned =\n useTypedSelector(state => state['credits']?.creditUnassigned) ?? 0\n\n const availableCredits =\n useTypedSelector(state => state['credits']?.creditAvailable) ?? 0\n\n const paddingStyle = css`\n padding: ${theme.spacing(2)}px;\n `\n\n const addspace = (num, separator) => {\n var mainString = num.toString()\n mainString = mainString\n .split('')\n .reverse()\n .join('')\n\n mainString = mainString.match(/.{1,3}/g).join(separator)\n mainString = mainString\n .split('')\n .reverse()\n .join('')\n\n return mainString\n }\n\n const evalCreditsValues = status => {\n const temp = credits.filter(item => item.status === status)[0]?.credits\n if (temp) {\n return addspace(Math.round(temp), ' ')\n } else {\n return '--'\n }\n }\n\n function onCreditsChange() {\n dispatch(callCreditTenantGet(tenantId))\n }\n\n useEffect(() => {\n if (tenantId) {\n getProject(tenantId).then(res => {\n setBillingInformation(res?.billingInformation)\n })\n dispatch(callCreditTenantGet(tenantId))\n }\n }, [dispatch, tenantId])\n\n useEffect(() => {\n if (credits.length > 0) {\n setAvailableValue(evalCreditsValues('Available'))\n setReservedValue(evalCreditsValues('Reserved'))\n setSpentValue(evalCreditsValues('Spent'))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [credits])\n\n useEffect(() => {\n if (\n creditsUnassigned &&\n creditsUnassigned.data &&\n creditsUnassigned.data.length > 0\n ) {\n var test =\n creditsUnassigned.data.filter(item => item.status === 'Available')[0]\n .credits ?? 0\n setAllocationValue(\n test\n ? parseFloat(test)\n .toFixed(0)\n .toString()\n : '--'\n )\n } else {\n setAllocationValue('--')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [creditsUnassigned])\n\n useEffect(() => {\n if (availableCredits) setAvailableValue(availableCredits.toFixed(0))\n }, [availableCredits])\n\n useEffect(() => {\n if (!billingInformation) return\n\n if (billingInformation.billingReferenceTag) {\n dispatch(callCreditUnassignedPost(billingInformation))\n } else {\n dispatch(\n callCreditUnassignedPost({\n billingReferenceTag: '',\n billingReference: billingInformation.billingReference,\n billingReferenceType: billingInformation.billingReferenceType ?? ''\n })\n )\n }\n }, [billingInformation])\n\n return (\n <>\n \n\n \n\n
\n
\n \n {intl.formatMessage({\n id: 'credits.creditsSummary.siteCredits'\n })}\n \n
\n \n {intl.formatMessage({\n id: 'credits.creditsSummary.amount'\n })}\n \n
\n {\n history.push(`/site-info/credits-available`)\n }}\n >\n
\n \n {intl.formatMessage({\n id: 'credits.creditsSummary.available'\n })}\n \n \n
\n
\n \n {availableValue}\n \n event.stopPropagation()}\n >\n \n {' '}\n {intl.formatMessage({\n id: 'credits.creditsSummary.showMore'\n })}\n \n \n \n
\n \n {\n history.push(`/site-info/credits-reserved`)\n }}\n >\n
\n \n {intl.formatMessage({\n id: 'credits.creditsSummary.reserved'\n })}\n \n \n
\n
\n \n {reservedValue}\n \n event.stopPropagation()}\n >\n \n {' '}\n {intl.formatMessage({\n id: 'credits.creditsSummary.showMore'\n })}\n \n \n \n
\n \n {\n history.push(`/site-info/credits-spent`)\n }}\n >\n
\n \n {intl.formatMessage({\n id: 'credits.creditsSummary.spent'\n })}\n \n \n
\n
\n \n {spentValue}\n \n event.stopPropagation()}\n >\n \n {' '}\n {intl.formatMessage({\n id: 'credits.creditsSummary.showMore'\n })}\n \n \n \n
\n \n\n
\n
\n \n {intl.formatMessage({\n id: 'credits.creditsSummary.companyCredits'\n })}\n \n
\n \n {intl.formatMessage({\n id: 'credits.creditsSummary.amount'\n })}\n \n
\n\n {\n history.push(`/site-info/credits-allocation`)\n }}\n >\n
\n \n {intl.formatMessage({\n id: 'credits.creditsSummary.allocationToSites'\n })}\n \n\n \n
\n\n
\n \n {allocationValue}\n \n event.stopPropagation()}\n >\n \n {' '}\n {intl.formatMessage({\n id: 'credits.creditsSummary.showMore'\n })}\n \n \n \n
\n \n \n )\n}\n\nexport default CreditsSummary\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { css } from 'emotion'\nimport Typography from '@material-ui/core/Typography'\nimport theme from '@mike/mike-shared-frontend/mike-shared-styles/mikeSharedTheme'\nimport SiteInfoNav from '../SiteInfoNav'\nimport { useTypedSelector } from '../../reducers'\nimport { makeStyles } from '@material-ui/core'\nimport DataTable from '../DataTable'\nimport { useIntl } from 'react-intl'\nimport { StateEnum } from '../../model/StateEnum'\nimport { SiteStorageUsageState } from '../../reducers/siteStorageUsage'\nimport { useDispatch } from 'react-redux'\nimport { loadSiteStorageUsage } from '../../actions/siteStorageUsage'\nimport { MikeTooltip } from '@mike/mike-shared-frontend'\nimport LongName from '../DataTable/renders/LongName'\nimport ContextHelpContainer from '../ContextHelp'\nimport { loadProjectNames } from '../../actions/projectNames'\n\nconst paddingStyle = css`\n padding: ${theme.spacing(1)}px;\n`\n\nconst useStyles = makeStyles(theme => ({\n tableTopHeader: {\n display: 'flex',\n flexDirectoin: 'row',\n position: 'sticky',\n top: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n paddingBottom: theme.spacing(2),\n zIndex: 1,\n backgroundColor: '#f2f5f7'\n }\n}))\n\nconst hoverStyle = () => css`\n &:hover {\n cursor: pointer;\n }\n`\n\nconst SiteStorageUsage = props => {\n const intl = useIntl()\n const classes = useStyles(props)\n const tenantId = useTypedSelector(state => state.auth?.user?.tenantId)\n const tenantName = useTypedSelector((state) => {\n const foundTenant = state.tenant.tenants.find((tenant) => tenant.id === state.auth.user?.tenantId);\n return foundTenant?.name || ''\n })\n const siteStorageUsage = useTypedSelector(\n state => state.siteStorageUsage as SiteStorageUsageState\n )\n const dispatch = useDispatch()\n const projectNames = useTypedSelector(state => state.projectNames)\n\n useEffect(() => {\n if (tenantId && siteStorageUsage.state === StateEnum.INIT) {\n dispatch(loadSiteStorageUsage(tenantId, siteStorageUsage.params))\n }\n if (tenantId && projectNames.state === StateEnum.INIT) {\n dispatch(loadProjectNames(tenantId))\n }\n }, [tenantId, siteStorageUsage, dispatch, projectNames.state])\n\n const [topOffset, setTopOffset] = useState(0)\n const measuredRef = useCallback(node => {\n if (node !== null) {\n setTopOffset(node.getBoundingClientRect().height + 8)\n }\n }, [])\n\n const projectNameRender = value => {\n if (value === tenantId) {\n return \n }\n if (projectNames.projects[value]) {\n return \n }\n return (\n \n
{value}
\n \n )\n }\n\n const getResourceName = value => {\n switch (value) {\n case 'storage.azure.tiles.hot':\n return intl.formatMessage({\n id: 'screens.siteStorageUsage.type.tiles'\n })\n case 'storage.azure.multidimensional.hot':\n return intl.formatMessage({\n id: 'screens.siteStorageUsage.type.multidimensional'\n })\n case 'storage.azure.file.hot':\n return intl.formatMessage({\n id: 'screens.siteStorageUsage.type.file'\n })\n case 'storage.azure.timeseries.hot':\n return intl.formatMessage({\n id: 'screens.siteStorageUsage.type.timeseries'\n })\n case 'storage.azure.gisvectordata.hot':\n return intl.formatMessage({\n id: 'screens.siteStorageUsage.type.gisvectordata'\n })\n default:\n return intl.formatMessage(\n {\n id: 'screens.siteStorageUsage.type.unknown'\n },\n { value }\n )\n }\n }\n\n const resourceRender = value => {\n return
{getResourceName(value)}
\n }\n\n const projectMiBRender = value => {\n return (\n \n \n {new Intl.NumberFormat(navigator.language, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(value / 1024)}\n \n \n )\n }\n\n const onHandleRequestSort = (orderBy: string, sortOrder: string) => {\n dispatch(\n loadSiteStorageUsage(tenantId, {\n ...siteStorageUsage.params,\n page: 0,\n orderBy,\n sortOrder\n })\n )\n }\n\n const onChangePage = page => {\n dispatch(\n loadSiteStorageUsage(tenantId, {\n ...siteStorageUsage.params,\n page\n })\n )\n }\n\n const onChangeRowsPerPage = rowsPerPage => {\n dispatch(\n loadSiteStorageUsage(tenantId, {\n ...siteStorageUsage.params,\n page: Math.floor(\n (siteStorageUsage.params.page * siteStorageUsage.params.rowsPerPage) /\n rowsPerPage\n ),\n rowsPerPage\n })\n )\n }\n\n return (\n <>\n \n
\n \n {intl.formatMessage({\n id: 'screens.siteStorageUsage.cloudStorageUsage'\n })}\n \n \n
\n\n \n `${item.projectId}-${item.resourceId}-${item.validFrom}`\n }\n data={siteStorageUsage.storageUsage}\n onHandleRequestSort={onHandleRequestSort}\n onChangeRowsPerPage={onChangeRowsPerPage}\n onChangePage={onChangePage}\n hasSelection={false}\n topOffset={topOffset}\n totalCount={siteStorageUsage.totalCount}\n hasMorePages={true}\n page={siteStorageUsage.params.page}\n rowsPerPage={siteStorageUsage.params.rowsPerPage}\n _order={[siteStorageUsage.params.sortOrder]}\n _orderBy={[siteStorageUsage.params.orderBy]}\n />\n \n )\n}\n\nexport default SiteStorageUsage\n","import React, { useCallback, useEffect, useState, useMemo } from 'react'\nimport { useTypedSelector } from '../../reducers'\n\nimport {\n loadTenantFeatures,\n updateTenantApplication\n} from '../../actions/features'\nimport { useDispatch } from 'react-redux'\nimport { makeStyles, Typography } from '@material-ui/core'\nimport SearchInput from '../SearchInput'\nimport { defineMessages, useIntl } from 'react-intl'\nimport RefreshButton from '../buttons/RefreshButton'\nimport DataTable from '../DataTable'\nimport { StateEnum } from '../../model/StateEnum'\nimport LongName from '../DataTable/renders/LongName'\nimport messages from '../../shared/messages'\nimport { css } from 'emotion'\nimport IFeature from '../../model/IFeature'\nimport { appIconName } from '../MikeCloudApps/configuration'\nimport MikeAppIcon, {\n AppIconName\n} from '@mike/mike-shared-frontend/mike-icon/MikeAppIcon'\nimport Checkbox from '@material-ui/core/Checkbox'\nimport UsersNav from '../UsersNav'\n\nconst localMessages = defineMessages({\n title: {\n id: 'screens.applications.title'\n },\n searchPlaceholder: {\n id: 'screens.applications.input.search.placeholder'\n },\n active: {\n id: 'screens.applications.active'\n }\n})\n\nconst hoverStyle = () => {\n return css`\n &:hover {\n cursor: pointer;\n }\n `\n}\n\nconst useStyles = makeStyles(theme => ({\n tableTopHeader: {\n position: 'sticky',\n top: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: '#f2f5f7'\n },\n tableTopActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(3)\n },\n leftActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-start'\n },\n rightActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-end'\n },\n nameRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '20px'\n },\n groupRow: {\n paddingLeft: '20px'\n },\n dialogTitle: {\n fontWeight: 'bold',\n paddingBottom: theme.spacing(1),\n paddingTop: theme.spacing(1)\n },\n dialogContent: {\n maxWidth: 378,\n paddingBottom: theme.spacing(3),\n paddingRight: theme.spacing(3),\n backgroundColor: theme.palette.background.paper\n }\n}))\n\nconst FIRST_PAGE = 0\n\nconst APPLICATION_TYPE = 'Application'\n\nexport const APP_TO_FILTER = ['Flood Screener', 'Global Seas']\n\nconst Applications = props => {\n const features = useTypedSelector(state => state.features.features)\n const tenantId = useTypedSelector(state => state.auth?.user?.tenantId) || ''\n\n const apps = features.filter(feat => {\n return feat.type === APPLICATION_TYPE && !APP_TO_FILTER.includes(feat.name)\n })\n\n const loadingFeatures =\n useTypedSelector(state => state.features.loadingState) === StateEnum.LOADING\n\n const dispatch = useDispatch()\n const intl = useIntl()\n const [searchText, setSearchText] = useState('')\n const classes = useStyles(props)\n const [sortOrder, setSortOrder] = useState(['asc'])\n const [sortOrderBy, setSortOrderBy] = useState(['name'])\n\n const displayApps = useMemo(() => {\n return apps.filter(app => {\n return app.name.toLowerCase().includes(searchText.toLowerCase())\n })\n }, [apps, searchText])\n\n useEffect(() => {\n if (!features) {\n dispatch(loadTenantFeatures())\n }\n }, [dispatch, features])\n\n const applicationNameRender = (value, item: IFeature) => {\n const iconName: AppIconName =\n appIconName(item.name) !== undefined\n ? appIconName(item.name)\n : 'genericApp'\n if (item && item.name) {\n return (\n
\n {iconName && }\n \n
\n )\n }\n }\n\n const handleEnabledClick = (item, value) => {\n dispatch(updateTenantApplication(item.featureId, tenantId, !value))\n }\n\n const renderEnabledApp = (value, item: IFeature) => {\n return (\n {\n handleEnabledClick(item, value)\n }}\n />\n )\n }\n\n const [topOffset, setTopOffset] = useState(0)\n const measuredRef = useCallback(node => {\n if (node !== null) {\n setTopOffset(node.getBoundingClientRect().height + 8)\n }\n }, [])\n\n const onRefresh = () => {\n dispatch(loadTenantFeatures())\n }\n\n const onHandleRequestSort = (orderBy: string, order: string) => {\n setSortOrder([order])\n setSortOrderBy([orderBy])\n }\n\n return (\n <>\n \n
\n \n {intl.formatMessage(localMessages.title)}\n \n
\n
\n \n \n
\n
\n
\n\n {}}\n />\n \n )\n}\n\nexport default Applications\n","import React, { useCallback, useEffect, useState, useRef } from 'react'\nimport Typography from '@material-ui/core/Typography'\nimport { useHistory } from 'react-router-dom'\nimport { createStyles, makeStyles } from '@material-ui/core/styles'\nimport { ReactComponent as DataSet } from '@mike/mike-shared-frontend/media/icons/DataSet'\nimport { ReactComponent as Folder } from '@mike/mike-shared-frontend/media/icons/Folder'\nimport { css } from 'emotion'\nimport capitalize from 'lodash/capitalize'\nimport AppNav from '../AppNav'\nimport { useTypedSelector } from '../../reducers'\nimport SearchInput from '../SearchInput'\nimport { useIntl } from 'react-intl'\nimport RefreshButton from '../buttons/RefreshButton'\nimport CreateSubprojectButton from '../buttons/CreateSubprojectButton'\nimport { StateEnum } from '../../model/StateEnum'\nimport { useDispatch } from 'react-redux'\nimport { loadRootProjectList } from '../../actions/rootProjectActions'\nimport DataTable from '../DataTable'\nimport messages from '../../shared/messages'\nimport LongText from '../DataTable/renders/LongText'\nimport LongName from '../DataTable/renders/LongName'\nimport DateTime from '../DataTable/renders/DateTime'\nimport DataTableRenders, { actionStyle, iconStyle } from '../DataTable/renders'\nimport { MikeSlidingPanel } from '@mike/mike-shared-frontend'\nimport CreateProjectForm from '../CreateProjectForm'\nimport { loadCustomerUsers } from '../../actions/customerUsers'\nimport { loadProjectMembers } from '../../actions/project'\nimport { createProject, deleteProjects } from '../../actions/projects'\nimport { ReactComponent as Delete } from '@mike/mike-shared-frontend/media/icons/Delete'\nimport IProject from '../../model/IProject'\nimport ConfirmationDialog from '../Dialog/ConfirmationDialog'\nimport DeleteButton from '../buttons/DeleteButton'\nimport { getCapabilities } from '../../apis/project'\nimport { resetRootProjectLoadingState } from '../../reducers/rootProjectList'\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n projectDetails: {\n display: 'flex',\n paddingLeft: '40px',\n paddingRight: theme.spacing(2),\n paddingBottom: theme.spacing(3),\n position: 'sticky',\n zIndex: 1\n },\n tableTopHeader: {\n position: 'sticky',\n top: theme.spacing(3),\n paddingRight: theme.spacing(4),\n zIndex: 1,\n backgroundColor: '#f2f5f7'\n },\n mikeBreadcrumpsLastLabel: {\n fontWeight: 'bold',\n color: theme.palette.text.primary,\n maxWidth: '15vw',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'block',\n margin: '15px'\n },\n tableTopActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n paddingBottom: theme.spacing(3),\n marginLeft: theme.spacing(-1),\n paddingLeft: theme.spacing(5)\n },\n leftActionButtons: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-end'\n },\n rightActionButtons: {\n display: 'flex',\n justifyContent: 'center'\n },\n createSubprojectButton: {\n marginLeft: 20\n }\n })\n)\n\n// TODO: these renderes and the column definitions are the same as in\n// ProjectContentTable.js and should move to a shared place.\n// I sadly was in a hurry due to the deadline and did not have time to\n// refactor this. Bodo\nconst formatRender = value => {\n return value ? capitalize(value) : 'Folder'\n}\n\nconst longTextRender = value => \n\nconst itemNameRender = (value, item) => (\n \n)\n\nconst dateTimeRender = value => \n\nconst hoverStyle = item => {\n return 'datasetType' in item\n ? null\n : css`\n &:hover {\n cursor: pointer;\n }\n `\n}\n\nconst RootProject = () => {\n const intl = useIntl()\n const classes = useStyles()\n const dispatch = useDispatch()\n\n const {\n state: rootProjectState,\n params: queryParams,\n projects,\n totalCount\n } = useTypedSelector(state => state['rootProjectList'])\n\n const tenantId =\n useTypedSelector(state => state['auth']?.user?.tenantId) || ''\n const user = useTypedSelector(state => state['auth'].user)\n const loadingCustomerUsers = useTypedSelector(\n state => state['customerUsers'].loading\n )\n const loadingProjectMembers = useTypedSelector(\n state => state['project'].members.loading\n )\n\n const tenantName = useTypedSelector((state) => {\n const foundTenant = state.tenant.tenants.find((tenant) => tenant.id === state.auth.user?.tenantId);\n return foundTenant?.name || ''\n })\n\n const effectiveRole = useTypedSelector(state => {\n const data = state['customerUsers']?.data\n const userId = state['auth']?.user?.id\n\n if (data && userId && !state.customerUsers.loading) return data[userId]?.role || ''\n\n return ''\n })\n\n const [selectedItems, setSelectedItems] = useState([])\n const [createProjectOpen, setCreateProjectOpen] = useState(false)\n const [deleteItems, setDeleteItems] = useState([])\n const [showDeleteConfirmation, setShowDeleteConfirmation] = useState(false)\n const [capabilities, setCapabilities] = useState({})\n\n const [searchText, setSearchText] = useState('')\n const canCreateContent =\n useTypedSelector(state => state['admin']?.isRootContributor) || false\n\n const isAdmin = useTypedSelector(state => state['admin']?.isAdmin) || false\n\n useEffect(() => {\n if (tenantId) {\n dispatch(loadCustomerUsers(tenantId))\n\n if (isAdmin) {\n dispatch(loadProjectMembers(tenantId))\n }\n }\n }, [dispatch, isAdmin, tenantId])\n\n useEffect(() => {\n return () => {\n // reset the state when leaving the page so\n // that the next time we enter the page, we\n // start with reloading the data\n dispatch(resetRootProjectLoadingState())\n }\n }, [dispatch])\n\n useEffect(() => {\n if (rootProjectState === StateEnum.INIT) {\n dispatch(\n loadRootProjectList({ ...queryParams, page: 0, namePrefix: searchText })\n )\n }\n }, [rootProjectState, dispatch, queryParams, searchText])\n\n const loading =\n rootProjectState === StateEnum.LOADING ||\n rootProjectState === StateEnum.INIT\n\n const onSearchTextChange = text => {\n setSearchText(text)\n dispatch(loadRootProjectList({ ...queryParams, namePrefix: text }))\n }\n\n const onRefreshClick = () => {\n dispatch(loadRootProjectList(queryParams))\n }\n\n const onCreateProjectOpenClick = () => {\n setCreateProjectOpen(true)\n }\n\n const history = useHistory()\n const onColumnClick = useCallback(\n item => {\n history.push(`/project/${item.id}`)\n },\n [history]\n )\n\n const onHandleRequestSort = (orderBy, sortOrder) => {\n dispatch(\n loadRootProjectList({\n ...queryParams,\n page: 0,\n orderBy,\n sortOrder\n })\n )\n }\n\n const onChangePage = page => {\n dispatch(\n loadRootProjectList({\n ...queryParams,\n page\n })\n )\n }\n\n const onChangeRowsPerPage = rowsPerPage => {\n dispatch(\n loadRootProjectList({\n ...queryParams,\n rowsPerPage\n })\n )\n }\n\n const onCreateProjectCloseClick = () => {\n setCreateProjectOpen(false)\n }\n const onCreateProject = data => {\n // Member should not be part of this list\n data.members = data.members.filter(member => {\n return member.userId !== user?.id\n })\n dispatch(\n createProject(data, () => {\n dispatch(loadRootProjectList(queryParams))\n })\n )\n setCreateProjectOpen(false)\n }\n\n const canDelete = id => {\n return capabilities[id]?.canEdit || false\n }\n\n const renderDeleteItem = row => {\n const canDel = canDelete(row.id)\n return (\n
\n \n Delete\n
\n )\n }\n\n const deleteActionClicked = (row: IProject) => {\n if (canDelete(row.id)) {\n setDeleteItems([row])\n setShowDeleteConfirmation(true)\n }\n }\n\n const onOkDeleteProjects = () => {\n setShowDeleteConfirmation(false)\n const ids = deleteItems.map(item => item.id).filter(id => canDelete(id))\n\n dispatch(\n deleteProjects(ids, () => {\n dispatch(loadRootProjectList(queryParams))\n setSelectedItems(selectedItems.filter(item => !ids.includes(item.id)))\n })\n )\n }\n\n const onCancelDeleteProjects = () => {\n setShowDeleteConfirmation(false)\n }\n\n const onDeleteItems = () => {\n setDeleteItems(selectedItems)\n setShowDeleteConfirmation(true)\n }\n\n const fetchCapabilitiesIfNeeded = id => {\n if (capabilities[id] === null || capabilities[id] === undefined) {\n getCapabilities(id).then(newCap => {\n setCapabilities({ ...capabilities, [id]: newCap })\n })\n }\n }\n\n const actionPopupStateChange = (open, row) => {\n if (open) {\n fetchCapabilitiesIfNeeded(row.id)\n }\n }\n\n const onSelectionChange = items => {\n items.forEach(item => {\n fetchCapabilitiesIfNeeded(item.id)\n })\n setSelectedItems(items)\n }\n\n return (\n <>\n 1\n ? { id: 'screens.projects.confirmationDialog.message.multipleProj' }\n : { id: 'screens.projects.confirmationDialog.message.singleProj' }\n )}\n ok={intl.formatMessage(messages.yesDelete)}\n onOk={onOkDeleteProjects}\n onCancel={onCancelDeleteProjects}\n />\n \n
\n
\n \n {tenantName}{' '}\n {effectiveRole ? (\n \n [{effectiveRole}]\n \n ) : null}\n \n
\n\n
\n
\n \n \n\n {selectedItems.length > 0 && (\n \n )}\n
\n
\n
\n {canCreateContent && (\n \n )}\n
\n
\n
\n\n \n\n \n }\n actionsArea={null}\n noGrayOverlay={false}\n />\n
\n \n )\n}\n\nexport default RootProject\n","import {\n GridApi,\n GridColDef,\n GridSortItem,\n GridStateColDef,\n useGridApiRef\n} from '@mui/x-data-grid-pro'\nimport { useEffect, useState } from 'react'\nimport { useDebouncedCallback } from 'use-debounce'\n\ntype SavedData = {\n columnsConfig: Partial[]\n sortModel: GridSortItem[]\n}\n\nexport interface UseSavedTableStateProps {\n tableKey: string\n defaultColumns: GridColDef[]\n}\n\nexport function useSavedDataGridState(props: UseSavedTableStateProps) {\n const apiRef = useGridApiRef()\n const [columnsArray, setColumnsArray] = useState(props.defaultColumns)\n\n const saveState = (state: GridApi): void => {\n const allColumns = state.getAllColumns()\n const columnsConfig: Partial[] = []\n\n for (const column of allColumns) {\n const { field, hide, width } = column\n columnsConfig.push({ field, hide, width })\n }\n\n const sortModel = state.getSortModel()\n\n localStorage.setItem(\n props.tableKey,\n JSON.stringify({ columnsConfig, sortModel })\n )\n }\n\n const debounceStateSave = useDebouncedCallback(() => {\n saveState(apiRef.current)\n }, 100)\n\n useEffect(() => {\n const applyChanges = (changes: SavedData): void => {\n const sortModel = changes?.sortModel ?? []\n const columnsConfig = changes?.columnsConfig ?? []\n\n if (columnsConfig) {\n const newColDefs: GridColDef[] = []\n\n for (const columnConfig of columnsConfig) {\n const colDef = columnsArray.find(c => c.field === columnConfig.field)\n if (colDef) {\n colDef.width = columnConfig.width\n colDef.hide = columnConfig.hide\n newColDefs.push(colDef)\n }\n }\n\n setColumnsArray(\n newColDefs.length === 0 ? props.defaultColumns : newColDefs\n )\n }\n\n if (sortModel) {\n apiRef.current.setSortModel(sortModel)\n }\n }\n\n let changes: SavedData = {\n columnsConfig: [],\n sortModel: []\n }\n\n try {\n const localState: string = localStorage.getItem(props.tableKey) ?? ''\n\n if (localState) {\n changes = JSON.parse(localState)\n }\n } catch (e) {\n console.error('Error parsing saved state', e)\n }\n\n applyChanges(changes)\n }, [props.tableKey])\n\n return { apiRef, debounceStateSave, columnsArray, setColumnsArray }\n}\n","import React, { useEffect, useState } from 'react'\nimport { css } from 'emotion'\nimport SiteInfoNav from '../../SiteInfoNav'\nimport { useTypedSelector } from '../../../reducers'\nimport { useIntl } from 'react-intl'\nimport { useDispatch } from 'react-redux'\nimport { CreditsStateEnum } from '../../../model/CreditsStateEnum'\nimport CreditsNav from './CreditsNav'\nimport { callCreditUnassignedDetailsPost } from '../../../actions/credits'\nimport DateTime from '../../DataTable/renders/DateTime'\nimport { getProject } from '../../../apis/admin'\nimport { IBillingReferenceCreditsDetailsInput } from '../../../apis/credits'\nimport IBillingInformation from '../../../model/IBillingInformation'\nimport { WarningSharp } from '@material-ui/icons'\nimport { Paper, Typography } from '@material-ui/core'\nimport { cloneDeep } from 'lodash'\nimport { v4 as uuidv4 } from 'uuid'\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\nimport { useSavedDataGridState } from '../../../hooks/use-saved-data-grid-state.hook'\n\nconst hoverStyle = () => css`\n &:hover {\n cursor: pointer;\n }\n`\n\nconst validateDate = (state, transparent = false) => {\n if (state === 2) return 'red'\n if (state === 1) return 'orange'\n return transparent ? 'transparent' : 'inherit'\n}\n\nconst validityRender = ({ value }) => (\n \n \n \n {value[0]}\n \n \n)\n\nconst creditsRender = ({ value }) => {\n return (\n \n {new Intl.NumberFormat('fr', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(value)}\n \n )\n}\nconst dateTimeRender = ({ value }) =>\n value ? : '--'\n\nconst CreditsAllocation = () => {\n const intl = useIntl()\n const tenantId = useTypedSelector(state => state['auth']?.user?.tenantId)\n const creditLoading = useTypedSelector(state => state['credits'].loadingState)\n const [currentPage, setCurrentPage] = useState(0)\n const [currentRows, setCurrentRows] = useState(25)\n const [entries, setEntries] = useState()\n\n const creditUnassignedExt = useTypedSelector(\n state => state['credits'].creditUnassignedExt\n )\n const [billingInformation, setBillingInformation] = useState<\n IBillingInformation\n >()\n\n const defaultColumns: GridColDef[] = [\n {\n field: 'credits',\n headerName: intl.formatMessage({\n id: 'credits.columns.amount'\n }),\n cellClassName: hoverStyle,\n renderCell: params => creditsRender(params),\n width: 840\n },\n {\n field: 'expiresAt',\n headerName: intl.formatMessage({\n id: 'credits.columns.expiredBy'\n }),\n cellClassName: hoverStyle,\n renderCell: params => dateTimeRender(params),\n width: 840\n },\n {\n field: 'validity',\n headerName: intl.formatMessage({\n id: 'credits.columns.timeLeft'\n }),\n cellClassName: hoverStyle,\n renderCell: params => validityRender(params),\n valueGetter: params => {\n // provides alternative value for sorting\n // because MUI does not understand sorting with array cell\n const expiresAtTimeValue = new Date(params.row.expiresAt).getTime()\n\n return [params.row.validity[0], expiresAtTimeValue]\n },\n sortComparator: (v1, v2) => (v1![1] as number) - (v2![1] as number),\n width: 830\n }\n ]\n\n const {\n apiRef,\n debounceStateSave,\n columnsArray,\n setColumnsArray\n } = useSavedDataGridState({\n tableKey: 'credits-allocation-settings',\n defaultColumns\n })\n\n const dispatch = useDispatch()\n\n useEffect(() => {\n if (!tenantId) return\n\n getProject(tenantId).then(res => {\n setBillingInformation(res?.billingInformation)\n })\n }, [tenantId])\n\n useEffect(() => {\n if (!billingInformation) return\n\n const data: IBillingReferenceCreditsDetailsInput = {\n statusFilter: ['Available'], //, 'Spent', 'Reserved', 'Repaid'\n offset: 0,\n limit: 25,\n billingInformation: {\n billingReferenceTag: '',\n billingReference: billingInformation?.billingReference ?? '',\n billingReferenceType: billingInformation?.billingReferenceType ?? ''\n }\n }\n\n dispatch(callCreditUnassignedDetailsPost(data))\n }, [billingInformation, dispatch])\n\n const onChangePage = page => {\n const properPage = Math.floor(page)\n\n const dataOffset = properPage * currentRows\n setCurrentPage(properPage)\n\n const data: IBillingReferenceCreditsDetailsInput = {\n statusFilter: ['Available'], //, 'Spent', 'Reserved', 'Repaid'\n offset: dataOffset,\n limit: currentRows,\n billingInformation: {\n billingReferenceTag: '',\n billingReference: billingInformation?.billingReference || '',\n billingReferenceType: billingInformation?.billingReferenceType ?? ''\n }\n }\n dispatch(callCreditUnassignedDetailsPost(data))\n }\n\n const onChangeRowsPerPage = rowsPerPage => {\n setCurrentRows(rowsPerPage)\n const dataOffset = currentPage * currentRows\n setCurrentPage(dataOffset / rowsPerPage)\n const data: IBillingReferenceCreditsDetailsInput = {\n statusFilter: ['Available'], //, 'Spent', 'Reserved', 'Repaid'\n offset: dataOffset,\n limit: rowsPerPage,\n billingInformation: {\n billingReferenceTag: '',\n billingReference: billingInformation?.billingReference || '',\n billingReferenceType: billingInformation?.billingReferenceType ?? ''\n }\n }\n dispatch(callCreditUnassignedDetailsPost(data))\n }\n\n function onCreditsChange() {\n const data: IBillingReferenceCreditsDetailsInput = {\n statusFilter: ['Available'], //, 'Spent', 'Reserved', 'Repaid'\n offset: currentPage * currentRows,\n limit: currentRows,\n billingInformation: {\n billingReferenceTag: '',\n billingReference: billingInformation?.billingReference || '',\n billingReferenceType: billingInformation?.billingReferenceType ?? ''\n }\n }\n dispatch(callCreditUnassignedDetailsPost(data))\n }\n\n useEffect(() => {\n setEntries(cloneDeep(creditUnassignedExt))\n }, [creditUnassignedExt])\n\n return (\n <>\n \n\n \n
\n \n ({ ...item, id: uuidv4() })) ?? []}\n columns={columnsArray}\n pagination\n page={currentPage}\n pageSize={creditUnassignedExt?.limit ?? 0}\n rowCount={creditUnassignedExt?.totalCount ?? 0}\n paginationMode=\"server\"\n getRowId={item => item.id}\n loading={creditLoading}\n rowsPerPageOptions={[5, 10, 25, 50, 100]}\n onPageSizeChange={onChangeRowsPerPage}\n onPageChange={onChangePage}\n onStateChange={debounceStateSave}\n />\n \n \n )\n}\n\nexport default CreditsAllocation\n","import React, { FC } from 'react'\nimport moment, { Moment } from 'moment'\nimport Tooltip from '@material-ui/core/Tooltip'\n\ninterface Props {\n date: string\n}\n\nconst UTCDateTime: FC = ({ date }) => {\n const utcDate: Moment = moment.utc(date)\n\n return (\n \n
\n {moment(utcDate).format('DD MMM YYYY')}\n
\n \n )\n}\n\nexport default UTCDateTime\n","import React, { useEffect, useState } from 'react'\nimport { css } from 'emotion'\nimport { useDispatch } from 'react-redux'\nimport { useIntl } from 'react-intl'\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\nimport { v4 as uuidv4 } from 'uuid'\nimport { cloneDeep } from 'lodash'\n\nimport { CreditsStateEnum } from '../../../model/CreditsStateEnum'\n\nimport SiteInfoNav from '../../SiteInfoNav'\nimport { useTypedSelector } from '../../../reducers'\nimport { callCreditDetailsExtendedPost } from '../../../actions/credits'\nimport { WarningSharp } from '@material-ui/icons'\nimport { Paper, Typography } from '@material-ui/core'\nimport UTCDateTime from '../../DataTable/renders/UTCDateTime'\nimport CreditsNav from './CreditsNav'\nimport { useSavedDataGridState } from '../../../hooks/use-saved-data-grid-state.hook'\n\nconst hoverStyle = () => css`\n &:hover {\n cursor: pointer;\n }\n`\nconst validateDate = (state, transparent = false) => {\n if (state === 2) return 'red'\n if (state === 1) return 'orange'\n return transparent ? 'transparent' : 'inherit'\n}\n\nconst validityRender = ({ value }) => (\n \n \n \n {value[0]}\n \n
\n)\n\nconst dateTimeRender = ({ value }) => \n\nconst creditsRender = ({ value }) => {\n return (\n \n {new Intl.NumberFormat('fr', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(value)}\n \n )\n}\n\nconst salesOrderIdRender = ({ value }) => {value}\n\nconst CreditsAvailable = () => {\n const intl = useIntl()\n const tenantId = useTypedSelector(state => state['auth']?.user?.tenantId)\n const creditLoading = useTypedSelector(state => state['credits'].loadingState)\n const [currentPage, setCurrentPage] = useState(0)\n const [currentRows, setCurrentRows] = useState(10)\n const [entries, setEntries] = useState()\n const creditDetailsExt = useTypedSelector(\n state => state['credits'].creditDetailsExt\n )\n\n const defaultColumns: GridColDef[] = [\n {\n field: 'credits',\n headerName: intl.formatMessage({\n id: 'credits.columns.amount'\n }),\n hide: false,\n cellClassName: hoverStyle,\n renderCell: params => creditsRender(params),\n width: 635\n },\n {\n field: 'expiresAt',\n headerName: intl.formatMessage({\n id: 'credits.columns.expiredBy'\n }),\n hide: false,\n cellClassName: hoverStyle,\n renderCell: params => dateTimeRender(params),\n width: 635\n },\n {\n field: 'validity',\n headerName: intl.formatMessage({\n id: 'credits.columns.timeLeft'\n }),\n hide: false,\n cellClassName: hoverStyle,\n renderCell: params => validityRender(params),\n width: 635,\n valueGetter: params => {\n // provides alternative value for sorting\n // because MUI does not understand sorting with array cell\n const expiresAtTimeValue = new Date(params.row.expiresAt).getTime()\n\n return [params.row.validity[0], expiresAtTimeValue]\n },\n sortComparator: (v1, v2) => (v1![1] as number) - (v2![1] as number)\n },\n {\n field: 'subscriptionOrderId',\n headerName: intl.formatMessage({\n id: 'credits.columns.salesOrderId'\n }),\n hide: false,\n cellClassName: hoverStyle,\n renderCell: params => salesOrderIdRender(params),\n width: 635\n }\n ]\n\n const {\n apiRef,\n debounceStateSave,\n columnsArray,\n setColumnsArray\n } = useSavedDataGridState({\n tableKey: 'credits-available-settings',\n defaultColumns\n })\n\n const dispatch = useDispatch()\n\n useEffect(() => {\n const data = {\n statusFilter: ['Available'], //, 'Spent', 'Reserved', 'Repaid'\n offset: 0,\n limit: 25,\n tenantId: tenantId ?? '--'\n }\n dispatch(callCreditDetailsExtendedPost(data))\n }, [dispatch, tenantId])\n\n const onChangePage = page => {\n const properPage = Math.floor(page)\n\n const dataOffset = properPage * currentRows\n setCurrentPage(properPage)\n\n const data = {\n statusFilter: ['Available'], //, 'Spent', 'Reserved', 'Repaid'\n offset: dataOffset,\n limit: currentRows,\n tenantId: tenantId ?? '--'\n }\n\n dispatch(callCreditDetailsExtendedPost(data))\n }\n\n const onChangeRowsPerPage = rowsPerPage => {\n setCurrentRows(rowsPerPage)\n const dataOffset = currentPage * currentRows\n setCurrentPage(dataOffset / rowsPerPage)\n const data = {\n statusFilter: ['Available'], //, 'Spent', 'Reserved', 'Repaid'\n offset: dataOffset,\n limit: rowsPerPage,\n tenantId: tenantId ?? '--'\n }\n dispatch(callCreditDetailsExtendedPost(data))\n }\n\n /**\n * reload on change in CreditsNav\n */\n function onCreditsChange() {\n const dataOffset = currentPage * currentRows\n const data = {\n statusFilter: ['Available'], //, 'Spent', 'Reserved', 'Repaid'\n offset: dataOffset,\n limit: creditDetailsExt?.limit,\n tenantId: tenantId ?? '--'\n }\n dispatch(callCreditDetailsExtendedPost(data))\n }\n\n useEffect(() => {\n setEntries(cloneDeep(creditDetailsExt))\n }, [creditDetailsExt])\n\n return (\n <>\n \n \n
\n \n ({ ...item, id: uuidv4() })) ?? []}\n columns={columnsArray}\n pagination\n page={currentPage}\n pageSize={creditDetailsExt?.limit ?? 0}\n rowCount={creditDetailsExt?.totalCount ?? 0}\n paginationMode=\"server\"\n getRowId={item => item.id}\n loading={creditLoading}\n rowsPerPageOptions={[5, 10, 25, 50, 100]}\n onPageSizeChange={onChangeRowsPerPage}\n onPageChange={onChangePage}\n onStateChange={debounceStateSave}\n />\n \n \n )\n}\n\nexport default CreditsAvailable\n","import React, { useEffect, useState } from 'react'\nimport { css } from 'emotion'\nimport { cloneDeep } from 'lodash'\nimport SiteInfoNav from '../../SiteInfoNav'\nimport { useTypedSelector } from '../../../reducers'\nimport { useIntl } from 'react-intl'\nimport { useDispatch } from 'react-redux'\nimport { CreditsStateEnum } from '../../../model/CreditsStateEnum'\nimport CreditsNav from './CreditsNav'\nimport { callCreditDetailsExtendedPost } from '../../../actions/credits'\nimport moment from 'moment'\nimport { v4 as uuidv4 } from 'uuid'\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\nimport { Paper, Typography } from '@material-ui/core'\nimport { useSavedDataGridState } from '../../../hooks/use-saved-data-grid-state.hook'\n\nconst hoverStyle = () => css`\n &:hover {\n cursor: pointer;\n }\n`\nconst creditsRender = ({ value }) => {\n return (\n \n {new Intl.NumberFormat('fr', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(value)}\n \n )\n}\n\nconst renderStringCell = ({ value }) => {\n if (value) return {value}\n else\n return (\n \n Execution removed\n \n )\n}\n\nconst dateTimeRender = ({ value }) => {\n if (!value) return '--'\n\n return moment(value).format('DD MMM YYYY hh:mm')\n}\nconst salesOrderIdRender = ({ value }) => {value}\n\nconst CreditsSpent = () => {\n const intl = useIntl()\n const tenantId = useTypedSelector(state => state['auth']?.user?.tenantId)\n const creditLoading = useTypedSelector(state => state['credits'].loadingState)\n const creditDetailsExt = useTypedSelector(\n state => state['credits'].creditDetailsExt\n )\n\n const [currentPage, setCurrentPage] = useState(0)\n const [currentRows, setCurrentRows] = useState(10)\n const [entries, setEntries] = useState()\n\n const defaultColumns: GridColDef[] = [\n {\n field: 'credits',\n headerName: intl.formatMessage({\n id: 'credits.columns.amount'\n }),\n cellClassName: hoverStyle,\n renderCell: params => creditsRender(params),\n sortable: true,\n sortComparator: (v1, v2) => String(v1).localeCompare(String(v2)),\n width: 140\n },\n {\n field: 'startedAt',\n headerName: intl.formatMessage({\n id: 'credits.columns.executionStarted'\n }),\n cellClassName: hoverStyle,\n renderCell: params => dateTimeRender(params),\n sortable: true,\n sortComparator: (v1, v2) => String(v1).localeCompare(String(v2)),\n width: 215\n },\n {\n field: 'finishedAt',\n headerName: intl.formatMessage({\n id: 'credits.columns.executionFinished'\n }),\n hide: true,\n cellClassName: hoverStyle,\n renderCell: params => dateTimeRender(params),\n sortable: true,\n sortComparator: (v1, v2) => String(v1).localeCompare(String(v2)),\n width: 215\n },\n {\n field: 'executionTime',\n headerName: intl.formatMessage({\n id: 'credits.columns.executionTime'\n }),\n cellClassName: hoverStyle,\n renderCell: params => params.row.executionTime ?? 'Execution deleted',\n valueGetter: params => [\n params.row.executionTime,\n params.row.startedAt,\n params.row.finishedAt\n ],\n sortable: true,\n sortComparator: (v1, v2) => {\n const executionTimeLeft = v1![0]\n const executionTimeRight = v2![0]\n\n const startedAtLeft = new Date(v1![1]).getTime()\n const startedAtRight = new Date(v2![1]).getTime()\n\n const finishedAtLeft = new Date(v1![2]).getTime()\n const finishedAtRight = new Date(v2![2]).getTime()\n\n if (\n startedAtLeft &&\n startedAtRight &&\n finishedAtLeft &&\n finishedAtRight\n ) {\n const executionTimeLeftNum = finishedAtLeft - startedAtLeft\n const executionTimeRightNum = finishedAtRight - startedAtRight\n\n return executionTimeLeftNum - executionTimeRightNum\n } else {\n return String(executionTimeLeft).localeCompare(\n String(executionTimeRight)\n )\n }\n },\n width: 175\n },\n {\n field: 'operationId',\n headerName: intl.formatMessage({\n id: 'credits.columns.executionId'\n }),\n cellClassName: hoverStyle,\n renderCell: params => renderStringCell(params),\n sortable: true,\n sortComparator: (v1, v2) => String(v1).localeCompare(String(v2)),\n width: 300\n },\n {\n field: 'projectName',\n headerName: intl.formatMessage({\n id: 'credits.columns.projectName'\n }),\n cellClassName: hoverStyle,\n renderCell: params => renderStringCell(params),\n sortable: true,\n sortComparator: (v1, v2) => String(v1).localeCompare(String(v2)),\n width: 430\n },\n {\n field: 'projectId',\n headerName: intl.formatMessage({\n id: 'credits.columns.projectNo'\n }),\n hide: true,\n cellClassName: hoverStyle,\n renderCell: params => renderStringCell(params),\n sortable: true,\n sortComparator: (v1, v2) => String(v1).localeCompare(String(v2)),\n width: 290\n },\n {\n field: 'vm',\n headerName: intl.formatMessage({\n id: 'credits.columns.machine'\n }),\n cellClassName: hoverStyle,\n renderCell: params => renderStringCell(params),\n sortable: true,\n sortComparator: (v1, v2) => String(v1).localeCompare(String(v2)),\n width: 150\n },\n {\n field: 'poolType',\n headerName: intl.formatMessage({\n id: 'credits.columns.poolType'\n }),\n cellClassName: hoverStyle,\n renderCell: params => renderStringCell(params),\n sortable: true,\n sortComparator: (v1, v2) => String(v1).localeCompare(String(v2)),\n width: 150\n },\n {\n field: 'subscriptionOrderId',\n headerName: intl.formatMessage({\n id: 'credits.columns.salesOrderId'\n }),\n hide: true,\n cellClassName: hoverStyle,\n renderCell: params => salesOrderIdRender(params),\n sortable: true,\n sortComparator: (v1, v2) => String(v1).localeCompare(String(v2)),\n width: 150\n }\n ]\n\n const {\n apiRef,\n debounceStateSave,\n columnsArray,\n setColumnsArray\n } = useSavedDataGridState({\n tableKey: 'credits-spent-settings',\n defaultColumns\n })\n\n // const [columnsArray, setColumnsArray] = useState(defaultColumns)\n const dispatch = useDispatch()\n\n const onChangePage = page => {\n const properPage = Math.floor(page)\n\n const dataOffset = properPage * currentRows\n setCurrentPage(properPage)\n\n const data = {\n statusFilter: ['Spent'], //, 'Spent', 'Reserved', 'Repaid'\n offset: dataOffset,\n limit: currentRows,\n tenantId: tenantId ?? '--'\n }\n\n dispatch(callCreditDetailsExtendedPost(data))\n }\n\n const onChangeRowsPerPage = rowsPerPage => {\n const dataOffset = currentPage * currentRows\n setCurrentRows(rowsPerPage)\n setCurrentPage(dataOffset / rowsPerPage)\n\n const data = {\n statusFilter: ['Spent'], //, 'Spent', 'Reserved', 'Repaid'\n offset: dataOffset,\n limit: rowsPerPage,\n tenantId: tenantId ?? '--'\n }\n\n dispatch(callCreditDetailsExtendedPost(data))\n }\n\n useEffect(() => {\n const data = {\n statusFilter: ['Spent'], //, 'Spent', 'Reserved', 'Repaid'\n offset: 0,\n limit: currentRows,\n tenantId: tenantId ?? '--'\n }\n\n dispatch(callCreditDetailsExtendedPost(data))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, tenantId])\n\n useEffect(() => {\n setEntries(cloneDeep(creditDetailsExt))\n }, [creditDetailsExt])\n\n return (\n <>\n \n {}}\n />\n
\n \n ({ ...item, id: uuidv4() })) ?? []}\n columns={columnsArray}\n pagination\n page={currentPage}\n pageSize={creditDetailsExt?.limit ?? 0}\n rowCount={creditDetailsExt?.totalCount ?? 0}\n paginationMode=\"server\"\n getRowId={item => item.id}\n loading={creditLoading}\n rowsPerPageOptions={[5, 10, 25, 50, 100]}\n onPageSizeChange={onChangeRowsPerPage}\n onPageChange={onChangePage}\n onStateChange={debounceStateSave}\n />\n \n \n )\n}\n\nexport default CreditsSpent\n","import React, { useEffect, useState } from 'react'\nimport { css } from 'emotion'\nimport { v4 as uuidv4 } from 'uuid'\nimport { cloneDeep } from 'lodash'\nimport SiteInfoNav from '../../SiteInfoNav'\nimport { useTypedSelector } from '../../../reducers'\nimport { Paper, Typography } from '@material-ui/core'\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\nimport { useIntl } from 'react-intl'\nimport { useDispatch } from 'react-redux'\nimport { CreditsStateEnum } from '../../../model/CreditsStateEnum'\nimport CreditsNav from './CreditsNav'\nimport { callCreditDetailsExtendedPost } from '../../../actions/credits'\nimport DateTime from '../../DataTable/renders/DateTime'\nimport { useSavedDataGridState } from '../../../hooks/use-saved-data-grid-state.hook'\n\nconst hoverStyle = () => css`\n &:hover {\n cursor: pointer;\n }\n`\n\nconst creditsRender = ({ value }) => {\n return (\n \n {new Intl.NumberFormat('fr', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(value)}\n \n )\n}\nconst dateTimeRender = ({ value }) =>\n value ? (\n \n ) : (\n \n {'Execution removed'}\n \n )\nconst projectNameRender = ({ value }) =>\n value ? (\n value\n ) : (\n \n {'Project removed'}\n \n )\n\nconst machineRender = ({ value }) =>\n value ? (\n value\n ) : (\n \n {'Execution removed'}\n \n )\n\nconst salesOrderIdRender = ({ value }) => {value}\n\nconst CreditsReserved = () => {\n const intl = useIntl()\n const tenantId = useTypedSelector(state => state['auth']?.user?.tenantId)\n const creditLoading = useTypedSelector(state => state['credits'].loadingState)\n const [currentPage, setCurrentPage] = useState(0)\n const [currentRows, setCurrentRows] = useState(25)\n const [entries, setEntries] = useState()\n const creditDetailsExt = useTypedSelector(\n state => state['credits'].creditDetailsExt\n )\n const defaultColumns: GridColDef[] = [\n {\n field: 'credits',\n headerName: intl.formatMessage({\n id: 'credits.columns.amount'\n }),\n cellClassName: hoverStyle,\n renderCell: params => creditsRender(params),\n width: 300\n },\n {\n field: 'createdAt',\n headerName: intl.formatMessage({\n id: 'credits.columns.reserved'\n }),\n hide: true,\n cellClassName: hoverStyle,\n renderCell: params => dateTimeRender(params),\n width: 300\n },\n {\n field: 'operationId',\n headerName: intl.formatMessage({\n id: 'credits.columns.executionId'\n }),\n cellClassName: hoverStyle,\n renderCell: params => params.value ?? '--',\n width: 300\n },\n {\n field: 'projectName',\n headerName: intl.formatMessage({\n id: 'credits.columns.projectName'\n }),\n cellClassName: hoverStyle,\n renderCell: params => projectNameRender(params),\n width: 300\n },\n {\n field: 'projectId',\n headerName: intl.formatMessage({\n id: 'credits.columns.projectNo'\n }),\n hide: true,\n cellClassName: hoverStyle,\n renderCell: params => params.value ?? '--',\n width: 300\n },\n {\n field: 'vm',\n headerName: intl.formatMessage({\n id: 'credits.columns.machine'\n }),\n cellClassName: hoverStyle,\n renderCell: params => machineRender(params),\n width: 300\n },\n {\n field: 'poolType',\n headerName: intl.formatMessage({\n id: 'credits.columns.poolType'\n }),\n cellClassName: hoverStyle,\n renderCell: params => params.value ?? '--',\n width: 300\n },\n {\n field: 'subscriptionOrderId',\n headerName: intl.formatMessage({\n id: 'credits.columns.salesOrderId'\n }),\n hide: false,\n cellClassName: hoverStyle,\n renderCell: params => salesOrderIdRender(params),\n width: 300\n }\n ]\n\n const {\n apiRef,\n debounceStateSave,\n columnsArray,\n setColumnsArray\n } = useSavedDataGridState({\n tableKey: 'credits-reserved-settings',\n defaultColumns\n })\n\n const dispatch = useDispatch()\n\n useEffect(() => {\n const data = {\n statusFilter: ['Reserved'], //, 'Spent', 'Reserved', 'Repaid'\n offset: 0,\n limit: 25,\n tenantId: tenantId ?? '--'\n }\n dispatch(callCreditDetailsExtendedPost(data))\n }, [dispatch, tenantId])\n\n const onChangePage = page => {\n const properPage = Math.floor(page)\n\n const dataOffset = properPage * currentRows\n setCurrentPage(properPage)\n\n const data = {\n statusFilter: ['Reserved'], //, 'Spent', 'Reserved', 'Repaid'\n offset: dataOffset,\n limit: currentRows,\n tenantId: tenantId ?? '--'\n }\n dispatch(callCreditDetailsExtendedPost(data))\n }\n\n const onChangeRowsPerPage = rowsPerPage => {\n setCurrentRows(rowsPerPage)\n const dataOffset = currentPage * currentRows\n setCurrentPage(dataOffset / rowsPerPage)\n const data = {\n statusFilter: ['Reserved'], //, 'Spent', 'Reserved', 'Repaid'\n offset: dataOffset,\n limit: rowsPerPage,\n tenantId: tenantId ?? '--'\n }\n dispatch(callCreditDetailsExtendedPost(data))\n }\n\n useEffect(() => {\n setEntries(cloneDeep(creditDetailsExt))\n }, [creditDetailsExt])\n\n return (\n <>\n \n\n {}}\n />\n
\n \n ({ ...item, id: uuidv4() })) ?? []}\n columns={columnsArray}\n pagination\n page={currentPage}\n pageSize={creditDetailsExt?.limit ?? 0}\n rowCount={creditDetailsExt?.totalCount ?? 0}\n paginationMode=\"server\"\n getRowId={item => item.id}\n loading={creditLoading}\n rowsPerPageOptions={[5, 10, 25, 50, 100]}\n onPageSizeChange={onChangeRowsPerPage}\n onPageChange={onChangePage}\n onStateChange={debounceStateSave}\n />\n \n \n )\n}\n\nexport default CreditsReserved\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport MikeSnackbar from '@mike/mike-shared-frontend/mike-snackbar'\nimport { Route, Switch } from 'react-router-dom'\nimport { useOidc, useOidcIdToken } from '@axa-fr/react-oidc'\n\nimport { getNotAuthErrors } from '../../helpers/errors'\nimport AppPropTypes from '../../shared/appPropTypes'\nimport AppLayout from '../AppLayout'\nimport PageNotFound from '../PageNotFound'\nimport APIAccess from '../APIAccess'\nimport UserGroups from '../UserGroups'\nimport ConnectedProjectContent from '../../containers/ConnectedProjectContent'\nimport ConnectedRecycleBinItemsDeletedByMe from '../../containers/ConnectedRecycleBinItemsDeletedByMe'\nimport Users from '../Users'\nimport AppNotificationSnack from '../AppNotificationSnack'\nimport LinkNotificationSnack from '../LinkNotificationSnack'\nimport { instance as appInsightsInstance } from '../../apis/appInsights'\nimport { CATEGORIES } from '../../helpers/project'\nimport { Typography } from '@material-ui/core'\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\nimport Checkbox from '@material-ui/core/Checkbox'\nimport { setUser, setIsAuthenticated } from '../../actions/auth'\nimport { getUserProfile } from '../../apis'\nimport { useDispatch } from 'react-redux'\nimport LandingPage from '../LandingPage'\nimport PrivateRoute from '../PrivateRoute'\nimport RedirectRoute from '../RedirectRoute'\nimport SiteDetails from '../SiteDetails'\nimport SiteCpuUsage from '../SiteCpuUsage'\nimport CreditsSummary from '../Credits/CreditsPanels'\nimport SiteStorageUsage from '../SiteStorageUsage'\nimport Applications from '../Applications'\nimport RootProject from '../RootProject'\nimport { useLocation } from 'react-router-dom'\nimport qs from 'qs'\nimport { useTypedSelector } from '../../reducers'\nimport CreditsAllocation from '../Credits/CreditsPanels/CreditsAllocation'\nimport CreditsAvailable from '../Credits/CreditsPanels/CreditsAvailable'\nimport CreditsSpent from '../Credits/CreditsPanels/CreditsSpent'\nimport CreditsReserved from '../Credits/CreditsPanels/CreditsReserved'\nimport { INVITATION_VERSION } from '../../helpers/search-params.const'\nexport const DEFAULT_PROJECTS_VIEW = CATEGORIES.MY\n\nconst App = ({\n errors,\n notification,\n linkNotification,\n linkToProject,\n loginConfig,\n support,\n tutorial,\n onCloseError,\n onCloseLinkNotification,\n onClosePopupReminder,\n onSurpressPopupReminder,\n appNotifications,\n popupReminderIsOpen,\n surpressPopupReminder,\n progressItems,\n loadingTenants,\n tenants,\n openCreateTenant,\n onCreateTenantCloseClick,\n onCreateTenant,\n onOpenCreateTenant,\n isAdmin,\n isBackOffice,\n features,\n currentProject\n // pca\n}) => {\n const dispatch = useDispatch()\n const otherErrors = getNotAuthErrors(errors)\n const onLogoutClick = React.useCallback(() => {\n appInsightsInstance().setAuthenticatedUserContext(null)\n }, [])\n\n const [lastOtherError, setLastOtherError] = React.useState(null)\n const { isAuthenticated, login } = useOidc()\n const { idToken, idTokenPayload } = useOidcIdToken()\n\n const { search, pathname } = useLocation()\n\n const user = useTypedSelector(state => state.auth.user)\n\n const [currentUser, setCurrentUser] = React.useState(null)\n\n React.useEffect(() => {\n if (idToken && idTokenPayload) {\n const user = getUserProfile(idTokenPayload)\n dispatch(setUser(user))\n setCurrentUser(user)\n }\n }, [dispatch, idToken, idTokenPayload])\n\n React.useEffect(() => {\n if (user) {\n if (search) {\n const pathAndSearch = search.length > 1 ? pathname + search : pathname\n const parameters = qs.parse(search.replace('?', '')) || {}\n if (parameters.tenantId && parameters.tenantId !== user.tenantId) {\n const extras = {\n prompt: 'none',\n tenantId: parameters.tenantId.toString()\n }\n\n login(pathAndSearch, extras)\n }\n }\n } else {\n const pathAndSearch = search.length > 1 ? pathname + search : pathname\n if (search.includes(INVITATION_VERSION)) {\n const extras = {\n noTenant: 'true'\n }\n\n login(pathAndSearch, extras)\n }\n }\n }, [user, login, search, pathname])\n\n React.useEffect(() => {\n if (user) {\n const _paq = (window._paq = window._paq || [])\n _paq.push(['setUserId', user.email])\n _paq.push(['trackPageView'])\n _paq.push(['enableHeartBeatTimer'])\n }\n }, [user])\n\n React.useEffect(() => {\n if (isAuthenticated) {\n dispatch(setIsAuthenticated(isAuthenticated))\n }\n }, [dispatch, isAuthenticated, isBackOffice])\n\n React.useEffect(() => {\n const count = otherErrors ? otherErrors.length : 0\n setLastOtherError(count > 0 ? otherErrors[count - 1] : null)\n }, [otherErrors])\n\n const onRemoveError = React.useCallback(() => {\n lastOtherError && onCloseError(lastOtherError.id)\n }, [lastOtherError, onCloseError])\n\n const handleSurpressReminder = event => {\n const checked = event.target.checked\n onSurpressPopupReminder(checked)\n }\n\n if (!isAuthenticated) {\n return \n }\n\n return (\n <>\n \n\n \n\n \n \n {\n 'Turn off the pop-up blocker in your browser to allow download of files'\n }\n \n \n }\n label={'Do not show this again'}\n />\n \n <>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n )\n}\nApp.propTypes = {\n errors: PropTypes.arrayOf(AppPropTypes.error).isRequired,\n linkNotification: PropTypes.string,\n notification: PropTypes.string,\n linkToProject: AppPropTypes.project,\n loginConfig: AppPropTypes.loginConfig.isRequired,\n support: AppPropTypes.support.isRequired,\n tutorial: AppPropTypes.tutorial.isRequired,\n onCloseError: PropTypes.func,\n onCloseLinkNotification: PropTypes.func,\n onClosePopupReminder: PropTypes.func.isRequired,\n onSurpressPopupReminder: PropTypes.func.isRequired,\n onDismissProgressListItem: PropTypes.func.isRequired,\n appNotifications: PropTypes.array.isRequired,\n appStatus: PropTypes.object,\n popupReminderIsOpen: PropTypes.bool.isRequired,\n surpressPopupReminder: PropTypes.bool.isRequired,\n progressItems: PropTypes.array,\n loadingTenants: PropTypes.bool.isRequired,\n tenants: PropTypes.array,\n openCreateTenant: PropTypes.bool,\n onCreateTenantCloseClick: PropTypes.func.isRequired,\n onCreateTenant: PropTypes.func.isRequired,\n onOpenCreateTenant: PropTypes.func.isRequired,\n isAdmin: PropTypes.bool,\n isBackOffice: PropTypes.bool,\n features: PropTypes.array,\n currentProject: PropTypes.object\n}\n\nexport default App\n","import { connect } from 'react-redux'\nimport { createSelector } from 'reselect'\nimport { compose, withHandlers, withState } from 'recompose'\n\nimport { removeError } from '../actions/errors'\nimport {\n dismissProgressItem,\n showLink,\n openPopupReminder,\n surpressPopupReminder\n} from '../actions/ui'\n\nimport { createTenant } from '../actions/tenant'\n\nimport {\n getUser,\n getErrors,\n getProgressSnackVisibility,\n getNotification,\n getLinkNotification,\n getLinkToProject,\n getLoginConfig,\n getSupportConfig,\n getTutorial,\n getApplicationsNotifications,\n getAppStatus,\n getOpenAppStatus,\n getPopupReminderIsOpen,\n getSurpressPopupReminder,\n getProgressItems,\n getAdminLoadingCredits,\n getAdminCredits,\n getLoadingTenants,\n getTenants,\n getUserIsAdmin,\n getUserIsBackOffice,\n getLoadingApplications,\n getApplications,\n getProjectDetails,\n getGroups,\n getTenantFeatures,\n getProject\n} from '../state'\n\nimport App from '../components/App'\n\nconst mapStateToProps = createSelector(\n [\n getUser,\n getProgressSnackVisibility,\n getNotification,\n getLinkNotification,\n getLinkToProject,\n getLoginConfig,\n getSupportConfig,\n getTutorial,\n getErrors,\n getApplicationsNotifications,\n getAppStatus,\n getOpenAppStatus,\n getPopupReminderIsOpen,\n getSurpressPopupReminder,\n getProgressItems,\n getAdminLoadingCredits,\n getAdminCredits,\n getLoadingTenants,\n getTenants,\n getUserIsAdmin,\n getUserIsBackOffice,\n getLoadingApplications,\n getApplications,\n getProjectDetails,\n getGroups,\n getTenantFeatures,\n getProject\n ],\n (\n user,\n progressSnackVisible,\n notification,\n linkNotification,\n linkToProject,\n loginConfig,\n support,\n tutorial,\n errors,\n appNotifications,\n appStatus,\n appStatusIsOpen,\n popupReminderIsOpen,\n surpressPopupReminder,\n progressItems,\n loadingCredits,\n credits,\n loadingTenants,\n tenants,\n isAdmin,\n isBackOffice,\n loadingApps,\n apps,\n project,\n groups,\n features,\n currentProject\n ) => ({\n user,\n progressSnackVisible,\n notification,\n linkNotification,\n linkToProject,\n loginConfig,\n support,\n tutorial,\n errors,\n appNotifications,\n appStatus,\n appStatusIsOpen,\n popupReminderIsOpen,\n surpressPopupReminder,\n progressItems,\n loadingCredits,\n credits,\n loadingTenants,\n tenants,\n isAdmin,\n isBackOffice,\n loadingApps,\n apps,\n project,\n groups,\n features,\n currentProject\n })\n)\n\nconst enhance = compose(\n connect(mapStateToProps),\n\n withState('openCreateTenant', 'setOpenCreateTenant', false),\n\n withHandlers({\n onCreateTenantCloseClick: props => () => props.setOpenCreateTenant(false),\n\n onOpenCreateTenant: props => () => props.setOpenCreateTenant(true),\n\n onCreateTenant: props => data => {\n props.dispatch(createTenant(data))\n props.setOpenCreateTenant(false)\n },\n\n onDismissProgressListItem: ({ dispatch }) => ({ id }) =>\n dispatch(dismissProgressItem(id)),\n\n onCloseLinkNotification: ({ dispatch }) => () =>\n dispatch(showLink(null, null)),\n\n onCloseError: ({ dispatch }) => id => dispatch(removeError(id)),\n\n onClosePopupReminder: props => () =>\n props.dispatch(openPopupReminder(false)),\n\n onSurpressPopupReminder: props => surpress => {\n localStorage.setItem(\n 'supressActivatePopupReminder',\n surpress ? 'true' : 'false'\n )\n props.dispatch(surpressPopupReminder(surpress))\n }\n })\n)\n\nexport default enhance(App)\n","import React from 'react'\nimport { Box, Grid, Typography } from '@material-ui/core'\nimport LandingLayout from './LandingLayout'\nimport { useOidc } from '@axa-fr/react-oidc'\nimport { defineMessages, useIntl } from 'react-intl'\nimport { MikeButton } from '@mike/mike-shared-frontend'\n\nconst localMessages = defineMessages({\n button: {\n id: 'screens.loginScreen.retryButton'\n }\n})\n\ntype Props = {\n headline: string\n body: string\n showRetryButton?: boolean\n}\n\nconst OpenIdStatusPage = ({ headline, body, showRetryButton }: Props) => {\n const { login } = useOidc()\n const intl = useIntl()\n\n return (\n \n <>\n \n {headline}\n \n\n \n \n {body}\n \n \n\n {showRetryButton && (\n {\n login('/')\n }}\n >\n {intl.formatMessage(localMessages.button)}\n \n )}\n \n \n )\n}\n\nexport default OpenIdStatusPage\n","const _paq = (window._paq = window._paq || [])\n\n/* tracker methods like \"setCustomDimension\" should be called before \"trackPageView\" */\n\n_paq.push(['setDocumentTitle', document.domain + '/' + document.title])\n\n_paq.push(['setCookieDomain', '*.mike-cloud.com'])\n\n_paq.push(['setDomains', ['*.mike-cloud.com']])\n\n_paq.push(['trackPageView'])\n\n_paq.push(['enableLinkTracking'])\n\nexport function setupMatomo() {\n const u = 'https://dhigroup.matomo.cloud/'\n\n _paq.push(['setTrackerUrl', u + 'matomo.php'])\n\n _paq.push(['setSiteId', '8'])\n\n const d = document,\n g = d.createElement('script')\n\n g.async = true\n g.src = '//cdn.matomo.cloud/dhigroup.matomo.cloud/matomo.js'\n document.head.appendChild(g)\n}\n\n","import React, { StrictMode } from 'react'\n\nimport ReactDOM from 'react-dom'\nimport { createStore, applyMiddleware, compose } from 'redux'\nimport createSagaMiddleware from 'redux-saga'\nimport { IntlProvider, createIntl } from 'react-intl'\nimport { Provider } from 'react-redux'\nimport { MuiThemeProvider } from '@material-ui/core/styles'\nimport appReducer from './reducers'\nimport rootSaga from './sagas'\nimport bootstrapSaga from './sagas/bootstrap'\nimport initApis from './apis'\nimport ConnectedApp from './containers/ConnectedApp'\nimport messages from './intl/messages/en.json'\nimport { theme } from './styles/theme'\nimport { OidcProvider, useOidc } from '@axa-fr/react-oidc'\nimport { OidcConfiguration } from '@axa-fr/react-oidc/dist/vanilla/oidc'\nimport OpenIdStatusPage from './components/LandingPage/OpenIdStatusPage'\nimport { defineMessages } from 'react-intl'\nimport fetchConfig from './apis/config'\nimport InvitationProvider from './components/InvitationProvider'\nimport { BrowserRouter as Router } from 'react-router-dom'\nimport { LicenseInfo } from '@mui/x-data-grid-pro'\nimport { setupMatomo } from './helpers/matomo'\nimport { INVITATION_VERSION } from './helpers/search-params.const'\n\nconst muiLicenseKey: string = process.env.REACT_APP_MUI_LICENSE_KEY\nLicenseInfo.setLicenseKey(muiLicenseKey)\n\nconst sagaMiddleware = createSagaMiddleware()\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose\n }\n}\nconst composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose\n\nconst store = createStore(\n appReducer,\n composeEnhancer(applyMiddleware(sagaMiddleware))\n)\n\nsagaMiddleware.run(rootSaga)\n\n// export intl\nexport const intl = createIntl({ locale: 'en', messages: messages })\n\nconst localMessages = defineMessages({\n headline: {\n id: 'screens.openIdStatusPage.headline'\n },\n pleaseWait: {\n id: 'screens.openIdStatusPage.pleaseWait'\n },\n errorHeadline: {\n id: 'screens.openIdStatusPage.errorHeadline'\n },\n errorBody: {\n id: 'screens.openIdStatusPage.errorBody'\n },\n loading: {\n id: 'screens.openIdStatusPage.loading'\n }\n})\n\ntype IndexPropType = {\n openIdConfig: OidcConfiguration\n}\n\nconst Index = (props: IndexPropType) => {\n const { login } = useOidc()\n const { openIdConfig } = props\n\n return (\n \n \n \n {\n login()\n }}\n authenticatingComponent={() => (\n \n )}\n callbackSuccessComponent={() => (\n \n )}\n authenticatingErrorComponent={() => (\n \n )}\n loadingComponent={() => (\n \n )}\n >\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfetchConfig().then(config => {\n const openIdConfig = {\n client_id: config.auth.clientName,\n redirect_uri: `${window.location.origin}/authentication/callback`,\n silent_redirect_uri: `${window.location.origin}/authentication/silent-callback`,\n scope: 'openid offline_access',\n authority: config.auth.url,\n service_worker_relative_url: '/OidcServiceWorker.js',\n service_worker_only: false,\n refresh_time_before_token_expiration_in_second: 120,\n extras: {\n noTenant: window.location.search.includes(INVITATION_VERSION).toString()\n }\n }\n\n if (config.environment === 'prod') setupMatomo()\n\n sagaMiddleware\n .run(bootstrapSaga)\n .toPromise()\n .then(() => {\n initApis(config)\n ReactDOM.render(\n ,\n document.getElementById('root')\n )\n })\n // eslint-disable-next-line no-console\n .catch(error => console.error(error))\n})\n"],"sourceRoot":""}