@oneuptime/common 14.0.7 → 14.0.8
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/Incident.ts +267 -1
- package/Models/DatabaseModels/IncidentCustomField.ts +202 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +30 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +126 -1
- package/Models/DatabaseModels/StatusPage.ts +55 -0
- package/Models/DatabaseModels/StatusPageSubscriber.ts +128 -0
- package/Server/API/IncidentAPI.ts +162 -0
- package/Server/API/StatusPageAPI.ts +487 -171
- package/Server/API/StatusPageSubscriberAPI.ts +63 -15
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.ts +108 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.ts +51 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.ts +168 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.ts +44 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Infrastructure/Semaphore.ts +10 -0
- package/Server/Middleware/IdentityRateLimit.ts +108 -3
- package/Server/Middleware/SubscriberNotificationPreviewRateLimit.ts +237 -0
- package/Server/Middleware/SubscriberNotificationTestSendRateLimit.ts +304 -0
- package/Server/Services/DatabaseService.ts +93 -10
- package/Server/Services/IncidentCustomFieldService.ts +276 -1
- package/Server/Services/IncidentEpisodePublicNoteService.ts +28 -0
- package/Server/Services/IncidentEpisodeService.ts +15 -0
- package/Server/Services/IncidentEpisodeStateTimelineService.ts +27 -1
- package/Server/Services/IncidentPublicNoteService.ts +30 -1
- package/Server/Services/IncidentService.ts +1535 -65
- package/Server/Services/IncidentStateTimelineService.ts +13 -0
- package/Server/Services/IncidentTemplateService.ts +109 -0
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +30 -1
- package/Server/Services/ScheduledMaintenanceService.ts +68 -18
- package/Server/Services/SmsService.ts +10 -0
- package/Server/Services/StatusPageService.ts +65 -8
- package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +299 -37
- package/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.ts +129 -0
- package/Server/Services/StatusPageSubscriberService.ts +1161 -64
- package/Server/Types/Markdown.ts +153 -6
- package/Server/Types/Workflow/Components/Email.ts +61 -2
- package/Server/Utils/CustomField/CustomFieldRename.ts +378 -0
- package/Server/Utils/DataSource/EgressGuard.ts +66 -21
- package/Server/Utils/Mail/PinnedSmtpSocket.ts +130 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +10 -0
- package/Server/Utils/SSRFProtection.ts +76 -16
- package/Server/Utils/StatusPage/IncidentStatusPageScope.ts +948 -0
- package/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.ts +656 -0
- package/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.ts +805 -0
- package/Server/Utils/StatusPage/StatusPageExclusion.ts +18 -0
- package/Server/Utils/StatusPage/StatusPageReadAccess.ts +125 -0
- package/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.ts +151 -0
- package/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.ts +70 -0
- package/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.ts +421 -0
- package/Server/Utils/StatusPage/SubscriberNotificationClaim.ts +107 -0
- package/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.ts +1049 -0
- package/Server/Utils/StatusPage/SubscriberNotificationFanOut.ts +180 -0
- package/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.ts +839 -0
- package/Server/Utils/StatusPage/SubscriberNotificationResendAccess.ts +393 -0
- package/Server/Utils/StatusPage/SubscriberNotificationRunLimit.ts +246 -0
- package/Server/Utils/StatusPage/SubscriberNotificationTiming.ts +133 -0
- package/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.ts +215 -0
- package/Server/Utils/StatusPageResource.ts +51 -20
- package/Server/Utils/VM/VMAPI.ts +1 -0
- package/Server/Utils/VM/VMRunner.ts +10 -0
- package/Server/Utils/Workflow/OAuth2TokenClient.ts +10 -0
- package/Server/Views/Partials/SensitiveUrlToken.ejs +8 -5
- package/Tests/App/Accounts/RegisterVerifyEmail.test.tsx +748 -0
- package/Tests/App/Accounts/ResendVerificationEmail.test.tsx +1222 -0
- package/Tests/App/Accounts/VerificationEmailResendUtils.test.ts +797 -0
- package/Tests/App/Accounts/VerifyEmailPending.test.tsx +538 -0
- package/Tests/App/Accounts/VerifyEmailResend.test.tsx +779 -0
- package/Tests/App/Dashboard/CustomFieldsSettingsIncidentOptions.test.tsx +357 -0
- package/Tests/App/Dashboard/EventNotes.test.tsx +776 -0
- package/Tests/App/Dashboard/EventNotesPages.test.tsx +119 -0
- package/Tests/App/Dashboard/EventNotesUtil.test.ts +116 -17
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +242 -5
- package/Tests/App/Dashboard/IncidentChangeStateNotifyDefault.test.tsx +91 -1
- package/Tests/App/Dashboard/IncidentCreateDetailsStep.test.tsx +643 -0
- package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +8 -1
- package/Tests/App/Dashboard/IncidentCreateStatusPageScope.test.tsx +601 -0
- package/Tests/App/Dashboard/IncidentCustomFieldTemplateVariables.test.tsx +386 -0
- package/Tests/App/Dashboard/IncidentNoteTemplatePlaceholders.test.tsx +124 -0
- package/Tests/App/Dashboard/IncidentNoteTemplateVariablesLoader.test.ts +305 -0
- package/Tests/App/Dashboard/IncidentOverviewNotifyDefault.test.tsx +112 -0
- package/Tests/App/Dashboard/IncidentSettingsRenotifyOnPublish.test.tsx +674 -0
- package/Tests/App/Dashboard/IncidentSettingsStatusPageScope.test.tsx +1051 -0
- package/Tests/App/Dashboard/IncidentTemplateCustomFields.test.tsx +384 -0
- package/Tests/App/Dashboard/IncidentTemplateStatusPageScopeCard.test.tsx +215 -0
- package/Tests/App/Dashboard/PublicNotePagesNotifyDefault.test.tsx +113 -1
- package/Tests/App/Dashboard/SubscriberAudienceSummary.test.tsx +512 -0
- package/Tests/App/Dashboard/SubscriberNotificationPreviewModal.test.tsx +837 -0
- package/Tests/App/Dashboard/SubscriberNotificationStatusLabel.test.tsx +88 -0
- package/Tests/App/Dashboard/SubscriberNotificationStatusResend.test.tsx +473 -0
- package/Tests/App/Dashboard/SubscriberTemplateLivePreview.test.tsx +196 -0
- package/Tests/App/Dashboard/TeamAddedSubscribersUnsubscribedNotice.test.tsx +248 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +64 -3
- package/Tests/App/StatusPage/StatusPageUnsubscribePage.test.tsx +412 -0
- package/Tests/Models/IncidentCustomFieldApiSchemaContract.test.ts +217 -0
- package/Tests/Models/IncidentCustomFieldCreateSettingsColumns.test.ts +252 -0
- package/Tests/Models/StatusPageSubscriberUnsubscribeColumns.test.ts +218 -0
- package/Tests/Server/API/ExpiredSessionRouteGuards.test.ts +7 -0
- package/Tests/Server/API/IncidentSubscriberAudienceAPI.test.ts +1408 -0
- package/Tests/Server/API/StatusPageIncidentScope.test.ts +1868 -0
- package/Tests/Server/API/StatusPageIncidentScopePostgres.test.ts +790 -0
- package/Tests/Server/API/StatusPageManageSubscriptionRecipient.test.ts +10 -1
- package/Tests/Server/API/StatusPageManageSubscriptionTemplateVariables.test.ts +206 -18
- package/Tests/Server/API/StatusPagePostmortemVisibility.test.ts +14 -2
- package/Tests/Server/API/StatusPageSubscriberCreateResponse.test.ts +217 -0
- package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +103 -2
- package/Tests/Server/API/StatusPageUnsubscribeAPI.test.ts +396 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentStatusPageScopeMigration.test.ts +395 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentTemplateStatusPageScopeFlagMigration.test.ts +150 -0
- package/Tests/Server/Infrastructure/Postgres/AddSubscriberNotificationClaimedAtMigration.test.ts +156 -0
- package/Tests/Server/Infrastructure/Postgres/SkipHiddenIncidentCreatedNotificationsMigration.test.ts +410 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +551 -1
- package/Tests/Server/Middleware/SubscriberNotificationPreviewRateLimit.test.ts +238 -0
- package/Tests/Server/Middleware/SubscriberNotificationTestSendRateLimit.test.ts +245 -0
- package/Tests/Server/Services/AddStatusPageSubscriberUnsubscribeTokenMigration.test.ts +152 -0
- package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +221 -36
- package/Tests/Server/Services/DatabaseServiceCompareAndSetColumns.test.ts +191 -0
- package/Tests/Server/Services/IncidentCreatedRenotifyOnPublish.test.ts +681 -0
- package/Tests/Server/Services/IncidentCreatedResend.test.ts +775 -0
- package/Tests/Server/Services/IncidentCustomFieldRenamePostgres.test.ts +713 -0
- package/Tests/Server/Services/IncidentCustomFieldService.test.ts +751 -0
- package/Tests/Server/Services/IncidentCustomFieldValueValidation.test.ts +556 -0
- package/Tests/Server/Services/IncidentStatusPageScope.test.ts +2971 -0
- package/Tests/Server/Services/IncidentStatusPageScopeFeed.test.ts +131 -0
- package/Tests/Server/Services/IncidentStatusPageScopePostgres.test.ts +625 -0
- package/Tests/Server/Services/IncidentTemplateCustomFieldsCopy.test.ts +311 -0
- package/Tests/Server/Services/IncidentTemplateStatusPageScope.test.ts +363 -0
- package/Tests/Server/Services/PublicNoteEditFeedEventType.test.ts +213 -0
- package/Tests/Server/Services/PublicNoteResendAccess.test.ts +994 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +289 -9
- package/Tests/Server/Services/SmsServiceFailIfNotSent.test.ts +67 -0
- package/Tests/Server/Services/StatusPageReportIncidentCounts.test.ts +610 -0
- package/Tests/Server/Services/StatusPageSubscriberAudienceCounts.test.ts +201 -0
- package/Tests/Server/Services/StatusPageSubscriberAudienceCountsPostgres.test.ts +271 -0
- package/Tests/Server/Services/StatusPageSubscriberConfirmationTemplateEscaping.test.ts +200 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationLogRedaction.test.ts +54 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateCompile.test.ts +37 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateIncidentRecordAccess.test.ts +772 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateLookup.test.ts +506 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateLookupPostgres.test.ts +261 -0
- package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +21 -5
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribe.test.ts +1618 -0
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribeLinkSenders.test.ts +373 -0
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribePostgres.test.ts +388 -0
- package/Tests/Server/Services/SubscriberNotificationInFlightRequeue.test.ts +500 -0
- package/Tests/Server/Types/MarkdownEmailLinks.test.ts +320 -0
- package/Tests/Server/Types/Workflow/Components/Email.test.ts +491 -1
- package/Tests/Server/Types/Workflow/Components/EmailSmtpPinning.test.ts +398 -0
- package/Tests/Server/Utils/CustomField/CustomFieldRename.test.ts +586 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +246 -10
- package/Tests/Server/Utils/DataSource/EgressGuardDeploymentConfig.test.ts +226 -0
- package/Tests/Server/Utils/DataSource/EgressGuardPinning.test.ts +131 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +4 -0
- package/Tests/Server/Utils/EgressPolicyEnvironment.ts +45 -0
- package/Tests/Server/Utils/Mail/PinnedSmtpSocket.test.ts +409 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +23 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionResolutionDetail.test.ts +314 -0
- package/Tests/Server/Utils/StatusPage/IncidentStatusPageScope.test.ts +1699 -0
- package/Tests/Server/Utils/StatusPage/IncidentStatusPageScopeQueriesPostgres.test.ts +508 -0
- package/Tests/Server/Utils/StatusPage/IncidentSubscriberAudienceCallerPermission.test.ts +246 -0
- package/Tests/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.test.ts +1348 -0
- package/Tests/Server/Utils/StatusPage/StatusPageReadAccess.test.ts +221 -0
- package/Tests/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.test.ts +132 -0
- package/Tests/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.test.ts +155 -0
- package/Tests/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.test.ts +708 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationClaim.test.ts +255 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationClaimPostgres.test.ts +528 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.test.ts +1238 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationFanOut.test.ts +472 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.test.ts +1168 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationRunLimit.test.ts +275 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationTiming.test.ts +131 -0
- package/Tests/Server/Utils/StatusPageResource.test.ts +98 -0
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +17 -0
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +75 -0
- package/Tests/Types/CustomField/CustomFieldSavedViews.test.ts +247 -0
- package/Tests/Types/CustomField/CustomFieldTemplateValues.test.ts +186 -0
- package/Tests/Types/CustomField/CustomFieldTypeCorrespondence.test.ts +48 -0
- package/Tests/Types/CustomField/CustomFieldValueFormat.test.ts +215 -0
- package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +343 -0
- package/Tests/Types/CustomField/CustomFieldVariableKey.test.ts +364 -0
- package/Tests/Types/SafeHtml.test.ts +102 -0
- package/Tests/Types/StatusPage/IncidentCreatedRenotify.test.ts +419 -0
- package/Tests/Types/StatusPage/IncidentCreatedResend.test.ts +118 -0
- package/Tests/Types/StatusPage/IncidentScopeAddedPagesNotification.test.ts +558 -0
- package/Tests/Types/StatusPage/IncidentSubscriberAudience.test.ts +284 -0
- package/Tests/Types/StatusPage/StatusPageSubscriberUnsubscribe.test.ts +341 -0
- package/Tests/Types/StatusPage/SubscriberNotificationPreview.test.ts +196 -0
- package/Tests/Types/StatusPage/SubscriberNotificationResend.test.ts +201 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateCompiler.test.ts +277 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplatePreview.test.ts +179 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateVariables.test.ts +324 -0
- package/Tests/Types/StatusPage/SubscriberUpdateNotification.test.ts +60 -13
- package/Tests/UI/Components/CustomFields/CustomFieldFormFields.test.ts +432 -0
- package/Tests/UI/Components/CustomFields/CustomFieldModelFormFields.test.tsx +685 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetailOrder.test.tsx +469 -0
- package/Tests/UI/Components/Forms/ModelFormCustomFieldInputs.test.tsx +325 -0
- package/Tests/UI/Components/Forms/ModelFormDropdownOptionsRefused.test.tsx +358 -0
- package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +22 -0
- package/Tests/UI/Monitor/NetworkPathView.test.tsx +289 -0
- package/Tests/Utils/Incident/IncidentNoteTemplateVariables.test.ts +623 -0
- package/Tests/Utils/Markdown/MarkdownEscape.test.ts +89 -0
- package/Tests/Utils/ProbeNetworkFailureUtil.test.ts +992 -0
- package/Tests/Utils/RequestFailedDetails.test.ts +575 -0
- package/Types/CustomField/CustomFieldOrder.ts +55 -0
- package/Types/CustomField/CustomFieldSavedViews.ts +225 -0
- package/Types/CustomField/CustomFieldTemplateMerge.ts +71 -0
- package/Types/CustomField/CustomFieldType.ts +14 -0
- package/Types/CustomField/CustomFieldValueFormat.ts +161 -0
- package/Types/CustomField/CustomFieldValueValidator.ts +488 -0
- package/Types/CustomField/CustomFieldVariableKey.ts +211 -0
- package/Types/SafeHtml.ts +93 -0
- package/Types/StatusPage/IncidentCreatedRenotify.ts +224 -0
- package/Types/StatusPage/IncidentCreatedResend.ts +108 -0
- package/Types/StatusPage/IncidentScopeAddedPagesNotification.ts +343 -0
- package/Types/StatusPage/IncidentSubscriberAudience.ts +332 -0
- package/Types/StatusPage/StatusPageSubscriberUnsubscribe.ts +405 -0
- package/Types/StatusPage/SubscriberNotificationInterruption.ts +32 -0
- package/Types/StatusPage/SubscriberNotificationPreview.ts +322 -0
- package/Types/StatusPage/SubscriberNotificationResend.ts +132 -0
- package/Types/StatusPage/SubscriberNotificationTemplateCompiler.ts +180 -0
- package/Types/StatusPage/SubscriberNotificationTemplatePreview.ts +301 -0
- package/Types/StatusPage/SubscriberNotificationTemplateVariables.ts +217 -4
- package/Types/StatusPage/SubscriberUpdateNotification.ts +32 -11
- package/UI/Components/CustomFields/CustomFieldFormFields.ts +317 -0
- package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +395 -0
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +95 -55
- package/UI/Components/Forms/ModelForm.tsx +70 -8
- package/UI/Components/Forms/Validation.ts +1 -1
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +2 -4
- package/UI/Components/ModelTable/AnalyticsModelTable.tsx +2 -6
- package/UI/Components/ModelTable/BaseModelTable.tsx +9 -8
- package/UI/Components/ModelTable/CustomFieldColumns.tsx +14 -1
- package/UI/Components/ModelTable/ModelTable.tsx +6 -7
- package/UI/Utils/SensitiveUrlToken.ts +10 -5
- package/Utils/API.ts +247 -2
- package/Utils/Incident/IncidentNoteTemplateVariables.ts +304 -0
- package/Utils/Markdown/MarkdownEscape.ts +65 -0
- package/Utils/ProbeNetworkFailureUtil.ts +673 -0
- package/build/dist/Models/DatabaseModels/Incident.js +267 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js +207 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +31 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +124 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +56 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +131 -0
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +100 -1
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +417 -176
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageSubscriberAPI.js +52 -13
- package/build/dist/Server/API/StatusPageSubscriberAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.js +57 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.js +89 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +3 -0
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +89 -3
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Middleware/SubscriberNotificationPreviewRateLimit.js +149 -0
- package/build/dist/Server/Middleware/SubscriberNotificationPreviewRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/SubscriberNotificationTestSendRateLimit.js +190 -0
- package/build/dist/Server/Middleware/SubscriberNotificationTestSendRateLimit.js.map +1 -0
- package/build/dist/Server/Services/DatabaseService.js +56 -7
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +204 -8
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +24 -0
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +14 -0
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +26 -0
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +26 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +1052 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +12 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +83 -0
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +26 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +47 -17
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/SmsService.js +2 -22
- package/build/dist/Server/Services/SmsService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +47 -9
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +237 -32
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js +109 -0
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +925 -99
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +110 -6
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Email.js +55 -6
- package/build/dist/Server/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Server/Utils/CustomField/CustomFieldRename.js +211 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldRename.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +41 -12
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/Mail/PinnedSmtpSocket.js +101 -0
- package/build/dist/Server/Utils/Mail/PinnedSmtpSocket.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +9 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +48 -6
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/StatusPage/IncidentStatusPageScope.js +631 -0
- package/build/dist/Server/Utils/StatusPage/IncidentStatusPageScope.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js +403 -0
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js +451 -0
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageExclusion.js +13 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageExclusion.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageReadAccess.js +91 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageReadAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.js +101 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.js +47 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js +273 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationClaim.js +73 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationClaim.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.js +722 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationFanOut.js +102 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationFanOut.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js +527 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationResendAccess.js +278 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationResendAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationRunLimit.js +137 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationRunLimit.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationTiming.js +103 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationTiming.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js +114 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageResource.js +39 -7
- package/build/dist/Server/Utils/StatusPageResource.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +1 -0
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js +3 -0
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldOrder.js +36 -0
- package/build/dist/Types/CustomField/CustomFieldOrder.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldSavedViews.js +135 -0
- package/build/dist/Types/CustomField/CustomFieldSavedViews.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldTemplateMerge.js +27 -0
- package/build/dist/Types/CustomField/CustomFieldTemplateMerge.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldType.js +12 -0
- package/build/dist/Types/CustomField/CustomFieldType.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js +126 -0
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js +280 -0
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js +150 -0
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js.map +1 -0
- package/build/dist/Types/SafeHtml.js +84 -0
- package/build/dist/Types/SafeHtml.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentCreatedRenotify.js +117 -0
- package/build/dist/Types/StatusPage/IncidentCreatedRenotify.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentCreatedResend.js +86 -0
- package/build/dist/Types/StatusPage/IncidentCreatedResend.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentScopeAddedPagesNotification.js +246 -0
- package/build/dist/Types/StatusPage/IncidentScopeAddedPagesNotification.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js +183 -0
- package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js.map +1 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberUnsubscribe.js +277 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberUnsubscribe.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationInterruption.js +27 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationInterruption.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationPreview.js +190 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationPreview.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationResend.js +102 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationResend.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateCompiler.js +97 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateCompiler.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js +175 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js +144 -4
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js.map +1 -1
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js +29 -9
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldFormFields.js +169 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldFormFields.js.map +1 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +212 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +64 -49
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +39 -5
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +1 -1
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/AnalyticsModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +2 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +13 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +10 -5
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -1
- package/build/dist/Utils/API.js +177 -1
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js +155 -0
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js.map +1 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js +48 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js.map +1 -1
- package/build/dist/Utils/ProbeNetworkFailureUtil.js +460 -0
- package/build/dist/Utils/ProbeNetworkFailureUtil.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { translateValidationMessage } from "../Forms/Validation";
|
|
2
|
+
import Color from "../../../Types/Color";
|
|
3
|
+
import { parseCustomFieldDropdownOptions, } from "../../../Types/CustomField/CustomFieldDropdownOption";
|
|
4
|
+
import CustomFieldType from "../../../Types/CustomField/CustomFieldType";
|
|
5
|
+
import { customFieldValueToText } from "../../../Types/CustomField/CustomFieldValueFormat";
|
|
6
|
+
/**
|
|
7
|
+
* Read a definition row (a model instance or its JSON) into the shape the
|
|
8
|
+
* builder takes. Null for a row with no name, which no value can be stored
|
|
9
|
+
* under.
|
|
10
|
+
*/
|
|
11
|
+
export const toCustomFieldFormDefinition = (item) => {
|
|
12
|
+
if (!item || typeof item !== "object") {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const row = item;
|
|
16
|
+
const name = row["name"];
|
|
17
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const sortOrder = row["sortOrder"];
|
|
21
|
+
return {
|
|
22
|
+
name: name,
|
|
23
|
+
description: typeof row["description"] === "string"
|
|
24
|
+
? row["description"]
|
|
25
|
+
: undefined,
|
|
26
|
+
customFieldType: typeof row["customFieldType"] === "string"
|
|
27
|
+
? row["customFieldType"]
|
|
28
|
+
: undefined,
|
|
29
|
+
dropdownOptions: typeof row["dropdownOptions"] === "string"
|
|
30
|
+
? row["dropdownOptions"]
|
|
31
|
+
: undefined,
|
|
32
|
+
sortOrder: typeof sortOrder === "number" && Number.isFinite(sortOrder)
|
|
33
|
+
? sortOrder
|
|
34
|
+
: null,
|
|
35
|
+
showOnCreate: row["showOnCreate"] === true,
|
|
36
|
+
isRequiredOnCreate: row["isRequiredOnCreate"] === true,
|
|
37
|
+
mapFromResourceType: typeof row["mapFromResourceType"] === "string" &&
|
|
38
|
+
row["mapFromResourceType"]
|
|
39
|
+
? row["mapFromResourceType"]
|
|
40
|
+
: undefined,
|
|
41
|
+
mapFromCustomFieldName: typeof row["mapFromCustomFieldName"] === "string" &&
|
|
42
|
+
row["mapFromCustomFieldName"]
|
|
43
|
+
? row["mapFromCustomFieldName"]
|
|
44
|
+
: undefined,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
/*
|
|
48
|
+
* The order fields are shown in lives with the types, so the server orders
|
|
49
|
+
* the fields in subscriber messages the same way; it is re-exported here for
|
|
50
|
+
* the forms and the Custom Fields card.
|
|
51
|
+
*/
|
|
52
|
+
export { sortCustomFieldDefinitions } from "../../../Types/CustomField/CustomFieldOrder";
|
|
53
|
+
/** A dropdown field's options, with their colors, as the form lists them. */
|
|
54
|
+
export const getCustomFieldDropdownOptions = (serializedOptions) => {
|
|
55
|
+
return parseCustomFieldDropdownOptions(serializedOptions).map((option) => {
|
|
56
|
+
const dropdownOption = {
|
|
57
|
+
label: option.value,
|
|
58
|
+
value: option.value,
|
|
59
|
+
};
|
|
60
|
+
if (option.color) {
|
|
61
|
+
dropdownOption.color = Color.fromString(option.color);
|
|
62
|
+
}
|
|
63
|
+
return dropdownOption;
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
/*
|
|
67
|
+
* The types whose value is text. A value of theirs can still be a number or
|
|
68
|
+
* a yes/no: the value check accepts those for them, and a field switched
|
|
69
|
+
* from Number or Yes/No to one of them keeps the values it had.
|
|
70
|
+
*/
|
|
71
|
+
const TEXT_CUSTOM_FIELD_TYPES = [
|
|
72
|
+
CustomFieldType.Text,
|
|
73
|
+
CustomFieldType.LongText,
|
|
74
|
+
CustomFieldType.Markdown,
|
|
75
|
+
];
|
|
76
|
+
/**
|
|
77
|
+
* A stored value as Detail is handed it, on the Custom Fields card and a
|
|
78
|
+
* form's review step: a text field's value as the text it reads as
|
|
79
|
+
* (customFieldValueToText, as its subscriber messages read it), anything
|
|
80
|
+
* else as stored. Detail cannot draw a text field's number or yes/no: its
|
|
81
|
+
* Markdown viewer renders nothing for a value that is not a string, and
|
|
82
|
+
* React renders nothing for a boolean, so a Rich text field holding 5 or
|
|
83
|
+
* true looked empty.
|
|
84
|
+
*/
|
|
85
|
+
export const getCustomFieldDisplayValue = (data) => {
|
|
86
|
+
if (data.value === null ||
|
|
87
|
+
data.value === undefined ||
|
|
88
|
+
typeof data.value === "string" ||
|
|
89
|
+
!data.customFieldType ||
|
|
90
|
+
!TEXT_CUSTOM_FIELD_TYPES.includes(data.customFieldType)) {
|
|
91
|
+
return data.value;
|
|
92
|
+
}
|
|
93
|
+
return customFieldValueToText(data.value);
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* The class Detail gives a field's value: a Long text value keeps its line
|
|
97
|
+
* breaks, as the type promises (CustomFieldType) and as its email shows it.
|
|
98
|
+
* Detail has no Long text rendering of its own and would run the lines
|
|
99
|
+
* together.
|
|
100
|
+
*/
|
|
101
|
+
export const getCustomFieldDetailContentClassName = (customFieldType) => {
|
|
102
|
+
return customFieldType === CustomFieldType.LongText
|
|
103
|
+
? "whitespace-pre-wrap"
|
|
104
|
+
: undefined;
|
|
105
|
+
};
|
|
106
|
+
/*
|
|
107
|
+
* What a review step shows for a field left empty. The English text is its
|
|
108
|
+
* key in the locale files, and the Custom Fields card shows the same.
|
|
109
|
+
*/
|
|
110
|
+
export const CUSTOM_FIELD_NO_VALUE_PLACEHOLDER = "No data entered";
|
|
111
|
+
/*
|
|
112
|
+
* The error for a required yes/no field left unticked. The English template
|
|
113
|
+
* is also its key in the locale files, like the form's other validation
|
|
114
|
+
* messages.
|
|
115
|
+
*/
|
|
116
|
+
export const CUSTOM_FIELD_MUST_BE_CHECKED_MESSAGE = "{{field}} must be checked.";
|
|
117
|
+
const isDropdownType = (customFieldType) => {
|
|
118
|
+
return (customFieldType === CustomFieldType.Dropdown ||
|
|
119
|
+
customFieldType === CustomFieldType.MultiSelectDropdown);
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* One form field per definition, in the order given (sort the definitions
|
|
123
|
+
* with sortCustomFieldDefinitions first).
|
|
124
|
+
*/
|
|
125
|
+
export const buildCustomFieldFormFields = (data) => {
|
|
126
|
+
return data.definitions.map((definition) => {
|
|
127
|
+
const isRequired = Boolean(data.enforceRequiredOnCreate && definition.isRequiredOnCreate);
|
|
128
|
+
const formKey = data.getFormKey
|
|
129
|
+
? data.getFormKey(definition.name)
|
|
130
|
+
: definition.name;
|
|
131
|
+
const field = {
|
|
132
|
+
field: {
|
|
133
|
+
[definition.name]: true,
|
|
134
|
+
},
|
|
135
|
+
title: definition.name,
|
|
136
|
+
fieldType: definition.customFieldType,
|
|
137
|
+
required: isRequired,
|
|
138
|
+
placeholder: "",
|
|
139
|
+
dropdownOptions: isDropdownType(definition.customFieldType)
|
|
140
|
+
? getCustomFieldDropdownOptions(definition.dropdownOptions)
|
|
141
|
+
: undefined,
|
|
142
|
+
};
|
|
143
|
+
if (formKey !== definition.name) {
|
|
144
|
+
field.overrideFieldKey = formKey;
|
|
145
|
+
}
|
|
146
|
+
if (definition.description) {
|
|
147
|
+
field.description = definition.description;
|
|
148
|
+
}
|
|
149
|
+
if (data.stepId) {
|
|
150
|
+
field.stepId = data.stepId;
|
|
151
|
+
}
|
|
152
|
+
/*
|
|
153
|
+
* A required yes/no field means "must be ticked" - an acknowledgement.
|
|
154
|
+
* `required` alone cannot say that: the form turns an unticked box into
|
|
155
|
+
* the string "false" before its required check, which then passes.
|
|
156
|
+
*/
|
|
157
|
+
if (isRequired &&
|
|
158
|
+
definition.customFieldType === CustomFieldType.Boolean) {
|
|
159
|
+
const name = definition.name;
|
|
160
|
+
field.customValidation = (values) => {
|
|
161
|
+
return values[formKey] === true
|
|
162
|
+
? null
|
|
163
|
+
: translateValidationMessage(CUSTOM_FIELD_MUST_BE_CHECKED_MESSAGE, { field: name });
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return field;
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=CustomFieldFormFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomFieldFormFields.js","sourceRoot":"","sources":["../../../../../UI/Components/CustomFields/CustomFieldFormFields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import Detail from "../Detail/Detail";
|
|
2
|
+
import FieldType from "../Types/FieldType";
|
|
3
|
+
import { buildCustomFieldFormFields, CUSTOM_FIELD_NO_VALUE_PLACEHOLDER, getCustomFieldDetailContentClassName, getCustomFieldDisplayValue, getCustomFieldDropdownOptions, } from "./CustomFieldFormFields";
|
|
4
|
+
export { CUSTOM_FIELD_NO_VALUE_PLACEHOLDER } from "./CustomFieldFormFields";
|
|
5
|
+
import { getCustomFieldMappingSource, hasCustomFieldMappingSource, } from "../../../Types/CustomField/CustomFieldMappingCatalog";
|
|
6
|
+
import CustomFieldType from "../../../Types/CustomField/CustomFieldType";
|
|
7
|
+
import { isCustomFieldValueEmpty } from "../../../Types/CustomField/CustomFieldValueMapping";
|
|
8
|
+
import React from "react";
|
|
9
|
+
/*
|
|
10
|
+
* Custom field inputs inside a record's OWN create form, next to its columns:
|
|
11
|
+
* the Details step of declaring an incident, and the Custom Fields step of a
|
|
12
|
+
* new incident template. (The Custom Fields card of a record that exists
|
|
13
|
+
* edits the values on their own, through CustomFieldsDetail.)
|
|
14
|
+
*
|
|
15
|
+
* A ModelForm only knows its model's columns, and the values live in one of
|
|
16
|
+
* them, `customFields`, a JSON bag keyed by each field's name. So each input
|
|
17
|
+
* here:
|
|
18
|
+
*
|
|
19
|
+
* - is held under its own form key, "customFields:<name>", never under the
|
|
20
|
+
* field's bare name: a field called "title" must not become the title
|
|
21
|
+
* input's value;
|
|
22
|
+
* - is permission-checked against the model's `customFields` column
|
|
23
|
+
* (overrideField), so nobody is shown inputs they may not fill in;
|
|
24
|
+
* - is packed back into `customFields` by the page's onBeforeCreate, from
|
|
25
|
+
* the values the form submitted (packCustomFieldFormValues). Never from
|
|
26
|
+
* the request's misc data, which keeps only truthy values - a Number of 0
|
|
27
|
+
* and a switch left off would be dropped there.
|
|
28
|
+
*/
|
|
29
|
+
export const CUSTOM_FIELD_FORM_KEY_PREFIX = "customFields:";
|
|
30
|
+
// Where the form holds one field's value.
|
|
31
|
+
export const getCustomFieldFormKey = (fieldName) => {
|
|
32
|
+
return `${CUSTOM_FIELD_FORM_KEY_PREFIX}${fieldName}`;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Whether a field's value will be copied from a related resource rather than
|
|
36
|
+
* typed: it is mapped (an incident field from a monitor field) and the record
|
|
37
|
+
* is attached to something to copy from (the incident has a monitor). The
|
|
38
|
+
* server re-applies the mapping on create, so asking for such a value would
|
|
39
|
+
* only have it replaced. The same rule the Custom Fields card uses.
|
|
40
|
+
*/
|
|
41
|
+
export const isCustomFieldInherited = (data) => {
|
|
42
|
+
if (!data.definition.mapFromResourceType ||
|
|
43
|
+
!data.definition.mapFromCustomFieldName) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const source = getCustomFieldMappingSource({
|
|
47
|
+
definitionTableName: data.definitionTableName,
|
|
48
|
+
resource: data.definition.mapFromResourceType,
|
|
49
|
+
});
|
|
50
|
+
if (!source) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return hasCustomFieldMappingSource({
|
|
54
|
+
source: source,
|
|
55
|
+
record: data.values,
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
/*
|
|
59
|
+
* One field's value on a form's review step, drawn the way the Custom Fields
|
|
60
|
+
* card draws it: Yes or No, the option's label, the date in the viewer's
|
|
61
|
+
* time, a text field's number or yes/no as text, a Long text value's lines.
|
|
62
|
+
*/
|
|
63
|
+
export const CustomFieldValueSummary = (props) => {
|
|
64
|
+
const type = props.definition.customFieldType;
|
|
65
|
+
const isDropdown = type === CustomFieldType.Dropdown ||
|
|
66
|
+
type === CustomFieldType.MultiSelectDropdown;
|
|
67
|
+
return (React.createElement(Detail, { item: {
|
|
68
|
+
value: isCustomFieldValueEmpty(props.value)
|
|
69
|
+
? null
|
|
70
|
+
: getCustomFieldDisplayValue({
|
|
71
|
+
customFieldType: type,
|
|
72
|
+
value: props.value,
|
|
73
|
+
}),
|
|
74
|
+
}, fields: [
|
|
75
|
+
{
|
|
76
|
+
key: "value",
|
|
77
|
+
// CustomFieldType names a FieldType by value (see CustomFieldType).
|
|
78
|
+
fieldType: type || FieldType.Text,
|
|
79
|
+
contentClassName: getCustomFieldDetailContentClassName(type),
|
|
80
|
+
placeholder: CUSTOM_FIELD_NO_VALUE_PLACEHOLDER,
|
|
81
|
+
dropdownOptions: isDropdown
|
|
82
|
+
? getCustomFieldDropdownOptions(props.definition.dropdownOptions)
|
|
83
|
+
: undefined,
|
|
84
|
+
},
|
|
85
|
+
] }));
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* One ModelForm input per definition, in the order given, built by the same
|
|
89
|
+
* builder as every other custom field form (buildCustomFieldFormFields).
|
|
90
|
+
*/
|
|
91
|
+
export const buildCustomFieldModelFormFields = (data) => {
|
|
92
|
+
const fields = buildCustomFieldFormFields({
|
|
93
|
+
definitions: data.definitions,
|
|
94
|
+
enforceRequiredOnCreate: data.enforceRequiredOnCreate,
|
|
95
|
+
stepId: data.stepId,
|
|
96
|
+
getFormKey: getCustomFieldFormKey,
|
|
97
|
+
});
|
|
98
|
+
return fields.map((builtField, index) => {
|
|
99
|
+
const definition = data.definitions[index];
|
|
100
|
+
const formKey = getCustomFieldFormKey(definition.name);
|
|
101
|
+
/*
|
|
102
|
+
* The builder names the field after its name (`field`). Here the
|
|
103
|
+
* value is not a column, so that goes: the permission check and the
|
|
104
|
+
* dedupe read `overrideField` and the form key instead.
|
|
105
|
+
*/
|
|
106
|
+
const rest = Object.assign({}, builtField);
|
|
107
|
+
delete rest.field;
|
|
108
|
+
const modelField = Object.assign(Object.assign({}, rest), { overrideField: {
|
|
109
|
+
customFields: true,
|
|
110
|
+
}, overrideFieldKey: formKey, getSummaryElement: (values) => {
|
|
111
|
+
return (React.createElement(CustomFieldValueSummary, { definition: definition, value: values[formKey] }));
|
|
112
|
+
} });
|
|
113
|
+
if (data.isShown) {
|
|
114
|
+
const isShown = data.isShown;
|
|
115
|
+
modelField.showIf = (values) => {
|
|
116
|
+
return isShown(definition, (values || {}));
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return modelField;
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* The form's starting values for these fields, taken from a bag keyed by
|
|
124
|
+
* field name (an incident template's values), under their form keys.
|
|
125
|
+
*/
|
|
126
|
+
export const getCustomFieldFormInitialValues = (data) => {
|
|
127
|
+
const initialValues = {};
|
|
128
|
+
if (!isPlainObject(data.customFields)) {
|
|
129
|
+
return initialValues;
|
|
130
|
+
}
|
|
131
|
+
const bag = data.customFields;
|
|
132
|
+
for (const definition of data.definitions) {
|
|
133
|
+
if (!Object.prototype.hasOwnProperty.call(bag, definition.name)) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const value = bag[definition.name];
|
|
137
|
+
if (isCustomFieldValueEmpty(value)) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// A text field's number or yes/no as text: its input takes a string.
|
|
141
|
+
initialValues[getCustomFieldFormKey(definition.name)] =
|
|
142
|
+
getCustomFieldDisplayValue({
|
|
143
|
+
customFieldType: definition.customFieldType,
|
|
144
|
+
value: value,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return initialValues;
|
|
148
|
+
};
|
|
149
|
+
const isPlainObject = (value) => {
|
|
150
|
+
return (value !== null &&
|
|
151
|
+
typeof value === "object" &&
|
|
152
|
+
!Array.isArray(value) &&
|
|
153
|
+
!(value instanceof Date));
|
|
154
|
+
};
|
|
155
|
+
/*
|
|
156
|
+
* A dropdown can still hold the option object it was picked as ({label,
|
|
157
|
+
* value}) rather than its value; the value is what is stored.
|
|
158
|
+
*/
|
|
159
|
+
const normalizeFormValue = (value) => {
|
|
160
|
+
const unwrap = (entry) => {
|
|
161
|
+
if (isPlainObject(entry) &&
|
|
162
|
+
Object.prototype.hasOwnProperty.call(entry, "value") &&
|
|
163
|
+
Object.prototype.hasOwnProperty.call(entry, "label")) {
|
|
164
|
+
return entry["value"];
|
|
165
|
+
}
|
|
166
|
+
return entry;
|
|
167
|
+
};
|
|
168
|
+
if (Array.isArray(value)) {
|
|
169
|
+
return value.map(unwrap);
|
|
170
|
+
}
|
|
171
|
+
return unwrap(value);
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* The record's `customFields` bag: the starting values, with each field the
|
|
175
|
+
* form asked for set to what it holds. 0 and false are answers and are kept;
|
|
176
|
+
* a field emptied on the form is removed, so clearing a value a template
|
|
177
|
+
* filled in sticks. Undefined when there is nothing to store.
|
|
178
|
+
*/
|
|
179
|
+
export const packCustomFieldFormValues = (data) => {
|
|
180
|
+
const formValues = data.formValues || {};
|
|
181
|
+
const result = isPlainObject(data.startingCustomFields)
|
|
182
|
+
? Object.assign({}, data.startingCustomFields) : {};
|
|
183
|
+
for (const definition of data.definitions) {
|
|
184
|
+
if (data.isShown && !data.isShown(definition, formValues)) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const formKey = getCustomFieldFormKey(definition.name);
|
|
188
|
+
// The form never held a value for it, so it has nothing to say.
|
|
189
|
+
if (!Object.prototype.hasOwnProperty.call(formValues, formKey)) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const value = normalizeFormValue(formValues[formKey]);
|
|
193
|
+
if (isCustomFieldValueEmpty(value)) {
|
|
194
|
+
delete result[definition.name];
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
result[definition.name] = value;
|
|
198
|
+
}
|
|
199
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* Takes the inputs' values out of a request's misc data, where ModelForm puts
|
|
203
|
+
* every form-only value: they travel in `customFields`, and nowhere else.
|
|
204
|
+
*/
|
|
205
|
+
export const removeCustomFieldFormKeys = (miscDataProps) => {
|
|
206
|
+
for (const key of Object.keys(miscDataProps)) {
|
|
207
|
+
if (key.startsWith(CUSTOM_FIELD_FORM_KEY_PREFIX)) {
|
|
208
|
+
delete miscDataProps[key];
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=CustomFieldModelFormFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomFieldModelFormFields.js","sourceRoot":"","sources":["../../../../../UI/Components/CustomFields/CustomFieldModelFormFields.tsx"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AAItC,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,0BAA0B,EAC1B,iCAAiC,EAEjC,oCAAoC,EACpC,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAE5E,OAAO,EAEL,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,sDAAsD,CAAC;AAC9D,OAAO,eAAe,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAE7F,OAAO,KAA0C,MAAM,OAAO,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAW,eAAe,CAAC;AAIpE,0CAA0C;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAkC,CAClE,SAAiB,EACT,EAAE;IACV,OAAO,GAAG,4BAA4B,GAAG,SAAS,EAAE,CAAC;AACvD,CAAC,CAAC;AAUF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAmC,CAAC,IAItE,EAAW,EAAE;IACZ,IACE,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB;QACpC,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,EACvC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GACV,2BAA2B,CAAC;QAC1B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB;KAC9C,CAAC,CAAC;IAEL,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,2BAA2B,CAAC;QACjC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,IAAI,CAAC,MAAiC;KAC/C,CAAC,CAAC;AACL,CAAC,CAAC;AAOF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAEhC,CAAC,KAAmC,EAAgB,EAAE;IACxD,MAAM,IAAI,GAAgC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;IAC3E,MAAM,UAAU,GACd,IAAI,KAAK,eAAe,CAAC,QAAQ;QACjC,IAAI,KAAK,eAAe,CAAC,mBAAmB,CAAC;IAE/C,OAAO,CACL,oBAAC,MAAM,IACL,IAAI,EAAE;YACJ,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC;gBACzC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAE,0BAA0B,CAAC;oBAC1B,eAAe,EAAE,IAAI;oBACrB,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAyB;SAC/B,EACD,MAAM,EAAE;YACN;gBACE,GAAG,EAAE,OAAO;gBACZ,oEAAoE;gBACpE,SAAS,EAAG,IAA6B,IAAI,SAAS,CAAC,IAAI;gBAC3D,gBAAgB,EAAE,oCAAoC,CAAC,IAAI,CAAC;gBAC5D,WAAW,EAAE,iCAAiC;gBAC9C,eAAe,EAAE,UAAU;oBACzB,CAAC,CAAC,6BAA6B,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;oBACjE,CAAC,CAAC,SAAS;aACd;SACF,GACD,CACH,CAAC;AACJ,CAAC,CAAC;AAmBF;;;GAGG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAC1C,CAA+B,IAO9B,EAAiC,EAAE;IAClC,MAAM,MAAM,GAA6B,0BAA0B,CAAC;QAClE,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;QACrD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,qBAAqB;KAClC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,GAAG,CACf,CACE,UAA6B,EAC7B,KAAa,EACW,EAAE;QAC1B,MAAM,UAAU,GAA8B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAE,CAAC;QACvE,MAAM,OAAO,GAAW,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE/D;;;;WAIG;QACH,MAAM,IAAI,qBAA2B,UAAU,CAAE,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC;QAElB,MAAM,UAAU,mCACV,IAA0C,KAC9C,aAAa,EAAE;gBACb,YAAY,EAAE,IAAI;aACnB,EACD,gBAAgB,EAAE,OAAO,EACzB,iBAAiB,EAAE,CAAC,MAA8B,EAAgB,EAAE;gBAClE,OAAO,CACL,oBAAC,uBAAuB,IACtB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAG,MAAqB,CAAC,OAAO,CAAC,GACtC,CACH,CAAC;YACJ,CAAC,GACF,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,OAAO,GAGE,IAAI,CAAC,OAAO,CAAC;YAE5B,UAAU,CAAC,MAAM,GAAG,CAAC,MAA8B,EAAW,EAAE;gBAC9D,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,IAAI,EAAE,CAAe,CAAC,CAAC;YAC3D,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAQJ;;;GAGG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAC1C,CAAC,IAGA,EAAc,EAAE;IACf,MAAM,aAAa,GAAe,EAAE,CAAC;IAErC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,GAAG,GAAe,IAAI,CAAC,YAAY,CAAC;IAE1C,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAY,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,SAAS;QACX,CAAC;QAED,qEAAqE;QACrE,aAAa,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACnD,0BAA0B,CAAC;gBACzB,eAAe,EAAE,UAAU,CAAC,eAAe;gBAC3C,KAAK,EAAE,KAAK;aACb,CAAwB,CAAC;IAC9B,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAIJ,MAAM,aAAa,GAA0B,CAC3C,KAAc,EACO,EAAE;IACvB,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,CACzB,CAAC;AACJ,CAAC,CAAC;AAIF;;;GAGG;AACH,MAAM,kBAAkB,GAA+B,CACrD,KAAc,EACL,EAAE;IACX,MAAM,MAAM,GAAgC,CAAC,KAAc,EAAW,EAAE;QACtE,IACE,aAAa,CAAC,KAAK,CAAC;YACpB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;YACpD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EACpD,CAAC;YACD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAkBF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GACpC,CAAC,IAOA,EAA0B,EAAE;IAC3B,MAAM,UAAU,GAAe,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IAErD,MAAM,MAAM,GAAe,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACjE,CAAC,mBAAM,IAAI,CAAC,oBAAoB,EAChC,CAAC,CAAC,EAAE,CAAC;IAEP,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;YAC1D,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAW,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE/D,gEAAgE;QAChE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YAC/D,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAY,kBAAkB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAE/D,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAA4B,CAAC;IACzD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC,CAAC;AAMJ;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAsC,CAC1E,aAAyB,EACnB,EAAE;IACR,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7C,IAAI,GAAG,CAAC,UAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC;YACjD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -7,26 +7,14 @@ import ComponentLoader from "../ComponentLoader/ComponentLoader";
|
|
|
7
7
|
import Detail from "../Detail/Detail";
|
|
8
8
|
import ErrorMessage from "../ErrorMessage/ErrorMessage";
|
|
9
9
|
import BasicFormModal from "../FormModal/BasicFormModal";
|
|
10
|
+
import { buildCustomFieldFormFields, getCustomFieldDetailContentClassName, getCustomFieldDisplayValue, getCustomFieldDropdownOptions, sortCustomFieldDefinitions, toCustomFieldFormDefinition, } from "./CustomFieldFormFields";
|
|
11
|
+
import SortOrder from "../../../Types/BaseDatabase/SortOrder";
|
|
10
12
|
import CustomFieldType from "../../../Types/CustomField/CustomFieldType";
|
|
11
|
-
import { parseCustomFieldDropdownOptions, } from "../../../Types/CustomField/CustomFieldDropdownOption";
|
|
12
13
|
import { getCustomFieldMappingRelationSelect, getCustomFieldMappingSources, hasCustomFieldMappingSource, } from "../../../Types/CustomField/CustomFieldMappingCatalog";
|
|
13
|
-
import Color from "../../../Types/Color";
|
|
14
14
|
import { LIMIT_PER_PROJECT } from "../../../Types/Database/LimitMax";
|
|
15
15
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
16
16
|
import React, { useState } from "react";
|
|
17
17
|
import useAsyncEffect from "use-async-effect";
|
|
18
|
-
const parseDropdownOptions = (value) => {
|
|
19
|
-
return parseCustomFieldDropdownOptions(value).map((option) => {
|
|
20
|
-
const dropdownOption = {
|
|
21
|
-
label: option.value,
|
|
22
|
-
value: option.value,
|
|
23
|
-
};
|
|
24
|
-
if (option.color) {
|
|
25
|
-
dropdownOption.color = Color.fromString(option.color);
|
|
26
|
-
}
|
|
27
|
-
return dropdownOption;
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
18
|
const CustomFieldsDetail = (props) => {
|
|
31
19
|
const [schemaList, setSchemaList] = useState([]);
|
|
32
20
|
/*
|
|
@@ -49,6 +37,13 @@ const CustomFieldsDetail = (props) => {
|
|
|
49
37
|
* it did before mapping existed.
|
|
50
38
|
*/
|
|
51
39
|
const mappingSources = getCustomFieldMappingSources(new props.customFieldType().tableName);
|
|
40
|
+
/*
|
|
41
|
+
* Only incident fields have an order today. The column is asked for only
|
|
42
|
+
* where the definition model has it: this card issues one select for
|
|
43
|
+
* whichever definition model it is handed, and a column missing from the
|
|
44
|
+
* model would fail that read for every other resource.
|
|
45
|
+
*/
|
|
46
|
+
const hasSortOrder = new props.customFieldType().hasColumn("sortOrder");
|
|
52
47
|
const isMappedAndInherited = (schemaItem) => {
|
|
53
48
|
const resource = schemaItem
|
|
54
49
|
.mapFromResourceType;
|
|
@@ -91,15 +86,8 @@ const CustomFieldsDetail = (props) => {
|
|
|
91
86
|
},
|
|
92
87
|
limit: LIMIT_PER_PROJECT,
|
|
93
88
|
skip: 0,
|
|
94
|
-
select: {
|
|
95
|
-
|
|
96
|
-
customFieldType: true,
|
|
97
|
-
description: true,
|
|
98
|
-
dropdownOptions: true,
|
|
99
|
-
mapFromResourceType: true,
|
|
100
|
-
mapFromCustomFieldName: true,
|
|
101
|
-
},
|
|
102
|
-
sort: {},
|
|
89
|
+
select: Object.assign({ name: true, customFieldType: true, description: true, dropdownOptions: true, mapFromResourceType: true, mapFromCustomFieldName: true }, (hasSortOrder ? { sortOrder: true } : {})),
|
|
90
|
+
sort: (hasSortOrder ? { sortOrder: SortOrder.Ascending } : {}),
|
|
103
91
|
});
|
|
104
92
|
/*
|
|
105
93
|
* The relation a mapped field would inherit through is read alongside
|
|
@@ -121,7 +109,13 @@ const CustomFieldsDetail = (props) => {
|
|
|
121
109
|
id: props.modelId,
|
|
122
110
|
select: itemSelect,
|
|
123
111
|
});
|
|
124
|
-
|
|
112
|
+
/*
|
|
113
|
+
* Sorted here as well as by the query: the order has to hold for fields
|
|
114
|
+
* with no order too (last, in the order the server listed them).
|
|
115
|
+
*/
|
|
116
|
+
setSchemaList(hasSortOrder
|
|
117
|
+
? sortCustomFieldDefinitions(schemaList.data)
|
|
118
|
+
: schemaList.data);
|
|
125
119
|
setModel(item);
|
|
126
120
|
if (props.onValuesLoaded) {
|
|
127
121
|
props.onValuesLoaded((item === null || item === void 0 ? void 0 : item["customFields"]) || {});
|
|
@@ -220,6 +214,30 @@ const CustomFieldsDetail = (props) => {
|
|
|
220
214
|
: []),
|
|
221
215
|
...(props.additionalButtons || []),
|
|
222
216
|
];
|
|
217
|
+
/*
|
|
218
|
+
* The stored values as the card draws them and the edit form starts from
|
|
219
|
+
* them: a text field's number or yes/no as text
|
|
220
|
+
* (getCustomFieldDisplayValue). The Markdown viewer draws nothing for a
|
|
221
|
+
* value that is not a string, and the Rich text editor fails on one, so a
|
|
222
|
+
* field switched from Number to Rich text could be neither seen nor
|
|
223
|
+
* edited. Every other value, and every key no field has, is as stored.
|
|
224
|
+
*/
|
|
225
|
+
const getDisplayValues = () => {
|
|
226
|
+
const stored = ((model === null || model === void 0 ? void 0 : model["customFields"]) ||
|
|
227
|
+
{});
|
|
228
|
+
const displayed = Object.assign({}, stored);
|
|
229
|
+
for (const schemaItem of schemaList) {
|
|
230
|
+
const name = schemaItem.name;
|
|
231
|
+
if (typeof name === "string" &&
|
|
232
|
+
Object.prototype.hasOwnProperty.call(stored, name)) {
|
|
233
|
+
displayed[name] = getCustomFieldDisplayValue({
|
|
234
|
+
customFieldType: schemaItem.customFieldType,
|
|
235
|
+
value: stored[name],
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return displayed;
|
|
240
|
+
};
|
|
223
241
|
return (React.createElement(Card, { title: props.title, description: props.description, buttons: cardButtons, headerLayout: props.headerLayout },
|
|
224
242
|
React.createElement("div", { className: "border-t border-gray-200 px-4 py-5 sm:px-6 -m-6 -mt-2" },
|
|
225
243
|
isLoading && !loadError && React.createElement(ComponentLoader, null),
|
|
@@ -227,7 +245,7 @@ const CustomFieldsDetail = (props) => {
|
|
|
227
245
|
loadError && React.createElement(ErrorMessage, { message: loadError }),
|
|
228
246
|
saveError && React.createElement(ErrorMessage, { message: saveError }),
|
|
229
247
|
!isLoading && !loadError && schemaList.length > 0 && !model && (React.createElement(ErrorMessage, { message: "Item not found" })),
|
|
230
|
-
!isLoading && !loadError && schemaList.length > 0 && model && (React.createElement(Detail, { id: props.name, item:
|
|
248
|
+
!isLoading && !loadError && schemaList.length > 0 && model && (React.createElement(Detail, { id: props.name, item: getDisplayValues(), fields: schemaList.map((schemaItem) => {
|
|
231
249
|
const isDropdown = schemaItem.customFieldType ===
|
|
232
250
|
CustomFieldType.Dropdown ||
|
|
233
251
|
schemaItem.customFieldType ===
|
|
@@ -237,9 +255,10 @@ const CustomFieldsDetail = (props) => {
|
|
|
237
255
|
title: schemaItem.name,
|
|
238
256
|
description: getMappedDescription(schemaItem),
|
|
239
257
|
fieldType: schemaItem.customFieldType,
|
|
258
|
+
contentClassName: getCustomFieldDetailContentClassName(schemaItem.customFieldType),
|
|
240
259
|
placeholder: "No data entered",
|
|
241
260
|
dropdownOptions: isDropdown
|
|
242
|
-
?
|
|
261
|
+
? getCustomFieldDropdownOptions(schemaItem.dropdownOptions)
|
|
243
262
|
: undefined,
|
|
244
263
|
};
|
|
245
264
|
}), showDetailsInNumberOfColumns: 1 })),
|
|
@@ -248,7 +267,7 @@ const CustomFieldsDetail = (props) => {
|
|
|
248
267
|
}, onSubmit: async (data) => {
|
|
249
268
|
await onSave(data).catch();
|
|
250
269
|
}, formProps: {
|
|
251
|
-
initialValues: (
|
|
270
|
+
initialValues: getDisplayValues(),
|
|
252
271
|
/*
|
|
253
272
|
* Mapped fields are left OUT of the form rather than rendered
|
|
254
273
|
* disabled: `Field.disabled` is honoured by only three of the
|
|
@@ -259,28 +278,24 @@ const CustomFieldsDetail = (props) => {
|
|
|
259
278
|
* from the record's existing bag — and the server re-applies the
|
|
260
279
|
* mapping on update either way.
|
|
261
280
|
*/
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
dropdownOptions: isDropdown
|
|
281
|
-
? parseDropdownOptions(schemaItem.dropdownOptions)
|
|
282
|
-
: undefined,
|
|
283
|
-
};
|
|
281
|
+
/*
|
|
282
|
+
* Every field optional, "Required on create" included: that
|
|
283
|
+
* applies when an incident is declared, and fixing one field on
|
|
284
|
+
* an incident a monitor opened mid-outage must not demand all
|
|
285
|
+
* the others first.
|
|
286
|
+
*/
|
|
287
|
+
fields: buildCustomFieldFormFields({
|
|
288
|
+
definitions: schemaList
|
|
289
|
+
.filter((schemaItem) => {
|
|
290
|
+
return !isMappedAndInherited(schemaItem);
|
|
291
|
+
})
|
|
292
|
+
.map((schemaItem) => {
|
|
293
|
+
return toCustomFieldFormDefinition(schemaItem);
|
|
294
|
+
})
|
|
295
|
+
.filter((definition) => {
|
|
296
|
+
return definition !== null;
|
|
297
|
+
}),
|
|
298
|
+
enforceRequiredOnCreate: false,
|
|
284
299
|
}),
|
|
285
300
|
} })))));
|
|
286
301
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFieldsDetail.js","sourceRoot":"","sources":["../../../../../UI/Components/CustomFields/CustomFieldsDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,qBAAqB,CAAC;AACtC,OAAO,QAAwB,MAAM,+BAA+B,CAAC;AACrE,OAAO,cAAc,EAAE,EACrB,WAAW,GAEZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAA4C,MAAM,cAAc,CAAC;AACxE,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,MAAM,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomFieldsDetail.js","sourceRoot":"","sources":["../../../../../UI/Components/CustomFields/CustomFieldsDetail.tsx"],"names":[],"mappings":"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"}
|