{"version":3,"sources":["components/JQueryFormBuilder/plugins/controlFastaData.js","services/GeneratedApiTsClient/runtime.ts","services/GeneratedApiTsClient/models/TenantInviteeRole.ts","services/GeneratedApiTsClient/models/TenantUserRole.ts","services/GeneratedApiTsClient/models/Attachment.ts","services/GeneratedApiTsClient/models/AttachmentArrayResponse.ts","services/GeneratedApiTsClient/models/AttachmentPutResponse.ts","services/GeneratedApiTsClient/models/AttachmentResourceObject.ts","services/GeneratedApiTsClient/models/AttachmentResourceObjectRelationships.ts","services/GeneratedApiTsClient/models/AttachmentSingleResponse.ts","services/GeneratedApiTsClient/models/ExistingFindingRequestBody.ts","services/GeneratedApiTsClient/models/ExistingFindingSchemaRequestBody.ts","services/GeneratedApiTsClient/models/ExistingTenantRequestBody.ts","services/GeneratedApiTsClient/models/ExistingTenantUserRequestBody.ts","services/GeneratedApiTsClient/models/Finding.ts","services/GeneratedApiTsClient/models/FindingArrayResponse.ts","services/GeneratedApiTsClient/models/FindingResourceObject.ts","services/GeneratedApiTsClient/models/FindingResourceObjectRelationships.ts","services/GeneratedApiTsClient/models/FindingSchema.ts","services/GeneratedApiTsClient/models/FindingSchemaArrayResponse.ts","services/GeneratedApiTsClient/models/FindingSchemaDefinitionGroup.ts","services/GeneratedApiTsClient/models/FindingSchemaElement.ts","services/GeneratedApiTsClient/models/FindingSchemaElementValue.ts","services/GeneratedApiTsClient/models/FindingSchemaNestedDataDefinition.ts","services/GeneratedApiTsClient/models/FindingSchemaResourceObject.ts","services/GeneratedApiTsClient/models/FindingSchemaResourceObjectRelationships.ts","services/GeneratedApiTsClient/models/FindingSchemaSingleResponse.ts","services/GeneratedApiTsClient/models/FindingSingleResponse.ts","services/GeneratedApiTsClient/models/FrequencyChart.ts","services/GeneratedApiTsClient/models/FrequencyChartItem.ts","services/GeneratedApiTsClient/models/Invitation.ts","services/GeneratedApiTsClient/models/LatLngGps.ts","services/GeneratedApiTsClient/models/LevelDescriptionElement.ts","services/GeneratedApiTsClient/models/MiniMapData.ts","services/GeneratedApiTsClient/models/MiniMapDataItem.ts","services/GeneratedApiTsClient/models/NewFindingRequestBody.ts","services/GeneratedApiTsClient/models/NewFindingSchemaRequestBody.ts","services/GeneratedApiTsClient/models/NewInvitationRequestBody.ts","services/GeneratedApiTsClient/models/NewTenantRequestBody.ts","services/GeneratedApiTsClient/models/RelationshipLinks.ts","services/GeneratedApiTsClient/models/RelationshipResourceIdentifier.ts","services/GeneratedApiTsClient/models/RelationshipResourceIdentifierArrayResponse.ts","services/GeneratedApiTsClient/models/RelationshipResourceIdentifierResponse.ts","services/GeneratedApiTsClient/models/ResponseLinks.ts","services/GeneratedApiTsClient/models/ResponseMeta.ts","services/GeneratedApiTsClient/models/ResponseRelationshipOneToMany.ts","services/GeneratedApiTsClient/models/ResponseRelationshipOneToOne.ts","services/GeneratedApiTsClient/models/StatisticalData.ts","services/GeneratedApiTsClient/models/StatisticalDataItem.ts","services/GeneratedApiTsClient/models/StatisticalDataMeta.ts","services/GeneratedApiTsClient/models/TaxonomyName.ts","services/GeneratedApiTsClient/models/TaxonomyNode.ts","services/GeneratedApiTsClient/models/TaxonomyTree.ts","services/GeneratedApiTsClient/models/Tenant.ts","services/GeneratedApiTsClient/models/TenantUser.ts","services/GeneratedApiTsClient/models/UserScopedTenant.ts","services/GeneratedApiTsClient/apis/AttachmentsApi.ts","services/GeneratedApiTsClient/apis/ChartsApi.ts","services/GeneratedApiTsClient/apis/ExportApi.ts","services/GeneratedApiTsClient/apis/FindingsApi.ts","services/GeneratedApiTsClient/apis/SchemasApi.ts","services/GeneratedApiTsClient/apis/TenantsApi.ts","scenes/FindingDetail/components/DataCardElement.tsx","scenes/FindingDetail/components/DataCardTextElement.tsx","utils/gpsUtils.ts","utils/mapIconUtils.ts","models/MapIconsCollection.ts","components/ItemMinimap/ItemMinimap.tsx","store/actions/ErrorActions.ts","scenes/FindingDetail/components/FindingTags.tsx","store/actions/GUIActions.ts","store/selectors/TenantSelectors.ts","store/selectors/ApiSelectors.ts","models/FilterOperationModel.ts","models/FilterableAttributesModel.ts","models/FindingWellKnownAttributes.ts","models/SortModel.ts","store/models/LatLngBounds.ts","services/ApiService/ApiService.ts","store/actions/ExportActions.ts","store/actions/ListingActions.ts","store/actions/FindingActions.ts","store/actions/MapPanelActions.ts","components/ModalConfirm.tsx","store/selectors/UserSelectors.ts","components/Spinners/SpinnerInline.tsx","scenes/FindingDetail/containers/DetailsActions.tsx","components/Graphs/MapGraph.tsx","scenes/FindingDetail/components/DataCardHeaderElement.tsx","scenes/FindingDetail/components/DataCardParagraphElement.tsx","components/CopyToClipboard.tsx","components/DownloadFasta.tsx","scenes/FindingDetail/components/DataCardFastaElement.tsx","scenes/FindingDetail/components/DynamicDataCardElement.tsx","models/FilterModel.ts","store/actions/FilterActions.ts","scenes/FindingDetail/components/FindingTaxonomyElement.tsx","scenes/FindingDetail/components/FindingTaxonomy.tsx","components/FileTypeIcon.tsx","scenes/FindingDetail/containers/ServerMediaElement.tsx","scenes/FindingDetail/components/MediaUploader.tsx","components/Spinners/SpinnerOverlay.tsx","scenes/FindingDetail/FindingDetail.tsx","registerJQuery.js","components/JQueryFormBuilder/DynamicFormRenderer.tsx","scenes/Findings/components/GraphPanel.tsx","components/DataCardComponnents/DataCardInputElement.tsx","components/DataCardComponnents/DataCardTextInputElement.tsx","components/DataCardComponnents/DataCardSimpleTextInputElement.tsx","scenes/FindingEdit/components/TaxonomyInput.tsx","utils/validationHelper.ts","components/DataCardComponnents/DataCardNumberInputElement.tsx","components/DataCardComponnents/DataCardDateInputElement.tsx","scenes/FindingEdit/components/NestedDataInput.tsx","scenes/FindingEdit/FindingEdit.tsx","scenes/Findings/DynamicView.tsx","store/actions/FindingSchemasActions.ts","store/actions/ViewPreferencesActions.ts","scenes/Findings/components/ListView.tsx","scenes/Findings/containers/FindingsPagination.tsx","scenes/Findings/components/NewFindingDropdown.tsx","components/ThemedSelect.tsx","components/FilterEditor/components/FilterInputGroup.tsx","components/FilterEditor/components/FindingsCount.tsx","components/ThemedMultiSelect.tsx","components/Spinners/SpinnerRibbon.tsx","components/FilterEditor/FilterEditor.tsx","scenes/Findings/containers/SearchBar.tsx","scenes/Findings/components/ExportToolbarButton.tsx","scenes/Findings/components/ToolbarActions.tsx","store/models/ViewColumn.ts","scenes/Findings/components/ColumnsChooser/ColumnsChooser.tsx","scenes/Findings/containers/FindingsToolbar.tsx","scenes/Findings/components/Heatmap.tsx","components/Graphs/ColumnChartGraph.tsx","components/Graphs/PieChartGraph.tsx","scenes/Findings/components/MiniStatistics.tsx","scenes/Findings/containers/PreviewCards.tsx","scenes/Findings/FindingsTable.tsx","scenes/Findings/components/MapPanel.tsx","components/Graphs/GraphContainer.tsx","scenes/Findings/components/GraphSelectorInputGroup.tsx","scenes/Findings/Findings.tsx","utils/schemaDefinitionUtils.ts","store/actions/SchemaActions.ts","scenes/Schemas/components/SchemaDeleteButton.tsx","scenes/Schemas/components/SchemaCard.tsx","scenes/Schemas/Schemas.tsx","components/JQueryFormBuilder/DynamicFormBuilderRenderer.tsx","scenes/SchemaEdit/components/DynamicDataFormCardTabsNav.tsx","components/DataCardComponnents/DataCardColorInputElement.tsx","scenes/SchemaEdit/SchemaEdit.tsx","scenes/Error/FallBackScreen.tsx","components/HelpdeskButton.tsx","scenes/Error/NotAvailableScreen.tsx","scenes/Error/ErrorScreen.tsx","store/actions/TenantActions.ts","services/UserManager.ts","scenes/Splash/SplashScreen.tsx","components/CallbackPage.tsx","components/PrivateRoute.tsx","components/SignOutCallbackPage.tsx","components/UniCatAvatar.tsx","components/TenantPersona.tsx","components/TenantUserPersona.tsx","scenes/TenantSwitch/components/TenantUsersOverview.tsx","scenes/TenantSwitch/TenantSwitch.tsx","store/selectors/GuiSelectors.ts","components/SignOut.tsx","components/NavDropdownPersona.tsx","components/NavMenu.tsx","components/AttachmentsCarousel.tsx","utils/fileUtils.ts","utils/codeGenerators/PythonCodeGenerator.ts","utils/codeGenerators/JupyterCodeGenerator.ts","components/CodeGenerator/FindingsCodegenModal.tsx","store/models/TenantInviteeRoleNames.ts","components/Invite/InvitationModal.tsx","utils/absoluteUrl.ts","components/Layout/NavbarLayout.tsx","scenes/TenantSwitch/TenantEdit.tsx","components/Invite/InvitationDropdown.tsx","scenes/TenantSwitch/TenantDetail.tsx","components/Layout/SideWallpaperLayout.tsx","scenes/TenantSwitch/TenantInvitation.tsx","App.tsx","components/Graphs/graphTheme.ts","components/Hoc/withTenantRoles.tsx","registerServiceWorker.js","store/reducers/FilterReducer.ts","store/reducers/FindingSchemasReducer.ts","store/reducers/ViewPreferencesReducer.ts","store/reducers/FindingReducer.ts","store/reducers/ListingReducer.ts","store/reducers/ErrorReducer.ts","store/reducers/SchemaReducer.ts","store/reducers/MapPanelReducer.ts","store/reducers/GUIReducer.ts","store/reducers/ExportReducer.ts","store/reducers/TenantReducer.ts","store/reducers.ts","store/middleware/appInitializationMiddleware.ts","index.js","registerFontAwesome.js","store/store.ts"],"names":["require","window","fbControls","push","controlClass","allControlClasses","controlTextarea","textarea","controlFastaData","this","input","setAttribute","inputGroupText","markup","class","inputGroupPrepend","inputGroup","icon","i18n","default","register","BASE_PATH","replace","BaseAPI","configuration","Configuration","middleware","fetchApi","url","init","a","fetchParams","pre","fetch","response","post","clone","next","concat","preMiddlewares","middlewares","map","withMiddleware","postMiddlewares","context","createFetchParams","status","basePath","path","undefined","query","Object","keys","length","queryParamsStringify","value","body","FormData","URLSearchParams","Blob","JSON","stringify","headers","assign","method","credentials","constructor","slice","RequiredError","field","msg","name","Error","bind","querystring","username","password","apiKey","accessToken","exists","json","key","params","prefix","fullKey","Array","multiValue","singleValue","encodeURIComponent","String","join","filter","part","canConsumeForm","consumes","contentType","TenantInviteeRole","TenantUserRole","JSONApiResponse","raw","transformer","jsonValue","VoidApiResponse","BlobApiResponse","blob","TextApiResponse","text","AttachmentFromJSON","ignoreDiscriminator","Date","AttachmentFromJSONTyped","AttachmentArrayResponseFromJSON","AttachmentResourceObjectFromJSON","ResponseLinksFromJSON","ResponseMetaFromJSON","AttachmentArrayResponseFromJSONTyped","AttachmentPutResponseFromJSON","AttachmentPutResponseFromJSONTyped","AttachmentResourceObjectRelationshipsFromJSON","AttachmentResourceObjectFromJSONTyped","ResponseRelationshipOneToOneFromJSON","AttachmentResourceObjectRelationshipsFromJSONTyped","AttachmentSingleResponseFromJSON","AttachmentSingleResponseFromJSONTyped","ExistingFindingRequestBodyToJSON","FindingResourceObjectToJSON","data","ExistingFindingSchemaRequestBodyToJSON","FindingSchemaResourceObjectToJSON","ExistingTenantRequestBodyToJSON","ExistingTenantUserRequestBodyToJSON","role","FindingFromJSON","LatLngGpsFromJSON","TaxonomyNameFromJSON","FindingFromJSONTyped","FindingToJSON","owner","permissions","documentName","dynamicData","documentSet","amount","date","toISOString","substr","person","locationDescription","LatLngGpsToJSON","locationGpsPoint","locationGpsArea","note","tags","taxonomyHumanReadable","TaxonomyNameToJSON","taxonomyName","attachmentNote","FindingArrayResponseFromJSON","FindingResourceObjectFromJSON","FindingArrayResponseFromJSONTyped","FindingResourceObjectRelationshipsFromJSON","FindingResourceObjectFromJSONTyped","attributes","FindingResourceObjectRelationshipsToJSON","relationships","type","id","ResponseRelationshipOneToManyFromJSON","FindingResourceObjectRelationshipsFromJSONTyped","ResponseRelationshipOneToOneToJSON","schema","ResponseRelationshipOneToManyToJSON","attachments","FindingSchemaFromJSON","FindingSchemaDefinitionGroupFromJSON","FindingSchemaNestedDataDefinitionFromJSON","TaxonomyTreeFromJSON","FindingSchemaFromJSONTyped","FindingSchemaToJSON","color","mapIcon","mapPolygonIcon","definitionGroups","FindingSchemaDefinitionGroupToJSON","nestedDataDefinitions","FindingSchemaNestedDataDefinitionToJSON","TaxonomyTreeToJSON","taxonomyTree","FindingSchemaArrayResponseFromJSON","FindingSchemaResourceObjectFromJSON","FindingSchemaArrayResponseFromJSONTyped","FindingSchemaElementFromJSON","FindingSchemaDefinitionGroupFromJSONTyped","definitions","FindingSchemaElementToJSON","FindingSchemaElementValueFromJSON","FindingSchemaElementFromJSONTyped","subtype","required","label","description","placeholder","other","multiple","values","FindingSchemaElementValueToJSON","min","max","step","maxlength","className","FindingSchemaElementValueFromJSONTyped","FindingSchemaNestedDataDefinitionFromJSONTyped","FindingSchemaResourceObjectRelationshipsFromJSON","FindingSchemaResourceObjectFromJSONTyped","FindingSchemaResourceObjectRelationshipsToJSON","FindingSchemaResourceObjectRelationshipsFromJSONTyped","findings","FindingSchemaSingleResponseFromJSON","FindingSchemaSingleResponseFromJSONTyped","FindingSingleResponseFromJSON","FindingSingleResponseFromJSONTyped","FrequencyChartFromJSON","FrequencyChartItemFromJSON","FrequencyChartFromJSONTyped","FrequencyChartItemFromJSONTyped","InvitationFromJSON","TenantFromJSON","TenantUserFromJSON","TenantInviteeRoleFromJSON","InvitationFromJSONTyped","LatLngGpsFromJSONTyped","lat","lng","LevelDescriptionElementFromJSON","LevelDescriptionElementFromJSONTyped","LevelDescriptionElementToJSON","MiniMapDataFromJSON","MiniMapDataItemFromJSON","MiniMapDataFromJSONTyped","MiniMapDataItemFromJSONTyped","NewFindingRequestBodyToJSON","NewFindingSchemaRequestBodyToJSON","NewInvitationRequestBodyToJSON","inviteeRole","NewTenantRequestBodyToJSON","RelationshipLinksFromJSON","RelationshipLinksFromJSONTyped","RelationshipLinksToJSON","self","related","RelationshipResourceIdentifierFromJSON","RelationshipResourceIdentifierFromJSONTyped","RelationshipResourceIdentifierToJSON","RelationshipResourceIdentifierArrayResponseFromJSON","RelationshipResourceIdentifierArrayResponseFromJSONTyped","RelationshipResourceIdentifierResponseFromJSON","RelationshipResourceIdentifierResponseFromJSONTyped","ResponseLinksFromJSONTyped","ResponseMetaFromJSONTyped","ResponseRelationshipOneToManyFromJSONTyped","links","ResponseRelationshipOneToOneFromJSONTyped","StatisticalDataFromJSON","StatisticalDataItemFromJSON","StatisticalDataMetaFromJSON","StatisticalDataFromJSONTyped","StatisticalDataItemFromJSONTyped","StatisticalDataMetaFromJSONTyped","TaxonomyNameFromJSONTyped","kingdom","phylum","_class","order","family","genus","species","authorship","TaxonomyNodeFromJSON","TaxonomyNodeFromJSONTyped","TaxonomyNodeToJSON","author","children","TaxonomyTreeFromJSONTyped","root","levelDescription","TenantFromJSONTyped","TenantInviteeRoleFromJSONTyped","TenantUserRoleFromJSON","TenantUserFromJSONTyped","TenantUserRoleFromJSONTyped","UserScopedTenantFromJSON","UserScopedTenantFromJSONTyped","AttachmentsApi","requestParameters","tenantId","runtime","queryParameters","headerParameters","token","tokenString","request","apiAttachmentsDeleteByIdRaw","sort","page","fields","apiAttachmentsGetRaw","apiAttachmentsGetByIdRaw","apiAttachmentsGetByIdDownloadRaw","apiAttachmentsGetByIdFindingsRaw","apiAttachmentsGetByIdRelationshipsFindingsRaw","apiAttachmentsGetByIdThumbnailRaw","ChartsApi","aggregate","group","maxItemsPerGroup","apiChartsFindingsFrequencyRaw","apiChartsFindingsMinimapRaw","apiChartsFindingsStatisticsRaw","ExportApi","apiExportFindingsGetRaw","apiExportFindingsGetByIdRaw","FindingsApi","apiFindingsDeleteByIdRaw","apiFindingsGetRaw","apiFindingsGetByIdRaw","apiFindingsGetByIdAttachmentsRaw","apiFindingsGetByIdRelationshipAttachmentsRaw","apiFindingsGetByIdRelationshipSchemaRaw","apiFindingsGetByIdSchemaRaw","existingFindingRequestBody","apiFindingsPatchByIdRaw","newFindingRequestBody","apiFindingsPostRaw","formParams","file","append","apiFindingsPutByIdAttachmentsRaw","SchemasApi","apiSchemasDeleteByIdRaw","apiSchemasGetRaw","apiSchemasGetByIdRaw","apiSchemasGetByIdFindingsRaw","apiSchemasGetByIdRelationshipsFindingsRaw","existingFindingSchemaRequestBody","apiSchemasPatchByIdRaw","newFindingSchemaRequestBody","apiSchemasPostRaw","TenantsApi","apiTenantsAvailableGetRaw","apiTenantsGetByIdRaw","apiTenantsGetByIdInvitationsByKeyRaw","apiTenantsGetByIdInvitationsByKeyRedeemRaw","apiTenantsGetByIdUsersRaw","newTenantRequestBody","apiTenantsPostRaw","newInvitationRequestBody","apiTenantsPostByIdInvitationsRaw","existingTenantRequestBody","apiTenantsPutByIdRaw","userId","existingTenantUserRequestBody","apiTenantsPutByIdUsersRaw","DataCardElement","props","uid","useUID","title","placement","target","DataCardTextElement","getCenterOfCoordsArray","coordsArray","bounds","lowLat","highLat","lowLng","highLng","forEach","point","colorizeMarker","baseIcon","newColor","tempIcon","create","fillColor","fadeMarker","newOpacity","fillOpacity","strokeOpacity","MapIconCollection","scale","rotation","strokeColor","strokeWeight","anchor","x","y","containerStyle","height","width","ItemMinimap","useState","setPoint","polygon","setPolygon","markerColor","setMarkerColor","originalPoint","originalPolygon","intermediatePolygon","setIntermediatePolygon","drawingMode","setDrawingMode","polylineCapturing","setPolylineCapturing","setPath","mapRef","setMapRef","polygonComponent","setPolygonComponent","googleMapSearchBox","setGoogleMapSearchBox","searchResultPoint","setSearchResultPoint","useEffect","handlePointChange","handlePolygonChange","onMarkerDragEnd","event","latLng","toJSON","onEditPolygon","newPolygon","getPath","polygonElement","console","log","getDefaultCenter","React","compoundPoints","onLoadPolygonComponent","onLoadMap","setCenter","setZoom","onUnmountMap","isEditable","toolbarProps","onClick","centerJson","getCenter","active","disabled","onLoad","onUnmount","mapContainerStyle","options","fullscreenControl","mapTypeId","onMouseMove","e","polylineForSimplification","polylineElement","zoom","getZoom","tolerance","Math","pow","simplifiedPolyline","simplify","position","draggable","onDragEnd","zIndex","clickable","editable","onMouseUp","searchBoxRef","onPlacesChanged","places","getPlaces","google","maps","LatLngBounds","place","geometry","viewport","union","location","extend","nextCenter","panTo","fitBounds","style","boxSizing","border","top","padding","borderRadius","boxShadow","fontSize","outline","textOverflow","left","marginLeft","newPoint","animation","closeBoxURL","enableEventPropagation","backgroundColor","opacity","defaultProps","p","error","ErrorActions","ErrorType","FindingTags","tag","i","GUIActionsType","processApiResponse","messagePrefix","dispatch","ok","details","statusText","then","parse","responseContent","errors","SET_ERROR","NOT_AVAILABLE_ERROR","message","RECOVERABLE_ERROR","FATAL_ERROR","setError","errorType","selectActiveTenantId","state","tenant","activeTenantId","selectAvailableTenants","available","getAvailableTenantIds","createSelector","t","getActiveTenant","find","getActiveTenantRoutePrefix","TENANT_ROUTE_PATH","selectAvailableTenantById","selectApiAccessToken","oidc","user","access_token","getApiConfiguration","process","getUppyTusConfiguration","endpoint","authorization","chunkSize","retryDelays","getConfiguredFindingsApi","config","getConfiguredSchemasApi","getConfiguredChartsApi","getConfiguredAttachmentsApi","getConfiguredExportApi","getConfiguredTenantsApi","FILTER_OP","openMapView","OPEN_MAP_VIEW","openGraphView","OPEN_GRAPH_VIEW","openCodegenModal","SHOW_CODEGEN_MODAL","codegenModalType","showNotification","payload","autoClose","doNotAutoClose","closeButton","hideProgressBar","toast","updateNotification","toastId","isActive","update","render","hideNotification","dismiss","StaticFilterableAttributesGroup","DynamicFilterableAttributeTypes","WellKnownAttributes","schemaId","SortDirection","SupportedFilterOperations","contains","humanReadable","eq","eqi","ne","lt","le","gt","ge","isIn","notIn","SupportedFilterOperationsFor","number","textArray","Sort","attribute","direction","SORT_ASC","serializeBounds","roundToBiggerBounds","separator","floor","south","west","ceil","north","east","ExportActions","DownloadTarget","ApiService","schemasApi","schemas","size","apiSchemasGet","result","definitonGroup","groupAttributes","includes","MapToAttributeType","filters","filterQuery","operation","sorting","SORT_DESC","findingsApi","buildFilterQuery","apiFindingsGet","meta","totalRecords","apiSchemasGetByIdRelationshipsFindings","schemaRelationshipsFindings","requestListing","getState","listing","loadingInProgress","pageQuery","currentPage","pageSize","sortQuery","buildSortQuery","catch","loadedFindings","goToPage","selected","setPageSize","setSorting","requestFinding","doClone","finding","requestInProgress","apiFindingsGetById","apiFindingsGetByIdSchema","schemaResourceObject","apiFindingsGetByIdAttachments","findingAttachments","uploadedAttachments","att","resource","hasIncompleteAttachments","some","incomplete","findingId","setAttachmentProperty","attachmentId","property","attachment","attachmentIndex","findIndex","updatedAttachment","splice","setActiveAttachment","requestAttachmentThumbnail","attachmentsApi","requestAttachmentDownload","deleteAttachment","requestEmptyWithSchema","apiSchemasGetById","persistFinding","doNotRoute","onSuccess","loadedFindingId","requestBody","loadedFinding","apiFindingsPatchById","patchedFinding","loadedSchemaId","apiFindingsPost","patchedFindingId","routePrefix","replaceFindingProperty","propertyName","newValue","deleteFinding","refreshFindingsOnSuccess","apiFindingsDeleteById","triggerCsvDownload","content","blobx","elemx","document","createElement","href","URL","createObjectURL","download","display","appendChild","click","removeChild","MapPanelActions","pushCsvToClipboard","parsed","Papa","delimiter","skipEmptyLines","clipboardHtmlContent","row","col","clipboardTextContent","copy","format","debug","onCopy","clipboardData","setData","downloadLoadedFinding","loaded","export","inProgress","REQUEST_EXPORT","exportApi","notificationHandle","apiExportFindingsGetById","CsvSemicolon","Clipboard","RECEIVE_EXPORT","CANCEL_EXPORT","downloadListing","selectedFindingIds","apiExportFindingsGet","ModalConfirm","isOpen","visible","titleText","bodyText","onClickConfirm","btnConfirmLabel","onClickCancel","btnCancelLabel","selectCurrentUsersIdmSubjectId","profile","sub","getTenantUserOfSelf","activeTenantUsers","idmSubjectId","isTenantUserInRole","currentRole","fadeIn","mapDispatchToProps","goBack","connect","tenantRoutePrefix","canEdit","OWNER","COLLABORATOR","visibleModal","setVisibleModal","toggleVisibleModal","caret","SpinnerInline","Link","to","MapGraph","am4core","am4maps","geodata","am4geodata_worldLow","projection","Projection","maxZoomLevel","seriesContainer","resizable","chartContainer","wheelable","events","disableType","background","series","useGeodata","imageSeries","imageSeriesTemplate","mapImages","template","circle","createChild","radius","fill","stroke","strokeWidth","nonScaling","tooltipText","propertyFields","latitude","longitude","coords","dispose","DataCardHeaderElement","DataCardParagraphElement","CopyToClipboard","textToCopy","copyMessage","buttonProps","buttonText","setButtonText","setTimeout","queryCommandSupported","DownloadFasta","textToDownload","downloadMessage","fileName","element","DataCardFastaElement","list","split","record","formatFasta","DynamicDataCardElement","convertedValue","val","definition","item","opt","definitionLabel","v","Filter","FilterActions","requestMapFindings","flushBeforeRequest","mapPanel","FLUSH_MAP_FINDINGS","REQUEST_MAP_FINDINGS","buildGeoPagingFilter","markerData","CANCEL_RECEIVING_MAP_FINDINGS","RECEIVE_MAP_FINDINGS","setMapViewport","SET_MAP_VIEWPORT","setFilters","SET_FILTERS","rootReducer","clearFilters","CLEAR_FILTERS","FindingTaxonomyElement","FindingTaxonomy","taxonomyKeys","toLevel","index","taxonomyKey","filterByTaxonomy","FileTypeIcon","iconName","startsWith","extension","match","faSize","toUpperCase","ServerMediaElement","deleteModal","setDeleteModal","isLoading","setIsLoading","isDownloading","setIsDownloading","thumbnail","setThumbnail","useDispatch","requestThumbnail","handleDelete","handleDownload","originalFilename","link","parentNode","openAttachment","SHOW_ATTACHMENT_GALLERY","toggleDelete","src","alt","pill","toggle","centered","tusBaseConfig","uploadInProgress","setUploadInProgress","uppyHasFiles","setUppyHasFiles","onbeforeunload","uppy","useMemo","Uppy","restrictions","maxFileSize","autoProceed","on","setFileMeta","reason","getFiles","onFinished","tusOptions","existingPlugin","getPlugin","setOptions","use","Tus","close","when","proudlyDisplayPoweredByUppy","showProgressDetails","locale","strings","dropPasteFiles","browseFiles","handleUploadFinished","successful","failed","hasGpsCoords","hasGpsPoint","hasGpsArea","loadedSchema","SpinnerOverlay","xl","moment","alignSelf","current","scrollIntoView","behavior","renderGeneralInfoCard","j","nestedDataElement","nestedData","renderSchemaInfoCard","renderMediaCard","toPrecision","renderLocationCard","ref","registerJQuery","jQuery","$","ChartTypes","TypeToClassNameMap","select","DynamicFormRenderer","fb","formRenderInstance","renderForm","prevProps","dataType","formData","mergeDataToDefinitions","formRender","formKey","onInput","extractDataFromDefinitions","userData","dataAugmentedDefinition","hasOwnProperty","dataId","dataValue","isArray","output","parseFloat","isNaN","deScopedName","el","DataCardInputElement","alignColumn","gutterBottom","titleAfter","DataCardTextInputElement","attributeName","defaultValue","onChange","pattern","autoFocus","DataCardSimpleTextInputElement","TaxonomyInput","handleInputChange","updated","addonType","validityStates","isValidFloatNumber","validityErrors","validity","DataCardNumberInputElement","DataCardDateInputElement","NestedDataInput","newData","unshift","d","idx","inputKey","handleDynamicFormInput","remove","formEl","setWasValidate","checked","utc","startOf","toDate","handleTaxonomyChange","newTaxonomy","handleCopyTaxonomyToScientificName","scientificName","handleDynamicFormInputChange","patchedData","handleTagsChange","changed","changedIndexes","onSubmit","preventDefault","formLength","elem","valid","focus","classList","add","validate","noValidate","onlyUnique","removeKeys","tagProps","classNameRemove","renderTaxonomyCard","nestedDefinition","toString","DynamicView","toggleHandler","show","setShow","openHandler","animationDuration","xs","rightContent","flexShrink","leftContent","requestFindingSchemas","findingSchemas","getSchemaListWithBasicInfo","basicInfoResponse","getDynamicFilterableAttributes","dynamicAttributesResponse","schemasBasicInfo","schemaAttributes","availableAttributesGroups","newColumns","viewPreferences","listViewColumns","vc","s","setColumnsWidths","newWidths","setColumnsOrder","newOrder","setSelectedFindingIds","selectedFindings","ListView","ClickableTableRow","restProps","Row","setSelection","CustomCheckBox","onToggle","Cell","CustomHeaderCheckBox","allSelected","someSelected","clearSelection","setSelectionAll","selection","obj","selId","selectedId","getRowId","ClickableTableCell","column","stopPropagation","columns","columnBands","expandedRowIds","loadColumnBandsFromStore","getColumnWidthsForGrid","normalized","setState","getColumnsFromStore","getCellValue","dynamicDataAccessor","taxonomyAccessor","attributeAccessor","newSorting","onSortingChange","columnName","source","customWidths","attrGroup","attr","existingState","bands","band","rows","for","rowComponent","cellComponent","columnWidths","onColumnWidthsChange","showSortingControls","showSelectAll","headerCellComponent","leftColumns","TableRowDetail","COLUMN_TYPE","TagsFormatter","TagsTypeProvider","formatterComponent","DateFormatter","DateTypeProvider","FindingsPagination","inline","pageCount","pagesCount","forcePage","marginPagesDisplayed","pageRangeDisplayed","onPageChange","previousLabel","nextLabel","breakLabel","breakClassName","containerClassName","pageClassName","pageLinkClassName","activeClassName","previousClassName","previousLinkClassName","nextClassName","nextLinkClassName","header","ThemedSelect","onEnterKeyPressed","rest","handleKeyPress","theme","colors","primary25","primary","onKeyDown","FilterInputGroup","attributeOptions","filterableAttributes","attributeGroup","defaultAttrOption","option","attrOpt","operationOptions","defaultOperationOption","isSearchable","handleSelectChange","onKeyPress","handleRemove","setLoaded","count","setCount","isMounted","refreshCount","getFindingsCountMatchingFilter","debounce","inverse","ThemedMultiSelect","isMulti","defaultSchemaValue","FilterEditorModal","filterableSchemaIds","handleOnOpened","filterState","getFilterStateFromStore","attributeFilters","schemaFilterValue","processedFilters","refreshFilterableAttributes","handleOnClosed","handleSaveAndClose","saveToStore","onClose","handleClearAndSave","handleClear","setHumanReadableFilters","selectChanged","filterIndex","attributeValue","attrType","prevState","oldFilter","newFilter","processFilters","inputChanged","schemaFilterInputChanged","clearSchemaFilter","addFilter","newAttributeFilters","removeFilter","removeSchemaFilter","callback","labels","getSchemaOptions","getLabel","filterUnderTest","filterValues","humanReadableFilters","dynamicAttributes","onOpened","onClosed","SpinnerRibbon","SearchBar","toggleModal","showModal","renderSelectedFilter","findingSchema","maxWidth","FilterEditor","duplicateFinding","ToolbarActions","noSelection","PureComponent","ViewColumn","setColumns","resetPreferences","MANDATORY_COLUMNS","ColumnsChooser","isShown","optionsForSelect","handleApply","addColumn","c","refreshOptionsForSelect","refreshInternalState","isMandatory","newColumn","addedColumns","groupLabel","that","addedSortableColumns","allOptionsDisabled","groupOptions","isDisabled","setList","newState","handle","previous","renderGroupLabel","removeColumn","splitMode","gui","FindingsToolbar","globalFilters","chartsApi","chartRef","useRef","seriesRef","useSelector","apiChartsFindingsMinimap","miniMapData","filteredMapData","coordinates","counts","normalizedMapData","in_min","in_max","out_min","apply","useLayoutEffect","am4themes_animated","chart","Miller","polygonSeries","exclude","mapPolygons","circle_ghost","ColumnChartGraph","am4charts","titles","categoryAxis","xAxes","dataFields","category","renderer","grid","minGridDistance","showLabels","disableGridLines","line","horizontalCenter","verticalCenter","truncate","valueAxis","yAxes","valueY","categoryX","columnTemplate","PieChartGraph","innerRadius","pieSeries","slices","wrap","hideLabels","ticks","hiddenState","properties","endAngle","startAngle","openMap","openGraph","loading","setLoading","taxonomyChartData","setTaxonomyChartData","schemaChartData","setSchemaChartData","apiChartsFindingsFrequency","taxonomyChart","schemaFrequency","PreviewCard","graphPanelActive","mapPanelActive","FindingsTable","closeMapView","CLOSE_MAP_VIEW","mapRefreshedOnce","setMapRefreshedOnce","infoWindowPosition","setInfoWindowPosition","visibleInfoWindow","setVisibleInfoWindow","selectedMultiMarker","setSelectedMultiMarker","markers","setMarkers","selectedFinding","marker","multiMarkers","_","groupBy","entries","positionFromString","userPos","LatLng","pos","gpsPos","refreshMap","getBounds","handleMapElemClick","onIdle","onZoomChanged","Animation","BOUNCE","onCloseClick","rel","GraphContainer","GraphSettingsForm","defaultAggregateOption","onAggregateChange","closeGraphView","CLOSE_GRAPH_VIEW","setAggregate","setGroup","Pie","chartType","setChartType","frequencyData","setFrequencyData","groupDisabled","setGroupDisabled","frequency","fetchData","tabs","Column","onGroupChange","Findings","renderDynamicContent","reinitializeFindingSchema","timestampSeed","getTime","dg","reinitializeDefinitionNames","ndd","getInitialDefinitionName","timestamp","requestSchema","requestSchemaNew","persistSchema","apiSchemasPatchById","patchedSchema","apiSchemasPost","patchedSchemaId","replaceSchemaProperty","deleteSchema","apiSchemasDeleteById","alert","flushSchema","setDisabled","hasSchemaDependencies","borderLeftColor","borderLeftWidth","md","TabType","DynamicFormBuilderRenderer","formBuilderWrapperNode","formBuilderWrapperNodeJQuery","formBuilderInstance","formBuilderOptions","showActionButtons","disableHTMLLabels","disableFields","disabledAttrs","typeUserDisabledAttrs","typeUserAttrs","formBuilder","promise","actions","getData","DynamicDataFormCardTabsNav","activeTabIndex","activeTabType","Group","onTabClick","onActiveTabRenameClick","divider","onActiveTabMoveClick","onActiveTabDeleteClick","NestedData","onAddTabClick","visibility","onAddNestedDataClick","DataCardColorInputElement","dynFormEl","formRef","setActiveTabIndex","setActiveTabType","wasValidated","setWasValidated","activeDefinitions","setActiveDefinitions","toggleTabs","newActiveTabIndex","newTabType","newDefinitionGroup","doSaveBefore","saveDefinitionChangesToStore","updatedDefinitions","getDefinitions","formElCurrent","checkValidity","newTabName","prompt","newGroup","newNestedDataName","newNestedData","newPosition","confirm","FallBackScreen","block","NotAvailableScreen","onResolveError","wallpaper","resolveErrors","clearCache","localStorage","clear","reload","RESET_STORE_AND_AUTH","RESET_STORE","errorInfo","setErrorInfo","onlyNotAvailableError","setOnlyNotAvailableError","errorList","isFatalError","isNonRecoverable","subtitle","cursor","HelpdeskButton","TenantActions","userManagerConfig","client_id","redirect_uri","protocol","hostname","port","post_logout_redirect_uri","response_type","scope","authority","silent_redirect_uri","automaticSilentRenew","filterProtocolClaims","loadUserInfo","userStore","WebStorageStateStore","store","UserManager","createUserManager","SplashScreen","CallbackPage","userManager","successCallback","errorCallback","Component","expired","isLoadingUser","signinRedirect","pathname","SignOutCallbackPage","signoutResponse","UniCatAvatar","createAvatarComponent","sources","SrcSource","ValueSource","TenantPersona","getRandomColor","Avatar","maxInitials","TenantUserPersona","u","firstName","lastName","fullName","pictureUrl","round","tenantsApi","loadedUsers","setLoadedUsers","apiTenantsGetByIdUsers","availableTenants","requestAvailableTenants","availableLoading","TENANT_LOAD_AVAILABLE_INIT","apiTenantsAvailableGet","TENANT_LOAD_AVAILABLE_CANCEL","TENANT_LOAD_AVAILABLE_SUCCESS","switchTenant","clearLoadedTenant","TENANT_ACTIVE_CLEAR","loadTenantEntityDraft","entityDraftLoading","TENANT_ENTITY_DRAFT_LOAD_INIT","apiTenantsGetById","loadedEntityDraft","TENANT_ENTITY_DRAFT_LOAD_CANCEL","TENANT_ENTITY_DRAFT_LOAD_SUCCESS","entity","patchTenantEntityDraft","entityPatch","TENANT_ENTITY_DRAFT_PATCH","saveTenantEntityDraft","draft","entityDraft","TENANT_ENTITY_DRAFT_SAVE_INIT","entityDraftId","apiTenantsPost","apiTenantsPutById","TENANT_ENTITY_DRAFT_SAVE_CANCEL","TENANT_ENTITY_DRAFT_SAVE_SUCCESS","TENANT_ENTITY_DRAFT_CLEAR","patchTenantUser","userPatchLoading","TENANT_USER_PATCH_INIT","apiTenantsPutByIdUsers","TENANT_USER_PATCH_CANCEL","TENANT_USER_PATCH_SUCCESS","clearTenantEntityDraft","isAppStateReady","activeTenantLoading","availableTenantsLoading","isUserLoading","isActiveTenantLoading","SignOut","signoutRedirect","NavDropdownPersona","nav","inNavbar","tenantUser","data-hj-suppress","right","activeTenant","activeTenantUser","setIsOpen","useCallback","expand","sticky","navbar","RRNavLink","open","AttachmentCarousel","initialized","attachmentsCarouselActive","activeAttachmentId","activeIndex","setActiveIndex","animating","setAnimating","goToIndex","newIndex","attIndex","nextIndex","closeCarousel","HIDE_ATTACHMENT_GALLERY","onDownload","getCaptionString","b","toFixed","formatBytes","uploadedDate","uploadTimestamp","toLocaleDateString","fade","interval","items","onClickHandler","onExiting","onExited","dataToRender","renderAttachment","directionText","PythonCodeGenerator","isTestServer","import","f","flatMap","nestedDataAttributes","n","JupyterCodeGenerator","closeModal","HIDE_CODEGEN_MODAL","codegenModalActive","modalType","activeTab","setActiveTab","codeGenerators","tab","generator","codeGenerator","tabId","generatedCode","renderFilters","renderNewFinding","language","renderCodegenTab","TenantInviteeRoleNames","GUEST","HIDE_INVITATION_MODAL","invitationModalActive","invitationModalLoading","invitation","inviteModalInvitation","invitationLink","generatePath","readOnly","subject","expiresAt","sendMail","NavbarLayout","NavMenu","patch","openInvitationModal","REQUEST_INVITATION_MODAL","apiTenantsPostByIdInvitations","SHOW_INVITATION_MODAL","r","tenantUserPatchLoading","currentUserIdmSubjectId","setCanEdit","isMultiOwners","setIsMultiOwners","roles","INACTIVE","currentUser","sm","searchable","oidcUserProfile","navbarOpen","toggleNavbarOpen","backgroundImage","given_name","family_name","picture","userOfSelf","setInvitation","apiTenantsGetByIdInvitationsByKey","invitationKey","inviter","apiTenantsGetByIdInvitationsByKeyRedeem","loadTenant","TENANT_ACTIVE_SWITCH_INIT","tenantUsers","TENANT_ACTIVE_SWITCH_CANCEL","TENANT_ACTIVE_SWITCH_SUCCESS","availableTenantIds","isAppReady","exact","component","WrappedComponent","FindingDetail","FindingEdit","isInRole","Schemas","SchemaEdit","TenantSwitch","Boolean","FilterReducerInitialState","FindingSchemasReducerInitialState","saveStateToLocalStorage","setItem","getViewPreferencesReducerInitialState","staticAttributesGroup","savedState","getItem","savedStateParsed","emptyFinding","FindingReducerInitialState","ListingReducerInitialState","ErrorReducerInitialState","emptySchema","SchemaReducerInitialState","MapPanelReducerInitialState","GUIReducerInitialState","ExportReducerInitialState","TenantReducerInitialState","history","createBrowserHistory","appReducer","combineReducers","action","updatedState","updatedListViewColumns","indexOf","newWidthsObject","reduce","removeItem","oidcReducer","router","connectRouter","appInitializationMiddleware","nextAction","info","navigator","serviceWorker","ready","registration","unregister","googleMapsLibraries","library","faSlidersH","faPlus","faTrashAlt","faThList","faThLarge","faCog","faTimes","faChevronLeft","faChevronRight","faFileExport","faCopy","faTrash","faEdit","faBars","faSave","faColumns","faMapMarker","faDrawPolygon","faSearch","faLifeRing","faDownload","faCross","faFileUpload","faFile","faCheck","faMinus","faQuestion","faList","faSitemap","faUndoAlt","faEraser","faFilter","faEyeSlash","faArrowRight","faPen","faClone","faArrowsAltH","faLevelUpAlt","faParagraph","faFileImage","faFileAudio","faFileVideo","faFileWord","faFileExcel","faFilePowerpoint","faFilePdf","faFileArchive","faFileCsv","faFileAlt","faFileImport","faUpload","faQuestionCircle","faExternalLinkAlt","faExternalLinkSquareAlt","faGripVertical","faClipboard","faKey","faSignOutAlt","faCode","faRandom","faUser","faUserPlus","faEnvelope","faExclamationTriangle","faPencilRuler","hotjar","initialize","thunk","routerMiddleware","enhancers","rootState","createStore","compose","applyMiddleware","loadUser","configureStore","ReactDOM","googleMapsApiKey","libraries","version","getElementById"],"mappings":"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","file":"static/js/main.8042b968.chunk.js","sourcesContent":["require(\"../../../../node_modules/formBuilder/dist/form-builder.min.js\"); // not pretty but works\n\n// configure the class for runtime loading\nif (!window.fbControls) window.fbControls = [];\n\nwindow.fbControls.push(function(controlClass, allControlClasses) {\n const controlTextarea = allControlClasses.textarea\n /**\n * FASTA data control class\n */\n class controlFastaData extends controlTextarea {\n /**\n * Class configuration - return the icons & label related to this control\n * @returndefinition object\n */\n static get definition() {\n return {\n icon: '📃',\n i18n: {\n default: 'FASTA data',\n },\n }\n }\n\n configure() {\n super.configure();\n }\n\n /**\n * build a div DOM element\n * @return {DOMElement} DOM Element to be injected into the form.\n */\n build() {\n this.input = super.build();\n this.input.setAttribute(\"placeholder\", \"[Paste contents of the FASTA file here]\")\n this.input.setAttribute(\"class\", \"form-control\")\n \n // this.legend = this.markup('legend', \"📃 FASTA data:\");\n this.inputGroupText = this.markup('div', \"📃 FASTA data:\", {class: \"input-group-text\"})\n this.inputGroupPrepend = this.markup('div', [this.inputGroupText], {class: \"input-group-prepend\"})\n this.inputGroup = this.markup('div', [this.inputGroupPrepend, this.input], {class: \"input-group\"})\n \n \n // this.fieldset = this.markup('fieldset', [this.legend, this.input]);\n \n return this.inputGroup;\n }\n }\n\n // register FASTA data control\n controlTextarea.register('fasta', controlFastaData)\n})","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nexport const BASE_PATH = \"http://localhost:5100\".replace(/\\/+$/, \"\");\n\nconst isBlob = (value: any) => typeof Blob !== 'undefined' && value instanceof Blob;\n\n/**\n * This is the base class for all generated API classes.\n */\nexport class BaseAPI {\n\n private middleware: Middleware[];\n\n constructor(protected configuration = new Configuration()) {\n this.middleware = configuration.middleware;\n }\n\n withMiddleware(this: T, ...middlewares: Middleware[]) {\n const next = this.clone();\n next.middleware = next.middleware.concat(...middlewares);\n return next;\n }\n\n withPreMiddleware(this: T, ...preMiddlewares: Array) {\n const middlewares = preMiddlewares.map((pre) => ({ pre }));\n return this.withMiddleware(...middlewares);\n }\n\n withPostMiddleware(this: T, ...postMiddlewares: Array) {\n const middlewares = postMiddlewares.map((post) => ({ post }));\n return this.withMiddleware(...middlewares);\n }\n\n protected async request(context: RequestOpts): Promise {\n const { url, init } = this.createFetchParams(context);\n const response = await this.fetchApi(url, init);\n if (response.status >= 200 && response.status < 300) {\n return response;\n }\n throw response;\n }\n\n private createFetchParams(context: RequestOpts) {\n let url = this.configuration.basePath + context.path;\n if (context.query !== undefined && Object.keys(context.query).length !== 0) {\n // only add the querystring to the URL if there are query parameters.\n // this is done to avoid urls ending with a \"?\" character which buggy webservers\n // do not handle correctly sometimes.\n url += '?' + this.configuration.queryParamsStringify(context.query);\n }\n const body = (context.body instanceof FormData || context.body instanceof URLSearchParams || isBlob(context.body))\n\t ? context.body\n\t : JSON.stringify(context.body);\n\n const headers = Object.assign({}, this.configuration.headers, context.headers);\n const init = {\n method: context.method,\n headers: headers,\n body,\n credentials: this.configuration.credentials\n };\n return { url, init };\n }\n\n private fetchApi = async (url: string, init: RequestInit) => {\n let fetchParams = { url, init };\n for (const middleware of this.middleware) {\n if (middleware.pre) {\n fetchParams = await middleware.pre({\n fetch: this.fetchApi,\n ...fetchParams,\n }) || fetchParams;\n }\n }\n let response = await this.configuration.fetchApi(fetchParams.url, fetchParams.init);\n for (const middleware of this.middleware) {\n if (middleware.post) {\n response = await middleware.post({\n fetch: this.fetchApi,\n url,\n init,\n response: response.clone(),\n }) || response;\n }\n }\n return response;\n }\n\n /**\n * Create a shallow clone of `this` by constructing a new instance\n * and then shallow cloning data members.\n */\n private clone(this: T): T {\n const constructor = this.constructor as any;\n const next = new constructor(this.configuration);\n next.middleware = this.middleware.slice();\n return next;\n }\n};\n\nexport class RequiredError extends Error {\n name: \"RequiredError\" = \"RequiredError\";\n constructor(public field: string, msg?: string) {\n super(msg);\n }\n}\n\nexport const COLLECTION_FORMATS = {\n csv: \",\",\n ssv: \" \",\n tsv: \"\\t\",\n pipes: \"|\",\n};\n\nexport type FetchAPI = WindowOrWorkerGlobalScope['fetch'];\n\nexport interface ConfigurationParameters {\n basePath?: string; // override base path\n fetchApi?: FetchAPI; // override for fetch implementation\n middleware?: Middleware[]; // middleware to apply before/after fetch requests\n queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings\n username?: string; // parameter for basic security\n password?: string; // parameter for basic security\n apiKey?: string | ((name: string) => string); // parameter for apiKey security\n accessToken?: string | ((name?: string, scopes?: string[]) => string); // parameter for oauth2 security\n headers?: HTTPHeaders; //header params we want to use on every request\n credentials?: RequestCredentials; //value for the credentials param we want to use on each request\n}\n\nexport class Configuration {\n constructor(private configuration: ConfigurationParameters = {}) {}\n\n get basePath(): string {\n return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH;\n }\n\n get fetchApi(): FetchAPI {\n return this.configuration.fetchApi || window.fetch.bind(window);\n }\n\n get middleware(): Middleware[] {\n return this.configuration.middleware || [];\n }\n\n get queryParamsStringify(): (params: HTTPQuery) => string {\n return this.configuration.queryParamsStringify || querystring;\n }\n\n get username(): string | undefined {\n return this.configuration.username;\n }\n\n get password(): string | undefined {\n return this.configuration.password;\n }\n\n get apiKey(): ((name: string) => string) | undefined {\n const apiKey = this.configuration.apiKey;\n if (apiKey) {\n return typeof apiKey === 'function' ? apiKey : () => apiKey;\n }\n return undefined;\n }\n\n get accessToken(): ((name: string, scopes?: string[]) => string) | undefined {\n const accessToken = this.configuration.accessToken;\n if (accessToken) {\n return typeof accessToken === 'function' ? accessToken : () => accessToken;\n }\n return undefined;\n }\n\n get headers(): HTTPHeaders | undefined {\n return this.configuration.headers;\n }\n\n get credentials(): RequestCredentials | undefined {\n return this.configuration.credentials;\n }\n}\n\nexport type Json = any;\nexport type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS';\nexport type HTTPHeaders = { [key: string]: string };\nexport type HTTPQuery = { [key: string]: string | number | null | boolean | Array | HTTPQuery };\nexport type HTTPBody = Json | FormData | URLSearchParams;\nexport type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original';\n\nexport interface FetchParams {\n url: string;\n init: RequestInit;\n}\n\nexport interface RequestOpts {\n path: string;\n method: HTTPMethod;\n headers: HTTPHeaders;\n query?: HTTPQuery;\n body?: HTTPBody;\n}\n\nexport function exists(json: any, key: string) {\n const value = json[key];\n return value !== null && value !== undefined;\n}\n\nexport function querystring(params: HTTPQuery, prefix: string = ''): string {\n return Object.keys(params)\n .map((key) => {\n const fullKey = prefix + (prefix.length ? `[${key}]` : key);\n const value = params[key];\n if (value instanceof Array) {\n const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue)))\n .join(`&${encodeURIComponent(fullKey)}=`);\n return `${encodeURIComponent(fullKey)}=${multiValue}`;\n }\n if (value instanceof Object) {\n return querystring(value as HTTPQuery, fullKey);\n }\n return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;\n })\n .filter(part => part.length > 0)\n .join('&');\n}\n\nexport function mapValues(data: any, fn: (item: any) => any) {\n return Object.keys(data).reduce(\n (acc, key) => ({ ...acc, [key]: fn(data[key]) }),\n {}\n );\n}\n\nexport function canConsumeForm(consumes: Consume[]): boolean {\n for (const consume of consumes) {\n if ('multipart/form-data' === consume.contentType) {\n return true;\n }\n }\n return false;\n}\n\nexport interface Consume {\n contentType: string\n}\n\nexport interface RequestContext {\n fetch: FetchAPI;\n url: string;\n init: RequestInit;\n}\n\nexport interface ResponseContext {\n fetch: FetchAPI;\n url: string;\n init: RequestInit;\n response: Response;\n}\n\nexport interface Middleware {\n pre?(context: RequestContext): Promise;\n post?(context: ResponseContext): Promise;\n}\n\nexport interface ApiResponse {\n raw: Response;\n value(): Promise;\n}\n\nexport interface ResponseTransformer {\n (json: any): T;\n}\n\nexport class JSONApiResponse {\n constructor(public raw: Response, private transformer: ResponseTransformer = (jsonValue: any) => jsonValue) {}\n\n async value(): Promise {\n return this.transformer(await this.raw.json());\n }\n}\n\nexport class VoidApiResponse {\n constructor(public raw: Response) {}\n\n async value(): Promise {\n return undefined;\n }\n}\n\nexport class BlobApiResponse {\n constructor(public raw: Response) {}\n\n async value(): Promise {\n return await this.raw.blob();\n };\n}\n\nexport class TextApiResponse {\n constructor(public raw: Response) {}\n\n async value(): Promise {\n return await this.raw.text();\n };\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n/**\n * Role of the invited potential user with respect to the tenant\n * @export\n * @enum {string}\n */\nexport enum TenantInviteeRole {\n GUEST = 'GUEST',\n COLLABORATOR = 'COLLABORATOR',\n OWNER = 'OWNER'\n}\n\nexport function TenantInviteeRoleFromJSON(json: any): TenantInviteeRole {\n return TenantInviteeRoleFromJSONTyped(json, false);\n}\n\nexport function TenantInviteeRoleFromJSONTyped(json: any, ignoreDiscriminator: boolean): TenantInviteeRole {\n return json as TenantInviteeRole;\n}\n\nexport function TenantInviteeRoleToJSON(value?: TenantInviteeRole | null): any {\n return value as any;\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n/**\n * Role of the user with respect to the tenant\n * @export\n * @enum {string}\n */\nexport enum TenantUserRole {\n INACTIVE = 'INACTIVE',\n GUEST = 'GUEST',\n COLLABORATOR = 'COLLABORATOR',\n OWNER = 'OWNER'\n}\n\nexport function TenantUserRoleFromJSON(json: any): TenantUserRole {\n return TenantUserRoleFromJSONTyped(json, false);\n}\n\nexport function TenantUserRoleFromJSONTyped(json: any, ignoreDiscriminator: boolean): TenantUserRole {\n return json as TenantUserRole;\n}\n\nexport function TenantUserRoleToJSON(value?: TenantUserRole | null): any {\n return value as any;\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface Attachment\n */\nexport interface Attachment {\n /**\n * \n * @type {string}\n * @memberof Attachment\n */\n originalFilename: string;\n /**\n * MIME type of the file\n * @type {string}\n * @memberof Attachment\n */\n contentType: string;\n /**\n * Size of the file in bytes\n * @type {number}\n * @memberof Attachment\n */\n length: number;\n /**\n * ISO 8601 formatted date, UTC time of day component may be present and equals to zero (00:00:00.000Z)\n * @type {Date}\n * @memberof Attachment\n */\n uploadTimestamp: Date;\n /**\n * NULL or ISO 8601 formatted date, UTC time of day component may be present and equals to zero (00:00:00.000Z)\n * @type {Date}\n * @memberof Attachment\n */\n uploadCompletedTimestamp: Date | null;\n /**\n * TRUE if the attachments data are being uploaded (cannot download data or thumbnail), FALSE if completed\n * @type {boolean}\n * @memberof Attachment\n */\n incomplete: boolean;\n}\n\nexport function AttachmentFromJSON(json: any): Attachment {\n return AttachmentFromJSONTyped(json, false);\n}\n\nexport function AttachmentFromJSONTyped(json: any, ignoreDiscriminator: boolean): Attachment {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'originalFilename': json['originalFilename'],\n 'contentType': json['contentType'],\n 'length': json['length'],\n 'uploadTimestamp': (new Date(json['uploadTimestamp'])),\n 'uploadCompletedTimestamp': (json['uploadCompletedTimestamp'] === null ? null : new Date(json['uploadCompletedTimestamp'])),\n 'incomplete': json['incomplete'],\n };\n}\n\nexport function AttachmentToJSON(value?: Attachment | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'originalFilename': value.originalFilename,\n 'contentType': value.contentType,\n 'length': value.length,\n 'uploadTimestamp': (value.uploadTimestamp.toISOString().substr(0,10)),\n 'uploadCompletedTimestamp': (value.uploadCompletedTimestamp === null ? null : value.uploadCompletedTimestamp.toISOString().substr(0,10)),\n 'incomplete': value.incomplete,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n AttachmentResourceObject,\n AttachmentResourceObjectFromJSON,\n AttachmentResourceObjectFromJSONTyped,\n AttachmentResourceObjectToJSON,\n ResponseLinks,\n ResponseLinksFromJSON,\n ResponseLinksFromJSONTyped,\n ResponseLinksToJSON,\n ResponseMeta,\n ResponseMetaFromJSON,\n ResponseMetaFromJSONTyped,\n ResponseMetaToJSON,\n} from './';\n\n/**\n * Links may be ommited on empty result.\n * @export\n * @interface AttachmentArrayResponse\n */\nexport interface AttachmentArrayResponse {\n /**\n * A single page of results. NULL on empty result.\n * @type {Array}\n * @memberof AttachmentArrayResponse\n */\n data?: Array;\n /**\n * \n * @type {ResponseLinks}\n * @memberof AttachmentArrayResponse\n */\n links?: ResponseLinks;\n /**\n * \n * @type {ResponseMeta}\n * @memberof AttachmentArrayResponse\n */\n meta?: ResponseMeta;\n}\n\nexport function AttachmentArrayResponseFromJSON(json: any): AttachmentArrayResponse {\n return AttachmentArrayResponseFromJSONTyped(json, false);\n}\n\nexport function AttachmentArrayResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): AttachmentArrayResponse {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : ((json['data'] as Array).map(AttachmentResourceObjectFromJSON)),\n 'links': !exists(json, 'links') ? undefined : ResponseLinksFromJSON(json['links']),\n 'meta': !exists(json, 'meta') ? undefined : ResponseMetaFromJSON(json['meta']),\n };\n}\n\nexport function AttachmentArrayResponseToJSON(value?: AttachmentArrayResponse | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': value.data === undefined ? undefined : ((value.data as Array).map(AttachmentResourceObjectToJSON)),\n 'links': ResponseLinksToJSON(value.links),\n 'meta': ResponseMetaToJSON(value.meta),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface AttachmentPutResponse\n */\nexport interface AttachmentPutResponse {\n /**\n * Attachment identifier, 24 lowercase hex digit string.\n * @type {string}\n * @memberof AttachmentPutResponse\n */\n id: string;\n /**\n * Related finding identifier, 24 lowercase hex digit string.\n * @type {string}\n * @memberof AttachmentPutResponse\n */\n findingId: string;\n /**\n * \n * @type {string}\n * @memberof AttachmentPutResponse\n */\n originalFilename: string;\n /**\n * MIME type of the file\n * @type {string}\n * @memberof AttachmentPutResponse\n */\n contentType: string;\n /**\n * Size of the file in bytes\n * @type {number}\n * @memberof AttachmentPutResponse\n */\n length: number;\n /**\n * ISO 8601 formatted date, UTC time of day component may be present and equals to zero (00:00:00.000Z)\n * @type {Date}\n * @memberof AttachmentPutResponse\n */\n uploadTimestamp: Date;\n}\n\nexport function AttachmentPutResponseFromJSON(json: any): AttachmentPutResponse {\n return AttachmentPutResponseFromJSONTyped(json, false);\n}\n\nexport function AttachmentPutResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): AttachmentPutResponse {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'id': json['id'],\n 'findingId': json['findingId'],\n 'originalFilename': json['originalFilename'],\n 'contentType': json['contentType'],\n 'length': json['length'],\n 'uploadTimestamp': (new Date(json['uploadTimestamp'])),\n };\n}\n\nexport function AttachmentPutResponseToJSON(value?: AttachmentPutResponse | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'id': value.id,\n 'findingId': value.findingId,\n 'originalFilename': value.originalFilename,\n 'contentType': value.contentType,\n 'length': value.length,\n 'uploadTimestamp': (value.uploadTimestamp.toISOString().substr(0,10)),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n Attachment,\n AttachmentFromJSON,\n AttachmentFromJSONTyped,\n AttachmentToJSON,\n AttachmentResourceObjectRelationships,\n AttachmentResourceObjectRelationshipsFromJSON,\n AttachmentResourceObjectRelationshipsFromJSONTyped,\n AttachmentResourceObjectRelationshipsToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface AttachmentResourceObject\n */\nexport interface AttachmentResourceObject {\n /**\n * \n * @type {Attachment}\n * @memberof AttachmentResourceObject\n */\n attributes: Attachment;\n /**\n * \n * @type {AttachmentResourceObjectRelationships}\n * @memberof AttachmentResourceObject\n */\n relationships?: AttachmentResourceObjectRelationships;\n /**\n * \n * @type {string}\n * @memberof AttachmentResourceObject\n */\n type: string;\n /**\n * \n * @type {string}\n * @memberof AttachmentResourceObject\n */\n id?: string;\n}\n\nexport function AttachmentResourceObjectFromJSON(json: any): AttachmentResourceObject {\n return AttachmentResourceObjectFromJSONTyped(json, false);\n}\n\nexport function AttachmentResourceObjectFromJSONTyped(json: any, ignoreDiscriminator: boolean): AttachmentResourceObject {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'attributes': AttachmentFromJSON(json['attributes']),\n 'relationships': !exists(json, 'relationships') ? undefined : AttachmentResourceObjectRelationshipsFromJSON(json['relationships']),\n 'type': json['type'],\n 'id': !exists(json, 'id') ? undefined : json['id'],\n };\n}\n\nexport function AttachmentResourceObjectToJSON(value?: AttachmentResourceObject | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'attributes': AttachmentToJSON(value.attributes),\n 'relationships': AttachmentResourceObjectRelationshipsToJSON(value.relationships),\n 'type': value.type,\n 'id': value.id,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n ResponseRelationshipOneToOne,\n ResponseRelationshipOneToOneFromJSON,\n ResponseRelationshipOneToOneFromJSONTyped,\n ResponseRelationshipOneToOneToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface AttachmentResourceObjectRelationships\n */\nexport interface AttachmentResourceObjectRelationships {\n /**\n * \n * @type {ResponseRelationshipOneToOne}\n * @memberof AttachmentResourceObjectRelationships\n */\n finding?: ResponseRelationshipOneToOne;\n}\n\nexport function AttachmentResourceObjectRelationshipsFromJSON(json: any): AttachmentResourceObjectRelationships {\n return AttachmentResourceObjectRelationshipsFromJSONTyped(json, false);\n}\n\nexport function AttachmentResourceObjectRelationshipsFromJSONTyped(json: any, ignoreDiscriminator: boolean): AttachmentResourceObjectRelationships {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'finding': !exists(json, 'finding') ? undefined : ResponseRelationshipOneToOneFromJSON(json['finding']),\n };\n}\n\nexport function AttachmentResourceObjectRelationshipsToJSON(value?: AttachmentResourceObjectRelationships | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'finding': ResponseRelationshipOneToOneToJSON(value.finding),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n AttachmentResourceObject,\n AttachmentResourceObjectFromJSON,\n AttachmentResourceObjectFromJSONTyped,\n AttachmentResourceObjectToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface AttachmentSingleResponse\n */\nexport interface AttachmentSingleResponse {\n /**\n * \n * @type {AttachmentResourceObject}\n * @memberof AttachmentSingleResponse\n */\n data?: AttachmentResourceObject;\n}\n\nexport function AttachmentSingleResponseFromJSON(json: any): AttachmentSingleResponse {\n return AttachmentSingleResponseFromJSONTyped(json, false);\n}\n\nexport function AttachmentSingleResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): AttachmentSingleResponse {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : AttachmentResourceObjectFromJSON(json['data']),\n };\n}\n\nexport function AttachmentSingleResponseToJSON(value?: AttachmentSingleResponse | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': AttachmentResourceObjectToJSON(value.data),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingResourceObject,\n FindingResourceObjectFromJSON,\n FindingResourceObjectFromJSONTyped,\n FindingResourceObjectToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface ExistingFindingRequestBody\n */\nexport interface ExistingFindingRequestBody {\n /**\n * \n * @type {FindingResourceObject}\n * @memberof ExistingFindingRequestBody\n */\n data?: FindingResourceObject;\n}\n\nexport function ExistingFindingRequestBodyFromJSON(json: any): ExistingFindingRequestBody {\n return ExistingFindingRequestBodyFromJSONTyped(json, false);\n}\n\nexport function ExistingFindingRequestBodyFromJSONTyped(json: any, ignoreDiscriminator: boolean): ExistingFindingRequestBody {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : FindingResourceObjectFromJSON(json['data']),\n };\n}\n\nexport function ExistingFindingRequestBodyToJSON(value?: ExistingFindingRequestBody | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': FindingResourceObjectToJSON(value.data),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingSchemaResourceObject,\n FindingSchemaResourceObjectFromJSON,\n FindingSchemaResourceObjectFromJSONTyped,\n FindingSchemaResourceObjectToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface ExistingFindingSchemaRequestBody\n */\nexport interface ExistingFindingSchemaRequestBody {\n /**\n * \n * @type {FindingSchemaResourceObject}\n * @memberof ExistingFindingSchemaRequestBody\n */\n data?: FindingSchemaResourceObject;\n}\n\nexport function ExistingFindingSchemaRequestBodyFromJSON(json: any): ExistingFindingSchemaRequestBody {\n return ExistingFindingSchemaRequestBodyFromJSONTyped(json, false);\n}\n\nexport function ExistingFindingSchemaRequestBodyFromJSONTyped(json: any, ignoreDiscriminator: boolean): ExistingFindingSchemaRequestBody {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : FindingSchemaResourceObjectFromJSON(json['data']),\n };\n}\n\nexport function ExistingFindingSchemaRequestBodyToJSON(value?: ExistingFindingSchemaRequestBody | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': FindingSchemaResourceObjectToJSON(value.data),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface ExistingTenantRequestBody\n */\nexport interface ExistingTenantRequestBody {\n /**\n * Friendly name\n * @type {string}\n * @memberof ExistingTenantRequestBody\n */\n name: string;\n}\n\nexport function ExistingTenantRequestBodyFromJSON(json: any): ExistingTenantRequestBody {\n return ExistingTenantRequestBodyFromJSONTyped(json, false);\n}\n\nexport function ExistingTenantRequestBodyFromJSONTyped(json: any, ignoreDiscriminator: boolean): ExistingTenantRequestBody {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'name': json['name'],\n };\n}\n\nexport function ExistingTenantRequestBodyToJSON(value?: ExistingTenantRequestBody | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'name': value.name,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n TenantUserRole,\n TenantUserRoleFromJSON,\n TenantUserRoleFromJSONTyped,\n TenantUserRoleToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface ExistingTenantUserRequestBody\n */\nexport interface ExistingTenantUserRequestBody {\n /**\n * \n * @type {TenantUserRole}\n * @memberof ExistingTenantUserRequestBody\n */\n role: TenantUserRole;\n}\n\nexport function ExistingTenantUserRequestBodyFromJSON(json: any): ExistingTenantUserRequestBody {\n return ExistingTenantUserRequestBodyFromJSONTyped(json, false);\n}\n\nexport function ExistingTenantUserRequestBodyFromJSONTyped(json: any, ignoreDiscriminator: boolean): ExistingTenantUserRequestBody {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'role': TenantUserRoleFromJSON(json['role']),\n };\n}\n\nexport function ExistingTenantUserRequestBodyToJSON(value?: ExistingTenantUserRequestBody | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'role': TenantUserRoleToJSON(value.role),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n LatLngGps,\n LatLngGpsFromJSON,\n LatLngGpsFromJSONTyped,\n LatLngGpsToJSON,\n TaxonomyName,\n TaxonomyNameFromJSON,\n TaxonomyNameFromJSONTyped,\n TaxonomyNameToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface Finding\n */\nexport interface Finding {\n /**\n * \n * @type {string}\n * @memberof Finding\n */\n owner?: string;\n /**\n * \n * @type {Array}\n * @memberof Finding\n */\n permissions?: Array;\n /**\n * \n * @type {string}\n * @memberof Finding\n */\n documentName?: string;\n /**\n * \n * @type {{ [key: string]: object; }}\n * @memberof Finding\n */\n dynamicData?: { [key: string]: object; };\n /**\n * \n * @type {string}\n * @memberof Finding\n */\n documentSet?: string;\n /**\n * \n * @type {number}\n * @memberof Finding\n */\n amount?: number;\n /**\n * ISO 8601 formatted date, UTC time of day component may be present and equals to zero (00:00:00.000Z)\n * @type {Date}\n * @memberof Finding\n */\n date?: Date;\n /**\n * \n * @type {string}\n * @memberof Finding\n */\n person?: string;\n /**\n * \n * @type {string}\n * @memberof Finding\n */\n locationDescription?: string;\n /**\n * \n * @type {LatLngGps}\n * @memberof Finding\n */\n locationGpsPoint?: LatLngGps | null;\n /**\n * Well-known text (WKT) representation of location geometry (ISO/IEC 13249-3:2016 standard)\n * @type {string}\n * @memberof Finding\n */\n readonly locationGpsPointWkt?: string | null;\n /**\n * \n * @type {Array}\n * @memberof Finding\n */\n locationGpsArea?: Array;\n /**\n * Well-known text (WKT) representation of location geometry (ISO/IEC 13249-3:2016 standard)\n * @type {string}\n * @memberof Finding\n */\n readonly locationGpsAreaWkt?: string | null;\n /**\n * \n * @type {string}\n * @memberof Finding\n */\n note?: string;\n /**\n * \n * @type {Array}\n * @memberof Finding\n */\n tags?: Array;\n /**\n * \n * @type {string}\n * @memberof Finding\n */\n readonly taxonomyHierarchyId?: string;\n /**\n * \n * @type {string}\n * @memberof Finding\n */\n taxonomyHumanReadable?: string;\n /**\n * \n * @type {TaxonomyName}\n * @memberof Finding\n */\n taxonomyName?: TaxonomyName;\n /**\n * \n * @type {string}\n * @memberof Finding\n */\n attachmentNote?: string;\n}\n\nexport function FindingFromJSON(json: any): Finding {\n return FindingFromJSONTyped(json, false);\n}\n\nexport function FindingFromJSONTyped(json: any, ignoreDiscriminator: boolean): Finding {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'owner': !exists(json, 'owner') ? undefined : json['owner'],\n 'permissions': !exists(json, 'permissions') ? undefined : json['permissions'],\n 'documentName': !exists(json, 'documentName') ? undefined : json['documentName'],\n 'dynamicData': !exists(json, 'dynamicData') ? undefined : json['dynamicData'],\n 'documentSet': !exists(json, 'documentSet') ? undefined : json['documentSet'],\n 'amount': !exists(json, 'amount') ? undefined : json['amount'],\n 'date': !exists(json, 'date') ? undefined : (new Date(json['date'])),\n 'person': !exists(json, 'person') ? undefined : json['person'],\n 'locationDescription': !exists(json, 'locationDescription') ? undefined : json['locationDescription'],\n 'locationGpsPoint': !exists(json, 'locationGpsPoint') ? undefined : LatLngGpsFromJSON(json['locationGpsPoint']),\n 'locationGpsPointWkt': !exists(json, 'locationGpsPointWkt') ? undefined : json['locationGpsPointWkt'],\n 'locationGpsArea': !exists(json, 'locationGpsArea') ? undefined : ((json['locationGpsArea'] as Array).map(LatLngGpsFromJSON)),\n 'locationGpsAreaWkt': !exists(json, 'locationGpsAreaWkt') ? undefined : json['locationGpsAreaWkt'],\n 'note': !exists(json, 'note') ? undefined : json['note'],\n 'tags': !exists(json, 'tags') ? undefined : json['tags'],\n 'taxonomyHierarchyId': !exists(json, 'taxonomyHierarchyId') ? undefined : json['taxonomyHierarchyId'],\n 'taxonomyHumanReadable': !exists(json, 'taxonomyHumanReadable') ? undefined : json['taxonomyHumanReadable'],\n 'taxonomyName': !exists(json, 'taxonomyName') ? undefined : TaxonomyNameFromJSON(json['taxonomyName']),\n 'attachmentNote': !exists(json, 'attachmentNote') ? undefined : json['attachmentNote'],\n };\n}\n\nexport function FindingToJSON(value?: Finding | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'owner': value.owner,\n 'permissions': value.permissions,\n 'documentName': value.documentName,\n 'dynamicData': value.dynamicData,\n 'documentSet': value.documentSet,\n 'amount': value.amount,\n 'date': value.date === undefined ? undefined : (value.date.toISOString().substr(0,10)),\n 'person': value.person,\n 'locationDescription': value.locationDescription,\n 'locationGpsPoint': LatLngGpsToJSON(value.locationGpsPoint),\n 'locationGpsArea': value.locationGpsArea === undefined ? undefined : ((value.locationGpsArea as Array).map(LatLngGpsToJSON)),\n 'note': value.note,\n 'tags': value.tags,\n 'taxonomyHumanReadable': value.taxonomyHumanReadable,\n 'taxonomyName': TaxonomyNameToJSON(value.taxonomyName),\n 'attachmentNote': value.attachmentNote,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingResourceObject,\n FindingResourceObjectFromJSON,\n FindingResourceObjectFromJSONTyped,\n FindingResourceObjectToJSON,\n ResponseLinks,\n ResponseLinksFromJSON,\n ResponseLinksFromJSONTyped,\n ResponseLinksToJSON,\n ResponseMeta,\n ResponseMetaFromJSON,\n ResponseMetaFromJSONTyped,\n ResponseMetaToJSON,\n} from './';\n\n/**\n * Links may be ommited on empty result.\n * @export\n * @interface FindingArrayResponse\n */\nexport interface FindingArrayResponse {\n /**\n * A single page of results. NULL on empty result.\n * @type {Array}\n * @memberof FindingArrayResponse\n */\n data?: Array;\n /**\n * \n * @type {ResponseLinks}\n * @memberof FindingArrayResponse\n */\n links?: ResponseLinks;\n /**\n * \n * @type {ResponseMeta}\n * @memberof FindingArrayResponse\n */\n meta?: ResponseMeta;\n}\n\nexport function FindingArrayResponseFromJSON(json: any): FindingArrayResponse {\n return FindingArrayResponseFromJSONTyped(json, false);\n}\n\nexport function FindingArrayResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingArrayResponse {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : ((json['data'] as Array).map(FindingResourceObjectFromJSON)),\n 'links': !exists(json, 'links') ? undefined : ResponseLinksFromJSON(json['links']),\n 'meta': !exists(json, 'meta') ? undefined : ResponseMetaFromJSON(json['meta']),\n };\n}\n\nexport function FindingArrayResponseToJSON(value?: FindingArrayResponse | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': value.data === undefined ? undefined : ((value.data as Array).map(FindingResourceObjectToJSON)),\n 'links': ResponseLinksToJSON(value.links),\n 'meta': ResponseMetaToJSON(value.meta),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n Finding,\n FindingFromJSON,\n FindingFromJSONTyped,\n FindingToJSON,\n FindingResourceObjectRelationships,\n FindingResourceObjectRelationshipsFromJSON,\n FindingResourceObjectRelationshipsFromJSONTyped,\n FindingResourceObjectRelationshipsToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingResourceObject\n */\nexport interface FindingResourceObject {\n /**\n * \n * @type {Finding}\n * @memberof FindingResourceObject\n */\n attributes: Finding;\n /**\n * \n * @type {FindingResourceObjectRelationships}\n * @memberof FindingResourceObject\n */\n relationships?: FindingResourceObjectRelationships;\n /**\n * \n * @type {string}\n * @memberof FindingResourceObject\n */\n type: string;\n /**\n * \n * @type {string}\n * @memberof FindingResourceObject\n */\n id?: string;\n}\n\nexport function FindingResourceObjectFromJSON(json: any): FindingResourceObject {\n return FindingResourceObjectFromJSONTyped(json, false);\n}\n\nexport function FindingResourceObjectFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingResourceObject {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'attributes': FindingFromJSON(json['attributes']),\n 'relationships': !exists(json, 'relationships') ? undefined : FindingResourceObjectRelationshipsFromJSON(json['relationships']),\n 'type': json['type'],\n 'id': !exists(json, 'id') ? undefined : json['id'],\n };\n}\n\nexport function FindingResourceObjectToJSON(value?: FindingResourceObject | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'attributes': FindingToJSON(value.attributes),\n 'relationships': FindingResourceObjectRelationshipsToJSON(value.relationships),\n 'type': value.type,\n 'id': value.id,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n ResponseRelationshipOneToMany,\n ResponseRelationshipOneToManyFromJSON,\n ResponseRelationshipOneToManyFromJSONTyped,\n ResponseRelationshipOneToManyToJSON,\n ResponseRelationshipOneToOne,\n ResponseRelationshipOneToOneFromJSON,\n ResponseRelationshipOneToOneFromJSONTyped,\n ResponseRelationshipOneToOneToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingResourceObjectRelationships\n */\nexport interface FindingResourceObjectRelationships {\n /**\n * \n * @type {ResponseRelationshipOneToOne}\n * @memberof FindingResourceObjectRelationships\n */\n schema?: ResponseRelationshipOneToOne;\n /**\n * \n * @type {ResponseRelationshipOneToMany}\n * @memberof FindingResourceObjectRelationships\n */\n attachments?: ResponseRelationshipOneToMany;\n}\n\nexport function FindingResourceObjectRelationshipsFromJSON(json: any): FindingResourceObjectRelationships {\n return FindingResourceObjectRelationshipsFromJSONTyped(json, false);\n}\n\nexport function FindingResourceObjectRelationshipsFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingResourceObjectRelationships {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'schema': !exists(json, 'schema') ? undefined : ResponseRelationshipOneToOneFromJSON(json['schema']),\n 'attachments': !exists(json, 'attachments') ? undefined : ResponseRelationshipOneToManyFromJSON(json['attachments']),\n };\n}\n\nexport function FindingResourceObjectRelationshipsToJSON(value?: FindingResourceObjectRelationships | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'schema': ResponseRelationshipOneToOneToJSON(value.schema),\n 'attachments': ResponseRelationshipOneToManyToJSON(value.attachments),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingSchemaDefinitionGroup,\n FindingSchemaDefinitionGroupFromJSON,\n FindingSchemaDefinitionGroupFromJSONTyped,\n FindingSchemaDefinitionGroupToJSON,\n FindingSchemaNestedDataDefinition,\n FindingSchemaNestedDataDefinitionFromJSON,\n FindingSchemaNestedDataDefinitionFromJSONTyped,\n FindingSchemaNestedDataDefinitionToJSON,\n TaxonomyTree,\n TaxonomyTreeFromJSON,\n TaxonomyTreeFromJSONTyped,\n TaxonomyTreeToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingSchema\n */\nexport interface FindingSchema {\n /**\n * \n * @type {string}\n * @memberof FindingSchema\n */\n name: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchema\n */\n color: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchema\n */\n mapIcon: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchema\n */\n mapPolygonIcon: string;\n /**\n * \n * @type {Array}\n * @memberof FindingSchema\n */\n definitionGroups?: Array;\n /**\n * \n * @type {Array}\n * @memberof FindingSchema\n */\n nestedDataDefinitions?: Array;\n /**\n * \n * @type {TaxonomyTree}\n * @memberof FindingSchema\n */\n taxonomyTree?: TaxonomyTree;\n}\n\nexport function FindingSchemaFromJSON(json: any): FindingSchema {\n return FindingSchemaFromJSONTyped(json, false);\n}\n\nexport function FindingSchemaFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSchema {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'name': json['name'],\n 'color': json['color'],\n 'mapIcon': json['mapIcon'],\n 'mapPolygonIcon': json['mapPolygonIcon'],\n 'definitionGroups': !exists(json, 'definitionGroups') ? undefined : ((json['definitionGroups'] as Array).map(FindingSchemaDefinitionGroupFromJSON)),\n 'nestedDataDefinitions': !exists(json, 'nestedDataDefinitions') ? undefined : ((json['nestedDataDefinitions'] as Array).map(FindingSchemaNestedDataDefinitionFromJSON)),\n 'taxonomyTree': !exists(json, 'taxonomyTree') ? undefined : TaxonomyTreeFromJSON(json['taxonomyTree']),\n };\n}\n\nexport function FindingSchemaToJSON(value?: FindingSchema | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'name': value.name,\n 'color': value.color,\n 'mapIcon': value.mapIcon,\n 'mapPolygonIcon': value.mapPolygonIcon,\n 'definitionGroups': value.definitionGroups === undefined ? undefined : ((value.definitionGroups as Array).map(FindingSchemaDefinitionGroupToJSON)),\n 'nestedDataDefinitions': value.nestedDataDefinitions === undefined ? undefined : ((value.nestedDataDefinitions as Array).map(FindingSchemaNestedDataDefinitionToJSON)),\n 'taxonomyTree': TaxonomyTreeToJSON(value.taxonomyTree),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingSchemaResourceObject,\n FindingSchemaResourceObjectFromJSON,\n FindingSchemaResourceObjectFromJSONTyped,\n FindingSchemaResourceObjectToJSON,\n ResponseLinks,\n ResponseLinksFromJSON,\n ResponseLinksFromJSONTyped,\n ResponseLinksToJSON,\n ResponseMeta,\n ResponseMetaFromJSON,\n ResponseMetaFromJSONTyped,\n ResponseMetaToJSON,\n} from './';\n\n/**\n * Links may be ommited on empty result.\n * @export\n * @interface FindingSchemaArrayResponse\n */\nexport interface FindingSchemaArrayResponse {\n /**\n * A single page of results. NULL on empty result.\n * @type {Array}\n * @memberof FindingSchemaArrayResponse\n */\n data?: Array;\n /**\n * \n * @type {ResponseLinks}\n * @memberof FindingSchemaArrayResponse\n */\n links?: ResponseLinks;\n /**\n * \n * @type {ResponseMeta}\n * @memberof FindingSchemaArrayResponse\n */\n meta?: ResponseMeta;\n}\n\nexport function FindingSchemaArrayResponseFromJSON(json: any): FindingSchemaArrayResponse {\n return FindingSchemaArrayResponseFromJSONTyped(json, false);\n}\n\nexport function FindingSchemaArrayResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSchemaArrayResponse {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : ((json['data'] as Array).map(FindingSchemaResourceObjectFromJSON)),\n 'links': !exists(json, 'links') ? undefined : ResponseLinksFromJSON(json['links']),\n 'meta': !exists(json, 'meta') ? undefined : ResponseMetaFromJSON(json['meta']),\n };\n}\n\nexport function FindingSchemaArrayResponseToJSON(value?: FindingSchemaArrayResponse | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': value.data === undefined ? undefined : ((value.data as Array).map(FindingSchemaResourceObjectToJSON)),\n 'links': ResponseLinksToJSON(value.links),\n 'meta': ResponseMetaToJSON(value.meta),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingSchemaElement,\n FindingSchemaElementFromJSON,\n FindingSchemaElementFromJSONTyped,\n FindingSchemaElementToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingSchemaDefinitionGroup\n */\nexport interface FindingSchemaDefinitionGroup {\n /**\n * \n * @type {string}\n * @memberof FindingSchemaDefinitionGroup\n */\n name: string;\n /**\n * \n * @type {Array}\n * @memberof FindingSchemaDefinitionGroup\n */\n definitions: Array;\n}\n\nexport function FindingSchemaDefinitionGroupFromJSON(json: any): FindingSchemaDefinitionGroup {\n return FindingSchemaDefinitionGroupFromJSONTyped(json, false);\n}\n\nexport function FindingSchemaDefinitionGroupFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSchemaDefinitionGroup {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'name': json['name'],\n 'definitions': ((json['definitions'] as Array).map(FindingSchemaElementFromJSON)),\n };\n}\n\nexport function FindingSchemaDefinitionGroupToJSON(value?: FindingSchemaDefinitionGroup | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'name': value.name,\n 'definitions': ((value.definitions as Array).map(FindingSchemaElementToJSON)),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingSchemaElementValue,\n FindingSchemaElementValueFromJSON,\n FindingSchemaElementValueFromJSONTyped,\n FindingSchemaElementValueToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingSchemaElement\n */\nexport interface FindingSchemaElement {\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n type?: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n subtype?: string;\n /**\n * \n * @type {boolean}\n * @memberof FindingSchemaElement\n */\n required?: boolean;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n label?: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n description?: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n placeholder?: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n name?: string;\n /**\n * \n * @type {boolean}\n * @memberof FindingSchemaElement\n */\n other?: boolean;\n /**\n * \n * @type {boolean}\n * @memberof FindingSchemaElement\n */\n multiple?: boolean;\n /**\n * \n * @type {Array}\n * @memberof FindingSchemaElement\n */\n values?: Array;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n min?: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n max?: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n step?: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n maxlength?: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElement\n */\n className?: string;\n}\n\nexport function FindingSchemaElementFromJSON(json: any): FindingSchemaElement {\n return FindingSchemaElementFromJSONTyped(json, false);\n}\n\nexport function FindingSchemaElementFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSchemaElement {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'type': !exists(json, 'type') ? undefined : json['type'],\n 'subtype': !exists(json, 'subtype') ? undefined : json['subtype'],\n 'required': !exists(json, 'required') ? undefined : json['required'],\n 'label': !exists(json, 'label') ? undefined : json['label'],\n 'description': !exists(json, 'description') ? undefined : json['description'],\n 'placeholder': !exists(json, 'placeholder') ? undefined : json['placeholder'],\n 'name': !exists(json, 'name') ? undefined : json['name'],\n 'other': !exists(json, 'other') ? undefined : json['other'],\n 'multiple': !exists(json, 'multiple') ? undefined : json['multiple'],\n 'values': !exists(json, 'values') ? undefined : ((json['values'] as Array).map(FindingSchemaElementValueFromJSON)),\n 'min': !exists(json, 'min') ? undefined : json['min'],\n 'max': !exists(json, 'max') ? undefined : json['max'],\n 'step': !exists(json, 'step') ? undefined : json['step'],\n 'maxlength': !exists(json, 'maxlength') ? undefined : json['maxlength'],\n 'className': !exists(json, 'className') ? undefined : json['className'],\n };\n}\n\nexport function FindingSchemaElementToJSON(value?: FindingSchemaElement | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'type': value.type,\n 'subtype': value.subtype,\n 'required': value.required,\n 'label': value.label,\n 'description': value.description,\n 'placeholder': value.placeholder,\n 'name': value.name,\n 'other': value.other,\n 'multiple': value.multiple,\n 'values': value.values === undefined ? undefined : ((value.values as Array).map(FindingSchemaElementValueToJSON)),\n 'min': value.min,\n 'max': value.max,\n 'step': value.step,\n 'maxlength': value.maxlength,\n 'className': value.className,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface FindingSchemaElementValue\n */\nexport interface FindingSchemaElementValue {\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElementValue\n */\n label?: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaElementValue\n */\n value?: string;\n}\n\nexport function FindingSchemaElementValueFromJSON(json: any): FindingSchemaElementValue {\n return FindingSchemaElementValueFromJSONTyped(json, false);\n}\n\nexport function FindingSchemaElementValueFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSchemaElementValue {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'label': !exists(json, 'label') ? undefined : json['label'],\n 'value': !exists(json, 'value') ? undefined : json['value'],\n };\n}\n\nexport function FindingSchemaElementValueToJSON(value?: FindingSchemaElementValue | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'label': value.label,\n 'value': value.value,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingSchemaElement,\n FindingSchemaElementFromJSON,\n FindingSchemaElementFromJSONTyped,\n FindingSchemaElementToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingSchemaNestedDataDefinition\n */\nexport interface FindingSchemaNestedDataDefinition {\n /**\n * \n * @type {string}\n * @memberof FindingSchemaNestedDataDefinition\n */\n name: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaNestedDataDefinition\n */\n label: string;\n /**\n * \n * @type {Array}\n * @memberof FindingSchemaNestedDataDefinition\n */\n definitions: Array;\n}\n\nexport function FindingSchemaNestedDataDefinitionFromJSON(json: any): FindingSchemaNestedDataDefinition {\n return FindingSchemaNestedDataDefinitionFromJSONTyped(json, false);\n}\n\nexport function FindingSchemaNestedDataDefinitionFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSchemaNestedDataDefinition {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'name': json['name'],\n 'label': json['label'],\n 'definitions': ((json['definitions'] as Array).map(FindingSchemaElementFromJSON)),\n };\n}\n\nexport function FindingSchemaNestedDataDefinitionToJSON(value?: FindingSchemaNestedDataDefinition | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'name': value.name,\n 'label': value.label,\n 'definitions': ((value.definitions as Array).map(FindingSchemaElementToJSON)),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingSchema,\n FindingSchemaFromJSON,\n FindingSchemaFromJSONTyped,\n FindingSchemaToJSON,\n FindingSchemaResourceObjectRelationships,\n FindingSchemaResourceObjectRelationshipsFromJSON,\n FindingSchemaResourceObjectRelationshipsFromJSONTyped,\n FindingSchemaResourceObjectRelationshipsToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingSchemaResourceObject\n */\nexport interface FindingSchemaResourceObject {\n /**\n * \n * @type {FindingSchema}\n * @memberof FindingSchemaResourceObject\n */\n attributes: FindingSchema;\n /**\n * \n * @type {FindingSchemaResourceObjectRelationships}\n * @memberof FindingSchemaResourceObject\n */\n relationships?: FindingSchemaResourceObjectRelationships;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaResourceObject\n */\n type: string;\n /**\n * \n * @type {string}\n * @memberof FindingSchemaResourceObject\n */\n id?: string;\n}\n\nexport function FindingSchemaResourceObjectFromJSON(json: any): FindingSchemaResourceObject {\n return FindingSchemaResourceObjectFromJSONTyped(json, false);\n}\n\nexport function FindingSchemaResourceObjectFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSchemaResourceObject {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'attributes': FindingSchemaFromJSON(json['attributes']),\n 'relationships': !exists(json, 'relationships') ? undefined : FindingSchemaResourceObjectRelationshipsFromJSON(json['relationships']),\n 'type': json['type'],\n 'id': !exists(json, 'id') ? undefined : json['id'],\n };\n}\n\nexport function FindingSchemaResourceObjectToJSON(value?: FindingSchemaResourceObject | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'attributes': FindingSchemaToJSON(value.attributes),\n 'relationships': FindingSchemaResourceObjectRelationshipsToJSON(value.relationships),\n 'type': value.type,\n 'id': value.id,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n ResponseRelationshipOneToMany,\n ResponseRelationshipOneToManyFromJSON,\n ResponseRelationshipOneToManyFromJSONTyped,\n ResponseRelationshipOneToManyToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingSchemaResourceObjectRelationships\n */\nexport interface FindingSchemaResourceObjectRelationships {\n /**\n * \n * @type {ResponseRelationshipOneToMany}\n * @memberof FindingSchemaResourceObjectRelationships\n */\n findings?: ResponseRelationshipOneToMany;\n}\n\nexport function FindingSchemaResourceObjectRelationshipsFromJSON(json: any): FindingSchemaResourceObjectRelationships {\n return FindingSchemaResourceObjectRelationshipsFromJSONTyped(json, false);\n}\n\nexport function FindingSchemaResourceObjectRelationshipsFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSchemaResourceObjectRelationships {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'findings': !exists(json, 'findings') ? undefined : ResponseRelationshipOneToManyFromJSON(json['findings']),\n };\n}\n\nexport function FindingSchemaResourceObjectRelationshipsToJSON(value?: FindingSchemaResourceObjectRelationships | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'findings': ResponseRelationshipOneToManyToJSON(value.findings),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingSchemaResourceObject,\n FindingSchemaResourceObjectFromJSON,\n FindingSchemaResourceObjectFromJSONTyped,\n FindingSchemaResourceObjectToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingSchemaSingleResponse\n */\nexport interface FindingSchemaSingleResponse {\n /**\n * \n * @type {FindingSchemaResourceObject}\n * @memberof FindingSchemaSingleResponse\n */\n data?: FindingSchemaResourceObject;\n}\n\nexport function FindingSchemaSingleResponseFromJSON(json: any): FindingSchemaSingleResponse {\n return FindingSchemaSingleResponseFromJSONTyped(json, false);\n}\n\nexport function FindingSchemaSingleResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSchemaSingleResponse {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : FindingSchemaResourceObjectFromJSON(json['data']),\n };\n}\n\nexport function FindingSchemaSingleResponseToJSON(value?: FindingSchemaSingleResponse | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': FindingSchemaResourceObjectToJSON(value.data),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingResourceObject,\n FindingResourceObjectFromJSON,\n FindingResourceObjectFromJSONTyped,\n FindingResourceObjectToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FindingSingleResponse\n */\nexport interface FindingSingleResponse {\n /**\n * \n * @type {FindingResourceObject}\n * @memberof FindingSingleResponse\n */\n data?: FindingResourceObject;\n}\n\nexport function FindingSingleResponseFromJSON(json: any): FindingSingleResponse {\n return FindingSingleResponseFromJSONTyped(json, false);\n}\n\nexport function FindingSingleResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): FindingSingleResponse {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : FindingResourceObjectFromJSON(json['data']),\n };\n}\n\nexport function FindingSingleResponseToJSON(value?: FindingSingleResponse | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': FindingResourceObjectToJSON(value.data),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FrequencyChartItem,\n FrequencyChartItemFromJSON,\n FrequencyChartItemFromJSONTyped,\n FrequencyChartItemToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface FrequencyChart\n */\nexport interface FrequencyChart {\n /**\n * \n * @type {Array}\n * @memberof FrequencyChart\n */\n data?: Array;\n}\n\nexport function FrequencyChartFromJSON(json: any): FrequencyChart {\n return FrequencyChartFromJSONTyped(json, false);\n}\n\nexport function FrequencyChartFromJSONTyped(json: any, ignoreDiscriminator: boolean): FrequencyChart {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : ((json['data'] as Array).map(FrequencyChartItemFromJSON)),\n };\n}\n\nexport function FrequencyChartToJSON(value?: FrequencyChart | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': value.data === undefined ? undefined : ((value.data as Array).map(FrequencyChartItemToJSON)),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface FrequencyChartItem\n */\nexport interface FrequencyChartItem {\n /**\n * \n * @type {string}\n * @memberof FrequencyChartItem\n */\n group: string | null;\n /**\n * \n * @type {string}\n * @memberof FrequencyChartItem\n */\n label: string;\n /**\n * \n * @type {number}\n * @memberof FrequencyChartItem\n */\n value: number;\n}\n\nexport function FrequencyChartItemFromJSON(json: any): FrequencyChartItem {\n return FrequencyChartItemFromJSONTyped(json, false);\n}\n\nexport function FrequencyChartItemFromJSONTyped(json: any, ignoreDiscriminator: boolean): FrequencyChartItem {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'group': json['group'],\n 'label': json['label'],\n 'value': json['value'],\n };\n}\n\nexport function FrequencyChartItemToJSON(value?: FrequencyChartItem | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'group': value.group,\n 'label': value.label,\n 'value': value.value,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n Tenant,\n TenantFromJSON,\n TenantFromJSONTyped,\n TenantToJSON,\n TenantInviteeRole,\n TenantInviteeRoleFromJSON,\n TenantInviteeRoleFromJSONTyped,\n TenantInviteeRoleToJSON,\n TenantUser,\n TenantUserFromJSON,\n TenantUserFromJSONTyped,\n TenantUserToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface Invitation\n */\nexport interface Invitation {\n /**\n * Invitation ID\n * @type {string}\n * @memberof Invitation\n */\n id: string;\n /**\n * \n * @type {Tenant}\n * @memberof Invitation\n */\n tenant: Tenant;\n /**\n * \n * @type {TenantUser}\n * @memberof Invitation\n */\n inviter: TenantUser;\n /**\n * Timestamp when the invitation was created.\n * @type {Date}\n * @memberof Invitation\n */\n createdAt: Date;\n /**\n * Timestamp when the invitation expires, cannot be redeemed after.\n * @type {Date}\n * @memberof Invitation\n */\n expiresAt: Date;\n /**\n * \n * @type {TenantInviteeRole}\n * @memberof Invitation\n */\n inviteeRole: TenantInviteeRole;\n /**\n * Access key used in redeeming process.\n * @type {string}\n * @memberof Invitation\n */\n key: string;\n}\n\nexport function InvitationFromJSON(json: any): Invitation {\n return InvitationFromJSONTyped(json, false);\n}\n\nexport function InvitationFromJSONTyped(json: any, ignoreDiscriminator: boolean): Invitation {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'id': json['id'],\n 'tenant': TenantFromJSON(json['tenant']),\n 'inviter': TenantUserFromJSON(json['inviter']),\n 'createdAt': (new Date(json['createdAt'])),\n 'expiresAt': (new Date(json['expiresAt'])),\n 'inviteeRole': TenantInviteeRoleFromJSON(json['inviteeRole']),\n 'key': json['key'],\n };\n}\n\nexport function InvitationToJSON(value?: Invitation | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'id': value.id,\n 'tenant': TenantToJSON(value.tenant),\n 'inviter': TenantUserToJSON(value.inviter),\n 'createdAt': (value.createdAt.toISOString()),\n 'expiresAt': (value.expiresAt.toISOString()),\n 'inviteeRole': TenantInviteeRoleToJSON(value.inviteeRole),\n 'key': value.key,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface LatLngGps\n */\nexport interface LatLngGps {\n /**\n * \n * @type {number}\n * @memberof LatLngGps\n */\n lat: number;\n /**\n * \n * @type {number}\n * @memberof LatLngGps\n */\n lng: number;\n}\n\nexport function LatLngGpsFromJSON(json: any): LatLngGps {\n return LatLngGpsFromJSONTyped(json, false);\n}\n\nexport function LatLngGpsFromJSONTyped(json: any, ignoreDiscriminator: boolean): LatLngGps {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'lat': json['lat'],\n 'lng': json['lng'],\n };\n}\n\nexport function LatLngGpsToJSON(value?: LatLngGps | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'lat': value.lat,\n 'lng': value.lng,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface LevelDescriptionElement\n */\nexport interface LevelDescriptionElement {\n /**\n * \n * @type {string}\n * @memberof LevelDescriptionElement\n */\n name?: string;\n}\n\nexport function LevelDescriptionElementFromJSON(json: any): LevelDescriptionElement {\n return LevelDescriptionElementFromJSONTyped(json, false);\n}\n\nexport function LevelDescriptionElementFromJSONTyped(json: any, ignoreDiscriminator: boolean): LevelDescriptionElement {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'name': !exists(json, 'name') ? undefined : json['name'],\n };\n}\n\nexport function LevelDescriptionElementToJSON(value?: LevelDescriptionElement | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'name': value.name,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n MiniMapDataItem,\n MiniMapDataItemFromJSON,\n MiniMapDataItemFromJSONTyped,\n MiniMapDataItemToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface MiniMapData\n */\nexport interface MiniMapData {\n /**\n * \n * @type {Array}\n * @memberof MiniMapData\n */\n data: Array;\n}\n\nexport function MiniMapDataFromJSON(json: any): MiniMapData {\n return MiniMapDataFromJSONTyped(json, false);\n}\n\nexport function MiniMapDataFromJSONTyped(json: any, ignoreDiscriminator: boolean): MiniMapData {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': ((json['data'] as Array).map(MiniMapDataItemFromJSON)),\n };\n}\n\nexport function MiniMapDataToJSON(value?: MiniMapData | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': ((value.data as Array).map(MiniMapDataItemToJSON)),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n LatLngGps,\n LatLngGpsFromJSON,\n LatLngGpsFromJSONTyped,\n LatLngGpsToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface MiniMapDataItem\n */\nexport interface MiniMapDataItem {\n /**\n * \n * @type {LatLngGps}\n * @memberof MiniMapDataItem\n */\n coordinates?: LatLngGps | null;\n /**\n * \n * @type {number}\n * @memberof MiniMapDataItem\n */\n count?: number;\n}\n\nexport function MiniMapDataItemFromJSON(json: any): MiniMapDataItem {\n return MiniMapDataItemFromJSONTyped(json, false);\n}\n\nexport function MiniMapDataItemFromJSONTyped(json: any, ignoreDiscriminator: boolean): MiniMapDataItem {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'coordinates': !exists(json, 'coordinates') ? undefined : LatLngGpsFromJSON(json['coordinates']),\n 'count': !exists(json, 'count') ? undefined : json['count'],\n };\n}\n\nexport function MiniMapDataItemToJSON(value?: MiniMapDataItem | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'coordinates': LatLngGpsToJSON(value.coordinates),\n 'count': value.count,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingResourceObject,\n FindingResourceObjectFromJSON,\n FindingResourceObjectFromJSONTyped,\n FindingResourceObjectToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface NewFindingRequestBody\n */\nexport interface NewFindingRequestBody {\n /**\n * \n * @type {FindingResourceObject}\n * @memberof NewFindingRequestBody\n */\n data?: FindingResourceObject;\n}\n\nexport function NewFindingRequestBodyFromJSON(json: any): NewFindingRequestBody {\n return NewFindingRequestBodyFromJSONTyped(json, false);\n}\n\nexport function NewFindingRequestBodyFromJSONTyped(json: any, ignoreDiscriminator: boolean): NewFindingRequestBody {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : FindingResourceObjectFromJSON(json['data']),\n };\n}\n\nexport function NewFindingRequestBodyToJSON(value?: NewFindingRequestBody | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': FindingResourceObjectToJSON(value.data),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n FindingSchemaResourceObject,\n FindingSchemaResourceObjectFromJSON,\n FindingSchemaResourceObjectFromJSONTyped,\n FindingSchemaResourceObjectToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface NewFindingSchemaRequestBody\n */\nexport interface NewFindingSchemaRequestBody {\n /**\n * \n * @type {FindingSchemaResourceObject}\n * @memberof NewFindingSchemaRequestBody\n */\n data?: FindingSchemaResourceObject;\n}\n\nexport function NewFindingSchemaRequestBodyFromJSON(json: any): NewFindingSchemaRequestBody {\n return NewFindingSchemaRequestBodyFromJSONTyped(json, false);\n}\n\nexport function NewFindingSchemaRequestBodyFromJSONTyped(json: any, ignoreDiscriminator: boolean): NewFindingSchemaRequestBody {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': !exists(json, 'data') ? undefined : FindingSchemaResourceObjectFromJSON(json['data']),\n };\n}\n\nexport function NewFindingSchemaRequestBodyToJSON(value?: NewFindingSchemaRequestBody | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': FindingSchemaResourceObjectToJSON(value.data),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n TenantInviteeRole,\n TenantInviteeRoleFromJSON,\n TenantInviteeRoleFromJSONTyped,\n TenantInviteeRoleToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface NewInvitationRequestBody\n */\nexport interface NewInvitationRequestBody {\n /**\n * \n * @type {TenantInviteeRole}\n * @memberof NewInvitationRequestBody\n */\n inviteeRole: TenantInviteeRole;\n}\n\nexport function NewInvitationRequestBodyFromJSON(json: any): NewInvitationRequestBody {\n return NewInvitationRequestBodyFromJSONTyped(json, false);\n}\n\nexport function NewInvitationRequestBodyFromJSONTyped(json: any, ignoreDiscriminator: boolean): NewInvitationRequestBody {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'inviteeRole': TenantInviteeRoleFromJSON(json['inviteeRole']),\n };\n}\n\nexport function NewInvitationRequestBodyToJSON(value?: NewInvitationRequestBody | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'inviteeRole': TenantInviteeRoleToJSON(value.inviteeRole),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface NewTenantRequestBody\n */\nexport interface NewTenantRequestBody {\n /**\n * Friendly name\n * @type {string}\n * @memberof NewTenantRequestBody\n */\n name: string;\n}\n\nexport function NewTenantRequestBodyFromJSON(json: any): NewTenantRequestBody {\n return NewTenantRequestBodyFromJSONTyped(json, false);\n}\n\nexport function NewTenantRequestBodyFromJSONTyped(json: any, ignoreDiscriminator: boolean): NewTenantRequestBody {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'name': json['name'],\n };\n}\n\nexport function NewTenantRequestBodyToJSON(value?: NewTenantRequestBody | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'name': value.name,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface RelationshipLinks\n */\nexport interface RelationshipLinks {\n /**\n * \n * @type {string}\n * @memberof RelationshipLinks\n */\n self: string;\n /**\n * \n * @type {string}\n * @memberof RelationshipLinks\n */\n related: string;\n}\n\nexport function RelationshipLinksFromJSON(json: any): RelationshipLinks {\n return RelationshipLinksFromJSONTyped(json, false);\n}\n\nexport function RelationshipLinksFromJSONTyped(json: any, ignoreDiscriminator: boolean): RelationshipLinks {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'self': json['self'],\n 'related': json['related'],\n };\n}\n\nexport function RelationshipLinksToJSON(value?: RelationshipLinks | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'self': value.self,\n 'related': value.related,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface RelationshipResourceIdentifier\n */\nexport interface RelationshipResourceIdentifier {\n /**\n * \n * @type {string}\n * @memberof RelationshipResourceIdentifier\n */\n type: string;\n /**\n * \n * @type {string}\n * @memberof RelationshipResourceIdentifier\n */\n id: string;\n}\n\nexport function RelationshipResourceIdentifierFromJSON(json: any): RelationshipResourceIdentifier {\n return RelationshipResourceIdentifierFromJSONTyped(json, false);\n}\n\nexport function RelationshipResourceIdentifierFromJSONTyped(json: any, ignoreDiscriminator: boolean): RelationshipResourceIdentifier {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'type': json['type'],\n 'id': json['id'],\n };\n}\n\nexport function RelationshipResourceIdentifierToJSON(value?: RelationshipResourceIdentifier | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'type': value.type,\n 'id': value.id,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n RelationshipResourceIdentifier,\n RelationshipResourceIdentifierFromJSON,\n RelationshipResourceIdentifierFromJSONTyped,\n RelationshipResourceIdentifierToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface RelationshipResourceIdentifierArrayResponse\n */\nexport interface RelationshipResourceIdentifierArrayResponse {\n /**\n * \n * @type {Array}\n * @memberof RelationshipResourceIdentifierArrayResponse\n */\n data: Array;\n}\n\nexport function RelationshipResourceIdentifierArrayResponseFromJSON(json: any): RelationshipResourceIdentifierArrayResponse {\n return RelationshipResourceIdentifierArrayResponseFromJSONTyped(json, false);\n}\n\nexport function RelationshipResourceIdentifierArrayResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): RelationshipResourceIdentifierArrayResponse {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': ((json['data'] as Array).map(RelationshipResourceIdentifierFromJSON)),\n };\n}\n\nexport function RelationshipResourceIdentifierArrayResponseToJSON(value?: RelationshipResourceIdentifierArrayResponse | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': ((value.data as Array).map(RelationshipResourceIdentifierToJSON)),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n RelationshipResourceIdentifier,\n RelationshipResourceIdentifierFromJSON,\n RelationshipResourceIdentifierFromJSONTyped,\n RelationshipResourceIdentifierToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface RelationshipResourceIdentifierResponse\n */\nexport interface RelationshipResourceIdentifierResponse {\n /**\n * \n * @type {RelationshipResourceIdentifier}\n * @memberof RelationshipResourceIdentifierResponse\n */\n data: RelationshipResourceIdentifier | null;\n}\n\nexport function RelationshipResourceIdentifierResponseFromJSON(json: any): RelationshipResourceIdentifierResponse {\n return RelationshipResourceIdentifierResponseFromJSONTyped(json, false);\n}\n\nexport function RelationshipResourceIdentifierResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): RelationshipResourceIdentifierResponse {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': RelationshipResourceIdentifierFromJSON(json['data']),\n };\n}\n\nexport function RelationshipResourceIdentifierResponseToJSON(value?: RelationshipResourceIdentifierResponse | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': RelationshipResourceIdentifierToJSON(value.data),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * Properties may be ommited in extreme cases (first and last page requested).\n * @export\n * @interface ResponseLinks\n */\nexport interface ResponseLinks {\n /**\n * \n * @type {string}\n * @memberof ResponseLinks\n */\n first?: string;\n /**\n * \n * @type {string}\n * @memberof ResponseLinks\n */\n prev?: string;\n /**\n * \n * @type {string}\n * @memberof ResponseLinks\n */\n next?: string;\n /**\n * \n * @type {string}\n * @memberof ResponseLinks\n */\n last?: string;\n}\n\nexport function ResponseLinksFromJSON(json: any): ResponseLinks {\n return ResponseLinksFromJSONTyped(json, false);\n}\n\nexport function ResponseLinksFromJSONTyped(json: any, ignoreDiscriminator: boolean): ResponseLinks {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'first': !exists(json, 'first') ? undefined : json['first'],\n 'prev': !exists(json, 'prev') ? undefined : json['prev'],\n 'next': !exists(json, 'next') ? undefined : json['next'],\n 'last': !exists(json, 'last') ? undefined : json['last'],\n };\n}\n\nexport function ResponseLinksToJSON(value?: ResponseLinks | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'first': value.first,\n 'prev': value.prev,\n 'next': value.next,\n 'last': value.last,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface ResponseMeta\n */\nexport interface ResponseMeta {\n [key: string]: object | any;\n /**\n * \n * @type {number}\n * @memberof ResponseMeta\n */\n totalRecords?: number;\n}\n\nexport function ResponseMetaFromJSON(json: any): ResponseMeta {\n return ResponseMetaFromJSONTyped(json, false);\n}\n\nexport function ResponseMetaFromJSONTyped(json: any, ignoreDiscriminator: boolean): ResponseMeta {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n ...json,\n 'totalRecords': !exists(json, 'totalRecords') ? undefined : json['totalRecords'],\n };\n}\n\nexport function ResponseMetaToJSON(value?: ResponseMeta | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n ...value,\n 'totalRecords': value.totalRecords,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n RelationshipLinks,\n RelationshipLinksFromJSON,\n RelationshipLinksFromJSONTyped,\n RelationshipLinksToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface ResponseRelationshipOneToMany\n */\nexport interface ResponseRelationshipOneToMany {\n /**\n * \n * @type {RelationshipLinks}\n * @memberof ResponseRelationshipOneToMany\n */\n links?: RelationshipLinks;\n}\n\nexport function ResponseRelationshipOneToManyFromJSON(json: any): ResponseRelationshipOneToMany {\n return ResponseRelationshipOneToManyFromJSONTyped(json, false);\n}\n\nexport function ResponseRelationshipOneToManyFromJSONTyped(json: any, ignoreDiscriminator: boolean): ResponseRelationshipOneToMany {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'links': !exists(json, 'links') ? undefined : RelationshipLinksFromJSON(json['links']),\n };\n}\n\nexport function ResponseRelationshipOneToManyToJSON(value?: ResponseRelationshipOneToMany | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'links': RelationshipLinksToJSON(value.links),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n RelationshipLinks,\n RelationshipLinksFromJSON,\n RelationshipLinksFromJSONTyped,\n RelationshipLinksToJSON,\n RelationshipResourceIdentifier,\n RelationshipResourceIdentifierFromJSON,\n RelationshipResourceIdentifierFromJSONTyped,\n RelationshipResourceIdentifierToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface ResponseRelationshipOneToOne\n */\nexport interface ResponseRelationshipOneToOne {\n /**\n * \n * @type {RelationshipLinks}\n * @memberof ResponseRelationshipOneToOne\n */\n links?: RelationshipLinks;\n /**\n * \n * @type {RelationshipResourceIdentifier}\n * @memberof ResponseRelationshipOneToOne\n */\n data?: RelationshipResourceIdentifier | null;\n}\n\nexport function ResponseRelationshipOneToOneFromJSON(json: any): ResponseRelationshipOneToOne {\n return ResponseRelationshipOneToOneFromJSONTyped(json, false);\n}\n\nexport function ResponseRelationshipOneToOneFromJSONTyped(json: any, ignoreDiscriminator: boolean): ResponseRelationshipOneToOne {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'links': !exists(json, 'links') ? undefined : RelationshipLinksFromJSON(json['links']),\n 'data': !exists(json, 'data') ? undefined : RelationshipResourceIdentifierFromJSON(json['data']),\n };\n}\n\nexport function ResponseRelationshipOneToOneToJSON(value?: ResponseRelationshipOneToOne | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'links': RelationshipLinksToJSON(value.links),\n 'data': RelationshipResourceIdentifierToJSON(value.data),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n StatisticalDataItem,\n StatisticalDataItemFromJSON,\n StatisticalDataItemFromJSONTyped,\n StatisticalDataItemToJSON,\n StatisticalDataMeta,\n StatisticalDataMetaFromJSON,\n StatisticalDataMetaFromJSONTyped,\n StatisticalDataMetaToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface StatisticalData\n */\nexport interface StatisticalData {\n /**\n * \n * @type {Array}\n * @memberof StatisticalData\n */\n data: Array;\n /**\n * \n * @type {StatisticalDataMeta}\n * @memberof StatisticalData\n */\n meta: StatisticalDataMeta;\n}\n\nexport function StatisticalDataFromJSON(json: any): StatisticalData {\n return StatisticalDataFromJSONTyped(json, false);\n}\n\nexport function StatisticalDataFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatisticalData {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'data': ((json['data'] as Array).map(StatisticalDataItemFromJSON)),\n 'meta': StatisticalDataMetaFromJSON(json['meta']),\n };\n}\n\nexport function StatisticalDataToJSON(value?: StatisticalData | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'data': ((value.data as Array).map(StatisticalDataItemToJSON)),\n 'meta': StatisticalDataMetaToJSON(value.meta),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface StatisticalDataItem\n */\nexport interface StatisticalDataItem {\n /**\n * \n * @type {string}\n * @memberof StatisticalDataItem\n */\n group: string | null;\n /**\n * \n * @type {number}\n * @memberof StatisticalDataItem\n */\n min: number;\n /**\n * \n * @type {number}\n * @memberof StatisticalDataItem\n */\n max: number;\n /**\n * \n * @type {number}\n * @memberof StatisticalDataItem\n */\n average: number;\n /**\n * \n * @type {number}\n * @memberof StatisticalDataItem\n */\n stddevpopulation: number;\n /**\n * \n * @type {number}\n * @memberof StatisticalDataItem\n */\n stddevsample: number;\n /**\n * \n * @type {number}\n * @memberof StatisticalDataItem\n */\n sum: number;\n /**\n * \n * @type {number}\n * @memberof StatisticalDataItem\n */\n count: number;\n}\n\nexport function StatisticalDataItemFromJSON(json: any): StatisticalDataItem {\n return StatisticalDataItemFromJSONTyped(json, false);\n}\n\nexport function StatisticalDataItemFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatisticalDataItem {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'group': json['group'],\n 'min': json['min'],\n 'max': json['max'],\n 'average': json['average'],\n 'stddevpopulation': json['stddevpopulation'],\n 'stddevsample': json['stddevsample'],\n 'sum': json['sum'],\n 'count': json['count'],\n };\n}\n\nexport function StatisticalDataItemToJSON(value?: StatisticalDataItem | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'group': value.group,\n 'min': value.min,\n 'max': value.max,\n 'average': value.average,\n 'stddevpopulation': value.stddevpopulation,\n 'stddevsample': value.stddevsample,\n 'sum': value.sum,\n 'count': value.count,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface StatisticalDataMeta\n */\nexport interface StatisticalDataMeta {\n /**\n * Number of filtered items with invalid non-numeric type\n * @type {number}\n * @memberof StatisticalDataMeta\n */\n invalidCount: number;\n}\n\nexport function StatisticalDataMetaFromJSON(json: any): StatisticalDataMeta {\n return StatisticalDataMetaFromJSONTyped(json, false);\n}\n\nexport function StatisticalDataMetaFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatisticalDataMeta {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'invalidCount': json['invalidCount'],\n };\n}\n\nexport function StatisticalDataMetaToJSON(value?: StatisticalDataMeta | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'invalidCount': value.invalidCount,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface TaxonomyName\n */\nexport interface TaxonomyName {\n /**\n * \n * @type {string}\n * @memberof TaxonomyName\n */\n kingdom?: string | null;\n /**\n * \n * @type {string}\n * @memberof TaxonomyName\n */\n phylum?: string | null;\n /**\n * \n * @type {string}\n * @memberof TaxonomyName\n */\n _class?: string | null;\n /**\n * \n * @type {string}\n * @memberof TaxonomyName\n */\n order?: string | null;\n /**\n * \n * @type {string}\n * @memberof TaxonomyName\n */\n family?: string | null;\n /**\n * \n * @type {string}\n * @memberof TaxonomyName\n */\n genus?: string | null;\n /**\n * \n * @type {string}\n * @memberof TaxonomyName\n */\n species?: string | null;\n /**\n * \n * @type {string}\n * @memberof TaxonomyName\n */\n authorship?: string | null;\n}\n\nexport function TaxonomyNameFromJSON(json: any): TaxonomyName {\n return TaxonomyNameFromJSONTyped(json, false);\n}\n\nexport function TaxonomyNameFromJSONTyped(json: any, ignoreDiscriminator: boolean): TaxonomyName {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'kingdom': !exists(json, 'kingdom') ? undefined : json['kingdom'],\n 'phylum': !exists(json, 'phylum') ? undefined : json['phylum'],\n '_class': !exists(json, 'class') ? undefined : json['class'],\n 'order': !exists(json, 'order') ? undefined : json['order'],\n 'family': !exists(json, 'family') ? undefined : json['family'],\n 'genus': !exists(json, 'genus') ? undefined : json['genus'],\n 'species': !exists(json, 'species') ? undefined : json['species'],\n 'authorship': !exists(json, 'authorship') ? undefined : json['authorship'],\n };\n}\n\nexport function TaxonomyNameToJSON(value?: TaxonomyName | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'kingdom': value.kingdom,\n 'phylum': value.phylum,\n 'class': value._class,\n 'order': value.order,\n 'family': value.family,\n 'genus': value.genus,\n 'species': value.species,\n 'authorship': value.authorship,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface TaxonomyNode\n */\nexport interface TaxonomyNode {\n /**\n * \n * @type {string}\n * @memberof TaxonomyNode\n */\n name?: string;\n /**\n * \n * @type {string}\n * @memberof TaxonomyNode\n */\n author?: string;\n /**\n * \n * @type {Array}\n * @memberof TaxonomyNode\n */\n children?: Array;\n}\n\nexport function TaxonomyNodeFromJSON(json: any): TaxonomyNode {\n return TaxonomyNodeFromJSONTyped(json, false);\n}\n\nexport function TaxonomyNodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): TaxonomyNode {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'name': !exists(json, 'name') ? undefined : json['name'],\n 'author': !exists(json, 'author') ? undefined : json['author'],\n 'children': !exists(json, 'children') ? undefined : ((json['children'] as Array).map(TaxonomyNodeFromJSON)),\n };\n}\n\nexport function TaxonomyNodeToJSON(value?: TaxonomyNode | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'name': value.name,\n 'author': value.author,\n 'children': value.children === undefined ? undefined : ((value.children as Array).map(TaxonomyNodeToJSON)),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n LevelDescriptionElement,\n LevelDescriptionElementFromJSON,\n LevelDescriptionElementFromJSONTyped,\n LevelDescriptionElementToJSON,\n TaxonomyNode,\n TaxonomyNodeFromJSON,\n TaxonomyNodeFromJSONTyped,\n TaxonomyNodeToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface TaxonomyTree\n */\nexport interface TaxonomyTree {\n /**\n * \n * @type {TaxonomyNode}\n * @memberof TaxonomyTree\n */\n root?: TaxonomyNode;\n /**\n * \n * @type {Array}\n * @memberof TaxonomyTree\n */\n levelDescription?: Array;\n}\n\nexport function TaxonomyTreeFromJSON(json: any): TaxonomyTree {\n return TaxonomyTreeFromJSONTyped(json, false);\n}\n\nexport function TaxonomyTreeFromJSONTyped(json: any, ignoreDiscriminator: boolean): TaxonomyTree {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'root': !exists(json, 'root') ? undefined : TaxonomyNodeFromJSON(json['root']),\n 'levelDescription': !exists(json, 'levelDescription') ? undefined : ((json['levelDescription'] as Array).map(LevelDescriptionElementFromJSON)),\n };\n}\n\nexport function TaxonomyTreeToJSON(value?: TaxonomyTree | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'root': TaxonomyNodeToJSON(value.root),\n 'levelDescription': value.levelDescription === undefined ? undefined : ((value.levelDescription as Array).map(LevelDescriptionElementToJSON)),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface Tenant\n */\nexport interface Tenant {\n /**\n * Tenant identifier - use this value in other tenant-aware endpoints\n * @type {string}\n * @memberof Tenant\n */\n id: string;\n /**\n * Friendly name\n * @type {string}\n * @memberof Tenant\n */\n name: string;\n}\n\nexport function TenantFromJSON(json: any): Tenant {\n return TenantFromJSONTyped(json, false);\n}\n\nexport function TenantFromJSONTyped(json: any, ignoreDiscriminator: boolean): Tenant {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'id': json['id'],\n 'name': json['name'],\n };\n}\n\nexport function TenantToJSON(value?: Tenant | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'id': value.id,\n 'name': value.name,\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n TenantUserRole,\n TenantUserRoleFromJSON,\n TenantUserRoleFromJSONTyped,\n TenantUserRoleToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface TenantUser\n */\nexport interface TenantUser {\n /**\n * Tenant user\\'s ID\n * @type {string}\n * @memberof TenantUser\n */\n id: string;\n /**\n * External unique ID of the IDM user.\n * @type {string}\n * @memberof TenantUser\n */\n idmSubjectId: string;\n /**\n * Full name of the user, incl. titles, middle names etc.\n * @type {string}\n * @memberof TenantUser\n */\n fullName: string;\n /**\n * \n * @type {string}\n * @memberof TenantUser\n */\n firstName?: string;\n /**\n * \n * @type {string}\n * @memberof TenantUser\n */\n lastName?: string;\n /**\n * \n * @type {string}\n * @memberof TenantUser\n */\n email?: string;\n /**\n * URL of the user\\'s avatar picture. Can be external URL or data-URI.\n * @type {string}\n * @memberof TenantUser\n */\n pictureUrl?: string;\n /**\n * \n * @type {TenantUserRole}\n * @memberof TenantUser\n */\n role: TenantUserRole;\n}\n\nexport function TenantUserFromJSON(json: any): TenantUser {\n return TenantUserFromJSONTyped(json, false);\n}\n\nexport function TenantUserFromJSONTyped(json: any, ignoreDiscriminator: boolean): TenantUser {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'id': json['id'],\n 'idmSubjectId': json['idmSubjectId'],\n 'fullName': json['fullName'],\n 'firstName': !exists(json, 'firstName') ? undefined : json['firstName'],\n 'lastName': !exists(json, 'lastName') ? undefined : json['lastName'],\n 'email': !exists(json, 'email') ? undefined : json['email'],\n 'pictureUrl': !exists(json, 'pictureUrl') ? undefined : json['pictureUrl'],\n 'role': TenantUserRoleFromJSON(json['role']),\n };\n}\n\nexport function TenantUserToJSON(value?: TenantUser | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'id': value.id,\n 'idmSubjectId': value.idmSubjectId,\n 'fullName': value.fullName,\n 'firstName': value.firstName,\n 'lastName': value.lastName,\n 'email': value.email,\n 'pictureUrl': value.pictureUrl,\n 'role': TenantUserRoleToJSON(value.role),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { exists, mapValues } from '../runtime';\nimport {\n TenantUserRole,\n TenantUserRoleFromJSON,\n TenantUserRoleFromJSONTyped,\n TenantUserRoleToJSON,\n} from './';\n\n/**\n * \n * @export\n * @interface UserScopedTenant\n */\nexport interface UserScopedTenant {\n /**\n * Tenant identifier - use this value in other tenant-aware endpoints\n * @type {string}\n * @memberof UserScopedTenant\n */\n id: string;\n /**\n * Friendly name\n * @type {string}\n * @memberof UserScopedTenant\n */\n name: string;\n /**\n * \n * @type {TenantUserRole}\n * @memberof UserScopedTenant\n */\n currentUserRole: TenantUserRole;\n}\n\nexport function UserScopedTenantFromJSON(json: any): UserScopedTenant {\n return UserScopedTenantFromJSONTyped(json, false);\n}\n\nexport function UserScopedTenantFromJSONTyped(json: any, ignoreDiscriminator: boolean): UserScopedTenant {\n if ((json === undefined) || (json === null)) {\n return json;\n }\n return {\n \n 'id': json['id'],\n 'name': json['name'],\n 'currentUserRole': TenantUserRoleFromJSON(json['currentUserRole']),\n };\n}\n\nexport function UserScopedTenantToJSON(value?: UserScopedTenant | null): any {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return {\n \n 'id': value.id,\n 'name': value.name,\n 'currentUserRole': TenantUserRoleToJSON(value.currentUserRole),\n };\n}\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport {\n AttachmentArrayResponse,\n AttachmentArrayResponseFromJSON,\n AttachmentArrayResponseToJSON,\n AttachmentFieldsQuery,\n AttachmentFieldsQueryFromJSON,\n AttachmentFieldsQueryToJSON,\n AttachmentSingleResponse,\n AttachmentSingleResponseFromJSON,\n AttachmentSingleResponseToJSON,\n ErrorResponse,\n ErrorResponseFromJSON,\n ErrorResponseToJSON,\n FilterQuery,\n FilterQueryFromJSON,\n FilterQueryToJSON,\n FindingSingleResponse,\n FindingSingleResponseFromJSON,\n FindingSingleResponseToJSON,\n PageQuery,\n PageQueryFromJSON,\n PageQueryToJSON,\n RelationshipResourceIdentifierArrayResponse,\n RelationshipResourceIdentifierArrayResponseFromJSON,\n RelationshipResourceIdentifierArrayResponseToJSON,\n} from '../models';\n\nexport interface ApiAttachmentsDeleteByIdRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiAttachmentsGetRequest {\n tenantId: string;\n sort?: string;\n page?: PageQuery;\n fields?: AttachmentFieldsQuery;\n filter?: FilterQuery;\n}\n\nexport interface ApiAttachmentsGetByIdRequest {\n tenantId: string;\n id: string;\n fields?: AttachmentFieldsQuery;\n}\n\nexport interface ApiAttachmentsGetByIdDownloadRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiAttachmentsGetByIdFindingsRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiAttachmentsGetByIdRelationshipsFindingsRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiAttachmentsGetByIdThumbnailRequest {\n tenantId: string;\n id: string;\n}\n\n/**\n * no description\n */\nexport class AttachmentsApi extends runtime.BaseAPI {\n\n /**\n * Delete a specific attachment, if exists\n */\n async apiAttachmentsDeleteByIdRaw(requestParameters: ApiAttachmentsDeleteByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiAttachmentsDeleteById.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiAttachmentsDeleteById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/attachments/{id}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'DELETE',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Delete a specific attachment, if exists\n */\n async apiAttachmentsDeleteById(requestParameters: ApiAttachmentsDeleteByIdRequest): Promise {\n await this.apiAttachmentsDeleteByIdRaw(requestParameters);\n }\n\n /**\n * Get paged list of attachments matching optional criteria\n */\n async apiAttachmentsGetRaw(requestParameters: ApiAttachmentsGetRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiAttachmentsGet.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.sort !== undefined) {\n queryParameters['sort'] = requestParameters.sort;\n }\n\n if (requestParameters.page !== undefined) {\n queryParameters['page'] = requestParameters.page;\n }\n\n if (requestParameters.fields !== undefined) {\n queryParameters['fields'] = requestParameters.fields;\n }\n\n if (requestParameters.filter !== undefined) {\n queryParameters['filter'] = requestParameters.filter;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/attachments`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => AttachmentArrayResponseFromJSON(jsonValue));\n }\n\n /**\n * Get paged list of attachments matching optional criteria\n */\n async apiAttachmentsGet(requestParameters: ApiAttachmentsGetRequest): Promise {\n const response = await this.apiAttachmentsGetRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get a specific attachment, if exists\n */\n async apiAttachmentsGetByIdRaw(requestParameters: ApiAttachmentsGetByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiAttachmentsGetById.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiAttachmentsGetById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.fields !== undefined) {\n queryParameters['fields'] = requestParameters.fields;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/attachments/{id}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => AttachmentSingleResponseFromJSON(jsonValue));\n }\n\n /**\n * Get a specific attachment, if exists\n */\n async apiAttachmentsGetById(requestParameters: ApiAttachmentsGetByIdRequest): Promise {\n const response = await this.apiAttachmentsGetByIdRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get raw data of a specific attachment, if present (attachment is NOT in incomplete state)\n */\n async apiAttachmentsGetByIdDownloadRaw(requestParameters: ApiAttachmentsGetByIdDownloadRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiAttachmentsGetByIdDownload.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiAttachmentsGetByIdDownload.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/attachments/{id}/download`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.BlobApiResponse(response);\n }\n\n /**\n * Get raw data of a specific attachment, if present (attachment is NOT in incomplete state)\n */\n async apiAttachmentsGetByIdDownload(requestParameters: ApiAttachmentsGetByIdDownloadRequest): Promise {\n const response = await this.apiAttachmentsGetByIdDownloadRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get finding related to an attachment\n */\n async apiAttachmentsGetByIdFindingsRaw(requestParameters: ApiAttachmentsGetByIdFindingsRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiAttachmentsGetByIdFindings.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiAttachmentsGetByIdFindings.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/attachments/{id}/finding`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingSingleResponseFromJSON(jsonValue));\n }\n\n /**\n * Get finding related to an attachment\n */\n async apiAttachmentsGetByIdFindings(requestParameters: ApiAttachmentsGetByIdFindingsRequest): Promise {\n const response = await this.apiAttachmentsGetByIdFindingsRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get resource identifiers for a given relationship of an attachment\n */\n async apiAttachmentsGetByIdRelationshipsFindingsRaw(requestParameters: ApiAttachmentsGetByIdRelationshipsFindingsRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiAttachmentsGetByIdRelationshipsFindings.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiAttachmentsGetByIdRelationshipsFindings.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/attachments/{id}/relationships/finding`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => RelationshipResourceIdentifierArrayResponseFromJSON(jsonValue));\n }\n\n /**\n * Get resource identifiers for a given relationship of an attachment\n */\n async apiAttachmentsGetByIdRelationshipsFindings(requestParameters: ApiAttachmentsGetByIdRelationshipsFindingsRequest): Promise {\n const response = await this.apiAttachmentsGetByIdRelationshipsFindingsRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get raw thumbnail data of a specific attachment, if available (attachment is NOT in incomplete state)\n */\n async apiAttachmentsGetByIdThumbnailRaw(requestParameters: ApiAttachmentsGetByIdThumbnailRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiAttachmentsGetByIdThumbnail.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiAttachmentsGetByIdThumbnail.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/attachments/{id}/thumbnail`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.BlobApiResponse(response);\n }\n\n /**\n * Get raw thumbnail data of a specific attachment, if available (attachment is NOT in incomplete state)\n */\n async apiAttachmentsGetByIdThumbnail(requestParameters: ApiAttachmentsGetByIdThumbnailRequest): Promise {\n const response = await this.apiAttachmentsGetByIdThumbnailRaw(requestParameters);\n return await response.value();\n }\n\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport {\n ErrorResponse,\n ErrorResponseFromJSON,\n ErrorResponseToJSON,\n FilterQuery,\n FilterQueryFromJSON,\n FilterQueryToJSON,\n FrequencyChart,\n FrequencyChartFromJSON,\n FrequencyChartToJSON,\n MiniMapData,\n MiniMapDataFromJSON,\n MiniMapDataToJSON,\n StatisticalData,\n StatisticalDataFromJSON,\n StatisticalDataToJSON,\n} from '../models';\n\nexport interface ApiChartsFindingsFrequencyRequest {\n tenantId: string;\n aggregate: string;\n group?: string;\n filter?: FilterQuery;\n maxItemsPerGroup?: number;\n}\n\nexport interface ApiChartsFindingsMinimapRequest {\n tenantId: string;\n filter?: FilterQuery;\n}\n\nexport interface ApiChartsFindingsStatisticsRequest {\n tenantId: string;\n aggregate: string;\n group?: string;\n filter?: FilterQuery;\n}\n\n/**\n * no description\n */\nexport class ChartsApi extends runtime.BaseAPI {\n\n /**\n * Frequency counts of findings\\' properties\n */\n async apiChartsFindingsFrequencyRaw(requestParameters: ApiChartsFindingsFrequencyRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiChartsFindingsFrequency.');\n }\n\n if (requestParameters.aggregate === null || requestParameters.aggregate === undefined) {\n throw new runtime.RequiredError('aggregate','Required parameter requestParameters.aggregate was null or undefined when calling apiChartsFindingsFrequency.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.aggregate !== undefined) {\n queryParameters['aggregate'] = requestParameters.aggregate;\n }\n\n if (requestParameters.group !== undefined) {\n queryParameters['group'] = requestParameters.group;\n }\n\n if (requestParameters.filter !== undefined) {\n queryParameters['filter'] = requestParameters.filter;\n }\n\n if (requestParameters.maxItemsPerGroup !== undefined) {\n queryParameters['max-items-per-group'] = requestParameters.maxItemsPerGroup;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/charts/findings/frequency`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FrequencyChartFromJSON(jsonValue));\n }\n\n /**\n * Frequency counts of findings\\' properties\n */\n async apiChartsFindingsFrequency(requestParameters: ApiChartsFindingsFrequencyRequest): Promise {\n const response = await this.apiChartsFindingsFrequencyRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Data for frequency heatmap\n */\n async apiChartsFindingsMinimapRaw(requestParameters: ApiChartsFindingsMinimapRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiChartsFindingsMinimap.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.filter !== undefined) {\n queryParameters['filter'] = requestParameters.filter;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/charts/findings/minimap`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => MiniMapDataFromJSON(jsonValue));\n }\n\n /**\n * Data for frequency heatmap\n */\n async apiChartsFindingsMinimap(requestParameters: ApiChartsFindingsMinimapRequest): Promise {\n const response = await this.apiChartsFindingsMinimapRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Statisctical data for findings\\' numerical properties\n */\n async apiChartsFindingsStatisticsRaw(requestParameters: ApiChartsFindingsStatisticsRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiChartsFindingsStatistics.');\n }\n\n if (requestParameters.aggregate === null || requestParameters.aggregate === undefined) {\n throw new runtime.RequiredError('aggregate','Required parameter requestParameters.aggregate was null or undefined when calling apiChartsFindingsStatistics.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.aggregate !== undefined) {\n queryParameters['aggregate'] = requestParameters.aggregate;\n }\n\n if (requestParameters.group !== undefined) {\n queryParameters['group'] = requestParameters.group;\n }\n\n if (requestParameters.filter !== undefined) {\n queryParameters['filter'] = requestParameters.filter;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/charts/findings/statistics`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => StatisticalDataFromJSON(jsonValue));\n }\n\n /**\n * Statisctical data for findings\\' numerical properties\n */\n async apiChartsFindingsStatistics(requestParameters: ApiChartsFindingsStatisticsRequest): Promise {\n const response = await this.apiChartsFindingsStatisticsRaw(requestParameters);\n return await response.value();\n }\n\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport {\n ErrorResponse,\n ErrorResponseFromJSON,\n ErrorResponseToJSON,\n FilterQuery,\n FilterQueryFromJSON,\n FilterQueryToJSON,\n} from '../models';\n\nexport interface ApiExportFindingsGetRequest {\n tenantId: string;\n filter?: FilterQuery;\n}\n\nexport interface ApiExportFindingsGetByIdRequest {\n tenantId: string;\n id: string;\n}\n\n/**\n * no description\n */\nexport class ExportApi extends runtime.BaseAPI {\n\n /**\n * Get semicolon-delimited CSV export of findings matching optional criteria\n */\n async apiExportFindingsGetRaw(requestParameters: ApiExportFindingsGetRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiExportFindingsGet.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.filter !== undefined) {\n queryParameters['filter'] = requestParameters.filter;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/export/findings`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.TextApiResponse(response) as any;\n }\n\n /**\n * Get semicolon-delimited CSV export of findings matching optional criteria\n */\n async apiExportFindingsGet(requestParameters: ApiExportFindingsGetRequest): Promise {\n const response = await this.apiExportFindingsGetRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get semicolon-delimited CSV export of a specific finding, if exists\n */\n async apiExportFindingsGetByIdRaw(requestParameters: ApiExportFindingsGetByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiExportFindingsGetById.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiExportFindingsGetById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/export/findings/{id}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.TextApiResponse(response) as any;\n }\n\n /**\n * Get semicolon-delimited CSV export of a specific finding, if exists\n */\n async apiExportFindingsGetById(requestParameters: ApiExportFindingsGetByIdRequest): Promise {\n const response = await this.apiExportFindingsGetByIdRaw(requestParameters);\n return await response.value();\n }\n\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport {\n AttachmentArrayResponse,\n AttachmentArrayResponseFromJSON,\n AttachmentArrayResponseToJSON,\n AttachmentPutResponse,\n AttachmentPutResponseFromJSON,\n AttachmentPutResponseToJSON,\n ErrorResponse,\n ErrorResponseFromJSON,\n ErrorResponseToJSON,\n ExistingFindingRequestBody,\n ExistingFindingRequestBodyFromJSON,\n ExistingFindingRequestBodyToJSON,\n FilterQuery,\n FilterQueryFromJSON,\n FilterQueryToJSON,\n FindingArrayResponse,\n FindingArrayResponseFromJSON,\n FindingArrayResponseToJSON,\n FindingFieldsQuery,\n FindingFieldsQueryFromJSON,\n FindingFieldsQueryToJSON,\n FindingSchemaSingleResponse,\n FindingSchemaSingleResponseFromJSON,\n FindingSchemaSingleResponseToJSON,\n FindingSingleResponse,\n FindingSingleResponseFromJSON,\n FindingSingleResponseToJSON,\n NewFindingRequestBody,\n NewFindingRequestBodyFromJSON,\n NewFindingRequestBodyToJSON,\n PageQuery,\n PageQueryFromJSON,\n PageQueryToJSON,\n RelationshipResourceIdentifierResponse,\n RelationshipResourceIdentifierResponseFromJSON,\n RelationshipResourceIdentifierResponseToJSON,\n} from '../models';\n\nexport interface ApiFindingsDeleteByIdRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiFindingsGetRequest {\n tenantId: string;\n sort?: string;\n page?: PageQuery;\n fields?: FindingFieldsQuery;\n filter?: FilterQuery;\n}\n\nexport interface ApiFindingsGetByIdRequest {\n tenantId: string;\n id: string;\n fields?: FindingFieldsQuery;\n}\n\nexport interface ApiFindingsGetByIdAttachmentsRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiFindingsGetByIdRelationshipAttachmentsRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiFindingsGetByIdRelationshipSchemaRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiFindingsGetByIdSchemaRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiFindingsPatchByIdRequest {\n tenantId: string;\n id: string;\n existingFindingRequestBody?: ExistingFindingRequestBody;\n}\n\nexport interface ApiFindingsPostRequest {\n tenantId: string;\n newFindingRequestBody?: NewFindingRequestBody;\n}\n\nexport interface ApiFindingsPutByIdAttachmentsRequest {\n tenantId: string;\n id: string;\n file?: Blob;\n}\n\n/**\n * no description\n */\nexport class FindingsApi extends runtime.BaseAPI {\n\n /**\n * Delete a specific finding, if exists\n */\n async apiFindingsDeleteByIdRaw(requestParameters: ApiFindingsDeleteByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsDeleteById.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiFindingsDeleteById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/findings/{id}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'DELETE',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Delete a specific finding, if exists\n */\n async apiFindingsDeleteById(requestParameters: ApiFindingsDeleteByIdRequest): Promise {\n await this.apiFindingsDeleteByIdRaw(requestParameters);\n }\n\n /**\n * Get paged list of findings matching optional criteria\n */\n async apiFindingsGetRaw(requestParameters: ApiFindingsGetRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsGet.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.sort !== undefined) {\n queryParameters['sort'] = requestParameters.sort;\n }\n\n if (requestParameters.page !== undefined) {\n queryParameters['page'] = requestParameters.page;\n }\n\n if (requestParameters.fields !== undefined) {\n queryParameters['fields'] = requestParameters.fields;\n }\n\n if (requestParameters.filter !== undefined) {\n queryParameters['filter'] = requestParameters.filter;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/findings`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingArrayResponseFromJSON(jsonValue));\n }\n\n /**\n * Get paged list of findings matching optional criteria\n */\n async apiFindingsGet(requestParameters: ApiFindingsGetRequest): Promise {\n const response = await this.apiFindingsGetRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get a specific finding, if exists\n */\n async apiFindingsGetByIdRaw(requestParameters: ApiFindingsGetByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsGetById.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiFindingsGetById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.fields !== undefined) {\n queryParameters['fields'] = requestParameters.fields;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/findings/{id}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingSingleResponseFromJSON(jsonValue));\n }\n\n /**\n * Get a specific finding, if exists\n */\n async apiFindingsGetById(requestParameters: ApiFindingsGetByIdRequest): Promise {\n const response = await this.apiFindingsGetByIdRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get attachments related to a finding\n */\n async apiFindingsGetByIdAttachmentsRaw(requestParameters: ApiFindingsGetByIdAttachmentsRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsGetByIdAttachments.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiFindingsGetByIdAttachments.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/findings/{id}/attachments`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => AttachmentArrayResponseFromJSON(jsonValue));\n }\n\n /**\n * Get attachments related to a finding\n */\n async apiFindingsGetByIdAttachments(requestParameters: ApiFindingsGetByIdAttachmentsRequest): Promise {\n const response = await this.apiFindingsGetByIdAttachmentsRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get resource identifier for a given relationship of a finding\n */\n async apiFindingsGetByIdRelationshipAttachmentsRaw(requestParameters: ApiFindingsGetByIdRelationshipAttachmentsRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsGetByIdRelationshipAttachments.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiFindingsGetByIdRelationshipAttachments.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/findings/{id}/relationships/attachments`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => RelationshipResourceIdentifierResponseFromJSON(jsonValue));\n }\n\n /**\n * Get resource identifier for a given relationship of a finding\n */\n async apiFindingsGetByIdRelationshipAttachments(requestParameters: ApiFindingsGetByIdRelationshipAttachmentsRequest): Promise {\n const response = await this.apiFindingsGetByIdRelationshipAttachmentsRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get resource identifier for a given relationship of a finding\n */\n async apiFindingsGetByIdRelationshipSchemaRaw(requestParameters: ApiFindingsGetByIdRelationshipSchemaRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsGetByIdRelationshipSchema.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiFindingsGetByIdRelationshipSchema.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/findings/{id}/relationships/schema`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => RelationshipResourceIdentifierResponseFromJSON(jsonValue));\n }\n\n /**\n * Get resource identifier for a given relationship of a finding\n */\n async apiFindingsGetByIdRelationshipSchema(requestParameters: ApiFindingsGetByIdRelationshipSchemaRequest): Promise {\n const response = await this.apiFindingsGetByIdRelationshipSchemaRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get schema related to a finding\n */\n async apiFindingsGetByIdSchemaRaw(requestParameters: ApiFindingsGetByIdSchemaRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsGetByIdSchema.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiFindingsGetByIdSchema.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/findings/{id}/schema`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingSchemaSingleResponseFromJSON(jsonValue));\n }\n\n /**\n * Get schema related to a finding\n */\n async apiFindingsGetByIdSchema(requestParameters: ApiFindingsGetByIdSchemaRequest): Promise {\n const response = await this.apiFindingsGetByIdSchemaRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Notes concerinig the payload: * **Use ISO date format** (e.g. 2018-10-08), time of day must be ommited or zero (e.g. 2018-10-08T00:00:00.000Z) * Partial updates are supported. Ommited attributes will not be changed. * Schema realtionship cannot be changed on existing findings (internal policy). Should the schema relationship be present in the request, HTTP 409 response will be returned and changes won\\'t be saved. * **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. \n * Update an existing finding, if exists\n */\n async apiFindingsPatchByIdRaw(requestParameters: ApiFindingsPatchByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsPatchById.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiFindingsPatchById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/vnd.api+json';\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/findings/{id}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'PATCH',\n headers: headerParameters,\n query: queryParameters,\n body: ExistingFindingRequestBodyToJSON(requestParameters.existingFindingRequestBody),\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingSingleResponseFromJSON(jsonValue));\n }\n\n /**\n * Notes concerinig the payload: * **Use ISO date format** (e.g. 2018-10-08), time of day must be ommited or zero (e.g. 2018-10-08T00:00:00.000Z) * Partial updates are supported. Ommited attributes will not be changed. * Schema realtionship cannot be changed on existing findings (internal policy). Should the schema relationship be present in the request, HTTP 409 response will be returned and changes won\\'t be saved. * **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. \n * Update an existing finding, if exists\n */\n async apiFindingsPatchById(requestParameters: ApiFindingsPatchByIdRequest): Promise {\n const response = await this.apiFindingsPatchByIdRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Notes concerinig the payload: * **Use ISO date format** (e.g. 2018-10-08), time of day must be ommited or zero (e.g. 2018-10-08T00:00:00.000Z) * ID of the inserted entity is created dynamically by the server, **providing client-generated ID in the request will result in HTTP 403 error** \n * Insert new finding to the database\n */\n async apiFindingsPostRaw(requestParameters: ApiFindingsPostRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsPost.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/vnd.api+json';\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/findings`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: NewFindingRequestBodyToJSON(requestParameters.newFindingRequestBody),\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingSingleResponseFromJSON(jsonValue));\n }\n\n /**\n * Notes concerinig the payload: * **Use ISO date format** (e.g. 2018-10-08), time of day must be ommited or zero (e.g. 2018-10-08T00:00:00.000Z) * ID of the inserted entity is created dynamically by the server, **providing client-generated ID in the request will result in HTTP 403 error** \n * Insert new finding to the database\n */\n async apiFindingsPost(requestParameters: ApiFindingsPostRequest): Promise {\n const response = await this.apiFindingsPostRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Notes concerinig the payload: * File size is limited to 10 MB \n * Upload a new attachment to an existing finding\n */\n async apiFindingsPutByIdAttachmentsRaw(requestParameters: ApiFindingsPutByIdAttachmentsRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiFindingsPutByIdAttachments.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiFindingsPutByIdAttachments.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const consumes: runtime.Consume[] = [\n { contentType: 'multipart/form-data' },\n ];\n // @ts-ignore: canConsumeForm may be unused\n const canConsumeForm = runtime.canConsumeForm(consumes);\n\n let formParams: { append(param: string, value: any): any };\n let useForm = false;\n // use FormData to transmit files using content-type \"multipart/form-data\"\n useForm = canConsumeForm;\n if (useForm) {\n formParams = new FormData();\n } else {\n formParams = new URLSearchParams();\n }\n\n if (requestParameters.file !== undefined) {\n formParams.append('file', requestParameters.file as any);\n }\n\n const response = await this.request({\n path: `/{tenantId}/findings/{id}/attachments`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'PUT',\n headers: headerParameters,\n query: queryParameters,\n body: formParams,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => AttachmentPutResponseFromJSON(jsonValue));\n }\n\n /**\n * Notes concerinig the payload: * File size is limited to 10 MB \n * Upload a new attachment to an existing finding\n */\n async apiFindingsPutByIdAttachments(requestParameters: ApiFindingsPutByIdAttachmentsRequest): Promise {\n const response = await this.apiFindingsPutByIdAttachmentsRaw(requestParameters);\n return await response.value();\n }\n\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport {\n ErrorResponse,\n ErrorResponseFromJSON,\n ErrorResponseToJSON,\n ExistingFindingSchemaRequestBody,\n ExistingFindingSchemaRequestBodyFromJSON,\n ExistingFindingSchemaRequestBodyToJSON,\n FilterQuery,\n FilterQueryFromJSON,\n FilterQueryToJSON,\n FindingArrayResponse,\n FindingArrayResponseFromJSON,\n FindingArrayResponseToJSON,\n FindingSchemaArrayResponse,\n FindingSchemaArrayResponseFromJSON,\n FindingSchemaArrayResponseToJSON,\n FindingSchemaFieldsQuery,\n FindingSchemaFieldsQueryFromJSON,\n FindingSchemaFieldsQueryToJSON,\n FindingSchemaSingleResponse,\n FindingSchemaSingleResponseFromJSON,\n FindingSchemaSingleResponseToJSON,\n NewFindingSchemaRequestBody,\n NewFindingSchemaRequestBodyFromJSON,\n NewFindingSchemaRequestBodyToJSON,\n PageQuery,\n PageQueryFromJSON,\n PageQueryToJSON,\n RelationshipResourceIdentifierArrayResponse,\n RelationshipResourceIdentifierArrayResponseFromJSON,\n RelationshipResourceIdentifierArrayResponseToJSON,\n} from '../models';\n\nexport interface ApiSchemasDeleteByIdRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiSchemasGetRequest {\n tenantId: string;\n sort?: string;\n page?: PageQuery;\n fields?: FindingSchemaFieldsQuery;\n filter?: FilterQuery;\n}\n\nexport interface ApiSchemasGetByIdRequest {\n tenantId: string;\n id: string;\n fields?: FindingSchemaFieldsQuery;\n}\n\nexport interface ApiSchemasGetByIdFindingsRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiSchemasGetByIdRelationshipsFindingsRequest {\n tenantId: string;\n id: string;\n}\n\nexport interface ApiSchemasPatchByIdRequest {\n tenantId: string;\n id: string;\n existingFindingSchemaRequestBody?: ExistingFindingSchemaRequestBody;\n}\n\nexport interface ApiSchemasPostRequest {\n tenantId: string;\n newFindingSchemaRequestBody?: NewFindingSchemaRequestBody;\n}\n\n/**\n * no description\n */\nexport class SchemasApi extends runtime.BaseAPI {\n\n /**\n * Delete a specific schema, if exists\n */\n async apiSchemasDeleteByIdRaw(requestParameters: ApiSchemasDeleteByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiSchemasDeleteById.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiSchemasDeleteById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/schemas/{id}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'DELETE',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Delete a specific schema, if exists\n */\n async apiSchemasDeleteById(requestParameters: ApiSchemasDeleteByIdRequest): Promise {\n await this.apiSchemasDeleteByIdRaw(requestParameters);\n }\n\n /**\n * Get paged list of schemas matching optional criteria\n */\n async apiSchemasGetRaw(requestParameters: ApiSchemasGetRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiSchemasGet.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.sort !== undefined) {\n queryParameters['sort'] = requestParameters.sort;\n }\n\n if (requestParameters.page !== undefined) {\n queryParameters['page'] = requestParameters.page;\n }\n\n if (requestParameters.fields !== undefined) {\n queryParameters['fields'] = requestParameters.fields;\n }\n\n if (requestParameters.filter !== undefined) {\n queryParameters['filter'] = requestParameters.filter;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/schemas`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingSchemaArrayResponseFromJSON(jsonValue));\n }\n\n /**\n * Get paged list of schemas matching optional criteria\n */\n async apiSchemasGet(requestParameters: ApiSchemasGetRequest): Promise {\n const response = await this.apiSchemasGetRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get a specific schema, if exists\n */\n async apiSchemasGetByIdRaw(requestParameters: ApiSchemasGetByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiSchemasGetById.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiSchemasGetById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n if (requestParameters.fields !== undefined) {\n queryParameters['fields'] = requestParameters.fields;\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/schemas/{id}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingSchemaSingleResponseFromJSON(jsonValue));\n }\n\n /**\n * Get a specific schema, if exists\n */\n async apiSchemasGetById(requestParameters: ApiSchemasGetByIdRequest): Promise {\n const response = await this.apiSchemasGetByIdRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get findings related to a schema\n */\n async apiSchemasGetByIdFindingsRaw(requestParameters: ApiSchemasGetByIdFindingsRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiSchemasGetByIdFindings.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiSchemasGetByIdFindings.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/schemas/{id}/findings`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingArrayResponseFromJSON(jsonValue));\n }\n\n /**\n * Get findings related to a schema\n */\n async apiSchemasGetByIdFindings(requestParameters: ApiSchemasGetByIdFindingsRequest): Promise {\n const response = await this.apiSchemasGetByIdFindingsRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get resource identifiers for a given relationship of a schema\n */\n async apiSchemasGetByIdRelationshipsFindingsRaw(requestParameters: ApiSchemasGetByIdRelationshipsFindingsRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiSchemasGetByIdRelationshipsFindings.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiSchemasGetByIdRelationshipsFindings.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/schemas/{id}/relationships/findings`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => RelationshipResourceIdentifierArrayResponseFromJSON(jsonValue));\n }\n\n /**\n * Get resource identifiers for a given relationship of a schema\n */\n async apiSchemasGetByIdRelationshipsFindings(requestParameters: ApiSchemasGetByIdRelationshipsFindingsRequest): Promise {\n const response = await this.apiSchemasGetByIdRelationshipsFindingsRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Notes concerinig the payload: * Partial updates are supported. Ommited attributes will not be changed. * Some attributes are modified by the server: * Properties *definitions[].name*, if present, are transformed by the server into a more human-readable form by appending the sluggified *definitions[].label*, if present. Allready transformed properties are skipped to prevent unwanted changes (subsequent change in *definitions[].label* does not affect *definitions[].name*). * **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. \n * Update an existing schema, if exists\n */\n async apiSchemasPatchByIdRaw(requestParameters: ApiSchemasPatchByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiSchemasPatchById.');\n }\n\n if (requestParameters.id === null || requestParameters.id === undefined) {\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiSchemasPatchById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/vnd.api+json';\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/schemas/{id}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\n method: 'PATCH',\n headers: headerParameters,\n query: queryParameters,\n body: ExistingFindingSchemaRequestBodyToJSON(requestParameters.existingFindingSchemaRequestBody),\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingSchemaSingleResponseFromJSON(jsonValue));\n }\n\n /**\n * Notes concerinig the payload: * Partial updates are supported. Ommited attributes will not be changed. * Some attributes are modified by the server: * Properties *definitions[].name*, if present, are transformed by the server into a more human-readable form by appending the sluggified *definitions[].label*, if present. Allready transformed properties are skipped to prevent unwanted changes (subsequent change in *definitions[].label* does not affect *definitions[].name*). * **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. \n * Update an existing schema, if exists\n */\n async apiSchemasPatchById(requestParameters: ApiSchemasPatchByIdRequest): Promise {\n const response = await this.apiSchemasPatchByIdRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Notes concerinig the payload: * ID of the inserted entity is created dynamically by the server, **providing client-generated ID in the request will result in HTTP 403 error** * Some attributes are modified by the server: * Properties *definitions[].name*, if present, are transformed by the server into a more human-readable form by appending the sluggified *definitions[].label*, if present. \n * Insert new schema to the database\n */\n async apiSchemasPostRaw(requestParameters: ApiSchemasPostRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiSchemasPost.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/vnd.api+json';\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/{tenantId}/schemas`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: NewFindingSchemaRequestBodyToJSON(requestParameters.newFindingSchemaRequestBody),\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => FindingSchemaSingleResponseFromJSON(jsonValue));\n }\n\n /**\n * Notes concerinig the payload: * ID of the inserted entity is created dynamically by the server, **providing client-generated ID in the request will result in HTTP 403 error** * Some attributes are modified by the server: * Properties *definitions[].name*, if present, are transformed by the server into a more human-readable form by appending the sluggified *definitions[].label*, if present. \n * Insert new schema to the database\n */\n async apiSchemasPost(requestParameters: ApiSchemasPostRequest): Promise {\n const response = await this.apiSchemasPostRaw(requestParameters);\n return await response.value();\n }\n\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * UniCatDB API\n * UniCatDB application API documentation, with examples and live testing. This API is built in accordance with the **JSON API 1.0 standard**. For general information, see [the documentation](http://jsonapi.org/format/). - JSON API standard requires use of the JSON API media type (application/vnd.api+json) for exchanging data. Clients must send all JSON API data with the headers `Content-Type: application/vnd.api+json` (POST, PATCH) and `Accept: application/vnd.api+json` (GET, DELETE). - [Relationships](http://jsonapi.org/format/#fetching-relationships) and their [inclusions](http://jsonapi.org/format/#fetching-includes) via the `include` query parameter, as specified by the standard, **are not implemented**, since there are no relationships present in the data model. - The standard does not prescribe any filtering strategies. This API implements two strategies which can be combined: **Basic filtering** based on the used [JSON API library](https://json-api-dotnet.github.io/#/filtering) and **Custom filtering** which allow for any possible query to the MongoDB server and can be extended and customize in the future. For more information about filtering, see the description of the `filter` down bellow. - **Non-standard PATCH behavior:** Sucessfull PATCH reuest always result in HTTP 200 response with the updated resource object, even if the server does not perform any additional modifications. HTTP 204 is never used in PATCH responses. Attachment upload endpoint uses the **TUS protocol**. See [the documentation](https://tus.io/). When integrating, it is recommended to use one of the [official TUS client implementations](https://tus.io/implementations.html). - **Supported TUS versions**: - 1.0.0 - **Supported TUS extensions**: - Creation - Creation Defer Length - Creation With Upload - Checksum - Checksum Trailer - **Required metadata**: - `fileName` - name of the original file incl. file extension - `contentType`- the MIME type of the file \n *\n * The version of the OpenAPI document: v2\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport {\n ErrorResponse,\n ErrorResponseFromJSON,\n ErrorResponseToJSON,\n ExistingTenantRequestBody,\n ExistingTenantRequestBodyFromJSON,\n ExistingTenantRequestBodyToJSON,\n ExistingTenantUserRequestBody,\n ExistingTenantUserRequestBodyFromJSON,\n ExistingTenantUserRequestBodyToJSON,\n Invitation,\n InvitationFromJSON,\n InvitationToJSON,\n NewInvitationRequestBody,\n NewInvitationRequestBodyFromJSON,\n NewInvitationRequestBodyToJSON,\n NewTenantRequestBody,\n NewTenantRequestBodyFromJSON,\n NewTenantRequestBodyToJSON,\n TenantUser,\n TenantUserFromJSON,\n TenantUserToJSON,\n UserScopedTenant,\n UserScopedTenantFromJSON,\n UserScopedTenantToJSON,\n} from '../models';\n\nexport interface ApiTenantsGetByIdRequest {\n tenantId: string;\n}\n\nexport interface ApiTenantsGetByIdInvitationsByKeyRequest {\n tenantId: string;\n key: string;\n}\n\nexport interface ApiTenantsGetByIdInvitationsByKeyRedeemRequest {\n tenantId: string;\n key: string;\n}\n\nexport interface ApiTenantsGetByIdUsersRequest {\n tenantId: string;\n}\n\nexport interface ApiTenantsPostRequest {\n newTenantRequestBody?: NewTenantRequestBody;\n}\n\nexport interface ApiTenantsPostByIdInvitationsRequest {\n tenantId: string;\n newInvitationRequestBody?: NewInvitationRequestBody;\n}\n\nexport interface ApiTenantsPutByIdRequest {\n tenantId: string;\n existingTenantRequestBody?: ExistingTenantRequestBody;\n}\n\nexport interface ApiTenantsPutByIdUsersRequest {\n tenantId: string;\n userId: string;\n existingTenantUserRequestBody?: ExistingTenantUserRequestBody;\n}\n\n/**\n * no description\n */\nexport class TenantsApi extends runtime.BaseAPI {\n\n /**\n * List tenants available to the current user\n */\n async apiTenantsAvailableGetRaw(): Promise>> {\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/tenants/available`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(UserScopedTenantFromJSON));\n }\n\n /**\n * List tenants available to the current user\n */\n async apiTenantsAvailableGet(): Promise> {\n const response = await this.apiTenantsAvailableGetRaw();\n return await response.value();\n }\n\n /**\n * Get specific tenant available to the current user, if exists\n */\n async apiTenantsGetByIdRaw(requestParameters: ApiTenantsGetByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiTenantsGetById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/tenants/{tenantId}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => UserScopedTenantFromJSON(jsonValue));\n }\n\n /**\n * Get specific tenant available to the current user, if exists\n */\n async apiTenantsGetById(requestParameters: ApiTenantsGetByIdRequest): Promise {\n const response = await this.apiTenantsGetByIdRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Get invitation details (without redeeming)\n */\n async apiTenantsGetByIdInvitationsByKeyRaw(requestParameters: ApiTenantsGetByIdInvitationsByKeyRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiTenantsGetByIdInvitationsByKey.');\n }\n\n if (requestParameters.key === null || requestParameters.key === undefined) {\n throw new runtime.RequiredError('key','Required parameter requestParameters.key was null or undefined when calling apiTenantsGetByIdInvitationsByKey.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/tenants/{tenantId}/invitations/{key}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"key\"}}`, encodeURIComponent(String(requestParameters.key))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => InvitationFromJSON(jsonValue));\n }\n\n /**\n * Get invitation details (without redeeming)\n */\n async apiTenantsGetByIdInvitationsByKey(requestParameters: ApiTenantsGetByIdInvitationsByKeyRequest): Promise {\n const response = await this.apiTenantsGetByIdInvitationsByKeyRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Redeem invitation, associate current user to the tenant\n */\n async apiTenantsGetByIdInvitationsByKeyRedeemRaw(requestParameters: ApiTenantsGetByIdInvitationsByKeyRedeemRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiTenantsGetByIdInvitationsByKeyRedeem.');\n }\n\n if (requestParameters.key === null || requestParameters.key === undefined) {\n throw new runtime.RequiredError('key','Required parameter requestParameters.key was null or undefined when calling apiTenantsGetByIdInvitationsByKeyRedeem.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/tenants/{tenantId}/invitations/{key}/redeem`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"key\"}}`, encodeURIComponent(String(requestParameters.key))),\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Redeem invitation, associate current user to the tenant\n */\n async apiTenantsGetByIdInvitationsByKeyRedeem(requestParameters: ApiTenantsGetByIdInvitationsByKeyRedeemRequest): Promise {\n await this.apiTenantsGetByIdInvitationsByKeyRedeemRaw(requestParameters);\n }\n\n /**\n * List users associated with a specific tenant available to the current user\n */\n async apiTenantsGetByIdUsersRaw(requestParameters: ApiTenantsGetByIdUsersRequest): Promise>> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiTenantsGetByIdUsers.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/tenants/{tenantId}/users`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(TenantUserFromJSON));\n }\n\n /**\n * List users associated with a specific tenant available to the current user\n */\n async apiTenantsGetByIdUsers(requestParameters: ApiTenantsGetByIdUsersRequest): Promise> {\n const response = await this.apiTenantsGetByIdUsersRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * New tenant will be created with current user as owner. \n * Create new tenant\n */\n async apiTenantsPostRaw(requestParameters: ApiTenantsPostRequest): Promise> {\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/tenants`,\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: NewTenantRequestBodyToJSON(requestParameters.newTenantRequestBody),\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => UserScopedTenantFromJSON(jsonValue));\n }\n\n /**\n * New tenant will be created with current user as owner. \n * Create new tenant\n */\n async apiTenantsPost(requestParameters: ApiTenantsPostRequest): Promise {\n const response = await this.apiTenantsPostRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Required tenant role: OWNER \n * Create invitation for new potential user of the tenant\n */\n async apiTenantsPostByIdInvitationsRaw(requestParameters: ApiTenantsPostByIdInvitationsRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiTenantsPostByIdInvitations.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/tenants/{tenantId}/invitations`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: NewInvitationRequestBodyToJSON(requestParameters.newInvitationRequestBody),\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => InvitationFromJSON(jsonValue));\n }\n\n /**\n * Required tenant role: OWNER \n * Create invitation for new potential user of the tenant\n */\n async apiTenantsPostByIdInvitations(requestParameters: ApiTenantsPostByIdInvitationsRequest): Promise {\n const response = await this.apiTenantsPostByIdInvitationsRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Note: this endpint does not make any changes to the permissions or roles of associated users. \n * Update an existing tenant, if exists\n */\n async apiTenantsPutByIdRaw(requestParameters: ApiTenantsPutByIdRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiTenantsPutById.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/tenants/{tenantId}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))),\n method: 'PUT',\n headers: headerParameters,\n query: queryParameters,\n body: ExistingTenantRequestBodyToJSON(requestParameters.existingTenantRequestBody),\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => UserScopedTenantFromJSON(jsonValue));\n }\n\n /**\n * Note: this endpint does not make any changes to the permissions or roles of associated users. \n * Update an existing tenant, if exists\n */\n async apiTenantsPutById(requestParameters: ApiTenantsPutByIdRequest): Promise {\n const response = await this.apiTenantsPutByIdRaw(requestParameters);\n return await response.value();\n }\n\n /**\n * Required tenant role: OWNER \n * Update an existing tenant user, if exists\n */\n async apiTenantsPutByIdUsersRaw(requestParameters: ApiTenantsPutByIdUsersRequest): Promise> {\n if (requestParameters.tenantId === null || requestParameters.tenantId === undefined) {\n throw new runtime.RequiredError('tenantId','Required parameter requestParameters.tenantId was null or undefined when calling apiTenantsPutByIdUsers.');\n }\n\n if (requestParameters.userId === null || requestParameters.userId === undefined) {\n throw new runtime.RequiredError('userId','Required parameter requestParameters.userId was null or undefined when calling apiTenantsPutByIdUsers.');\n }\n\n const queryParameters: runtime.HTTPQuery = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = typeof token === 'function' ? token(\"bearerAuth\", []) : token;\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n const response = await this.request({\n path: `/tenants/{tenantId}/users/{userId}`.replace(`{${\"tenantId\"}}`, encodeURIComponent(String(requestParameters.tenantId))).replace(`{${\"userId\"}}`, encodeURIComponent(String(requestParameters.userId))),\n method: 'PUT',\n headers: headerParameters,\n query: queryParameters,\n body: ExistingTenantUserRequestBodyToJSON(requestParameters.existingTenantUserRequestBody),\n });\n\n return new runtime.JSONApiResponse(response, (jsonValue) => TenantUserFromJSON(jsonValue));\n }\n\n /**\n * Required tenant role: OWNER \n * Update an existing tenant user, if exists\n */\n async apiTenantsPutByIdUsers(requestParameters: ApiTenantsPutByIdUsersRequest): Promise {\n const response = await this.apiTenantsPutByIdUsersRaw(requestParameters);\n return await response.value();\n }\n\n}\n","import * as React from \"react\";\nimport {UncontrolledTooltip} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {useUID} from 'react-uid';\n\ntype Props = {\n title?: string,\n description?: string,\n children: any\n}\n\nexport const DataCardElement = (props: Props) => {\n\n const uid = useUID();\n return (\n
\n \n {props.title}\n \n {props.description && \n \n \n \n \n {props.description}\n \n }\n \n \n {props.children}\n
\n );\n};","import * as React from 'react';\nimport {DataCardElement} from './DataCardElement';\n\ntype Props = {\n title?: string;\n value?: string | string[] | number;\n description?: string;\n};\n\nexport const DataCardTextElement = (props: Props) => {\n const getFormattedValue = () => {\n if (!props.value) return '∅'\n if (typeof props.value === 'object') {\n return props.value.join(', ')\n }\n return props.value\n }\n return {getFormattedValue()}\n};\n","import {LatLngGps} from \"../services/GeneratedApiTsClient/models\";\n\nexport const getCenterOfCoordsArray = (coordsArray: LatLngGps[] | undefined): LatLngGps => {\n if (!coordsArray || coordsArray.length === 0 || !coordsArray[0]) {\n return {lat: 48.9786197, lng: 14.4482139} // lokace franty laly\n }\n \n let bounds = {lowLat: coordsArray[0].lat, highLat: coordsArray[0].lat, lowLng: coordsArray[0].lng, highLng: coordsArray[0].lng}\n\n coordsArray.forEach(point => {\n if (!point) {\n return\n }\n if (point.lat > bounds.highLat) bounds.highLat = point.lat;\n if (point.lat < bounds.lowLat) bounds.lowLat = point.lat;\n if (point.lng > bounds.highLng) bounds.highLng = point.lng;\n if (point.lng < bounds.lowLng) bounds.lowLng = point.lng;\n })\n\n const centerLat = bounds.lowLat + ((bounds.highLat - bounds.lowLat) / 2);\n const centerLng = bounds.lowLng + ((bounds.highLng - bounds.lowLng) / 2);\n\n return {lat: centerLat, lng: centerLng}\n}","/**\n * Generate map icon with custom color.\n * \n * @param baseIcon\n * @param newColor\n */\nexport const colorizeMarker = (baseIcon: google.maps.Symbol, newColor: string | null): google.maps.Symbol => {\n let tempIcon: google.maps.Symbol = Object.create(baseIcon);\n tempIcon.fillColor = newColor;\n return tempIcon;\n};\n\n\n/**\n * Generate map icon with custom opacity.\n * @param baseIcon\n * @param newOpacity Float from 0 to 1\n * @returns {*}\n */\nexport const fadeMarker = (baseIcon: google.maps.Symbol, newOpacity: number) => {\n let tempIcon: google.maps.Symbol = Object.create(baseIcon);\n tempIcon.fillOpacity = newOpacity;\n tempIcon.strokeOpacity = newOpacity;\n return tempIcon;\n};","\n// taken from http://map-icons.com/, MIT license\nexport const MapIconCollection: {[key: string]: google.maps.Symbol} = {\n pin: {\n path: \"M512.307 910.848c-159.744 0-289.198-127.058-289.198-283.73 0-156.713 289.198-670.638 289.198-670.638s289.219 513.925 289.219 670.638c0 156.672-129.536 283.73-289.219 283.73z\",\n scale: 0.04,\n rotation: 180,\n fillColor: '#f5655d',\n fillOpacity: 1,\n strokeColor: '#ffffff',\n strokeWeight: 1,\n anchor: {x: 500, y: -20} as google.maps.Point,\n },\n pinWithDot: {\n path: \"M512 960c-169.656 0-307.2-136.315-307.2-304.456 0-168.161 307.2-719.565 307.2-719.565s307.2 551.404 307.2 719.565c0 168.141-137.544 304.456-307.2 304.456zM510.996 564.49c-52.367 0-94.802 42.086-94.802 93.962 0 51.917 42.435 93.983 94.802 93.983 52.408 0 94.843-42.066 94.843-93.983 0-51.876-42.435-93.962-94.843-93.962z\",\n scale: 0.04,\n rotation: 180,\n fillColor: '#f5655d',\n fillOpacity: 1,\n strokeColor: '#ffffff',\n strokeWeight: 1,\n anchor: {x: 500, y: -20} as google.maps.Point,\n },\n circle: {\n path: \"M1003.52 448c0-271.459-220.061-491.52-491.52-491.52s-491.52 220.061-491.52 491.52c0 271.459 220.061 491.52 491.52 491.52s491.52-220.061 491.52-491.52z\",\n scale: 0.04,\n rotation: 180,\n fillColor: '#f5655d',\n fillOpacity: .5,\n strokeColor: '#c13b33',\n strokeWeight: 1,\n anchor: {x: 500, y: 500} as google.maps.Point,\n },\n polygonProxy: {\n path: \"M0-48c-9.8 0-17.7 7.8-17.7 17.4 0 15.5 17.7 30.6 17.7 30.6s17.7-15.4 17.7-30.6c0-9.6-7.9-17.4-17.7-17.4z\",\n fillColor: '#f5655d',\n fillOpacity: 0,\n strokeWeight: 0,\n anchor: {x: 0, y: 0} as google.maps.Point,\n }\n};\n\n\n","/**\n * Minimap for displaying and editing location data of a single item (finding)\n */\nimport * as React from 'react';\nimport {\n GoogleMap,\n InfoBox,\n Marker,\n Polygon,\n Polyline,\n StandaloneSearchBox,\n} from '@react-google-maps/api';\nimport simplify from 'simplify-js';\nimport {Button, ButtonGroup, Container} from 'reactstrap';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {getCenterOfCoordsArray} from \"../../utils/gpsUtils\";\nimport {useEffect, useState} from \"react\";\nimport {LatLngGps} from \"../../services/GeneratedApiTsClient\";\nimport {colorizeMarker, fadeMarker} from \"../../utils/mapIconUtils\";\nimport {MapIconCollection} from \"../../models/MapIconsCollection\";\n\nconst containerStyle = {\n height: '80vh',\n width: '100%'\n};\n\ntype Props = {\n point: LatLngGps | null,\n polygon: LatLngGps[],\n markerColor?: string,\n isEditable: boolean,\n toolbarProps: string,\n handlePointChange: (p: LatLngGps | null) => void,\n handlePolygonChange: (p: LatLngGps[]) => void,\n}\n\nconst ItemMinimap= (props: Props) => {\n\n const [point, setPoint] = useState(props.point);\n const [polygon, setPolygon] = useState(props.polygon);\n const [markerColor, setMarkerColor] = useState(props.markerColor);\n const [originalPoint, setOriginalPoint] = useState(props.point);\n const [originalPolygon, setOriginalPolygon] = useState(props.polygon);\n const [intermediatePolygon, setIntermediatePolygon] = useState(props.polygon);\n const [drawingMode, setDrawingMode] = useState(false);\n const [polylineCapturing, setPolylineCapturing] = useState(false);\n\n const [path, setPath] = useState([]);\n\n const [mapRef, setMapRef] = useState(null);\n const [polygonComponent, setPolygonComponent] = useState(null);\n\n const [googleMapSearchBox, setGoogleMapSearchBox] = useState(null);\n const [searchResultPoint, setSearchResultPoint] = useState(null);\n\n\n /**\n * Update on external marker color change\n * @param nextProps\n */\n\n useEffect(() => {\n if (props.markerColor !== markerColor) {\n setMarkerColor(props.markerColor)\n }\n }, [markerColor, props.markerColor])\n\n const handlePointChange = props.handlePointChange;\n const handlePolygonChange = props.handlePolygonChange;\n\n const onMarkerDragEnd = (event) => {\n handlePointChange(event.latLng.toJSON());\n setPoint(event.latLng.toJSON());\n }\n\n const placePoint = () => {\n if (mapRef !== null) {\n const centerJson = mapRef.getCenter()?.toJSON();\n if (centerJson){\n handlePointChange(centerJson);\n setPoint(centerJson);\n }\n }\n }\n\n const removePoint = () => {\n handlePointChange(null);\n setPoint(null);\n }\n\n const resetPoint = () => {\n handlePointChange(originalPoint ?? null);\n setPoint(originalPoint);\n }\n\n const renderMarker = () => {\n return (\n \n {point && (\n \n )}\n\n {props.isEditable && originalPoint && (\n \n )}\n \n );\n }\n\n\n /**\n * Handle mouse movement on the map to capture a freehand polyline drawing\n * @param e\n */\n const onMouseMoveOnMap = (e) => {\n if (!polylineCapturing) return;\n\n setPath(path => [...path, e.latLng]);\n }\n\n /**\n * Handle mouse clicks on the map to toggle freehand polyline capturing\n * @param e\n */\n const onMouseClickOnMap = (e) => {\n\n if (!drawingMode) return;\n if (mapRef) {\n if (polylineCapturing) {\n // deactivate hand-drawn polyline capturing and process the data\n\n let polylineForSimplification: { x, y }[] = []; // prepare temp object with a correct key format\n path.forEach(polylineElement => {\n polylineForSimplification.push({\n x: polylineElement.lat(),\n y: polylineElement.lng(),\n });\n });\n\n setPath([])\n\n // calculate tolerance to compensate for different scale (hardcoded value, based on map zoom)\n let zoom = mapRef?.getZoom();\n let tolerance = Math.pow(10, -((zoom === undefined) ? 1 : zoom / 4));\n\n // perform symplification\n let simplifiedPolyline = simplify(polylineForSimplification, tolerance, true);\n\n let newPolygon: google.maps.LatLngLiteral[] = []; // prepare new polygon\n\n simplifiedPolyline.forEach(polylineElement => {\n newPolygon.push({\n lat: polylineElement.x,\n lng: polylineElement.y,\n });\n });\n\n handlePolygonChange(newPolygon);\n\n setPolygon(newPolygon);\n setIntermediatePolygon(newPolygon);\n setPolylineCapturing(false);\n setDrawingMode(false);\n } else {\n // activate hand-drawn polyline capturing\n setPolylineCapturing(true);\n }\n } else {\n console.log(\"mapRef is null\");\n }\n }\n\n /**\n * Toggle polygon redrawing tool's state\n */\n const redrawPolygon = () => {\n if (drawingMode) {\n // deactivate drawing mode\n\n setPath(path => [])\n\n setPolylineCapturing(false);\n setDrawingMode(false);\n } else {\n // activate drawing mode\n setDrawingMode(true);\n setPolylineCapturing(false);\n }\n }\n\n\n const onEditPolygon = () => {\n if (polygonComponent) {\n const newPolygon: LatLngGps[] = [];\n\n polygonComponent.getPath().forEach(polygonElement => {\n newPolygon.push({\n lat: polygonElement.lat,\n lng: polygonElement.lng\n });\n });\n\n handlePolygonChange(newPolygon);\n setPolygon(newPolygon);\n } else {\n console.log(\"polygonComponent is null\");\n }\n }\n /**\n * Clear polygon data\n */\n const removePolygon = () => {\n handlePolygonChange([]);\n\n setPolygon([]);\n setIntermediatePolygon([]);\n }\n\n /**\n * Revert polygon back to the original state\n */\n\n const resetPolygon = () => {\n if (polygonComponent) {\n handlePolygonChange(originalPolygon);\n\n setPolygon(originalPolygon);\n setIntermediatePolygon(originalPolygon);\n\n polygonComponent?.setPath(originalPolygon);\n } else {\n console.log(\"polygonComponent is null\");\n }\n }\n\n const renderPolygon = () => {\n return (\n \n {intermediatePolygon.length > 0 && (\n \n )}\n\n {props.isEditable && (\n \n )}\n \n );\n }\n\n\n const getDefaultCenter = React.useCallback( () => {\n const compoundPoints = point ? [...polygon, point] : polygon;\n return getCenterOfCoordsArray(compoundPoints);\n }, [point, polygon])\n\n const onLoadPolygonComponent = (polygonComponent: google.maps.Polygon) => {\n setPolygonComponent(polygonComponent);\n }\n\n const onLoadMap = React.useCallback(function callback(mapRef) {\n // TODO: default zoom is not optimal, use bounding box to calculate appropriate value and center\n mapRef.setCenter(getDefaultCenter());\n mapRef.setZoom(originalPoint && originalPolygon.length < 1 ? 1 : 4);\n setMapRef(mapRef)\n }, [getDefaultCenter, originalPoint, originalPolygon.length])\n const onUnmountMap = React.useCallback(function callback(mapRef) {\n setMapRef(null)\n }, [])\n\n const onPlacesChange = () => {\n if (mapRef) {\n const places = googleMapSearchBox?.getPlaces();\n const bounds = new window.google.maps.LatLngBounds();\n\n places?.forEach(place => {\n if (place?.geometry?.viewport) {\n bounds.union(place.geometry.viewport)\n } else if (place?.geometry?.location) {\n bounds.extend(place.geometry.location)\n }\n });\n\n const nextCenter = bounds.getCenter();\n\n mapRef?.panTo(nextCenter);\n mapRef?.fitBounds(bounds);\n\n setSearchResultPoint(nextCenter);\n } else {\n console.log(\"mapRef is null\")\n }\n }\n\n const onSearchResultMarkerClick = () => {\n if (searchResultPoint){\n const newPoint: LatLngGps = {\n lat: searchResultPoint.lat(),\n lng: searchResultPoint.lng()\n };\n \n handlePointChange(newPoint);\n setPoint(newPoint);\n setSearchResultPoint(null);\n }\n }\n\n const onLoadSearchBox = (searchBoxRef: google.maps.places.SearchBox) => {\n setGoogleMapSearchBox(searchBoxRef);\n }\n\n return (\n
\n {props.isEditable && (\n \n
\n
\n \n\n \n \n \n \n \n
\n\n
\n \n\n \n \n Draw\n \n \n \n \n
\n
\n
\n )}\n \n {renderMarker()}\n {renderPolygon()}\n\n {props.isEditable && \n \n }\n\n {searchResultPoint && <>\n \n \n \n
\n Click the pin to set position here\n
\n
\n \n }\n \n \n \n );\n\n}\n\nItemMinimap.defaultProps = {\n point: null,\n polygon: [],\n markerColor: '#2959e0',\n isEditable: false,\n toolbarProps: '',\n handlePointChange: p => console.error('Implement handlePointChange!'),\n handlePolygonChange: p => console.error('Implement handlePolygonChange!'),\n};\nexport default React.memo(ItemMinimap);","import {push, replace} from 'connected-react-router'\nimport {AppState} from \"../reducers\";\nimport {ApiOnRejectedResult} from \"../../services/ApiService/ApiService\";\nimport {ErrorResponse, ErrorResponseItem} from \"../../services/GeneratedApiTsClient\";\n\nexport enum ErrorActions {\n SET_ERROR = 'SET_ERROR',\n RESET_STORE = 'RESET_STORE',\n RESET_STORE_AND_AUTH = 'RESET_STORE_AND_AUTH', \n}\n\nexport enum ErrorType { \n RECOVERABLE_ERROR,\n FATAL_ERROR,\n NOT_AVAILABLE_ERROR\n}\n\nexport const processApiResponse = (response: ApiOnRejectedResult, messagePrefix = \"\") => async (dispatch) => {\n\n // log error to console in development environment\n if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {\n console.error(response);\n }\n \n // handle fetch response\n if (\"status\" in response) {\n if (response.ok) return;\n \n var details = response.statusText;\n\n // use server-side messages, if present in the response\n var responseContent: ErrorResponse | any = await response.text().then(function(text) {\n return text ? JSON.parse(text) : {}\n });\n if (\"errors\" in responseContent){\n details = responseContent.errors.map((e: ErrorResponseItem) => e.title).join(\"; \")\n }\n\n if (response.status === 401) {\n // TODO: API response 401 handling\n // dispatch({type: AuthActions.LOGOUT});\n } else if (response.status === 404) {\n dispatch(push(\"/404\"));\n } else if (response.status === 403) {\n dispatch({\n type: ErrorActions.SET_ERROR,\n error: {\n type: ErrorType.NOT_AVAILABLE_ERROR,\n message: messagePrefix,\n details: details\n }\n });\n } else if (response.status === 409) {\n dispatch({\n type: ErrorActions.SET_ERROR,\n error: {\n type: ErrorType.RECOVERABLE_ERROR,\n message: messagePrefix,\n details: details\n }\n });\n } else if (response.status >= 400) { // other errors\n dispatch({\n type: ErrorActions.SET_ERROR,\n error: {\n type: ErrorType.FATAL_ERROR,\n message: messagePrefix,\n details: details\n }\n });\n }\n // handle other errors\n } else {\n dispatch({\n type: ErrorActions.SET_ERROR,\n error: {\n type: ErrorType.RECOVERABLE_ERROR,\n message: messagePrefix,\n details: response.message,\n }\n });\n }\n};\n\nexport const setError = (message = 'Unexpected error happened.', errorType: ErrorType = ErrorType.RECOVERABLE_ERROR, details: string|undefined = undefined) => (dispatch) => {\n dispatch({\n type: ErrorActions.SET_ERROR,\n error: {\n type: errorType,\n message: message,\n details: details,\n }\n });\n};\n\nexport const resolveErrors = (clearCache = false) => async (dispatch, getState: () => AppState) => {\n const { error } = getState();\n\n if (clearCache){\n localStorage.clear();\n }\n \n if (error.errors.find(error => error.type === ErrorType.FATAL_ERROR)) {\n // hard-reload on if a fatal error occured\n await dispatch(replace('/'));\n window.location.reload(); \n } else {\n // soft-reload on non-fatal errors\n dispatch(replace('/')); // redirect must precede resetting the store to prevent connected router from navigating back to the original path\n dispatch({\n type: (clearCache ? ErrorActions.RESET_STORE_AND_AUTH : ErrorActions.RESET_STORE),\n });\n }\n};","import * as React from \"react\";\nimport {Badge} from \"reactstrap\";\n\n\ntype Props = {\n tags: Array\n}\n\nexport const FindingTags = (props: Props) =>\n \n {\n props.tags.map(function (tag, i) {\n return {tag}\n })\n }\n ;","import {toast, ToastOptions} from \"react-toastify\";\nimport {ReactText} from \"react\";\nimport {TypeOptions} from \"react-toastify/dist/types\";\nimport {Invitation, TenantInviteeRole} from \"../../services/GeneratedApiTsClient\";\nimport {getConfiguredTenantsApi} from \"../selectors/ApiSelectors\";\nimport {AppState} from \"../reducers\";\nimport {ApiOnRejectedResult} from \"../../services/ApiService/ApiService\";\nimport {processApiResponse} from \"./ErrorActions\";\n\nexport enum GUIActionsType {\n OPEN_MAP_VIEW = 'OPEN_MAP_VIEW',\n CLOSE_MAP_VIEW = 'CLOSE_MAP_VIEW',\n OPEN_GRAPH_VIEW = 'OPEN_GRAPH_VIEW',\n CLOSE_GRAPH_VIEW = 'CLOSE_GRAPH_VIEW',\n SHOW_ATTACHMENT_GALLERY = 'SHOW_ATTACHMENT_GALLERY',\n HIDE_ATTACHMENT_GALLERY = 'HIDE_ATTACHMENT_GALLERY',\n SHOW_CODEGEN_MODAL = 'SHOW_CODEGEN_MODAL',\n HIDE_CODEGEN_MODAL = 'HIDE_CODEGEN_MODAL',\n REQUEST_INVITATION_MODAL = 'REQUEST_INVITATION_MODAL',\n SHOW_INVITATION_MODAL = 'SHOW_INVITATION_MODAL',\n HIDE_INVITATION_MODAL = 'HIDE_INVITATION_MODAL',\n}\n\nexport type GUIActions = {\n type: GUIActionsType,\n payload?: NotificationPayload\n codegenModalType?: \"LISTING\" | \"NEW_FINDING\",\n invitation?: Invitation\n}\n\nexport type NotificationPayload = {\n message: string,\n type: \"info\" | \"warning\" | \"error\" | \"success\",\n doNotAutoClose?: boolean,\n}\n\nexport const openMapView = () => (dispatch) => dispatch({type: GUIActionsType.OPEN_MAP_VIEW});\nexport const closeMapView = () => (dispatch) => dispatch({type: GUIActionsType.CLOSE_MAP_VIEW});\nexport const openGraphView = () => (dispatch) => dispatch({type: GUIActionsType.OPEN_GRAPH_VIEW});\nexport const closeGraphView = () => (dispatch) => dispatch({type: GUIActionsType.CLOSE_GRAPH_VIEW});\n\nexport const openAttachmentsCarousel = () => (dispatch) => {\n dispatch({type: GUIActionsType.SHOW_ATTACHMENT_GALLERY});\n}\nexport const closeAttachmentsCarousel = () => (dispatch) => dispatch({type: GUIActionsType.HIDE_ATTACHMENT_GALLERY});\n\nexport const openCodegenModal = (type: \"LISTING\" | \"NEW_FINDING\") => (dispatch) => dispatch({type: GUIActionsType.SHOW_CODEGEN_MODAL, codegenModalType: type});\nexport const closeCodegenModal = () => (dispatch) => dispatch({type: GUIActionsType.HIDE_CODEGEN_MODAL});\n\n/**\n * Show notification and return its handle (ID).\n * @param payload\n */\nexport const showNotification = (payload: NotificationPayload) : ReactText => {\n const options: ToastOptions = {\n autoClose: payload.doNotAutoClose ? false : 3000,\n closeButton: (!!payload.doNotAutoClose),\n hideProgressBar: true,\n type: payload.type\n }\n return toast(payload.message, options)\n};\n\nexport const updateNotification = (id: ReactText, payload: NotificationPayload) => {\n\n const options: ToastOptions = {\n autoClose: payload.doNotAutoClose ? false : 3000,\n closeButton: (!!payload.doNotAutoClose),\n hideProgressBar: true,\n type: payload.type as TypeOptions,\n toastId: id\n }\n \n if (!toast.isActive(id)){\n toast(payload.message, options)\n } else {\n toast.update(id, {render: payload.message, ...options});\n }\n}\n\n/**\n * Hide notification, does nothing if the notification with given ID does not exist\n * @param id\n */\nexport const hideNotification = (id: ReactText) => {\n toast.dismiss(id);\n}\n\nexport const openInvitationModal = (tenantId: string, inviteeRole: TenantInviteeRole) => async (dispatch, getState) => {\n let state: AppState = getState();\n if (state.gui.invitationModalLoading) {\n // Don't issue a duplicate request (we are already loading the requested data)\n return;\n }\n\n dispatch({type: GUIActionsType.REQUEST_INVITATION_MODAL});\n let tenantsApi = getConfiguredTenantsApi(state);\n\n const invitation = await tenantsApi.apiTenantsPostByIdInvitations({tenantId, newInvitationRequestBody: {inviteeRole}})\n .catch((error: ApiOnRejectedResult) => {\n processApiResponse(error, \"Error creating invitation\")(dispatch);\n });\n\n if (!invitation){\n return dispatch({type: GUIActionsType.HIDE_INVITATION_MODAL});\n }\n\n return dispatch({type: GUIActionsType.SHOW_INVITATION_MODAL, invitation});\n};\n\nexport const closeInvitationModal = () => (dispatch) => dispatch({type: GUIActionsType.HIDE_INVITATION_MODAL});\n","import {createSelector} from \"reselect\";\nimport {AppState} from \"../reducers\";\nimport {TENANT_ROUTE_PATH} from \"../../App\";\nimport {UserScopedTenant} from \"../../services/GeneratedApiTsClient\";\n\nexport const selectActiveTenantId = (state: AppState) => state.tenant.activeTenantId ?? '';\n\nexport const selectAvailableTenants = (state: AppState) => state.tenant.available;\n\nexport const selectAvailableTenantsLoading = (state: AppState) => state.tenant.availableLoading;\n\nexport const selectActiveTenantLoading = (state: AppState) => state.tenant.activeTenantLoading;\n\nexport const selectActiveTenantUsers = (state: AppState) => state.tenant.activeTenantUsers;\n\nexport const getAvailableTenantIds = createSelector([selectAvailableTenants], (available) =>\n available?.map(t => t.id) ?? []\n);\n\nexport const getActiveTenant = createSelector([selectActiveTenantId, selectAvailableTenants], (tenantId, available) =>\n available?.find(t => t.id === tenantId) ?? null\n);\n\nexport const getActiveTenantRoutePrefix = createSelector([selectActiveTenantId], (tenantId) =>\n TENANT_ROUTE_PATH.replace(':tenantId?', tenantId)\n);\n\nexport const selectAvailableTenantById = (state: AppState, props: {tenantId: string}): UserScopedTenant | null => state.tenant.available?.find(t => t.id === props.tenantId) ?? null;\n\n","import {createSelector} from \"reselect\";\nimport {AppState} from \"../reducers\";\nimport {\n AttachmentsApi,\n ChartsApi,\n Configuration, ExportApi,\n FindingsApi,\n SchemasApi, TenantsApi,\n} from \"../../services/GeneratedApiTsClient\";\nimport {TusOptions} from \"@uppy/tus\";\nimport {selectActiveTenantId} from \"./TenantSelectors\";\n\nexport const selectApiAccessToken = (state: AppState) => state.oidc.user?.access_token;\n\nexport const getApiConfiguration = createSelector([selectApiAccessToken], (token) =>\n new Configuration({\n basePath: process.env.REACT_APP_API_BASE_PATH,\n accessToken: token,\n })\n);\n\nexport const getUppyTusConfiguration = createSelector([selectApiAccessToken, selectActiveTenantId], (token, tenantId): TusOptions => {\n return {\n endpoint: `${process.env.REACT_APP_API_BASE_PATH}/${tenantId}`,\n headers: {\n authorization: `Bearer ${token}`,\n },\n chunkSize: 512*1000, // 0.5MiB,\n retryDelays: [0]\n };\n }\n);\n\nexport const getConfiguredFindingsApi = createSelector(\n [getApiConfiguration],\n (config) => new FindingsApi(config)\n);\n\nexport const getConfiguredSchemasApi = createSelector(\n [getApiConfiguration],\n (config) => new SchemasApi(config)\n);\n\nexport const getConfiguredChartsApi = createSelector(\n [getApiConfiguration],\n (config) => new ChartsApi(config)\n);\n\nexport const getConfiguredAttachmentsApi = createSelector(\n [getApiConfiguration],\n (config) => new AttachmentsApi(config)\n);\n\nexport const getConfiguredExportApi = createSelector(\n [getApiConfiguration],\n (config) => new ExportApi(config)\n);\n\nexport const getConfiguredTenantsApi = createSelector(\n [getApiConfiguration],\n (config) => new TenantsApi(config)\n);","// @flow\n\nexport type FilterOperation = {\n /**\n * Symbolic name\n */\n name: string,\n\n /**\n * Api operation prefix\n */\n prefix: string,\n\n /**\n * Human-readable description, as in a sentence\n */\n humanReadable: string,\n}\n\nexport enum FILTER_OP {\n eq = 'eq',\n eqi = 'eqi',\n ne = \"ne\",\n lt = \"lt\",\n le = \"le\",\n gt = \"gt\",\n ge = \"ge\",\n contains = \"contains\",\n // containsno: \"containsno\", // TODO: Implement inverse of contains\n isIn = \"isIn\",\n notIn = \"notIn\",\n}\n\nexport const SupportedFilterOperations = \n{\n contains: {name: \"CONTAINS\", prefix: \"like:\", humanReadable: \"contains\"},\n eq: {name: \"==\", prefix: \"eq:\", humanReadable: \"=\"},\n eqi: {name: \"==i\", prefix: \"eqi:\", humanReadable: \"= (case insensitive)\"},\n ne: {name: \"!=\", prefix: \"ne:\", humanReadable: \"doesn't equal to\"},\n lt: {name: \"<\", prefix: \"lt:\", humanReadable: \"is less than\"},\n le: {name: \"<=\", prefix: \"le:\", humanReadable: \"is less or equal\"},\n gt: {name: \">\", prefix: \"gt:\", humanReadable: \"is greater than\"},\n ge: {name: \">=\", prefix: \"ge:\", humanReadable: \"is greater or equal\"},\n // containsno: {name: \"DOESN'T CONTAIN\", prefix: \"nlike:\", humanReadable: \"doesn't contain\"},\n isIn: {name: \"IS IN\", prefix: \"in:\", humanReadable: \"is in list\"},\n notIn: {name: \"NOT IN\", prefix: \"nin:\", humanReadable: \"is not in list\"},\n};\n\n\nexport const SupportedFilterOperationsFor = {\n text: {\n contains: {name: \"CONTAINS\", prefix: \"like:\", humanReadable: \"contains\"},\n eq: {name: \"==\", prefix: \"eq:\", humanReadable: \"equals to\"},\n eqi: {name: \"==i\", prefix: \"eqi:\", humanReadable: \"equals to (case insensitive)\"},\n ne: {name: \"!=\", prefix: \"ne:\", humanReadable: \"doesn't equal to\"},\n // containsno: {name: \"DOESN'T CONTAIN\", prefix: \"nlike:\", humanReadable: \"doesn't contain\"},\n },\n date: {\n eq: {name: \"==\", prefix: \"eq:\", humanReadable: \"equals to\"},\n ne: {name: \"!=\", prefix: \"ne:\", humanReadable: \"doesn't equal to\"},\n lt: {name: \"<\", prefix: \"lt:\", humanReadable: \"is less than\"},\n le: {name: \"<=\", prefix: \"le:\", humanReadable: \"is less or equal\"},\n gt: {name: \">\", prefix: \"gt:\", humanReadable: \"is greater than\"},\n ge: {name: \">=\", prefix: \"ge:\", humanReadable: \"is greater or equal\"},\n },\n number: {\n eq: {name: \"==\", prefix: \"eq:\", humanReadable: \"equals to\"},\n ne: {name: \"!=\", prefix: \"ne:\", humanReadable: \"doesn't equal to\"},\n lt: {name: \"<\", prefix: \"lt:\", humanReadable: \"is less than\"},\n le: {name: \"<=\", prefix: \"le:\", humanReadable: \"is less or equal\"},\n gt: {name: \">\", prefix: \"gt:\", humanReadable: \"is greater than\"},\n ge: {name: \">=\", prefix: \"ge:\", humanReadable: \"is greater or equal\"},\n },\n textArray: {\n // eq: {name: \"==\", prefix: \"eq:\", humanReadable: \"equals to\"}, // TODO: add autocomplete to API for this function to work\n contains: {name: \"CONTAINS\", prefix: \"like:\", humanReadable: \"contains\"},\n // containsno: {name: \"DOESN'T CONTAIN\", prefix: \"nlike:\", humanReadable: \"doesn't contain\"},\n },\n};","\nexport type AttributeType = \"text\" | \"date\" | \"number\" | \"textArray\" // todo: add type string[] autocomplete\n\nexport type FilterableAttribute = {\n name: string,\n value: string,\n type: AttributeType\n};\n\nexport type FilterableAttributesGroup = {\n name: string,\n attributes: Array\n};\n\nexport const StaticFilterableAttributesGroup: Array = [{\n name: \"Common attributes\",\n attributes: [\n {name: \"Document Name\", value: \"documentName\", type: \"text\"},\n {name: \"Dataset\", value: \"documentSet\", type: \"text\"},\n {name: \"Amount\", value: \"amount\", type: \"number\"},\n {name: \"Date\", value: \"date\", type: \"date\"},\n {name: \"Location\", value: \"locationDescription\", type: \"text\"},\n {name: \"Note\", value: \"note\", type: \"text\"},\n {name: \"Tags\", value: \"tags\", type: \"textArray\"},\n ]},{\n name: \"Taxonomy\",\n attributes: [\n {name: \"Scientific name\", value: \"taxonomyHumanReadable\", type: \"text\"},\n {name: \"Authorship\", value: \"taxonomyName.authorship\", type: \"text\"},\n ]},{\n name: \"Taxonomy (individual levels)\",\n attributes: [\n {name: \"Taxonomy [all levels]\", value: \"taxonomyHierarchyId\", type: \"text\"},\n {name: \"Kingdom\", value: \"taxonomyName.kingdom\", type: \"text\"},\n {name: \"Phylum\", value: \"taxonomyName.phylum\", type: \"text\"},\n {name: \"Class\", value: \"taxonomyName.class\", type: \"text\"},\n {name: \"Order\", value: \"taxonomyName.order\", type: \"text\"},\n {name: \"Family\", value: \"taxonomyName.family\", type: \"text\"},\n {name: \"Genus\", value: \"taxonomyName.genus\", type: \"text\"},\n {name: \"Species\", value: \"taxonomyName.species\", type: \"text\"},\n ]}\n];\n\n\n/**\n * Types of dynamic data attributes which can be filtered by\n * (excluding elements that doesn't hold a value e.g. header or paragraph).\n *\n * @type {string[]}\n */\nexport const DynamicFilterableAttributeTypes = [\"checkbox-group\",\"date\",\"number\",\"radio-group\",\"select\",\"text\",\"textarea\"];\n","\n\nexport const WellKnownAttributes = {\n schemaId: \"schema.id\",\n dynamicData: \"dynamicData\",\n documentName: \"documentName\",\n documentSet: \"documentSet\",\n amount: \"amount\",\n date: \"date\",\n locationGpsPoint: \"locationGpsPoint\",\n locationGpsArea: \"locationGpsArea\",\n locationDescription: \"locationDescription\",\n note: \"note\",\n tags: \"tags\",\n person: \"person\",\n taxonomyHumanReadable: \"taxonomyHumanReadable\",\n attachmentNote: \"attachmentNote\",\n taxonomyName: {\n kingdom: \"taxonomyName.kingdom\",\n phylum: \"taxonomyName.phylum\",\n _class: \"taxonomyName.class\",\n order: \"taxonomyName.order\",\n family: \"taxonomyName.family\",\n genus: \"taxonomyName.genus\",\n species: \"taxonomyName.species\",\n authorship: \"taxonomyName.authorship\",\n }\n};","// export type SortDirection =SortDirection 'asc' | 'desc'\n\nexport enum SortDirection {\n SORT_ASC = 'asc',\n SORT_DESC = 'desc'\n}\n\nexport class Sort {\n attribute: string;\n direction: SortDirection;\n \n constructor(attribute: string, direction: SortDirection = SortDirection.SORT_ASC){\n this.attribute = attribute;\n this.direction = direction;\n }\n \n}","\n\nexport type LatLngBounds = {\n east: number;\n north: number;\n south: number;\n west: number;\n}\n\n/**\n * Serialize bounds to API format.\n * @param bounds\n * @param roundToBiggerBounds Optional up-rounding\n * @param separator\n */\nexport function serializeBounds(bounds: LatLngBounds, roundToBiggerBounds:boolean = false, separator: string = \"|\"): string {\n //\"lat_lo|lng_lo|lat_hi|lng_hi\"\n \n if (roundToBiggerBounds){\n return [\n Math.floor(bounds.south),\n Math.floor(bounds.west),\n Math.ceil(bounds.north),\n Math.ceil(bounds.east)\n ].join(separator);\n } else {\n return [bounds.south, bounds.west, bounds.north, bounds.east].join(separator);\n }\n \n}\n","import {\n FilterQuery,\n FindingsApi,\n FindingSchemaArrayResponse,\n FindingSchemaDefinitionGroup,\n FindingSchemaElement,\n FindingSchemaFieldsQuery,\n FindingSchemaResourceObject,\n PageQuery, RelationshipResourceIdentifierArrayResponse,\n SchemasApi,\n \n} from \"../GeneratedApiTsClient\";\nimport {\n AttributeType,\n DynamicFilterableAttributeTypes,\n FilterableAttribute,\n FilterableAttributesGroup\n} from \"../../models/FilterableAttributesModel\";\nimport {WellKnownAttributes} from \"../../models/FindingWellKnownAttributes\";\nimport {Filter} from \"../../models/FilterModel\";\nimport {FILTER_OP, SupportedFilterOperations} from \"../../models/FilterOperationModel\";\nimport {Sort, SortDirection} from \"../../models/SortModel\";\nimport {LatLngBounds, serializeBounds} from \"../../store/models/LatLngBounds\";\n\n\nconst NESTED_OBJECT_SEPARATOR = \".\";\nconst GEOPAGING_FILTER_NAME = \"_latlngbounds\";\nconst GEOPAGING_FILTER_SEPARATOR = \"|\";\n\n\nexport type ApiOnRejectedResult = Response | Error\n\n/**\n * @export\n */ \nexport default class ApiService {\n \n /**\n * Map database filed type to frontend filter attribute type\n *\n * @returns {*}\n * @constructor\n * @param attribute\n */\n static MapToAttributeType(attribute: FindingSchemaElement): AttributeType {\n if (attribute.type === \"number\") {\n return \"number\";\n } else if (attribute.type === \"date\") {\n return \"date\";\n } else if (attribute.type === \"checkbox-group\" || (attribute.type === \"select\" && attribute.multiple)) {\n return \"textArray\";\n } else {\n return \"text\";\n }\n }\n\n static async getDynamicFilterableAttributes(tenantId: string, schemasApi: SchemasApi):Promise> {\n \n let sort:string = \"name\";\n \n let fields: FindingSchemaFieldsQuery = {\n schemas: \"name,definitionGroups\"\n };\n \n let page: PageQuery = {\n number: 1,\n size: -1\n };\n \n \n let response = await schemasApi.apiSchemasGet({tenantId, sort, page, fields});\n \n let result:Array = [];\n \n response.data!.forEach((schema: FindingSchemaResourceObject) => {\n \n schema.attributes!.definitionGroups!.forEach((definitonGroup: FindingSchemaDefinitionGroup) => {\n \n let groupAttributes: Array = [];\n\n definitonGroup.definitions!.forEach((attribute: FindingSchemaElement) => {\n\n // include only meaningful attributes\n if (DynamicFilterableAttributeTypes.includes(attribute.type!)){\n groupAttributes.push({\n name: attribute.label!,\n value: WellKnownAttributes.dynamicData+NESTED_OBJECT_SEPARATOR+attribute.name,\n type: this.MapToAttributeType(attribute),\n });\n }\n });\n \n result.push({\n name: schema.attributes!.name+(schema.attributes!.definitionGroups!.length > 1 ? \" - \"+definitonGroup.name : \"\"),\n attributes: groupAttributes\n });\n });\n });\n \n return result;\n \n }\n\n /**\n * Build API-ready FilterQuery object from an array of internal filter definition\n * @param filters\n * @returns {FilterQuery}\n */\n static buildFilterQuery(filters: Array): FilterQuery {\n let filterQuery:FilterQuery = {};\n\n filters.forEach((filter: Filter | undefined) => {\n if (filter){\n filterQuery[filter.attribute] = SupportedFilterOperations[filter.operation].prefix + filter.value\n }\n });\n \n return filterQuery;\n }\n\n /**\n * Build API-ready sort query string from an array of internal sort definitions\n * \n * @param sorting\n * @returns {string}\n */\n static buildSortQuery(sorting: Array): string | undefined {\n if (sorting.length === 0){\n return undefined;\n } \n \n return sorting.map((sort) => {\n return (sort.direction === SortDirection.SORT_DESC ? \"-\" : \"\")+sort.attribute;\n }).join(\",\");\n }\n\n /**\n * Build API-ready geopaging filter from map bounds.\n * @param bounds\n */\n static buildGeoPagingFilter(bounds: LatLngBounds): Filter | undefined {\n return bounds ? {\n attribute: GEOPAGING_FILTER_NAME,\n operation: FILTER_OP.eq,\n type: \"text\", // TODO: consider geo type\n value: serializeBounds(bounds, true, GEOPAGING_FILTER_SEPARATOR),\n } : undefined;\n }\n \n \n \n static async getSchemaListWithBasicInfo(tenantId: string, schemasApi: SchemasApi):Promise{\n\n let fields: FindingSchemaFieldsQuery = {\n schemas: \"name,color,mapIcon,mapPolygonIcon\"\n };\n\n let page: PageQuery = {\n number: 1,\n size: -1\n };\n \n return schemasApi.apiSchemasGet({tenantId, page, fields});\n }\n\n static async getFindingsCountMatchingFilter(tenantId: string, findingsApi: FindingsApi, filters: Array = []):Promise{\n\n let fields: FindingSchemaFieldsQuery = {\n schemas: \"\"\n };\n\n let page: PageQuery = {\n number: 1,\n size: 1\n };\n\n let response;\n \n try {\n const filter = ApiService.buildFilterQuery(filters);\n response = await findingsApi.apiFindingsGet({tenantId, page, fields: fields,filter});\n } catch (err){\n throw err;\n }\n return response.meta.totalRecords;\n }\n\n static async hasSchemaDependencies(tenantId: string, schemasApi: SchemasApi, schemaId: string): Promise{\n\n // temp fix of API - relationship resources included manually\n\n let schemaRelationshipsFindings: RelationshipResourceIdentifierArrayResponse;\n try {\n schemaRelationshipsFindings = await schemasApi.apiSchemasGetByIdRelationshipsFindings({tenantId, id: schemaId});\n } catch (err){\n throw err;\n }\n return (schemaRelationshipsFindings.data.length > 0);\n }\n \n}\n\n\n","import ApiService, {ApiOnRejectedResult} from '../../services/ApiService/ApiService';\nimport {AppState} from '../reducers';\nimport {processApiResponse} from './ErrorActions';\nimport {hideNotification, showNotification, updateNotification} from './GUIActions';\nimport {Filter} from \"../../models/FilterModel\";\nimport {FILTER_OP} from \"../../models/FilterOperationModel\";\nimport Papa from 'papaparse';\nimport copy from 'copy-to-clipboard';\nimport {getConfiguredExportApi} from \"../selectors/ApiSelectors\";\nimport {selectActiveTenantId} from \"../selectors/TenantSelectors\";\n\nexport enum ExportActions {\n REQUEST_EXPORT = \"REQUEST_EXPORT\",\n RECEIVE_EXPORT = \"RECEIVE_EXPORT\",\n CANCEL_EXPORT = \"CANCEL_FINDING_EXPORT\",\n}\n\nexport enum DownloadTarget {\n CsvSemicolon = \"CsvSemicolon\",\n Clipboard = \"Clipboard\"\n}\n\nfunction triggerCsvDownload(content: string) {\n // prepend UTF-8 BOM to make Excel recognize the encoding, see: https://stackoverflow.com/a/11399444\n var fileContent = \"\\ufeff\" + content;\n\n // source: https://stackoverflow.com/q/61597868\n let blobx = new Blob([fileContent], {type: 'text/csv'}); // ! Blob\n let elemx = window.document.createElement('a');\n elemx.href = window.URL.createObjectURL(blobx); // ! createObjectURL\n elemx.download = \"export-\" + (new Date().toISOString()) + \".csv\";\n elemx.style.display = 'none';\n document.body.appendChild(elemx);\n elemx.click();\n document.body.removeChild(elemx);\n}\n\n/**\n * Pushes CSV data to clipboard.\n * \n * @param content CSV string\n * @return TRUE on success FALSE on failure\n */\nconst pushCsvToClipboard = (content: string):boolean => {\n\n let config = {\n delimiter: ';',\n skipEmptyLines: true\n };\n let parsed = Papa.parse(content, config);\n\n // build HTML-table string\n let clipboardHtmlContent = `\n \n \n ${parsed.data.map(row => `${row.map(col => ``).join('')}`).join('')} \n \n
${col}
\n `;\n \n // build plaintext tab-delimited string\n let clipboardTextContent = parsed.data.map(row => row.join('\\t')).join('\\r\\n');\n\n let success = copy(clipboardHtmlContent, {\n format: \"text/html\",\n debug: true,\n onCopy: clipboardData => {\n // append plaintext fallback\n (clipboardData as DataTransfer).setData(\"text/plain\", clipboardTextContent);\n }\n });\n \n return success;\n}\n\n\nexport const downloadLoadedFinding = (target: DownloadTarget) => async (dispatch, getState) => {\n let state: AppState = getState();\n // ignore if no finding is loaded\n if (!state.finding.loaded || !state.finding.loadedFindingId || state.export.inProgress) {\n return;\n }\n\n dispatch({type: ExportActions.REQUEST_EXPORT});\n\n const exportApi = getConfiguredExportApi(state);\n const tenantId = selectActiveTenantId(state);\n\n let notificationHandle = showNotification({message: `Exporting data ...`, type: \"info\", doNotAutoClose: true});\n\n await exportApi.apiExportFindingsGetById({tenantId, id: state.finding.loadedFindingId}).then(\n async response => {\n \n if (target === DownloadTarget.CsvSemicolon){\n hideNotification(notificationHandle);\n triggerCsvDownload(response);\n } else if(target === DownloadTarget.Clipboard) {\n\n if (response.length > 100000){\n updateNotification(notificationHandle, {\n message: \"Too large to copy to clipboard, please download CSV instead.\",\n type: \"error\",\n doNotAutoClose: false\n });\n } else {\n if (pushCsvToClipboard(response)) {\n updateNotification(notificationHandle, {\n message: \"Copied to clipboard\",\n type: \"success\",\n doNotAutoClose: false\n });\n } else {\n updateNotification(notificationHandle, {\n message: \"Copying to clipboard failed, probably not supported in your browser\",\n type: \"error\",\n doNotAutoClose: false\n });\n }\n }\n }\n \n dispatch({type: ExportActions.RECEIVE_EXPORT});\n\n }, (error: ApiOnRejectedResult) => {\n dispatch({type: ExportActions.CANCEL_EXPORT});\n processApiResponse(error, \"Error occured while requesting export.\")\n console.error(error);\n });\n}\n\nexport const downloadListing = (target: DownloadTarget) => async (dispatch, getState) => {\n let state: AppState = getState();\n // debounce\n if (state.export.inProgress) return;\n\n dispatch({type: ExportActions.REQUEST_EXPORT});\n\n let filters: Filter[] = state.filter.filters;\n\n let selected = state.listing.selectedFindingIds;\n if (selected.length > 0) {\n filters = [{attribute: \"id\", operation: FILTER_OP.isIn, type: \"text\", value: selected.join(\",\")}]\n }\n\n let filterQuery = ApiService.buildFilterQuery(filters);\n\n const exportApi = getConfiguredExportApi(state);\n const tenantId = selectActiveTenantId(state);\n\n let notificationHandle = showNotification({message: `Exporting data ...`, type: \"info\", doNotAutoClose: true});\n\n await exportApi.apiExportFindingsGet({tenantId, filter: filterQuery}).then(\n async response => {\n\n if (target === DownloadTarget.CsvSemicolon){\n hideNotification(notificationHandle);\n triggerCsvDownload(response);\n } else if(target === DownloadTarget.Clipboard) {\n \n if (response.length > 100000){\n updateNotification(notificationHandle, {\n message: \"Too large to copy to clipboard, please download CSV instead.\",\n type: \"error\",\n doNotAutoClose: false\n });\n } else {\n if (pushCsvToClipboard(response)){\n updateNotification(notificationHandle, {\n message: \"Copied to clipboard\",\n type: \"success\",\n doNotAutoClose: false\n });\n } else {\n updateNotification(notificationHandle, {\n message: \"Copying to clipboard failed, probably not supported in your browser\",\n type: \"error\",\n doNotAutoClose: false\n });\n }\n }\n }\n\n dispatch({type: ExportActions.RECEIVE_EXPORT});\n\n }, (error: ApiOnRejectedResult) => {\n dispatch({type: ExportActions.CANCEL_EXPORT});\n processApiResponse(error, \"Error occured while requesting export.\")\n console.error(error);\n });\n}\n\n\nexport default {\n downloadLoadedFinding,\n downloadListing,\n};\n","import {PageQuery} from \"../../services/GeneratedApiTsClient\";\nimport ApiService, {ApiOnRejectedResult} from \"../../services/ApiService/ApiService\";\nimport {Sort} from \"../../models/SortModel\";\nimport {processApiResponse} from \"./ErrorActions\";\nimport {getConfiguredFindingsApi} from \"../selectors/ApiSelectors\";\nimport {selectActiveTenantId} from \"../selectors/TenantSelectors\";\n\nexport const REQUEST_LISTING: string = 'REQUEST_LISTING';\nexport const RECEIVE_LISTING: string = 'RECEIVE_LISTING';\n\nexport const CANCEL_REQUEST: string = 'CANCEL_REQUEST';\n\nexport const CLEAR_CACHE: string = 'CLEAR_CACHE';\n\nexport const GO_TO_PAGE: string = 'GO_TO_PAGE';\n\nexport const SET_SORTING: string = 'SET_SORTING';\nexport const SET_PAGE_SIZE: string = 'SET_PAGE_SIZE';\n\nexport const SET_SELECTED_FINDING_IDS = 'SET_SELECTED_FINDING_IDS';\n\n\nexport const requestListing = () => async (dispatch, getState) => {\n let state = getState();\n if (state.listing.loadingInProgress) {\n // Don't issue a duplicate request (we are already loading the requested data)\n return;\n }\n\n dispatch({type: REQUEST_LISTING});\n let findingsApi = getConfiguredFindingsApi(state);\n const tenantId = selectActiveTenantId(state);\n\n let pageQuery:PageQuery = {\n \"number\": state.listing.currentPage,\n \"size\": state.listing.pageSize,\n };\n\n let filterQuery = ApiService.buildFilterQuery(state.filter.filters);\n let sortQuery = ApiService.buildSortQuery(state.listing.sorting);\n if(!tenantId) return;\n let loadedFindings = await findingsApi.apiFindingsGet({tenantId, sort: sortQuery, page: pageQuery, filter: filterQuery})\n .catch((error: ApiOnRejectedResult) => {\n processApiResponse(error, \"Error loading findings\")(dispatch);\n });\n \n if (!loadedFindings) {\n dispatch({type: CANCEL_REQUEST});\n } else {\n dispatch({\n type: RECEIVE_LISTING,\n loadedFindings: loadedFindings.data,\n totalRecords: loadedFindings.meta!.totalRecords,\n });\n }\n};\n\nexport const goToPage = (page: any) => (dispatch, getState) => {\n console.log('page');\n dispatch({\n type: GO_TO_PAGE,\n page: page.selected + 1,\n });\n dispatch(requestListing());\n \n};\n\nexport const setPageSize = (pageSize: number) => (dispatch, getState) => {\n\n dispatch({\n type: SET_PAGE_SIZE,\n pageSize: pageSize,\n });\n dispatch(requestListing());\n\n};\n\nexport const setSorting = (sorting: Array) => (dispatch, getState) => {\n\n dispatch({\n type: SET_SORTING,\n sorting: sorting,\n });\n dispatch(requestListing());\n\n};\n\nexport const reloadListing = () => (dispatch, getState) => {\n dispatch({type: CLEAR_CACHE});\n dispatch(requestListing());\n};\n\nexport const setSelectedFindingIds = (selectedFindings: string[]) => (dispatch, getState) => {\n dispatch({type: SET_SELECTED_FINDING_IDS, payload: selectedFindings})\n};\n\n\n\nexport default {\n requestListing,\n goToPage,\n setPageSize,\n setSorting,\n reloadListing\n}","import {\n ExistingFindingRequestBody,\n Finding,\n FindingSchema,\n FindingSchemaResourceObject,\n FindingSingleResponse,\n NewFindingRequestBody,\n} from '../../services/GeneratedApiTsClient';\nimport {ApiOnRejectedResult} from '../../services/ApiService/ApiService';\nimport {push} from 'connected-react-router';\nimport {AppState} from '../reducers';\nimport {processApiResponse, setError} from './ErrorActions';\nimport {showNotification, updateNotification} from './GUIActions';\nimport {requestListing} from './ListingActions';\nimport {UploadedAttachment} from \"../reducers/FindingReducer\";\nimport {\n getConfiguredAttachmentsApi,\n getConfiguredFindingsApi,\n getConfiguredSchemasApi\n} from \"../selectors/ApiSelectors\";\nimport {getActiveTenantRoutePrefix, selectActiveTenantId} from \"../selectors/TenantSelectors\";\n\nexport const REQUEST_FINDING: string = 'REQUEST_FINDING';\nexport const RECEIVE_FINDING: string = 'RECEIVE_FINDING';\nexport const RECEIVE_FINDING_CLONE: string = 'RECEIVE_FINDING_CLONE';\n\nexport const REQUEST_EMPTY_WITH_SCHEMA: string = 'REQUEST_EMPTY_WITH_SCHEMA';\nexport const RECEIVE_EMPTY_WITH_SCHEMA: string = 'RECEIVE_EMPTY_WITH_SCHEMA';\n\nexport const REPLACE_FINDING_PROPERTY: string = 'REPLACE_FINDING_PROPERTY';\nexport const DELETE_UPLOADED_ATTACHMENT: string = 'DELETE_UPLOADED_ATTACHMENT';\nexport const UPDATE_ATTACHMENTS: string = 'UPDATE_ATTACHMENTS';\nexport const SET_ACTIVE_ATTACHMENT: string = 'SET_ACTIVE_ATTACHMENT';\n\n\nexport const REQUEST_FINDING_PERSIST: string = 'REQUEST_FINDING_PERSIST';\nexport const SUCCESS_FINDING_PERSIST: string = 'SUCCESS_FINDING_PERSIST';\n\nexport const REQUEST_FINDING_DELETE: string = 'REQUEST_FINDING_DELETE';\nexport const FINDING_DELETE_SUCCESS: string = 'FINDING_DELETE_SUCCESS';\n\nexport const CANCEL_REQUEST: string = 'CANCEL_REQUEST';\n\nexport const duplicateFinding = (id: string) => async (dispatch, getState: () => AppState) => {\n await requestFinding(id, true)(dispatch, getState);\n await persistFinding(true, () => showNotification({message: 'Successfully duplicated', type: 'success'}))(\n dispatch,\n getState,\n );\n await requestListing()(dispatch, getState);\n};\n\nexport const requestFinding = (id: string, doClone: boolean = false) => async (dispatch, getState) => {\n let state: AppState = getState();\n if (state.finding.requestInProgress) {\n // Don't issue a duplicate request (we are already loading the requested data)\n return;\n }\n\n dispatch({type: REQUEST_FINDING});\n\n let findingsApi = getConfiguredFindingsApi(state);\n const tenantId = selectActiveTenantId(state);\n if(!tenantId) return;\n let finding: Finding | void | undefined = await findingsApi.apiFindingsGetById({tenantId, id}).then(\n async response => {\n return response.data!.attributes;\n },\n (error: ApiOnRejectedResult) => {\n processApiResponse(error, 'Error loading finding ID ' + id)(dispatch);\n },\n );\n\n if (!finding) {\n dispatch({type: CANCEL_REQUEST});\n return;\n }\n\n let schemaResourceObject:\n | FindingSchemaResourceObject\n | void\n | undefined = await findingsApi.apiFindingsGetByIdSchema({tenantId, id}).then(\n async response => {\n return response.data;\n },\n (error: ApiOnRejectedResult) => {\n processApiResponse(error, 'Error loading schema for finding ID ' + id)(dispatch);\n },\n );\n\n // TODO: handle in FindingDetail scene\n if (!schemaResourceObject) {\n setError('Schema for finding ID ' + id + ' does not exist.')(dispatch);\n return;\n }\n\n const findingAttachments = await findingsApi.apiFindingsGetByIdAttachments({tenantId, id}).then(\n async response => {\n return response.data;\n },(error: ApiOnRejectedResult) => {\n processApiResponse(error, 'Error loading attachments for finding ID ' + id)(dispatch);\n })\n const uploadedAttachments: UploadedAttachment[] | undefined = findingAttachments ? \n findingAttachments.map(att => ({resource: att}))\n : undefined;\n \n const hasIncompleteAttachments = uploadedAttachments && uploadedAttachments.some((att) => att.resource.attributes.incomplete)\n \n dispatch({\n type: doClone ? RECEIVE_FINDING_CLONE : RECEIVE_FINDING,\n findingId: id,\n finding: finding,\n schema: schemaResourceObject.attributes,\n schemaId: schemaResourceObject.id,\n uploadedAttachments,\n hasIncompleteAttachments\n });\n};\n\nexport const setAttachmentProperty = (attachmentId: string, property: K, value: T[K]) => async (dispatch, getState: () => AppState) => {\n const {uploadedAttachments} = getState().finding;\n if (!uploadedAttachments) {\n return null;\n }\n const attachments = [...uploadedAttachments];\n const attachment = attachments && attachments.find(att => att.resource.id === attachmentId);\n const attachmentIndex = attachments && attachments.findIndex(att => att.resource.id === attachmentId);\n if (!attachment || attachmentIndex < 0 || !attachments) {\n return null;\n }\n const updatedAttachment: UploadedAttachment = {...attachment, [property]: value}\n attachments.splice(attachmentIndex, 1, updatedAttachment);\n await dispatch({type: UPDATE_ATTACHMENTS, payload: attachments})\n}\n\nexport const setActiveAttachment = (attachmentId: string | null) => async (dispatch) => {\n await dispatch({type: SET_ACTIVE_ATTACHMENT, payload: attachmentId})\n}\n\nexport const requestAttachmentThumbnail = (attachmentId: string) => async (dispatch, getState): Promise => {\n let state: AppState = getState();\n const attachmentsApi = getConfiguredAttachmentsApi(state)\n const tenantId = selectActiveTenantId(state);\n const response = await attachmentsApi.apiAttachmentsGetByIdThumbnailRaw({tenantId, id: attachmentId}).then(\n async response => {\n if (response.raw.status === 200){ // thumbnail exists\n return await response.value();\n } else if (response.raw.status === 204){ // thumbnail empty\n return null;\n } else {\n console.log(response.raw); // unexpected status TODO: consider error handling?\n return null; \n }\n },(error: ApiOnRejectedResult) => {\n console.log({error})\n return null;\n });\n return response;\n}\n\n\nexport const requestAttachmentDownload = (attachmentId: string) => async (dispatch, getState) => {\n let state: AppState = getState();\n const attachmentsApi = getConfiguredAttachmentsApi(state)\n const tenantId = selectActiveTenantId(state);\n const response = await attachmentsApi.apiAttachmentsGetByIdDownloadRaw({tenantId, id: attachmentId}).then(\n async response => {\n return response.raw.status === 200 ? response.value() : null;\n },(error: ApiOnRejectedResult) => {\n return null;\n })\n return response;\n}\n\nexport const deleteAttachment = (attachmentId: string) => async (dispatch, getState) => {\n let state: AppState = getState();\n const attachmentsApi = getConfiguredAttachmentsApi(state)\n const tenantId = selectActiveTenantId(state);\n const response = await attachmentsApi.apiAttachmentsDeleteByIdRaw({tenantId, id: attachmentId})\n if (!response || !response.raw.ok) {\n showNotification({message: 'Error deleting attachment', type: 'error'})\n } else {\n showNotification({message: 'Attachment was deleted', type: 'success'})\n }\n dispatch({\n type: DELETE_UPLOADED_ATTACHMENT,\n payload: attachmentId\n })\n}\n\nexport const requestEmptyWithSchema = (schemaId: string) => async (dispatch, getState) => {\n if (getState().finding.loadingInProgress) {\n // Don't issue a duplicate request (we are already loading the requested data)\n return;\n }\n\n dispatch({type: REQUEST_EMPTY_WITH_SCHEMA});\n\n let state: AppState = getState();\n let schemasApi = getConfiguredSchemasApi(state);\n const tenantId = selectActiveTenantId(state);\n\n let schema: FindingSchema | void | undefined = await schemasApi.apiSchemasGetById({tenantId, id: schemaId}).then(\n async response => {\n return response!.data!.attributes;\n },\n (error: ApiOnRejectedResult) => {\n processApiResponse(error, 'Error loading schema ' + schemaId)(dispatch);\n },\n );\n\n if (!schema) {\n dispatch({type: CANCEL_REQUEST});\n } else {\n dispatch({\n type: RECEIVE_EMPTY_WITH_SCHEMA,\n schema: schema,\n schemaId: schemaId,\n });\n }\n};\n\nexport const persistFinding = (doNotRoute?: boolean, onSuccess?: () => void) => async (dispatch, getState) => {\n let state: AppState = getState();\n if (state.finding.requestInProgress) {\n // Don't issue a duplicate request (we are already loading the requested data)\n return;\n }\n\n dispatch({type: REQUEST_FINDING_PERSIST});\n\n let findingsApi = getConfiguredFindingsApi(state);\n const tenantId = selectActiveTenantId(state);\n\n let findingId = state.finding.loadedFindingId;\n\n let patchedFinding: Finding | void;\n\n if (findingId != null) {\n let requestBody: ExistingFindingRequestBody = {\n data: {\n type: 'findings',\n id: state.finding.loadedFindingId,\n attributes: state.finding.loadedFinding,\n },\n };\n\n patchedFinding = await findingsApi\n .apiFindingsPatchById({tenantId, id: findingId, existingFindingRequestBody: requestBody})\n .then(\n (response: FindingSingleResponse) => {\n return response.data!.attributes;\n },\n (error: ApiOnRejectedResult) => {\n processApiResponse(error, 'Error patching finding ID ' + findingId)(dispatch);\n },\n );\n } else {\n if (!state.finding.loadedSchemaId) {\n setError('Cannot create finding, no schema selected.');\n dispatch({type: CANCEL_REQUEST});\n return;\n }\n\n let requestBody: NewFindingRequestBody = {\n data: {\n type: 'findings',\n attributes: state.finding.loadedFinding,\n relationships: {\n schema: {\n data: {\n type: 'schemas',\n id: state.finding.loadedSchemaId,\n },\n },\n },\n },\n };\n\n patchedFinding = await findingsApi.apiFindingsPost({tenantId, newFindingRequestBody: requestBody}).then(\n (response: FindingSingleResponse) => {\n findingId = response.data!.id;\n return response.data!.attributes;\n },\n (error: ApiOnRejectedResult) => {\n processApiResponse(error, 'Error patching finding ID ' + findingId)(dispatch);\n },\n );\n }\n\n if (!patchedFinding) {\n dispatch({type: CANCEL_REQUEST});\n } else {\n dispatch({\n type: SUCCESS_FINDING_PERSIST,\n patchedFinding: patchedFinding,\n patchedFindingId: findingId,\n });\n if (onSuccess) {\n onSuccess();\n }\n if (!doNotRoute) {\n const routePrefix = getActiveTenantRoutePrefix(state);\n dispatch(push(routePrefix+'/findings/detail/' + findingId));\n }\n }\n};\n\nexport const replaceFindingProperty = (propertyName: string, newValue: any) => {\n return {type: REPLACE_FINDING_PROPERTY, propertyName, newValue};\n};\n\nexport const deleteFinding = (id: string, doNotRoute?: boolean, refreshFindingsOnSuccess?: boolean) => async (dispatch, getState) => {\n dispatch({type: REQUEST_FINDING_DELETE});\n\n let state: AppState = getState();\n let findingsApi = getConfiguredFindingsApi(state);\n const tenantId = selectActiveTenantId(state);\n\n await findingsApi.apiFindingsDeleteById({tenantId, id}).then(\n () => {\n dispatch({type: FINDING_DELETE_SUCCESS});\n if(refreshFindingsOnSuccess) {\n requestListing()(dispatch, getState);\n showNotification({message: 'Successfully deleted', type: \"info\"});\n }\n if (!doNotRoute) {\n const routePrefix = getActiveTenantRoutePrefix(state);\n dispatch(push(routePrefix+'/findings'));\n }\n },\n (error: ApiOnRejectedResult) => {\n dispatch({type: CANCEL_REQUEST});\n processApiResponse(error, 'Error deleting finding ID: ' + id)(dispatch);\n },\n );\n};\n\nexport default {\n requestFinding,\n requestEmptyWithSchema,\n deleteFinding,\n persistFinding,\n replaceFindingProperty,\n};\n","import {LatLngBounds} from \"../models/LatLngBounds\";\nimport {AppState} from \"../reducers\";\nimport {ApiFindingsGetRequest} from \"../../services/GeneratedApiTsClient/apis\";\nimport ApiService from \"../../services/ApiService/ApiService\";\nimport {WellKnownAttributes} from \"../../models/FindingWellKnownAttributes\";\nimport {FindingMapInfoResourceObject} from \"../models/FindingMapInfo\";\nimport {processApiResponse} from \"./ErrorActions\";\nimport {getConfiguredFindingsApi} from \"../selectors/ApiSelectors\";\nimport {selectActiveTenantId} from \"../selectors/TenantSelectors\";\n\nexport enum MapPanelActions {\n SET_MAP_VIEWPORT = 'SET_MAP_VIEWPORT',\n \n REQUEST_MAP_FINDINGS = \"REQUEST_MAP_FINDINGS\",\n RECEIVE_MAP_FINDINGS = \"RECEIVE_MAP_FINDINGS\",\n FLUSH_MAP_FINDINGS = \"FLUSH_MAP_FINDINGS\",\n \n CANCEL_RECEIVING_MAP_FINDINGS = \"CANCEL_RECEIVING_MAP_FINDINGS\",\n \n}\n\nexport const requestMapFindings = (flushBeforeRequest:boolean = false) => async (dispatch, getState: () => AppState) => {\n let state = getState();\n if (state.mapPanel.requestInProgress) return;\n \n if (flushBeforeRequest)\n dispatch({type: MapPanelActions.FLUSH_MAP_FINDINGS});\n \n dispatch({type: MapPanelActions.REQUEST_MAP_FINDINGS});\n \n let findingsApi = getConfiguredFindingsApi(state);\n const tenantId = selectActiveTenantId(state);\n \n let params: ApiFindingsGetRequest = {\n tenantId,\n filter: ApiService.buildFilterQuery([\n ...state.filter.filters,\n ApiService.buildGeoPagingFilter(state.mapPanel.bounds)\n ]),\n page: {number: 1, size: -1},\n fields: {\n findings: [\n WellKnownAttributes.documentName,\n WellKnownAttributes.locationGpsPoint,\n WellKnownAttributes.locationGpsArea\n ].join(\",\")\n } \n };\n \n let markerData = await findingsApi.apiFindingsGet(params).then(\n (response) => response.data as Array,\n async (response) => {\n await processApiResponse(response);\n return undefined;\n }\n );\n \n if (markerData === undefined){\n dispatch({type: MapPanelActions.CANCEL_RECEIVING_MAP_FINDINGS});\n return;\n }\n \n dispatch({type: MapPanelActions.RECEIVE_MAP_FINDINGS, markerData});\n};\n\nexport const setMapViewport = (bounds: LatLngBounds) => (dispatch) => {\n dispatch({type: MapPanelActions.SET_MAP_VIEWPORT, bounds});\n dispatch(requestMapFindings());\n};\n\n\nexport default {\n setMapViewport,\n requestMapFindings\n}","import React from 'react';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\n\ntype Props = {\n visible: boolean;\n titleText: string;\n bodyText: string;\n btnConfirmLabel: string;\n btnCancelLabel: string;\n onClickConfirm: () => void;\n onClickCancel: () => void;\n}\n\nexport const ModalConfirm = (props: Props) => {\n\n return (\n \n {props.titleText}\n {props.bodyText}\n \n {' '}\n \n \n \n );\n}","import {createSelector} from \"reselect\";\nimport {AppState} from \"../reducers\";\nimport {selectActiveTenantUsers} from \"./TenantSelectors\";\nimport {TenantUserRole} from \"../../services/GeneratedApiTsClient\";\n\nexport const selectIsUserLoading = (state: AppState) => state.oidc.isLoadingUser;\n\nexport const selectCurrentUsersIdmSubjectId = (state: AppState) => state.oidc.user?.profile?.sub;\n\nexport const getTenantUserOfSelf = createSelector(\n [selectActiveTenantUsers, selectCurrentUsersIdmSubjectId],\n (activeTenantUsers, idmSubjectId) =>\n activeTenantUsers.find(t => t.idmSubjectId === idmSubjectId) ?? null\n);\n\n/**\n * Test if user is in at least one of the given roles.\n * \n * @param state\n * @param props\n */\nexport const isTenantUserInRole = (state: AppState, props: {role: TenantUserRole[]}) : boolean => {\n const currentRole = getTenantUserOfSelf(state)?.role;\n if (currentRole){\n return props.role.includes(currentRole)\n }\n return false;\n};","import Spinner from \"react-spinkit\";\nimport React from \"react\";\n\nexport default props => (\n
\n \n
\n);","import * as React from 'react';\nimport {Button, DropdownItem, DropdownMenu, DropdownToggle, UncontrolledButtonDropdown} from 'reactstrap';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\n\nimport {deleteFinding} from '../../../store/actions/FindingActions';\nimport {RouteComponentProps} from 'react-router';\nimport {Link} from 'react-router-dom';\nimport {connect} from 'react-redux';\nimport {AppState} from \"../../../store/reducers\";\nimport {downloadLoadedFinding, DownloadTarget} from \"../../../store/actions/ExportActions\";\nimport {useState} from \"react\";\nimport {ModalConfirm} from \"../../../components/ModalConfirm\";\nimport {getActiveTenantRoutePrefix} from \"../../../store/selectors/TenantSelectors\";\nimport {goBack} from \"connected-react-router\";\nimport {isTenantUserInRole} from \"../../../store/selectors/UserSelectors\";\nimport {TenantUserRole} from \"../../../services/GeneratedApiTsClient\";\nimport SpinnerInline from \"../../../components/Spinners/SpinnerInline\";\n\nconst mapStateToProps = (state: AppState) => ({\n export: state.export,\n tenantRoutePrefix: getActiveTenantRoutePrefix(state),\n canEdit: isTenantUserInRole(state, {role: [TenantUserRole.OWNER, TenantUserRole.COLLABORATOR]})\n});\n\nconst mapDispatchToProps = {\n deleteFinding,\n downloadLoadedFinding,\n goBack\n};\n\ntype ComponentProps = {\n findingId: string;\n};\n\ntype Props =\n RouteComponentProps<{ id: string }>\n & ReturnType\n & typeof mapDispatchToProps\n & ComponentProps;\n\nconst DetailsActions: React.FC = props => {\n\n const [visibleModal, setVisibleModal] = useState(false);\n\n const toggleVisibleModal = () => setVisibleModal(!visibleModal);\n\n\n return (\n
\n
\n \n
\n
\n \n \n {props.export.inProgress\n ? \n : \n }\n Export\n \n \n props.downloadLoadedFinding(DownloadTarget.CsvSemicolon)}>\n Download CSV\n \n props.downloadLoadedFinding(DownloadTarget.Clipboard)}>\n To clipboard\n \n \n \n \n \n\n {\n toggleVisibleModal();\n }}>\n \n Delete\n \n
\n {props.deleteFinding(props.findingId); toggleVisibleModal()}} onClickCancel={toggleVisibleModal}/>\n
\n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DetailsActions as unknown as React.FC);\n","import * as React from 'react'\nimport * as am4core from \"@amcharts/amcharts4/core\";\nimport * as am4maps from \"@amcharts/amcharts4/maps\";\nimport am4geodata_worldLow from \"@amcharts/amcharts4-geodata/worldLow\";\nimport {LatLngGps} from \"../../services/GeneratedApiTsClient/models\";\n\ntype MapGraphProps = {\n coords: LatLngGps;\n markerColor: string;\n onClick: () => void;\n}\n\nclass MapGraph extends React.Component {\n private map;\n \n componentDidMount() {\n let map = am4core.create(\"container\", am4maps.MapChart);\n map.geodata = am4geodata_worldLow;\n map.projection = new am4maps.projections.Projection();\n\n // Disable pan and zoom, see: https://www.amcharts.com/docs/v4/tutorials/disabling-zoom-and-pan-on-a-map-chart/\n \n // Disable zoom and pan\n map.maxZoomLevel = 1;\n map.seriesContainer.draggable = false;\n map.seriesContainer.resizable = false;\n map.chartContainer.wheelable = false;\n\n // disable double-click zoom\n map.seriesContainer.events.disableType(\"doublehit\");\n map.chartContainer.background.events.disableType(\"doublehit\");\n\n let polygonSeries = map.series.push(new am4maps.MapPolygonSeries());\n polygonSeries.useGeodata = true;\n // polygonSeries.events.on('hit', this.props.onClick);\n \n let imageSeries = map.series.push(new am4maps.MapImageSeries());\n let imageSeriesTemplate = imageSeries.mapImages.template;\n \n let circle = imageSeriesTemplate.createChild(am4core.Circle);\n circle.radius = 4;\n circle.fill = am4core.color(this.props.markerColor);\n circle.stroke = am4core.color(this.props.markerColor);\n circle.strokeWidth = 2;\n circle.nonScaling = true;\n circle.tooltipText = \"{title}\";\n\n imageSeriesTemplate.propertyFields.latitude = \"latitude\";\n imageSeriesTemplate.propertyFields.longitude = \"longitude\";\n\n imageSeries.data = [{\n \"latitude\": this.props.coords.lat,\n \"longitude\": this.props.coords.lng,\n \"title\": \"found here\"\n }];\n \n this.map = map;\n }\n\n componentWillUnmount() {\n if (this.map) {\n this.map.dispose();\n }\n }\n render() {\n return (\n
\n );\n }\n}\n\nexport default MapGraph;","import * as React from \"react\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\n\n\ntype Props = {\n subtype?: string,\n children: any\n}\n\nexport const DataCardHeaderElement = (props:Props) =>\n
\n \n {props.children}\n
;","import * as React from \"react\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\n\n\ntype Props = {\n children: any\n}\n\nexport const DataCardParagraphElement = (props:Props) =>\n
\n \n {props.children}\n
;","import * as React from 'react';\nimport {Button} from 'reactstrap';\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport copy from 'copy-to-clipboard';\nimport {ButtonProps} from \"reactstrap/lib/Button\";\n\ntype Props = Omit & {\n textToCopy: string;\n copyMessage?: string;\n};\n\nexport const CopyToClipboard: any = ({textToCopy, copyMessage, ...buttonProps}: Props) => {\n const defaultButtonText = 'Copy to clipboard';\n\n const [buttonText, setButtonText] = React.useState(copyMessage ?? defaultButtonText);\n\n function copyToClipboard() {\n\n let success = copy(textToCopy);\n if (success) {\n setButtonText('Copied!');\n setTimeout(() => {\n setButtonText(copyMessage ?? defaultButtonText)\n }, 1000);\n } else {\n setButtonText('Not supported');\n }\n }\n\n return (\n \n );\n};\n","import * as React from 'react';\nimport {Button} from 'reactstrap';\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {ButtonProps} from \"reactstrap/lib/Button\";\n\ntype Props = Omit & {\n textToDownload: string;\n downloadMessage?: string;\n fileName?: string;\n};\n\nexport const DownloadFasta: any = ({textToDownload, downloadMessage, fileName, ...buttonProps}: Props) => {\n\n const defaultButtonText = 'Download Fasta';\n const defaultFileText = 'fasta';\n\n const download = async () => {\n const element = document.createElement(\"a\");\n const file = new Blob([textToDownload], {type: 'application/x-fasta'})\n element.href = URL.createObjectURL(file);\n element.download = fileName ?? defaultFileText;\n document.body.appendChild(element);\n element.click();\n }\n\n return (\n \n );\n};\n","import * as React from \"react\";\nimport {CopyToClipboard} from \"../../../components/CopyToClipboard\";\nimport {DataCardElement} from \"./DataCardElement\";\nimport {DownloadFasta} from \"../../../components/DownloadFasta\";\n\ntype Props = {\n title?: string;\n value?: string;\n description?: string;\n};\n\nexport const DataCardFastaElement = (props: Props) => {\n const formatFasta = () =>{\n if(!props.value) return \"\";\n const arrData = props.value.split(\">\");\n const list = arrData.map((record, key) => {\n return (record !== \"\")?
  • {record.split(/\\r?\\n/)[0]}
  • :\"\"});\n \n return (
      {list}
    \n \n \n
    );\n }\n \n return (\n {formatFasta()}\n )\n};","import {FindingSchemaElement} from \"../../../services/GeneratedApiTsClient\";\nimport {DataCardHeaderElement} from \"./DataCardHeaderElement\";\nimport {DataCardParagraphElement} from \"./DataCardParagraphElement\";\nimport {DataCardTextElement} from \"./DataCardTextElement\";\nimport {DataCardFastaElement} from \"./DataCardFastaElement\";\nimport * as React from \"react\";\n\ntype DynamicDataCardElementProps = {\n definition: FindingSchemaElement;\n value: any;\n};\n\nexport const DynamicDataCardElement = (props: DynamicDataCardElementProps) => {\n\n let convertedValue = props.value;\n\n // convert value to human readable, if needed\n // TODO: revise, if still needed (looks like duplicate\n if (typeof convertedValue === 'object' && convertedValue !== null) {\n convertedValue = convertedValue.map(val => {\n if (!props.definition.values) return null\n const item = props.definition.values.find((opt) => opt.value === val)\n return item ? item.label : val\n })\n } else {\n const value = props.definition.values && props.definition.values.find((opt) => opt.value === convertedValue)\n convertedValue = value ? value.label : convertedValue;\n }\n \n switch (props.definition.type) {\n case 'header':\n return {props.definition.label};\n case 'paragraph':\n return {props.definition.label};\n case 'checkbox-group':\n case 'radio-group':\n let definitionLabel = props.definition.values!.find(v => v.value === convertedValue);\n return (\n \n );\n case 'select':\n if (props.definition.multiple) {\n // if (!convertedValue || !Array.isArray(convertedValue)) return null;\n return ;\n }\n // fall through\n case 'number':\n case 'date':\n case 'text':\n case 'textarea':\n return ;\n case 'fasta':\n return ;\n default:\n return null;\n }\n};\n","import {FILTER_OP} from \"./FilterOperationModel\";\nimport {AttributeType} from \"./FilterableAttributesModel\";\n\n/**\n * Findings filter model\n */\nexport class Filter {\n\n attribute: string;\n operation: FILTER_OP;\n value: string;\n type: AttributeType;\n\n\n constructor(attribute: string = \"\", operation = FILTER_OP.contains, value: string = \"\", type: AttributeType|null = null) {\n this.attribute = attribute;\n this.operation = operation;\n this.value = value;\n this.type = type as AttributeType;\n }\n}","import rootReducer from \"./ListingActions\";\nimport {Filter} from \"../../models/FilterModel\";\nimport {requestMapFindings} from \"./MapPanelActions\";\n\nexport enum FilterActions {\n SET_FILTERS = 'SET_FILTERS',\n CLEAR_FILTERS = 'CLEAR_FILTERS', \n}\n\nexport const setFilters = (filters: Array) => (dispatch) => {\n dispatch({type: FilterActions.SET_FILTERS, filters});\n dispatch(rootReducer.reloadListing());\n dispatch(requestMapFindings(true));\n};\n\nexport const clearFilters = () => (dispatch) => {\n dispatch({type: FilterActions.CLEAR_FILTERS});\n dispatch(rootReducer.reloadListing());\n dispatch(requestMapFindings(true));\n};\n\nexport default {\n setFilters,\n clearFilters\n}","import {DropdownItem, DropdownMenu, DropdownToggle, UncontrolledButtonDropdown} from \"reactstrap\";\nimport * as React from \"react\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\n\n\ntype Props = {\n name: string,\n value: string | null | undefined,\n onClick: () => void\n};\n\nexport const FindingTaxonomyElement = (props: Props) => {\n \n if (!props.value) return <>;\n return (\n
    \n {props.name}\n \n \n {props.value}\n \n \n \n Related Findings\n \n \n \n
    \n );\n}","import * as React from \"react\";\nimport {Button} from \"reactstrap\";\nimport {TaxonomyName} from \"../../../services/GeneratedApiTsClient/models\";\nimport {Filter} from \"../../../models/FilterModel\";\nimport {WellKnownAttributes} from \"../../../models/FindingWellKnownAttributes\";\nimport {FILTER_OP} from \"../../../models/FilterOperationModel\";\nimport {AppState} from \"../../../store/reducers\";\nimport {setFilters} from \"../../../store/actions/FilterActions\";\nimport {push} from \"connected-react-router\";\nimport {connect} from \"react-redux\";\nimport {FindingTaxonomyElement} from \"./FindingTaxonomyElement\";\nimport {getActiveTenantRoutePrefix} from \"../../../store/selectors/TenantSelectors\";\n\n\nconst mapStateToProps = (state: AppState) => ({\n tenantRoutePrefix: getActiveTenantRoutePrefix(state)\n});\n\nconst mapDispatchToProps = {\n setFilters,\n push\n};\n\ntype ComponentProps = {\n taxonomyName: TaxonomyName\n}\n\ntype Props = ReturnType & typeof mapDispatchToProps & ComponentProps;\n\ntype State = {};\n\nclass FindingTaxonomy extends React.Component {\n\n taxonomyKeys: Array = [\"kingdom\",\"phylum\",\"_class\",\"order\",\"family\",\"genus\",\"species\"];\n\n filterByTaxonomy(toLevel: keyof TaxonomyName)\n {\n let taxonomyName = this.props.taxonomyName;\n\n if (!taxonomyName) return;\n\n let filters: Array = [];\n\n for(let index in this.taxonomyKeys){\n let taxonomyKey = this.taxonomyKeys[index];\n\n let value = taxonomyName[taxonomyKey];\n if(!value)\n continue;\n\n filters.push(new Filter(WellKnownAttributes.taxonomyName[taxonomyKey], FILTER_OP.eqi, value, \"text\"));\n\n if(toLevel === taxonomyKey)\n break;\n }\n\n this.props.setFilters(filters);\n this.props.push(this.props.tenantRoutePrefix+\"/findings\");\n }\n\n\n render(){\n return (\n
    \n\n this.filterByTaxonomy(\"kingdom\")} />\n this.filterByTaxonomy(\"phylum\")} />\n this.filterByTaxonomy(\"_class\")} />\n this.filterByTaxonomy(\"order\")} />\n this.filterByTaxonomy(\"family\")} />\n this.filterByTaxonomy(\"genus\")} />\n this.filterByTaxonomy(\"species\")} />\n\n {this.props.taxonomyName.authorship &&
    \n Authorship\n \n
    }\n\n
    \n )\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FindingTaxonomy as unknown as React.ComponentClass);","import {IconProp, SizeProp as FontAwesomeIconSizeProp} from \"@fortawesome/fontawesome-svg-core\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport * as React from \"react\";\n\nexport const FileTypeIcon = (props: { contentType: string, fileName?: string, faSize?: FontAwesomeIconSizeProp, incomplete?: boolean}) => {\n\n let iconName: IconProp = \"file\";\n \n if (props.incomplete){\n iconName = \"file-import\";\n } else {\n if (props.contentType.startsWith(\"image\")) iconName = \"file-image\";\n if (props.contentType.startsWith(\"audio\")) iconName = \"file-audio\";\n if (props.contentType.startsWith(\"video\")) iconName = \"file-video\";\n \n if (props.contentType.startsWith(\"application/vnd.openxmlformats-officedocument.wordprocessingml\") ||\n props.contentType.startsWith(\"application/vnd.ms-word\"))\n iconName = \"file-word\";\n \n if (props.contentType.startsWith(\"application/vnd.ms-excel\")) iconName = \"file-excel\";\n \n if (props.contentType.startsWith(\"application/vnd.ms-powerpoint\")) iconName = \"file-powerpoint\";\n \n if (props.contentType.startsWith(\"application/pdf\")) iconName = \"file-pdf\";\n \n if (props.contentType.startsWith(\"application/x-ace\") ||\n props.contentType.startsWith(\"application/x-bzip\") ||\n props.contentType.startsWith(\"application/x-bzip2\") ||\n props.contentType.startsWith(\"application/x-rar\") ||\n props.contentType.startsWith(\"application/x-tar\") ||\n props.contentType.startsWith(\"application/zip\"))\n iconName = \"file-archive\";\n \n if (props.contentType.startsWith(\"text\")) iconName = props.contentType === \"text/csv\" ? \"file-csv\" : \"file-alt\";\n }\n\n if (iconName === \"file\" || props.incomplete){\n let extension = (props.fileName ? props.fileName.match(/\\.(\\w+)$/) : undefined);\n\n return \n \n {extension && extension.length > 1 &&\n {extension[1].toUpperCase()}}\n \n } else {\n return \n }\n}","import * as React from 'react';\nimport {Badge, Button, Modal, ModalBody, ModalFooter, ModalHeader, Row} from 'reactstrap';\nimport {AttachmentResourceObject} from \"../../../services/GeneratedApiTsClient/models\";\nimport {useDispatch} from \"react-redux\";\nimport {\n deleteAttachment,\n requestAttachmentDownload,\n requestAttachmentThumbnail,\n setActiveAttachment,\n setAttachmentProperty\n} from \"../../../store/actions/FindingActions\";\nimport {openAttachmentsCarousel, showNotification} from \"../../../store/actions/GUIActions\";\nimport {FileTypeIcon} from \"../../../components/FileTypeIcon\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport SpinnerInline from \"../../../components/Spinners/SpinnerInline\";\n\ntype MediaElementProps = {\n file: AttachmentResourceObject;\n canEdit?: boolean;\n};\n\nexport const ServerMediaElement = (props: MediaElementProps) => {\n const [deleteModal, setDeleteModal] = React.useState(false);\n const [isLoading, setIsLoading] = React.useState(false);\n const [isDownloading, setIsDownloading] = React.useState(false);\n const [thumbnail, setThumbnail] = React.useState();\n const dispatch = useDispatch();\n\n\n const requestThumbnail = React.useCallback( async () => {\n if (!props.file || !props.file.id) {\n return null;\n }\n setIsLoading(true);\n const response = await dispatch(requestAttachmentThumbnail(props.file.id));\n setIsLoading(false);\n\n if (!response) {\n return null\n }\n setThumbnail(response);\n await dispatch(setAttachmentProperty(props.file.id, \"thumbnail\", (response as unknown as Blob)))\n }, [dispatch, props.file]);\n\n const handleDelete = async () => {\n if (!props.file || !props.file.id) {\n return;\n }\n await dispatch(deleteAttachment(props.file.id));\n }\n const handleDownload = async () => {\n if (!props.file || !props.file.id) {\n return;\n }\n setIsDownloading(true);\n const data = await dispatch(requestAttachmentDownload(props.file.id))\n setIsDownloading(false);\n\n if (!data) {\n showNotification({\n message: `Error downloading ${props.file.attributes.originalFilename}`,\n type: 'error'\n });\n return;\n }\n\n const url = URL.createObjectURL(data);\n const link = document.createElement(\"a\")\n link.href = url;\n link.setAttribute('download', `${props.file.attributes.originalFilename}`);\n document.body.appendChild(link);\n link.click();\n link.parentNode!.removeChild(link);\n \n dispatch(setAttachmentProperty(props.file.id, \"data\", (data as unknown as Blob)))\n }\n\n React.useEffect(() => {\n if (!props.file) {\n return;\n }\n \n if (!props.file.attributes.incomplete){\n requestThumbnail();\n }\n \n }, [props.file, requestThumbnail]);\n\n const openAttachment = async () => {\n if (!props.file.id) {\n return null;\n }\n await dispatch(setActiveAttachment(props.file.id));\n await dispatch(openAttachmentsCarousel());\n };\n const toggleDelete = () => setDeleteModal(!deleteModal);\n\n const renderPreview = () => {\n if (!thumbnail) {\n if (isLoading) {\n return
    \n \n
    \n } else {\n return (\n
    \n \n {props.file.attributes.incomplete && \n INCOMPLETE UPLOAD\n }\n
    \n );\n }\n }\n return ;\n };\n\n return (\n
    \n {renderPreview()}\n \n {props.file.attributes.originalFilename}\n {!props.file.attributes.incomplete && (isDownloading ? :\n \n \n )}\n {props.canEdit && \n \n }\n \n \n Delete {props.file.attributes.originalFilename}?\n \n The action cannot be undone.\n \n \n \n \n \n \n
    \n );\n};\n","import React, {useEffect, useMemo, useState} from 'react'\nimport Uppy, {UploadResult} from '@uppy/core'\nimport Tus, {TusOptions} from '@uppy/tus'\nimport {Dashboard} from '@uppy/react'\nimport {connect} from \"react-redux\";\nimport {AppState} from \"../../../store/reducers\";\nimport {getUppyTusConfiguration} from \"../../../store/selectors/ApiSelectors\";\nimport {Prompt} from \"react-router\";\n\nconst mapStateToProps = (state: AppState) => ({\n tusBaseConfig: getUppyTusConfiguration(state)\n});\n\nconst mapDispatchToProps = {\n};\n\ntype ComponentProps = {\n findingId: string,\n onFinished: (result: UploadResult) => void,\n}\ntype Props = ReturnType &\n typeof mapDispatchToProps & ComponentProps;\n\nconst MediaUploader = (props: Props) => {\n\n const [uploadInProgress, setUploadInProgress] = useState(false);\n \n const [uppyHasFiles, setUppyHasFiles] = useState(false);\n \n useEffect(() => {\n if (uploadInProgress) {\n window.onbeforeunload = () => true;\n } else {\n // @ts-ignore\n window.onbeforeunload = undefined;\n }\n }, [uploadInProgress])\n \n const uppy = useMemo(() => new Uppy({\n restrictions: {\n maxFileSize: 1 * 1024 * 1024 * 1024 // 1 GiB\n },\n autoProceed: false\n }).on('file-added', (file) => {\n // auto-fill in metadata form file \n uppy.setFileMeta(file.id, {\n fileName: file.name,\n contentType: file.type,\n });\n setUppyHasFiles(true);\n }).on('file-removed', (file, reason) => {\n if (uppy.getFiles().length < 1) {\n setUppyHasFiles(false);\n }\n }).on('complete', (result) => {\n setUploadInProgress(false);\n // perform callback when finished\n props.onFinished(result);\n }).on('upload', (data) => {\n setUploadInProgress(true);\n }).on('cancel-all', () => {\n setUploadInProgress(false);\n setUppyHasFiles(false);\n }), [])\n\n // configure TUS endpoint with finding-dependent URL\n useEffect(() => {\n const tusOptions: TusOptions = {\n ...props.tusBaseConfig,\n endpoint: props.tusBaseConfig.endpoint + `/findings/${props.findingId}/attachments/tus`,\n };\n \n // upsert the TUS plugin for Uppy (safe upsert needed for re-rendes)\n let existingPlugin = uppy.getPlugin('Tus');\n if (existingPlugin){\n existingPlugin.setOptions(tusOptions);\n } else {\n uppy.use(Tus, tusOptions);\n }\n }, [props.findingId, props.tusBaseConfig])\n\n // cleanup\n React.useEffect(() => {\n return () => uppy.close()\n }, [])\n \n return (\n
    \n \n \n
    \n )\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MediaUploader as unknown as React.ComponentClass);","import Spinner from \"react-spinkit\";\nimport React from \"react\";\n\nexport default props => (\n
    \n \n
    \n);","import * as React from 'react';\nimport {connect} from 'react-redux';\nimport {Finding, TenantUserRole} from '../../services/GeneratedApiTsClient';\nimport {Alert, Card, CardBody, Col, Container, Row} from 'reactstrap';\nimport {DataCardTextElement} from './components/DataCardTextElement';\nimport ItemMinimap from '../../components/ItemMinimap/ItemMinimap';\nimport {FindingTags} from './components/FindingTags';\nimport {AppState} from '../../store/reducers';\nimport {deleteFinding, requestFinding} from '../../store/actions/FindingActions';\nimport {RouteComponentProps} from 'react-router';\nimport DetailsActions from './containers/DetailsActions';\nimport MapGraph from '../../components/Graphs/MapGraph';\nimport {DynamicDataCardElement} from \"./components/DynamicDataCardElement\";\nimport FindingTaxonomy from \"./components/FindingTaxonomy\";\nimport {getCenterOfCoordsArray} from \"../../utils/gpsUtils\";\nimport {ServerMediaElement} from \"./containers/ServerMediaElement\";\nimport {UploadedAttachment} from \"../../store/reducers/FindingReducer\";\nimport moment from \"moment\";\nimport MediaUploader from \"./components/MediaUploader\";\nimport {UploadResult} from \"@uppy/core\";\nimport {showNotification} from \"../../store/actions/GUIActions\";\nimport {isTenantUserInRole} from \"../../store/selectors/UserSelectors\";\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport SpinnerOverlay from \"../../components/Spinners/SpinnerOverlay\";\n\nconst mapStateToProps = (state: AppState) => ({\n finding: state.finding,\n tenantId: state.tenant.activeTenantId,\n canEdit: isTenantUserInRole(state, {role: [TenantUserRole.OWNER, TenantUserRole.COLLABORATOR]})\n});\n\nconst mapDispatchToProps = {\n deleteFinding,\n requestFinding\n};\n\ntype Props = RouteComponentProps<{ id: string }> & ReturnType & typeof mapDispatchToProps & {};\n\n\nconst FindingDetail = (props: Props) => {\n //id = this.props.match.params.id;\n //private mapRef;\n const [id, setId] = React.useState(props.match.params.id)\n const mapRef = React.useRef(null)\n\n React.useEffect(() => {\n if(props.tenantId){\n props.requestFinding(id) \n }\n }, [id, props.tenantId])\n \n\n const renderHeader = (finding: Finding) => {\n return (\n <>\n \n

    {finding.documentName}

    \n\n\n
    \n
    \n {finding.taxonomyName && }\n
    \n {finding.taxonomyHumanReadable && (\n
    \n Scientific name:\n {finding.taxonomyHumanReadable}\n
    \n )}\n
    \n
    \n\n {finding.tags && (\n
    \n \n
    \n )}\n \n );\n };\n\n const renderGeneralInfoCard = (finding: Finding) => {\n return (\n
    \n

    General information

    \n \n \n \n \n \n \n \n \n \n {/*todo: doplnit last modified*/}\n {/**/}\n \n \n \n {hasGpsCoords(finding) && (\n \n
    \n {\n if (mapRef && mapRef.current) {\n mapRef.current.scrollIntoView({behavior: 'smooth'});\n }\n }}\n />\n
    \n \n )}\n
    \n
    \n );\n };\n\n const renderSchemaInfoCard = (schema, finding) => {\n return (\n
    \n

    \n {schema.name} Schema Information\n

    \n \n \n \n {schema.definitionGroups.map((group, i) => (\n
    1 && 'mt-4'} ${schema.definitionGroups!.length > 1 ? ' w-100-p w-49-lg-p' : 'w-100-p'}`}>\n {group.name}\n
    \n {group.definitions.map((definition, j) =>\n )}\n
    \n ))}\n\n {schema.nestedDataDefinitions.map((nestedDataElement, i) => (\n
    \n {nestedDataElement.label}\n
    \n \n <>\n \n {finding.dynamicData![nestedDataElement.name!] && finding.dynamicData![nestedDataElement.name!].map((nestedData, j) => (\n
    0 ? 'mt-4' : ''} w-100-p w-49-lg-p`}>\n \n {/*reverse ordering - most recent with lowest index*/}\n #{finding.dynamicData![nestedDataElement.name!].length - j}\n \n
    \n {nestedDataElement.definitions.map((definition, j) =>\n )}\n
    \n ))}\n \n {(!finding.dynamicData![nestedDataElement.name!] || !finding.dynamicData![nestedDataElement.name!].length) && ∅}\n \n
    \n ))}\n \n \n \n
    \n );\n };\n\n const handleUploadFinished = (result: UploadResult) => {\n if (result.successful.length){\n showNotification({message: `Successfully uploaded ${result.successful.length} files.`, type: \"success\"});\n }\n for (const failed of result.failed) {\n showNotification({message: `Error uploading file ${failed.name}: ${failed.error}`, type: \"error\", doNotAutoClose: true});\n }\n props.requestFinding(id);\n };\n \n const renderMediaCard = (findingId: string | undefined, finding: Finding, hasIncompleteAttachments: boolean, attachments?: UploadedAttachment[]) => {\n return (\n
    \n

    Media Information

    \n \n \n \n
    \n
    \n {attachments && attachments.map((attachment) => (\n \n ))}\n
    \n \n {hasIncompleteAttachments && \n
    There are incomplete attachments!
    \n They are either uploading at the moment or their upload was interrupted.\n In case of the latter, upload can be resumed by selecting the exact same file and upload will continue where it left off.\n
    }\n \n {findingId && }\n
    \n
    \n
    \n );\n };\n\n const renderLocationCard = (finding: Finding) => {\n return (\n
    \n

    Location Information

    \n \n \n \n \n {finding.locationGpsPoint && }\n \n \n \n
    \n );\n };\n\n const hasGpsCoords = (finding: Finding) => {\n if (!finding.locationGpsPoint && !finding.locationGpsArea) {\n return false;\n }\n\n const hasGpsPoint = !!finding.locationGpsPoint\n const hasGpsArea = !!finding.locationGpsArea && finding.locationGpsArea.length !== 0;\n\n return hasGpsPoint || hasGpsArea;\n };\n\n return (\n <>\n {(!props.finding.loadedFinding || !props.finding.loadedSchema || !props.finding.loaded)?\n \n :\n
    \n {!props.finding.loaded && }\n \n
    \n {renderHeader(props.finding.loadedFinding)}\n {renderGeneralInfoCard(props.finding.loadedFinding)} \n {props.finding.loadedSchema?.definitionGroups && renderSchemaInfoCard(props.finding.loadedSchema, props.finding.loadedFinding)}\n {/* added condition to enable re-rendering */}\n {props.finding.uploadedAttachments && renderMediaCard(props.finding.loadedFindingId, props.finding.loadedFinding, props.finding.hasIncompleteAttachments, props.finding.uploadedAttachments)}\n {renderLocationCard(props.finding.loadedFinding)}\n
    \n
    \n {hasGpsCoords(props.finding.loadedFinding) && (\n
    \n \n
    \n )}\n
    \n }\n \n )\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FindingDetail as any);\n","import $ from 'jquery';\n\nexport const registerJQuery = () => {\n window.jQuery = $;\n window.$ = $;\n require('jquery-ui-sortable');\n\n // for more info on formbuilder integration\n // see: https://github.com/kevinchappell/formBuilder/issues/670#issuecomment-347503006\n};","import * as React from 'react';\nimport {FindingSchemaElement} from '../../services/GeneratedApiTsClient';\nimport $ from 'jquery';\nimport {registerJQuery} from \"../../registerJQuery\";\n\nregisterJQuery();\nrequire('formBuilder/dist/form-render.min.js'); // not pretty but works\n\ntype DynamicData = {\n [key: string]: any;\n};\n\ntype FormRenderElement = FindingSchemaElement & {\n userData?: Array;\n};\n\ntype Props = {\n formKey: string;\n definitions: Array;\n data: DynamicData;\n onInput: (DynamicData) => void;\n};\n\ntype State = any;\n\nconst TypeToClassNameMap: { [key: string]: string } = {\n text: 'form-control',\n number: 'form-control',\n select: 'form-control',\n 'radio-group': '',\n 'checkbox-group': '',\n textarea: 'form-control',\n};\n\nexport class DynamicFormRenderer extends React.Component {\n fb: any;\n\n formRenderInstance: any;\n\n componentDidMount() {\n this.renderForm();\n }\n\n componentDidUpdate(prevProps: Props) {\n if (this.props.definitions !== prevProps.definitions) {\n this.renderForm();\n }\n }\n \n renderForm() {\n let options = {\n dataType: 'json',\n formData: this.mergeDataToDefinitions(this.props.definitions, this.props.data),\n };\n this.formRenderInstance = $(this.fb).formRender(options);\n\n // register data change handler\n $('input, textarea, select', $('#dynamic-form-renderer-' + this.props.formKey)).on('input.unicat', event => {\n this.props.onInput(this.extractDataFromDefinitions(this.formRenderInstance.userData));\n });\n }\n\n mergeDataToDefinitions(\n definitions: Array,\n data: DynamicData,\n ): Array {\n return definitions.map((definition: FindingSchemaElement) => {\n\n let dataAugmentedDefinition: any = {\n ...definition,\n // scope name by form key to prevent conflicts\n name: this.props.formKey + '-' + definition.name,\n // force-disable rich text subtypes\n // TODO: impelemnt rich-text editors\n subtype: definition.type === 'textarea' ? 'textarea' : definition.type,\n class: TypeToClassNameMap.hasOwnProperty(definition.type!) ? TypeToClassNameMap[definition.type!] : '',\n dataId: this.props.formKey,\n };\n\n // inject data value, if available \n if (!(definition.name == null || data[definition.name] === undefined)) {\n let dataValue = data[definition.name];\n dataAugmentedDefinition = {\n ...dataAugmentedDefinition,\n userData: Array.isArray(dataValue) ? dataValue : [dataValue],\n };\n }\n\n return dataAugmentedDefinition;\n });\n }\n\n extractDataFromDefinitions(definitions: Array) {\n // console.log(definitions);\n let output = {};\n\n definitions.forEach(definition => {\n // skip non-input components (header, paragraph)\n if (definition.name === undefined) return;\n\n let dataValue: any = definition.userData !== undefined ? definition.userData : [];\n\n switch (definition.type) {\n case 'checkbox-group':\n break;\n case 'number':\n if (Array.isArray(dataValue) && dataValue.length > 0) {\n dataValue = parseFloat(dataValue[0]);\n if (isNaN(dataValue)) {\n dataValue = null;\n }\n }\n break;\n case 'select':\n if (definition.multiple) {\n break;\n }\n // fall through\n default:\n if (Array.isArray(dataValue) && dataValue.length > 0) {\n dataValue = dataValue[0];\n }\n }\n\n // de-scope name by form key\n const deScopedName = definition.name.replace(this.props.formKey + '-', \"\");\n\n output[deScopedName] = dataValue;\n });\n\n return output;\n }\n\n render() {\n return (\n
    (this.fb = el)}>\n dynamic form\n
    \n );\n }\n}\n","import * as React from 'react';\nimport {useEffect, useState} from 'react';\nimport GraphContainer from '../../../components/Graphs/GraphContainer';\nimport {AppState} from '../../../store/reducers';\nimport {closeGraphView} from '../../../store/actions/GUIActions';\nimport {connect} from 'react-redux';\nimport PieChartGraph from '../../../components/Graphs/PieChartGraph';\nimport {GraphSettingsForm} from \"./GraphSelectorInputGroup\";\nimport {Button, Nav, NavItem, NavLink} from \"reactstrap\";\nimport ApiService from \"../../../services/ApiService/ApiService\";\nimport {FrequencyChartItem} from \"../../../services/GeneratedApiTsClient/models\";\nimport {StaticFilterableAttributesGroup} from \"../../../models/FilterableAttributesModel\";\nimport ColumnChartGraph from \"../../../components/Graphs/ColumnChartGraph\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {getConfiguredChartsApi} from \"../../../store/selectors/ApiSelectors\";\nimport {selectActiveTenantId} from \"../../../store/selectors/TenantSelectors\";\nimport SpinnerOverlay from \"../../../components/Spinners/SpinnerOverlay\";\n\nconst mapStateToProps = (state: AppState) => ({\n schemaAttributes: state.findingSchemas.schemaAttributes,\n filters: state.filter.filters,\n chartsApi: getConfiguredChartsApi(state),\n tenantId: selectActiveTenantId(state)\n});\n\nconst mapDispatchToProps = {\n closeGraphView,\n};\n\nenum ChartTypes {\n Pie,\n Treemap,\n Bar,\n Column,\n}\n\ntype Props = ReturnType & typeof mapDispatchToProps & {};\n\nconst GraphPanel = (props: Props) => {\n\n const [loading, setLoading] = useState(false);\n \n const [aggregate, setAggregate] = useState(\"taxonomyHumanReadable\");\n const [group, setGroup] = useState();\n const [chartType, setChartType] = useState(ChartTypes.Pie);\n \n const [frequencyData, setFrequencyData] = useState>();\n //const [statisticalData, setStatisticalData] = useState>();\n\n const [groupDisabled, setGroupDisabled] = useState(true);\n \n useEffect(() => {\n if (!aggregate) return;\n \n // setStatisticalData(undefined);\n // setFrequencyData(undefined);\n const fetchData = async () => {\n setLoading(true);\n\n let frequency = await props.chartsApi.apiChartsFindingsFrequency({\n tenantId: props.tenantId,\n filter: ApiService.buildFilterQuery(props.filters),\n aggregate,\n group,\n maxItemsPerGroup: 20\n });\n\n setFrequencyData(frequency.data);\n\n /*\n let statistics = await props.chartsApi.apiChartsFindingsStatistics({\n tenantId: props.tenantId,\n filter: ApiService.buildFilterQuery(props.filters),\n aggregate,\n group\n });\n */\n \n\n //setStatisticalData(statistics.data);\n\n setLoading(false);\n }\n fetchData();\n \n },[aggregate, group, props.chartsApi, props.filters, props.tenantId]);\n \n useEffect(() => {\n \n if (chartType === ChartTypes.Pie){\n setGroup(undefined);\n setGroupDisabled(true);\n } else {\n setGroupDisabled(false);\n }\n \n },[chartType]);\n \n /*\n const barChartData = (): BarChartGraphDataType => {\n\n if (!frequencyData) return [];\n\n let groupped = frequencyData\n .reduce((prev, i) => {\n\n let key = (i.group ?? \"other\");\n\n if (!prev.hasOwnProperty(key)) {\n prev[key] = {\n category: key,\n color: \"#01ff00\",\n children: [],\n };\n }\n\n prev[key].children.push({name: i.label, value:i.value})\n\n return prev;\n },[] as BarChartGraphDataType);\n\n let numeric_array: BarChartGraphDataType = [];\n for (let items in groupped){\n numeric_array.push( groupped[items] );\n }\n \n return numeric_array;\n \n };\n */\n \n return (\n
    \n \n {loading && }\n \n
    \n \n \n \n
    \n \n setAggregate(value)}\n onGroupChange={(value) => value ? setGroup(value) : setGroup(undefined)}\n groupDisabled={groupDisabled}\n filterableAttributes={StaticFilterableAttributesGroup.concat(props.schemaAttributes)} />\n \n {chartType === ChartTypes.Pie && frequencyData && \n ({name: i.label, value:i.value}))}/>\n }\n\n {chartType === ChartTypes.Column && frequencyData && \n ({name: i.label, value:i.value}))} title={\"\"} showLabels={true}/>\n }\n {/*{chartType === ChartTypes.Treemap && */}\n {/* */}\n {/*}*/}\n {/*{chartType === ChartTypes.Bar && */}\n {/* */}\n {/*}*/}\n {/*{chartType === ChartTypes.Bar && frequencyData && */}\n {/* */}\n {/*}*/}\n
    \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(GraphPanel);\n","import * as React from 'react';\n\ntype Props = { \n titleAfter?: any;\n title: string;\n children: any;\n alignColumn?: boolean;\n gutterBottom?: boolean;\n className? :string;\n};\n\nexport const DataCardInputElement = (props: Props) => (\n \n

    {props.title}{props.titleAfter}

    \n {props.children}\n
    \n);\n","import * as React from 'react';\nimport {DataCardInputElement} from './DataCardInputElement';\nimport {FormFeedback, Input} from 'reactstrap';\n\ntype Props = {\n title: string;\n titleAfter?: any;\n attributeName: string;\n data: {\n [key: string]: any;\n };\n onInput: (e: any) => void;\n required?: boolean;\n pattern?: string;\n alignColumn?: boolean;\n gutterBottom?: boolean;\n formatValueData?: (valueData: any) => string;\n autoFocus?: boolean;\n};\n\nexport const DataCardTextInputElement = (props: Props) => {\n // const getValue = () => {\n // if (props.formatValueData && typeof props.data[props.attributeName] === 'object') {\n // return props.formatValueData(props.data[props.attributeName])\n // }\n // return props.data[props.attributeName]\n // };\n \n return (\n \n \n \n {props.required ? 'This field is required. ' : ''}\n {props.pattern ? 'Value has to match pattern ' + props.pattern + '. ' : ''}\n \n \n );\n}","import * as React from 'react';\nimport {DataCardInputElement} from './DataCardInputElement';\nimport {FormFeedback, Input} from 'reactstrap';\n\ntype Props = {\n title: string;\n titleAfter?: any;\n attributeName: string;\n data: any,\n onInput: (e: any) => void;\n required?: boolean;\n pattern?: string;\n alignColumn?: boolean;\n gutterBottom?: boolean;\n formatValueData?: (valueData: any) => string\n};\n\nexport const DataCardSimpleTextInputElement = (props: Props) => {\n // const getValue = () => {\n // if (props.formatValueData && typeof props.data[props.attributeName] === 'object') {\n // return props.formatValueData(props.data[props.attributeName])\n // }\n // return props.data[props.attributeName]\n // };\n \n return (\n \n \n \n {props.required ? 'This field is required. ' : ''}\n {props.pattern ? 'Value has to match pattern ' + props.pattern + '. ' : ''}\n \n \n );\n}","import * as React from \"react\";\nimport {TaxonomyName} from \"../../../services/GeneratedApiTsClient/models\";\nimport {Input, InputGroup, InputGroupAddon, InputGroupText} from \"reactstrap\";\nimport {DataCardInputElement} from \"../../../components/DataCardComponnents/DataCardInputElement\";\nimport {DataCardSimpleTextInputElement} from \"../../../components/DataCardComponnents/DataCardSimpleTextInputElement\";\n\ntype Props = {\n title: string;\n alignColumn?: boolean;\n gutterBottom?: boolean;\n \n taxonomyName: TaxonomyName | null | undefined\n onInput: (TaxonomyName) => void\n}\n\n\nexport const TaxonomyInput = (props: Props) => {\n\n const handleInputChange = event => {\n const target = event.target;\n const value = target.value;\n const name = target.name;\n\n let updated = { ...props.taxonomyName};\n updated[name] = value;\n \n props.onInput(updated);\n };\n \n return (\n <>\n \n \n \n Kingdom\n \n \n \n \n Phylum\n \n \n \n \n Class\n \n \n \n \n Order\n \n \n \n \n Family\n \n \n \n \n Genus\n \n \n \n \n Species\n \n \n \n \n\n \n \n );\n}\n\n","const validityStates = [\n \"badInput\",\n \"rangeOverflow\",\n \"rangeUnderflow\",\n \"stepMismatch\",\n \"tooLong\",\n \"tooShort\",\n \"typeMismatch\",\n \"valueMissing\",\n]\n\nexport const isValidFloatNumber = (field: any): boolean => {\n let validityErrors: string[] = [];\n for (let key of validityStates) {\n // If there's an error, change valid value\n if (field.validity[key]) {\n validityErrors.push(key)\n }\n }\n \n // there's more errors to resolve before float check\n if (validityErrors.length > 1) {\n return false\n }\n \n // number check\n if (isNaN(field.value) || !field.value) {\n return false\n }\n \n // there's different error than floating point\n if (validityErrors[0] !== 'stepMismatch' ) {\n return false\n }\n \n // there's actual step error\n if (field.step && field.value % field.step !== 0) {\n return false\n }\n \n return true\n}","import * as React from \"react\";\nimport {DataCardInputElement} from \"./DataCardInputElement\";\nimport {FormFeedback, Input} from \"reactstrap\";\n\ntype Props = {\n title: string,\n titleAfter?: any;\n attributeName: string,\n data: {\n [key: string] : any\n },\n onInput: (e: any) => void,\n required?: boolean;\n min?: number,\n alignColumn?: boolean;\n gutterBottom?: boolean;\n autoFocus?: boolean;\n}\n\nexport const DataCardNumberInputElement = (props:Props) =>\n \n \n \n {props.required ? 'This field is required. ' : ''}\n \n ;","import * as React from \"react\";\nimport {DataCardInputElement} from \"./DataCardInputElement\";\nimport {FormFeedback, Input} from \"reactstrap\";\n\nconst moment = require('moment');\n\ntype Props = {\n title: string,\n titleAfter?: any;\n attributeName: string,\n data: {\n [key: string] : any\n },\n onInput: (e: any) => void\n required?: boolean;\n alignColumn?: boolean;\n gutterBottom?: boolean;\n autoFocus?: boolean;\n}\n\nexport const DataCardDateInputElement = (props:Props) =>\n \n \n \n {props.required ? 'This field is required. ' : ''}\n \n ;","import * as React from 'react';\nimport {FindingSchemaElement} from \"../../../services/GeneratedApiTsClient\";\nimport {DynamicFormRenderer} from \"../../../components/JQueryFormBuilder/DynamicFormRenderer\";\nimport {Button, Card, CardBody} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\n\ntype DynamicDataArray = Array<{ [key: string]: object; }>;\n\ntype Props = {\n inputKey: string,\n label: string\n definitions: Array;\n data: DynamicDataArray;\n onInput: (DynamicDataArray) => void;\n};\n\nexport const NestedDataInput = (props: Props) => {\n\n /**\n * Bubble-up updates in data\n * @param data\n * @param index\n */\n const handleDynamicFormInput = (data, index) => {\n let newData = [...props.data];\n newData[index] = data;\n\n props.onInput(newData);\n }\n\n /**\n * Add new empty data entry, to the beginning\n */\n const add = () => {\n let newData = [...props.data];\n newData.unshift({});\n\n props.onInput(newData);\n }\n\n /**\n * Remove data entry on given index\n * @param index\n */\n const remove = (index) => {\n let newData = [...props.data];\n newData.splice(index, 1);\n\n props.onInput(newData);\n }\n\n return (\n
    \n \n {props.label}\n \n
    \n \n \n {props.data.map((d, idx) =>\n \n \n {/*reverse ordering - most recent with lowest index*/}\n

    #{props.data.length - idx}

    \n handleDynamicFormInput(newData, idx)}\n />\n \n
    \n \n )}\n
    \n );\n}","import * as React from 'react';\nimport {connect} from 'react-redux';\nimport {Finding, FindingSchema, LatLngGps, TaxonomyName} from '../../services/GeneratedApiTsClient';\nimport {Button, Card, CardBody, Container, Row} from 'reactstrap';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport ItemMinimap from '../../components/ItemMinimap/ItemMinimap';\nimport {WellKnownAttributes} from '../../models/FindingWellKnownAttributes';\nimport {DynamicFormRenderer} from '../../components/JQueryFormBuilder/DynamicFormRenderer';\nimport TagsInput from 'react-tagsinput';\nimport {AppState} from '../../store/reducers';\nimport {RouteComponentProps} from 'react-router';\nimport {\n persistFinding,\n replaceFindingProperty,\n requestEmptyWithSchema,\n requestFinding,\n} from '../../store/actions/FindingActions';\nimport {setError} from '../../store/actions/ErrorActions';\nimport {DataCardTextInputElement} from '../../components/DataCardComponnents/DataCardTextInputElement';\nimport {DataCardInputElement} from '../../components/DataCardComponnents/DataCardInputElement';\nimport {CopyToClipboard} from '../../components/CopyToClipboard';\nimport {TaxonomyInput} from \"./components/TaxonomyInput\";\nimport {isValidFloatNumber} from \"../../utils/validationHelper\";\nimport {DataCardNumberInputElement} from \"../../components/DataCardComponnents/DataCardNumberInputElement\";\nimport {DataCardDateInputElement} from \"../../components/DataCardComponnents/DataCardDateInputElement\";\nimport moment from \"moment\";\nimport {getActiveTenantRoutePrefix} from \"../../store/selectors/TenantSelectors\";\nimport {goBack, push} from \"connected-react-router\";\nimport SpinnerOverlay from \"../../components/Spinners/SpinnerOverlay\";\nimport {NestedDataInput} from \"./components/NestedDataInput\";\n\nconst mapStateToProps = (state: AppState) => ({\n finding: state.finding,\n routePrefix: getActiveTenantRoutePrefix(state),\n tenantId: state.tenant.activeTenantId\n});\n\nconst mapDispatchToProps = {\n requestFinding,\n requestEmptyWithSchema,\n replaceFindingProperty,\n persistFinding,\n setError,\n goBack,\n push\n};\n\ntype State = {\n wasValidated: boolean;\n};\n\ntype ComponentProps = {\n doClone?: boolean;\n}\ntype Props = RouteComponentProps<{ id: string; schema: any }> &\n ReturnType &\n typeof mapDispatchToProps & ComponentProps;\n\nconst FindingEdit = (props: Props) => {\n /*\n public static defaultProps = {\n doClone: false,\n };\n */\n\n const formEl = React.createRef();\n\n const [wasValidate, setWasValidate] = React.useState(false);\n\n React.useEffect(() => {\n if(props.tenantId) {\n if (props.match.params.id) {\n props.requestFinding(props.match.params.id, props.doClone);\n } else if (props.match.params.schema) {\n props.requestEmptyWithSchema(props.match.params.schema);\n }\n }\n }, [props.tenantId])\n\n\n const handleInputChange = event => {\n const target = event.target;\n\n let value = target.value;\n switch (target.type) {\n case 'checkbox':\n value = target.checked;\n break;\n case 'date':\n value = moment.utc(value, 'YYYY-MM-DD').startOf('day').toDate();\n break\n }\n const name = target.name;\n\n props.replaceFindingProperty(name, value);\n };\n\n const handleTaxonomyChange = (newTaxonomy: TaxonomyName) => {\n props.replaceFindingProperty('taxonomyName', newTaxonomy);\n }\n\n const handleCopyTaxonomyToScientificName = () => {\n\n let taxonomyName = props.finding.loadedFinding.taxonomyName;\n if (taxonomyName === undefined) return;\n\n let taxonomyKeys: Array = [\"genus\", \"species\"];\n\n let scientificName = taxonomyKeys.map(key => taxonomyName ? taxonomyName[key] : undefined).filter(value => value && value.length > 0).join(\" \");\n\n if (taxonomyName.authorship && taxonomyName.authorship.length > 0) {\n scientificName += \" (\" + taxonomyName.authorship + \")\";\n }\n\n props.replaceFindingProperty(WellKnownAttributes.taxonomyHumanReadable, scientificName);\n }\n\n const handleDynamicFormInputChange = data => {\n let patchedData = {...props.finding.loadedFinding.dynamicData, ...data};\n props.replaceFindingProperty('dynamicData', patchedData);\n };\n\n const handlePointChange = (point: LatLngGps | null) => {\n props.replaceFindingProperty('locationGpsPoint', point);\n };\n\n const handlePolygonChange = (polygon: Array) => {\n props.replaceFindingProperty('locationGpsArea', polygon);\n };\n\n const handleTagsChange = (tags, changed, changedIndexes) => {\n props.replaceFindingProperty('tags', tags);\n };\n\n const validate = () => {\n if (formEl && formEl.current) {\n const formLength = formEl.current.length;\n for (let i = 0; i < formLength; i++) {\n const elem: any = formEl.current[i];\n if (!elem.validity.valid) {\n if (elem.type !== 'number' || !isValidFloatNumber(elem)) {\n elem.scrollIntoView({behavior: 'smooth'});\n elem.focus();\n elem.classList.add('is-invalid')\n return false;\n }\n elem.classList.add('is-valid')\n }\n elem.classList.add('is-valid')\n }\n }\n return true;\n };\n\n const onSubmit = e => {\n e.preventDefault();\n if (validate()) {\n props.persistFinding();\n } else {\n setWasValidate(true)\n }\n };\n const renderHeader = (loadedFindingId: any, loadedSchema: any) => (\n <>\n
    \n
    \n {\n props.goBack();\n }}>\n \n Back\n \n
    \n
    \n \n {\n if (loadedFindingId) {\n props.push(props.routePrefix + '/findings/detail/' + loadedFindingId);\n } else {\n props.goBack();\n }\n }}>\n \n Cancel\n \n
    \n
    \n

    {loadedFindingId ? 'Edit Finding' : 'New Finding'}

    \n

    {loadedSchema!.name} Schema

    \n \n );\n const renderGeneralInfoCard = (loadedFinding: Finding) => (\n
    \n

    General information

    \n \n \n \n \n \n \n\n \n \n \n \n \n
    \n );\n const renderTaxonomyCard = (loadedFinding: Finding) => (\n
    \n

    Taxonomy

    \n \n \n\n \n\n Copy from taxonomy}\n attributeName={WellKnownAttributes.taxonomyHumanReadable}\n data={loadedFinding}\n onInput={handleInputChange}\n alignColumn\n gutterBottom\n />\n \n \n
    \n );\n const renderSchemaInfoCard = (schema: FindingSchema, finding) => {\n return (\n <>\n
    \n

    \n {schema.name.toUpperCase()} Information\n

    \n \n \n \n {schema.definitionGroups && schema.definitionGroups.map((group, index) => (\n 1 && 'mt-4'} ${\n schema.definitionGroups!.length > 1 ? ' w-100-p w-49-lg-p' : 'w-100-p'\n }`}>\n {group.name}\n
    \n \n
    \n ))}\n\n {schema.nestedDataDefinitions && schema.nestedDataDefinitions.map((nestedDefinition, index) => (\n {handleDynamicFormInputChange({\n [nestedDefinition.name]: d\n })}}\n />\n ))}\n
    \n
    \n
    \n
    \n \n );\n };\n const renderMediaCard = (loadedFinding: Finding) => {\n return (\n
    \n

    Media Information

    \n \n \n \n \n \n
    \n );\n };\n\n const renderLocationCard = (loadedFinding: Finding) => {\n return (\n
    \n

    Location Information

    \n \n \n \n \n \n {loadedFinding.locationGpsPoint\n ? `${loadedFinding.locationGpsPoint.lat.toPrecision(8)}, ${loadedFinding.locationGpsPoint.lng.toPrecision(8)}`\n : ''}\n
    \n \n
    \n
    \n \n \n \n
    \n );\n };\n \n return (\n
    \n {(!props.finding.loaded || props.finding.requestInProgress) ? :\n
    \n \n \n {renderHeader(props.finding.loadedFindingId, props.finding.loadedSchema)}\n {renderGeneralInfoCard(props.finding.loadedFinding)}\n {renderTaxonomyCard(props.finding.loadedFinding)}\n {props.finding.loadedSchema && renderSchemaInfoCard(props.finding.loadedSchema, props.finding.loadedFinding)}\n {renderMediaCard(props.finding.loadedFinding)}\n {renderLocationCard(props.finding.loadedFinding)}\n \n \n \n
    \n }\n
    \n )\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FindingEdit as unknown as React.ComponentClass);\n","import * as React from \"react\";\nimport {Col, Row} from \"reactstrap\";\nimport {useState} from \"react\";\n\ntype Props = {\n animationDuration: number;\n toggleHandler: boolean;\n rightContent: React.ReactNode;\n leftContent: React.ReactNode;\n};\n\nexport const DynamicView = (props: Props) => {\n const [show, setShow] = useState(props.toggleHandler);\n\n const openHandler = React.useCallback(() => {\n setTimeout(() => setShow(true), props.animationDuration);\n }, [props.animationDuration]);\n \n React.useEffect(() => {\n if (props.toggleHandler) {\n if (props.animationDuration > 0){\n openHandler();\n } else {\n setShow(props.toggleHandler);\n }\n } else {\n setShow(props.toggleHandler);\n }\n }, [openHandler, props.animationDuration, props.toggleHandler]);\n\n // const closeHandler = React.useCallback(() => {\n // setTimeout(() => setShow(false), props.animationDuration);\n // }, [props.animationDuration]);\n \n \n return (\n \n \n {props.rightContent}\n \n {show && \n {props.leftContent}\n }\n \n )\n};","import ApiService, {ApiOnRejectedResult} from \"../../services/ApiService/ApiService\";\nimport {AppState} from \"../reducers\";\nimport {processApiResponse} from \"./ErrorActions\";\nimport {FindingSchemaBasicInfoResourceObject} from \"../models/FindingSchemaBasicInfo\";\nimport {normalizeViewPreferences} from \"./ViewPreferencesActions\";\nimport {getConfiguredSchemasApi} from \"../selectors/ApiSelectors\";\nimport {selectActiveTenantId} from \"../selectors/TenantSelectors\";\n\nexport const REQUEST_FINDING_SCHEMAS: string = 'REQUEST_FINDING_SCHEMAS';\nexport const RECEIVE_FINDING_SCHEMAS: string = 'RECEIVE_FINDING_SCHEMAS';\nexport const CANCEL_RECEIVING_FINDING_SCHEMAS: string = 'CANCEL_RECEIVING_FINDING_SCHEMAS';\nexport const FLUSH_FINDING_SCHEMAS: string = 'FLUSH_FINDING_SCHEMAS';\n\nexport const requestFindingSchemas = () => async (dispatch, getState) => {\n if (getState().findingSchemas.loadingInProgress || getState().findingSchemas.loaded) {\n // Don't issue a duplicate request (we already have or are loading the requested data)\n return;\n }\n\n dispatch({type: REQUEST_FINDING_SCHEMAS});\n\n let state: AppState = getState();\n let schemasApi = getConfiguredSchemasApi(state);\n let tenantId = selectActiveTenantId(state);\n\n if(!tenantId) return;\n let basicInfoResponse : Array | void = await ApiService.getSchemaListWithBasicInfo(tenantId, schemasApi)\n .then((response) => {\n return response.data as Array\n })\n .catch((error: ApiOnRejectedResult) => {\n processApiResponse(error, \"Error occured when refreshing schemas basic info\")(dispatch);\n });\n\n let dynamicAttributesResponse = await ApiService.getDynamicFilterableAttributes(tenantId, schemasApi)\n .catch((error: ApiOnRejectedResult) => {\n processApiResponse(error, \"Error occured when refreshing schemas dynamic attributes\")(dispatch);\n });\n\n if (basicInfoResponse && basicInfoResponse && dynamicAttributesResponse) {\n dispatch({\n type: RECEIVE_FINDING_SCHEMAS,\n schemasBasicInfo: basicInfoResponse,\n schemaAttributes: dynamicAttributesResponse\n });\n dispatch(normalizeViewPreferences())\n } else {\n dispatch({type: CANCEL_RECEIVING_FINDING_SCHEMAS});\n }\n};\n\nexport const flushFindingSchemas = () => {\n return {type: FLUSH_FINDING_SCHEMAS};\n};\n\nexport default {\n requestFindingSchemas,\n flushFindingSchemas\n}\n\n","import ViewColumn from \"../models/ViewColumn\";\nimport {StaticFilterableAttributesGroup} from \"../../models/FilterableAttributesModel\";\nimport {AppState} from \"../reducers\";\n\nexport const RESET_VIEW_PREFERENCES: string = 'RESET_VIEW_PREFERENCES';\nexport const SET_COLUMNS_ORDER: string = 'SET_COLUMNS_ORDER';\nexport const SET_COLUMNS_WIDTH: string = 'SET_COLUMNS_WIDTH';\nexport const SET_COLUMNS: string = 'SET_COLUMNS';\nexport const VIEW_PREFERENCES_NORMALIZE: string = 'VIEW_PREFERENCES_NORMALIZE';\n\nexport const LOCAL_STORAGE_KEY = \"UNICATDB_VIEW_PREFERENCES\";\n\nexport const resetPreferences = () => {\n return {type: RESET_VIEW_PREFERENCES};\n};\n\nexport const setColumnsOrder = (newOrder) => {\n return {type: SET_COLUMNS_ORDER, newOrder};\n};\n\nexport const setColumnsWidths = (newWidths) => {\n return {type: SET_COLUMNS_WIDTH, newWidths};\n};\n\nexport const setColumns = (newColumns) => {\n return {type: SET_COLUMNS, newColumns};\n};\n\nexport const normalizeViewPreferences = () => (dispatch, getState: () => AppState) => {\n \n let state = getState();\n if (!state.findingSchemas.loaded) return;\n \n let availableAttributesGroups = StaticFilterableAttributesGroup.concat(state.findingSchemas.schemaAttributes);\n\n // filter-out columns which are not present in the loaded schemas to prevent collisions\n let normalizedColumns = state.viewPreferences.listViewColumns\n .filter((vc: ViewColumn) => availableAttributesGroups.some(s => s.attributes.some(a => a.value === vc.attribute)));\n \n dispatch({type: VIEW_PREFERENCES_NORMALIZE, newColumns: normalizedColumns});\n\n};\n\n\nexport default {}\n\n","import {FindingResourceObject} from '../../../services/GeneratedApiTsClient';\nimport * as React from 'react';\nimport {ReactText} from 'react';\nimport {\n Grid,\n Table,\n TableBandHeader,\n TableColumnResizing,\n TableFixedColumns,\n TableHeaderRow,\n TableRowDetail,\n TableSelection,\n VirtualTable,\n} from '@devexpress/dx-react-grid-bootstrap4';\nimport {\n Column,\n DataTypeProvider,\n IntegratedSelection,\n SelectionState,\n Sorting,\n SortingState,\n} from '@devexpress/dx-react-grid';\nimport {Sort, SortDirection} from '../../../models/SortModel';\nimport {\n FilterableAttribute,\n FilterableAttributesGroup,\n StaticFilterableAttributesGroup,\n} from '../../../models/FilterableAttributesModel';\nimport {WellKnownAttributes} from '../../../models/FindingWellKnownAttributes';\nimport {connect} from 'react-redux';\nimport {FindingTags} from '../../FindingDetail/components/FindingTags';\nimport ViewColumn from '../../../store/models/ViewColumn';\nimport {RouteComponentProps} from 'react-router';\nimport {AppState} from '../../../store/reducers';\nimport {requestFindingSchemas} from '../../../store/actions/FindingSchemasActions';\nimport {setSelectedFindingIds} from '../../../store/actions/ListingActions';\nimport {setColumnsOrder, setColumnsWidths} from '../../../store/actions/ViewPreferencesActions';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {getActiveTenantRoutePrefix} from \"../../../store/selectors/TenantSelectors\";\nimport {push} from \"connected-react-router\";\nimport SpinnerOverlay from \"../../../components/Spinners/SpinnerOverlay\";\n\nconst mapStateToProps = (state: AppState) => ({\n findingSchemas: state.findingSchemas,\n viewPreferences: state.viewPreferences,\n selectedFindingIds: state.listing.selectedFindingIds,\n routePrefix: getActiveTenantRoutePrefix(state)\n});\n\nconst mapDispatchToProps = {\n requestFindingSchemas,\n setColumnsWidths,\n setColumnsOrder,\n setSelectedFindingIds,\n push\n};\ntype ComponentProps = {\n findings: Array;\n onSortingChange: (newSorting: Array) => void;\n}\ntype Props = ReturnType &\n typeof mapDispatchToProps &\n RouteComponentProps & ComponentProps;\n\ntype State = {\n columns: Array;\n sorting: Array;\n columnBands: Array;\n loaded: boolean;\n expandedRowIds: ReactText[] | undefined;\n};\n\nconst attributeAccessor = (row: FindingResourceObject, attributeName: string) => {\n return row.attributes![attributeName];\n};\n\nconst dynamicDataAccessor = (row: FindingResourceObject, attributeName: string) => {\n return row.attributes!.dynamicData![attributeName];\n};\n\nconst taxonomyAccessor = (row: FindingResourceObject, attributeName: string) => {\n return row.attributes!.taxonomyName![attributeName];\n};\n\n\nclass ListView extends React.Component {\n constructor(props, context: any) {\n super(props, context);\n\n this.state = {\n columns: [],\n sorting: [],\n loaded: false,\n columnBands: [],\n expandedRowIds: [],\n };\n\n this.setSorting = this.setSorting.bind(this);\n this.loadColumnBandsFromStore = this.loadColumnBandsFromStore.bind(this);\n this.getColumnWidthsForGrid = this.getColumnWidthsForGrid.bind(this);\n this.ClickableTableRow = this.ClickableTableRow.bind(this);\n }\n\n componentDidMount() {\n if (this.props.findingSchemas.loaded && this.props.viewPreferences.normalized) {\n this.loadColumnBandsFromStore();\n\n this.setState({\n loaded: true,\n columns: this.getColumnsFromStore(),\n });\n } else {\n this.props.requestFindingSchemas();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props !== prevProps) {\n if (this.props.findingSchemas.loaded && this.props.viewPreferences.normalized) {\n this.loadColumnBandsFromStore();\n\n this.setState({\n loaded: this.props.findingSchemas.loaded,\n columns: this.getColumnsFromStore(),\n });\n }\n }\n }\n\n getColumnsFromStore() {\n return this.props.viewPreferences.listViewColumns.map(column => {\n if (column.attribute.startsWith(WellKnownAttributes.dynamicData)) {\n return {\n name: column.attribute,\n title: column.label,\n getCellValue: row => dynamicDataAccessor(row, column.attribute.replace(/^(dynamicData\\.)/, '')),\n };\n } else if (column.attribute.startsWith(\"taxonomyName\")) {\n return {\n name: column.attribute,\n title: column.label,\n getCellValue: row => taxonomyAccessor(row, column.attribute.replace(/^(taxonomyName\\.)/, '')),\n };\n } else {\n return {\n name: column.attribute,\n title: column.label,\n getCellValue: row => attributeAccessor(row, column.attribute),\n };\n }\n });\n }\n\n setSorting(newSorting: Array) {\n this.setState(\n {\n sorting: newSorting,\n },\n () => {\n this.props.onSortingChange(\n newSorting.map((sort: Sorting) => {\n let direction = sort.direction === 'asc' ? SortDirection.SORT_ASC : SortDirection.SORT_DESC;\n return new Sort(sort.columnName, direction);\n }),\n );\n },\n );\n }\n\n getColumnWidthsForGrid() {\n let source = StaticFilterableAttributesGroup.concat(this.props.findingSchemas.schemaAttributes);\n\n let customWidths = {};\n this.props.viewPreferences.listViewColumns.forEach(column => {\n customWidths[column.attribute] = column.width;\n });\n\n let output: any[] = [];\n\n source.forEach((attrGroup: FilterableAttributesGroup) => {\n attrGroup.attributes.forEach((attr: FilterableAttribute) => {\n output.push({\n columnName: attr.value,\n width: customWidths.hasOwnProperty(attr.value) ? customWidths[attr.value] : 100,\n });\n });\n });\n\n return output;\n }\n\n loadColumnBandsFromStore() {\n // working with an existing array in place to keep existing references (ReactGrid does not accept a new array, the changes does not propagate)\n let existingState = this.state.columnBands;\n\n existingState.length = 0; // empty the array, see: https://stackoverflow.com/a/1232046\n\n // temp bands storage\n let bands: {\n [key: string]: TableBandHeader.ColumnBands;\n } = {};\n\n this.props.viewPreferences.listViewColumns.forEach((column: ViewColumn) => {\n if (column.group == null) return;\n\n if (!bands.hasOwnProperty(column.group)) {\n bands[column.group] = {\n title: column.group,\n children: [],\n };\n }\n\n bands[column.group]!.children!.push({\n columnName: column.attribute,\n });\n });\n\n // populate the array again\n for (let band in bands) {\n existingState.push(bands[band]);\n }\n\n // set state just to trigger component re-render\n this.setState({\n columnBands: existingState,\n });\n }\n\n ClickableTableRow = ({row, ...restProps}) => {\n return (\n // @ts-ignore\n this.setSelection(row.id)}\n />\n );\n };\n\n // custom checkbox, cannot figure out multi selection\n CustomCheckBox = ({row, selected, onToggle, children}: any) => {\n return (\n //@ts-ignore\n this.setSelection(row.id)}\n selected={selected}>\n
    \n {selected ? : ''}\n
    \n \n );\n };\n \n CustomHeaderCheckBox = ({disabled, allSelected, someSelected, ...restProps}: any) => {\n const selected = someSelected || allSelected;\n const handleClick = () => {\n if (selected) {\n this.clearSelection()\n } else {\n this.setSelectionAll()\n }\n };\n return (\n \n
    \n {selected ? : null}\n
    \n \n );\n };\n\n setSelectionAll = () => {\n console.log('viewing findings: ', this.props.findings);\n if (this.props.findings){\n const selection = this.props.findings.map(obj => obj.id);\n if (!selection.find(el => el === undefined)) {\n // @ts-ignore\n this.props.setSelectedFindingIds(selection);\n }\n }\n };\n \n clearSelection = () => {\n this.props.setSelectedFindingIds([]);\n };\n \n setSelection = id => {\n const isSelected = this.props.selectedFindingIds.find(selId => selId === id);\n const selection = !isSelected\n ? [...this.props.selectedFindingIds, id]\n : this.props.selectedFindingIds.filter(selectedId => selectedId !== id);\n this.props.setSelectedFindingIds(selection);\n };\n\n getRowId = (row: FindingResourceObject) => {\n return row.id as ReactText;\n };\n\n ClickableTableCell = props => {\n const {column, value, row} = props;\n \n if (column.name === WellKnownAttributes.documentName) {\n return (\n \n \n \n );\n }\n return ;\n };\n\n\n render() {\n if (!this.state.loaded) {\n return ;\n } else {\n return (\n \n \n {/**/}\n\n \n\n \n \n\n \n \n {/* column.attribute)}*/}\n {/* onOrderChange={(nextOrder) => {*/}\n {/* console.log('reordering: ', nextOrder)*/}\n {/* this.props.setColumnsOrder(nextOrder)*/}\n {/* }}*/}\n {/*/>*/}\n \n\n \n \n \n \n \n );\n }\n }\n}\n\nconst TagsFormatter = ({value}) => ;\n\nconst TagsTypeProvider = props => ;\n\nconst DateFormatter = ({value}) => <>{value ? value.toISOString().split('T')[0] : ''};\n\nconst DateTypeProvider = props => ;\n\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ListView as unknown as React.ComponentClass);\n","import * as React from 'react';\nimport {Form, FormGroup, Input, Label} from 'reactstrap';\nimport ReactPaginate from 'react-paginate';\nimport {AppState} from '../../../store/reducers';\nimport {goToPage, setPageSize} from '../../../store/actions/ListingActions';\nimport {connect} from 'react-redux';\n\nconst mapStateToProps = (state: AppState) => ({\n listing: state.listing,\n});\n\nconst mapDispatchToProps = {\n setPageSize: setPageSize,\n goToPage: goToPage,\n};\n\ntype FindingsPaginationProps = ReturnType & typeof mapDispatchToProps;\n\nclass FindingsPagination extends React.Component {\n render() {\n return (\n
    \n\n
    \n
    \n {`${this.props.listing.loadedFindings.length} results `}\n {` of ${this.props.listing.totalRecords}`}\n
    \n
    \n
    \n \n \n {\n this.props.setPageSize(+e.target.value);\n }}\n value={this.props.listing.pageSize}>\n \n \n \n \n \n \n \n
    \n
    \n
    \n '}\n breakLabel={'...'}\n breakClassName={'page-item page-elipsis'}\n containerClassName={'pagination'}\n pageClassName={'page-item'}\n pageLinkClassName={'page-link'}\n activeClassName={'active'}\n previousClassName={'page-item page-prev'}\n previousLinkClassName={'page-link'}\n nextClassName={'page-item page-next'}\n nextLinkClassName={'page-link'}\n />\n
    \n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FindingsPagination as any);\n","import * as React from \"react\";\nimport {FindingSchemaResourceObject, TenantUserRole} from \"../../../services/GeneratedApiTsClient\";\nimport {DropdownItem, DropdownMenu, DropdownToggle, UncontrolledButtonDropdown} from \"reactstrap\";\nimport {connect} from \"react-redux\";\nimport {Link} from \"react-router-dom\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {AppState} from \"../../../store/reducers\";\nimport {requestFindingSchemas} from \"../../../store/actions/FindingSchemasActions\";\nimport {getActiveTenantRoutePrefix} from \"../../../store/selectors/TenantSelectors\";\nimport {isTenantUserInRole} from \"../../../store/selectors/UserSelectors\";\nimport SpinnerInline from \"../../../components/Spinners/SpinnerInline\";\n\nconst mapStateToProps = (state: AppState) => ({\n findingSchemas: state.findingSchemas,\n tenantRoutePrefix: getActiveTenantRoutePrefix(state),\n tenantId: state.tenant.activeTenantId,\n canEdit: isTenantUserInRole(state, {role: [TenantUserRole.OWNER, TenantUserRole.COLLABORATOR]})\n});\n\nconst mapDispatchToProps = {\n requestFindingSchemas,\n};\ntype ComponentProps = { className?: string }\ntype Props = ReturnType\n & typeof mapDispatchToProps\n & ComponentProps\n\nconst NewFindingDropdown = (props: Props) => {\n\n React.useEffect(() => {\n if (props.tenantId) {\n props.requestFindingSchemas()\n }\n }, [props.tenantId])\n\n return (\n \n \n\n \n New Finding\n {/*props.findingSchemas.loaded ? \"New Finding\" : */}\n\n \n \n\n {props.findingSchemas.schemasBasicInfo.length > 0\n ? <>\n With Schema\n {!props.findingSchemas.loaded && }\n\n {props.findingSchemas.schemasBasicInfo.map((schema: FindingSchemaResourceObject) =>\n \n {schema.attributes!.name}\n \n )}\n \n : <>\n (No schemas)\n \n Create new schema\n \n \n }\n\n\n \n \n );\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NewFindingDropdown as unknown as React.ComponentClass);","import * as React from \"react\";\nimport Select from \"react-select\"\ntype Props = {\n onEnterKeyPressed?: (e) => void,\n} & any\nexport const ThemedSelect = ({onEnterKeyPressed, ...rest}: Props) => {\n \n const handleKeyPress = React.useCallback((e) => {\n if (e.key === \"Enter\") {\n onEnterKeyPressed && onEnterKeyPressed(e);\n }\n }, [onEnterKeyPressed])\n \n return (\n ({\n ...theme,\n colors: {\n ...theme.colors,\n primary25: '#D0EDD2',\n primary: '#028F68',\n },\n })}\n onKeyDown={handleKeyPress}\n />\n )\n}","import * as React from \"react\";\nimport {Filter} from \"../../../models/FilterModel\";\nimport {FILTER_OP, SupportedFilterOperationsFor} from \"../../../models/FilterOperationModel\";\nimport {AttributeType, FilterableAttributesGroup} from \"../../../models/FilterableAttributesModel\";\nimport {Button, FormGroup, Input, InputGroup, InputGroupAddon} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {ThemedSelect} from \"../../ThemedSelect\";\n\ntype Props = {\n filter: Filter,\n index: number,\n handleSelectChange: (index: number, name: string, input: { label: string, value: FILTER_OP, type: AttributeType }) => void,\n handleInputChange: (index: number, e: any) => void,\n handleRemove: (index: number) => void,\n onEnterKeyPressed: (e) => void,\n filterableAttributes: Array\n};\n\nconst FilterInputGroup = (props: Props) => {\n\n const attributeOptions = React.useMemo(() => props.filterableAttributes.map(attributeGroup => ({\n label: attributeGroup.name,\n options: attributeGroup.attributes.map(attribute => ({\n label: attribute.name,\n value: attribute.value,\n type: attribute.type\n }))\n })), [props.filterableAttributes])\n\n const defaultAttrOption = React.useMemo(() => {\n let option;\n attributeOptions.forEach(attrOpt => {\n const attr = attrOpt.options.find(opt => opt.value === props.filter.attribute)\n if (attr) {\n option = attr\n }\n });\n return option\n }\n , [attributeOptions, props.filter.attribute]);\n\n\n const operationOptions = React.useMemo(() => props.filter.type ? Object.keys(SupportedFilterOperationsFor[props.filter.type]).map((key) => ({\n label: SupportedFilterOperationsFor[props.filter.type][key].humanReadable,\n value: key\n })) : [], [props.filter]);\n\n let defaultOperationOption = React.useMemo(() => operationOptions.find(opt => opt.value === props.filter.operation), [operationOptions, props.filter.operation]);\n\n return (\n \n \n props.handleSelectChange(props.index, 'attribute', input)}/>\n props.handleSelectChange(props.index, 'operation', input)}/>\n props.handleInputChange(props.index, e)}\n required={true}\n disabled={!props.filter.type}\n onKeyPress={(e) => {\n if (e.key === \"Enter\") {\n props.onEnterKeyPressed(e)\n }\n }}\n />\n \n \n \n \n \n\n )\n};\n\nexport default FilterInputGroup;\n","import {Filter} from \"../../../models/FilterModel\";\nimport * as React from \"react\";\nimport ApiService from \"../../../services/ApiService/ApiService\";\nimport debounce from 'lodash/debounce';\nimport connect from \"react-redux/es/connect/connect\";\nimport {AppState} from \"../../../store/reducers\";\nimport {getConfiguredFindingsApi} from \"../../../store/selectors/ApiSelectors\";\nimport {selectActiveTenantId} from \"../../../store/selectors/TenantSelectors\";\nimport SpinnerInline from \"../../Spinners/SpinnerInline\";\n\nconst mapStateToProps = (state: AppState) => ({\n findingsApi: getConfiguredFindingsApi(state),\n tenantId: selectActiveTenantId(state)\n});\n\nconst mapDispatchToProps = {};\n\n\ntype Props = ReturnType\n & typeof mapDispatchToProps\n & {\n filters: [Filter],\n inverse?: boolean\n}\n\nconst FindingsCount = (props: Props) => {\n\n const [loaded, setLoaded] = React.useState(false);\n const [count, setCount] = React.useState(undefined);\n\n React.useEffect(() => {\n let isMounted = true;\n \n setLoaded(false);\n setCount(undefined);\n\n const refreshCount = async () => ApiService.getFindingsCountMatchingFilter(props.tenantId, props.findingsApi, props.filters).then((data) => {\n \n if (isMounted) {\n setCount(data);\n setLoaded(true);\n }\n })\n debounce(refreshCount, 1000)();\n \n return () => {\n isMounted = false;\n }\n }, [props.filters, props.findingsApi, props.tenantId]);\n return (\n <>\n {!loaded ?\n
    \n \n
    \n :\n
    \n {count}\n
    \n }\n \n\n )\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FindingsCount);","import * as React from \"react\";\nimport Select from \"react-select\"\n\ntype Props = {\n onEnterKeyPressed?: (e) => void,\n} & any\nexport const ThemedMultiSelect = ({onEnterKeyPressed, onChange, ...rest}: Props) => {\n \n const handleKeyPress = React.useCallback((e) => {\n if (e.key === \"Enter\") {\n onEnterKeyPressed && onEnterKeyPressed(e);\n }\n }, [onEnterKeyPressed])\n\n return (\n <>\n ({\n ...theme,\n colors: {\n ...theme.colors,\n primary25: '#D0EDD2',\n primary: '#028F68',\n },\n })}\n onKeyDown={handleKeyPress}\n />\n \n )\n}","import Spinner from \"react-spinkit\";\nimport React from \"react\";\n\nexport default props => (\n
    \n \n
    \n);","import * as React from 'react';\nimport {connect} from 'react-redux';\nimport {Filter} from '../../models/FilterModel';\n\nimport FilterInputGroup from './components/FilterInputGroup';\nimport {\n AttributeType,\n FilterableAttributesGroup,\n StaticFilterableAttributesGroup\n} from '../../models/FilterableAttributesModel';\nimport {WellKnownAttributes} from '../../models/FindingWellKnownAttributes';\nimport {FILTER_OP, SupportedFilterOperationsFor} from '../../models/FilterOperationModel';\nimport FindingsCount from './components/FindingsCount';\nimport {Button, Form, Modal, ModalBody, ModalFooter, ModalHeader,} from 'reactstrap';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {AppState} from '../../store/reducers';\nimport {requestFindingSchemas} from '../../store/actions/FindingSchemasActions';\nimport {clearFilters, setFilters} from '../../store/actions/FilterActions';\nimport {ThemedMultiSelect} from \"../ThemedMultiSelect\";\nimport SpinnerRibbon from \"../Spinners/SpinnerRibbon\";\n\nconst mapStateToProps = (state: AppState) => ({\n filter: state.filter,\n findingSchemas: state.findingSchemas,\n});\n\nconst mapDispatchToProps = {\n requestFindingSchemas,\n clearFilters,\n setFilters,\n};\n\ntype ComponentProps = {\n show: boolean;\n onClose: () => void;\n}\n\ntype Props = ReturnType &\n typeof mapDispatchToProps & ComponentProps;\n\ntype FilterState = {\n schemaFilterValue: Array<{ value: string, label: string }>;\n attributeFilters: Array;\n processedFilters: Array;\n};\n\ntype State = FilterState & {\n loaded: boolean;\n humanReadableFilters: { attribute: string, operation: string, value: string }[]\n};\n\ntype FilterableSchemas = {\n [key: string]: string;\n};\nconst defaultSchemaValue = {\n value: \"\",\n label: \"ANY\"\n};\n\nclass FilterEditorModal extends React.Component {\n // helper variable to store attibutes beeing offerd by the filter UI\n filterableAttributes: Array;\n\n private filterableSchemaIds: FilterableSchemas = {};\n\n constructor(props: Props, context) {\n super(props, context);\n let filterState = this.getFilterStateFromStore(this.props.filter.filters);\n this.state = {\n loaded: false,\n schemaFilterValue: filterState.schemaFilterValue ?? [],\n attributeFilters: filterState.attributeFilters,\n processedFilters: this.props.filter.filters,\n humanReadableFilters: [],\n };\n this.filterableAttributes = StaticFilterableAttributesGroup;\n }\n\n async componentDidUpdate(prevProps) {\n if (this.props === prevProps) return;\n await this.refreshFilterableAttributes();\n }\n\n async refreshFilterableAttributes() {\n if (!this.props.findingSchemas.loaded) {\n this.setState({\n loaded: false,\n });\n return;\n }\n\n this.filterableAttributes = StaticFilterableAttributesGroup;\n\n // get human-readable attributes\n let dynamicAttributes = this.props.findingSchemas.schemaAttributes;\n this.filterableAttributes = this.filterableAttributes.concat(dynamicAttributes);\n\n this.filterableSchemaIds = {};\n let schemasResponse = this.props.findingSchemas.schemasBasicInfo;\n schemasResponse.forEach(schema => {\n // @ts-ignore\n this.filterableSchemaIds[schema.id] = schema.attributes.name;\n });\n\n this.setState({\n loaded: true,\n });\n }\n\n handleOnOpened = () => {\n this.props.requestFindingSchemas();\n let filterState = this.getFilterStateFromStore(this.props.filter.filters);\n\n this.setState(\n {\n attributeFilters: filterState.attributeFilters,\n schemaFilterValue: filterState.schemaFilterValue,\n processedFilters: this.props.filter.filters,\n },\n this.refreshFilterableAttributes,\n );\n };\n\n handleOnClosed = () => {\n this.setState(\n {\n loaded: false,\n },\n () => {\n this.filterableAttributes = StaticFilterableAttributesGroup;\n },\n );\n };\n\n handleSaveAndClose = (e) => {\n e.preventDefault();\n this.saveToStore();\n this.props.onClose();\n };\n\n handleClearAndSave = () => {\n this.clearFilters(() => {\n this.saveToStore();\n });\n };\n\n handleClear = () => {\n this.clearFilters();\n };\n\n setHumanReadableFilters = () => {\n\n }\n selectChanged = (filterIndex: number, name: string, input: { label: string, value: FILTER_OP, type: AttributeType }) => {\n const attributeName = name;\n const attributeValue = input.value;\n const attrType = name === 'attribute' ? input.type : undefined;\n this.setState((prevState: State) => {\n // create a copy\n let oldFilter = prevState.attributeFilters[filterIndex];\n let newFilter: Filter = new Filter(oldFilter.attribute, oldFilter.operation, oldFilter.value, oldFilter.type);\n console.log({oldFilter, newFilter})\n switch (attributeName) {\n case 'operation':\n newFilter.operation = attributeValue;\n break;\n case 'attribute':\n newFilter.attribute = attributeValue;\n newFilter.type = attrType!;\n\n // change operation, if the currently selected one is not available for selected type\n if (attrType && !SupportedFilterOperationsFor[attrType].hasOwnProperty(newFilter.operation)) {\n newFilter.operation = Object.keys(SupportedFilterOperationsFor[attrType])[0] as FILTER_OP;\n }\n\n break;\n case 'value':\n newFilter.value = attributeValue;\n break;\n default:\n console.error('Unsupported filter property');\n }\n\n prevState.attributeFilters[filterIndex] = newFilter;\n\n return {\n attributeFilters: prevState.attributeFilters,\n processedFilters: this.processFilters(prevState.attributeFilters, this.state.schemaFilterValue),\n };\n });\n }\n\n inputChanged = (filterIndex, event) => {\n let attributeValue = event.target.value;\n this.setState((prevState: State) => {\n let oldFilter = prevState.attributeFilters[filterIndex];\n let newFilter: Filter = new Filter(oldFilter.attribute, oldFilter.operation, oldFilter.value, oldFilter.type);\n newFilter.value = attributeValue\n prevState.attributeFilters[filterIndex] = newFilter;\n return {\n attributeFilters: prevState.attributeFilters,\n processedFilters: this.processFilters(prevState.attributeFilters, this.state.schemaFilterValue),\n };\n });\n };\n\n schemaFilterInputChanged = (values) => {\n\n\n if (values.length > 1 && values.some((v) => {\n return v.label === \"ANY\"\n })) {\n values.splice(values.findIndex((v) =>\n v.label === \"ANY\"\n ), 1);\n } else if (values.length === 1 && values.some(v => v.label === \"ANY\")) {\n values = []\n }\n\n this.setState({\n schemaFilterValue: values,\n processedFilters: this.processFilters(this.state.attributeFilters, values),\n });\n };\n\n clearSchemaFilter = () => {\n this.setState({\n schemaFilterValue: [],\n processedFilters: this.processFilters(this.state.attributeFilters, []),\n });\n };\n\n addFilter = () => {\n this.setState(prevState => {\n let newAttributeFilters = [...prevState.attributeFilters, new Filter()];\n return {\n attributeFilters: newAttributeFilters,\n processedFilters: this.processFilters(newAttributeFilters, this.state.schemaFilterValue),\n };\n });\n };\n\n removeFilter = index => {\n this.setState((prevState: State) => {\n prevState.attributeFilters.splice(index, 1);\n return {\n attributeFilters: prevState.attributeFilters,\n processedFilters: this.processFilters(prevState.attributeFilters, this.state.schemaFilterValue),\n };\n });\n };\n removeSchemaFilter = value => {\n this.setState((prevState: State) => {\n prevState.schemaFilterValue.splice(prevState.schemaFilterValue.findIndex((item) => {\n return item.value === value\n }), 1);\n return {\n attributeFilters: prevState.attributeFilters,\n schemaFilterValue: prevState.schemaFilterValue,\n processedFilters: this.processFilters(prevState.attributeFilters, prevState.schemaFilterValue),\n };\n });\n }\n\n clearFilters = (callback = () => {\n }) => {\n this.setState(\n {\n attributeFilters: [],\n schemaFilterValue: [],\n processedFilters: [],\n },\n callback,\n );\n };\n\n getFilterStateFromStore = (filters: Array): FilterState => {\n let attributeFilters = filters.slice();\n let schemaFilterValue: Array<{ value: string, label: string }> = [];\n\n const labels = this.getSchemaOptions()\n const getLabel = (value: string): string => {\n const label = labels.find((item) => item.value === value)\n return label ? label.label : \"\";\n }\n\n for (let i = attributeFilters.length - 1; i >= 0; i--) {\n\n if (attributeFilters[i].attribute === WellKnownAttributes.schemaId) {\n attributeFilters[i].value.split(\",\").forEach((item) => {\n schemaFilterValue.push({value: item, label: getLabel(item)})\n });\n attributeFilters.splice(i, 1);\n }\n }\n\n return {\n attributeFilters: attributeFilters,\n schemaFilterValue: schemaFilterValue,\n processedFilters: filters,\n };\n };\n\n processFilters = (attributeFilters: Array, schemaFilterValue: Array<{ value: string, label: string }>): Array => {\n // make a copy, remove incomplete attributeFilters in the process\n let processedFilters = attributeFilters.filter((filterUnderTest: Filter) => {\n return filterUnderTest.value !== '' && filterUnderTest.attribute !== '';\n });\n if (schemaFilterValue) {\n let filterValues: Array = schemaFilterValue.map((item) => {\n return item.value;\n })\n filterValues.length > 0 && processedFilters.push(new Filter(WellKnownAttributes.schemaId,\n filterValues.length > 1 ? FILTER_OP.isIn : FILTER_OP.eq, filterValues.join(\",\")));\n }\n\n return processedFilters;\n };\n\n saveToStore = () => {\n this.props.setFilters(this.state.processedFilters);\n };\n\n getSchemaOptions = () => [defaultSchemaValue, ...Object.keys(this.filterableSchemaIds).map((key) => ({\n value: key,\n label: this.filterableSchemaIds[key]\n }))]\n\n render() {\n return (\n \n \n Filter findings\n \n \n {!this.state.loaded ? (\n \n ) : (\n
    \n

    Document Type

    \n \n
    \n\n
    \n Column Name\n Filter\n Value\n
    \n\n {this.state.attributeFilters.map((filter, index) => {\n return (\n \n );\n })}\n\n
    \n \n \n \n Clear Filters\n \n
    \n\n \n )}\n
    \n \n \n
    \n items match\n \n \n
    \n
    \n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterEditorModal as unknown as React.ComponentClass);\n","import * as React from 'react';\nimport FilterEditor from '../../../components/FilterEditor/FilterEditor';\nimport {Button} from 'reactstrap';\nimport {AppState} from '../../../store/reducers';\nimport {clearFilters} from '../../../store/actions/FilterActions';\nimport {connect} from 'react-redux';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {SupportedFilterOperations} from '../../../models/FilterOperationModel';\nimport {Filter} from '../../../models/FilterModel';\nimport {WellKnownAttributes} from '../../../models/FindingWellKnownAttributes';\n\nconst mapStateToProps = (state: AppState) => ({\n filter: state.filter,\n findingSchema: state.findingSchemas,\n});\n\nconst mapDispatchToProps = {\n clearFilters: clearFilters,\n};\ntype ComponentProps = { className?: string };\ntype SearchBarProps = ReturnType & typeof mapDispatchToProps & ComponentProps;\ntype State = {\n showModal: boolean;\n};\n\nclass SearchBar extends React.Component {\n constructor(props: SearchBarProps) {\n super(props);\n this.state = {\n showModal: false,\n };\n }\n\n toggleModal = () => {\n this.setState(prevState => ({showModal: !prevState.showModal}));\n };\n\n renderSelectedFilter = (filter: Filter, index: number) => {\n const attribute = filter.attribute === WellKnownAttributes.schemaId ? 'Schema' : filter.attribute;\n\n let value = \"\";\n if (filter.attribute === WellKnownAttributes.schemaId) {\n value = filter.value.split(\",\").map((item) => {\n return this.props.findingSchema.schemasBasicInfo.find(schema => schema.id === item).attributes.name;\n }).join(\", \")\n } else {\n value = filter.value;\n }\n\n return (\n
    \n
    {`${attribute} ${\n SupportedFilterOperations[filter.operation].humanReadable\n }`}
    \n
    {value}
    \n
    \n );\n };\n\n render() {\n return (\n \n \n
    \n \n {this.props.filter.filters && this.props.filter.filters.length === 0 && (\n Filter findings\n )}\n
    \n {this.props.filter.filters.map((filter, index) => this.renderSelectedFilter(filter, index))}\n
    \n
    \n
    Options
    \n
    \n {this.props.filter.filters && this.props.filter.filters.length > 0 && (\n \n )}\n \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchBar as unknown as React.ComponentClass);\n","import React from \"react\";\nimport {AppState} from \"../../../store/reducers\";\nimport {connect} from \"react-redux\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {downloadListing, DownloadTarget} from \"../../../store/actions/ExportActions\";\nimport {DropdownItem, DropdownMenu, DropdownToggle, UncontrolledButtonDropdown} from \"reactstrap\";\nimport {openCodegenModal} from \"../../../store/actions/GUIActions\";\nimport SpinnerInline from \"../../../components/Spinners/SpinnerInline\";\n\nconst mapStateToProps = (state: AppState) => ({\n export: state.export,\n});\n\nconst mapDispatchToProps = {\n downloadListing,\n openCodegenModal\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps;\n\nconst ExportToolbarButton = (props: Props) =>\n \n \n {props.export.inProgress\n ? \n : \n }\n Export\n \n \n props.downloadListing(DownloadTarget.CsvSemicolon)}>\n \n Download CSV\n \n props.downloadListing(DownloadTarget.Clipboard)}>\n \n To clipboard\n \n props.openCodegenModal(\"LISTING\")}>\n \n Generate API script\n \n \n \nexport default connect(mapStateToProps, mapDispatchToProps)(ExportToolbarButton as any);","import React, {PureComponent} from 'react';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {AppState} from '../../../store/reducers';\nimport {connect} from 'react-redux';\nimport {RouteComponentProps} from 'react-router';\nimport {deleteFinding, duplicateFinding} from '../../../store/actions/FindingActions';\nimport {processApiResponse} from \"../../../store/actions/ErrorActions\";\nimport ExportToolbarButton from \"./ExportToolbarButton\";\nimport {ModalConfirm} from \"../../../components/ModalConfirm\";\nimport {isTenantUserInRole} from \"../../../store/selectors/UserSelectors\";\nimport {TenantUserRole} from \"../../../services/GeneratedApiTsClient/models\";\n\nconst mapStateToProps = (state: AppState) => ({\n listing: state.listing,\n filter: state.filter,\n canEdit: isTenantUserInRole(state, {role: [TenantUserRole.OWNER, TenantUserRole.COLLABORATOR]})\n});\n\nconst mapDispatchToProps = {\n duplicateFinding,\n deleteFinding,\n processApiResponse,\n};\n\ninterface ToolbarActionsState {\n visibleModal: boolean;\n}\n\ntype Props = ReturnType & typeof mapDispatchToProps & RouteComponentProps;\n\nclass ToolbarActions extends PureComponent {\n\n constructor(props) {\n super(props)\n this.state = {\n visibleModal: false,\n }\n }\n\n toggleVisibleModal = () => {\n this.setState((state) => ({visibleModal: !state.visibleModal}));\n };\n\n render() {\n const noSelection = this.props.listing.selectedFindingIds.length === 0;\n return (\n
    \n \n {\n if (!noSelection && this.props.canEdit) {\n this.toggleVisibleModal();\n }\n }}>\n \n Delete\n
    \n {\n this.props.listing.selectedFindingIds.forEach(id => this.props.deleteFinding(id, true, true));\n this.toggleVisibleModal();\n }}\n onClickCancel={this.toggleVisibleModal}/>\n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ToolbarActions as any);\n","export default class ViewColumn {\n group?: string;\n attribute: string;\n label: string;\n width: number;\n\n constructor(attribute: string, label: string, group?: string) {\n this.group = group;\n this.attribute = attribute;\n this.label = label;\n this.width = 150;\n }\n}","import * as React from 'react';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {Button, Modal, ModalBody, ModalFooter, ModalHeader} from 'reactstrap';\nimport {\n FilterableAttribute,\n FilterableAttributesGroup,\n StaticFilterableAttributesGroup,\n} from '../../../../models/FilterableAttributesModel';\nimport Select from 'react-select';\nimport {connect} from 'react-redux';\nimport ViewColumn from '../../../../store/models/ViewColumn';\nimport {AppState} from '../../../../store/reducers';\nimport {requestFindingSchemas} from '../../../../store/actions/FindingSchemasActions';\nimport {resetPreferences, setColumns} from '../../../../store/actions/ViewPreferencesActions';\nimport {WellKnownAttributes} from \"../../../../models/FindingWellKnownAttributes\";\nimport {ItemInterface, ReactSortable} from \"react-sortablejs\";\nimport SpinnerRibbon from \"../../../../components/Spinners/SpinnerRibbon\";\n\ntype SelectOption = {\n label: string;\n value: string | Array;\n groupLabel?: string;\n};\n\ntype SelectOptgroup = {\n label: string;\n options: Array;\n};\n\nconst mapStateToProps = (state: AppState) => ({\n findingSchemas: state.findingSchemas,\n viewPreferences: state.viewPreferences,\n splitMode: state.gui.splitMode,\n});\n\nconst mapDispatchToProps = {\n requestFindingSchemas,\n setColumns,\n resetPreferences,\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps & {};\n\ntype SortableViewColumn = ItemInterface & {\n column: ViewColumn\n}\n\ntype State = {\n isShown: boolean;\n loaded: boolean;\n listViewColumns: Array;\n optionsForSelect: Array;\n};\n\nconst MANDATORY_COLUMNS: Array = [WellKnownAttributes.documentName];\n\n\nclass ColumnsChooser extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isShown: false,\n loaded: false,\n listViewColumns: [],\n optionsForSelect: [],\n };\n\n this.toggleModal = this.toggleModal.bind(this);\n this.handleOnOpened = this.handleOnOpened.bind(this);\n this.handleOnClosed = this.handleOnClosed.bind(this);\n this.handleApply = this.handleApply.bind(this);\n this.addColumn = this.addColumn.bind(this);\n }\n\n refreshInternalState() {\n if (!this.props.findingSchemas.loaded) {\n this.setState({\n loaded: false,\n });\n return;\n }\n\n this.setState(\n {\n listViewColumns: this.props.viewPreferences.listViewColumns.map((c:ViewColumn): SortableViewColumn => {\n return {\n column: c,\n id: c.group+\"-\"+c.attribute\n }\n }),\n loaded: true,\n },\n () => {\n this.refreshOptionsForSelect();\n },\n );\n }\n\n async componentDidUpdate(prevProps) {\n if (this.props === prevProps) return;\n this.refreshInternalState();\n }\n\n toggleModal() {\n this.setState({\n isShown: !this.state.isShown,\n });\n }\n\n handleOnOpened() {\n this.props.requestFindingSchemas();\n this.refreshInternalState();\n }\n\n handleOnClosed() {\n //console.log(\"chooser closed\");\n this.setState({\n loaded: false,\n listViewColumns: [],\n optionsForSelect: [],\n });\n }\n\n handleApply() {\n this.props.setColumns(this.state.listViewColumns.map(c => c.column));\n this.setState({\n isShown: false,\n });\n }\n\n isMandatory(attribute: string) {\n return MANDATORY_COLUMNS.includes(attribute);\n }\n\n removeColumn(attribute: string) {\n\n if (this.isMandatory(attribute)) return;\n\n this.setState(\n {\n listViewColumns: this.state.listViewColumns.filter((column: SortableViewColumn) => column.column.attribute !== attribute),\n },\n () => {\n this.refreshOptionsForSelect();\n },\n );\n }\n\n addColumn(newColumn: SelectOption) {\n let addedColumns: Array = [];\n\n if (Array.isArray(newColumn.value)) {\n addedColumns = newColumn.value.map((col: SelectOption) => {\n return new ViewColumn(col.value as string, col.label, col.groupLabel);\n });\n } else {\n addedColumns = [new ViewColumn(newColumn.value, newColumn.label, newColumn.groupLabel)];\n }\n\n // remove allready present columns\n var that = this;\n let addedSortableColumns = addedColumns.filter((column) => {\n return that.state.listViewColumns.find((x: SortableViewColumn) => x.column.attribute === column.attribute) === undefined;\n }).map((c:ViewColumn): SortableViewColumn => {\n return {\n column: c,\n id: c.group+\"-\"+c.attribute\n }\n });\n\n this.setState(\n {\n listViewColumns: this.state.listViewColumns.concat(addedSortableColumns),\n },\n () => {\n this.refreshOptionsForSelect();\n },\n );\n }\n\n refreshOptionsForSelect() {\n let source = StaticFilterableAttributesGroup.concat(this.props.findingSchemas.schemaAttributes);\n let that = this;\n\n this.setState({\n optionsForSelect: source.map((attrGroup: FilterableAttributesGroup) => {\n let allOptionsDisabled: boolean = true;\n let groupOptions: any = attrGroup.attributes.map((attr: FilterableAttribute) => {\n let disabled: boolean = that.state.listViewColumns.find(x => x.column.attribute === attr.value) !== undefined;\n // @ts-ignore\n allOptionsDisabled &= disabled;\n\n return {\n label: attr.name,\n value: attr.value,\n // groupLabel: (attrGroup !== StaticFilterableAttributesGroup)? attrGroup.name : null,\n groupLabel: attrGroup.name,\n isDisabled: disabled,\n };\n });\n\n return {\n label: attrGroup.name,\n options: [\n {\n label: '(ALL OF ' + attrGroup.name + ')',\n value: groupOptions,\n groupLabel: attrGroup.name,\n isDisabled: allOptionsDisabled,\n },\n ].concat(groupOptions),\n };\n }),\n });\n }\n\n render() {\n return (\n \n \n\n \n \n Customize table\n \n \n {!this.state.loaded ? (\n \n ) : (\n
    \n
    \n
    Add Column
    \n ({\n ...theme,\n colors: {\n ...theme.colors,\n primary25: '#D0EDD2',\n primary: '#028F68',\n },\n })}\n onChange={this.addColumn}\n options={this.state.optionsForSelect}\n value={null} // do not keep the selected value selected\n //autoFocus={true}\n />\n\n
    \n\n this.setState({ listViewColumns: newState })}\n handle={\".sortable-handle\"}\n >\n {this.state.listViewColumns.map((column: SortableViewColumn, index) => {\n const previous = index > 0 ? this.state.listViewColumns[index-1] : undefined;\n const renderGroupLabel = !previous || previous.column.group !== column.column.group;\n \n return (\n
    \n {renderGroupLabel &&
    {column.column.group}
    }\n
    \n
    \n \n
    \n
    \n {column.column.label}\n
    \n \n
    \n
    \n );\n })}\n\n \n
    \n
    \n )}\n
    \n \n {\n this.props.resetPreferences();\n }}\n className=\"btn-hover-light-link\">\n \n Restore default\n \n
    \n \n \n
    \n
    \n \n
    \n );\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnsChooser as any);\n","import NewFindingDropdown from '../components/NewFindingDropdown';\nimport * as React from 'react';\nimport {AppState} from '../../../store/reducers';\nimport {connect} from 'react-redux';\nimport SearchBar from './SearchBar';\nimport ToolbarActions from \"../components/ToolbarActions\";\nimport ColumnsChooser from \"../components/ColumnsChooser/ColumnsChooser\";\n\nconst mapStateToProps = (state: AppState) => ({\n gui: state.gui,\n});\n\nconst mapDispatchToProps = {};\n\ntype FindingsToolbarProps = ReturnType & typeof mapDispatchToProps;\n\nclass FindingsToolbar extends React.Component {\n render() {\n return (\n
    \n
    \n \n \n \n \n
    \n \n \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FindingsToolbar as any);\n","import * as React from \"react\";\nimport {useEffect, useLayoutEffect, useRef, useState} from \"react\";\n\nimport {AppState} from \"../../../store/reducers\";\nimport connect from \"react-redux/es/connect/connect\";\n\nimport * as am4core from \"@amcharts/amcharts4/core\";\nimport * as am4maps from \"@amcharts/amcharts4/maps\";\nimport {MapChart} from \"@amcharts/amcharts4/maps\";\nimport am4geodata_worldLow from \"@amcharts/amcharts4-geodata/worldLow\";\nimport am4themes_animated from \"@amcharts/amcharts4/themes/animated\";\nimport {useSelector} from \"react-redux\";\nimport {Filter} from \"../../../models/FilterModel\";\nimport ApiService from \"../../../services/ApiService/ApiService\";\nimport {getConfiguredChartsApi} from \"../../../store/selectors/ApiSelectors\";\nimport {selectActiveTenantId} from \"../../../store/selectors/TenantSelectors\";\n\nconst mapStateToProps = (state: AppState) => ({\n globalFilters: state.filter.filters,\n chartsApi: getConfiguredChartsApi(state),\n tenantId: selectActiveTenantId(state)\n});\n\nconst mapDispatchToProps = {};\n\ntype Props = ReturnType\n & typeof mapDispatchToProps\n & {}\n\ntype HeatmapDataItem = {\n lat: number;\n lng: number;\n count: number;\n}\n// see: https://gist.github.com/xposedbones/75ebaef3c10060a3ee3b246166caab56\nconst mapNumberToInterval = (number, in_min, in_max, out_min, out_max) =>\n (number - in_min) * (out_max - out_min) / (in_max - in_min) + out_min\n\nconst Heatmap = (props: Props) => {\n // references\n const chartRef = useRef(undefined);\n const seriesRef = useRef(undefined);\n\n //const [loading, setLoading] = useState(true);\n const [data, setData] = useState>([]);\n const filters = useSelector>(state => state.filter.filters);\n\n // settings\n const CIRCLE_RADIUS_MIN = 2;\n const CIRCLE_RADIUS_MAX = 10;\n\n // re-calculate data on filters change\n useEffect(() => {\n let isMounted = true;\n //setLoading(true);\n\n\n // fetch data\n if(!props.tenantId)return;\n props.chartsApi.apiChartsFindingsMinimap({\n tenantId: props.tenantId,\n filter: ApiService.buildFilterQuery(filters)\n }).then(miniMapData => {\n // map to amcharts compatible format\n const filteredMapData: HeatmapDataItem[] = miniMapData.data\n .filter(i => i.count && i.count > 0 && i.coordinates && i.coordinates.lat && i.coordinates.lng)\n .map(i => ({\n lat: i.coordinates!.lat,\n lng: i.coordinates!.lng,\n count: i.count!,\n }))\n // normalize count to defined radius range\n const counts = filteredMapData.map(i => i.count);\n const normalizedMapData = filteredMapData.map(i => {\n i.count = mapNumberToInterval(\n i.count,\n Math.min.apply(null, counts),\n Math.max.apply(null, counts),\n CIRCLE_RADIUS_MIN,\n CIRCLE_RADIUS_MAX);\n return i;\n })\n if (isMounted) {\n // replace data\n setData(normalizedMapData);\n //setLoading(false);\n }\n })\n\n\n return () => {\n isMounted = false;\n }\n }, [filters, props.chartsApi, props.tenantId]);\n\n // replace chart series data on change\n useLayoutEffect(() => {\n if (!seriesRef.current) return;\n seriesRef.current.data = data;\n }, [data])\n\n\n useLayoutEffect(() => {\n am4core.useTheme(am4themes_animated);\n\n // Create map instance\n let chart = am4core.create(\"heatmap-chartdiv\", am4maps.MapChart);\n\n // Set map definition\n chart.geodata = am4geodata_worldLow;\n chart.projection = new am4maps.projections.Miller();\n let polygonSeries = chart.series.push(new am4maps.MapPolygonSeries());\n\n // Exclude Antartica\n polygonSeries.exclude = [\"AQ\"];\n\n // Make map load polygon (like country names) data from GeoJSON\n polygonSeries.useGeodata = true;\n\n // Configure series\n let polygonTemplate = polygonSeries.mapPolygons.template;\n polygonTemplate.polygon.fillOpacity = 0.6;\n\n // Add image series\n let imageSeries = new am4maps.MapImageSeries();\n imageSeries.mapImages.template.propertyFields.longitude = \"lng\";\n imageSeries.mapImages.template.propertyFields.latitude = \"lat\";\n\n let circle = imageSeries.mapImages.template.createChild(am4core.Circle);\n circle.fill = am4core.color(\"#00603D\");\n circle.fillOpacity = 0.5;\n circle.propertyFields.radius = \"count\";\n circle.filters.push(new am4core.BlurFilter());\n\n let circle_ghost = imageSeries.mapImages.template.createChild(am4core.Circle);\n // circle_ghost.radius = 3;\n circle_ghost.propertyFields.radius = \"count\";\n circle_ghost.fill = am4core.color(\"#00603D\");\n\n // animation - blink ghost once data appears on map\n circle_ghost.events.on(\"inited\", function (event) {\n animateBullet(event.target);\n })\n\n function animateBullet(circle) {\n //let animation = circle.animate([{ property: \"scale\", from: 1, to: 5 }, { property: \"opacity\", from: 1, to: 0 }], 1000, am4core.ease.circleOut);\n\n // uncomment to animate in loop\n\n // animation.events.on(\"animationended\", function(event){\n // animateBullet(event.target.object);\n // })\n }\n\n chart.series.push(imageSeries);\n\n // add reference\n chartRef.current = chart;\n seriesRef.current = imageSeries;\n\n return () => {\n chart.dispose();\n };\n }, []);\n\n return (\n <>\n {/*{loading && }*/}\n
    \n \n );\n}\nexport default connect(mapStateToProps, mapDispatchToProps)(Heatmap);","import * as React from 'react';\nimport * as am4core from '@amcharts/amcharts4/core';\nimport * as am4charts from '@amcharts/amcharts4/charts';\nimport {useLayoutEffect, useRef} from \"react\";\n\nexport type ColumnChartGraphData = {\n name: string;\n value: number;\n color?: string;\n}[];\n\ntype Props = {\n data: ColumnChartGraphData;\n title?: string;\n showLabels: boolean;\n disableGridLines?: boolean;\n};\n\nconst ColumnChartGraph = (props: Props) => {\n \n const chartRef = useRef(undefined);\n const seriesRef = useRef(undefined);\n\n // replace chart series data on change\n useLayoutEffect(() => {\n if(!chartRef.current) return;\n chartRef.current.data = props.data;\n },[props.data])\n\n useLayoutEffect(() => {\n let chart = am4core.create('column-container', am4charts.XYChart);\n\n chart.data = props.data;\n \n if (props.title){\n // enable title\n let title = chart.titles.create();\n title.text = props.title;\n title.fontSize = 10;\n }\n\n let categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\n categoryAxis.dataFields.category = 'name';\n categoryAxis.renderer.grid.template.location = 0;\n categoryAxis.renderer.minGridDistance = 10;\n categoryAxis.renderer.labels.template.disabled = !props.showLabels;\n categoryAxis.renderer.grid.template.disabled = !!props.disableGridLines;\n categoryAxis.renderer.line.disabled = !!props.disableGridLines;\n\n let label = categoryAxis.renderer.labels.template;\n label.rotation = -45;\n label.horizontalCenter = \"right\";\n label.verticalCenter = \"top\";\n label.truncate = true;\n label.maxWidth = 200;\n\n let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\n valueAxis.renderer.labels.template.disabled = !props.showLabels;\n valueAxis.renderer.grid.template.disabled = !!props.disableGridLines;\n // Create series\n let series = chart.series.push(new am4charts.ColumnSeries());\n series.dataFields.valueY = 'value';\n series.dataFields.categoryX = 'name';\n series.name = 'Series';\n series.columns.template.tooltipText = '{categoryX}: [bold]{valueY}[/]';\n series.columns.template.fillOpacity = 0.8;\n series.columns.template.propertyFields.fill = 'color';\n series.columns.template.propertyFields.stroke = 'color';\n\n let columnTemplate = series.columns.template;\n columnTemplate.strokeWidth = 2;\n columnTemplate.strokeOpacity = 1;\n\n chartRef.current = chart;\n seriesRef.current = series;\n\n return () => {\n chart.dispose();\n };\n },[props.data, props.disableGridLines, props.showLabels, props.title]);\n\n return
    ;\n}\n\nexport default ColumnChartGraph;\n","import * as React from 'react';\nimport * as am4core from '@amcharts/amcharts4/core';\nimport * as am4charts from '@amcharts/amcharts4/charts';\nimport {useLayoutEffect, useRef} from \"react\";\nimport {PieChart} from \"@amcharts/amcharts4/charts\";\n\nexport type PieChartGraphData = {\n name: string;\n value: number;\n color?: string;\n}[];\n\ntype PieChartGraphProps = {\n data: PieChartGraphData;\n hideLabels?: boolean;\n title?: string;\n};\n\nconst PieChartGraph = (props: PieChartGraphProps) => {\n\n const chartRef = useRef(undefined);\n const seriesRef = useRef(undefined);\n\n // replace chart series data on change\n useLayoutEffect(() => {\n if(!chartRef.current) return;\n chartRef.current.data = props.data;\n },[props.data])\n\n useLayoutEffect(() => {\n let chart = am4core.create('piechart-container', am4charts.PieChart);\n // Set inner radius\n chart.innerRadius = am4core.percent(25);\n chart.radius = am4core.percent(50);\n\n if (props.title){\n // enable title\n let title = chart.titles.create();\n title.text = props.title;\n title.fontSize = 10;\n }\n\n // chart.data = props.data;\n\n let pieSeries = chart.series.push(new am4charts.PieSeries());\n pieSeries.dataFields.category = 'name';\n pieSeries.dataFields.value = 'value';\n pieSeries.slices.template.stroke = am4core.color('#fff');\n pieSeries.slices.template.strokeWidth = 2;\n pieSeries.slices.template.strokeOpacity = 1;\n pieSeries.slices.template.propertyFields.fill = \"color\";\n\n pieSeries.labels.template.maxWidth = 130;\n pieSeries.labels.template.wrap = true;\n // pieSeries.alignLabels = false;\n pieSeries.labels.template.text = \"{category}\";\n \n if (props.hideLabels){\n pieSeries.labels.template.disabled = true;\n pieSeries.ticks.template.disabled = true;\n }\n\n // This creates initial animation\n pieSeries.hiddenState.properties.opacity = 1;\n pieSeries.hiddenState.properties.endAngle = -90;\n pieSeries.hiddenState.properties.startAngle = -90;\n\n chart.data = props.data;\n \n chartRef.current = chart;\n seriesRef.current = pieSeries;\n\n return () => {\n chart.dispose();\n };\n },[props.data, props.hideLabels, props.title]);\n\n return
    ;\n}\n\nexport default PieChartGraph;\n","import * as React from 'react';\nimport {useEffect, useState} from 'react';\nimport {AppState} from \"../../../store/reducers\";\nimport {openGraphView, openMapView} from \"../../../store/actions/GUIActions\";\nimport {connect} from \"react-redux\";\nimport ColumnChartGraph, {ColumnChartGraphData} from \"../../../components/Graphs/ColumnChartGraph\";\nimport PieChartGraph, {PieChartGraphData} from \"../../../components/Graphs/PieChartGraph\";\nimport ApiService from \"../../../services/ApiService/ApiService\";\nimport {getConfiguredChartsApi} from \"../../../store/selectors/ApiSelectors\";\nimport {selectActiveTenantId} from \"../../../store/selectors/TenantSelectors\";\nimport SpinnerOverlay from \"../../../components/Spinners/SpinnerOverlay\";\n\nconst mapStateToProps = (state: AppState) => ({\n gui: state.gui,\n chartsApi: getConfiguredChartsApi(state),\n tenantId: selectActiveTenantId(state),\n schemasBasicInfo: state.findingSchemas.schemasBasicInfo,\n filters: state.filter.filters\n});\n\nconst mapDispatchToProps = {\n openMap: openMapView,\n openGraph: openGraphView,\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps;\n\nconst MiniStatistics = (props: Props) => {\n\n const [loading, setLoading] = useState(false);\n\n const [taxonomyChartData, setTaxonomyChartData] = useState();\n const [schemaChartData, setSchemaChartData] = useState();\n\n useEffect(() => {\n\n let isMounted = true;\n setLoading(true);\n\n if(!props.tenantId)return;\n props.chartsApi.apiChartsFindingsFrequency({\n tenantId: props.tenantId,\n filter: ApiService.buildFilterQuery(props.filters),\n aggregate: \"taxonomyHumanReadable\",\n maxItemsPerGroup: 5\n }).then(taxonomyChart => {\n \n if (isMounted) {\n setTaxonomyChartData(taxonomyChart.data?.map(i => {\n return ({\n name: i.label,\n value: i.value,\n });\n }));\n }\n \n \n props.chartsApi.apiChartsFindingsFrequency({\n tenantId: props.tenantId,\n filter: ApiService.buildFilterQuery(props.filters),\n aggregate: \"findingSchemaId\"\n }).then(schemaFrequency => {\n if (isMounted) {\n setSchemaChartData(schemaFrequency.data?.map(i => {\n let schema = props.schemasBasicInfo.find(s => s.id === i.label)?.attributes;\n return ({\n name: schema?.name ?? i.label,\n value: i.value,\n color: schema?.color,\n });\n }));\n \n setLoading(false);\n }\n });\n });\n\n\n return () => {\n isMounted = false;\n }\n }, [props.chartsApi, props.filters, props.schemasBasicInfo, props.tenantId]);\n\n if (loading) {\n return \n\n } else {\n return (<>\n {schemaChartData &&\n }\n {taxonomyChartData && }\n \n );\n }\n}\n\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MiniStatistics as any);","import * as React from 'react';\nimport {AppState} from '../../../store/reducers';\nimport {Button, Row} from 'reactstrap';\nimport {openGraphView, openMapView} from '../../../store/actions/GUIActions';\nimport {connect} from 'react-redux';\nimport Heatmap from \"../components/Heatmap\";\nimport MiniStatistics from \"../components/MiniStatistics\";\n\nconst mapStateToProps = (state: AppState) => ({\n gui: state.gui,\n schemasBasicInfo: state.findingSchemas.schemasBasicInfo,\n filters: state.filter.filters\n});\n\nconst mapDispatchToProps = {\n openMap: openMapView,\n openGraph: openGraphView,\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps;\n\nconst PreviewCard = props => {\n return (\n
    \n
    {props.children}
    \n
    \n {/*{props.title}*/}\n \n
    \n
    \n );\n};\n\nconst PreviewCards = (props: Props) => {\n\n const renderStatisticsCard = () => {\n if (props.gui.graphPanelActive) {\n return null;\n }\n return (\n \n \n \n );\n };\n\n const renderMapCard = () => {\n if (props.gui.mapPanelActive) {\n return null;\n }\n return (\n \n \n \n );\n };\n\n return (\n \n {renderStatisticsCard()}\n {!props.gui.splitMode &&
    }\n {renderMapCard()}\n \n );\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PreviewCards as any);\n","import {connect} from 'react-redux';\nimport {AppState} from '../../store/reducers';\nimport * as React from 'react';\nimport {requestListing, setSorting} from '../../store/actions/ListingActions';\nimport {Jumbotron} from 'reactstrap';\nimport ListView from './components/ListView';\nimport FindingsPagination from './containers/FindingsPagination';\nimport FindingsToolbar from './containers/FindingsToolbar';\nimport PreviewCards from \"./containers/PreviewCards\";\nimport SpinnerOverlay from \"../../components/Spinners/SpinnerOverlay\";\n\nconst mapStateToProps = (state: AppState) => ({\n listing: state.listing,\n tenantId: state.tenant.activeTenantId\n});\n\nconst mapDispatchToProps = {\n requestListing: requestListing,\n setSorting: setSorting,\n};\n\ntype FindingsTableProps = ReturnType & typeof mapDispatchToProps;\n\nconst FindingsTableDry = (props: FindingsTableProps) => {\n \n React.useEffect(()=>{\n if(props.tenantId){\n props.requestListing();\n }\n }, [props.tenantId])\n\n return (\n
    \n
    \n \n
    \n \n
    \n {!props.listing.loaded && }\n {props.listing.loadedFindings != null && props.listing.loadedFindings.length > 0 ? (\n \n ) : (\n \n

    \n No results\n

    \n
    \n )}\n
    \n
    \n \n
    \n
    \n )\n}\n\nexport const FindingsTable = connect(mapStateToProps, mapDispatchToProps)(FindingsTableDry as any);\n","import * as React from \"react\";\n\nimport {GoogleMap, InfoWindow, Marker, Polygon} from '@react-google-maps/api';\nimport connect from \"react-redux/es/connect/connect\";\nimport {AppState} from \"../../../store/reducers\";\nimport {requestMapFindings, setMapViewport} from \"../../../store/actions/MapPanelActions\";\nimport {FindingMapInfoResourceObject} from \"../../../store/models/FindingMapInfo\";\nimport {closeMapView} from \"../../../store/actions/GUIActions\";\nimport {LatLngGps} from \"../../../services/GeneratedApiTsClient/models\";\nimport {Button} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {useState} from \"react\";\nimport {getActiveTenantRoutePrefix} from \"../../../store/selectors/TenantSelectors\";\nimport _ from \"lodash\";\nimport SpinnerOverlay from \"../../../components/Spinners/SpinnerOverlay\";\n\nconst mapStateToProps = (state: AppState) => ({\n mapPanel: state.mapPanel,\n selectedFindingIds: state.listing.selectedFindingIds,\n globalFilters: state.filter.filters,\n routePrefix: getActiveTenantRoutePrefix(state)\n});\n\nconst mapDispatchToProps = {\n setMapViewport,\n requestMapFindings,\n closeMapView,\n};\n\ntype Props = ReturnType\n & typeof mapDispatchToProps\n & {}\n\nconst containerStyle = {\n height: '100%',\n width: '100%'\n};\n\ninterface MultiMarker {\n position: LatLngGps\n markers: Array\n}\n\nconst MapPanel = (props: Props) => {\n\n const [mapRef, setMapRef] = useState(null);\n const [mapRefreshedOnce, setMapRefreshedOnce] = React.useState(false);\n\n const [infoWindowPosition, setInfoWindowPosition] = React.useState(null);\n const [visibleInfoWindow, setVisibleInfoWindow] = React.useState(false);\n\n const [selectedMultiMarker, setSelectedMultiMarker] = React.useState()\n\n const [markers, setMarkers] = React.useState>([])\n\n React.useEffect(() => {\n if (mapRef) {\n const selectedFinding: FindingMapInfoResourceObject[] = props.mapPanel.markerData.filter((marker: FindingMapInfoResourceObject) => marker.id === props.selectedFindingIds[0]);\n let multiMarkers = _.groupBy(props.mapPanel.markerData, (marker: FindingMapInfoResourceObject) => {\n return [marker.attributes.locationGpsPoint?.lat, marker.attributes.locationGpsPoint?.lng]\n })\n setMarkers(Object.entries(multiMarkers).map((item) => ({\n position: positionFromString(item[0]),\n markers: item[1]\n } as MultiMarker)));\n if (selectedFinding.length > 1) {\n\n }\n\n if (selectedFinding[0] && selectedFinding[0].attributes && selectedFinding[0].attributes.locationGpsPoint) {\n const bounds = new google.maps.LatLngBounds();\n const userPos = new google.maps\n .LatLng(selectedFinding[0].attributes.locationGpsPoint!.lat, selectedFinding[0].attributes.locationGpsPoint!.lng);\n\n // add user location and thre nearest stores in bounds\n bounds.extend(userPos);\n // take(corners, 3).forEach(({ latitude, longitude }) => {\n // const cornerPos = new window.google.maps.LatLng(latitude, longitude);\n // return bounds.extend(cornerPos);\n // });\n mapRef.panTo(selectedFinding[0].attributes.locationGpsPoint);\n }\n } else {\n console.log(\"mapRef is NULL\");\n }\n }, [mapRef, props.mapPanel.markerData, props.selectedFindingIds]);\n\n // useEffect(() =>{\n // if (!mapRef.current) return;\n // \n // mapRef.current.fitBounds(props.mapPanel.bounds);\n // console.log(\"fit bounds\");\n // \n // }, [props.mapPanel.bounds]);\n\n const positionFromString = (pos: string): LatLngGps => {\n let gpsPos = pos.split(\",\")\n return {lat: parseFloat(gpsPos[0]), lng: parseFloat(gpsPos[1])}\n }\n const refreshMap = () => {\n\n if (mapRef) {\n let bounds = mapRef.getBounds();\n if (bounds) {\n props.setMapViewport(bounds.toJSON())\n }\n //mapRef.fitBounds(bounds)\n\n\n } else {\n console.log(\"mapRef is NULL\");\n }\n\n };\n\n\n const refreshMapOnce = () => {\n\n if (mapRef && !mapRefreshedOnce) {\n refreshMap();\n setMapRefreshedOnce(true);\n }\n };\n\n\n const latLngCenter = (locationGpsArea: Array): LatLngGps => {\n\n let lats = locationGpsArea.map(c => c.lat);\n let lngs = locationGpsArea.map(c => c.lng);\n\n return {\n lat: lats.reduce((a, b) => a + b, 0) / lats.length,\n lng: lngs.reduce((a, b) => a + b, 0) / lngs.length,\n }\n };\n\n const onLoad = React.useCallback(function callback(mapRef: google.maps.Map) {\n mapRef.setCenter({lat: 48.979714, lng: 14.4497171});// todo: calculate map center and zoom based on all data\n mapRef.setZoom(4);\n setMapRef(mapRef);\n }, [])\n\n const onUnmount = React.useCallback(function callback(mapRef) {\n setMapRef(null)\n }, [])\n\n const handleMapElemClick = (e: google.maps.MapMouseEvent, finding: MultiMarker) => {\n setVisibleInfoWindow(true);\n setInfoWindowPosition(e.latLng);\n\n setSelectedMultiMarker(finding)\n }\n return (\n
    \n \n\n {props.mapPanel.requestInProgress && props.mapPanel.markerData.length === 0 &&\n }\n \n {markers.map((markerData: MultiMarker) =>\n\n
    \n {\n handleMapElemClick(e, markerData)\n }}\n position={markerData.position}\n animation={markerData.markers.find((marker) => {\n return props.selectedFindingIds.includes(marker.id)\n }) && google.maps.Animation.BOUNCE}\n zIndex={markerData.markers.find((marker) => {\n return props.selectedFindingIds.includes(marker.id)\n }) ? 99999 : undefined}\n />\n {markerData.markers.map(marker =>\n
    \n marker.location &&\n {\n handleMapElemClick(e, markerData)\n }}\n path={marker.attributes.locationGpsArea}\n />\n
    \n )}\n\n
    \n )}\n {visibleInfoWindow && infoWindowPosition &&\n {\n setVisibleInfoWindow(false)\n }}\n position={infoWindowPosition}>\n <>\n
      \n {selectedMultiMarker?.markers.map((marker) =>\n
    • \n {(props.selectedFindingIds.includes(marker.id))?\n

      {marker.attributes.documentName}

      \n :\n

      {marker.attributes.documentName}

      \n }\n Detail\n
      \n
    • \n )}\n
    \n \n \n }\n \n\n\n
    \n\n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(React.memo(MapPanel));","import * as React from 'react';\n\ntype Props = {\n title: string,\n children: React.ReactNode,\n className?: string,\n}\n\nconst GraphContainer = ({title, children, className}: Props) => {\n return (\n
    \n {/*
    */}\n {/* {title}*/}\n {/*
    */}\n {children}\n
    \n );\n};\n\nexport default GraphContainer;","import * as React from \"react\";\nimport {FilterableAttributesGroup} from \"../../../models/FilterableAttributesModel\";\nimport {Label} from \"reactstrap\";\nimport {ThemedSelect} from \"../../../components/ThemedSelect\";\n\ntype GraphSettingsProps = {\n aggregate: string,\n group?: string|null,\n onAggregateChange: (field: string) => void,\n onGroupChange: (field: string|null) => void,\n filterableAttributes: Array,\n groupDisabled?: boolean,\n};\n\nexport const GraphSettingsForm = (props: GraphSettingsProps) => {\n\n const options = React.useMemo(() => props.filterableAttributes.map(attributeGroup => ({\n label: attributeGroup.name,\n options: attributeGroup.attributes.map(attribute => ({\n label: attribute.name,\n value: attribute.value,\n type: attribute.type\n }))\n })), [props.filterableAttributes])\n\n const defaultAggregateOption = React.useMemo(() => {\n let option;\n options.forEach(attrOpt => {\n const attr = attrOpt.options.find(opt => opt.value === props.aggregate)\n if (attr) {\n option = attr\n }\n });\n return option\n }\n , [options, props.aggregate]);\n/*\n const defaultGroupOption = React.useMemo(() => {\n let option;\n options.forEach(attrOpt => {\n const attr = attrOpt.options.find(opt => opt.value === props.group)\n if (attr) {\n option = attr\n }\n });\n return option\n }\n , [options, props.group]);\n*/\n return (\n
    \n \n \n props.onAggregateChange(input.value)}/>\n \n {/**/}\n {/* props.onGroupChange(input?.value)}/>*/}\n
    \n );\n}","import * as React from 'react';\nimport {connect} from 'react-redux';\nimport {AppState} from '../../store/reducers';\nimport {DynamicView} from './DynamicView';\nimport {FindingsTable} from './FindingsTable';\nimport MapPanel from './components/MapPanel';\nimport GraphPanel from './components/GraphPanel';\n\nconst mapStateToProps = (state: AppState) => ({\n gui: state.gui,\n});\n\nconst mapDispatchToProps = {};\n\ntype Props = ReturnType & typeof mapDispatchToProps & {};\n\nclass Findings extends React.Component {\n renderDynamicContent = () => {\n if (this.props.gui.mapPanelActive) {\n return ;\n }\n if (this.props.gui.graphPanelActive) {\n return ;\n }\n };\n\n render() {\n return (\n }\n />\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Findings as any);\n","import {FindingSchema, FindingSchemaElement} from \"../services/GeneratedApiTsClient\";\n\n\n/**\n * Re-initialize finding schema object, as if it was newly created (in-place, modifies original object)\n * \n * @param schema\n */\nexport const reinitializeFindingSchema = (schema: FindingSchema) => {\n let timestampSeed = new Date().getTime();\n\n schema.definitionGroups?.forEach(dg => timestampSeed = reinitializeDefinitionNames(dg.definitions, timestampSeed))\n \n schema.nestedDataDefinitions?.forEach(ndd => {\n ndd.name = getInitialDefinitionName(ndd.name, ++timestampSeed);\n timestampSeed = reinitializeDefinitionNames(ndd.definitions, timestampSeed);\n })\n}\n\n/**\n * Re-initialize definition names (in-place, modifies original object)\n * \n * @param definitions\n * @param timestampSeed UNIX timestamp initial value\n * @return UNIX timestamp final value\n */\nconst reinitializeDefinitionNames = (definitions: Array, timestampSeed: number): number => {\n\n definitions.forEach(d => d.name = d.name ? getInitialDefinitionName(d.name, ++timestampSeed): d.name);\n \n return timestampSeed \n}\n\n/**\n * Re-initialize given dynamic/nested data definition name (as if it was newly created)\n * \n * @param name Original name\n * @param timestamp UNIX timestamp\n * @return string New name\n */\nconst getInitialDefinitionName = (name: string, timestamp: number): string => name.replace(/^([a-z-]+)\\d+.*$/, \"$1\" + timestamp)","import {ApiOnRejectedResult} from \"../../services/ApiService/ApiService\";\nimport {push} from 'connected-react-router';\nimport {AppState} from \"../reducers\";\nimport {processApiResponse} from \"./ErrorActions\";\nimport {\n ExistingFindingSchemaRequestBody,\n FindingSchema,\n FindingSchemaResourceObject, FindingSchemaSingleResponse, NewFindingSchemaRequestBody\n} from \"../../services/GeneratedApiTsClient\";\nimport {FLUSH_FINDING_SCHEMAS, requestFindingSchemas} from \"./FindingSchemasActions\";\nimport {getConfiguredSchemasApi} from \"../selectors/ApiSelectors\";\nimport {getActiveTenantRoutePrefix, selectActiveTenantId} from \"../selectors/TenantSelectors\";\nimport {reinitializeFindingSchema} from \"../../utils/schemaDefinitionUtils\";\n\nexport const REQUEST_SCHEMA: string = 'REQUEST_SCHEMA';\nexport const RECEIVE_SCHEMA: string = 'RECEIVE_SCHEMA';\nexport const RECEIVE_SCHEMA_CLONE: string = 'RECEIVE_SCHEMA_CLONE';\n\nexport const REPLACE_SCHEMA_PROPERTY: string = 'REPLACE_SCHEMA_PROPERTY';\n\nexport const REQUEST_SCHEMA_PERSIST: string = 'REQUEST_SCHEMA_PERSIST';\nexport const SUCCESS_SCHEMA_PERSIST: string = 'SUCCESS_SCHEMA_PERSIST';\n\nexport const REQUEST_SCHEMA_DELETE: string = 'REQUEST_SCHEMA_DELETE';\nexport const SCHEMA_DELETE_SUCCESS: string = 'SCHEMA_DELETE_SUCCESS';\n\nexport const REQUEST_SCHEMA_NEW: string = 'REQUEST_SCHEMA_NEW';\nexport const SCHEMA_NEW_SUCCESS: string = 'SCHEMA_NEW_SUCCESS';\n\nexport const CANCEL_REQUEST: string = 'CANCEL_REQUEST';\nexport const FLUSH_SCHEMA: string = 'FLUSH_SCHEMA';\n\nexport const requestSchema = (id: string, doClone: boolean = false) => async (dispatch, getState) => {\n\n if (getState().schema.loadingInProgress) {\n // Don't issue a duplicate request (we are already loading the requested data)\n return;\n }\n\n dispatch({type: REQUEST_SCHEMA});\n\n let state: AppState = getState();\n let schemasApi = getConfiguredSchemasApi(state);\n const tenantId = selectActiveTenantId(state);\n\n let schemaResourceObject: FindingSchemaResourceObject | void | undefined = await schemasApi.apiSchemasGetById({tenantId, id}).then(\n async (response) => {\n return response.data;\n },\n (error: ApiOnRejectedResult) => {\n processApiResponse(error, \"Error loading schema ID \" + id)(dispatch);\n },\n );\n \n if (!schemaResourceObject){\n dispatch({type: CANCEL_REQUEST});\n return;\n }\n \n if (doClone){\n reinitializeFindingSchema(schemaResourceObject.attributes);\n }\n \n dispatch({\n type: doClone ? RECEIVE_SCHEMA_CLONE : RECEIVE_SCHEMA,\n schema: schemaResourceObject.attributes,\n schemaId: schemaResourceObject.id\n });\n \n};\n\nexport const requestSchemaNew = () => async (dispatch, getState) => {\n dispatch({type: REQUEST_SCHEMA_NEW});\n dispatch({type: SCHEMA_NEW_SUCCESS});\n};\n\nexport const persistSchema = () => async (dispatch, getState) => {\n\n let state: AppState = getState();\n if (state.schema.requestInProgress) {\n // Don't issue a duplicate request (we are already loading the requested data)\n return;\n }\n\n dispatch({type: REQUEST_SCHEMA_PERSIST});\n\n let schemasApi = getConfiguredSchemasApi(state);\n const tenantId = selectActiveTenantId(state);\n\n let schemaId = state.schema.loadedSchemaId;\n\n let patchedSchema: FindingSchema | void;\n \n if (schemaId != null){\n let requestBody: ExistingFindingSchemaRequestBody = {\n data: {\n type: \"schemas\",\n id: state.schema.loadedSchemaId,\n attributes: state.schema.loadedSchema\n }\n };\n \n patchedSchema = await schemasApi.apiSchemasPatchById({tenantId, id: schemaId, existingFindingSchemaRequestBody: requestBody}).then(\n (response: FindingSchemaSingleResponse) => {\n return response.data!.attributes;\n },\n (error: ApiOnRejectedResult) => {\n processApiResponse(error, \"Error patching schema ID \" + schemaId)(dispatch);\n },\n );\n } else {\n \n let requestBody: NewFindingSchemaRequestBody = {\n data: {\n type: \"schemas\",\n attributes: state.schema.loadedSchema\n }\n };\n\n patchedSchema = await schemasApi.apiSchemasPost({tenantId, newFindingSchemaRequestBody: requestBody}).then(\n (response: FindingSchemaSingleResponse) => {\n schemaId = response.data!.id;\n return response.data!.attributes;\n },\n (error: ApiOnRejectedResult) => {\n processApiResponse(error, \"Error patching schema ID \" + schemaId)(dispatch);\n },\n );\n }\n\n if (!patchedSchema) {\n dispatch({type: CANCEL_REQUEST});\n } else {\n dispatch({\n type: SUCCESS_SCHEMA_PERSIST,\n patchedSchema: patchedSchema,\n patchedSchemaId: schemaId,\n });\n dispatch({type: FLUSH_FINDING_SCHEMAS}); // update other reducer\n \n const routePrefix = getActiveTenantRoutePrefix(state);\n dispatch(push(routePrefix+\"/schemas/\"));\n }\n};\n\nexport const replaceSchemaProperty = (propertyName: string, newValue: any) => {\n \n return ({type: REPLACE_SCHEMA_PROPERTY, propertyName, newValue});\n};\n\nexport const deleteSchema = (id: string) => async (dispatch, getState) => {\n\n dispatch({type: REQUEST_SCHEMA_DELETE});\n\n let state: AppState = getState();\n let schemasApi = getConfiguredSchemasApi(state);\n const tenantId = selectActiveTenantId(state);\n \n await schemasApi.apiSchemasDeleteById({tenantId, id}).then(\n () => {\n window.alert(\"Success!\");\n dispatch({type: SCHEMA_DELETE_SUCCESS});\n dispatch({type: FLUSH_FINDING_SCHEMAS}); // update other reducer\n \n const routePrefix = getActiveTenantRoutePrefix(state);\n dispatch(push(routePrefix+\"/schemas/\"));\n dispatch(requestFindingSchemas())\n },\n (error: ApiOnRejectedResult) => {\n dispatch({type: CANCEL_REQUEST});\n processApiResponse(error, \"Error deleting schema ID: \" + id)(dispatch);\n },\n );\n};\n\nexport const flushSchema = () => (dispatch, getState) => {\n dispatch({type: FLUSH_SCHEMA});\n};\n\n\nexport default {\n requestSchema,\n requestSchemaNew,\n deleteSchema,\n persistSchema,\n replaceSchemaProperty,\n flushSchema\n}","import * as React from \"react\";\nimport {Button} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {useEffect, useState} from \"react\";\nimport ApiService from \"../../../services/ApiService/ApiService\";\nimport {AppState} from \"../../../store/reducers\";\nimport connect from \"react-redux/es/connect/connect\";\nimport {deleteSchema} from \"../../../store/actions/SchemaActions\";\nimport {showNotification} from \"../../../store/actions/GUIActions\";\nimport {ModalConfirm} from \"../../../components/ModalConfirm\";\nimport {getConfiguredSchemasApi} from \"../../../store/selectors/ApiSelectors\";\nimport {selectActiveTenantId} from \"../../../store/selectors/TenantSelectors\";\nimport {isTenantUserInRole} from \"../../../store/selectors/UserSelectors\";\nimport {TenantUserRole} from \"../../../services/GeneratedApiTsClient/models\";\nimport SpinnerInline from \"../../../components/Spinners/SpinnerInline\";\n\nconst mapStateToProps = (state: AppState) => ({\n schemasApi: getConfiguredSchemasApi(state),\n tenantId: selectActiveTenantId(state),\n canEdit: isTenantUserInRole(state, {role: [TenantUserRole.OWNER, TenantUserRole.COLLABORATOR]})\n});\n\nconst mapDispatchToProps = {\n deleteSchema\n};\n\ntype Props = ReturnType\n & typeof mapDispatchToProps\n & {\n id: string\n}\n\nconst SchemaDeleteButton = (props: Props) => {\n\n const [loaded, setLoaded] = useState(false);\n const [disabled, setDisabled] = useState(true);\n\n const [visibleModal, setVisibleModal] = useState(false);\n\n const toggleVisibleModal = () => setVisibleModal(!visibleModal);\n\n useEffect(() => {\n setLoaded(false);\n setDisabled(true);\n\n ApiService.hasSchemaDependencies(props.tenantId, props.schemasApi, props.id)\n .then((result) => {\n\n setLoaded(true);\n setDisabled(result);\n });\n\n }, [props.id, props.schemasApi, props.tenantId]);\n\n return (\n \n );\n\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SchemaDeleteButton);","import * as React from \"react\";\nimport {Button, Card, CardBody, CardTitle, Col, Row} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {connect} from \"react-redux\";\nimport {setFilters} from \"../../../store/actions/FilterActions\";\nimport {Filter} from \"../../../models/FilterModel\";\nimport {WellKnownAttributes} from \"../../../models/FindingWellKnownAttributes\";\nimport {FILTER_OP} from \"../../../models/FilterOperationModel\";\nimport {push} from \"connected-react-router\";\nimport {Link} from \"react-router-dom\";\nimport {FindingSchemaBasicInfoResourceObject} from \"../../../store/models/FindingSchemaBasicInfo\";\nimport FindingsCount from \"../../../components/FilterEditor/components/FindingsCount\";\nimport {deleteSchema, requestSchema} from \"../../../store/actions/SchemaActions\";\nimport SchemaDeleteButton from \"./SchemaDeleteButton\";\nimport {openCodegenModal} from \"../../../store/actions/GUIActions\";\nimport {AppState} from \"../../../store/reducers\";\nimport {getActiveTenantRoutePrefix} from \"../../../store/selectors/TenantSelectors\";\nimport {isTenantUserInRole} from \"../../../store/selectors/UserSelectors\";\nimport {TenantUserRole} from \"../../../services/GeneratedApiTsClient/models\";\n\n\nconst mapStateToProps = (state: AppState) => ({\n tenantRoutePrefix: getActiveTenantRoutePrefix(state),\n canEdit: isTenantUserInRole(state, {role: [TenantUserRole.OWNER, TenantUserRole.COLLABORATOR]})\n});\n\nconst mapDispatchToProps = {\n setFilters,\n deleteSchema,\n push,\n requestSchema,\n openCodegenModal\n};\ntype ComponentProps = { schema: FindingSchemaBasicInfoResourceObject }\ntype Props = ReturnType & typeof mapDispatchToProps & ComponentProps;\n\n\nconst SchemaCard = (props: Props) => {\n \n if (!props.schema.attributes)\n return null;\n \n let filter = [new Filter(WellKnownAttributes.schemaId, FILTER_OP.eq, props.schema.id)];\n\n return (\n \n \n {props.schema.attributes.name}\n
    \n {/*

    */}\n {/* Schema desctiption*/}\n {/*

    */}\n \n \n
    \n
    Findings
    \n

    \n
    \n \n \n\n \n\n \n\n \n \n\n \n \n
    \n
    \n
    \n );\n\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SchemaCard as unknown as React.ComponentClass);","import * as React from \"react\";\nimport {AppState} from \"../../store/reducers\";\nimport {connect} from \"react-redux\";\nimport {requestFindingSchemas} from \"../../store/actions/FindingSchemasActions\";\nimport {Button, Col, Jumbotron, Row} from \"reactstrap\";\nimport SchemaCard from \"./components/SchemaCard\";\nimport {FindingSchemaBasicInfoResourceObject} from \"../../store/models/FindingSchemaBasicInfo\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {Link} from \"react-router-dom\";\nimport {getActiveTenantRoutePrefix} from \"../../store/selectors/TenantSelectors\";\nimport {isTenantUserInRole} from \"../../store/selectors/UserSelectors\";\nimport {TenantUserRole} from \"../../services/GeneratedApiTsClient/models\";\nimport SpinnerOverlay from \"../../components/Spinners/SpinnerOverlay\";\n\n\nconst mapStateToProps = (state: AppState) => ({\n findingSchemas: state.findingSchemas,\n tenantRoutePrefix: getActiveTenantRoutePrefix(state),\n tenantId: state.tenant.activeTenantId,\n canEdit: isTenantUserInRole(state, {role: [TenantUserRole.OWNER, TenantUserRole.COLLABORATOR]})\n});\n\nconst mapDispatchToProps = {\n requestFindingSchemas: requestFindingSchemas,\n};\n\ntype Props =\n ReturnType\n & typeof mapDispatchToProps\n & {};\n\nconst Schemas = (props: Props) => {\n\n React.useEffect(()=>{\n if(props.tenantId){\n props.requestFindingSchemas()\n }\n }, [props.tenantId])\n\n return (\n\n
    \n\n \n \n

    Schemas

    \n \n \n \n
    \n\n \n \n {!props.findingSchemas.loaded && }\n\n
    \n {props.findingSchemas.schemasBasicInfo.map((schema : FindingSchemaBasicInfoResourceObject, index) => \n \n )}\n\n\n {props.findingSchemas.schemasBasicInfo.length < 1 && \n

    \n No schemas yet\n

    \n
    \n }\n \n
    \n \n
    \n )\n} \n\nexport default connect(mapStateToProps, mapDispatchToProps)(Schemas as any);","import * as React from \"react\";\nimport {FindingSchemaElement} from \"../../services/GeneratedApiTsClient\";\nimport $ from 'jquery';\nimport {registerJQuery} from \"../../registerJQuery\";\n\nregisterJQuery();\n\nrequire(\"formBuilder/dist/form-builder.min.js\"); // not pretty but works\nrequire('./plugins/controlFastaData.js');\n\ntype Props = {\n formKey: string,\n definitions: Array,\n onInput: (DynamicData) => void,\n id: string,\n}\n\ntype State = any;\n\nexport class DynamicFormBuilderRenderer extends React.Component {\n\n formBuilderWrapperNode: any;\n formBuilderWrapperNodeJQuery: any;\n \n formBuilderInstance: any; \n\n async componentDidMount() {\n \n let formBuilderOptions = {\n showActionButtons: false,\n disableHTMLLabels: true,\n dataType: 'json',\n disableFields: [\n 'button',\n 'file',\n 'hidden',\n 'autocomplete'\n ],\n disabledAttrs: [\n 'access',\n 'className',\n 'name',\n 'inline',\n 'toggle',\n 'value',\n 'rows'\n ],\n typeUserDisabledAttrs: {\n 'paragraph': [\n 'subtype'\n ],\n 'select': [\n 'placeholder' // todo: Disable placeholder for multiselec, it blocks other selected values (basic selects are fine)\n ],\n 'date': [\n 'placeholder'\n ],\n 'fasta': [\n 'placeholder'\n ],\n },\n typeUserAttrs: {\n text: {\n subtype: {\n options: {\n 'text': 'Plain text',\n 'email': 'Email address',\n 'tel': 'Phone number'\n }\n }\n }\n }\n };\n\n this.formBuilderWrapperNodeJQuery = $(this.formBuilderWrapperNode);\n\n this.formBuilderInstance = await this.formBuilderWrapperNodeJQuery.formBuilder(formBuilderOptions).promise;\n this.formBuilderInstance.actions.setData(JSON.stringify(this.props.definitions));\n \n }\n\n componentDidUpdate(prevProps: Props) {\n if (this.props.definitions !== prevProps.definitions) {\n if (!this.formBuilderInstance)\n return;\n \n if (this.formBuilderInstance.promise){ // wait for initialization if needed\n this.formBuilderInstance.promise.then(formBuilder => {\n formBuilder.actions.setData(JSON.stringify(this.props.definitions));\n });\n } else {\n this.formBuilderInstance.actions.setData(JSON.stringify(this.props.definitions));\n }\n }\n }\n\n componentWillUnmount(){\n this.formBuilderWrapperNodeJQuery.formBuilder('destroy'); // destroy jQuery plugin, see: https://reactjs.org/docs/integrating-with-other-libraries.html\n }\n\n getDefinitions(): Array{\n return this.formBuilderInstance.actions.getData();\n }\n\n render() {\n return (\n
    (this.formBuilderWrapperNode = el)} className={\"legacy-form-builder\"}>
    \n );\n }\n}\n","import {\n Button,\n ButtonGroup, ButtonToolbar,\n DropdownItem,\n DropdownMenu, DropdownToggle,\n UncontrolledButtonDropdown\n} from \"reactstrap\";\nimport {FindingSchemaDefinitionGroup, FindingSchemaNestedDataDefinition} from \"../../../services/GeneratedApiTsClient\";\nimport * as React from \"react\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\n\nexport enum TabType {\n Group,\n NestedData\n}\n\ntype Props = {\n definitionGroups: Array,\n nestedDataDefinitions: Array,\n activeTabIndex: number,\n activeTabType: TabType,\n onTabClick: (tabIndex: number, tabType: TabType) => void\n onAddTabClick: () => void\n onAddNestedDataClick: () => void\n onActiveTabDeleteClick: () => void\n onActiveTabRenameClick: () => void\n onActiveTabMoveClick: (newPosition: number, tabType: TabType) => void\n}\n\nexport const DynamicDataFormCardTabsNav = (props : Props) =>\n \n \n {/* Tabs */}\n {props.definitionGroups.map((group: FindingSchemaDefinitionGroup, index) =>\n \n \n {props.activeTabIndex === index && props.activeTabType === TabType.Group && \n \n \n \n Rename\n \n props.onActiveTabMoveClick(index-1, TabType.Group)} disabled={index === 0}>Move left\n props.onActiveTabMoveClick(index+1, TabType.Group)} disabled={index === props.definitionGroups.length - 1}>Move right\n \n Delete\n \n }\n \n )}\n\n {/* Nested data elements */}\n {props.nestedDataDefinitions.map((group: FindingSchemaNestedDataDefinition, index) =>\n \n \n {props.activeTabIndex === index && props.activeTabType === TabType.NestedData && \n \n \n \n Rename\n \n props.onActiveTabMoveClick(index-1, TabType.NestedData)} disabled={index === 0}>Move left\n props.onActiveTabMoveClick(index+1, TabType.NestedData)} disabled={index === props.nestedDataDefinitions.length - 1}>Move right\n \n Delete\n \n }\n \n )}\n\n \n \n \n Add new\n \n \n Single-entry group\n Multi-entry group\n \n \n\n ;\n","import * as React from \"react\";\nimport {DataCardInputElement} from \"./DataCardInputElement\";\nimport {FormFeedback, Input} from \"reactstrap\";\n\n\ntype Props = {\n title: string,\n attributeName: string,\n data: {\n [key: string] : any\n },\n onInput: (e: any) => void,\n required?: boolean,\n pattern?: string,\n}\n\nexport const DataCardColorInputElement = (props:Props) =>\n \n \n \n {props.required ? \"This field is required. \" : \"\"}\n {props.pattern ? \"Value has to match pattern \"+props.pattern+\". \" : \"\"}\n \n ;","import * as React from \"react\";\nimport {AppState} from \"../../store/reducers\";\nimport {connect} from \"react-redux\";\nimport {RouteComponentProps} from \"react-router\";\nimport {\n flushSchema,\n persistSchema,\n replaceSchemaProperty,\n requestSchema,\n requestSchemaNew\n} from \"../../store/actions/SchemaActions\";\nimport {\n FindingSchemaDefinitionGroup,\n FindingSchemaElement,\n FindingSchemaNestedDataDefinition,\n} from \"../../services/GeneratedApiTsClient\";\nimport {Button, Card, CardBody} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {DynamicFormBuilderRenderer} from \"../../components/JQueryFormBuilder/DynamicFormBuilderRenderer\";\nimport {DataCardTextInputElement} from \"../../components/DataCardComponnents/DataCardTextInputElement\";\nimport {DynamicDataFormCardTabsNav, TabType} from \"./components/DynamicDataFormCardTabsNav\";\nimport {DataCardColorInputElement} from \"../../components/DataCardComponnents/DataCardColorInputElement\";\nimport {getActiveTenantRoutePrefix} from \"../../store/selectors/TenantSelectors\";\nimport {goBack} from \"connected-react-router\";\nimport SpinnerOverlay from \"../../components/Spinners/SpinnerOverlay\";\n\nconst mapStateToProps = (state: AppState) => ({\n schema: state.schema,\n routePrefix: getActiveTenantRoutePrefix(state),\n tenantId: state.tenant.activeTenantId\n});\n\nconst mapDispatchToProps = {\n requestSchema,\n requestSchemaNew,\n replaceSchemaProperty,\n persistSchema,\n flushSchema,\n goBack\n};\n\ntype ComponentProps = {\n doClone?: boolean;\n}\ntype Props = RouteComponentProps<{ id: string, schema: any }> &\n ReturnType\n & typeof mapDispatchToProps & ComponentProps;\n\nconst SchemaEdit = (props: Props) => {\n\n const formEl = React.createRef();\n const dynFormEl = React.createRef();\n\n const formRef = React.createRef();\n\n const [activeTabIndex, setActiveTabIndex] = React.useState(0);\n const [activeTabType, setActiveTabType] = React.useState(TabType.Group);\n const [wasValidated, setWasValidated] = React.useState(false);\n const [activeDefinitions, setActiveDefinitions] = React.useState>();\n\n React.useEffect(() => {\n if (props.match.params.id) {\n if (props.tenantId) {\n props.requestSchema(props.match.params.id, props.doClone);\n }\n } else {\n if (props.tenantId) {\n props.requestSchemaNew();\n }\n }\n return () => {\n props.flushSchema()\n }\n }, [props.match.params.id, props.tenantId])\n React.useEffect(() => {\n // fill in the definitions of initially selected tab\n if (props.schema.loaded && activeDefinitions === undefined) {\n toggleTabs(activeTabIndex, activeTabType); // performs refresh\n }\n }, [props.schema.loaded])\n\n const handleInputChange = (event) => {\n const target = event.target;\n const value = target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n props.replaceSchemaProperty(name, value);\n };\n\n const toggleTabs = (newActiveTabIndex: number, newTabType: TabType, doSaveBefore: boolean = true) => {\n\n if (doSaveBefore) {\n saveDefinitionChangesToStore();\n }\n\n let newDefinitionGroup: FindingSchemaDefinitionGroup | FindingSchemaNestedDataDefinition;\n switch (newTabType) {\n case TabType.Group:\n newDefinitionGroup = props.schema.loadedSchema.definitionGroups![newActiveTabIndex];\n break\n case TabType.NestedData:\n newDefinitionGroup = props.schema.loadedSchema.nestedDataDefinitions![newActiveTabIndex];\n break;\n }\n\n if (newDefinitionGroup) {\n setActiveTabIndex(newActiveTabIndex)\n setActiveTabType(newTabType)\n setActiveDefinitions(newDefinitionGroup ? newDefinitionGroup.definitions : [])\n }\n };\n\n const saveDefinitionChangesToStore = () => {\n if (!formRef.current) return;\n\n let updatedDefinitions = formRef.current!.getDefinitions();\n\n switch (activeTabType) {\n case TabType.Group:\n let definitionGroups = props.schema.loadedSchema.definitionGroups;\n if (definitionGroups && definitionGroups[activeTabIndex]) {\n definitionGroups[activeTabIndex].definitions = updatedDefinitions;\n }\n props.replaceSchemaProperty(\"definitionGroups\", definitionGroups);\n break;\n case TabType.NestedData:\n let nestedDataDefinitions = props.schema.loadedSchema.nestedDataDefinitions;\n\n if (nestedDataDefinitions && nestedDataDefinitions[activeTabIndex]) {\n nestedDataDefinitions[activeTabIndex].definitions = updatedDefinitions;\n }\n props.replaceSchemaProperty(\"nestedDataDefinitions\", nestedDataDefinitions);\n break;\n }\n }\n\n const validate = () => {\n const formElCurrent = formEl.current!;\n //const dynFormElCurrent = dynFormEl.current!;\n const formLength = formElCurrent.length;\n\n if (!formElCurrent.checkValidity()) {\n for (let i = 0; i < formLength; i++) {\n const elem: any = formElCurrent[i];\n\n if (!elem.validity.valid) {\n elem.scrollIntoView();\n elem.focus();\n return false;\n }\n }\n return false;\n }\n //\n // if (dynFormEl.checkValidity() === false) {\n // for (let i = 0; i < dynFormLength; i++) {\n // const elem: any = dynFormEl[i];\n //\n // if (!elem.validity.valid) {\n // const panes = document.getElementsByClassName(\"tab-pane active\");\n // for (let i = 0; i < panes.length; i++) {\n // panes[i].classList.remove('active');\n // }\n // elem.closest('.tab-pane').className += ' active';\n // this.setState({\n // activeTab: elem.getAttribute('data-id')\n // });\n // elem.scrollIntoView();\n // elem.focus();\n // return false;\n // }\n // }\n // return false;\n // }\n\n return true;\n };\n\n const onSubmit = (e) => {\n e.preventDefault();\n if (validate()) {\n saveDefinitionChangesToStore();\n props.persistSchema()\n } else {\n setWasValidated(true)\n }\n };\n\n const addNewTab = () => {\n saveDefinitionChangesToStore();\n\n let definitionGroups = props.schema.loadedSchema.definitionGroups ?? [];\n\n let newTabName = prompt(\"Name for the new group:\");\n\n // no action when prompt is dismissed\n if (!newTabName) return;\n\n let newGroup: FindingSchemaDefinitionGroup = {\n name: newTabName,\n definitions: []\n };\n\n definitionGroups.push(newGroup)\n\n props.replaceSchemaProperty(\"definitionGroups\", definitionGroups);\n toggleTabs(definitionGroups.length - 1, TabType.Group, false);\n };\n\n const addNewNestedData = () => {\n saveDefinitionChangesToStore();\n\n let nestedDataDefinitions = props.schema.loadedSchema.nestedDataDefinitions ?? [];\n\n let newNestedDataName = prompt(\"Name for the new group:\");\n\n // no action when prompt is dismissed\n if (!newNestedDataName) return;\n\n let newNestedData: FindingSchemaNestedDataDefinition = {\n name: \"nested-\" + (new Date()).getTime(),\n label: newNestedDataName,\n definitions: []\n };\n\n nestedDataDefinitions.push(newNestedData)\n\n props.replaceSchemaProperty(\"nestedDataDefinitions\", nestedDataDefinitions);\n toggleTabs(nestedDataDefinitions.length - 1, TabType.NestedData, false);\n};\n\n const renameActiveTab = () => {\n saveDefinitionChangesToStore();\n\n switch (activeTabType) {\n case TabType.Group:\n let definitionGroups = props.schema.loadedSchema.definitionGroups;\n if (definitionGroups && Array.isArray(definitionGroups) && definitionGroups[activeTabIndex]) {\n\n let newTabName = prompt(\"Name for the group:\", definitionGroups[activeTabIndex].name);\n\n // no action when prompt is dismissed\n if (!newTabName) return;\n\n definitionGroups[activeTabIndex].name = newTabName;\n }\n\n props.replaceSchemaProperty(\"definitionGroups\", definitionGroups);\n break;\n case TabType.NestedData:\n let nestedDataDefinitions = props.schema.loadedSchema.nestedDataDefinitions;\n if (nestedDataDefinitions && Array.isArray(nestedDataDefinitions) && nestedDataDefinitions[activeTabIndex]) {\n\n let newTabName = prompt(\"Name for the group:\", nestedDataDefinitions[activeTabIndex].label);\n\n // no action when prompt is dismissed\n if (!newTabName) return;\n\n nestedDataDefinitions[activeTabIndex].label = newTabName;\n }\n\n props.replaceSchemaProperty(\"nestedDataDefinitions\", nestedDataDefinitions);\n break;\n }\n };\n\n const moveActiveTab = (newPosition: number,) => {\n saveDefinitionChangesToStore();\n\n switch (activeTabType) {\n case TabType.Group:\n let definitionGroups = props.schema.loadedSchema.definitionGroups;\n if (definitionGroups && Array.isArray(definitionGroups) && definitionGroups[activeTabIndex] && definitionGroups[newPosition]) {\n\n // see: https://stackoverflow.com/a/2440723\n definitionGroups.splice(newPosition, 0, definitionGroups.splice(activeTabIndex, 1)[0]);\n }\n\n props.replaceSchemaProperty(\"definitionGroups\", definitionGroups);\n break;\n case TabType.NestedData:\n let nestedDataDefinitions = props.schema.loadedSchema.nestedDataDefinitions;\n if (nestedDataDefinitions && Array.isArray(nestedDataDefinitions) && nestedDataDefinitions[activeTabIndex] && nestedDataDefinitions[newPosition]) {\n\n // see: https://stackoverflow.com/a/2440723\n nestedDataDefinitions.splice(newPosition, 0, nestedDataDefinitions.splice(activeTabIndex, 1)[0]);\n }\n\n props.replaceSchemaProperty(\"nestedDataDefinitions\", nestedDataDefinitions);\n break;\n }\n\n setActiveTabIndex(newPosition)\n };\n\n const deleteActiveTab = () => {\n saveDefinitionChangesToStore();\n\n switch (activeTabType) {\n case TabType.Group:\n let definitionGroups = props.schema.loadedSchema.definitionGroups;\n if (definitionGroups && Array.isArray(definitionGroups) && definitionGroups[activeTabIndex]) {\n\n if (definitionGroups.length < 2) // do not delete if there is only one tab left\n return;\n\n let confirmResult = window.confirm(\"Are you sure?\");\n\n if (confirmResult) {\n definitionGroups.splice(activeTabIndex, 1);\n }\n }\n\n props.replaceSchemaProperty(\"definitionGroups\", definitionGroups);\n\n break;\n case TabType.NestedData:\n let nestedDataDefinitions = props.schema.loadedSchema.nestedDataDefinitions;\n if (nestedDataDefinitions && Array.isArray(nestedDataDefinitions) && nestedDataDefinitions[activeTabIndex]) {\n\n let confirmResult = window.confirm(\"Are you sure?\");\n\n if (confirmResult) {\n nestedDataDefinitions.splice(activeTabIndex, 1);\n }\n }\n\n props.replaceSchemaProperty(\"nestedDataDefinitions\", nestedDataDefinitions);\n\n break;\n }\n\n toggleTabs(Math.max(activeTabIndex - 1, 0), activeTabType, false);\n };\n\n return (\n
    \n {(props.schema.requestInProgress || !props.schema.loaded) && }\n
    \n\n
    \n\n

    {props.schema.loadedSchemaId ? \"Edit Schema\" : \"New Schema\"}

    \n\n
    \n \n\n {\n props.goBack();\n }}>\n \n Cancel\n \n
    \n
    \n\n
    \n

    General information

    \n\n \n \n\n \n\n \n \n \n
    \n\n
    \n
    \n
    \n

    \n Schema builder\n

    \n \n \n\n\n \n {activeDefinitions && {\n }}\n id={'tab-'}\n />}\n \n\n \n
    \n
    \n
    \n )\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SchemaEdit as unknown as React.ComponentClass);","import * as React from 'react';\nimport {Button, Card, CardBody, CardText, CardTitle} from \"reactstrap\";\nimport {useDispatch} from \"react-redux\";\nimport {replace} from \"connected-react-router\";\n\nexport const FallBackScreen = () => {\n const dispatch = useDispatch();\n \n const handleClick = () => {\n dispatch(replace('/')) \n };\n \n return <>\n
    \n
    \n \n \n Not found\n Requested page or resource was not found.\n
    \n \n
    \n
    \n
    \n
    \n
    \n \n};\n\nexport default (FallBackScreen as any);","import React from 'react';\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\n\ntype Props = {\n buttonText?: string\n}\n\nexport default (props : Props) => (\n \n \n \n {props.buttonText || \"Helpdesk\"}\n \n);\n","import * as React from 'react';\nimport {Button, Card, CardBody, CardText, CardTitle} from \"reactstrap\";\nimport {useDispatch} from \"react-redux\";\nimport {replace} from \"connected-react-router\";\n\ntype Props = {\n onResolveError?: () => void\n}\n\nexport const NotAvailableScreen = (props: Props) => {\n const dispatch = useDispatch();\n\n const handleClick = () => {\n if (props.onResolveError) props.onResolveError();\n dispatch(replace('/'))\n };\n\n return
    \n
    \n \n \n Not available\n Requested page or resource is not available to you.\n
    \n \n
    \n
    \n
    \n
    \n
    \n};\n\nexport default NotAvailableScreen;","import * as React from 'react';\nimport connect from \"react-redux/es/connect/connect\";\nimport {AppState} from \"../../store/reducers\";\nimport {Badge, Button, Card, CardBody, CardFooter, CardSubtitle, CardText, CardTitle} from \"reactstrap\";\nimport {ErrorType, resolveErrors, setError} from \"../../store/actions/ErrorActions\";\nimport HelpdeskButton from \"../../components/HelpdeskButton\";\nimport NotAvailableScreen from \"./NotAvailableScreen\";\n\nconst mapStateToProps = (state: AppState) => ({\n errors: state.error.errors,\n});\n\n\nconst wallpaper = {\n 'backgroundImage': 'url(\"images/error-photo@2x.jpg\")', // https://unsplash.com/photos/OG8L9s1bYKc\n 'filter': 'blur',\n};\n\nconst mapDispatchToProps = {\n resolveErrors,\n setError,\n};\n\ntype Props =\n ReturnType\n & typeof mapDispatchToProps\n & {};\n\ntype ErrorInfoType = {\n isNonRecoverable: boolean, subtitle: string, title: string, message: string, buttonText: string\n}\n\nfunction ErrorScreen(props: Props) {\n const [errorInfo, setErrorInfo] = React.useState({} as ErrorInfoType);\n const [onlyNotAvailableError, setOnlyNotAvailableError] = React.useState(false)\n\n React.useEffect(() => {\n const errorList = props.errors.filter(error => error.type === ErrorType.FATAL_ERROR);\n const isFatalError = errorList.length !== 0;\n const error = isFatalError ? errorList[0] : props.errors[0];\n setOnlyNotAvailableError(props.errors.filter(item => item.type === ErrorType.NOT_AVAILABLE_ERROR).length === props.errors.length)\n setErrorInfo({\n isNonRecoverable: isFatalError,\n subtitle: error.message,\n title: isFatalError ? 'Fatal error' : 'Something went wrong',\n message: isFatalError ? 'Please try to reset the application to clear browser cache. Note that you will be logged out.' : 'Please try to repeat your last request.',\n buttonText: isFatalError ? 'Reset application' : 'Back to findings'\n })\n }, [props.errors]);\n\n return (\n <>\n
    \n {onlyNotAvailableError ? {props.resolveErrors(false);}} /> :\n
    \n
    \n \"UnicatDB\n
    \n
    \n \n \n {errorInfo.title}\n {errorInfo.subtitle}\n {errorInfo.message}\n
    \n \n
    \n
    \n {errorInfo.isNonRecoverable ? null : \n In case of recurring problems please props.resolveErrors(errorInfo.isNonRecoverable)} color=\"danger\"\n style={{cursor: 'pointer', marginLeft: '3px'}}>Reset app\n }\n \n \n \n
    \n
    \n
    \n }\n \n )\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ErrorScreen as any);","import {AppState} from \"../reducers\";\nimport {processApiResponse} from \"./ErrorActions\";\nimport {getConfiguredTenantsApi} from \"../selectors/ApiSelectors\";\nimport {push} from \"connected-react-router\";\nimport {TENANT_ROUTE_PATH} from \"../../App\";\nimport {Dispatch} from \"redux\";\nimport {TenantEntityDraft} from \"../reducers/TenantReducer\";\nimport {\n ExistingTenantRequestBody, ExistingTenantUserRequestBody,\n NewTenantRequestBody, TenantUser, TenantUserRole,\n UserScopedTenant\n} from \"../../services/GeneratedApiTsClient\";\nimport {flushFindingSchemas} from \"./FindingSchemasActions\";\n\nexport enum TenantActions {\n TENANT_LOAD_AVAILABLE_INIT = \"TENANT_LOAD_AVAILABLE_INIT\",\n TENANT_LOAD_AVAILABLE_SUCCESS = \"TENANT_LOAD_AVAILABLE_SUCCESS\",\n TENANT_LOAD_AVAILABLE_CANCEL = \"TENANT_LOAD_AVAILABLE_CANCEL\",\n\n TENANT_ACTIVE_SWITCH_INIT = \"TENANT_ACTIVE_SWITCH_INIT\",\n TENANT_ACTIVE_SWITCH_SUCCESS = \"TENANT_ACTIVE_SWITCH_SUCCESS\",\n TENANT_ACTIVE_SWITCH_CANCEL = \"TENANT_ACTIVE_SWITCH_CANCEL\",\n TENANT_ACTIVE_CLEAR = \"TENANT_ACTIVE_CLEAR\",\n\n TENANT_ENTITY_DRAFT_LOAD_INIT = \"TENANT_ENTITY_DRAFT_LOAD_INIT\",\n TENANT_ENTITY_DRAFT_LOAD_SUCCESS = \"TENANT_ENTITY_DRAFT_LOAD_SUCCESS\",\n TENANT_ENTITY_DRAFT_LOAD_CANCEL = \"TENANT_ENTITY_DRAFT_LOAD_CANCEL\",\n TENANT_ENTITY_DRAFT_PATCH = \"TENANT_ENTITY_DRAFT_PATCH\",\n TENANT_ENTITY_DRAFT_CLEAR = \"TENANT_ENTITY_DRAFT_CLEAR\",\n TENANT_ENTITY_DRAFT_SAVE_INIT = \"TENANT_ENTITY_DRAFT_SAVE_INIT\",\n TENANT_ENTITY_DRAFT_SAVE_SUCCESS = \"TENANT_ENTITY_DRAFT_SAVE_CANCEL\",\n TENANT_ENTITY_DRAFT_SAVE_CANCEL = \"TENANT_ENTITY_DRAFT_SAVE_CANCEL\",\n\n TENANT_USER_PATCH_INIT = \"TENANT_USER_PATCH_INIT\",\n TENANT_USER_PATCH_SUCCESS = \"TENANT_USER_PATCH_CANCEL\",\n TENANT_USER_PATCH_CANCEL = \"TENANT_USER_PATCH_CANCEL\",\n}\n\nexport const requestAvailableTenants = () => async (dispatch: Dispatch, getState: () => AppState) => {\n let state = getState();\n if (state.tenant.availableLoading) return;\n\n dispatch({type: TenantActions.TENANT_LOAD_AVAILABLE_INIT});\n\n let tenantsApi = getConfiguredTenantsApi(state);\n let availableTenants = await tenantsApi.apiTenantsAvailableGet().then(\n (response) => response,\n async (response) => {\n await processApiResponse(response);\n return undefined;\n }\n );\n\n if (availableTenants === undefined) {\n dispatch({type: TenantActions.TENANT_LOAD_AVAILABLE_CANCEL});\n return;\n }\n\n dispatch({type: TenantActions.TENANT_LOAD_AVAILABLE_SUCCESS, availableTenants});\n};\n\n\nexport const switchTenant = (tenantId: string) => async (dispatch, getState: () => AppState) => {\n dispatch(push(TENANT_ROUTE_PATH.replace(':tenantId?', tenantId) + \"/findings\"));\n};\n\nexport const loadTenant = (tenantId: string) => async (dispatch, getState: () => AppState) => {\n const state = getState();\n \n // prevent reloading if not necessary\n if (tenantId === state.tenant.activeTenantId) return;\n // prevent issuing duplicate requests \n if (state.tenant.availableLoading) return;\n\n dispatch({type: TenantActions.TENANT_ACTIVE_SWITCH_INIT});\n\n let tenantsApi = getConfiguredTenantsApi(state);\n let tenantUsers = await tenantsApi.apiTenantsGetByIdUsers({tenantId: tenantId}).then(\n (response) => response,\n async (response) => {\n await processApiResponse(response);\n return undefined;\n }\n );\n\n if (tenantUsers === undefined) {\n dispatch({type: TenantActions.TENANT_ACTIVE_SWITCH_CANCEL});\n return;\n }\n\n dispatch(flushFindingSchemas());\n dispatch({type: TenantActions.TENANT_ACTIVE_SWITCH_SUCCESS, tenantId, tenantUsers});\n};\n\nexport const clearLoadedTenant = () => async (dispatch, getState: () => AppState) => {\n dispatch({type: TenantActions.TENANT_ACTIVE_CLEAR});\n};\n\nexport const loadTenantEntityDraft = (id: string) => async (dispatch, getState: () => AppState) => {\n const state = getState();\n if (state.tenant.entityDraftLoading) return;\n\n dispatch({type: TenantActions.TENANT_ENTITY_DRAFT_LOAD_INIT});\n\n const tenantsApi = getConfiguredTenantsApi(state);\n const loadedEntityDraft = await tenantsApi.apiTenantsGetById({tenantId: id}).then(\n (response) => ({\n name: response.name\n }) as TenantEntityDraft,\n async (response) => {\n await processApiResponse(response);\n return undefined;\n }\n );\n\n if (loadedEntityDraft === undefined) {\n dispatch({type: TenantActions.TENANT_ENTITY_DRAFT_LOAD_CANCEL});\n return;\n }\n\n dispatch({type: TenantActions.TENANT_ENTITY_DRAFT_LOAD_SUCCESS, id: id, entity: loadedEntityDraft});\n}\n\nexport const patchTenantEntityDraft = (entityPatch: Partial) => (dispatch, getState: () => AppState) => {\n dispatch({type: TenantActions.TENANT_ENTITY_DRAFT_PATCH, entityPatch});\n}\n\nexport const saveTenantEntityDraft = () => async (dispatch, getState: () => AppState) => {\n const state = getState();\n const draft = state.tenant.entityDraft;\n if (state.tenant.entityDraftLoading || draft === null) return;\n\n dispatch({type: TenantActions.TENANT_ENTITY_DRAFT_SAVE_INIT});\n\n let response: UserScopedTenant | undefined;\n // Create\n if (state.tenant.entityDraftId === null){\n \n const newTenantRequestBody: NewTenantRequestBody = {\n name: draft.name\n };\n \n const tenantsApi = getConfiguredTenantsApi(state);\n response = await tenantsApi.apiTenantsPost({newTenantRequestBody}).then(\n (response) => response,\n async (response) => {\n await processApiResponse(response);\n return undefined;\n }\n );\n // update\n } else {\n const existingTenantRequestBody: ExistingTenantRequestBody = {\n name: draft.name\n };\n\n const tenantsApi = getConfiguredTenantsApi(state);\n response = await tenantsApi.apiTenantsPutById({tenantId: state.tenant.entityDraftId, existingTenantRequestBody}).then(\n (response) => response,\n (response) => {\n processApiResponse(response, 'Error updating tenant ID ' + state.tenant.entityDraftId)(dispatch);\n return undefined;\n }\n );\n }\n\n if (response === undefined) {\n dispatch({type: TenantActions.TENANT_ENTITY_DRAFT_SAVE_CANCEL});\n return;\n }\n\n dispatch({type: TenantActions.TENANT_ENTITY_DRAFT_SAVE_SUCCESS});\n dispatch({type: TenantActions.TENANT_ENTITY_DRAFT_CLEAR});\n}\n\nexport const patchTenantUser = (tenantId: string, userId: string, role: TenantUserRole) => async (dispatch, getState: () => AppState) => {\n const state = getState();\n if (state.tenant.userPatchLoading) return;\n\n dispatch({type: TenantActions.TENANT_USER_PATCH_INIT});\n\n let response: TenantUser | undefined;\n const existingTenantUserRequestBody: ExistingTenantUserRequestBody = {\n role: role\n };\n\n const tenantsApi = getConfiguredTenantsApi(state);\n response = await tenantsApi.apiTenantsPutByIdUsers({tenantId, userId, existingTenantUserRequestBody}).then(\n (response) => response,\n (response) => {\n processApiResponse(response, 'Error updating tenant user ID ' + userId)(dispatch);\n return undefined;\n }\n );\n\n if (response === undefined) {\n dispatch({type: TenantActions.TENANT_USER_PATCH_CANCEL});\n return;\n }\n\n dispatch({type: TenantActions.TENANT_USER_PATCH_SUCCESS});\n}\n\nexport const clearTenantEntityDraft = () => (dispatch, getState: () => AppState) => {\n dispatch({type: TenantActions.TENANT_ENTITY_DRAFT_CLEAR});\n}\n\nexport default {\n requestAvailableTenants,\n switchTenant,\n clearLoadedTenant,\n loadTenantEntityDraft,\n patchTenantEntityDraft,\n saveTenantEntityDraft,\n clearTenantEntityDraft,\n patchTenantUser\n}","import { createUserManager } from 'redux-oidc';\nimport {UserManagerSettings, WebStorageStateStore} from \"oidc-client\";\n\nconst userManagerConfig: UserManagerSettings = {\n client_id: 'interactive',\n redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/signin-oidc`,\n post_logout_redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/signout-oidc`,\n response_type: 'token id_token',\n scope: 'openid profile UniCatDB.Api email',\n authority: process.env.REACT_APP_IDM_AUTHORITY,\n silent_redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/oidc-dist/silent_renew.html`,\n automaticSilentRenew: true,\n filterProtocolClaims: true,\n loadUserInfo: true,\n userStore: new WebStorageStateStore({store: localStorage})\n};\nconst UserManager = createUserManager(userManagerConfig);\n\nexport default UserManager;\n","import * as React from \"react\";\nimport Spinner from \"react-spinkit\";\n\nexport const SplashScreen = (props) =>\n
    \n
    \n
    \n {/*Using data URI of ../../../public/images/logo.svg to make logo appear instantly, witout the need to make another HTTP request*/}\n \"UniCatDB\"\n\n \n
    \n
    \n
    ","import React from \"react\";\nimport {connect} from \"react-redux\";\nimport {CallbackComponent} from \"redux-oidc\";\nimport UserManager from \"../services/UserManager\";\nimport {RouteComponentProps} from \"react-router\";\nimport {AppState} from \"../store/reducers\";\nimport {ErrorType, setError} from \"../store/actions/ErrorActions\";\nimport {push} from \"connected-react-router\";\nimport {SplashScreen} from \"../scenes/Splash/SplashScreen\";\n\n\nconst mapStateToProps = (state: AppState) => ({\n \n});\n\nconst mapDispatchToProps = {\n setError,\n push\n};\n\n\ntype ComponentProps = {\n}\n\ntype Props = RouteComponentProps<{ id: string; schema: any }> &\n ReturnType &\n typeof mapDispatchToProps & ComponentProps;\n\n\nclass CallbackPage extends React.Component {\n render() {\n return (\n this.props.push(user.state.path ?? \"/\")}\n errorCallback={error => {\n this.props.setError(\"Authentication error.\", ErrorType.FATAL_ERROR, error.name +'> '+error.message)\n this.props.push(\"/\");\n // TODO: test error handling\n console.error(error);\n }}\n >\n \n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CallbackPage as unknown as React.ComponentClass);\n","import React from \"react\";\nimport {connect} from \"react-redux\";\nimport {Route, RouteProps} from \"react-router\";\nimport {AppState} from \"../store/reducers\";\nimport UserManager from \"../services/UserManager\";\nimport {SplashScreen} from \"../scenes/Splash/SplashScreen\";\n\ntype Props = ReturnType & RouteProps;\n\nconst PrivateRoute = ({oidc, children, ...rest}: Props) => {\n\n if (\n (!oidc.user || oidc.user.expired) &&\n !oidc.isLoadingUser // don't initiate redirect if the redux-oidc middleware is loading session from local storage\n ) {\n UserManager.signinRedirect(\n {\n data: {\n path: window.location.pathname\n }\n }\n );\n }\n\n return (\n \n {!oidc.user || oidc.user.expired ? : children}\n \n );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n oidc: state.oidc\n});\n\nexport default connect(mapStateToProps)(PrivateRoute);","import React from \"react\";\nimport {connect} from \"react-redux\";\nimport {SignoutCallbackComponent} from \"redux-oidc\";\nimport UserManager from \"../services/UserManager\";\nimport {RouteComponentProps} from \"react-router\";\nimport {AppState} from \"../store/reducers\";\nimport {ErrorType, setError} from \"../store/actions/ErrorActions\";\nimport {push} from \"connected-react-router\";\nimport {SplashScreen} from \"../scenes/Splash/SplashScreen\";\n\n\nconst mapStateToProps = (state: AppState) => ({\n \n});\n\nconst mapDispatchToProps = {\n setError,\n push\n};\n\n\ntype ComponentProps = {\n}\n\ntype Props = RouteComponentProps<{ id: string; schema: any }> &\n ReturnType &\n typeof mapDispatchToProps & ComponentProps;\n\n\nclass SignOutCallbackPage extends React.Component {\n render() {\n return (\n this.props.push(\"/\")}\n errorCallback={error => {\n this.props.setError(\"Authentication error.\", ErrorType.FATAL_ERROR, error.name +'> '+error.message)\n this.props.push(\"/\");\n // TODO: test error handling\n console.error(error);\n }}\n >\n \n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SignOutCallbackPage as unknown as React.ComponentClass);\n","import {createAvatarComponent, SrcSource, ValueSource} from \"react-avatar\";\n\n\nexport const UniCatAvatar = createAvatarComponent({\n sources: [ SrcSource, ValueSource ]\n});","import * as React from \"react\";\n\nimport {Tenant} from \"../services/GeneratedApiTsClient\";\nimport Avatar, {ReactAvatarProps} from \"react-avatar\";\nimport { UniCatAvatar } from \"./UniCatAvatar\";\n\nexport type Props = Pick & {\n tenant: Tenant\n}\n\nexport const TenantPersona = (props: Props) => {\n\n // TODO: remove ts-ignore after TS definitions fix in \"react-avatar\"\n // @ts-ignore\n const getRandomColor: (s:string) => string = Avatar.getRandomColor;\n\n return \n} ","import * as React from \"react\";\n\nimport {TenantUser} from \"../services/GeneratedApiTsClient\";\nimport Avatar, {ReactAvatarProps} from \"react-avatar\";\nimport { UniCatAvatar } from \"./UniCatAvatar\";\n\nexport type UserForAvatar = Omit;\n\nexport type Props = Pick & {\n user: UserForAvatar\n}\n\nexport const TenantUserPersona = (props: Props) => {\n\n // TODO: remove ts-ignore after TS definitions fix in \"react-avatar\"\n // @ts-ignore\n const getRandomColor: (s:string) => string = Avatar.getRandomColor;\n \n const getName: (u:UserForAvatar) => string = (u) => (u.firstName && u.lastName ? u.firstName+' '+u.lastName : u.fullName);\n\n return \n} ","import * as React from \"react\";\nimport {useEffect, useState} from \"react\";\nimport {AppState} from \"../../../store/reducers\";\nimport connect from \"react-redux/es/connect/connect\";\nimport {getConfiguredTenantsApi} from \"../../../store/selectors/ApiSelectors\";\nimport {TenantUser} from \"../../../services/GeneratedApiTsClient\";\nimport {TenantUserPersona} from \"../../../components/TenantUserPersona\";\nimport SpinnerInline from \"../../../components/Spinners/SpinnerInline\";\n\nconst mapStateToProps = (state: AppState) => ({\n tenantsApi: getConfiguredTenantsApi(state),\n});\n\nconst mapDispatchToProps = {};\n\ntype Props = ReturnType\n & typeof mapDispatchToProps\n & {\n tenantId: string\n}\n\nconst TenantUsersOverview = (props: Props) => {\n\n const [loadedUsers, setLoadedUsers] = useState([]);\n\n useEffect(() => {\n let isMounted = true;\n setLoadedUsers([]);\n\n props.tenantsApi.apiTenantsGetByIdUsers({tenantId: props.tenantId})\n .then((result) => {\n if (isMounted) {\n setLoadedUsers(result);\n }\n });\n return () => {\n isMounted = false;\n }\n }, [props.tenantId, props.tenantsApi]);\n\n return (\n
    \n {loadedUsers.length === 0 && }\n {loadedUsers.map(u => )}\n
    \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TenantUsersOverview);","import React from 'react';\nimport {connect} from 'react-redux';\nimport {AppState} from '../../store/reducers';\nimport {push} from \"connected-react-router\";\nimport {TENANT_ROUTE_PATH} from \"../../App\";\nimport {Button, Card, CardBody, CardTitle, Jumbotron, Media} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {Link} from \"react-router-dom\";\nimport {TenantPersona} from \"../../components/TenantPersona\";\nimport TenantUsersOverview from \"./components/TenantUsersOverview\";\n\nconst mapStateToProps = (state: AppState) => ({\n availableTenants: state.tenant.available\n});\n\nconst mapDispatchToProps = {\n push\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps & {};\n\nconst TenantSwitch = (props: Props) => {\n\n return (\n <>\n

    Your workspaces

    \n\n {props.availableTenants && props.availableTenants.map(tenant =>\n \n \n \n \n props.push(TENANT_ROUTE_PATH.replace(':tenantId?', tenant.id))}/>\n \n \n \n {tenant.name}\n \n
    \n
    \n \n
    \n
    \n\n \n\n \n\n
    \n
    \n
    \n
    \n
    \n
    \n )\n }\n {props.availableTenants && props.availableTenants?.length === 0 &&\n \n

    \n You don't have any workspaces yet. Either create new workspace or ask others to invite you to\n existing one.\n

    \n
    \n }\n \n \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TenantSwitch as any);\n","import {createSelector} from \"reselect\";\nimport {selectActiveTenantLoading, selectAvailableTenants, selectAvailableTenantsLoading} from \"./TenantSelectors\";\nimport {selectIsUserLoading} from \"./UserSelectors\";\n\nexport const isAppStateReady = createSelector([\n selectAvailableTenants,\n selectAvailableTenantsLoading,\n selectIsUserLoading,\n selectActiveTenantLoading\n ], (\n availableTenants,\n availableTenantsLoading,\n isUserLoading,\n isActiveTenantLoading\n ) =>\n !isUserLoading &&\n selectAvailableTenants !== null && !availableTenantsLoading &&\n !isActiveTenantLoading\n);\n","import React from \"react\";\nimport {connect} from \"react-redux\";\nimport UserManager from \"../services/UserManager\";\nimport {RouteComponentProps} from \"react-router\";\nimport {AppState} from \"../store/reducers\";\nimport {setError} from \"../store/actions/ErrorActions\";\nimport {push} from \"connected-react-router\";\nimport {SplashScreen} from \"../scenes/Splash/SplashScreen\";\n\n\nconst mapStateToProps = (state: AppState) => ({\n \n});\n\nconst mapDispatchToProps = {\n setError,\n push\n};\n\n\ntype ComponentProps = {\n}\n\ntype Props = RouteComponentProps<{ id: string; schema: any }> &\n ReturnType &\n typeof mapDispatchToProps & ComponentProps;\n\n\nclass SignOut extends React.Component {\n \n componentDidMount() {\n UserManager.signoutRedirect();\n }\n\n render() {\n return ;\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SignOut as unknown as React.ComponentClass);\n","import React from \"react\";\nimport {DropdownMenu, DropdownToggle, UncontrolledDropdown} from \"reactstrap\";\nimport {TenantPersona} from \"./TenantPersona\";\nimport {UserScopedTenant} from \"../services/GeneratedApiTsClient\";\nimport {TenantUserPersona, UserForAvatar} from \"./TenantUserPersona\";\n\ntype Props = {\n children: any,\n tenant?: UserScopedTenant\n tenantUser?: UserForAvatar\n}\n\nconst NavDropdownPersona = (props: Props ) => (\n\n \n \n
    \n {props.tenantUser && }\n {props.tenant && }\n
    \n {props.tenantUser?.fullName}
    \n {props.tenant?.name}\n
    \n
    \n
    \n \n {props.children}\n \n
    \n);\n\nexport default NavDropdownPersona;\n","import React from 'react';\nimport {Link, NavLink as RRNavLink} from 'react-router-dom';\nimport {Collapse, DropdownItem, Nav, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink} from 'reactstrap';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {connect} from 'react-redux';\nimport {AppState} from '../store/reducers';\nimport NavDropdownPersona from './NavDropdownPersona';\nimport {getActiveTenant, getActiveTenantRoutePrefix} from \"../store/selectors/TenantSelectors\";\nimport {push} from \"connected-react-router\";\nimport {getTenantUserOfSelf} from \"../store/selectors/UserSelectors\";\n\nconst mapStateToProps = (state: AppState) => ({\n tenantRoutePrefix: getActiveTenantRoutePrefix(state),\n activeTenant: getActiveTenant(state),\n activeTenantUser: getTenantUserOfSelf(state)\n});\n\nconst mapDispatchToProps = {\n push\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps & {};\n\nconst NavMenuNew = (props: Props) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const toggle = React.useCallback(() => setIsOpen(!isOpen), [isOpen]);\n\n const logout = () => {\n props.push(\"/signout\");\n }\n \n return (\n \n \n \"UniCatDB\"\n \n \n {' '}\n {' '}\n \n \n \n \n \n \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NavMenuNew as any);\n","import React from 'react';\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {AppState} from \"../store/reducers\";\nimport {Badge, Button, Carousel, CarouselControl, CarouselIndicators, CarouselItem, Modal, ModalBody} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {closeAttachmentsCarousel, showNotification} from \"../store/actions/GUIActions\";\nimport {requestAttachmentDownload, setActiveAttachment, setAttachmentProperty} from \"../store/actions/FindingActions\";\nimport {FileTypeIcon} from \"./FileTypeIcon\";\nimport {UploadedAttachment} from \"../store/reducers/FindingReducer\";\nimport {formatBytes} from \"../utils/fileUtils\";\nimport SpinnerInline from \"./Spinners/SpinnerInline\";\n\ntype Props = {}\n\nexport const AttachmentCarousel = (props: Props) => {\n const initialized = React.useRef();\n\n const dispatch = useDispatch()\n const isActive = useSelector(state => state.gui.attachmentsCarouselActive);\n const attachments = useSelector(state => state.finding.uploadedAttachments);\n const activeAttachmentId = useSelector(state => state.finding.activeAttachmentId);\n const [activeIndex, setActiveIndex] = React.useState(0);\n const [loading, setLoading] = React.useState(false);\n const [animating, setAnimating] = React.useState(false);\n\n const handleDownload = React.useCallback(\n async (id: string) => {\n const data = await dispatch(requestAttachmentDownload(id))\n if (!data) {\n await dispatch(showNotification({\n message: `Error downloading attachment ${id}`,\n type: 'error'\n }));\n return\n }\n await dispatch(setAttachmentProperty(id, \"data\", (data as unknown as Blob)))\n }, [dispatch])\n\n\n const goToIndex = React.useCallback((newIndex) => {\n if (animating) return;\n setActiveIndex(newIndex);\n }, [animating])\n\n\n React.useEffect(() => {\n setLoading(false);\n setAnimating(false);\n }, [isActive]);\n\n React.useEffect(() => {\n if (attachments.length < 1 || animating) {\n return\n }\n const attachment = attachments[activeIndex];\n if (attachment.resource.id && !attachment.resource.attributes.incomplete && attachment.thumbnail && !attachment.data) {\n handleDownload(attachment.resource.id)\n }\n }, [activeIndex, attachments, animating, handleDownload]);\n\n React.useEffect(() => {\n if (!activeAttachmentId || !isActive || attachments.length < 1 || animating) {\n return;\n }\n const attIndex = attachments.findIndex(att => att.resource.id === activeAttachmentId);\n if (!initialized.current && activeIndex !== attIndex) {\n goToIndex(attIndex)\n }\n initialized.current = true;\n const attachment = attachments.find(att => att.resource.id === activeAttachmentId);\n if (!attachment || attachment.resource.attributes.incomplete || attachment.data) {\n return;\n }\n\n handleDownload(activeAttachmentId)\n }, [activeAttachmentId, isActive, attachments, animating, activeIndex, handleDownload, goToIndex])\n\n const next = () => {\n if (animating || !attachments) return;\n const nextIndex = activeIndex === attachments.length - 1 ? 0 : activeIndex + 1;\n setActiveIndex(nextIndex);\n }\n\n const previous = () => {\n if (animating || !attachments) return;\n const nextIndex = activeIndex === 0 ? attachments.length - 1 : activeIndex - 1;\n setActiveIndex(nextIndex);\n }\n\n const closeCarousel = React.useCallback(() => {\n dispatch(setActiveAttachment(null))\n dispatch(closeAttachmentsCarousel())\n initialized.current = undefined;\n setActiveIndex(0);\n }, [dispatch])\n\n const onDownload = async () => {\n if (!attachments) {\n return null;\n }\n const attachment = attachments[activeIndex];\n\n if (attachment.resource.attributes.incomplete){\n showNotification({\n message: 'Cannot download incompletely uploaded file. Finish uploading first.',\n type: 'info',\n })\n return;\n }\n \n let data: any = attachment.data;\n if (!attachment.data && attachment.resource.id) {\n setLoading(true)\n data = await dispatch(requestAttachmentDownload(attachment.resource.id))\n setLoading(false)\n\n if (!data) {\n await showNotification({\n message: `Error downloading attachment ${attachment.resource.id}`,\n type: 'error'\n });\n return\n }\n }\n const url = URL.createObjectURL(data);\n const link = document.createElement(\"a\")\n link.href = url;\n link.setAttribute('download', `${attachment.resource.attributes.originalFilename}`);\n document.body.appendChild(link);\n link.click();\n link.parentNode!.removeChild(link);\n\n showNotification({\n message: `${attachment.resource.attributes.originalFilename} downloaded`,\n type: 'success',\n })\n }\n\n const renderAttachment = (attachment: UploadedAttachment) => {\n const dataToRender = attachment.data || attachment.thumbnail;\n if (attachment.thumbnail) {\n return (\n \n )\n }\n\n return (\n
    \n \n {attachment.resource.attributes.incomplete && \n INCOMPLETE UPLOAD\n }\n
    \n )\n }\n\n const getCaptionString = (att: UploadedAttachment) => {\n const size = formatBytes(att.resource.attributes.length);\n const uploadedDate = new Date(att.resource.attributes.uploadTimestamp).toLocaleDateString()\n return `${uploadedDate} ${size ? `/ ${size}` : ''}`\n }\n\n return \n \n
    \n \n \n
    \n \n ({key: a.resource.id})) ?? []}\n activeIndex={activeIndex} onClickHandler={goToIndex}/>\n {attachments?.map((att, index) => (\n setAnimating(true)}\n onExited={() => setAnimating(false)}\n >\n
    \n
    {att.resource.attributes.originalFilename}
    \n {getCaptionString(att)}\n
    \n
    \n {renderAttachment(att)}\n
    \n \n ))}\n \n \n \n
    \n
    \n}","export function formatBytes(a, b = 2) {\n if (0 === a) return \"0 Bytes\";\n const c = 0 > b ? 0 : b, d = Math.floor(Math.log(a) / Math.log(1024));\n return parseFloat((a / Math.pow(1024, d)).toFixed(c)) + \" \" + [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"][d]\n}","import {\n FindingSchema,\n FindingSchemaElement,\n FindingSchemaNestedDataDefinition,\n} from \"../../services/GeneratedApiTsClient\";\nimport {Filter} from \"../../models/FilterModel\";\nimport {ICodeGenerator} from \"./ICodeGenerator\";\nimport {SupportedFilterOperations} from \"../../models/FilterOperationModel\";\n\n\nexport class PythonCodeGenerator implements ICodeGenerator {\n\n private readonly isTestServer: boolean = false;\n\n constructor() {\n this.isTestServer = !!(process.env.REACT_APP_CODEGEN_IS_TEST_SERVER && process.env.REACT_APP_CODEGEN_IS_TEST_SERVER === 'true');\n }\n\n private import() {\n return `# Make sure to install the 'unicatdb' package to your environment, preferably using pip:\n# > 'pip install unicatdb'\n\nimport unicatdb`;\n }\n\n private configuration() {\n return `# Paste your Personal access token from https://account.unicatdb.org/\\nconfiguration = unicatdb.Configuration(\n access_token=''${this.isTestServer ? `,\n server=unicatdb.Servers.TEST_UNICATDB_ORG` : ''}\n)`;\n }\n\n public renderFilters(tenantId: string, filters: Array): string {\n\n return `${this.import()}\nfrom unicatdb.openapi_client import FindingArrayResponse, PageQuery\nfrom pprint import pprint\n\n${this.configuration()}\n\n# Query the data - apply filtering during the API call to leave the heavy-lifting to the server\nwith unicatdb.Client(configuration) as client:\n\n # workspace ID\n workspace_id = \"${tenantId}\"${filters && filters.length > 0 ? `\n\n # filtering\n filter_expressions = {\n${filters.map(f => ' \"' + f.attribute + '\": \"' + SupportedFilterOperations[f.operation].prefix + f.value + '\"').join(',\\n')}\n }` : ''}\n\n # get first twenty records\n page_query = PageQuery(number=1, size=20)\n\n # disable paging - uncomment next line to get all records\n #page_query = PageQuery(number=1, size=-1)\n \n findings: FindingArrayResponse = client.findings.api_findings_get(\n workspace_id,${filters && filters.length > 0 ? `\n filter=filter_expressions,` : ''}\n page=page_query\n )\n\n # pretty-print results - replace with your processing logic\n pprint(findings)\n`;\n\n }\n\n public renderNewFinding(tenantId: string, schema: FindingSchema, schemaId: string): string {\n\n const attributes: FindingSchemaElement[] = schema.definitionGroups?.flatMap(x => x.definitions).filter(x => x && x.name) ?? [];\n const nestedDataAttributes: FindingSchemaNestedDataDefinition[] = schema.nestedDataDefinitions?.filter(x => x && x.name) ?? [];\n\n return `${this.import()} \nfrom unicatdb.openapi_client import FindingSingleResponse, FindingResourceObject, \\\\\n NewFindingRequestBody, RelationshipResourceIdentifier, ResponseRelationshipOneToOne, \\\\\n FindingResourceObjectRelationships, TaxonomyName, Finding\nfrom pprint import pprint\n\n${this.configuration()}\n\n# Create a new finding in schema '${schema.name}' \nwith unicatdb.Client(configuration) as client:\n\n # EXAMPLE of fully populated finding\n\n # new_finding = Finding(\n # document_name=\"API codegen generated finding 1234\",\n # amount=333,\n # document_set=\"Example set\",\n # date=\"2020-12-31T00:00:00.000Z\",\n # location_description=\"Example location\",\n # location_gps_point=(LatLngGps(lat=41.123,lng=51.654)),\n # location_gps_area=[\n # LatLngGps(lat=41.123, lng=51.654),\n # LatLngGps(lat=41.124, lng=51.656),\n # LatLngGps(lat=41.125, lng=51.657),\n # ],\n # note=\"Example note\",\n # tags=[\"My tag1\", \"My tag2\"],\n # taxonomy_human_readable=\"Felis silvestris f. catus (Ragni a Randi, 1986)\",\n # taxonomy_name=(TaxonomyName(\n # kingdom=\"Animalia\",\n # phylum=\"Chordata\",\n # _class=\"Mammalia\",\n # order=\"Carnivora\",\n # family=\"Felidae\",\n # genus=\"Felis\",\n # species=\"silvestris\",\n # authorship=\"Ragni a Randi, 1986\"\n # )),\n # attachment_note=\"Example attachment note\",\n # dynamic_data=({\n${attributes.map(f => ' # \"' + f.name + '\": None').join(',\\n') + (nestedDataAttributes.length ? ',' : '')}\n${nestedDataAttributes.map(n =>\n ' # \"' + n.name + '\": [\\n' +\n ' # {\\n' + n.definitions.filter(x => x && x.name).map(f => ' # \"' + f.name + '\": None').join(',\\n') + '\\n # },\\n' +\n ' # {\\n' + n.definitions.filter(x => x && x.name).map(f => ' # \"' + f.name + '\": None').join(',\\n') + '\\n # }\\n' +\n ' # ]'\n ).join(',\\n')}\n # })\n # )\n\n new_finding = Finding(\n document_name=\"API codegen generated finding 1234\",\n amount=1,\n document_set=None,\n date=None,\n person=None,\n location_description=None,\n location_gps_point=None,\n location_gps_area=None,\n note=None,\n tags=None,\n taxonomy_human_readable=None,\n taxonomy_name=(TaxonomyName(\n kingdom=None,\n phylum=None,\n _class=None,\n order=None,\n family=None,\n genus=None,\n species=None,\n authorship=None\n )),\n attachment_note=None,\n dynamic_data=({\n${attributes.map(f => ' \"' + f.name + '\": None').join(',\\n') + (nestedDataAttributes.length ? ',' : '')}\n${nestedDataAttributes.map(n =>\n ' \"' + n.name + '\": [\\n' +\n ' {\\n' + n.definitions.filter(x => x && x.name).map(f => ' \"' + f.name + '\": None').join(',\\n') + '\\n },\\n' +\n ' {\\n' + n.definitions.filter(x => x && x.name).map(f => ' \"' + f.name + '\": None').join(',\\n') + '\\n }\\n' +\n ' ]'\n ).join(',\\n')}\n })\n )\n\n # assign to schema\n new_finding_relationships = FindingResourceObjectRelationships(\n schema=(ResponseRelationshipOneToOne(\n data=(RelationshipResourceIdentifier(\n type=\"schemas\",\n id=\"${schemaId}\" # ID of schema '${schema.name}'\n ))\n ))\n )\n\n # construct request payload\n create_finding_request = NewFindingRequestBody(data=(\n FindingResourceObject(\n type=\"findings\",\n attributes=new_finding,\n relationships=new_finding_relationships\n )\n ))\n\n # workspace ID\n workspace_id = \"${tenantId}\"\n\n try:\n # insert new finding (make POST API call with request payload)\n insert_result: FindingSingleResponse = client.findings.api_findings_post(\n workspace_id,\n new_finding_request_body=create_finding_request\n )\n \n # pretty-print inserterted finding\n pprint(insert_result)\n \n except Exception as e:\n # add custom error handling code her\n print(\"Error occured when insering new finding: \" + e.__str__())\n\n`;\n\n }\n}","import {\n FindingSchema,\n FindingSchemaElement, FindingSchemaNestedDataDefinition,\n} from \"../../services/GeneratedApiTsClient\";\nimport {Filter} from \"../../models/FilterModel\";\nimport {ICodeGenerator} from \"./ICodeGenerator\";\nimport {SupportedFilterOperations} from \"../../models/FilterOperationModel\";\n\n\nexport class JupyterCodeGenerator implements ICodeGenerator {\n\n private readonly isTestServer: boolean = false;\n\n constructor() {\n this.isTestServer = !!(process.env.REACT_APP_CODEGEN_IS_TEST_SERVER && process.env.REACT_APP_CODEGEN_IS_TEST_SERVER === 'true');\n }\n\n private import(){\n return `#%% Install a pip package in the current Jupyter kernel\nimport sys\n!{sys.executable} -m pip install unicatdb\n \n#%% Import pip package\nimport unicatdb`;\n }\n\n private configuration(){\n return `# Paste your Personal access token from https://account.unicatdb.org/\\nconfiguration = unicatdb.Configuration(\n access_token=''${this.isTestServer ? `,\n server=unicatdb.Servers.TEST_UNICATDB_ORG` : ''}\n)`;\n }\n \n public renderFilters(tenantId: string, filters: Array): string {\n \n return `${this.import()}\n\n${this.configuration()}\n\n#%% Query the data - apply filtering during the API call to leave the heavy-lifting to the server\nfrom unicatdb.openapi_client import FindingArrayResponse, PageQuery\nfrom pprint import pprint\n\nwith unicatdb.Client(configuration) as client:\n\n # workspace ID\n workspace_id = \"${tenantId}\"${filters && filters.length > 0 ? `\n\n # filtering\n filter_expressions = {\n${filters.map(f => ' \"'+f.attribute+'\": \"'+SupportedFilterOperations[f.operation].prefix+f.value+'\"').join(',\\n')}\n }` : ''}\n\n # get first twenty records\n page_query = PageQuery(number=1, size=20)\n\n # disable paging - uncomment next line to get all records\n #page_query = PageQuery(number=1, size=-1)\n \n findings: FindingArrayResponse = client.findings.api_findings_get(\n workspace_id,${filters && filters.length > 0 ? `\n filter=filter_expressions,` : ''}\n page=page_query\n )\n\n # pretty-print results - replace with your processing logic\n pprint(findings)\n`;\n \n }\n\n public renderNewFinding(tenantId: string, schema: FindingSchema, schemaId: string): string {\n \n const attributes: FindingSchemaElement[] = schema.definitionGroups?.flatMap(x => x.definitions).filter(x => x && x.name) ?? [];\n const nestedDataAttributes: FindingSchemaNestedDataDefinition[] = schema.nestedDataDefinitions?.filter(x => x && x.name) ?? [];\n\n return `${this.import()}\n\n${this.configuration()}\n\n#%% Create a new finding in schema '${schema.name}'\nfrom unicatdb.openapi_client import FindingSingleResponse, FindingResourceObject, \\\\\n NewFindingRequestBody, RelationshipResourceIdentifier, ResponseRelationshipOneToOne, \\\\\n FindingResourceObjectRelationships, TaxonomyName, Finding\nfrom pprint import pprint\n\nwith unicatdb.Client(configuration) as client:\n\n # EXAMPLE of fully populated finding\n\n # new_finding = Finding(\n # document_name=\"API codegen generated finding 1234\",\n # amount=333,\n # document_set=\"Example set\",\n # date=\"2020-12-31T00:00:00.000Z\",\n # location_description=\"Example location\",\n # location_gps_point=(LatLngGps(lat=41.123,lng=51.654)),\n # location_gps_area=[\n # LatLngGps(lat=41.123, lng=51.654),\n # LatLngGps(lat=41.124, lng=51.656),\n # LatLngGps(lat=41.125, lng=51.657),\n # ],\n # note=\"Example note\",\n # tags=[\"My tag1\", \"My tag2\"],\n # taxonomy_human_readable=\"Felis silvestris f. catus (Ragni a Randi, 1986)\",\n # taxonomy_name=(TaxonomyName(\n # kingdom=\"Animalia\",\n # phylum=\"Chordata\",\n # _class=\"Mammalia\",\n # order=\"Carnivora\",\n # family=\"Felidae\",\n # genus=\"Felis\",\n # species=\"silvestris\",\n # authorship=\"Ragni a Randi, 1986\"\n # )),\n # attachment_note=\"Example attachment note\",\n # dynamic_data=({\n${attributes.map(f => ' # \"'+f.name+'\": None').join(',\\n')}\n${nestedDataAttributes.map(n =>\n ' # \"' + n.name + '\": [\\n' +\n ' # {\\n' + n.definitions.filter(x => x && x.name).map(f => ' # \"' + f.name + '\": None').join(',\\n') + '\\n # },\\n' +\n ' # {\\n' + n.definitions.filter(x => x && x.name).map(f => ' # \"' + f.name + '\": None').join(',\\n') + '\\n # }\\n' +\n ' # ]'\n ).join(',\\n')}\n # })\n # )\n\n new_finding = Finding(\n document_name=\"API codegen generated finding 1234\",\n amount=1,\n document_set=None,\n date=None,\n person=None,\n location_description=None,\n location_gps_point=None,\n location_gps_area=None,\n note=None,\n tags=None,\n taxonomy_human_readable=None,\n taxonomy_name=(TaxonomyName(\n kingdom=None,\n phylum=None,\n _class=None,\n order=None,\n family=None,\n genus=None,\n species=None,\n authorship=None\n )),\n attachment_note=None,\n dynamic_data=({\n${attributes.map(f => ' \"'+f.name+'\": None').join(',\\n')}\n${nestedDataAttributes.map(n =>\n ' \"' + n.name + '\": [\\n' +\n ' {\\n' + n.definitions.filter(x => x && x.name).map(f => ' \"' + f.name + '\": None').join(',\\n') + '\\n },\\n' +\n ' {\\n' + n.definitions.filter(x => x && x.name).map(f => ' \"' + f.name + '\": None').join(',\\n') + '\\n }\\n' +\n ' ]'\n ).join(',\\n')}\n })\n )\n\n # assign to schema\n new_finding_relationships = FindingResourceObjectRelationships(\n schema=(ResponseRelationshipOneToOne(\n data=(RelationshipResourceIdentifier(\n type=\"schemas\",\n id=\"${schemaId}\" # ID of schema '${schema.name}'\n ))\n ))\n )\n\n # construct request payload\n create_finding_request = NewFindingRequestBody(data=(\n FindingResourceObject(\n type=\"findings\",\n attributes=new_finding,\n relationships=new_finding_relationships\n )\n ))\n\n # workspace ID\n workspace_id = \"${tenantId}\"\n\n try:\n # insert new finding (make POST API call with request payload)\n insert_result: FindingSingleResponse = client.findings.api_findings_post(\n workspace_id,\n new_finding_request_body=create_finding_request\n )\n \n # pretty-print inserterted finding\n pprint(insert_result)\n \n except Exception as e:\n # add custom error handling code her\n print(\"Error occured when insering new finding: \" + e.__str__())\n\n`;\n\n }\n \n}","import * as React from \"react\";\nimport {useState} from \"react\";\nimport {\n Button,\n Form,\n FormGroup,\n FormText,\n Modal,\n ModalBody,\n ModalHeader, Nav, NavItem, NavLink, TabContent, TabPane\n} from 'reactstrap';\nimport {connect} from 'react-redux';\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {closeCodegenModal} from \"../../store/actions/GUIActions\";\nimport {CopyToClipboard} from \"../CopyToClipboard\";\nimport {AppState} from \"../../store/reducers\";\nimport {processApiResponse} from \"../../store/actions/ErrorActions\";\nimport {ICodeGenerator} from \"../../utils/codeGenerators/ICodeGenerator\";\nimport {PythonCodeGenerator} from \"../../utils/codeGenerators/PythonCodeGenerator\";\nimport Highlight from \"react-highlight.js\";\nimport {JupyterCodeGenerator} from \"../../utils/codeGenerators/JupyterCodeGenerator\";\nimport {selectActiveTenantId} from \"../../store/selectors/TenantSelectors\";\n\nconst mapStateToProps = (state: AppState) => ({\n isOpen: state.gui.codegenModalActive,\n modalType: state.gui.codegenModalType,\n filters: state.filter.filters,\n sorting: state.listing.sorting,\n schema: state.schema,\n activeTenantId: selectActiveTenantId(state),\n});\n\nconst mapDispatchToProps = {\n closeModal: closeCodegenModal,\n processApiResponse\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps & {};\n\nconst FindingsCodegenModal = (props: Props) => {\n\n const [activeTab, setActiveTab] = useState('0');\n\n const codeGenerators: { [key: string]: ICodeGenerator } = {\n \"Python\": new PythonCodeGenerator(),\n \"Jupyter Notebook\": new JupyterCodeGenerator(),\n }\n\n const toggle = tab => {\n if (activeTab !== tab) setActiveTab(tab);\n }\n\n const renderCodegenTab = (codeGenerator: ICodeGenerator, tabId: string) => {\n\n let generatedCode = '';\n if (props.modalType === \"LISTING\"){\n generatedCode = codeGenerator.renderFilters(props.activeTenantId, props.filters);\n } else if (props.modalType === \"NEW_FINDING\" && props.schema.loadedSchemaId) {\n generatedCode = codeGenerator.renderNewFinding(props.activeTenantId, props.schema.loadedSchema, props.schema.loadedSchemaId);\n }\n \n return (\n \n
    \n \n\n \n {generatedCode}\n \n\n \n \n \n \n \n
    \n
    \n\n );\n };\n\n\n return (\n \n \n \n API script code generator\n \n \n\n

    \n UniCatDB offers programatic access using it's REST API which is described using the OpenApi standard\n (a.k.a Swagger).\n For direct API usage instructions and examples, See interactive\n documentation, or use ready-made generated API client scripts of the current\n view:\n

    \n\n \n \n {Object.values(codeGenerators).map((generator, index) => renderCodegenTab(generator, index + ''))}\n \n
    \n
    \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FindingsCodegenModal as any);\n\n","import {TenantInviteeRole} from \"../../services/GeneratedApiTsClient\";\n\nexport const TenantInviteeRoleNames: {value: TenantInviteeRole, label:string}[] = [\n {value: TenantInviteeRole.GUEST, label: \"Guest\"},\n {value: TenantInviteeRole.COLLABORATOR, label: \"Collaborator\"},\n {value: TenantInviteeRole.OWNER, label: \"Owner\"},\n]","import * as React from \"react\";\nimport {\n Button,\n Form,\n FormGroup,\n FormText, Input,\n Modal,\n ModalBody,\n ModalHeader\n} from 'reactstrap';\nimport {connect} from 'react-redux';\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {closeInvitationModal} from \"../../store/actions/GUIActions\";\nimport {CopyToClipboard} from \"../CopyToClipboard\";\nimport {AppState} from \"../../store/reducers\";\nimport {generateAbsolutePath} from \"../../utils/absoluteUrl\";\nimport {TenantInviteeRoleNames} from \"../../store/models/TenantInviteeRoleNames\";\nimport {Invitation} from \"../../services/GeneratedApiTsClient\";\nimport SpinnerRibbon from \"../Spinners/SpinnerRibbon\";\n\nconst mapStateToProps = (state: AppState) => ({\n isOpen: state.gui.invitationModalActive,\n isLoading: state.gui.invitationModalLoading,\n invitation: state.gui.inviteModalInvitation\n});\n\nconst mapDispatchToProps = {\n closeModal: closeInvitationModal\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps & {};\n\nconst InvitationModal = (props: Props) => {\n\n const invitationLink = props.invitation ? generateAbsolutePath('/workspaces/invitation/:id/:key', {\n id: props.invitation.tenant.id,\n key: props.invitation.key\n }) : undefined\n\n const sendMail = (invitation?: Invitation) => {\n if (!invitation) return;\n\n const subject = `Invitation to join ${invitation.tenant.name} at UniCatDB`;\n const body = `Hello!\\n\\nJoin me in UniCatDB workspace ${invitation.tenant.name} as `+\n `${TenantInviteeRoleNames.find(x => x.value === props.invitation?.inviteeRole)?.label} using this link: \\n\\n`+\n invitationLink+\n `\\n\\nPlease note this link is for one-time-use only and it will expire at ${invitation.expiresAt.toISOString()}`;\n\n window.location.href = `mailto:?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;\n }\n\n return (\n \n \n \n New invitation\n \n \n {props.isLoading && }\n\n {props.invitation && <>\n

    \n Here's a new invitation link for someone to join\n workspace {props.invitation.tenant.name} as {TenantInviteeRoleNames.find(x => x.value === props.invitation?.inviteeRole)?.label}:\n

    \n\n
    \n \n\n \n\n \n \n\n \n\n \n \n
    \n\n

    \n Please note: This invitation link expires\n at {props.invitation.expiresAt.toISOString()} and is intendet for single person\n only: once redeemd, it will no longer work. Shoud you like to invite additional people, create a\n separate invitations for all of them.\n

    \n\n }\n\n\n
    \n
    \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InvitationModal as any);\n \n","import {generatePath} from \"react-router\";\n\nexport const generateAbsolutePath = (\n pattern: string,\n params?: { [paramName: string]: string | number | boolean | undefined }\n) => process.env.REACT_APP_BASE_PATH + generatePath((pattern.startsWith('/') ? pattern : '/' + pattern), params)\n\n","import React from 'react';\nimport NavMenu from '../NavMenu';\nimport {AttachmentCarousel} from \"../AttachmentsCarousel\";\nimport \"react-toastify/dist/ReactToastify.css\";\nimport FindingsCodegenModal from \"../CodeGenerator/FindingsCodegenModal\";\nimport InvitationModal from \"../Invite/InvitationModal\";\n\nexport const NavbarLayout = props => (\n
    \n \n \n {props.children}\n \n \n \n \n
    \n);","import React, {useCallback, useRef, useState} from 'react';\nimport {connect, useDispatch} from 'react-redux';\nimport {AppState} from '../../store/reducers';\nimport {goBack, push} from \"connected-react-router\";\nimport {Button} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {DataCardTextInputElement} from \"../../components/DataCardComponnents/DataCardTextInputElement\";\nimport {\n patchTenantEntityDraft,\n requestAvailableTenants,\n saveTenantEntityDraft, switchTenant\n} from \"../../store/actions/TenantActions\";\nimport SpinnerOverlay from \"../../components/Spinners/SpinnerOverlay\";\n\nconst mapStateToProps = (state: AppState) => ({\n tenantId: state.tenant.entityDraftId,\n tenant: state.tenant.entityDraft,\n loading: state.tenant.entityDraftLoading\n});\n\nconst mapDispatchToProps = {\n patchTenantEntityDraft,\n requestAvailableTenants,\n switchTenant,\n push,\n goBack\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps & {};\n\nconst TenantEdit = (props: Props) => {\n\n const [wasValidated, setWasValidated] = useState(false);\n\n const formEl = useRef(null);\n\n const dispatch = useDispatch();\n\n const handleInputChange = (event) => {\n const target = event.target;\n const value = target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n const patch = {}\n patch[name] = value;\n\n props.patchTenantEntityDraft(patch);\n };\n\n const validate = useCallback(() => {\n if (formEl.current && !formEl.current.checkValidity()) {\n for (let i = 0; i < formEl.current.length; i++) {\n const elem: any = formEl.current[i];\n\n if (!elem.validity.valid) {\n elem.scrollIntoView();\n elem.focus();\n return false;\n }\n }\n return false;\n }\n\n return true;\n }, []);\n\n\n const onSubmit = async (e) => {\n e.preventDefault();\n if (validate()) {\n await dispatch(saveTenantEntityDraft());\n props.requestAvailableTenants();\n props.push('/workspaces');\n } else {\n setWasValidated(true);\n }\n };\n\n return (\n
    \n {props.loading && }\n\n

    \n {props.tenantId ? 'Edit workspace' : 'New workspace'}\n

    \n\n\n
    \n \n
    \n\n
    \n {\n props.goBack();\n }}>\n \n Cancel\n \n\n \n
    \n \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TenantEdit as any);\n","import * as React from \"react\";\nimport {\n DropdownItem,\n DropdownMenu,\n DropdownToggle,\n UncontrolledButtonDropdown\n} from 'reactstrap';\nimport {connect} from 'react-redux';\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {openInvitationModal} from \"../../store/actions/GUIActions\";\nimport {AppState} from \"../../store/reducers\";\nimport {UncontrolledButtonDropdownProps} from \"reactstrap/lib/ButtonDropdown\";\nimport {TenantInviteeRoleNames} from \"../../store/models/TenantInviteeRoleNames\";\n\nconst mapStateToProps = (state: AppState) => ({});\n\nconst mapDispatchToProps = {\n openInvitationModal\n};\n\ntype ComponentProps = UncontrolledButtonDropdownProps & {\n tenantId: string\n disabled?: boolean\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps & ComponentProps;\n\nconst InvitationDropdown = ({tenantId, openInvitationModal, disabled, ...restProps}: Props) => {\n\n return (\n \n \n \n Invite new ...\n \n \n {TenantInviteeRoleNames.map(r =>\n openInvitationModal(tenantId, r.value)}>\n {r.label}\n \n )}\n \n \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InvitationDropdown as unknown as React.ComponentClass);\n\n","import React, {useEffect, useState} from 'react';\nimport {connect} from 'react-redux';\nimport {AppState} from '../../store/reducers';\nimport {goBack} from \"connected-react-router\";\nimport {Button, Card, CardBody, Col, Row} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {DataCardTextElement} from \"../FindingDetail/components/DataCardTextElement\";\nimport {selectAvailableTenantById} from \"../../store/selectors/TenantSelectors\";\nimport {Link} from \"react-router-dom\";\nimport {TenantUser, TenantUserRole} from \"../../services/GeneratedApiTsClient\";\nimport {TenantUserPersona} from \"../../components/TenantUserPersona\";\nimport {getConfiguredTenantsApi} from \"../../store/selectors/ApiSelectors\";\nimport {ThemedSelect} from \"../../components/ThemedSelect\";\nimport {patchTenantUser} from \"../../store/actions/TenantActions\";\n\nimport InvitationDropdown from \"../../components/Invite/InvitationDropdown\";\n\nimport {selectCurrentUsersIdmSubjectId} from \"../../store/selectors/UserSelectors\";\nimport SpinnerOverlay from \"../../components/Spinners/SpinnerOverlay\";\n\n\nconst mapStateToProps = (state: AppState, props: TenantDetailProps) => ({\n tenantsApi: getConfiguredTenantsApi(state),\n tenant: selectAvailableTenantById(state, props),\n tenantUserPatchLoading: state.tenant.userPatchLoading,\n currentUserIdmSubjectId: selectCurrentUsersIdmSubjectId(state)\n});\n\nconst mapDispatchToProps = {\n goBack,\n patchTenantUser\n};\n\ntype TenantDetailProps = {\n tenantId: string\n}\n\ntype Props = ReturnType & typeof mapDispatchToProps & TenantDetailProps;\n\nconst TenantDetail = (props: Props) => {\n\n const [loadedUsers, setLoadedUsers] = useState([]);\n const [canEdit, setCanEdit] = useState(false)\n const [isMultiOwners, setIsMultiOwners] = useState(false)\n const roles = [\n {value: TenantUserRole.INACTIVE, label: \"No access\", icon: \"user-lock\"},\n {value: TenantUserRole.GUEST, label: \"Guest\", icon: \"user-lock\"},\n {value: TenantUserRole.COLLABORATOR, label: \"Collaborator\", icon: \"user-lock\"},\n {value: TenantUserRole.OWNER, label: \"Owner\", icon: \"user-lock\"},\n ]\n\n useEffect(() => {\n if (props.tenantUserPatchLoading) return;\n\n setLoadedUsers([]);\n\n props.tenantsApi.apiTenantsGetByIdUsers({tenantId: props.tenantId})\n .then((result) => {\n \n const currentUser: TenantUser[] = result.filter(item => {return item.idmSubjectId === props.currentUserIdmSubjectId});\n if(currentUser.length === 1){\n setCanEdit(currentUser[0].role === TenantUserRole.OWNER)\n }\n \n setIsMultiOwners(result.filter(item => item.role === TenantUserRole.OWNER).length > 1)\n \n setLoadedUsers(result);\n });\n\n }, [props.tenantId, props.tenantsApi, props.tenantUserPatchLoading, props.currentUserIdmSubjectId]);\n\n return (\n <>\n {(loadedUsers.length === 0 || props.tenantUserPatchLoading) && }\n\n

    \n Manage workspace\n

    \n\n
    \n {\n props.goBack();\n }}>\n \n Back\n \n\n \n
    \n\n
    \n

    General information

    \n \n \n \n \n \n
    \n \n
    \n u.idmSubjectId === props.currentUserIdmSubjectId)?.role !== TenantUserRole.OWNER}/>\n
    \n \n
    \n

    Users

    \n \n \n {loadedUsers.map(u =>\n \n \n \n {u.fullName}\n \n \n\n r.value === u.role)}\n isDisabled={!canEdit || (u.role === TenantUserRole.OWNER && !isMultiOwners)}\n searchable={false} onChange={(input) => {\n props.patchTenantUser(props.tenantId, u.id, TenantUserRole[input.value])\n }}/>\n \n \n \n )}\n \n \n
    \n\n \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TenantDetail as any);\n","import React, {useState} from 'react';\nimport HelpdeskButton from \"../HelpdeskButton\";\nimport NavDropdownPersona from \"../NavDropdownPersona\";\nimport {Collapse, DropdownItem, Nav, Navbar, NavbarBrand, NavbarToggler} from \"reactstrap\";\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\nimport {Link} from \"react-router-dom\";\nimport {AppState} from \"../../store/reducers\";\nimport {push} from \"connected-react-router\";\nimport {connect} from \"react-redux\";\nimport InvitationModal from \"../Invite/InvitationModal\";\n\n\nconst mapStateToProps = (state: AppState) => ({\n oidcUserProfile: state.oidc.user?.profile\n});\n\nconst mapDispatchToProps = {\n push\n};\n\ntype Props = ReturnType & typeof mapDispatchToProps;\n\nconst SideWallpaperLayout: React.FC = (props) => {\n const [navbarOpen, toggleNavbarOpen] = useState(false);\n \n return (\n
    \n
    \n
    \n
    \n
    \n\n \n \n \"UniCatDB\"/\n \n toggleNavbarOpen(!navbarOpen)}>\n {' '}\n {' '}\n \n \n {props.oidcUserProfile && }\n \n \n \n {props.children}\n\n
    \n \n
    \n\n \n \n
    \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SideWallpaperLayout as any);","import React, {useEffect, useState} from 'react';\nimport {connect} from 'react-redux';\nimport {AppState} from '../../store/reducers';\nimport {Invitation} from \"../../services/GeneratedApiTsClient\";\nimport {getConfiguredTenantsApi} from \"../../store/selectors/ApiSelectors\";\nimport {TenantPersona} from \"../../components/TenantPersona\";\nimport {TenantUserPersona} from \"../../components/TenantUserPersona\";\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {Button} from \"reactstrap\";\nimport {TenantInviteeRoleNames} from \"../../store/models/TenantInviteeRoleNames\";\nimport {processApiResponse} from \"../../store/actions/ErrorActions\";\nimport {ApiOnRejectedResult} from \"../../services/ApiService/ApiService\";\nimport {push} from \"connected-react-router\";\nimport {generatePath} from \"react-router\";\nimport {TENANT_ROUTE_PATH} from \"../../App\";\nimport {requestAvailableTenants} from \"../../store/actions/TenantActions\";\nimport SpinnerOverlay from \"../../components/Spinners/SpinnerOverlay\";\n\nconst mapStateToProps = (state: AppState, props: TenantInvitationProps) => ({\n tenantsApi: getConfiguredTenantsApi(state),\n userOfSelf: {\n fullName: state.oidc.user?.profile.name ?? '',\n firstName: state.oidc.user?.profile.given_name,\n lastName: state.oidc.user?.profile.family_name,\n pictureUrl: state.oidc.user?.profile.picture,\n idmSubjectId: state.oidc.user?.profile.sub ?? ''\n },\n});\n\nconst mapDispatchToProps = {\n push,\n requestAvailableTenants\n};\n\ntype TenantInvitationProps = {\n tenantId: string,\n invitationKey: string\n}\n\ntype Props = ReturnType & typeof mapDispatchToProps & TenantInvitationProps;\n\nconst TenantInvitation = (props: Props) => {\n\n const [loading, setLoading] = useState(true);\n const [invitation, setInvitation] = useState(null);\n\n useEffect(() => {\n setLoading(true);\n setInvitation(null);\n\n props.tenantsApi.apiTenantsGetByIdInvitationsByKey({tenantId: props.tenantId, key: props.invitationKey})\n .then((result) => {\n setInvitation(result);\n setLoading(false);\n }, () => {\n setInvitation(null);\n setLoading(false);\n });\n\n }, [props.tenantId, props.tenantsApi, props.invitationKey]);\n\n const accept = () => {\n if (!invitation || !invitation.tenant) return;\n\n setLoading(true);\n\n props.tenantsApi.apiTenantsGetByIdInvitationsByKeyRedeem({tenantId: props.tenantId, key: props.invitationKey})\n .then(() => {\n setLoading(false);\n props.requestAvailableTenants()\n props.push(generatePath(TENANT_ROUTE_PATH, {tenantId: invitation.tenant.id}));\n }, (error: ApiOnRejectedResult) => {\n if (\"status\" in error && error.status === 409) {\n setLoading(false);\n setInvitation(false);\n } else {\n processApiResponse(error, 'Error accepting invitation');\n }\n });\n }\n\n\n return (\n
    \n {loading && }\n\n

    \n Workspace invitation\n

    \n\n {(invitation) && <>\n\n
    \n \n \n \n \n \n
    \n\n

    User {invitation.inviter.fullName} has invited You to join them the\n workspace {invitation.tenant.name} as {TenantInviteeRoleNames.find(x => x.value === invitation.inviteeRole)?.label}.\n

    \n\n \n\n }\n\n {(invitation === null) && <>\n

    Invitation link has expired. Please ask the workspace owner to issue a new invitation for you.

    \n }\n\n {(invitation === false) && <>\n

    You already have access to the workspace.

    \n \n }\n\n
    \n );\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TenantInvitation as any);\n","import * as React from 'react';\nimport {Redirect, Route, RouteComponentProps, Switch} from 'react-router';\nimport FindingDetail from \"./scenes/FindingDetail/FindingDetail\";\nimport FindingEdit from \"./scenes/FindingEdit/FindingEdit\";\nimport Findings from \"./scenes/Findings/Findings\";\nimport {connect} from \"react-redux\";\nimport {AppState} from \"./store/reducers\";\nimport Schemas from \"./scenes/Schemas/Schemas\";\nimport SchemaEdit from \"./scenes/SchemaEdit/SchemaEdit\";\nimport {FallBackScreen} from \"./scenes/Error/FallBackScreen\";\nimport ErrorScreen from \"./scenes/Error/ErrorScreen\";\n\nimport * as am4core from \"@amcharts/amcharts4/core\";\n\nimport {am4themes_unicatTheme} from \"./components/Graphs/graphTheme\";\nimport CallbackPage from \"./components/CallbackPage\";\nimport PrivateRoute from \"./components/PrivateRoute\";\nimport SignOutCallbackPage from \"./components/SignOutCallbackPage\";\nimport TenantSwitch from \"./scenes/TenantSwitch/TenantSwitch\";\nimport {\n clearLoadedTenant,\n clearTenantEntityDraft,\n loadTenant,\n loadTenantEntityDraft\n} from \"./store/actions/TenantActions\";\nimport {isAppStateReady} from \"./store/selectors/GuiSelectors\";\nimport {SplashScreen} from \"./scenes/Splash/SplashScreen\";\nimport SignOut from \"./components/SignOut\";\nimport {getAvailableTenantIds} from \"./store/selectors/TenantSelectors\";\nimport NotAvailableScreen from \"./scenes/Error/NotAvailableScreen\";\nimport {NavbarLayout} from \"./components/Layout/NavbarLayout\";\nimport TenantEdit from \"./scenes/TenantSwitch/TenantEdit\";\nimport TenantDetail from \"./scenes/TenantSwitch/TenantDetail\";\nimport SideWallpaperLayout from \"./components/Layout/SideWallpaperLayout\";\nimport {TenantUserRole} from \"./services/GeneratedApiTsClient\";\nimport withTenantRoles from \"./components/Hoc/withTenantRoles\";\nimport TenantInvitation from \"./scenes/TenantSwitch/TenantInvitation\";\n\nam4core.useTheme(am4themes_unicatTheme);\n\nexport const TENANT_ROUTE_PATH = '/t/:tenantId?';\n\nconst mapStateToProps = (state: AppState) => ({\n error: state.error,\n availableTenantIds: getAvailableTenantIds(state),\n isAppReady: isAppStateReady(state)\n});\n\nconst mapDispatchToProps = {\n loadTenant,\n clearLoadedTenant,\n loadTenantEntityDraft,\n clearTenantEntityDraft,\n}\n\ntype Props = RouteComponentProps<{ id: string; schema: any }>\n & ReturnType\n & typeof mapDispatchToProps;\n\nconst App = (props: Props) => {\n /**\n * Load tenant and return TRUE if tenant is available to the user, clear and return FALSE otherwise.\n * @param tenantId\n */\n const checkTenant = (tenantId: string): boolean => {\n if (props.availableTenantIds.includes(tenantId)) {\n props.loadTenant(tenantId);\n return true;\n } else {\n props.clearLoadedTenant();\n return false;\n }\n }\n \n return props.error.errors.length > 0 ? : <>\n \n \n \n \n \n {!props.isAppReady ? : \n {/* TODO: implement last tenant selection from local storage*/}\n \n\n {\n\n if (!params.tenantId) {\n return \n }\n\n const tenantOk = checkTenant(params.tenantId);\n\n // encapsulated in private route to enforce logging-in\n return !tenantOk ? : (\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 return ;\n }}\n />\n ) => {\n if (match.params.id) {\n props.loadTenantEntityDraft(match.params.id);\n } else {\n props.clearTenantEntityDraft();\n }\n return ;\n }}\n />\n ) => {\n return ;\n }}\n />\n \n \n }/>\n\n \n }\n \n \n ;\n\n}\n\n\nexport default connect(mapStateToProps, mapDispatchToProps)(App as any);\n","import * as am4core from '@amcharts/amcharts4/core'\n\nexport function am4themes_unicatTheme(target) {\n if (target instanceof am4core.ColorSet) {\n target.list = [\n am4core.color(\"#028F68\"),\n am4core.color(\"#4EC096\"),\n am4core.color(\"#00603D\"),\n am4core.color(\"#D0EDD2\"),\n am4core.color(\"#01694d\")\n ];\n }\n}","import React from \"react\";\nimport {connect} from \"react-redux\";\nimport {isTenantUserInRole} from \"../../store/selectors/UserSelectors\";\nimport NotAvailableScreen from \"../../scenes/Error/NotAvailableScreen\";\nimport {TenantUserRole} from \"../../services/GeneratedApiTsClient\";\nimport {AppState} from \"../../store/reducers\";\nimport {RouteComponentProps} from \"react-router\";\n\n/**\n * HOC to check if active tenant user have AT LEAST ONE of the given roles.\n * \n * @param WrappedComponent\n * @param roles\n */\nexport default

    (WrappedComponent: React.ComponentType

    , roles: TenantUserRole[]) => {\n\n const mapStateToProps = (state: AppState) => ({\n isInRole: isTenantUserInRole(state, {role: roles})\n });\n\n const mapDispatchToProps = {};\n\n type ComponentProps = {}\n\n type Props = RouteComponentProps<{ id: string; schema: any }> &\n ReturnType &\n typeof mapDispatchToProps & ComponentProps;\n\n // TODO: Replace NotAvailableScreen with new component with more fitting message\n const WithTenantRolesHOC = (props: Props) => props.isInRole ? : \n\n return connect(mapStateToProps, mapDispatchToProps)(WithTenantRolesHOC as unknown as React.ComponentClass);\n};","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import {Filter} from \"../../models/FilterModel\";\nimport {FilterActions} from \"../actions/FilterActions\";\n\n\nexport type FilterReducerState = {\n filters: Array,\n}\n\nexport const FilterReducerInitialState: FilterReducerState = {\n filters: [] as Array,\n};\n\nexport default function filterReducer (state: FilterReducerState = FilterReducerInitialState, action) {\n switch (action.type) {\n case FilterActions.SET_FILTERS:\n return { ...state, filters: action.filters};\n case FilterActions.CLEAR_FILTERS:\n return { ...state, filters: []};\n default:\n return state;\n }\n};","import {\n CANCEL_RECEIVING_FINDING_SCHEMAS,\n FLUSH_FINDING_SCHEMAS, RECEIVE_FINDING_SCHEMAS,\n REQUEST_FINDING_SCHEMAS\n} from \"../actions/FindingSchemasActions\";\nimport {FilterableAttributesGroup} from \"../../models/FilterableAttributesModel\";\nimport {FindingSchemaBasicInfoResourceObject} from \"../models/FindingSchemaBasicInfo\";\n\n\nexport type FindingSchemasReducerState = {\n schemasBasicInfo: Array,\n schemaAttributes: Array,\n loadingInProgress: boolean,\n loaded: boolean,\n}\n\nexport const FindingSchemasReducerInitialState : FindingSchemasReducerState = {\n schemasBasicInfo: [],\n schemaAttributes: [],\n loadingInProgress: false,\n loaded: false,\n};\n\nexport default (state = FindingSchemasReducerInitialState, action) => {\n\n switch (action.type) {\n case REQUEST_FINDING_SCHEMAS:\n return {\n ...state,\n loadingInProgress: true\n };\n case CANCEL_RECEIVING_FINDING_SCHEMAS:\n return {\n ...state,\n loadingInProgress: false\n };\n case FLUSH_FINDING_SCHEMAS:\n return FindingSchemasReducerInitialState;\n case RECEIVE_FINDING_SCHEMAS:\n return {\n ...state,\n schemasBasicInfo: action.schemasBasicInfo,\n schemaAttributes: action.schemaAttributes,\n isLoading: false,\n loaded: true,\n };\n default:\n return state;\n }\n};\n\n","import {\n LOCAL_STORAGE_KEY,\n RESET_VIEW_PREFERENCES,\n SET_COLUMNS,\n SET_COLUMNS_ORDER,\n SET_COLUMNS_WIDTH, VIEW_PREFERENCES_NORMALIZE\n} from \"../actions/ViewPreferencesActions\";\nimport {FilterableAttribute} from \"../../models/FilterableAttributesModel\";\nimport {StaticFilterableAttributesGroup} from \"../../models/FilterableAttributesModel\";\nimport ViewColumn from \"../models/ViewColumn\";\nimport {WellKnownAttributes} from \"../../models/FindingWellKnownAttributes\";\n\nexport type ViewPreferencesReducerState = {\n listViewColumns: Array,\n normalized: boolean\n}\n\nconst saveStateToLocalStorage = (state: ViewPreferencesReducerState): void => {\n localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(state));\n};\n\nexport const getViewPreferencesReducerInitialState = () : ViewPreferencesReducerState => {\n\n let staticAttributesGroup = StaticFilterableAttributesGroup[0];\n \n let state: ViewPreferencesReducerState = {\n listViewColumns: staticAttributesGroup.attributes.map((attribute: FilterableAttribute) => (\n new ViewColumn(attribute.value, attribute.name, staticAttributesGroup.name)\n )),\n normalized: false\n };\n \n let savedState = localStorage.getItem(LOCAL_STORAGE_KEY);\n if (savedState != null){\n \n var savedStateParsed = JSON.parse(savedState);\n if (savedStateParsed.listViewColumns && Array.isArray(savedStateParsed.listViewColumns)){\n \n // force defaults reset if document name column is missing\n if (state.listViewColumns.find(col => col.attribute === WellKnownAttributes.documentName)){\n state.listViewColumns = savedStateParsed.listViewColumns\n }\n \n // TODO: consistency check\n }\n }\n \n return state;\n};\n\nexport default (state: ViewPreferencesReducerState = getViewPreferencesReducerInitialState(), action) => {\n\n let updatedListViewColumns = state.listViewColumns.slice();\n let updatedState;\n \n switch (action.type) {\n case SET_COLUMNS_ORDER:\n\n \n updatedListViewColumns.sort(function(a: ViewColumn, b:ViewColumn){ // inspired by https://stackoverflow.com/a/44063445\n return action.newOrder.indexOf(a.attribute) - action.newOrder.indexOf(b.attribute);\n });\n \n updatedState = {...state, listViewColumns: updatedListViewColumns};\n \n saveStateToLocalStorage(updatedState);\n return updatedState;\n case SET_COLUMNS_WIDTH:\n \n // convert array of width inputs to an object keyed by column name\n let newWidthsObject = action.newWidths.reduce(function(result, item) {\n result[item.columnName] = item.width;\n return result;\n }, {});\n\n updatedListViewColumns.map((column) => {\n if (newWidthsObject[column.attribute]) {\n column.width = newWidthsObject[column.attribute];\n }\n return column;\n });\n\n updatedState = {...state, listViewColumns: updatedListViewColumns};\n\n saveStateToLocalStorage(updatedState);\n return updatedState;\n case SET_COLUMNS:\n\n updatedState = {...state, listViewColumns: action.newColumns};\n\n saveStateToLocalStorage(updatedState);\n return updatedState;\n\n case VIEW_PREFERENCES_NORMALIZE:\n\n updatedState = {\n ...state,\n listViewColumns: action.newColumns,\n normalized: true\n };\n\n saveStateToLocalStorage(updatedState);\n return updatedState;\n \n case RESET_VIEW_PREFERENCES:\n \n localStorage.removeItem(LOCAL_STORAGE_KEY);\n updatedState = getViewPreferencesReducerInitialState();\n updatedState.normalized = true;\n\n saveStateToLocalStorage(updatedState);\n return updatedState;\n default:\n }\n \n return state;\n};\n\n\n","import {\n CANCEL_REQUEST,\n FINDING_DELETE_SUCCESS,\n RECEIVE_EMPTY_WITH_SCHEMA,\n RECEIVE_FINDING,\n RECEIVE_FINDING_CLONE,\n REPLACE_FINDING_PROPERTY,\n REQUEST_EMPTY_WITH_SCHEMA,\n REQUEST_FINDING,\n REQUEST_FINDING_DELETE,\n REQUEST_FINDING_PERSIST,\n SUCCESS_FINDING_PERSIST,\n DELETE_UPLOADED_ATTACHMENT, UPDATE_ATTACHMENTS, SET_ACTIVE_ATTACHMENT\n} from \"../actions/FindingActions\";\nimport {\n AttachmentResourceObject,\n Finding,\n FindingSchema,\n TaxonomyName\n} from \"../../services/GeneratedApiTsClient\";\n\nexport type UploadedAttachment = {\n resource: AttachmentResourceObject,\n thumbnail?: Blob,\n data?: Blob,\n}\n\nexport type FindingReducerState = {\n loaded: boolean,\n requestInProgress: boolean,\n loadedFindingId?: string,\n loadedFinding: Finding,\n loadedSchema?: FindingSchema,\n loadedSchemaId?: string\n uploadedAttachments: UploadedAttachment[], // attachments from server to show in finding detail\n activeAttachmentId: string | null,\n hasIncompleteAttachments: boolean,\n}\nconst emptyFinding: Finding = {\n owner: \"\",\n permissions: [],\n documentName: \"\",\n dynamicData: {},\n documentSet: \"\",\n amount: undefined,\n date: undefined,\n person: \"\",\n locationDescription: \"\",\n locationGpsPoint: undefined,\n locationGpsArea: [],\n note: \"\",\n tags: [],\n taxonomyName: new class implements TaxonomyName {}(),\n taxonomyHumanReadable: \"\",\n attachmentNote: \"\"\n};\n\nexport const FindingReducerInitialState: FindingReducerState = {\n loaded: false,\n requestInProgress: false,\n loadedFindingId: undefined,\n loadedFinding: emptyFinding,\n loadedSchema: undefined,\n loadedSchemaId: undefined,\n uploadedAttachments: [],\n activeAttachmentId: null,\n hasIncompleteAttachments: false\n};\n\nexport default (state: FindingReducerState = FindingReducerInitialState, action): FindingReducerState => {\n \n switch (action.type) {\n case REPLACE_FINDING_PROPERTY:\n return {\n ...state,\n loadedFinding: {\n ...state.loadedFinding,\n [action.propertyName] : action.newValue\n }\n };\n case DELETE_UPLOADED_ATTACHMENT:\n return {\n ...state,\n uploadedAttachments: state.uploadedAttachments.filter(att => att.resource.id !== action.payload)\n };\n case UPDATE_ATTACHMENTS:\n return {\n ...state,\n uploadedAttachments: action.payload\n };\n case SET_ACTIVE_ATTACHMENT: \n return {\n ...state,\n activeAttachmentId: action.payload\n }\n case REQUEST_FINDING_PERSIST:\n case REQUEST_FINDING_DELETE:\n return {\n ...state,\n requestInProgress: true,\n };\n case FINDING_DELETE_SUCCESS:\n return {...state, requestInProgress: false, loaded: false};\n case REQUEST_FINDING: \n case REQUEST_EMPTY_WITH_SCHEMA: \n return {\n ...state,\n requestInProgress: true,\n loaded: false\n };\n case RECEIVE_FINDING:\n return {\n ...state,\n requestInProgress: false,\n loaded: true,\n loadedFindingId: action.findingId,\n loadedFinding: action.finding,\n loadedSchema: action.schema,\n loadedSchemaId: action.schemaId,\n uploadedAttachments: action.uploadedAttachments,\n hasIncompleteAttachments: action.hasIncompleteAttachments\n };\n case RECEIVE_FINDING_CLONE:\n\n action.finding.attachmentNote = null;\n \n return {\n ...state,\n requestInProgress: false,\n loaded: true,\n loadedFindingId: undefined,\n loadedFinding: action.finding,\n loadedSchema: action.schema,\n loadedSchemaId: action.schemaId,\n uploadedAttachments: [],\n };\n case RECEIVE_EMPTY_WITH_SCHEMA:\n return {\n ...state,\n requestInProgress: false,\n loaded: true,\n loadedSchema: action.schema,\n loadedSchemaId: action.schemaId,\n loadedFindingId: undefined,\n loadedFinding: emptyFinding\n };\n case SUCCESS_FINDING_PERSIST:\n return {\n ...state,\n requestInProgress: false,\n loaded: true,\n loadedFinding: action.patchedFinding,\n loadedFindingId: action.patchedFindingId,\n };\n case CANCEL_REQUEST:\n return {...state, requestInProgress: false};\n default:\n return state;\n }\n};","import {FindingResourceObject} from \"../../services/GeneratedApiTsClient\";\nimport {Sort} from \"../../models/SortModel\";\nimport {\n CANCEL_REQUEST,\n CLEAR_CACHE,\n GO_TO_PAGE,\n RECEIVE_LISTING,\n REQUEST_LISTING, SET_SELECTED_FINDING_IDS,\n SET_PAGE_SIZE,\n SET_SORTING,\n} from \"../actions/ListingActions\";\n\nexport type ListingReducerState = {\n loaded: boolean,\n requestInProgress: boolean,\n loadedFindings: Array,\n selectedFindingIds: string[],\n totalRecords: number,\n pagesCount: number,\n pageSize: number,\n currentPage: number,\n sorting: Array,\n}\n\nexport const ListingReducerInitialState: ListingReducerState = {\n loaded: false,\n requestInProgress: false,\n loadedFindings: [],\n selectedFindingIds: [],\n totalRecords: 0,\n pagesCount: 1,\n pageSize: 20,\n currentPage: 1,\n sorting: [],\n};\n\nexport default (state: ListingReducerState = ListingReducerInitialState, action): ListingReducerState => {\n \n switch (action.type) {\n case GO_TO_PAGE:\n return {\n ...state,\n loaded: false,\n currentPage: action.page,\n };\n case SET_PAGE_SIZE:\n return {\n ...state,\n loaded: false,\n pageSize: action.pageSize,\n };\n case SET_SORTING:\n return {\n ...state,\n loaded: false,\n sorting: action.sorting,\n };\n case REQUEST_LISTING:\n return {\n ...state,\n loaded: false,\n requestInProgress: true\n };\n case RECEIVE_LISTING:\n return {\n ...state,\n loaded: true,\n requestInProgress: false,\n loadedFindings: action.loadedFindings,\n selectedFindingIds: state.selectedFindingIds // remove findings which are not present in the newly-loaded findings collection\n .filter(selectedId => action.loadedFindings\n .map(f => f.id)\n .includes(selectedId)\n ),\n totalRecords: action.totalRecords,\n pagesCount: (action.totalRecords === 0) ? 1 : Math.ceil(action.totalRecords / state.pageSize)\n };\n case CANCEL_REQUEST:\n return {...state, requestInProgress: false};\n case CLEAR_CACHE:\n return {\n ...state,\n loaded: false,\n requestInProgress: false,\n loadedFindings: [],\n selectedFindingIds: [],\n totalRecords: 0,\n pagesCount: 1,\n currentPage: 1,\n };\n case SET_SELECTED_FINDING_IDS:\n return {...state, selectedFindingIds: action.payload};\n default:\n return state;\n }\n};","import {ErrorActions, ErrorType} from \"../actions/ErrorActions\";\n\nexport type ApplicationError = {\n type: ErrorType,\n message: string,\n details?: string\n}\n\nexport type ErrorReducerState = {\n errors: ApplicationError[]\n}\n\nexport const ErrorReducerInitialState: ErrorReducerState = {\n errors: [],\n};\n\nexport default function errorReducer(state: ErrorReducerState = ErrorReducerInitialState, action) {\n switch (action.type) {\n case ErrorActions.SET_ERROR:\n return {\n ...state,\n errors: [\n ...state.errors,\n {\n message: action.error.message,\n type: action.error.type,\n details: action.error.details\n }\n ]\n };\n default:\n return state\n }\n}","import {FindingSchema} from \"../../services/GeneratedApiTsClient\";\nimport {\n CANCEL_REQUEST, FLUSH_SCHEMA,\n RECEIVE_SCHEMA, RECEIVE_SCHEMA_CLONE,\n REPLACE_SCHEMA_PROPERTY, REQUEST_SCHEMA,\n REQUEST_SCHEMA_DELETE, REQUEST_SCHEMA_NEW,\n REQUEST_SCHEMA_PERSIST,\n SCHEMA_DELETE_SUCCESS, SCHEMA_NEW_SUCCESS, SUCCESS_SCHEMA_PERSIST\n} from \"../actions/SchemaActions\";\n\nexport type SchemaReducerState = {\n loaded: boolean,\n requestInProgress: boolean,\n loadedSchema: FindingSchema,\n loadedSchemaId?: string\n}\nconst emptySchema: FindingSchema = {\n name: \"\",\n color: \"\",\n mapIcon: \"\",\n mapPolygonIcon: \"\",\n definitionGroups: [\n {\n name: \"Basic\",\n definitions: []\n }\n ],\n nestedDataDefinitions: [],\n taxonomyTree: {},\n};\n\nexport const SchemaReducerInitialState: SchemaReducerState = {\n loaded: false,\n requestInProgress: false,\n loadedSchemaId: undefined,\n loadedSchema: emptySchema,\n};\n\nexport default (state: SchemaReducerState = SchemaReducerInitialState, action): SchemaReducerState => {\n \n switch (action.type) {\n case REPLACE_SCHEMA_PROPERTY:\n return {\n ...state,\n loadedSchema: {\n ...state.loadedSchema,\n [action.propertyName] : action.newValue\n }\n };\n case REQUEST_SCHEMA_PERSIST:\n case REQUEST_SCHEMA_DELETE:\n case REQUEST_SCHEMA_NEW:\n return {\n ...state,\n requestInProgress: true,\n };\n case SCHEMA_DELETE_SUCCESS:\n return {...state, requestInProgress: false, loaded: false};\n case REQUEST_SCHEMA: \n return {\n ...state,\n requestInProgress: true,\n loaded: false\n };\n case RECEIVE_SCHEMA:\n return {\n ...state,\n requestInProgress: false,\n loaded: true,\n loadedSchema: action.schema,\n loadedSchemaId: action.schemaId\n };\n case RECEIVE_SCHEMA_CLONE:\n action.schema.attachmentNote = null\n return{\n ...state,\n requestInProgress: false,\n loaded: true,\n loadedSchema: action.schema,\n loadedSchemaId: undefined\n }\n case SCHEMA_NEW_SUCCESS:\n return {\n ...state,\n requestInProgress: false,\n loaded: true,\n loadedSchema: emptySchema,\n loadedSchemaId: undefined,\n };\n case SUCCESS_SCHEMA_PERSIST:\n return {\n ...state,\n requestInProgress: false,\n loaded: true,\n loadedSchema: action.patchedSchema,\n loadedSchemaId: action.patchedSchemaId,\n };\n case CANCEL_REQUEST:\n return {...state, requestInProgress: false};\n case FLUSH_SCHEMA:\n return SchemaReducerInitialState;\n default:\n return state;\n }\n};","import {MapPanelActions} from \"../actions/MapPanelActions\";\nimport {LatLngBounds} from \"../models/LatLngBounds\";\nimport {FindingMapInfoResourceObject} from \"../models/FindingMapInfo\";\n\nexport type MapPanelReducerState = {\n bounds?: LatLngBounds,\n markerData: Array,\n requestInProgress: boolean\n}\n\nexport const MapPanelReducerInitialState: MapPanelReducerState = {\n bounds: undefined,\n markerData: [],\n requestInProgress: false\n};\n\nexport default function filterReducer (state: MapPanelReducerState = MapPanelReducerInitialState, action) {\n switch (action.type) {\n\n case MapPanelActions.REQUEST_MAP_FINDINGS:\n return { ...state, requestInProgress: true};\n \n case MapPanelActions.RECEIVE_MAP_FINDINGS:\n return {\n ...state,\n requestInProgress: false,\n markerData: action.markerData\n };\n \n case MapPanelActions.CANCEL_RECEIVING_MAP_FINDINGS:\n return { ...state, requestInProgress: false};\n \n case MapPanelActions.FLUSH_MAP_FINDINGS:\n return { ...state, markerData: []};\n \n case MapPanelActions.SET_MAP_VIEWPORT:\n return { ...state, bounds: action.bounds};\n default:\n return state;\n }\n};","import {GUIActions, GUIActionsType} from '../actions/GUIActions';\nimport {Invitation} from \"../../services/GeneratedApiTsClient\";\n\ntype GUIReducerState = {\n splitMode: boolean;\n mapPanelActive: boolean;\n graphPanelActive: boolean;\n attachmentsCarouselActive: boolean;\n codegenModalActive:boolean;\n codegenModalType: \"LISTING\" | \"NEW_FINDING\";\n invitationModalActive: boolean;\n invitationModalLoading: boolean;\n inviteModalInvitation?: Invitation;\n};\n\nexport const GUIReducerInitialState: GUIReducerState = {\n splitMode: false,\n mapPanelActive: false,\n graphPanelActive: false,\n attachmentsCarouselActive: false,\n codegenModalActive: false,\n codegenModalType: \"LISTING\",\n invitationModalActive: false,\n invitationModalLoading: false,\n};\n\nexport default function GUIReducer(state = GUIReducerInitialState, actions: GUIActions): GUIReducerState {\n switch (actions.type) {\n case GUIActionsType.OPEN_MAP_VIEW:\n return {\n ...state,\n mapPanelActive: true,\n graphPanelActive: false,\n splitMode: true,\n };\n case GUIActionsType.CLOSE_MAP_VIEW:\n return {\n ...state,\n mapPanelActive: false,\n splitMode: false,\n };\n case GUIActionsType.OPEN_GRAPH_VIEW:\n return {\n ...state,\n graphPanelActive: true,\n mapPanelActive: false,\n splitMode: true,\n };\n case GUIActionsType.CLOSE_GRAPH_VIEW:\n return {\n ...state,\n graphPanelActive: false,\n splitMode: false,\n };\n case GUIActionsType.SHOW_ATTACHMENT_GALLERY:\n return {\n ...state,\n attachmentsCarouselActive: true,\n };\n case GUIActionsType.HIDE_ATTACHMENT_GALLERY:\n return {\n ...state,\n attachmentsCarouselActive: false,\n }\n case GUIActionsType.SHOW_CODEGEN_MODAL:\n return {\n ...state,\n codegenModalActive: true,\n codegenModalType: actions.codegenModalType ?? \"LISTING\"\n };\n case GUIActionsType.HIDE_CODEGEN_MODAL:\n return {\n ...state,\n codegenModalActive: false,\n }\n case GUIActionsType.REQUEST_INVITATION_MODAL:\n return {\n ...state,\n invitationModalActive: true,\n invitationModalLoading: true,\n };\n case GUIActionsType.SHOW_INVITATION_MODAL:\n return {\n ...state,\n invitationModalLoading: false,\n inviteModalInvitation: actions.invitation\n }\n \n case GUIActionsType.HIDE_INVITATION_MODAL:\n return {\n ...state,\n invitationModalActive: false,\n invitationModalLoading: false,\n inviteModalInvitation: undefined,\n }\n default:\n return state;\n }\n}\n","import {ExportActions} from \"../actions/ExportActions\";\n\nexport type ExportReducerState = {\n inProgress: boolean,\n}\n\nexport const ExportReducerInitialState: ExportReducerState = {\n inProgress: false,\n};\n\nexport default function exportReducer (state: ExportReducerState = ExportReducerInitialState, action) {\n switch (action.type) {\n case ExportActions.REQUEST_EXPORT:\n return { ...state, inProgress: true};\n case ExportActions.RECEIVE_EXPORT:\n case ExportActions.CANCEL_EXPORT:\n return { ...state, inProgress: false};\n default:\n return state;\n }\n};","import {TenantUser, UserScopedTenant} from \"../../services/GeneratedApiTsClient\";\nimport {TenantActions} from \"../actions/TenantActions\";\n\nexport type TenantEntityDraft = Omit;\n\nexport type TenantReducerState = {\n available: UserScopedTenant[] | null,\n availableLoading: boolean,\n \n activeTenantId: string | null,\n activeTenantLoading: boolean,\n activeTenantUsers: TenantUser[],\n\n entityDraftLoading: boolean,\n entityDraftId: string | null,\n entityDraft: TenantEntityDraft | null\n \n userPatchLoading: boolean,\n}\n\nexport const TenantReducerInitialState: TenantReducerState = {\n available: null,\n availableLoading: false,\n \n \n activeTenantId: null,\n activeTenantLoading: false,\n activeTenantUsers: [],\n\n entityDraftLoading: false,\n entityDraftId: null,\n entityDraft: null,\n\n userPatchLoading: false\n};\n\nexport default function tenantReducer(state: TenantReducerState = TenantReducerInitialState, action): TenantReducerState {\n switch (action.type) {\n\n case TenantActions.TENANT_LOAD_AVAILABLE_INIT:\n return {...state, availableLoading: true};\n\n case TenantActions.TENANT_LOAD_AVAILABLE_SUCCESS:\n return {\n ...state,\n availableLoading: false,\n available: action.availableTenants\n };\n\n case TenantActions.TENANT_LOAD_AVAILABLE_CANCEL:\n return {...state, availableLoading: false};\n\n case TenantActions.TENANT_ACTIVE_SWITCH_INIT:\n return {...state, activeTenantLoading: true};\n\n case TenantActions.TENANT_ACTIVE_SWITCH_SUCCESS:\n return {\n ...state,\n activeTenantLoading: false,\n activeTenantId: action.tenantId,\n activeTenantUsers: action.tenantUsers\n };\n\n case TenantActions.TENANT_ACTIVE_SWITCH_CANCEL:\n return {...state, activeTenantLoading: false};\n\n case TenantActions.TENANT_ACTIVE_CLEAR:\n return {...state, activeTenantId: null, activeTenantUsers: []};\n\n case TenantActions.TENANT_ENTITY_DRAFT_LOAD_INIT:\n case TenantActions.TENANT_ENTITY_DRAFT_SAVE_INIT:\n return {...state, entityDraftLoading: true};\n\n case TenantActions.TENANT_ENTITY_DRAFT_LOAD_CANCEL:\n case TenantActions.TENANT_ENTITY_DRAFT_SAVE_CANCEL:\n case TenantActions.TENANT_ENTITY_DRAFT_SAVE_SUCCESS:\n return {...state, entityDraftLoading: false};\n\n case TenantActions.TENANT_ENTITY_DRAFT_LOAD_SUCCESS:\n return {\n ...state,\n entityDraftLoading: false,\n entityDraftId: action.id,\n entityDraft: action.entity\n };\n\n case TenantActions.TENANT_ENTITY_DRAFT_PATCH:\n return {...state, entityDraft: {...state.entityDraft, ...action.entityPatch}};\n\n case TenantActions.TENANT_ENTITY_DRAFT_CLEAR:\n return {...state, entityDraftId: null, entityDraft: null};\n \n case TenantActions.TENANT_USER_PATCH_INIT:\n return {...state, userPatchLoading: true};\n \n case TenantActions.TENANT_USER_PATCH_CANCEL:\n case TenantActions.TENANT_USER_PATCH_SUCCESS:\n return {...state, userPatchLoading: false};\n\n default:\n return state;\n }\n};","import {combineReducers} from 'redux';\nimport FilterReducer from \"./reducers/FilterReducer\";\nimport FindingSchemasReducer from \"./reducers/FindingSchemasReducer\";\nimport ViewPreferencesReducer from \"./reducers/ViewPreferencesReducer\";\nimport FindingReducer from \"./reducers/FindingReducer\";\nimport ListingReducer from \"./reducers/ListingReducer\";\nimport {createBrowserHistory} from \"history\";\nimport {connectRouter} from 'connected-react-router'\nimport ErrorReducer from \"./reducers/ErrorReducer\";\nimport {ErrorActions} from \"./actions/ErrorActions\";\nimport SchemaReducer from \"./reducers/SchemaReducer\";\nimport MapPanelReducer from \"./reducers/MapPanelReducer\";\nimport GUIReducer from \"./reducers/GUIReducer\";\nimport ExportReducer from \"./reducers/ExportReducer\";\nimport { reducer as oidcReducer } from 'redux-oidc';\nimport tenantReducer from \"./reducers/TenantReducer\";\n\nexport const history = createBrowserHistory();\n\nconst appReducer = combineReducers({\n filter: FilterReducer,\n finding: FindingReducer,\n schema: SchemaReducer,\n listing: ListingReducer,\n findingSchemas: FindingSchemasReducer,\n viewPreferences: ViewPreferencesReducer,\n mapPanel: MapPanelReducer,\n error: ErrorReducer,\n gui: GUIReducer,\n export: ExportReducer,\n oidc: oidcReducer,\n tenant: tenantReducer,\n router: connectRouter(history)\n});\n\nexport const rootReducer = (state, action) => {\n // TODO: check if condition is necessary\n if (action.type === ErrorActions.RESET_STORE) {\n state = { router: state.router };\n } else if (action.type === ErrorActions.RESET_STORE_AND_AUTH) {\n state = undefined;\n }\n return appReducer(state, action)\n};\n\nexport type AppState = ReturnType","import {AnyAction, Dispatch, Middleware} from \"redux\";\nimport {requestAvailableTenants} from \"../actions/TenantActions\";\nimport {AppState} from \"../reducers\";\n\nexport const appInitializationMiddleware: Middleware = (store) => next => (action: AnyAction) => {\n \n // trigger effects on the user's (re)login\n if (action.type === 'redux-oidc/USER_FOUND' && action.payload?.profile?.sub){\n const oldState = store.getState();\n // ignore silent token refresh, if it is the same user\n if (oldState.oidc.user?.profile?.sub !== action.payload.profile.sub){\n const nextAction = next(action);\n requestAvailableTenants()(next, store.getState);\n return nextAction;\n }\n }\n \n return next(action);\n};","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {Provider} from 'react-redux';\nimport {OidcProvider} from 'redux-oidc';\nimport {ConnectedRouter} from 'connected-react-router';\nimport App from './App';\nimport {unregister} from './registerServiceWorker';\nimport configureStore from \"./store/store\";\nimport {history} from \"./store/reducers\";\nimport {registerFontAwesome} from \"./registerFontAwesome\";\nimport {hotjar} from 'react-hotjar';\nimport '@devexpress/dx-react-grid-bootstrap4/dist/dx-react-grid-bootstrap4.css';\nimport UserManager from \"./services/UserManager\";\nimport {LoadScript} from \"@react-google-maps/api\";\nimport {ToastContainer} from \"react-toastify\";\nimport './styles/css/main.css'; // global stylesheet\n\n// print build version to console\nconsole.info(\"Build: \" + process.env.REACT_APP_BUILD_VERSION)\n\n// disable service worker to prevent unwanted caching\nunregister();\n\n// register other library integrations\nconst googleMapsLibraries = ['geometry', 'drawing', 'places'];\nregisterFontAwesome();\n\n// Tracking by hotjar\nif (!process.env.NODE_ENV || process.env.NODE_ENV === 'production') {\n hotjar.initialize(1598115, 6);\n}\n\n// Get the application-wide store instance\nconst store = configureStore();\n\n// render\nconst render = () => ReactDOM.render(\n \n \n \n \n \n {/* notifications */}\n \n \n \n \n ,\n document.getElementById('root')\n);\nrender(App);\n\n// hot-reload support\nif (module.hot) {\n module.hot.accept('./App', () => {\n const NextApp = require('./App').default;\n render(NextApp);\n });\n}","import {library} from '@fortawesome/fontawesome-svg-core'\nimport {\n faBars,\n faChevronLeft,\n faChevronRight,\n faCog,\n faColumns,\n faCopy,\n faDrawPolygon,\n faEdit,\n faFileExport,\n faLifeRing,\n faMapMarker,\n faPlus,\n faSave,\n faSearch,\n faSlidersH,\n faThLarge,\n faThList,\n faTimes,\n faTrash,\n faTrashAlt,\n faDownload,\n faCross,\n faFileUpload,\n faFile,\n faCheck,\n faMinus,\n faQuestion,\n faList,\n faSitemap,\n faUndoAlt,\n faEraser,\n faFilter,\n faEyeSlash,\n faArrowRight,\n faPen,\n faArrowsAltH,\n faClone,\n faParagraph,\n faLevelUpAlt,\n faFileAlt,\n faFileImage,\n faFileAudio,\n faFileVideo,\n faFileWord,\n faFileExcel,\n faFilePowerpoint,\n faFilePdf,\n faFileArchive,\n faFileCsv,\n faUpload,\n faQuestionCircle,\n faExternalLinkAlt,\n faExternalLinkSquareAlt,\n faGripVertical,\n faClipboard,\n faKey,\n faSignOutAlt,\n faCode,\n faRandom,\n faUser,\n faUserPlus,\n faEnvelope,\n faFileImport,\n faExclamationTriangle,\n faPencilRuler\n} from \"@fortawesome/free-solid-svg-icons\";\n\nexport const registerFontAwesome = () => {\n library.add(\n faSlidersH,\n faPlus,\n faTrashAlt,\n faThList,\n faThLarge,\n faCog,\n faTimes,\n faChevronLeft,\n faChevronRight,\n faFileExport,\n faCopy,\n faTrash,\n faEdit,\n faBars,\n faSave,\n faColumns,\n faMapMarker,\n faDrawPolygon,\n faSearch,\n faLifeRing,\n faDownload,\n faCross,\n faFileUpload,\n faFile,\n faCheck,\n faMinus,\n faQuestion,\n faList,\n faSitemap,\n faColumns,\n faUndoAlt,\n faEraser,\n faFilter,\n faEyeSlash,\n faArrowRight,\n faPen,\n faClone,\n faArrowsAltH,\n faLevelUpAlt,\n faParagraph,\n faFileImage,\n faFileAudio,\n faFileVideo,\n faFileWord,\n faFileExcel,\n faFilePowerpoint,\n faFilePdf,\n faFileArchive,\n faFileCsv,\n faFileAlt,\n faFileImport,\n faUpload,\n faQuestionCircle,\n faExternalLinkAlt,\n faExternalLinkSquareAlt,\n faGripVertical,\n faClipboard,\n faKey,\n faSignOutAlt,\n faDownload,\n faCode,\n faRandom,\n faUser,\n faUserPlus,\n faEnvelope,\n faExclamationTriangle,\n faPencilRuler\n );\n}","import {applyMiddleware, compose, createStore} from 'redux';\nimport thunk from 'redux-thunk';\nimport {routerMiddleware} from 'connected-react-router';\nimport {AppState, history, rootReducer} from \"./reducers\";\nimport {FilterReducerInitialState} from \"./reducers/FilterReducer\";\nimport {FindingReducerInitialState} from \"./reducers/FindingReducer\";\nimport {ListingReducerInitialState} from \"./reducers/ListingReducer\";\nimport {FindingSchemasReducerInitialState} from \"./reducers/FindingSchemasReducer\";\nimport {getViewPreferencesReducerInitialState} from \"./reducers/ViewPreferencesReducer\";\nimport {MapPanelReducerInitialState} from \"./reducers/MapPanelReducer\";\nimport {ExportReducerInitialState} from \"./reducers/ExportReducer\";\nimport UserManager from \"../services/UserManager\";\nimport {loadUser} from \"redux-oidc\";\nimport {TenantReducerInitialState} from \"./reducers/TenantReducer\";\nimport {appInitializationMiddleware} from \"./middleware/appInitializationMiddleware\";\n\nexport default function configureStore() {\n \n\n const middleware = [\n thunk,\n routerMiddleware(history),\n appInitializationMiddleware\n ];\n\n // In development, use the browser's Redux dev tools extension if installed\n const enhancers = [];\n const isDevelopment = process.env.NODE_ENV === 'development';\n if (isDevelopment && typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__) {\n // @ts-ignore\n enhancers.push((window as any).__REDUX_DEVTOOLS_EXTENSION__());\n }\n \n const rootState = {\n filter: FilterReducerInitialState,\n finding: FindingReducerInitialState,\n listing: ListingReducerInitialState,\n findingSchemas: FindingSchemasReducerInitialState,\n viewPreferences: getViewPreferencesReducerInitialState(),\n mapPanel: MapPanelReducerInitialState,\n export: ExportReducerInitialState,\n tenant: TenantReducerInitialState,\n };\n \n // load from data\n \n const store = createStore(\n rootReducer,\n rootState as AppState,\n compose(applyMiddleware(...middleware), ...enhancers)\n );\n\n loadUser(store, UserManager);\n\n // if (process.env.NODE_ENV !== \"production\") {\n // if (module.hot) {\n // module.hot.accept('./reducers', () => {\n // store.replaceReducer(rootReducer)\n // })\n // }\n // }\n\n return store\n \n}"],"sourceRoot":""}