@oneuptime/common 13.0.0 → 13.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/Alert.ts +55 -0
- package/Models/DatabaseModels/CloudResource.ts +45 -7
- package/Models/DatabaseModels/CodeRepository.ts +85 -0
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +57 -7
- package/Models/DatabaseModels/GoogleSecOpsConnectionRun.ts +263 -0
- package/Models/DatabaseModels/Incident.ts +55 -0
- package/Models/DatabaseModels/Index.ts +16 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
- package/Models/DatabaseModels/User.ts +51 -2
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +43 -2
- package/Models/DatabaseModels/UserWebAuthn.ts +17 -0
- package/Models/DatabaseModels/VMwareResource.ts +1149 -0
- package/Models/DatabaseModels/VMwareVCenter.ts +1122 -0
- package/Models/DatabaseModels/VMwareVCenterFeed.ts +625 -0
- package/Models/DatabaseModels/VMwareVCenterLabelRule.ts +514 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerRule.ts +596 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +485 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +484 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +22 -1
- package/Server/API/AIAgentDataAPI.ts +79 -4
- package/Server/API/AIAgentGitHubAPI.ts +523 -0
- package/Server/API/AIChatAPI.ts +20 -1
- package/Server/API/BillingAPI.ts +33 -0
- package/Server/API/DashboardAPI.ts +10 -0
- package/Server/API/GitHubAPI.ts +47 -5
- package/Server/API/GoogleSecOpsConnectionAPI.ts +79 -0
- package/Server/API/UserWebAuthnAPI.ts +21 -1
- package/Server/API/VMwareResourceAPI.ts +143 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.ts +68 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.ts +636 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.ts +83 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Middleware/IdentityRateLimit.ts +101 -0
- package/Server/Services/AIRunService.ts +13 -0
- package/Server/Services/BillingPaymentMethodService.ts +99 -28
- package/Server/Services/BillingService.ts +287 -20
- package/Server/Services/CloudResourceInstanceService.ts +70 -0
- package/Server/Services/ExceptionAggregationService.ts +1 -0
- package/Server/Services/GoogleSecOpsConnectionRunService.ts +10 -0
- package/Server/Services/GoogleSecOpsConnectionService.ts +12 -0
- package/Server/Services/Index.ts +16 -0
- package/Server/Services/LogAggregationService.ts +1 -0
- package/Server/Services/MetricAggregationService.ts +1 -0
- package/Server/Services/MobilePasskeyLoginService.ts +216 -0
- package/Server/Services/MonitorService.ts +51 -1
- package/Server/Services/MonitorTemplateService.ts +91 -29
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +132 -1
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +176 -2
- package/Server/Services/OpenTelemetryIngestService.ts +17 -0
- package/Server/Services/PayAsYouGoBillingService.ts +446 -0
- package/Server/Services/ProjectService.ts +46 -2
- package/Server/Services/ServerlessFunctionInstanceService.ts +71 -0
- package/Server/Services/TeamMemberService.ts +96 -36
- package/Server/Services/TelemetryIngestionKeyService.ts +80 -10
- package/Server/Services/TelemetryUsageBillingService.ts +95 -5
- package/Server/Services/TraceAggregationService.ts +5 -4
- package/Server/Services/UserWebAuthnService.ts +592 -133
- package/Server/Services/VMwareResourceService.ts +648 -0
- package/Server/Services/VMwareVCenterFeedService.ts +99 -0
- package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +240 -0
- package/Server/Services/VMwareVCenterLabelRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +252 -0
- package/Server/Services/VMwareVCenterOwnerRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerTeamService.ts +139 -0
- package/Server/Services/VMwareVCenterOwnerUserService.ts +133 -0
- package/Server/Services/VMwareVCenterService.ts +629 -0
- package/Server/Services/WorkflowVariableService.ts +203 -0
- package/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.ts +17 -0
- package/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.ts +31 -1
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +7 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.ts +341 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.ts +274 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.ts +375 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubConversation.ts +846 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.ts +360 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubRunReply.ts +421 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.ts +140 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.ts +906 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +143 -0
- package/Server/Utils/DataSource/EgressGuard.ts +160 -15
- package/Server/Utils/Database/TruncateColumnValue.ts +1 -1
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +2 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +33 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +44 -0
- package/Server/Utils/LogRedaction.ts +2 -1
- package/Server/Utils/Monitor/MonitorAlert.ts +1 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +302 -3
- package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +26 -4
- package/Server/Utils/Monitor/MonitorResourceContext.ts +5 -3
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +14 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +28 -5
- package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +3 -3
- package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +14 -9
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +116 -84
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +594 -195
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +466 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +5 -0
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +2 -1
- package/Server/Utils/Telemetry/TelemetryEntity.ts +181 -1
- package/Server/Utils/Telemetry/VMwareSnapshotScan.ts +1352 -0
- package/Tests/App/Accounts/LoginPasskey.test.tsx +529 -0
- package/Tests/App/Accounts/MobilePasskey.test.tsx +620 -0
- package/Tests/App/Accounts/PasswordRequirements.test.tsx +254 -0
- package/Tests/App/Accounts/RegisterPassword.test.tsx +553 -0
- package/Tests/App/Dashboard/AskAiAvailability.test.ts +224 -0
- package/Tests/App/Dashboard/AskAiDisabled.test.tsx +432 -0
- package/Tests/App/Dashboard/BackupCodes.test.tsx +414 -0
- package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +530 -0
- package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +195 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +199 -0
- package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +198 -0
- package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +215 -0
- package/Tests/App/Dashboard/CloudFleetSummary.test.ts +183 -0
- package/Tests/App/Dashboard/CloudFleetSummaryComponent.test.tsx +248 -0
- package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +215 -0
- package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +3 -0
- package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +441 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +458 -0
- package/Tests/App/Dashboard/DashboardToolbarPopupLayering.test.tsx +566 -0
- package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +376 -0
- package/Tests/App/Dashboard/DiscoveryScanLiveUpdates.test.tsx +642 -0
- package/Tests/App/Dashboard/DiscoveryScanProgress.test.tsx +267 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +69 -231
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +244 -0
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +724 -0
- package/Tests/App/Dashboard/MonitorTemplateSyncFields.test.tsx +539 -0
- package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +24 -7
- package/Tests/App/Dashboard/OnCallOverridePresentation.test.ts +496 -0
- package/Tests/App/Dashboard/OnCallScheduleOverrideClarity.test.tsx +677 -0
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +31 -3
- package/Tests/App/Dashboard/PaidUsageConsent.test.tsx +180 -0
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +1220 -0
- package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +176 -275
- package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +380 -233
- package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +3 -23
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +1 -0
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
- package/Tests/App/Dashboard/TwoFactorStatus.test.tsx +260 -0
- package/Tests/App/Dashboard/VMwareDashboardWidgets.test.ts +573 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +2 -0
- package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +768 -0
- package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +532 -40
- package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +19 -2
- package/Tests/Fixtures/MobilePasskeyUser.json +8 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +25 -6
- package/Tests/Models/DatabaseModels/VMwareModels.test.ts +1134 -0
- package/Tests/Models/RunnerVersionLabel.test.ts +4 -2
- package/Tests/Server/API/AIChatProvidersAIEnabled.test.ts +259 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +31 -2
- package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +116 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +29 -1
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +13 -2
- package/Tests/Server/API/GitHubWebhookSignature.test.ts +368 -0
- package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +248 -0
- package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +330 -0
- package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +172 -0
- package/Tests/Server/API/VMwareResourceAPI.test.ts +546 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupMetadataMigration.test.ts +85 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +34 -3
- package/Tests/Server/Middleware/PasskeyRateLimit.test.ts +141 -0
- package/Tests/Server/Services/AutoImportRuleRearmRecentScans.test.ts +343 -0
- package/Tests/Server/Services/AutoImportRuleWriteRearmsScans.test.ts +381 -0
- package/Tests/Server/Services/BillingPaymentMethodServiceSync.test.ts +175 -0
- package/Tests/Server/Services/BillingService.test.ts +26 -11
- package/Tests/Server/Services/BillingServiceMeteredPaymentAuthorization.test.ts +245 -0
- package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +362 -0
- package/Tests/Server/Services/CloudResourceInstanceStalePrune.test.ts +188 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +16 -2
- package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +153 -0
- package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +13 -0
- package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +5 -0
- package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +36 -0
- package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +151 -0
- package/Tests/Server/Services/MobilePasskeyLoginIntegration.test.ts +231 -0
- package/Tests/Server/Services/MobilePasskeyLoginService.test.ts +315 -0
- package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +302 -0
- package/Tests/Server/Services/MonitorTemplateServiceFieldSync.test.ts +994 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +22 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
- package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +857 -0
- package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +379 -0
- package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +99 -1
- package/Tests/Server/Services/ProjectServiceSubscriptionSeats.test.ts +134 -0
- package/Tests/Server/Services/ResourceFeedServices.test.ts +3 -2
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +32 -6
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +363 -175
- package/Tests/Server/Services/ServerlessFunctionInstanceStalePrune.test.ts +200 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +3 -0
- package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +762 -0
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +3 -0
- package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +72 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +17 -4
- package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +355 -0
- package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +41 -4
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +37 -0
- package/Tests/Server/Services/UserWebAuthnPasskeyIntegration.test.ts +401 -0
- package/Tests/Server/Services/UserWebAuthnPasskeyService.test.ts +769 -0
- package/Tests/Server/Services/UserWebAuthnUserVerification.test.ts +649 -0
- package/Tests/Server/Services/VMwareResourceService.test.ts +945 -0
- package/Tests/Server/Services/VMwareVCenterService.test.ts +722 -0
- package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +842 -0
- package/Tests/Server/TestingUtils/PasskeyHttpIntegration.ts +102 -0
- package/Tests/Server/TestingUtils/SecurityKey.ts +464 -0
- package/Tests/Server/TestingUtils/WebAuthnServiceMocks.ts +60 -0
- package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +573 -0
- package/Tests/Server/Types/Database/Permissions/ProjectCustomerSupportAccessColumn.test.ts +261 -0
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +95 -0
- package/Tests/Server/Utils/CodeRepository/GitHubAgentTaskTrigger.test.ts +2101 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandAuthorizer.test.ts +883 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandParser.test.ts +1474 -0
- package/Tests/Server/Utils/CodeRepository/GitHubConversation.test.ts +1526 -0
- package/Tests/Server/Utils/CodeRepository/GitHubReplyComposer.test.ts +1389 -0
- package/Tests/Server/Utils/CodeRepository/GitHubRunReply.test.ts +1707 -0
- package/Tests/Server/Utils/CodeRepository/GitHubWebhookHandler.test.ts +2202 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +345 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +896 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +246 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +299 -1
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +6 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +185 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +33 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +2 -1
- package/Tests/Server/Utils/Monitor/Criteria/TelemetryStepMetricAlias.test.ts +10 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +66 -1
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +362 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +60 -1
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +60 -0
- package/Tests/Server/Utils/Monitor/MonitorRootCauseTargetResolution.test.ts +423 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +6 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +46 -2
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +81 -45
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +711 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClickhouseIntegration.test.ts +223 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +69 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +838 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsErrorHandling.test.ts +241 -28
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +651 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +11 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +13 -12
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +112 -127
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsRequestContract.test.ts +12 -18
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsResponseParsing.test.ts +43 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +580 -0
- package/Tests/Server/Utils/Telemetry/VMwareSnapshotScan.test.ts +1748 -0
- package/Tests/Types/Cloud/CloudPlatform.test.ts +574 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +2 -0
- package/Tests/Types/Monitor/MonitorCriteriaMetricVariables.test.ts +9 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepInfraMonitorUtils.test.ts +53 -8
- package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +97 -0
- package/Tests/Types/Monitor/MonitorStepMetricViewConfigUtil.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepTemplateSyncFields.test.ts +107 -0
- package/Tests/Types/Monitor/MonitorTemplateSyncField.test.ts +172 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +2 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +1 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +9 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +131 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +10 -0
- package/Tests/Types/Monitor/VMwareAlertTemplates.test.ts +1608 -0
- package/Tests/Types/Monitor/VMwareMetricCatalog.test.ts +488 -0
- package/Tests/Types/OnCallDutyPolicy/OverrideProvenance.test.ts +295 -0
- package/Tests/Types/Runner/RunnerLiveStatus.test.ts +2 -2
- package/Tests/Types/SignupPassword.test.ts +205 -0
- package/Tests/Types/StatusPage/StatusPageLanguage.test.ts +44 -0
- package/Tests/Types/SupportedLanguages.test.ts +119 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +19 -0
- package/Tests/UI/ColorPickerBuild.test.ts +86 -0
- package/Tests/UI/Components/Breadcrumbs.test.tsx +32 -0
- package/Tests/UI/Components/Forms/ModelFormPreservesUserInput.test.tsx +937 -0
- package/Tests/UI/Components/Forms/ModelFormWriteOnlyColumnSelect.test.tsx +230 -0
- package/Tests/UI/Components/Forms/ValidationFormSteps.test.ts +3 -4
- package/Tests/UI/Components/LabelRuleImportExport.test.tsx +907 -0
- package/Tests/UI/Components/ModelTable/ModelTableCreateAfterEdit.test.tsx +514 -0
- package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +301 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +2 -1
- package/Tests/UI/Components/TooltipLazyContent.test.tsx +373 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsMessagingEndpointGuidance.test.tsx +43 -12
- package/Tests/UI/ReactDomBuild.test.ts +104 -0
- package/Tests/UI/ReactRouterSingletonBuild.test.ts +11 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +148 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +29 -0
- package/Tests/UI/Utils/DashboardStackingLayers.test.ts +197 -0
- package/Tests/UI/Utils/LabelRuleImportExport.test.ts +546 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +109 -2
- package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +7 -2
- package/Tests/UI/Utils/UserEmailRegistrationStatus.test.tsx +295 -0
- package/Tests/UI/Utils/WebAuthn.test.ts +265 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +5 -0
- package/Tests/Utils/Dashboard/Components/DashboardVMwareListComponents.test.ts +548 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +17 -3
- package/Tests/Utils/LabelRuleImportExport.test.ts +583 -0
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/MonitorTemplateSyncUtil.test.ts +590 -0
- package/Tests/Utils/RequestFailedDetails.test.ts +325 -0
- package/Tests/Utils/Telemetry/CloudInstanceIdentity.test.ts +255 -0
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +167 -0
- package/Tests/Utils/WebAuthnTestUtil.ts +79 -0
- package/Tests/__mocks__/simplewebauthn.js +33 -4
- package/Types/AI/CodeFixTaskContext.ts +122 -0
- package/Types/AI/CodeFixTaskType.ts +62 -0
- package/Types/Accounts/AccountsLanguage.ts +1 -0
- package/Types/AdminDashboard/AdminDashboardLanguage.ts +1 -0
- package/Types/Calendar/CalendarEvent.ts +16 -0
- package/Types/Cloud/CloudPlatform.ts +372 -0
- package/Types/CodeRepository/GitHubCommand.ts +69 -0
- package/Types/Dashboard/DashboardComponentType.ts +2 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.ts +23 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.ts +30 -0
- package/Types/Dashboard/DashboardLanguage.ts +1 -0
- package/Types/Dashboard/DashboardTemplates.ts +314 -0
- package/Types/Docs/DocsLanguage.ts +1 -0
- package/Types/Exception/EgressGuardException.ts +65 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +36 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +1 -0
- package/Types/Monitor/MonitorStep.ts +78 -17
- package/Types/Monitor/MonitorStepMetricViewConfigUtil.ts +1 -0
- package/Types/Monitor/MonitorStepVMwareMonitor.ts +127 -0
- package/Types/Monitor/MonitorTemplateSyncField.ts +291 -0
- package/Types/Monitor/MonitorType.ts +24 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +33 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +2 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +3 -0
- package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +158 -0
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +61 -0
- package/Types/Monitor/VMwareAlertTemplates.ts +1070 -0
- package/Types/Monitor/VMwareMetricCatalog.ts +914 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +29 -0
- package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +16 -0
- package/Types/Password.ts +84 -5
- package/Types/Permission.ts +265 -0
- package/Types/Probe/RequestFailedDetails.ts +7 -0
- package/Types/Runner/RunnerLiveStatus.ts +1 -1
- package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -0
- package/Types/StatusPage/StatusPageLanguage.ts +1 -0
- package/Types/Telemetry/EntityType.ts +21 -0
- package/Types/Telemetry/ServiceType.ts +1 -0
- package/Typings/Index.d.ts +63 -0
- package/UI/Components/Breadcrumbs/Breadcrumbs.tsx +2 -2
- package/UI/Components/Calendar/Calendar.css +78 -0
- package/UI/Components/Calendar/Calendar.tsx +28 -3
- package/UI/Components/Forms/BasicForm.tsx +44 -2
- package/UI/Components/Forms/Fields/ColorPicker.tsx +2 -1
- package/UI/Components/Forms/Fields/FormField.tsx +16 -3
- package/UI/Components/Forms/ModelForm.tsx +159 -5
- package/UI/Components/Forms/Types/Field.ts +8 -1
- package/UI/Components/Graphs/DayUptimeGraph.tsx +8 -10
- package/UI/Components/Icon/Icon.tsx +16 -0
- package/UI/Components/Input/Input.tsx +42 -7
- package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +441 -0
- package/UI/Components/LabelRule/LabelRuleTable.tsx +142 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +22 -5
- package/UI/Components/ModelTable/ModelTable.tsx +14 -6
- package/UI/Components/MonitorGraphs/Uptime.tsx +17 -27
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +3 -1
- package/UI/Components/Tooltip/Tooltip.tsx +52 -6
- package/UI/Utils/DashboardStackingLayers.ts +85 -0
- package/UI/Utils/LabelRuleImportExport.ts +310 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +4 -3
- package/UI/Utils/TelemetryService.ts +4 -3
- package/UI/Utils/UseDashboardGridDnd.ts +4 -1
- package/UI/Utils/UserEmailRegistrationStatus.ts +33 -5
- package/UI/Utils/WebAuthn.ts +220 -0
- package/UI/esbuild-config.js +4 -0
- package/Utils/API.ts +34 -0
- package/Utils/Dashboard/Components/DashboardVMwareHostListComponent.ts +38 -0
- package/Utils/Dashboard/Components/DashboardVMwareResourceListShared.ts +70 -0
- package/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.ts +76 -0
- package/Utils/Dashboard/Components/Index.ts +16 -0
- package/Utils/LabelRuleImportExport.ts +496 -0
- package/Utils/Monitor/MonitorTemplateSyncUtil.ts +164 -0
- package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +8 -0
- package/Utils/Telemetry/CloudInstanceIdentity.ts +94 -0
- package/Utils/Telemetry/EntityKey.ts +19 -0
- package/Utils/Telemetry/EntityRelationship.ts +19 -0
- package/build/dist/Models/DatabaseModels/Alert.js +54 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResource.js +44 -7
- package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +87 -0
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +60 -7
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js +287 -0
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Incident.js +54 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +16 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +54 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +57 -4
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +47 -2
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +18 -0
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareResource.js +1201 -0
- package/build/dist/Models/DatabaseModels/VMwareResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js +1149 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +22 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +63 -3
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentGitHubAPI.js +363 -0
- package/build/dist/Server/API/AIAgentGitHubAPI.js.map +1 -0
- package/build/dist/Server/API/AIChatAPI.js +19 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/BillingAPI.js +22 -0
- package/build/dist/Server/API/BillingAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +10 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GitHubAPI.js +33 -5
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +56 -0
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -0
- package/build/dist/Server/API/UserWebAuthnAPI.js +17 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/API/VMwareResourceAPI.js +106 -0
- package/build/dist/Server/API/VMwareResourceAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js +241 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +80 -0
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +14 -1
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/BillingPaymentMethodService.js +71 -21
- package/build/dist/Server/Services/BillingPaymentMethodService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +210 -22
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceInstanceService.js +66 -0
- package/build/dist/Server/Services/CloudResourceInstanceService.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js +9 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +1 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +7 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +16 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +1 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +1 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MobilePasskeyLoginService.js +137 -0
- package/build/dist/Server/Services/MobilePasskeyLoginService.js.map +1 -0
- package/build/dist/Server/Services/MonitorService.js +34 -1
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +64 -26
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +124 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +142 -2
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +28 -13
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PayAsYouGoBillingService.js +297 -0
- package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -0
- package/build/dist/Server/Services/ProjectService.js +38 -2
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js +66 -0
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +85 -28
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +61 -10
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +62 -5
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +5 -4
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserWebAuthnService.js +345 -113
- package/build/dist/Server/Services/UserWebAuthnService.js.map +1 -1
- package/build/dist/Server/Services/VMwareResourceService.js +395 -0
- package/build/dist/Server/Services/VMwareResourceService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js +89 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +197 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +214 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js +129 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js +122 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterService.js +533 -0
- package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -0
- package/build/dist/Server/Services/WorkflowVariableService.js +169 -0
- package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js +12 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js +25 -2
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js +226 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js +297 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js +582 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js +365 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js +103 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js +661 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +113 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +99 -15
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +2 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +18 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +31 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +2 -1
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +219 -4
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +12 -4
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +5 -3
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +22 -9
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +21 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +21 -6
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +3 -3
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +9 -9
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +92 -71
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +428 -143
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +376 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +5 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +136 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js +933 -0
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js +40 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskType.js +57 -0
- package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -1
- package/build/dist/Types/Accounts/AccountsLanguage.js +1 -0
- package/build/dist/Types/Accounts/AccountsLanguage.js.map +1 -1
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js +1 -0
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js.map +1 -1
- package/build/dist/Types/Cloud/CloudPlatform.js +277 -0
- package/build/dist/Types/Cloud/CloudPlatform.js.map +1 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js +52 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js +286 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Docs/DocsLanguage.js +1 -0
- package/build/dist/Types/Docs/DocsLanguage.js.map +1 -1
- package/build/dist/Types/Exception/EgressGuardException.js +59 -0
- package/build/dist/Types/Exception/EgressGuardException.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +61 -18
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js +1 -0
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js +71 -0
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js +211 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +23 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +28 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +2 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +120 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +60 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js +775 -0
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.js +799 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +25 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +5 -0
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
- package/build/dist/Types/Password.js +63 -5
- package/build/dist/Types/Password.js.map +1 -1
- package/build/dist/Types/Permission.js +234 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Probe/RequestFailedDetails.js +7 -0
- package/build/dist/Types/Probe/RequestFailedDetails.js.map +1 -1
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js +2 -0
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js.map +1 -0
- package/build/dist/Types/StatusPage/StatusPageLanguage.js +1 -0
- package/build/dist/Types/StatusPage/StatusPageLanguage.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityType.js +21 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ServiceType.js +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js +2 -2
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/build/dist/UI/Components/Calendar/Calendar.js +24 -4
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +28 -3
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -3
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +89 -6
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +5 -6
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +14 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +37 -8
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +228 -0
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js +102 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +15 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +13 -5
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +14 -15
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +2 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +33 -4
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/DashboardStackingLayers.js +44 -0
- package/build/dist/UI/Utils/DashboardStackingLayers.js.map +1 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js +195 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +4 -4
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/TelemetryService.js +3 -2
- package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +2 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -1
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js +21 -4
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js.map +1 -1
- package/build/dist/UI/Utils/WebAuthn.js +121 -0
- package/build/dist/UI/Utils/WebAuthn.js.map +1 -0
- package/build/dist/Utils/API.js +29 -0
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js +33 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js +54 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js +60 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/LabelRuleImportExport.js +356 -0
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js +110 -0
- package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +6 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -1
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js +88 -0
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +15 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +13 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
- package/package.json +1 -1
package/Typings/Index.d.ts
CHANGED
|
@@ -13,3 +13,66 @@ declare module "*.gif";
|
|
|
13
13
|
* supplies the behaviour at runtime.
|
|
14
14
|
*/
|
|
15
15
|
declare module "i18next-browser-languagedetector";
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* Billing's Common tests import Dashboard pages and provide virtual Stripe
|
|
19
|
+
* mocks. Stripe's browser packages are installed only by Dashboard, so the
|
|
20
|
+
* Common-only CI job needs declarations for the browser API those tests use.
|
|
21
|
+
* Keep these contracts narrow rather than declaring the packages as `any`.
|
|
22
|
+
* Dashboard's tsconfig does not include this file: production compilation
|
|
23
|
+
* continues to check against the packages' complete upstream declarations.
|
|
24
|
+
*/
|
|
25
|
+
declare module "@stripe/stripe-js" {
|
|
26
|
+
export interface StripeError {
|
|
27
|
+
message?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type StripeElements = Record<string, unknown>;
|
|
31
|
+
|
|
32
|
+
export interface PaymentIntentResult {
|
|
33
|
+
error?: StripeError;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface Stripe {
|
|
37
|
+
confirmSetup(options: {
|
|
38
|
+
elements: StripeElements;
|
|
39
|
+
confirmParams: { return_url: string };
|
|
40
|
+
}): Promise<{ error?: StripeError }>;
|
|
41
|
+
confirmCardPayment(
|
|
42
|
+
clientSecret: string,
|
|
43
|
+
options: { payment_method: string },
|
|
44
|
+
): Promise<PaymentIntentResult>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface StripeElementsOptions {
|
|
48
|
+
clientSecret?: string;
|
|
49
|
+
appearance?: {
|
|
50
|
+
theme?: "stripe" | "night" | "flat";
|
|
51
|
+
variables?: Record<string, string>;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function loadStripe(publishableKey: string): Promise<Stripe | null>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
declare module "@stripe/react-stripe-js" {
|
|
59
|
+
import {
|
|
60
|
+
Stripe,
|
|
61
|
+
StripeElements,
|
|
62
|
+
StripeElementsOptions,
|
|
63
|
+
} from "@stripe/stripe-js";
|
|
64
|
+
import { FunctionComponent, ReactNode } from "react";
|
|
65
|
+
|
|
66
|
+
export const Elements: FunctionComponent<{
|
|
67
|
+
stripe: Stripe | PromiseLike<Stripe | null> | null;
|
|
68
|
+
options?: StripeElementsOptions;
|
|
69
|
+
children?: ReactNode;
|
|
70
|
+
}>;
|
|
71
|
+
export const PaymentElement: FunctionComponent;
|
|
72
|
+
export function useStripe(): Stripe | null;
|
|
73
|
+
export function useElements(): StripeElements | null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
declare module "@stripe/stripe-js/pure" {
|
|
77
|
+
export { loadStripe } from "@stripe/stripe-js";
|
|
78
|
+
}
|
|
@@ -16,8 +16,8 @@ const Breadcrumbs: FunctionComponent<ComponentProps> = ({
|
|
|
16
16
|
}: ComponentProps): ReactElement => {
|
|
17
17
|
const { translateString } = useTranslateValue();
|
|
18
18
|
return (
|
|
19
|
-
<nav className="
|
|
20
|
-
<ol role="list" className="flex items-center
|
|
19
|
+
<nav className="block" aria-label="Breadcrumb">
|
|
20
|
+
<ol role="list" className="flex flex-wrap items-center gap-x-1 gap-y-2">
|
|
21
21
|
{links &&
|
|
22
22
|
links.length > 0 &&
|
|
23
23
|
links.map((link: Link, i: number) => {
|
|
@@ -302,3 +302,81 @@
|
|
|
302
302
|
);
|
|
303
303
|
border: 1px solid rgba(217, 119, 6, 0.4);
|
|
304
304
|
}
|
|
305
|
+
|
|
306
|
+
/* ---------- Override (substituted) events ----------
|
|
307
|
+
A block that says "somebody else is taking this person's alerts". The colour
|
|
308
|
+
alone cannot carry that: it is the SUBSTITUTE's colour, and a reader who does
|
|
309
|
+
not already know the roster cannot tell it from an ordinary shift. Three
|
|
310
|
+
independent cues, so none of them has to survive on its own:
|
|
311
|
+
|
|
312
|
+
1. a stripe down the leading edge in the OVERRIDDEN person's colour, which
|
|
313
|
+
is what makes the swap readable when the week-view column is too narrow
|
|
314
|
+
to show any text at all;
|
|
315
|
+
2. a dotted inner rule beside it, so the distinction still lands in
|
|
316
|
+
greyscale and for a reader who cannot separate the two hues;
|
|
317
|
+
3. the label itself, which the caller prefixes.
|
|
318
|
+
|
|
319
|
+
--oneuptime-event-accent is set per event by Calendar.tsx's eventPropGetter
|
|
320
|
+
from CalendarEvent.accentColor; the fallback keeps the stripe visible if a
|
|
321
|
+
caller sets the class without a colour. */
|
|
322
|
+
.oneuptime-calendar .rbc-event.oneuptime-calendar-event--override {
|
|
323
|
+
position: relative;
|
|
324
|
+
padding-left: 0.75rem;
|
|
325
|
+
overflow: hidden;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.oneuptime-calendar .rbc-event.oneuptime-calendar-event--override::before {
|
|
329
|
+
content: "";
|
|
330
|
+
position: absolute;
|
|
331
|
+
top: 0;
|
|
332
|
+
bottom: 0;
|
|
333
|
+
left: 0;
|
|
334
|
+
width: 0.3125rem;
|
|
335
|
+
background-color: var(--oneuptime-event-accent, #6b7280);
|
|
336
|
+
/* Sits above the label so a long name cannot paint over the cue. */
|
|
337
|
+
z-index: 1;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.oneuptime-calendar .rbc-event.oneuptime-calendar-event--override::after {
|
|
341
|
+
content: "";
|
|
342
|
+
position: absolute;
|
|
343
|
+
top: 0.15rem;
|
|
344
|
+
bottom: 0.15rem;
|
|
345
|
+
left: 0.4375rem;
|
|
346
|
+
border-left: 1px dotted currentColor;
|
|
347
|
+
opacity: 0.65;
|
|
348
|
+
z-index: 1;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* The agenda view renders events as table rows, where an absolutely positioned
|
|
352
|
+
stripe has nothing to anchor to. Give that view a plain left border instead
|
|
353
|
+
so the same event is still marked there. */
|
|
354
|
+
.oneuptime-calendar
|
|
355
|
+
.rbc-agenda-view
|
|
356
|
+
table.rbc-agenda-table
|
|
357
|
+
tbody
|
|
358
|
+
> tr.oneuptime-calendar-event--override
|
|
359
|
+
> td:first-child {
|
|
360
|
+
border-left: 0.25rem solid var(--oneuptime-event-accent, #6b7280);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/* Legend swatch for the override key. The block it names is drawn in two
|
|
364
|
+
people's colours, so the swatch is too - generic hues here, since the key
|
|
365
|
+
speaks for every override on the grid rather than for one of them. */
|
|
366
|
+
.oneuptime-calendar-override-swatch {
|
|
367
|
+
position: relative;
|
|
368
|
+
overflow: hidden;
|
|
369
|
+
background-color: #6366f1; /* indigo-500 - stands for the substitute */
|
|
370
|
+
border: 1px solid rgba(79, 70, 229, 0.35); /* indigo-600 */
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.oneuptime-calendar-override-swatch::before {
|
|
374
|
+
content: "";
|
|
375
|
+
position: absolute;
|
|
376
|
+
top: 0;
|
|
377
|
+
bottom: 0;
|
|
378
|
+
left: 0;
|
|
379
|
+
width: 45%;
|
|
380
|
+
/* Stands for the person who was overridden. */
|
|
381
|
+
background-color: #9ca3af; /* gray-400 */
|
|
382
|
+
}
|
|
@@ -75,9 +75,33 @@ const CalendarElement: FunctionComponent<ComponentProps> = (
|
|
|
75
75
|
display: "block",
|
|
76
76
|
};
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
/*
|
|
79
|
+
* The accent colour reaches CSS as a custom property rather than as a
|
|
80
|
+
* border here, so the stylesheet decides how to draw it (an inset stripe
|
|
81
|
+
* today) and the two can be changed together in one place.
|
|
82
|
+
*/
|
|
83
|
+
if (event.accentColor) {
|
|
84
|
+
(style as Record<string, string>)["--oneuptime-event-accent"] =
|
|
85
|
+
event.accentColor.toString();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const className: string | undefined = event.className
|
|
89
|
+
? event.className.toString()
|
|
90
|
+
: undefined;
|
|
91
|
+
|
|
92
|
+
return className ? { style, className } : { style };
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* react-big-calendar's default tooltip is the title, which is already
|
|
97
|
+
* truncated in the block itself — so hovering a clipped label tells the
|
|
98
|
+
* reader exactly as little as looking at it did. Prefer `desc`, which callers
|
|
99
|
+
* use for the full, multi-line explanation of what the block means.
|
|
100
|
+
*/
|
|
101
|
+
const eventTooltipGetter: (event: CalendarEvent) => string = (
|
|
102
|
+
event: CalendarEvent,
|
|
103
|
+
): string => {
|
|
104
|
+
return event.desc?.toString() || event.title;
|
|
81
105
|
};
|
|
82
106
|
|
|
83
107
|
return (
|
|
@@ -94,6 +118,7 @@ const CalendarElement: FunctionComponent<ComponentProps> = (
|
|
|
94
118
|
views={CALENDAR_VIEWS}
|
|
95
119
|
defaultView={props.defaultCalendarView || "week"}
|
|
96
120
|
eventPropGetter={eventStyleGetter}
|
|
121
|
+
tooltipAccessor={eventTooltipGetter}
|
|
97
122
|
popup
|
|
98
123
|
onRangeChange={(range: Date[] | { start: Date; end: Date }) => {
|
|
99
124
|
if (Array.isArray(range)) {
|
|
@@ -152,6 +152,15 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
152
152
|
|
|
153
153
|
const isInitialValuesSet: MutableRefObject<boolean> = useRef(false);
|
|
154
154
|
|
|
155
|
+
/*
|
|
156
|
+
* Nothing may re-seed a form the user has already typed into. The guard
|
|
157
|
+
* above latches once, which is enough on its own, but "the value the user
|
|
158
|
+
* entered survives" is the one property of a form that must never quietly
|
|
159
|
+
* regress - so it is asserted directly rather than inferred from the order
|
|
160
|
+
* two effects happen to run in.
|
|
161
|
+
*/
|
|
162
|
+
const hasUserEdited: MutableRefObject<boolean> = useRef(false);
|
|
163
|
+
|
|
155
164
|
const refCurrentValue: React.MutableRefObject<FormValues<T>> = useRef(
|
|
156
165
|
props.initialValues || {},
|
|
157
166
|
);
|
|
@@ -310,6 +319,24 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
310
319
|
setFormFields(fields);
|
|
311
320
|
}, [props.fields, currentFormStepId]);
|
|
312
321
|
|
|
322
|
+
/*
|
|
323
|
+
* A field is only worth disabling while options are being fetched if it is
|
|
324
|
+
* one of the fields those options belong to. Disabling everything meant a
|
|
325
|
+
* Text or Email field went read-only because some unrelated dropdown was
|
|
326
|
+
* refreshing - and Input renders `disabled` as `readOnly`, so it stays
|
|
327
|
+
* focusable and simply swallows the keystrokes with no visible reason.
|
|
328
|
+
*/
|
|
329
|
+
type IsDropdownFieldFunction = (field: Field<T>) => boolean;
|
|
330
|
+
|
|
331
|
+
const isDropdownField: IsDropdownFieldFunction = (
|
|
332
|
+
field: Field<T>,
|
|
333
|
+
): boolean => {
|
|
334
|
+
return (
|
|
335
|
+
field.fieldType === FormFieldSchemaType.Dropdown ||
|
|
336
|
+
field.fieldType === FormFieldSchemaType.MultiSelectDropdown
|
|
337
|
+
);
|
|
338
|
+
};
|
|
339
|
+
|
|
313
340
|
type GetFieldNameFunction = (field: Field<T>) => string;
|
|
314
341
|
|
|
315
342
|
const getFieldName: GetFieldNameFunction = (field: Field<T>): string => {
|
|
@@ -347,6 +374,8 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
347
374
|
[fieldName]: value as any,
|
|
348
375
|
};
|
|
349
376
|
|
|
377
|
+
hasUserEdited.current = true;
|
|
378
|
+
|
|
350
379
|
refCurrentValue.current = updatedValue;
|
|
351
380
|
|
|
352
381
|
setCurrentValue(refCurrentValue.current);
|
|
@@ -484,7 +513,7 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
484
513
|
return;
|
|
485
514
|
}
|
|
486
515
|
|
|
487
|
-
if (isInitialValuesSet.current) {
|
|
516
|
+
if (isInitialValuesSet.current || hasUserEdited.current) {
|
|
488
517
|
return;
|
|
489
518
|
}
|
|
490
519
|
|
|
@@ -601,7 +630,16 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
601
630
|
if (field.getDefaultValue && (values as any)[fieldName] === undefined) {
|
|
602
631
|
(values as any)[fieldName] = field.getDefaultValue(values);
|
|
603
632
|
}
|
|
633
|
+
}
|
|
604
634
|
|
|
635
|
+
/*
|
|
636
|
+
* Latch only once the field list has actually arrived. formFields starts
|
|
637
|
+
* empty and is filled in by an effect, so latching before then would
|
|
638
|
+
* skip every default value and every dropdown/date normalisation above.
|
|
639
|
+
* (This used to be written as an assignment inside the loop, which had
|
|
640
|
+
* the same effect by accident.)
|
|
641
|
+
*/
|
|
642
|
+
if (formFields.length > 0) {
|
|
605
643
|
isInitialValuesSet.current = true;
|
|
606
644
|
}
|
|
607
645
|
|
|
@@ -747,7 +785,8 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
747
785
|
touched={touched[fieldName] || false}
|
|
748
786
|
isDisabled={
|
|
749
787
|
isLoading ||
|
|
750
|
-
isDropdownOptionsLoading
|
|
788
|
+
(isDropdownOptionsLoading &&
|
|
789
|
+
isDropdownField(field)) ||
|
|
751
790
|
false
|
|
752
791
|
}
|
|
753
792
|
currentValues={refCurrentValue.current}
|
|
@@ -770,6 +809,9 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
770
809
|
{field.getFooterElement &&
|
|
771
810
|
field.getFooterElement(
|
|
772
811
|
refCurrentValue.current,
|
|
812
|
+
touched[fieldName]
|
|
813
|
+
? errors[fieldName] || undefined
|
|
814
|
+
: undefined,
|
|
773
815
|
)}
|
|
774
816
|
</div>
|
|
775
817
|
</Fragment>
|
|
@@ -14,7 +14,8 @@ import React, {
|
|
|
14
14
|
useState,
|
|
15
15
|
} from "react";
|
|
16
16
|
import { createPortal } from "react-dom";
|
|
17
|
-
import
|
|
17
|
+
import ChromePicker from "react-color/lib/components/chrome/Chrome";
|
|
18
|
+
import type { ColorResult } from "react-color";
|
|
18
19
|
|
|
19
20
|
// ChromePicker renders at a fixed intrinsic width.
|
|
20
21
|
const COLOR_PICKER_POPUP_WIDTH_PX: number = 225;
|
|
@@ -932,13 +932,26 @@ const FormField: <T extends GenericObject>(
|
|
|
932
932
|
id={fieldId}
|
|
933
933
|
tabIndex={0}
|
|
934
934
|
disabled={props.isDisabled || props.field.disabled}
|
|
935
|
-
error={
|
|
935
|
+
error={
|
|
936
|
+
!props.field.errorMessageInFooter &&
|
|
937
|
+
props.touched &&
|
|
938
|
+
props.error
|
|
939
|
+
? props.error
|
|
940
|
+
: undefined
|
|
941
|
+
}
|
|
942
|
+
ariaInvalid={Boolean(
|
|
943
|
+
props.field.errorMessageInFooter &&
|
|
944
|
+
props.touched &&
|
|
945
|
+
props.error,
|
|
946
|
+
)}
|
|
936
947
|
dataTestId={props.field.dataTestId}
|
|
937
948
|
type={fieldType as InputType}
|
|
949
|
+
ariaDescribedby={props.field.ariaDescribedby}
|
|
938
950
|
autoComplete={
|
|
939
|
-
props.field.
|
|
951
|
+
props.field.autoComplete ||
|
|
952
|
+
(props.field.fieldType
|
|
940
953
|
? getAutoComplete(props.field.fieldType)
|
|
941
|
-
: undefined
|
|
954
|
+
: undefined)
|
|
942
955
|
}
|
|
943
956
|
onChange={(value: string) => {
|
|
944
957
|
onChange(value);
|
|
@@ -51,7 +51,7 @@ import Permission, {
|
|
|
51
51
|
UserPermission,
|
|
52
52
|
} from "../../../Types/Permission";
|
|
53
53
|
import Typeof from "../../../Types/Typeof";
|
|
54
|
-
import React, { MutableRefObject, ReactElement, useState } from "react";
|
|
54
|
+
import React, { MutableRefObject, ReactElement, useRef, useState } from "react";
|
|
55
55
|
import useAsyncEffect from "use-async-effect";
|
|
56
56
|
import Select from "../../../Types/BaseDatabase/Select";
|
|
57
57
|
|
|
@@ -132,6 +132,37 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
132
132
|
const [itemToEdit, setItemToEdit] = useState<TBaseModel | null>(null);
|
|
133
133
|
const model: TBaseModel = new props.modelType();
|
|
134
134
|
|
|
135
|
+
/*
|
|
136
|
+
* Almost every caller writes its `fields` as an inline array literal in JSX,
|
|
137
|
+
* so the array is a brand new identity on every render of the page holding
|
|
138
|
+
* the form - which makes the effect below re-run whenever ANY unrelated
|
|
139
|
+
* state on that page changes, including while the user is typing into this
|
|
140
|
+
* form. Two guards keep that from being destructive:
|
|
141
|
+
*
|
|
142
|
+
* - `dropdownOptionsCache` remembers the options already fetched for a
|
|
143
|
+
* given dropdown, so a re-run does not fire the same list request again.
|
|
144
|
+
* Without it the invite-user form issued a Team list request per
|
|
145
|
+
* keystroke.
|
|
146
|
+
* - `fieldsRunGeneration` discards a slower earlier run, so an in-flight
|
|
147
|
+
* request that resolves after a newer one cannot put stale fields back
|
|
148
|
+
* or clear a loading flag the newer run still owns.
|
|
149
|
+
*/
|
|
150
|
+
type DropdownOptionsCacheEntry = {
|
|
151
|
+
dropdownOptions: Array<DropdownOption>;
|
|
152
|
+
selectByAccessControlProps: Field<TBaseModel>["selectByAccessControlProps"];
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/*
|
|
156
|
+
* Keyed on the model CONSTRUCTOR rather than on its name, so two models can
|
|
157
|
+
* never share an entry however they are named - a model with neither a
|
|
158
|
+
* tableName nor a singularName would otherwise key as the empty string.
|
|
159
|
+
*/
|
|
160
|
+
const dropdownOptionsCache: MutableRefObject<
|
|
161
|
+
Map<unknown, Dictionary<DropdownOptionsCacheEntry>>
|
|
162
|
+
> = useRef<Map<unknown, Dictionary<DropdownOptionsCacheEntry>>>(new Map());
|
|
163
|
+
|
|
164
|
+
const fieldsRunGeneration: MutableRefObject<number> = useRef<number>(0);
|
|
165
|
+
|
|
135
166
|
const modelAPI: typeof ModelAPI = props.modelAPI || ModelAPI;
|
|
136
167
|
|
|
137
168
|
type GetSelectFieldsFunction = () => Select<TBaseModel>;
|
|
@@ -242,6 +273,9 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
242
273
|
};
|
|
243
274
|
|
|
244
275
|
const setFormFields: PromiseVoidFunction = async (): Promise<void> => {
|
|
276
|
+
fieldsRunGeneration.current = fieldsRunGeneration.current + 1;
|
|
277
|
+
const generation: number = fieldsRunGeneration.current;
|
|
278
|
+
|
|
245
279
|
let fieldsToSet: Fields<TBaseModel> = [];
|
|
246
280
|
|
|
247
281
|
for (const field of props.fields) {
|
|
@@ -314,7 +348,12 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
314
348
|
}
|
|
315
349
|
}
|
|
316
350
|
|
|
317
|
-
fieldsToSet = await fetchDropdownOptions(fieldsToSet);
|
|
351
|
+
fieldsToSet = await fetchDropdownOptions(fieldsToSet, generation);
|
|
352
|
+
|
|
353
|
+
if (generation !== fieldsRunGeneration.current) {
|
|
354
|
+
// A newer run started while this one was fetching. It owns the state now.
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
318
357
|
|
|
319
358
|
// if there are no fields to set, then show permission error. This is useful when there are no fields to show.
|
|
320
359
|
if (fieldsToSet.length === 0 && props.fields.length > 0) {
|
|
@@ -441,15 +480,103 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
441
480
|
|
|
442
481
|
type FetchDropdownOptionsFunction = (
|
|
443
482
|
fields: Fields<TBaseModel>,
|
|
483
|
+
generation: number,
|
|
444
484
|
) => Promise<Fields<TBaseModel>>;
|
|
445
485
|
|
|
486
|
+
/*
|
|
487
|
+
* What a dropdown's options depend on, and nothing else: the model, and the
|
|
488
|
+
* two columns read off it. The request below takes no query and no closure
|
|
489
|
+
* state, so two fields with the same three always get the same list back -
|
|
490
|
+
* which is what makes caching them safe.
|
|
491
|
+
*/
|
|
492
|
+
type GetCachedDropdownOptionsFunction = (
|
|
493
|
+
dropdownModal: NonNullable<Field<TBaseModel>["dropdownModal"]>,
|
|
494
|
+
) => DropdownOptionsCacheEntry | undefined;
|
|
495
|
+
|
|
496
|
+
type SetCachedDropdownOptionsFunction = (
|
|
497
|
+
dropdownModal: NonNullable<Field<TBaseModel>["dropdownModal"]>,
|
|
498
|
+
entry: DropdownOptionsCacheEntry,
|
|
499
|
+
) => void;
|
|
500
|
+
|
|
501
|
+
const getDropdownColumnsKey: (
|
|
502
|
+
dropdownModal: NonNullable<Field<TBaseModel>["dropdownModal"]>,
|
|
503
|
+
) => string = (
|
|
504
|
+
dropdownModal: NonNullable<Field<TBaseModel>["dropdownModal"]>,
|
|
505
|
+
): string => {
|
|
506
|
+
return `${dropdownModal.labelField}|${dropdownModal.valueField}`;
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
const getCachedDropdownOptions: GetCachedDropdownOptionsFunction = (
|
|
510
|
+
dropdownModal: NonNullable<Field<TBaseModel>["dropdownModal"]>,
|
|
511
|
+
): DropdownOptionsCacheEntry | undefined => {
|
|
512
|
+
return dropdownOptionsCache.current.get(dropdownModal.type)?.[
|
|
513
|
+
getDropdownColumnsKey(dropdownModal)
|
|
514
|
+
];
|
|
515
|
+
};
|
|
516
|
+
|
|
517
|
+
const setCachedDropdownOptions: SetCachedDropdownOptionsFunction = (
|
|
518
|
+
dropdownModal: NonNullable<Field<TBaseModel>["dropdownModal"]>,
|
|
519
|
+
entry: DropdownOptionsCacheEntry,
|
|
520
|
+
): void => {
|
|
521
|
+
const byColumns: Dictionary<DropdownOptionsCacheEntry> =
|
|
522
|
+
dropdownOptionsCache.current.get(dropdownModal.type) || {};
|
|
523
|
+
|
|
524
|
+
byColumns[getDropdownColumnsKey(dropdownModal)] = entry;
|
|
525
|
+
|
|
526
|
+
dropdownOptionsCache.current.set(dropdownModal.type, byColumns);
|
|
527
|
+
};
|
|
528
|
+
|
|
446
529
|
const fetchDropdownOptions: FetchDropdownOptionsFunction = async (
|
|
447
530
|
fields: Fields<TBaseModel>,
|
|
531
|
+
generation: number,
|
|
448
532
|
): Promise<Fields<TBaseModel>> => {
|
|
533
|
+
/*
|
|
534
|
+
* Serve everything already fetched from the cache first, then work out
|
|
535
|
+
* whether anything is actually left to request. Flipping the loading flag
|
|
536
|
+
* for a run that has nothing to fetch used to blank the whole form (see
|
|
537
|
+
* the comment on the render guard below), so only flip it when a real
|
|
538
|
+
* request is about to go out.
|
|
539
|
+
*/
|
|
540
|
+
const fieldsToFetch: Fields<TBaseModel> = [];
|
|
541
|
+
|
|
542
|
+
for (const field of fields) {
|
|
543
|
+
if (!field.dropdownModal || !field.dropdownModal.type) {
|
|
544
|
+
continue;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const cached: DropdownOptionsCacheEntry | undefined =
|
|
548
|
+
getCachedDropdownOptions(field.dropdownModal);
|
|
549
|
+
|
|
550
|
+
if (cached) {
|
|
551
|
+
field.dropdownOptions = cached.dropdownOptions;
|
|
552
|
+
|
|
553
|
+
if (cached.selectByAccessControlProps) {
|
|
554
|
+
field.selectByAccessControlProps = cached.selectByAccessControlProps;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
continue;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
fieldsToFetch.push(field);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
if (fieldsToFetch.length === 0) {
|
|
564
|
+
/*
|
|
565
|
+
* Nothing to wait for. Clearing rather than just returning keeps the flag
|
|
566
|
+
* from being left on by an older run that lost the race and therefore
|
|
567
|
+
* declined to clear it - React bails out when it is already false.
|
|
568
|
+
*/
|
|
569
|
+
if (generation === fieldsRunGeneration.current) {
|
|
570
|
+
setIsFetchingDropdownOptions(false);
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
return fields;
|
|
574
|
+
}
|
|
575
|
+
|
|
449
576
|
setIsFetchingDropdownOptions(true);
|
|
450
577
|
|
|
451
578
|
try {
|
|
452
|
-
for (const field of
|
|
579
|
+
for (const field of fieldsToFetch) {
|
|
453
580
|
if (field.dropdownModal && field.dropdownModal.type) {
|
|
454
581
|
const tempModel: BaseModel = new field.dropdownModal.type();
|
|
455
582
|
const select: any = {
|
|
@@ -642,13 +769,21 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
642
769
|
} else {
|
|
643
770
|
field.dropdownOptions = [];
|
|
644
771
|
}
|
|
772
|
+
|
|
773
|
+
setCachedDropdownOptions(field.dropdownModal, {
|
|
774
|
+
dropdownOptions: (field.dropdownOptions ||
|
|
775
|
+
[]) as Array<DropdownOption>,
|
|
776
|
+
selectByAccessControlProps: field.selectByAccessControlProps,
|
|
777
|
+
});
|
|
645
778
|
}
|
|
646
779
|
}
|
|
647
780
|
} catch (err) {
|
|
648
781
|
setError(API.getFriendlyMessage(err));
|
|
649
782
|
}
|
|
650
783
|
|
|
651
|
-
|
|
784
|
+
if (generation === fieldsRunGeneration.current) {
|
|
785
|
+
setIsFetchingDropdownOptions(false);
|
|
786
|
+
}
|
|
652
787
|
|
|
653
788
|
return fields;
|
|
654
789
|
};
|
|
@@ -849,7 +984,26 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
849
984
|
}
|
|
850
985
|
};
|
|
851
986
|
|
|
852
|
-
|
|
987
|
+
/*
|
|
988
|
+
* Only ever swap the form out for a loader while there is no form to show.
|
|
989
|
+
* Returning the loader over a form the user is already filling in unmounts
|
|
990
|
+
* BasicModelForm and everything under it, and a form's values live in that
|
|
991
|
+
* subtree - in BasicForm's refs and in each Input's own state, since Input
|
|
992
|
+
* is DOM-uncontrolled. So the remount silently threw the user's input away.
|
|
993
|
+
*
|
|
994
|
+
* That is what made inviting a user impossible: the invite form's Email field
|
|
995
|
+
* calls back into the page on every keystroke to check whether the address
|
|
996
|
+
* already has an account, the page re-renders with a fresh `fields` array
|
|
997
|
+
* literal, the effect above re-runs, and the form the user was typing into
|
|
998
|
+
* was destroyed and rebuilt empty.
|
|
999
|
+
*
|
|
1000
|
+
* Once fields exist, options refresh in the background instead. The cache in
|
|
1001
|
+
* fetchDropdownOptions means the usual re-run does not even reach the
|
|
1002
|
+
* network, so in practice nothing about the form flickers at all.
|
|
1003
|
+
*/
|
|
1004
|
+
const hasFieldsToRender: boolean = fields.length > 0;
|
|
1005
|
+
|
|
1006
|
+
if (isFetching || (isFetchingDropdownOptions && !hasFieldsToRender)) {
|
|
853
1007
|
return (
|
|
854
1008
|
<div className="row flex justify-center mt-20 mb-20">
|
|
855
1009
|
<Loader loaderType={LoaderType.Bar} color={VeryLightGray} size={200} />
|
|
@@ -130,7 +130,12 @@ export default interface Field<TEntity> {
|
|
|
130
130
|
| undefined;
|
|
131
131
|
radioButtonOptions?: Array<RadioButton>;
|
|
132
132
|
footerElement?: ReactElement | undefined;
|
|
133
|
-
getFooterElement?: (
|
|
133
|
+
getFooterElement?: (
|
|
134
|
+
values: FormValues<TEntity>,
|
|
135
|
+
error?: string,
|
|
136
|
+
) => ReactElement | undefined;
|
|
137
|
+
// For Input fields: render errors in the footer linked by ariaDescribedby.
|
|
138
|
+
errorMessageInFooter?: boolean | undefined;
|
|
134
139
|
id?: string | undefined;
|
|
135
140
|
getCustomElement?: (
|
|
136
141
|
values: FormValues<TEntity>,
|
|
@@ -138,6 +143,8 @@ export default interface Field<TEntity> {
|
|
|
138
143
|
) => ReactElement | undefined; // custom element to render instead of the elements in the form.
|
|
139
144
|
categoryCheckboxProps?: CategoryCheckboxProps | undefined; // props for the category checkbox component. If fieldType is CategoryCheckbox, this prop is required.
|
|
140
145
|
dataTestId?: string | undefined;
|
|
146
|
+
autoComplete?: string | undefined;
|
|
147
|
+
ariaDescribedby?: string | undefined;
|
|
141
148
|
|
|
142
149
|
// set this to true if you want to show this field in the form even when the form is in edit mode.
|
|
143
150
|
doNotShowWhenEditing?: boolean | undefined;
|
|
@@ -12,6 +12,7 @@ import React, {
|
|
|
12
12
|
FunctionComponent,
|
|
13
13
|
ReactElement,
|
|
14
14
|
useEffect,
|
|
15
|
+
useMemo,
|
|
15
16
|
useRef,
|
|
16
17
|
useState,
|
|
17
18
|
} from "react";
|
|
@@ -65,7 +66,12 @@ export interface ComponentProps {
|
|
|
65
66
|
const DayUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
66
67
|
props: ComponentProps,
|
|
67
68
|
): ReactElement => {
|
|
68
|
-
const
|
|
69
|
+
const days: number = useMemo(() => {
|
|
70
|
+
return OneUptimeDate.getNumberOfDaysBetweenDatesInclusive(
|
|
71
|
+
props.startDate,
|
|
72
|
+
props.endDate,
|
|
73
|
+
);
|
|
74
|
+
}, [props.startDate, props.endDate]);
|
|
69
75
|
|
|
70
76
|
/*
|
|
71
77
|
* The strip is one tab stop with a roving tabindex inside it - see
|
|
@@ -100,15 +106,6 @@ const DayUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
|
100
106
|
barRefs.current[focusedBarIndex]?.focus();
|
|
101
107
|
}, [focusedBarIndex]);
|
|
102
108
|
|
|
103
|
-
useEffect(() => {
|
|
104
|
-
setDays(
|
|
105
|
-
OneUptimeDate.getNumberOfDaysBetweenDatesInclusive(
|
|
106
|
-
props.startDate,
|
|
107
|
-
props.endDate,
|
|
108
|
-
),
|
|
109
|
-
);
|
|
110
|
-
}, [props.startDate, props.endDate]);
|
|
111
|
-
|
|
112
109
|
const activeBarIndex: number = DayUptimeGraphUtil.getActiveBarIndex({
|
|
113
110
|
storedIndex: focusedBarIndex,
|
|
114
111
|
barCount: days,
|
|
@@ -360,6 +357,7 @@ const DayUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
|
360
357
|
return (
|
|
361
358
|
<Tooltip
|
|
362
359
|
key={dayNumber}
|
|
360
|
+
lazy={true}
|
|
363
361
|
richContent={
|
|
364
362
|
<UptimeBarTooltip
|
|
365
363
|
date={todaysDay}
|
|
@@ -3022,6 +3022,22 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
|
|
3022
3022
|
d="M4.928 1.825c-1.09.553-1.09.64-.07 1.78 5.655 6.295 7.004 7.782 7.107 7.782.139.017 7.971-8.542 8.058-8.801.034-.07-.208-.312-.519-.536-.415-.312-.864-.433-1.712-.467-1.59-.104-2.144.242-4.115 2.455-.899 1.003-1.66 1.833-1.66 1.833-.017 0-.76-.813-1.642-1.798S8.473 2.1 8.127 1.91c-.796-.45-2.421-.484-3.2-.086zM1.297 4.367C.45 4.695 0 5.007 0 5.248c0 .121 1.331 1.678 2.94 3.459 1.625 1.78 2.939 3.268 2.939 3.302 0 .035-1.331 1.522-2.94 3.303C1.314 17.11.017 18.683.035 18.822c.086.467 1.504 1.055 2.541 1.055 1.678-.018 2.058-.312 5.603-4.202 1.78-1.954 3.233-3.614 3.233-3.666 0-.069-1.435-1.694-3.199-3.63-2.3-2.508-3.423-3.632-3.96-3.874-.812-.398-2.126-.467-2.956-.138zm18.467.12c-.502.26-1.764 1.505-3.943 3.891-1.763 1.937-3.199 3.562-3.199 3.631 0 .07 1.453 1.712 3.234 3.666 3.544 3.89 3.925 4.184 5.602 4.202 1.038 0 2.455-.588 2.542-1.055.017-.156-1.28-1.712-2.905-3.493-1.608-1.78-2.94-3.285-2.94-3.32 0-.034 1.332-1.539 2.94-3.32C22.72 6.91 24.017 5.352 24 5.214c-.087-.45-1.366-.968-2.473-1.038-.795-.034-1.21.035-1.763.312zM7.954 16.973c-2.144 2.369-3.908 4.374-3.943 4.46-.034.07.208.312.52.537.414.311.864.432 1.711.467 1.574.103 2.161-.26 4.15-2.508.864-.968 1.608-1.78 1.625-1.78s.761.812 1.643 1.798c2.023 2.248 2.559 2.576 4.132 2.49.848-.035 1.297-.156 1.712-.467.311-.225.553-.467.519-.536-.087-.26-7.92-8.819-8.058-8.801-.069 0-1.867 1.954-4.011 4.34z"
|
|
3023
3023
|
/>,
|
|
3024
3024
|
);
|
|
3025
|
+
} else if (icon === IconProp.VMware) {
|
|
3026
|
+
/*
|
|
3027
|
+
* VMware — hypervisor mark: a host chassis with three virtual machines
|
|
3028
|
+
* stacked on the hypervisor layer. Drawn in the outlined house style
|
|
3029
|
+
* (currentColor stroke) so it sits at 16px next to the other resource
|
|
3030
|
+
* brand logos (Proxmox / Ceph / Docker) without a filled wordmark.
|
|
3031
|
+
*/
|
|
3032
|
+
return getSvgWrapper(
|
|
3033
|
+
<>
|
|
3034
|
+
<rect x="3" y="4" width="18" height="16" rx="2" />
|
|
3035
|
+
<path strokeLinecap="round" d="M3 16h18" />
|
|
3036
|
+
<rect x="6" y="7" width="3" height="6" rx="0.75" />
|
|
3037
|
+
<rect x="10.5" y="7" width="3" height="6" rx="0.75" />
|
|
3038
|
+
<rect x="15" y="7" width="3" height="6" rx="0.75" />
|
|
3039
|
+
</>,
|
|
3040
|
+
);
|
|
3025
3041
|
} else if (icon === IconProp.IoT) {
|
|
3026
3042
|
// IoT — wireless/connectivity mark (reuses the Signal icon path).
|
|
3027
3043
|
return getSvgWrapper(
|