@spotify/backstage-plugin-soundcheck 0.13.0 → 0.14.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.
Files changed (240) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/alpha/package.json +1 -1
  3. package/dist/alpha/apis.esm.js +1 -1
  4. package/dist/alpha/entity-content.esm.js +1 -1
  5. package/dist/alpha/pages.esm.js +1 -1
  6. package/dist/alpha/plugin.esm.js +1 -1
  7. package/dist/alpha/sidebar-item.esm.js +1 -1
  8. package/dist/alpha.d.ts +121 -1
  9. package/dist/api.esm.js +1 -1
  10. package/dist/components/Badges/BaseBadge.esm.js +1 -1
  11. package/dist/components/Badges/CampaignBadge.esm.js +1 -1
  12. package/dist/components/Badges/CertificationBadge.esm.js +1 -1
  13. package/dist/components/Badges/NoLevelBadge.esm.js +5 -1
  14. package/dist/components/Badges/PlaylistBadge.esm.js +1 -1
  15. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +2 -0
  16. package/dist/components/CampaignDetailsPage/CampaignChecks.esm.js +1 -1
  17. package/dist/components/CampaignDetailsPage/CampaignDetailRow.esm.js +1 -1
  18. package/dist/components/CampaignDetailsPage/CampaignDetails.esm.js +1 -1
  19. package/dist/components/CampaignDetailsPage/CampaignDetailsPage.esm.js +1 -1
  20. package/dist/components/CampaignDetailsPage/CampaignMilestones.esm.js +1 -1
  21. package/dist/components/CampaignDetailsPage/CampaignProgress.esm.js +1 -1
  22. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  23. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignDescriptionField.esm.js +1 -1
  24. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignNameField.esm.js +1 -1
  25. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
  26. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignScheduleField.esm.js +1 -1
  27. package/dist/components/CampaignForm/Steps/CampaignMilestonesStep.esm.js +1 -1
  28. package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +1 -1
  29. package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
  30. package/dist/components/CampaignsPage/CampaignEmptyState.esm.js +1 -1
  31. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
  32. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  33. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  34. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  35. package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
  36. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  37. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  38. package/dist/components/CheckCard/CheckCard.esm.js +1 -1
  39. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +2 -0
  40. package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
  41. package/dist/components/CheckDryRun/CheckDryRun.esm.js +2 -0
  42. package/dist/components/CheckDryRun/CheckDryRunContext.esm.js +2 -0
  43. package/dist/components/CheckDryRun/CheckDryRunDetails.esm.js +2 -0
  44. package/dist/components/CheckDryRun/CheckDryRunDialog.esm.js +2 -0
  45. package/dist/components/CheckDryRun/CheckDryRunDialogButton.esm.js +2 -0
  46. package/dist/components/CheckDryRun/checkDryRunUtils.esm.js +2 -0
  47. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  48. package/dist/components/CheckForm/FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js +1 -1
  49. package/dist/components/CheckForm/FormFields/CheckNameInput/CheckNameInput.esm.js +1 -1
  50. package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +2 -0
  51. package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
  52. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ConditionList.esm.js +1 -1
  53. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/FactValueDisplay.esm.js +2 -0
  54. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  55. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListContext.esm.js +2 -0
  56. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js +2 -0
  57. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/styles.esm.js +1 -1
  58. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  59. package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +1 -1
  60. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  61. package/dist/components/CheckForm/FormFields/RuleInput/useRuleInputHandlers.esm.js +1 -1
  62. package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
  63. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  64. package/dist/components/CheckForm/Steps/CheckReviewStep.esm.js +2 -0
  65. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  66. package/dist/components/CheckForm/types/ExpressionType.esm.js +1 -1
  67. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  68. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +1 -1
  69. package/dist/components/CheckForm/utils/validation.esm.js +1 -1
  70. package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
  71. package/dist/components/CheckPage/CheckDetailsView.esm.js +1 -1
  72. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  73. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +1 -1
  74. package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
  75. package/dist/components/CheckPage/CheckStatusBar.esm.js +1 -1
  76. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
  77. package/dist/components/CheckPage/FilterBar/FilterBar.esm.js +1 -1
  78. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +2 -0
  79. package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +2 -0
  80. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
  81. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  82. package/dist/components/ChecksTab/ChecksTab.esm.js +1 -1
  83. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  84. package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +2 -0
  85. package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +2 -0
  86. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +2 -0
  87. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
  88. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +2 -0
  89. package/dist/components/CollectorPage/Configurators/DataDog/utils.esm.js +2 -0
  90. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  91. package/dist/components/CollectorPage/Configurators/Github/utils.esm.js +1 -1
  92. package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js +2 -0
  93. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +2 -0
  94. package/dist/components/CollectorPage/Configurators/Jira/utils.esm.js +2 -0
  95. package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +2 -0
  96. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +2 -0
  97. package/dist/components/CollectorPage/Configurators/Kubernetes/utils.esm.js +2 -0
  98. package/dist/components/CollectorPage/Configurators/PagerDuty/IncidentsFactDetailsComponent.esm.js +2 -0
  99. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +2 -0
  100. package/dist/components/CollectorPage/Configurators/PagerDuty/StatusesComponent.esm.js +2 -0
  101. package/dist/components/CollectorPage/Configurators/PagerDuty/utils.esm.js +2 -0
  102. package/dist/components/CollectorPage/Configurators/PagerDuty/validation.esm.js +2 -0
  103. package/dist/components/CollectorPage/Configurators/SCM/ExistsFactDetailsComponent.esm.js +2 -0
  104. package/dist/components/CollectorPage/Configurators/SCM/FactCollectionConfig.esm.js +2 -0
  105. package/dist/components/CollectorPage/Configurators/SCM/FactDetailsComponent.esm.js +2 -0
  106. package/dist/components/CollectorPage/Configurators/SCM/JsonFactDetailsComponent.esm.js +2 -0
  107. package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +2 -0
  108. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +2 -0
  109. package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +2 -0
  110. package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +2 -0
  111. package/dist/components/CollectorPage/Configurators/SonarQube/MeasuresFactDetailsInput.esm.js +2 -0
  112. package/dist/components/CollectorPage/Configurators/SonarQube/MetricsInput.esm.js +2 -0
  113. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +2 -0
  114. package/dist/components/CollectorPage/Configurators/SonarQube/utils.esm.js +2 -0
  115. package/dist/components/CollectorPage/Configurators/SonarQube/validation.esm.js +2 -0
  116. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +1 -1
  117. package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +1 -1
  118. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  119. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  120. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  121. package/dist/components/ExpandableSection/ExpandableSection.esm.js +2 -0
  122. package/dist/components/FactExplorer/FactExplorer.esm.js +2 -0
  123. package/dist/components/FactExplorer/FactExplorerContext.esm.js +2 -0
  124. package/dist/components/FactExplorer/FactExplorerDialog.esm.js +2 -0
  125. package/dist/components/FactExplorer/useFactOptions.esm.js +2 -0
  126. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  127. package/dist/components/Filter/FilterPreviewTable/EntityTableToolbar.esm.js +1 -1
  128. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  129. package/dist/components/Filter/utils.esm.js +1 -1
  130. package/dist/components/FooterButtons/FooterButtons.esm.js +1 -1
  131. package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +2 -0
  132. package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +2 -0
  133. package/dist/components/FormControlledAutocomplete/useLabelOptions.esm.js +2 -0
  134. package/dist/components/FormFieldLabel/FormFieldLabel.esm.js +2 -0
  135. package/dist/components/FormStepper/FormStepper.esm.js +1 -1
  136. package/dist/components/FormattedPreview/FormattedPreview.esm.js +4 -0
  137. package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
  138. package/dist/components/GroupSelector/GroupSelector.esm.js +1 -1
  139. package/dist/components/LevelCard/LevelCard.esm.js +1 -1
  140. package/dist/components/ListboxVirtualized/ListboxVirtualized.esm.js +2 -0
  141. package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +1 -1
  142. package/dist/components/OverviewPage/CampaignBanner/CampaignArea.esm.js +2 -0
  143. package/dist/components/OverviewPage/CampaignBanner/CampaignBanner.esm.js +1 -1
  144. package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
  145. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  146. package/dist/components/OverviewPage/OverviewPageHeader.esm.js +2 -0
  147. package/dist/components/OverviewPage/index.esm.js +1 -1
  148. package/dist/components/OverviewTable/Cell/CheckCellTooltip.esm.js +1 -1
  149. package/dist/components/OverviewTable/Cell/CheckLabelCell.esm.js +2 -0
  150. package/dist/components/OverviewTable/Cell/EntityRefCell.esm.js +1 -1
  151. package/dist/components/OverviewTable/Cell/HighestLevelBadge.esm.js +1 -1
  152. package/dist/components/OverviewTable/Cell/TrackLevelHeaderCell.esm.js +1 -1
  153. package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
  154. package/dist/components/OverviewTable/OverviewTable.esm.js +1 -1
  155. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  156. package/dist/components/OverviewTable/ResultsTableHeader.esm.js +1 -1
  157. package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
  158. package/dist/components/PassRateTable/PassRateTable.esm.js +3 -1
  159. package/dist/components/QuickstartPage/HowDoIListItem.esm.js +2 -0
  160. package/dist/components/QuickstartPage/QuickStartChecksCard.esm.js +2 -0
  161. package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +2 -0
  162. package/dist/components/QuickstartPage/QuickstartCollectorConfigurationsCard.esm.js +2 -0
  163. package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -0
  164. package/dist/components/QuickstartPage/QuickstartTracksCard.esm.js +2 -0
  165. package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +7 -0
  166. package/dist/components/QuickstartPage/WelcomeModal.esm.js +2 -0
  167. package/dist/components/QuickstartPage/styles.esm.js +2 -0
  168. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  169. package/dist/components/SearchBar/SearchBar.esm.js +1 -1
  170. package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
  171. package/dist/components/SoundcheckDialog/SoundcheckDialog.esm.js +2 -0
  172. package/dist/components/SoundcheckHeader/Breadcrumbs.esm.js +2 -0
  173. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +2 -0
  174. package/dist/components/SoundcheckHeader/SoundcheckHeaderContext.esm.js +2 -0
  175. package/dist/components/SoundcheckHeader/headerUtil.esm.js +2 -0
  176. package/dist/components/SoundcheckHeader/useHeader.esm.js +2 -0
  177. package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
  178. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  179. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  180. package/dist/components/TechHealthTabs/ActionColumn.esm.js +1 -1
  181. package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
  182. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +2 -0
  183. package/dist/components/{EditTrackPage/EditTrackPage.esm.js → TrackEditPage/TrackEditPage.esm.js} +2 -2
  184. package/dist/components/TrackEditPage/TrackEditView.esm.js +2 -0
  185. package/dist/components/TrackForm/Steps/LevelsStep/ChecksSection/ChecksSection.esm.js +1 -1
  186. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDescriptionInput/TrackDescriptionInput.esm.js +1 -1
  187. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDocumentationUrlInput/TrackDocumentationUrlInput.esm.js +1 -1
  188. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackNameInput/TrackNameInput.esm.js +1 -1
  189. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
  190. package/dist/components/TrackForm/TrackForm.esm.js +1 -1
  191. package/dist/components/TrackForm/utils/trackFormUtils.esm.js +1 -1
  192. package/dist/components/TrackForm/utils/validation.esm.js +1 -1
  193. package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +1 -1
  194. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  195. package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
  196. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  197. package/dist/components/TrackPage/TrackProgressCard.esm.js +1 -1
  198. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
  199. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  200. package/dist/components/TracksTab/TracksTab.esm.js +1 -1
  201. package/dist/contexts/GenericFormContext.esm.js +1 -1
  202. package/dist/graphql/generated/index.esm.js +104 -36
  203. package/dist/hooks/catalog/useGetEntityRefs.esm.js +2 -0
  204. package/dist/hooks/certifications/useProgramOverviewForOwner.esm.js +1 -1
  205. package/dist/hooks/checks/useCheckTemplates.esm.js +2 -0
  206. package/dist/hooks/checks/useExecuteCheck.esm.js +1 -1
  207. package/dist/hooks/checks/useGetChecks.esm.js +1 -1
  208. package/dist/hooks/collectors/useGetFactSchema.esm.js +1 -1
  209. package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +1 -1
  210. package/dist/hooks/graphqlKeys.esm.js +1 -1
  211. package/dist/hooks/useGetFact.esm.js +2 -0
  212. package/dist/hooks/useGetPathResolvers.esm.js +2 -0
  213. package/dist/images/gitlab-rgb.svg +1 -0
  214. package/dist/images/gitlab-white.svg +1 -0
  215. package/dist/images/jira-rgb.svg +25 -0
  216. package/dist/images/jira-white.svg +25 -0
  217. package/dist/images/sonarqube-rgb.svg +14 -0
  218. package/dist/images/sonarqube-white.svg +14 -0
  219. package/dist/index.d.ts +5 -5
  220. package/dist/plugin.esm.js +1 -1
  221. package/dist/routes.esm.js +1 -1
  222. package/dist/utils/export.esm.js +3 -3
  223. package/dist/utils/filters.esm.js +1 -1
  224. package/dist/utils/formStyles.esm.js +1 -1
  225. package/dist/utils/validation.esm.js +1 -1
  226. package/package.json +20 -18
  227. package/dist/components/CampaignForm/CampaignFormDescription.esm.js +0 -2
  228. package/dist/components/CampaignsPage/AddCampaignView.esm.js +0 -2
  229. package/dist/components/CheckForm/CheckFormDescription.esm.js +0 -2
  230. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js +0 -2
  231. package/dist/components/ChecksPage/AddCheckView.esm.js +0 -2
  232. package/dist/components/CollectorPage/Configurators/Github/FactCollectionConfig.esm.js +0 -2
  233. package/dist/components/EditTrackPage/EditTrackView.esm.js +0 -2
  234. package/dist/components/FormControlledSelect/FormControlledSelect.esm.js +0 -2
  235. package/dist/components/FullScreenDialog/FullScreenDialog.esm.js +0 -2
  236. package/dist/components/OverviewPage/OverviewTabs.esm.js +0 -2
  237. package/dist/components/OverviewPage/OverviewTabsSkeleton.esm.js +0 -2
  238. package/dist/components/RoutingPage/Breadcrumbs.esm.js +0 -2
  239. package/dist/components/RoutingPage/utils.esm.js +0 -2
  240. package/dist/components/TracksPage/AddTrackView.esm.js +0 -2
@@ -1,2 +1,2 @@
1
- import e from"react";import{useSearchParams as t}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as i}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{RESULTS_PER_PAGE as o}from"../../utils/filters.esm.js";import{AddCampaignView as p}from"./AddCampaignView.esm.js";import{CampaignListPage as n}from"./CampaignListPage/CampaignListPage.esm.js";import"./CampaignListPage/CampaignTypes.esm.js";const g=()=>{const[m]=t(),r=m.get("campaignsPerPage"),a=r?parseInt(r,10):o;return e.createElement(i,null,e.createElement("div",null,e.createElement(n,{campaignsPerPage:a}),e.createElement(p,null)))};export{g as CampaignsPage};
1
+ import r from"react";import{useSearchParams as a}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as o}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{RESULTS_PER_PAGE as i}from"../../utils/filters.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as p}from"../SoundcheckHeader/useHeader.esm.js";import{CampaignListPage as n}from"./CampaignListPage/CampaignListPage.esm.js";import"./CampaignListPage/CampaignTypes.esm.js";const g=()=>{const[m]=a(),e=m.get("campaignsPerPage"),t=e?parseInt(e,10):i;return p(),r.createElement(o,null,r.createElement("div",null,r.createElement(n,{campaignsPerPage:t})))};export{g as CampaignsPage};
2
2
  //# sourceMappingURL=CampaignsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as l}from"@backstage/core-plugin-api";import e,{useEffect as u}from"react";import{useNavigate as d,useParams as C}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as E}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as L}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useGetCampaign as R}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as S}from"../../routes.esm.js";import{CampaignForm as y}from"../CampaignForm/CampaignForm.esm.js";import{FullScreenDialog as F}from"../FullScreenDialog/FullScreenDialog.esm.js";import{Loading as v}from"../TechHealth/Loading/Loading.esm.js";import{EmptyCampaignState as w}from"./CampaignEmptyState.esm.js";const x=()=>{const t=d(),o=l(S),{campaignId:p}=C(),{setIsLoading:m}=E(),{mutateAsync:s,isLoading:a}=L(),{data:g,isLoading:r}=R(p??""),i=g?.edges?.[0]?.node;if(u(()=>m(a),[m,a]),!r&&!i)return e.createElement(w,null);const c=async f=>{await s(f,{onSuccess:()=>t(o())})},n=()=>t(o());return e.createElement(F,{title:"Update Campaign",open:!0,handleClose:n},r?e.createElement(v,null):e.createElement(y,{onSave:c,onCancel:n,selectedCampaign:i}))};export{x as EditCampaignView};
1
+ import t,{useEffect as d}from"react";import{useParams as g}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as u}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as l}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as f}from"../../hooks/useNavigateBack.esm.js";import{useGetCampaign as C}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as E}from"../../routes.esm.js";import{CampaignForm as y}from"../CampaignForm/CampaignForm.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as L}from"../SoundcheckHeader/useHeader.esm.js";import{Loading as h}from"../TechHealth/Loading/Loading.esm.js";import{EmptyCampaignState as k}from"./CampaignEmptyState.esm.js";const F=()=>{L({title:"Update Campaign",description:"Update your campaign, including schedule, milestones, and other associated details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"});const[i,r]=f(E),{campaignId:p}=g(),{setIsLoading:e}=u(),{mutateAsync:n,isLoading:o}=l(),{data:s,isLoading:m}=C(p??""),a=s?.edges?.[0]?.node;return d(()=>e(o),[e,o]),!m&&!a?t.createElement(k,null):t.createElement(t.Fragment,null,m?t.createElement(h,null):t.createElement(y,{onSave:async c=>{await n(c,{onSuccess:r})},onCancel:i,selectedCampaign:a}))};export{F as EditCampaignView};
2
2
  //# sourceMappingURL=EditCampaignView.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useEntity as u}from"@backstage/plugin-catalog-react";import{styled as o,Accordion as f,AccordionSummary as E,AccordionDetails as b,makeStyles as y,Box as h}from"@material-ui/core";import R from"@material-ui/icons/ExpandMore";import e,{useRef as x}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as v}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as k}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as I}from"../CertificationSidebar/CertificationSummary.esm.js";import{CertificationSidebarSkeleton as L}from"../CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";import{CertificationLevel as T}from"../CertificationSidebar/CertificationLevel.esm.js";const C=o(f)(({theme:t})=>({margin:"0",border:`1px solid ${t.palette.divider}`,borderRadius:0,"&.Mui-expanded":{borderRadius:0},"&:first-child":{borderTopLeftRadius:0,borderTopRightRadius:0},"&:last-child":{borderBottomLeftRadius:0,borderBottomRightRadius:0},"&:not(:first-child)":{borderTop:`1px solid ${t.palette.divider}`},"&:not(:last-child)":{marginBottom:t.spacing(1)}})),S=o(({...t})=>e.createElement(E,{classes:{content:"content",expanded:"expanded"},...t}))(({theme:t})=>({borderRadius:0,paddingTop:0,paddingLeft:0,paddingRight:t.spacing(1),"& > .content":{margin:"0 !important",padding:"0 !important"},"& > .content.expanded":{margin:"0 !important",padding:"0 !important"}})),A=o(b)(()=>({margin:"0 !important",borderRadius:0,padding:0})),n=y(()=>({sidebar:{width:"100%"}})),B=({playlistId:t,trackId:i,checkId:d})=>{const m=n(),{entity:c}=u(),p=x(null),{data:r,isLoading:l,isError:s}=v(c,i);if(s)return e.createElement("div",null,e.createElement(h,{padding:2},e.createElement(k,{severity:"error",title:"Error loading certification"})));if(l||!i)return e.createElement(L,null);if(!r)return null;const g=r.program.type==="campaign";return e.createElement(C,{ref:p,defaultExpanded:!0,elevation:0},e.createElement(S,{expandIcon:e.createElement(R,null),"aria-controls":"certification-content",id:"certification-summary"},e.createElement(I,{name:r.program.name,badge:r.highestLevel?.badge,description:r.program.description,documentationUrl:r.program.documentationURL,trackType:r.program.type})),e.createElement(A,null,e.createElement("div",{className:m.sidebar},r?.levels.map(a=>e.createElement(T,{key:a.ordinal,level:a,checkId:d,trackId:i,playlistId:t,isCampaign:g})))))};export{B as CertificationAccordion,n as useStyles};
1
+ import{useEntity as u}from"@backstage/plugin-catalog-react";import{styled as o,Accordion as f,AccordionSummary as E,AccordionDetails as b,makeStyles as y,Box as h}from"@material-ui/core";import R from"@material-ui/icons/ExpandMore";import e,{useRef as v}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as x}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as k}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as T}from"../CertificationSidebar/CertificationSummary.esm.js";import{CertificationSidebarSkeleton as I}from"../CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";import{CertificationLevel as L}from"../CertificationSidebar/CertificationLevel.esm.js";const C=o(f)(({theme:t})=>({margin:"0",border:`1px solid ${t.palette.divider}`,borderRadius:0,"&.Mui-expanded":{borderRadius:0},"&:first-child":{borderTopLeftRadius:0,borderTopRightRadius:0},"&:last-child":{borderBottomLeftRadius:0,borderBottomRightRadius:0},"&:not(:first-child)":{borderTop:`1px solid ${t.palette.divider}`},"&:not(:last-child)":{marginBottom:t.spacing(1)}})),S=o(({...t})=>e.createElement(E,{classes:{content:"content",expanded:"expanded"},...t}))(({theme:t})=>({borderRadius:0,paddingTop:0,paddingLeft:0,paddingRight:t.spacing(1),"& > .content":{margin:"0 !important",padding:"0 !important"},"& > .content.expanded":{margin:"0 !important",padding:"0 !important"}})),A=o(b)(()=>({margin:"0 !important",borderRadius:0,padding:0})),n=y(()=>({sidebar:{width:"100%"}})),B=({playlistId:t,trackId:i,checkId:d})=>{const m=n(),{entity:c}=u(),p=v(null),{data:r,isLoading:l,isError:s}=x(c,i);if(s)return e.createElement("div",null,e.createElement(h,{padding:2},e.createElement(k,{severity:"error",title:"Error loading certification"})));if(l||!i)return e.createElement(I,null);if(!r)return null;const g=r.program.type==="campaign";return e.createElement(C,{ref:p,defaultExpanded:!0,elevation:0},e.createElement(S,{expandIcon:e.createElement(R,null),"aria-controls":"certification-content",id:"certification-summary"},e.createElement(T,{name:r.program.name,badge:r.highestLevel?.badge,description:r.program.description,documentationUrl:r.program.documentationURL,trackType:r.program.type})),e.createElement(A,null,e.createElement("div",{className:m.sidebar},r?.levels.map(a=>e.createElement(L,{key:a.ordinal,level:a,checkId:d,trackId:i,playlistId:t,isCampaign:g})))))};export{B as CertificationAccordion,n as useStyles};
2
2
  //# sourceMappingURL=CertificationAccordion.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as i,Link as l}from"@backstage/core-components";import{makeStyles as p,Typography as s}from"@material-ui/core";import e from"react";import{CertificationBadge as d}from"../Badges/CertificationBadge.esm.js";const o=p(t=>({description:{padding:0,margin:0,display:"block","& p":{margin:0}},root:{padding:t.spacing(2),margin:0,display:"grid",gridTemplateColumns:"min-content auto",gridGap:t.spacing(2)},title:{fontSize:t.typography.pxToRem(18),fontWeight:700,lineHeight:1.235,marginBottom:"6px"},level:{textTransform:"uppercase",color:t.palette.text.secondary,fontWeight:700,letterSpacing:"1px"}}));function g({description:t,documentationUrl:a}){const n=o();return a?e.createElement("div",{className:n.description},e.createElement(i,{content:t}),e.createElement(l,{to:a},"Learn more")):e.createElement("div",{className:n.description},e.createElement(i,{content:t}))}const u=({name:t,badge:a,description:n,documentationUrl:c,trackType:m="standard"})=>{const r=o();return e.createElement("div",{className:r.root},e.createElement(d,{badge:a,trackType:m,size:"large"}),e.createElement("div",null,e.createElement(s,{className:r.title},t),n&&e.createElement(g,{description:n,documentationUrl:c})))};export{u as CertificationSummary,o as useStyles};
1
+ import{MarkdownContent as i,Link as l}from"@backstage/core-components";import{makeStyles as p,Typography as s}from"@material-ui/core";import e from"react";import{CertificationBadge as d}from"../Badges/CertificationBadge.esm.js";const o=p(t=>({description:{padding:0,margin:0,display:"block","& p":{margin:0}},root:{padding:t.spacing(2),margin:0,display:"grid",gridTemplateColumns:"min-content auto",gridGap:t.spacing(2)},title:{fontSize:t.typography.pxToRem(18),fontWeight:700,lineHeight:1.235,marginBottom:"6px"},level:{textTransform:"uppercase",color:t.palette.text.secondary,fontWeight:700,letterSpacing:"1px"}}));function g({description:t,documentationUrl:r}){const n=o();return r?e.createElement("div",{className:n.description},e.createElement(i,{content:t}),e.createElement(l,{to:r},"Learn more")):e.createElement("div",{className:n.description},e.createElement(i,{content:t}))}const u=({name:t,badge:r,description:n,documentationUrl:c,trackType:m="standard"})=>{const a=o();return e.createElement("div",{className:a.root},e.createElement(d,{badge:r,trackType:m,size:"large",showTooltip:!0}),e.createElement("div",null,e.createElement(s,{className:a.title},t),n&&e.createElement(g,{description:n,documentationUrl:c})))};export{u as CertificationSummary,o as useStyles};
2
2
  //# sourceMappingURL=CertificationSummary.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as E}from"@backstage/catalog-model";import{useEntity as g}from"@backstage/plugin-catalog-react";import{makeStyles as y,Typography as k,Tooltip as C,IconButton as v,CircularProgress as b}from"@material-ui/core";import N from"@material-ui/icons/Refresh";import x from"classnames";import e from"react";import{Link as I}from"react-router-dom";import{useExecuteCheck as R}from"../../hooks/checks/useExecuteCheck.esm.js";import{CheckIcon as T}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as z}from"../RelativeTime/RelativeTime.esm.js";const n=y(t=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}}})),L=({className:t,href:r,name:a,children:o})=>r?e.createElement(I,{"aria-label":`select check ${a}`,to:r,className:t},o):e.createElement("div",{className:t},o),S=({result:t,name:r,id:a,timestamp:o,hasChecker:m=!1,selected:s=!1,href:p})=>{const u=n(),h=x(u.root,{selected:s}),{entity:i}=g(),{mutateAsync:d,isLoading:c}=R(),f=async()=>{!i||!a||await d({checkerId:a,entityRef:E(i),shouldRefreshFacts:!0}).catch(w=>{})},l=!i||!a||!m;return e.createElement(L,{href:p,className:h,name:r},e.createElement(T,{result:t}),e.createElement(k,{variant:"body2"},r),o&&!c?e.createElement(z,{timestamp:o}):null,!c&&e.createElement(C,{title:"Execute Check",disableHoverListener:l},e.createElement("span",null,e.createElement(v,{size:"small",color:"inherit",onClick:f,disabled:l},e.createElement(N,{fontSize:"small"})))),c&&e.createElement(b,{color:"inherit",size:"1em"}))};export{S as Check,n as useStyles};
1
+ import{stringifyEntityRef as p}from"@backstage/catalog-model";import{useEntity as b}from"@backstage/plugin-catalog-react";import{makeStyles as v,Typography as z,Tooltip as I,IconButton as T,CircularProgress as x}from"@material-ui/core";import N from"@material-ui/icons/Refresh";import S from"classnames";import e,{useState as F,useMemo as L}from"react";import{Link as w}from"react-router-dom";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as A}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useExecuteCheck as B}from"../../hooks/checks/useExecuteCheck.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as D}from"../CheckDryRun/CheckDryRunDialogButton.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import"../CheckDryRun/CheckDryRunContext.esm.js";import{mapCheckToCheckInput as G}from"../CheckDryRun/checkDryRunUtils.esm.js";import{CheckIcon as $}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as H}from"../RelativeTime/RelativeTime.esm.js";const d=v(t=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}}})),M=({className:t,href:a,name:r,children:m})=>a?e.createElement(w,{"aria-label":`select check ${r}`,to:a,className:t},m):e.createElement("div",{className:t},m),P=({result:t,name:a,id:r,timestamp:m,hasChecker:h=!1,selected:f=!1,href:k})=>{const g=d(),E=S(g.root,{selected:f}),{entity:i}=b(),{mutateAsync:C,isLoading:l}=B(),[o,y]=F(),{data:n}=A({ids:r?[r]:[]},!!o),s=L(()=>{const c=n?.edges?.[0]?.node;return c?G(c):null},[n?.edges]),R=async()=>{if(!i||!r)return;const c=await C({checkerId:r,entityRef:p(i),shouldRefreshFacts:!0}).catch(j=>{});c&&y(c)},u=!i||!r||!h;return e.createElement(M,{href:k,className:E,name:a},e.createElement($,{result:t}),e.createElement(z,{variant:"body2"},a),m&&!l?e.createElement(H,{timestamp:m}):null,!l&&e.createElement(e.Fragment,null,e.createElement(I,{title:"Execute Check",disableHoverListener:u},e.createElement("span",null,e.createElement(T,{size:"small",color:"inherit",onClick:R,disabled:u,"aria-label":"Execute Check"},e.createElement(N,{fontSize:"small"})))),!!o&&!!s&&e.createElement(D,{entityRef:p(i),check:s,checkResult:{checkResult:o.result,notes:o.details?.notes?.data??""},facts:o.facts,ruleResults:o.ruleResults,size:"small"})),l&&e.createElement(x,{color:"inherit",size:"1em"}))};export{P as Check,d as useStyles};
2
2
  //# sourceMappingURL=Check.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as u}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as I,Paper as h,Divider as g}from"@material-ui/core";import e from"react";import{useParams as k}from"react-router-dom";import{useAllCertifications as C}from"../../hooks/certifications/useAllCertifications.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../../hooks/playlists/usePlaylists.esm.js";import{AlertPanel as l}from"../AlertPanel/AlertPanel.esm.js";import{CertificationSidebar as b}from"../CertificationSidebar/CertificationSidebar.esm.js";import"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{isDarkTheme as w}from"../Charts/chartUtils.esm.js";import{CheckDetails as N}from"../CheckDetails/CheckDetails.esm.js";import{NoCertifications as R}from"../EmptyState/EmptyState.esm.js";import{LevelUpParty as $}from"../LevelUpParty/LevelUpParty.esm.js";import{RefetchingIndicator as x}from"../RefetchingIndicator/RefetchingIndicator.esm.js";import{CertificationTabs as D}from"./CertificationTabs.esm.js";import{PlaylistComponent as S}from"./Playlist/PlaylistComponent.esm.js";const n=I(t=>({paper:{overflow:"hidden",position:"relative",border:w(t)?`1px solid ${t.palette.divider}`:void 0},view:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{borderRight:`1px solid ${t.palette.divider}`}})),T=()=>{const{playlistId:t,trackId:r,checkId:a}=k(),m=n(),{entity:i}=v(),{isError:s,isFetched:p,data:c}=C(i),{isError:d,data:f}=P(i);if(s||d)return e.createElement(l,{severity:"error",title:"Error loading certifications"});const o=t&&f?.find(E=>E.id===t);if(t&&!o)return e.createElement(l,{severity:"error",title:"Playlist ${playlistId} not found."});if(p&&!c?.length)return e.createElement(R,null);const y=i?u(i):void 0;return e.createElement(h,{className:m.paper},e.createElement(x,null),e.createElement(D,{playlistId:t,trackId:r}),e.createElement(g,null),o&&e.createElement(S,{playlist:o,entityRef:y}),!o&&r&&e.createElement("div",{"data-testid":"soundcheck-certification-view",className:m.view},e.createElement("div",{className:m.sidebar},e.createElement(b,{trackId:r,checkId:a})),e.createElement(N,{programId:r,checkId:a}),e.createElement($,{programId:r})))};export{T as CertificationsPage,n as useStyles};
1
+ import{stringifyEntityRef as u}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as h,Paper as I,Divider as k}from"@material-ui/core";import e from"react";import{useParams as g}from"react-router-dom";import{useAllCertifications as C}from"../../hooks/certifications/useAllCertifications.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../../hooks/playlists/usePlaylists.esm.js";import{AlertPanel as l}from"../AlertPanel/AlertPanel.esm.js";import{CertificationSidebar as b}from"../CertificationSidebar/CertificationSidebar.esm.js";import"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{isDarkTheme as R}from"../Charts/chartUtils.esm.js";import{CheckDetails as w}from"../CheckDetails/CheckDetails.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import{CheckDryRunProvider as D}from"../CheckDryRun/CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";import{NoCertifications as N}from"../EmptyState/EmptyState.esm.js";import{LevelUpParty as $}from"../LevelUpParty/LevelUpParty.esm.js";import{RefetchingIndicator as x}from"../RefetchingIndicator/RefetchingIndicator.esm.js";import{CertificationTabs as S}from"./CertificationTabs.esm.js";import{PlaylistComponent as T}from"./Playlist/PlaylistComponent.esm.js";const n=h(t=>({paper:{overflow:"hidden",position:"relative",border:R(t)?`1px solid ${t.palette.divider}`:void 0},view:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{borderRight:`1px solid ${t.palette.divider}`}})),A=()=>{const{playlistId:t,trackId:r,checkId:a}=g(),m=n(),{entity:i}=v(),{isError:p,isFetched:s,data:c}=C(i),{isError:d,data:f}=P(i);if(p||d)return e.createElement(l,{severity:"error",title:"Error loading certifications"});const o=t&&f?.find(E=>E.id===t);if(t&&!o)return e.createElement(l,{severity:"error",title:"Playlist ${playlistId} not found."});if(s&&!c?.length)return e.createElement(N,null);const y=i?u(i):void 0;return e.createElement(D,null,e.createElement(I,{className:m.paper},e.createElement(x,null),e.createElement(S,{playlistId:t,trackId:r}),e.createElement(k,null),o&&e.createElement(T,{playlist:o,entityRef:y}),!o&&r&&e.createElement("div",{"data-testid":"soundcheck-certification-view",className:m.view},e.createElement("div",{className:m.sidebar},e.createElement(b,{trackId:r,checkId:a})),e.createElement(w,{programId:r,checkId:a}),e.createElement($,{programId:r}))))};export{A as CertificationsPage,n as useStyles};
2
2
  //# sourceMappingURL=CertificationsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as O,useTheme as R,Box as a,Paper as B,Typography as $,Tooltip as P}from"@material-ui/core";import E from"@material-ui/lab/Skeleton";import{DateTime as I}from"luxon";import t from"react";import{CircularProgressbar as T,buildStyles as W}from"react-circular-progressbar";import{useCheckStatus as M}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useCheckStatusHistory as j}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{getChartFontColor as w,formatDate as z}from"../Charts/chartUtils.esm.js";import{getProgressColor as C}from"../TrackPage/utils.esm.js";import{CheckHistoryChart as G}from"./CheckHistoryChart.esm.js";import{getCheckName as H}from"./utils.esm.js";const S=O(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,width:"99%"},title:{fontWeight:"bold",fontSize:"0.9rem",cursor:"default",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},headerRow:{display:"flex",padding:e.spacing(1,1),borderBottom:`1px solid ${e.palette.divider}`,width:"100%"},headerSection:{display:"flex",flexDirection:"column",gap:e.spacing(.5),flexGrow:1,width:"100%"},contentRow:{padding:e.spacing(1,1,0),display:"flex"},leftSection:{width:"75px",minWidth:"75px"},summaryCard:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between"},chartSection:{flex:1,width:"100%",minWidth:"150px"},chartSkeletonSection:{flex:1,width:"100%",minWidth:"150px",padding:e.spacing(0,0,1,1)},overallSummaryBox:{display:"flex",flexDirection:"column",height:"100%",color:w(e),textAlign:"center",gap:e.spacing(2)}})),K=()=>{const e=S();return t.createElement(a,{className:e.contentRow},t.createElement(a,{className:e.leftSection},t.createElement(a,{className:e.summaryCard},t.createElement(E,{variant:"circle",height:75}))),t.createElement(a,{className:e.chartSkeletonSection},t.createElement(E,{variant:"rect",height:92})))};function L(e){if(!e)return[];const{history:r,numberOfEntities:i}=e,l=I.utc();return r.map((s,c)=>({name:z(l,r.length-c-1),passRate:i?Math.round(s.passed/i*100):100}))}function A(e){if(!e)return 0;const{passed:r,numberOfEntities:i}=e;return i?Math.round(r/i*100):100}function F(e){if(!e)return{numerator:0,denominator:0};const{passed:r,numberOfEntities:i}=e;return{numerator:r,denominator:i}}const Q=({check:e,track:r,lifecycles:i,owners:l,types:s,systems:c})=>{const n=S(),m=R();let o={};i?.length&&(o["spec.lifecycle"]=i),l?.length&&(o["relations.ownedBy"]=l),s?.length&&(o["spec.type"]=s),c?.length&&(o["relations.partOf"]=c),Object.keys(o).length===0&&(o=void 0);const{data:d,isLoading:N}=M({checkId:e.id,trackId:r.id,filter:o}),{data:u,isLoading:k}=j({checkId:e.id,trackId:r.id,numberOfDays:30,filter:o}),v={dataKey:"passRate",name:"Pass rate"},b=u?.history?.length??0,D=L(u),p=A(d);let h;d?h=`${p}%`:h="No Data";let f;if(!d)f="No Data";else{const{numerator:y,denominator:x}=F(d);x>0?f=`${y} of ${x} entities passing`:f=`${y} entities passing`}const g=t.createElement(a,{className:n.overallSummaryBox},t.createElement(T,{value:p,text:h,styles:W({textColor:w(m),pathColor:C(m,p),trailColor:m.palette.divider,textSize:b?void 0:10})}));return t.createElement(B,{className:n.card,elevation:0},t.createElement(a,{className:n.headerRow},t.createElement(a,{className:n.headerSection},t.createElement($,{className:n.title},H(r,e)))),k||N?t.createElement(K,null):t.createElement(P,{title:f},t.createElement(a,{className:n.contentRow},g&&t.createElement(a,{className:n.leftSection},t.createElement(a,{className:n.summaryCard},g)),t.createElement(a,{className:n.chartSection},t.createElement(G,{data:D,lineConfig:v,color:C(m,p)})))))};export{Q as CheckCard};
1
+ import{makeStyles as B,useTheme as $,Box as a,Paper as P,Typography as I,Tooltip as O}from"@material-ui/core";import S from"@material-ui/lab/Skeleton";import{DateTime as T}from"luxon";import t from"react";import{CircularProgressbar as W,buildStyles as j}from"react-circular-progressbar";import{useCheckStatus as z}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useCheckStatusHistory as A}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{getChartFontColor as w,formatDate as G}from"../Charts/chartUtils.esm.js";import{getApplicableCheckCount as u}from"../TrackPage/TrackEntitiesTable/utils.esm.js";import{getProgressColor as E}from"../TrackPage/utils.esm.js";import{CheckHistoryChart as H}from"./CheckHistoryChart.esm.js";import{getCheckName as K}from"./utils.esm.js";const N=B(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,width:"99%"},title:{fontWeight:"bold",fontSize:"0.9rem",cursor:"default",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},headerRow:{display:"flex",padding:e.spacing(1,1),borderBottom:`1px solid ${e.palette.divider}`,width:"100%"},headerSection:{display:"flex",flexDirection:"column",gap:e.spacing(.5),flexGrow:1,width:"100%"},contentRow:{padding:e.spacing(1,1,0),display:"flex"},leftSection:{width:"75px",minWidth:"75px"},summaryCard:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between"},chartSection:{flex:1,width:"100%",minWidth:"150px"},chartSkeletonSection:{flex:1,width:"100%",minWidth:"150px",padding:e.spacing(0,0,1,1)},overallSummaryBox:{display:"flex",flexDirection:"column",height:"100%",color:w(e),textAlign:"center",gap:e.spacing(2)}})),L=()=>{const e=N();return t.createElement(a,{className:e.contentRow},t.createElement(a,{className:e.leftSection},t.createElement(a,{className:e.summaryCard},t.createElement(S,{variant:"circle",height:75}))),t.createElement(a,{className:e.chartSkeletonSection},t.createElement(S,{variant:"rect",height:92})))};function M(e){if(!e)return[];const{history:r}=e,o=T.utc();return r.map((l,s)=>{const c=u(l);return{name:G(o,r.length-s-1),passRate:c?Math.round(l.passed/c*100):100}})}function q(e){if(!e)return 0;const{passed:r}=e,o=u(e);return o?Math.round(r/o*100):100}function F(e){if(!e)return{numerator:0,denominator:0};const{passed:r}=e,o=u(e);return{numerator:r,denominator:o}}const Q=({check:e,track:r,lifecycles:o,owners:l,types:s,systems:c})=>{const n=N(),m=$();let i={};o?.length&&(i["spec.lifecycle"]=o),l?.length&&(i["relations.ownedBy"]=l),s?.length&&(i["spec.type"]=s),c?.length&&(i["relations.partOf"]=c),Object.keys(i).length===0&&(i=void 0);const{data:d,isLoading:k}=z({checkId:e.id,trackId:r.id,filter:i}),{data:g,isLoading:v}=A({checkId:e.id,trackId:r.id,numberOfDays:30,filter:i}),b={dataKey:"passRate",name:"Pass rate"},D=g?.history?.length??0,R=M(g),p=q(d);let f;d?f=`${p}%`:f="No Data";let h;if(!d)h="No Data";else{const{numerator:x,denominator:C}=F(d);C>0?h=`${x} of ${C} entities passing`:h=`${x} entities passing`}const y=t.createElement(a,{className:n.overallSummaryBox},t.createElement(W,{value:p,text:f,styles:j({textColor:w(m),pathColor:E(m,p),trailColor:m.palette.divider,textSize:D?void 0:10})}));return t.createElement(P,{className:n.card,elevation:0},t.createElement(a,{className:n.headerRow},t.createElement(a,{className:n.headerSection},t.createElement(I,{className:n.title},K(r,e)))),v||k?t.createElement(L,null):t.createElement(O,{title:h},t.createElement(a,{className:n.contentRow},y&&t.createElement(a,{className:n.leftSection},t.createElement(a,{className:n.summaryCard},y)),t.createElement(a,{className:n.chartSection},t.createElement(H,{data:R,lineConfig:b,color:E(m,p)})))))};export{Q as CheckCard};
2
2
  //# sourceMappingURL=CheckCard.esm.js.map
@@ -0,0 +1,2 @@
1
+ import t,{useEffect as n}from"react";import{v4 as u}from"uuid";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as d,useCheckFormContext as f}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as g}from"../../hooks/useNavigateBack.esm.js";import{useCheckTemplates as h}from"../../hooks/checks/useCheckTemplates.esm.js";import{useCreateCheck as k}from"../../hooks/checks/useCreateCheck.esm.js";import{useSearchParam as C}from"../../hooks/useSearchParam.esm.js";import{checksPageRouteRef as y}from"../../routes.esm.js";import{CheckForm as E}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import{LoadingIndicator as I}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as L}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as F}from"../SoundcheckHeader/useHeader.esm.js";const P=({template:e})=>{const{setIsLoading:o,selectedItem:m,setSelectedItem:r}=f(),{mutateAsync:i,isLoading:a}=k();n(()=>{r(e?{...e,id:u()}:null)},[e,r]),n(()=>{o(a)},[o,a]);const[c,s]=g(y),p=async l=>{await i(l,{onSuccess:s})};return F({title:"Create a Check",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e&&!m?null:t.createElement(E,{onSave:p,onClose:c})},v=()=>{const[[e]]=C("template"),{isLoading:o,data:m}=h(),r=e&&m?m.find(i=>i.id===e)??null:null;return t.createElement(t.Fragment,null,t.createElement(L,{entityName:"check template",entityId:e,showNotFound:!!e&&!o&&!r}),o&&t.createElement(I,null),t.createElement(d,null,!o&&(!e||r)&&t.createElement(P,{template:r})))};export{v as CheckCreatePage};
2
+ //# sourceMappingURL=CheckCreatePage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as p}from"@backstage/core-components";import{makeStyles as m,useTheme as s,Paper as c,Typography as d}from"@material-ui/core";import g from"@material-ui/icons/CheckCircleOutlined";import f from"@material-ui/icons/ErrorOutline";import n from"@material-ui/icons/InfoOutlined";import u from"@material-ui/icons/RemoveCircleOutline";import C from"@material-ui/icons/WarningOutlined";import a from"react";import{ResultState as e}from"../../graphql/generated/index.esm.js";const N=m(t=>({markdownContent:{"& :last-child":{marginBottom:0}},root:{padding:t.spacing(2),display:"flex",gap:t.spacing(1.5)},iconContainer:{marginTop:1},passed:{},failed:{},warning:{},notReported:{},notApplicable:{},error:{},icon:{}}),{name:"CheckResultStateBox"}),k={[e.Passed]:g,[e.Failed]:f,[e.Warning]:C,[e.NotReported]:n,[e.NotApplicable]:n,[e.Error]:u},h={[e.Passed]:"Check passed",[e.Failed]:"Check did not pass",[e.Warning]:"Check produced warning(s)",[e.NotReported]:"Check not reported",[e.NotApplicable]:"Check not applicable",[e.Error]:"Check encountered an error."},E={[e.Passed]:"passed",[e.Failed]:"failed",[e.Warning]:"warning",[e.NotReported]:"notReported",[e.NotApplicable]:"notApplicable",[e.Error]:"error"},b=(t,o)=>({[e.Passed]:o.palette.success.main,[e.Failed]:o.palette.error.main,[e.Warning]:o.palette.warning.main,[e.NotReported]:o.palette.info.main,[e.NotApplicable]:o.palette.info.main,[e.Error]:o.palette.error.main})[t],R=({state:t,notes:o})=>{const r=N(),i=s(),l=k[t]??n;return a.createElement(c,{variant:"outlined",className:`${r.root} ${r[E[t]]}`},a.createElement("div",{className:r.iconContainer},a.createElement(l,{className:r.icon,htmlColor:b(t,i)})),a.createElement("div",null,a.createElement(d,{variant:"subtitle1"},h[t]),o?a.createElement(p,{className:r.markdownContent,content:o}):null))};export{R as ResultStateBox};
1
+ import{MarkdownContent as l}from"@backstage/core-components";import{makeStyles as m,useTheme as s,Paper as c,Typography as d}from"@material-ui/core";import g from"@material-ui/icons/CheckCircleOutlined";import u from"@material-ui/icons/ErrorOutline";import n from"@material-ui/icons/InfoOutlined";import k from"@material-ui/icons/RemoveCircleOutline";import f from"@material-ui/icons/WarningOutlined";import a from"react";import{ResultState as e}from"../../graphql/generated/index.esm.js";const C=m(t=>({markdownContent:{"& :last-child":{marginBottom:0},"& pre":{background:`${t.palette.background.paper} !important`}},root:{padding:t.spacing(2),display:"flex",gap:t.spacing(1.5)},iconContainer:{marginTop:1},passed:{},failed:{},warning:{},notReported:{},notApplicable:{},error:{},icon:{}}),{name:"CheckResultStateBox"}),N={[e.Passed]:g,[e.Failed]:u,[e.Warning]:f,[e.NotReported]:n,[e.NotApplicable]:n,[e.Error]:k},b={[e.Passed]:"Check passed",[e.Failed]:"Check did not pass",[e.Warning]:"Check produced warning(s)",[e.NotReported]:"Check not reported",[e.NotApplicable]:"Check not applicable",[e.Error]:"Check encountered an error."},h={[e.Passed]:"passed",[e.Failed]:"failed",[e.Warning]:"warning",[e.NotReported]:"notReported",[e.NotApplicable]:"notApplicable",[e.Error]:"error"},E=(t,r)=>({[e.Passed]:r.palette.success.main,[e.Failed]:r.palette.error.main,[e.Warning]:r.palette.warning.main,[e.NotReported]:r.palette.text.primary,[e.NotApplicable]:r.palette.text.primary,[e.Error]:r.palette.error.main})[t],R=({state:t,notes:r})=>{const o=C(),i=s(),p=N[t]??n;return a.createElement(c,{variant:"outlined",className:`${o.root} ${o[h[t]]}`},a.createElement("div",{className:o.iconContainer},a.createElement(p,{className:o.icon,htmlColor:E(t,i)})),a.createElement("div",null,a.createElement(d,{variant:"subtitle1"},b[t]),r?a.createElement(l,{className:o.markdownContent,content:r}):null))};export{R as ResultStateBox};
2
2
  //# sourceMappingURL=ResultStateBox.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as y,IconButton as E,CircularProgress as C}from"@material-ui/core";import b from"@material-ui/icons/Refresh";import e,{useState as a,useCallback as g}from"react";import{useExecuteCheck as z}from"../../hooks/checks/useExecuteCheck.esm.js";import{CheckIcon as S}from"../CheckIcon/CheckIcon.esm.js";import{StyledTooltip as x}from"../StyledTooltip/StyledTooltip.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as B}from"./CheckDryRunDialogButton.esm.js";import"./CheckDryRunDetails.esm.js";import"./CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";const D=y(()=>({root:{display:"flex",alignItems:"center"},buttonWrapper:{height:24}})),I=({entityRef:l,check:s})=>{const{mutateAsync:n}=z(),[r,u]=a(),[o,p]=a(null),[c,i]=a(!1),[f,h]=a(),[k,d]=a(),m=D(),R=g(async()=>{if(c)return;i(!0);const t=await n({entityRef:l,checker:s,dryRun:!0,shouldRefreshFacts:!0}).catch($=>{});t?.details?.notes?.data&&p(t.details.notes.data),t?.facts&&h(t.facts),t?.ruleResults&&d(t.ruleResults),u(t?.result),i(!1)},[s,l,n,c]);return e.createElement("div",{className:m.root},r&&e.createElement(x,{arrow:!0,title:`${r}${o?`: ${o}`:""}`,placement:"left"},e.createElement("span",{className:m.buttonWrapper,"aria-label":"check result"},e.createElement(S,{result:r}))),e.createElement(E,{size:"small",color:"inherit",onClick:R,disabled:c,"aria-label":"refresh"},c?e.createElement(C,{size:16}):e.createElement(b,{fontSize:"small"})),r&&e.createElement(B,{entityRef:l,check:s,checkResult:{checkResult:r,notes:o},facts:f,ruleResults:k}))};export{I as CheckDryRun};
2
+ //# sourceMappingURL=CheckDryRun.esm.js.map
@@ -0,0 +1,2 @@
1
+ import p,{createContext as C,useState as t,useCallback as y}from"react";import"./CheckDryRun.esm.js";import{CheckDryRunDialog as D}from"./CheckDryRunDialog.esm.js";import"@material-ui/core";import"./CheckDryRunDetails.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";const n=C({updateEntityRef:()=>{},updateCheck:()=>{},updateOpen:()=>{},updateResult:()=>{},setValues:()=>{},updateFacts:()=>{},updateRuleResults:()=>{},open:!1}),E=({children:o})=>{const[R,u]=t(!1),[i,s]=t(""),[d,a]=t(),[h,c]=t(),[k,l]=t(),[f,r]=t(),m=y(e=>{u(!0),e.entityRef&&s(e.entityRef),e.check&&a(e.check),e.checkResult&&c(e.checkResult),e.facts&&l(e.facts),e.ruleResults&&r(e.ruleResults)},[]);return p.createElement(n.Provider,{value:{entityRef:i,updateEntityRef:s,check:d,updateCheck:a,open:R,updateOpen:u,result:h,updateResult:c,setValues:m,facts:k,updateFacts:l,ruleResults:f,updateRuleResults:r}},p.createElement(D,null),o)};export{n as CheckDryRunContext,E as CheckDryRunProvider};
2
+ //# sourceMappingURL=CheckDryRunContext.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{EntityRefLink as b}from"@backstage/plugin-catalog-react";import{makeStyles as S,Box as c,Typography as a,Divider as f,Grid as l}from"@material-ui/core";import{parseFactRef as N,getRuleHash as k}from"@spotify/backstage-plugin-soundcheck-common";import e from"react";import{ResultState as R}from"../../graphql/generated/index.esm.js";import{ResultStateBox as B}from"../CheckDetails/ResultStateBox.esm.js";import{ExpressionTypeReadableMap as F,ExpressionType as T}from"../CheckForm/types/ExpressionType.esm.js";import"../Frequency/types.esm.js";import"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";import"../CheckForm/types/Path.esm.js";import{mapRuleToExpression as P}from"../CheckForm/utils/checkFormUtils.esm.js";import{CheckIcon as w}from"../CheckIcon/CheckIcon.esm.js";import{ExpandableSection as z}from"../ExpandableSection/ExpandableSection.esm.js";import{FormattedPreview as x}from"../FormattedPreview/FormattedPreview.esm.js";const v=S(t=>({dryRunRoot:{padding:t.spacing(2)},dryRunSection:{marginBottom:t.spacing(2)},rulesSection:{padding:t.spacing(2),margin:0,width:"100%"},resultBox:{fontSize:t.typography.body1.fontSize},factBox:{padding:0,border:`1px solid ${t.palette.divider}`,overflow:"auto",fontSize:t.typography.body2.fontSize,maxHeight:500},nested:{margin:t.spacing(3)},expressionType:{padding:t.spacing(1,2)},expressionWrapper:{border:`1px solid ${t.palette.divider}`,marginBottom:t.spacing(2)},resultDisplay:{display:"flex",alignItems:"center"},resultIcon:{marginRight:t.spacing(.25)},ownerLink:{"& span":{"&:hover":{textDecoration:"underline"}},fontSize:t.typography.body1.fontSize},valueBox:{maxHeight:500,overflow:"auto"}})),D=({passed:t})=>{const n=v();return e.createElement(a,{variant:"body1",className:n.resultDisplay},e.createElement(w,{className:n.resultIcon,result:t?R.Passed:R.Failed})," ",t?"Passed":"Failed")},g=({check:t,expression:n,facts:i,ruleResults:m})=>{const o=v();return e.createElement(e.Fragment,null,e.createElement(c,{className:o.expressionWrapper},e.createElement(a,{className:o.expressionType,variant:"subtitle1"},F[n.expressionType??T.AllOf]),n.conditions?.map((r,s)=>{const p=r.operatorPrefix?`${r.operatorPrefix}:${r.operator}`:r.operator,d=N(r.factRef),y=i?.find(E=>E.factRef===r.factRef),h=k({factRef:d,value:r.value,operator:p,path:r.path}),u=m?.find(E=>E.name===h);return e.createElement("div",{key:`expression-${s}`},e.createElement(f,{variant:"middle"}),e.createElement(l,{container:!0,className:o.rulesSection,spacing:2},e.createElement(l,{item:!0,xs:6},e.createElement(a,{variant:"subtitle2",color:"textSecondary"},"Integration"),e.createElement(a,{variant:"body1"},d.source)),e.createElement(l,{item:!0,xs:6},e.createElement(a,{variant:"subtitle2",color:"textSecondary"},"Fact"),e.createElement(a,{variant:"body1"},d.name)),t?.pathResolver&&e.createElement(l,{item:!0,xs:6},e.createElement(a,{variant:"subtitle2",color:"textSecondary"},"Path Resolver"),e.createElement(a,{variant:"body1"},t.pathResolver)),e.createElement(l,{item:!0,xs:6},e.createElement(a,{variant:"subtitle2",color:"textSecondary"},"Path"),e.createElement(a,{variant:"body1"},r.path)),e.createElement(l,{item:!0,xs:6},e.createElement(a,{variant:"subtitle2",color:"textSecondary"},"Operator"),e.createElement(a,{variant:"body1"},p)),u?.result!==void 0&&e.createElement(l,{item:!0,xs:6},e.createElement(a,{variant:"subtitle2",color:"textSecondary"},"Result"),e.createElement(D,{passed:u.result})),e.createElement(l,{item:!0,xs:12},e.createElement(a,{variant:"subtitle2",color:"textSecondary"},"Expected"),e.createElement(a,{component:"div",variant:"body2",className:o.valueBox},e.createElement(x,{data:r?.value}))),e.createElement(l,{item:!0,xs:12},e.createElement(a,{variant:"subtitle2",color:"textSecondary"},"Resolved Value"),e.createElement(a,{component:"div",variant:"body2",className:o.valueBox},e.createElement(x,{data:u?.factResult}))),!!y&&e.createElement(l,{item:!0,xs:12},e.createElement(z,{elevation:0,title:"Related Fact"},e.createElement("div",{className:o.factBox},e.createElement(x,{data:y.data}))))))}),!!n?.expressions&&e.createElement(e.Fragment,null,e.createElement(f,{variant:"middle"}),e.createElement(c,{className:o.nested},n?.expressions?.map((r,s)=>e.createElement(g,{check:t,facts:i,ruleResults:m,expression:r,key:`nested-expression-${s}`}))))))},I=({entityRef:t,check:n,checkResult:i,notes:m,facts:o,ruleResults:r})=>{const s=v(),p=P(n?.rule);return e.createElement(c,{className:s.dryRunRoot},e.createElement(c,{className:s.dryRunSection},t&&e.createElement(e.Fragment,null,e.createElement(a,{variant:"h5"},"Entity"),e.createElement(a,{variant:"body1"},e.createElement(b,{className:s.ownerLink,entityRef:t})))),e.createElement(c,{className:s.dryRunSection},e.createElement(a,{variant:"h5"},"Check Result"),e.createElement("div",{className:s.resultBox},i?e.createElement(B,{state:i,notes:m}):"No Results")),e.createElement(a,{variant:"h5"},"Rules"),e.createElement(g,{check:n,facts:o,ruleResults:r,expression:p}))};export{I as CheckDryRunDetails};
2
+ //# sourceMappingURL=CheckDryRunDetails.esm.js.map
@@ -0,0 +1,2 @@
1
+ import o,{useContext as u}from"react";import{SoundcheckDialog as m}from"../SoundcheckDialog/SoundcheckDialog.esm.js";import"./CheckDryRun.esm.js";import"@material-ui/core";import{CheckDryRunDetails as i}from"./CheckDryRunDetails.esm.js";import{CheckDryRunContext as p}from"./CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";const R=()=>{const{entityRef:r,open:c,updateOpen:n,check:e,result:t,facts:l,ruleResults:s}=u(p);return o.createElement(m,{handleClose:()=>n(!1),title:`${e?.name??"Check"} Run Results`,open:c,fullScreen:!1},o.createElement(i,{entityRef:r,check:e,checkResult:t?.checkResult,notes:t?.notes,facts:l,ruleResults:s}))};export{R as CheckDryRunDialog};
2
+ //# sourceMappingURL=CheckDryRunDialog.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Button as u}from"@material-ui/core";import m,{useContext as a,useCallback as k}from"react";import"./CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"./CheckDryRunDetails.esm.js";import{CheckDryRunContext as p}from"./CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";const R=({text:s="Details",entityRef:t,check:e,checkResult:o,facts:r,ruleResults:i,size:n="medium"})=>{const{setValues:c}=a(p),l=k(()=>{c({entityRef:t,check:e,checkResult:o,facts:r,ruleResults:i})},[e,o,t,r,i,c]);return m.createElement(u,{size:n,variant:"text",color:"inherit",onClick:l},s)};export{R as CheckDryRunDialogButton};
2
+ //# sourceMappingURL=CheckDryRunDialogButton.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{mapToCheckerInput as e,mapCheckerToFormValues as p}from"../CheckForm/utils/checkFormUtils.esm.js";const m=o=>e(p(o),o);export{m as mapCheckToCheckInput};
2
+ //# sourceMappingURL=checkDryRunUtils.esm.js.map
@@ -1,2 +1,2 @@
1
- import e from"react";import{FormProvider as h}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as f}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{FormFilterSection as S}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as u}from"../FormStepper/FormStepper.esm.js";import{FullScreenDialog as C}from"../FullScreenDialog/FullScreenDialog.esm.js";import{CheckFormDescription as b}from"./CheckFormDescription.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as E}from"./utils/checkFormUtils.esm.js";import"./FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"./FormFields/RuleInput/AddMenuButton.esm.js";import"./FormFields/RuleInput/RuleInputBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/core";import"@material-ui/icons/Delete";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"./FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js";import"./FormFields/RuleInput/Conditions/styles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/graphqlKeys.esm.js";import"./FormFields/RuleInput/Conditions/ConditionList.esm.js";import{ScheduleSection as k}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import{CheckDetailsStep as F}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as g}from"./Steps/CheckRulesStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as v}from"./types/CheckFormTypes.esm.js";import"../Frequency/types.esm.js";import"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";import"./types/Path.esm.js";import{useCheckForm as y}from"./useCheckForm.esm.js";const D=({title:l,open:p,onSave:a,onClose:o})=>{const{hideModal:i,isLoading:c,isReadOnly:r,selectedItem:s}=f(),{formMethods:t,onSubmit:m}=y(a),n=[{label:"Enter check details",content:()=>e.createElement(F,null)},{label:"Add rules",content:()=>e.createElement(g,null)},{label:"Choose the affected entities (Optional)",content:()=>e.createElement(S,{name:"filtersStep.filter",control:t.control,disabled:r,description:E.filter.description})},{label:"Set the check schedule (Optional)",content:()=>e.createElement(k,{control:t.control,disabled:r})}],d=s?[...Array(n.length).keys()]:[0];return e.createElement(C,{handleClose:o?()=>o():i,title:l,open:p},e.createElement(h,{...t},e.createElement("form",{onSubmit:t.handleSubmit(m)},e.createElement(u,{onClose:o?()=>o():i,handleSubmit:t.handleSubmit,trigger:t.trigger,onSubmit:m,initialVisited:d,stepNameMap:v,steps:n,isLoading:c,isReadOnly:r,saveButtonText:"Save Check",detailsComponent:e.createElement(b,null)}))))};export{D as CheckForm};
1
+ import{Content as s}from"@backstage/core-components";import t from"react";import{FormProvider as d}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as f}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{formStyles as h}from"../../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as S}from"../FactExplorer/FactExplorerContext.esm.js";import{FormFilterSection as u}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as C}from"../FormStepper/FormStepper.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as E}from"./utils/checkFormUtils.esm.js";import"./FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"./FormFields/RuleInput/AddMenuButton.esm.js";import"./FormFields/RuleInput/RuleInputBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"./FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"./FormFields/RuleInput/Conditions/ConditionList.esm.js";import{ScheduleSection as b}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"./FormFields/CheckPathResolverInput.esm.js";import{CheckDetailsStep as k}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as F}from"./Steps/CheckRulesStep.esm.js";import{CheckReviewStep as g}from"./Steps/CheckReviewStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as v}from"./types/CheckFormTypes.esm.js";import"../Frequency/types.esm.js";import"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";import"./types/Path.esm.js";import{useCheckForm as y}from"./useCheckForm.esm.js";const O=({onSave:p,onClose:r})=>{const{isLoading:n,isReadOnly:o,selectedItem:l}=f(),{formMethods:e,onSubmit:m}=y(p),a=h(),i=[{label:"Enter check details",content:()=>t.createElement(k,null)},{label:"Add rules",content:()=>t.createElement(F,null)},{label:"Choose the affected entities (Optional)",content:()=>t.createElement(u,{name:"filtersStep.filter",control:e.control,disabled:o,description:E.filter.description})},{label:"Set the check schedule (Optional)",content:()=>t.createElement(b,{control:e.control,disabled:o})},{label:"Review and test (Optional)",content:()=>t.createElement(g,null)}],c=l?[...Array(i.length).keys()]:[0];return t.createElement(s,{className:a.formWrapper},t.createElement(d,{...e},t.createElement(S,null,t.createElement("form",{onSubmit:e.handleSubmit(m)},t.createElement(C,{onClose:()=>r?r():void 0,handleSubmit:e.handleSubmit,trigger:e.trigger,onSubmit:m,initialVisited:c,stepNameMap:v,steps:i,isLoading:n,isReadOnly:o,saveButtonText:"Save Check"})))))};export{O as CheckForm};
2
2
  //# sourceMappingURL=CheckForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import n from"react";import{FormMarkdownInput as d}from"../../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as p}from"../../utils/checkFormUtils.esm.js";const c=({control:r,isLoading:t,disabled:o,error:i})=>{const{description:e}=p.details;return n.createElement(d,{name:"detailsStep.description",control:r,error:i,label:e.name,description:e.description,placeholder:o?void 0:e.placeholder,disabled:o||t})};export{c as CheckDescriptionInput};
1
+ import n from"react";import{FormMarkdownInput as d}from"../../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as l}from"../../utils/checkFormUtils.esm.js";const a=({control:o,isLoading:t,disabled:r,error:i})=>{const{description:e}=l.details;return n.createElement(d,{name:"detailsStep.description",control:o,error:i,label:e.name,placeholder:r?void 0:e.placeholder,disabled:r||t})};export{a as CheckDescriptionInput};
2
2
  //# sourceMappingURL=CheckDescriptionInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Typography as n,TextField as p}from"@material-ui/core";import{makeStyles as c}from"@material-ui/core/styles";import e from"react";import{Controller as s}from"react-hook-form";import{CHECK_FIELDS as d}from"../../utils/checkFormUtils.esm.js";const f=c(r=>({container:{display:"flex",flexDirection:"column",gap:r.spacing(1)},helperText:{marginLeft:0}})),h=({control:r,error:a,isLoading:o,disabled:i})=>{const l=f(),{name:t}=d.details;return e.createElement("div",{className:l.container},e.createElement("div",null,e.createElement(n,{variant:"subtitle2"},t.name),e.createElement(n,{variant:"caption"},t.description)),e.createElement(s,{name:"detailsStep.name",control:r,defaultValue:"",render:({field:m})=>e.createElement(p,{...m,FormHelperTextProps:{className:l.helperText},variant:"outlined",fullWidth:!0,placeholder:t.placeholder,disabled:o||i,type:"text",margin:"dense",error:!!a,helperText:a?.message??t.helperText})}))};export{h as CheckNameInput};
1
+ import{Typography as m,TextField as p}from"@material-ui/core";import{makeStyles as c}from"@material-ui/core/styles";import e from"react";import{Controller as s}from"react-hook-form";import{CHECK_FIELDS as d}from"../../utils/checkFormUtils.esm.js";const f=c(r=>({container:{display:"flex",flexDirection:"column",gap:r.spacing(1)},helperText:{marginLeft:0}})),h=({control:r,error:l,isLoading:o,disabled:n})=>{const a=f(),{name:t}=d.details;return e.createElement("div",{className:a.container},e.createElement("div",null,e.createElement(m,{variant:"subtitle2"},t.name)),e.createElement(s,{name:"detailsStep.name",control:r,defaultValue:"",render:({field:i})=>e.createElement(p,{...i,FormHelperTextProps:{className:a.helperText},variant:"outlined",fullWidth:!0,placeholder:t.placeholder,disabled:o||n,type:"text",margin:"dense",error:!!l,helperText:l?.message??t.helperText})}))};export{h as CheckNameInput};
2
2
  //# sourceMappingURL=CheckNameInput.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as p}from"@material-ui/core";import t,{useMemo as n}from"react";import{useGetPathResolvers as m}from"../../../hooks/useGetPathResolvers.esm.js";import{FormControlledAutocomplete as i}from"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/lab";import"../../ListboxVirtualized/ListboxVirtualized.esm.js";import{FormFieldLabel as c}from"../../FormFieldLabel/FormFieldLabel.esm.js";const d=p(o=>({wrapper:{marginBottom:o.spacing(2)}})),h=({control:o})=>{const a=d(),{data:r,isLoading:l}=m(),s=n(()=>r?.map(e=>e.id),[r]);return t.createElement("div",{className:a.wrapper},t.createElement(c,{title:"Path resolver (Optional)",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks#path-resolvers"}),t.createElement("div",null,t.createElement(i,{control:o,name:"rulesStep.pathResolver",disabled:l,options:s??[],freeSolo:!1,disableClearable:!0,width:250,getOptionLabel:e=>e==="jsonpath"?"jsonpath (default)":e,getOptionValue:e=>e&&e==="jsonpath (default)"?"jsonpath":e??"",placeholder:"path resolver"})))};export{h as CheckPathResolverInput};
2
+ //# sourceMappingURL=CheckPathResolverInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as m,Box as o,ButtonGroup as p,Button as E,Menu as b,MenuItem as l}from"@material-ui/core";import g from"@material-ui/icons/ArrowDropDown";import e,{useState as x}from"react";const A=m(t=>({label:{paddingRight:t.spacing(2)},icon:{borderLeft:`1px solid ${t.palette.divider}`,display:"flex",alignItems:"center"},menu:{margin:0,backgroundColor:t.palette.background.paper}})),C=({onAddCondition:t,onAddExpression:s})=>{const n=A(),[r,i]=x(null),a=!!r,c=u=>{i(u.currentTarget)},d=()=>{i(null)};return e.createElement(o,null,e.createElement(p,{color:"primary"},e.createElement(E,{"data-testid":"add-button",id:"add-button","aria-controls":a?"add-menu":void 0,"aria-haspopup":"true","aria-expanded":a?"true":void 0,onClick:c,size:"medium"},e.createElement(o,{className:n.label},"Add"),e.createElement(o,{className:n.icon},e.createElement(g,null)))),e.createElement(b,{id:"add-menu",anchorEl:r,open:a,onClose:d,classes:{paper:n.menu},MenuListProps:{"aria-labelledby":"add-button"}},e.createElement(l,{"data-testid":"add-condition",onClick:()=>{t(),d()}},"Add Condition"),e.createElement(l,{"data-testid":"add-expression",onClick:()=>{s(),d()}},"Add Expression")))};export{C as AddMenuButton};
1
+ import{makeStyles as u,Box as o,ButtonGroup as m,Button as g,Menu as b,MenuItem as l}from"@material-ui/core";import E from"@material-ui/icons/ArrowDropDown";import e,{useState as x}from"react";const C=u(t=>({label:{padding:t.spacing(0,1.5,0,0)},icon:{borderLeft:`1px solid ${t.palette.divider}`,display:"flex",alignItems:"center",padding:0},menu:{margin:0,backgroundColor:t.palette.background.paper},button:{padding:t.spacing(.5,1.5),paddingRight:t.spacing(.5)}})),k=({onAddCondition:t,onAddExpression:s})=>{const n=C(),[i,r]=x(null),a=!!i,c=p=>{r(p.currentTarget)},d=()=>{r(null)};return e.createElement(o,null,e.createElement(m,{color:"primary"},e.createElement(g,{className:n.button,"data-testid":"add-button",id:"add-button","aria-controls":a?"add-menu":void 0,"aria-haspopup":"true","aria-expanded":a?"true":void 0,onClick:c,size:"medium"},e.createElement(o,{className:n.label},"Add"),e.createElement(o,{className:n.icon},e.createElement(E,null)))),e.createElement(b,{id:"add-menu",anchorEl:i,open:a,onClose:d,classes:{paper:n.menu},MenuListProps:{"aria-labelledby":"add-button"}},e.createElement(l,{"data-testid":"add-condition",onClick:()=>{t(),d()}},"Add Condition"),e.createElement(l,{"data-testid":"add-expression",onClick:()=>{s(),d()}},"Add Expression")))};export{k as AddMenuButton};
2
2
  //# sourceMappingURL=AddMenuButton.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Grid as r}from"@material-ui/core";import{makeStyles as s}from"@material-ui/core/styles";import t from"react";import{RuleConditionInput as c}from"./RuleConditionInput.esm.js";const p=s(()=>({noPadding:{padding:0}})),u=({conditions:i,name:n,handleDelete:d,disabled:a,disableDelete:o,depth:l})=>{const m=p();return t.createElement(t.Fragment,null,i.map((b,e)=>t.createElement(r,{item:!0,key:e,className:m.noPadding},t.createElement(c,{name:`${n}.conditions[${e}]`,"data-testid":`${n}-condition-input`,handleDelete:()=>d(e),disabled:a,disableDelete:l===0&&e===0?!0:o}))))};export{u as ConditionList};
1
+ import{Grid as r}from"@material-ui/core";import{makeStyles as s}from"@material-ui/core/styles";import t from"react";import{RuleConditionInput as p}from"./RuleConditionInput.esm.js";import{ValueListContextProvider as c}from"./ValueListContext.esm.js";const u=s(()=>({noPadding:{padding:0}})),b=({conditions:i,name:n,handleDelete:o,disabled:d,disableDelete:a,depth:l})=>{const m=u();return t.createElement(c,null,i.map((f,e)=>t.createElement(r,{item:!0,key:e,className:m.noPadding},t.createElement(p,{name:`${n}.conditions[${e}]`,"data-testid":`${n}-condition-input`,handleDelete:()=>o(e),disabled:d,disableDelete:l===0&&e===0?!0:a}))))};export{b as ConditionList};
2
2
  //# sourceMappingURL=ConditionList.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Box as r,IconButton as m,FormHelperText as c}from"@material-ui/core";import s from"@material-ui/icons/Close";import e from"react";import{useRuleConditionStyles as i}from"./styles.esm.js";const u=({value:t,handleClear:a,error:l})=>{const n=i(),o=t?.factRef&&t?.path?e.createElement(e.Fragment,null,e.createElement("strong",null,"Fact:")," ",t.factRef," ",e.createElement("strong",null,"Path:")," ",t.path):JSON.stringify(t);return e.createElement(e.Fragment,null,e.createElement(r,{className:n.valueDisplay},e.createElement(r,{overflow:"hidden",flexGrow:1},o),e.createElement(m,{onClick:a,size:"small"},e.createElement(s,null))),l&&e.createElement(c,{error:!0},l.message))};export{u as FactValueDisplay};
2
+ //# sourceMappingURL=FactValueDisplay.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Box as r,TextField as F,IconButton as V}from"@material-ui/core";import B from"@material-ui/icons/Delete";import t,{useMemo as d}from"react";import{useFormContext as L,Controller as T}from"react-hook-form";import{useOperators as I}from"../../../../../hooks/operators/useOperators.esm.js";import{ControlledAutocomplete as f}from"./ControlledAutocomplete.esm.js";import{useRuleConditionStyles as S}from"./styles.esm.js";import{useRuleOptions as D}from"./useRuleOptions.esm.js";const M=({name:n,handleDelete:h,disabled:m,disableDelete:v})=>{const o=S(),{control:i,getValues:$,setValue:u}=L(),{data:E,isLoading:g}=I(),c=d(()=>E?.map(e=>({value:e.name,label:e.title}))??[],[E]),O=d(()=>c.map(e=>e.value),[c]),{pathOptions:C,factRefOptions:p,isLoading:b}=D(n,i),N=d(()=>p?.map(e=>e.value)??[],[p]),x=$("rulesStep.expressions.conditions")?.map(({factRef:e})=>e),R=e=>{e&&!x?.includes(e)&&(u(`${n}.path`,""),u(`${n}.operator`,""),u(`${n}.value`,""))};return t.createElement(r,{className:o.container},t.createElement(r,{className:o.connector}),t.createElement(r,{className:o.innerContainer},t.createElement(r,{className:o.inputsContainer},p&&t.createElement(r,null,t.createElement(f,{name:`${n}.factRef`,control:i,placeholder:"Fact",options:N,getOptionLabel:e=>p?.find(l=>e===l.value)?.label??e,getOptionValue:e=>p?.find(l=>e===l.label)?.value??e??"",disabled:m||b,onChange:R})),t.createElement(r,null,t.createElement(f,{name:`${n}.path`,placeholder:"Path",control:i,disabled:m||b,options:C})),c&&t.createElement(r,null,t.createElement(f,{name:`${n}.operator`,control:i,placeholder:"Operator",options:O,disabled:g||m,getOptionLabel:e=>{const l=a=>c?.find(s=>a===s.value)?.label??a??"";if(e?.match(/.:./)){const a=e.split(":"),s=l(a[1]);return`${a[0]}:${s}`}return l(e)},getOptionValue:e=>{const l=a=>c?.find(s=>a===s.label)?.value??a??"";if(e?.match(/.:./)){const a=e.split(":"),s=l(a[1]);return`${a[0]}:${s}`}return l(e)}})),t.createElement(r,null,t.createElement(T,{name:`${n}.value`,control:i,defaultValue:"",render:({field:e,fieldState:l})=>t.createElement(F,{...e,variant:"outlined",placeholder:"Enter a value",FormHelperTextProps:{className:o.helperText},error:l.invalid,helperText:l.error?l.error.message:null,margin:"dense",disabled:m,className:o.noMargin})})))),!m&&!v&&t.createElement(V,{onClick:h,className:o.deleteButton,"data-test-id":`${n}-delete-button`},t.createElement(B,{className:o.deleteIcon})))};export{M as RuleConditionInput};
1
+ import{Box as o,FormLabel as c,TextField as j,IconButton as C}from"@material-ui/core";import V from"@material-ui/icons/Close";import D from"@material-ui/icons/Delete";import T from"@material-ui/icons/List";import{asArray as k}from"@spotify/backstage-plugin-soundcheck-common";import e,{useMemo as y,useCallback as h}from"react";import{useFormContext as G,Controller as M}from"react-hook-form";import{useOperators as W}from"../../../../../hooks/operators/useOperators.esm.js";import{FactExplorerDialogButton as $}from"../../../../FactExplorer/FactExplorerDialog.esm.js";import"../../../../FactExplorer/FactExplorerContext.esm.js";import{FormControlledAutocomplete as E}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FactValueDisplay as z}from"./FactValueDisplay.esm.js";import{useRuleConditionStyles as H}from"./styles.esm.js";import{useRuleOptions as q}from"./useRuleOptions.esm.js";import{ValueListInputDialogButton as A}from"./ValueListInput.esm.js";const J=({name:a,handleDelete:F,disabled:i,disableDelete:b})=>{const r=H(),{control:s,setValue:m,watch:p,clearErrors:d}=G(),{data:N,isLoading:R}=W(),O=p("rulesStep.pathResolver")==="jsonpath",u=y(()=>N?.map(t=>({value:t.name,label:t.title})).sort((t,l)=>t.label.localeCompare(l.label))??[],[N]),w=y(()=>u.map(t=>t.value),[u]),{pathOptions:B,factRefOptions:f,isLoading:x}=q(a,s),S=y(()=>f?.map(t=>t.value)??[],[f]),I=h(({factRef:t,path:l})=>{m(`${a}.factRef`,t),m(`${a}.path`,l),d()},[d,a,m]),P=h(({factRef:t,path:l})=>{m(`${a}.value`,{factRef:t,path:l}),d()},[d,a,m]),g=h(t=>{m(`${a}.value`,t.length>0?t:""),d()},[d,a,m]),n=p(`${a}.value`),L=h(()=>{m(`${a}.value`,"")},[a,m]);return e.createElement(o,{className:r.container},e.createElement(o,{className:r.connector}),e.createElement(o,{paddingTop:2,paddingLeft:2,paddingRight:2,paddingBottom:2,width:"100%",className:r.innerContainer},e.createElement(o,{className:r.inputsContainer},f&&e.createElement(o,null,e.createElement(c,{className:r.formLabel},"Fact"),e.createElement(E,{name:`${a}.factRef`,control:s,placeholder:"Fact",options:S,getOptionLabel:t=>f?.find(l=>t===l.value)?.label??t,getOptionValue:t=>f?.find(l=>t===l.label)?.value??t??"",disabled:i||x,width:428})),e.createElement(o,{flexGrow:1},e.createElement(c,{className:r.formLabel},"Path"),e.createElement(E,{name:`${a}.path`,placeholder:"Path",control:s,disabled:i||x,options:O?B:[],fullWidth:!0})),e.createElement(o,null,e.createElement(c,{className:r.formLabel,style:{visibility:"hidden"}},"Explore"),e.createElement(o,{width:150},e.createElement($,{factRef:p(`${a}.factRef`),path:p(`${a}.path`),onSave:I,pathResolver:p("rulesStep.pathResolver"),className:r.exploreButton,hideIcon:!0})))),e.createElement(o,{className:r.inputsContainer},u&&e.createElement(e.Fragment,null,e.createElement(o,null,e.createElement(c,{className:r.formLabel},"Prefix (Optional)"),e.createElement(E,{name:`${a}.operatorPrefix`,control:s,placeholder:"Prefix",options:["all","any","none"],disabled:R||i,width:120})),e.createElement(o,null,e.createElement(c,{className:r.formLabel},"Operator"),e.createElement(E,{name:`${a}.operator`,control:s,placeholder:"Operator",options:w,disabled:R||i,getOptionLabel:t=>(l=>u?.find(v=>l===v.value)?.label??l??"")(t),getOptionValue:t=>(l=>u?.find(v=>l===v.label)?.value??l??"")(t),width:300}))),e.createElement(o,{flexGrow:1},e.createElement(c,{className:r.formLabel},"Value"),typeof n=="object"&&!Array.isArray(n)?e.createElement(z,{value:n,handleClear:L}):e.createElement(M,{name:`${a}.value`,control:s,defaultValue:"",render:({field:t,fieldState:l})=>e.createElement(j,{...t,variant:"outlined",placeholder:"Enter a value",FormHelperTextProps:{className:r.helperText},error:l.invalid,helperText:l.error?l.error.message:null,margin:"dense",disabled:i||typeof n=="object",className:r.noMargin,fullWidth:!0,InputProps:{endAdornment:e.createElement(C,{onClick:L,size:"small"},e.createElement(V,null)),startAdornment:Array.isArray(n)?e.createElement(A,{values:n,onSave:g,iconButton:e.createElement(T,null)}):null}})})),e.createElement(o,null,e.createElement(c,{className:r.formLabel,style:{visibility:"hidden"}},"Alternative Input"),e.createElement(o,{display:"flex",width:150},e.createElement($,{factRef:typeof n=="object"?n?.factRef:void 0,path:typeof n=="object"?n?.path:void 0,onSave:P,pathResolver:p("rulesStep.pathResolver"),className:r.exploreButton,text:"Fact",hideIcon:!0}),e.createElement(A,{values:typeof n=="object"&&!Array.isArray(n)?void 0:k(n),onSave:g}))))),e.createElement(C,{onClick:F,className:r.deleteButton,"data-test-id":`${a}-delete-button`,disabled:i||b,hidden:i||b,style:{visibility:i||b?"hidden":void 0}},e.createElement(D,{className:r.deleteIcon})))};export{J as RuleConditionInput};
2
2
  //# sourceMappingURL=RuleConditionInput.esm.js.map
@@ -0,0 +1,2 @@
1
+ import t,{createContext as s,useState as e}from"react";import{ValueListInputDialog as d}from"./ValueListInput.esm.js";const a=s({open:!1,updateOpen:()=>{},values:Array(5).fill(""),updateValues:()=>{},onSave:()=>{},updateOnSave:()=>{}}),v=({children:n})=>{const[r,u]=e(!1),[l,o]=e(Array(5).fill("")),[p,i]=e(()=>()=>{});return t.createElement(a.Provider,{value:{open:r,updateOpen:u,values:l,updateValues:o,onSave:p,updateOnSave:i}},t.createElement(d,null),n)};export{a as ValueListContext,v as ValueListContextProvider};
2
+ //# sourceMappingURL=ValueListContext.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as C,Box as p,Typography as k,TextField as y,IconButton as v,Button as d,Divider as x}from"@material-ui/core";import B from"@material-ui/icons/Add";import S from"@material-ui/icons/Delete";import e,{useContext as E,useCallback as r}from"react";import{SoundcheckDialog as h}from"../../../../SoundcheckDialog/SoundcheckDialog.esm.js";import{ValueListContext as f}from"./ValueListContext.esm.js";const V=C(t=>({dialogButton:{padding:t.spacing(1,1.5)}})),I=()=>{const{values:t,updateValues:n,updateOpen:i,onSave:o}=E(f),u=r((a,l)=>{const s=[...t];s[a]=l,n(s)},[n,t]),c=r(a=>{const l=[...t];l.splice(a,1),n(l)},[n,t]),m=r(()=>{const a=[...t,""];n(a)},[n,t]),g=r(()=>{o(t.filter(a=>!!a)),i(!1)},[o,i,t]);return e.createElement(p,{minWidth:640,paddingLeft:2,paddingRight:2,"data-testid":"rule-value-list-input"},e.createElement(k,{component:"div",variant:"subtitle2"},"Rule Value"),t.map((a,l)=>e.createElement(p,{display:"flex",marginBottom:1,alignItems:"center",key:l},e.createElement(y,{value:a,onChange:s=>u(l,s.currentTarget.value),variant:"outlined",margin:"dense",fullWidth:!0}),e.createElement(v,{onClick:()=>c(l),size:"small"},e.createElement(S,null)))),e.createElement(p,{marginTop:1,marginBottom:2},e.createElement(d,{onClick:m,startIcon:e.createElement(B,null),size:"small",variant:"outlined"},"Add")),e.createElement(x,null),e.createElement(p,{marginTop:2,display:"flex",gridGap:8,justifyContent:"flex-end"},e.createElement(d,{onClick:()=>i(!1),variant:"text"},"Cancel"),e.createElement(d,{onClick:g,variant:"contained",color:"primary"},"Save")))},L=({values:t=Array(5).fill(""),onSave:n,iconButton:i})=>{const{updateOpen:o,updateValues:u,updateOnSave:c}=E(f),m=r(()=>{const a=[...t.map(l=>String(l)),"","",""];o(!0),u(a),c(()=>n||(()=>{}))},[n,c,o,u,t]),g=V();return i?e.createElement(v,{"aria-label":"edit list",onClick:m,size:"small"},i):e.createElement(d,{className:g.dialogButton,onClick:m},"List")},T=()=>{const{open:t,updateOpen:n}=E(f);return e.createElement(h,{open:t,handleClose:()=>n(!1),title:"Input Value List",fullScreen:!1},e.createElement(I,null))};export{T as ValueListInputDialog,L as ValueListInputDialogButton};
2
+ //# sourceMappingURL=ValueListInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as t}from"@material-ui/core";const n=t(e=>({container:{borderLeft:`1px solid ${e.palette.border}`,marginLeft:e.spacing(2),padding:e.spacing(2,0,2,0),display:"flex",flexDirection:"row",alignItems:"center",gap:e.spacing(0)},connector:{borderBottom:`1px solid ${e.palette.border}`,padding:e.spacing(0),width:"15px",height:"45px"},innerContainer:{border:`1px solid ${e.palette.border}`,display:"flex",flexDirection:"column"},inputsContainer:{padding:e.spacing(2),display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"flex-start",gap:e.spacing(1)},deleteButton:{marginLeft:e.spacing(1),width:"45px",height:"45px"},deleteIcon:{color:e.palette.text.primary},helperText:{marginLeft:0},noMargin:{margin:0}}));export{n as useRuleConditionStyles};
1
+ import{makeStyles as t}from"@material-ui/core";const n=t(e=>({container:{borderLeft:`1px solid ${e.palette.border}`,marginLeft:e.spacing(2),padding:e.spacing(2,0,2,0),display:"flex",flexDirection:"row",alignItems:"center",gap:e.spacing(0)},connector:{borderBottom:`1px solid ${e.palette.border}`,padding:e.spacing(0),width:"15px",height:"45px"},innerContainer:{border:`1px solid ${e.palette.border}`,display:"flex",flexDirection:"column"},inputsContainer:{marginBottom:e.spacing(1),display:"flex",flexDirection:"row",justifyContent:"flex-start",alignItems:"flex-start",gap:e.spacing(1)},deleteButton:{marginLeft:e.spacing(1),width:"45px",height:"45px"},deleteIcon:{color:e.palette.text.primary},helperText:{marginLeft:0},noMargin:{margin:0},exploreButton:{padding:e.spacing(1,1.5)},formLabel:{fontSize:e.typography.subtitle2.fontSize},valueDisplay:{display:"flex",border:`1px solid ${e.palette.divider}`,borderRadius:6,padding:e.spacing(.5,1),alignItems:"center",fontSize:e.typography.body1.fontSize,color:e.palette.text.disabled}}));export{n as useRuleConditionStyles};
2
2
  //# sourceMappingURL=styles.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseFactRef as f,stringifyFactRef as S}from"@spotify/backstage-plugin-soundcheck-common";import{useState as R,useEffect as g,useMemo as c}from"react";import{useWatch as F}from"react-hook-form";import{useGetCollectors as O}from"../../../../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as $}from"../../../../../hooks/collectors/useGetFactSchema.esm.js";import{generateJsonPaths as y}from"../../../utils/checkFormUtils.esm.js";const G=(e,m)=>{const{data:r,isLoading:i}=O(),t=F({control:m,name:`${e}.factRef`}),[n,l]=R(()=>s(t));g(()=>{l(s(t))},[t]);const{data:a}=$(n?.source,n?.name),p=c(()=>a?y(a.schema):[],[a]),d=c(()=>r?.flatMap(u=>u.factNames.map(h=>{const o=f(h,{defaultSource:u.id,defaultScope:"default"});return{label:`${o.source} - ${o.name}`,value:S(o)}})),[r]);return{isLoading:i,pathOptions:p,factRefOptions:d}};function s(e){if(e)try{return f(e,{defaultSource:"unknown",defaultScope:"default"})}catch{return null}return null}export{G as useRuleOptions};
1
+ import{parseFactRef as p,stringifyFactRef as k}from"@spotify/backstage-plugin-soundcheck-common";import{useState as F,useEffect as b,useMemo as f}from"react";import{useWatch as y}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../../api.esm.js";import"../../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as C}from"../../../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetCollectors as G}from"../../../../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as O}from"../../../../../hooks/collectors/useGetFactSchema.esm.js";import{generateJsonPaths as L}from"../../../utils/checkFormUtils.esm.js";const M=(t,d)=>{const{data:c,isLoading:g}=G(),{data:i}=C({}),a=y({control:d,name:`${t}.factRef`}),[s,h]=F(()=>l(a));b(()=>{h(l(a))},[a]);const{data:r}=O(s?.source,s?.name),R=f(()=>r?L(r.schema):[],[r]),S=f(()=>c?.flatMap(o=>o.factNames.map(n=>{const e=p(n,{defaultSource:o.id,defaultScope:"default"});let u=e.name;if(e.source==="soundcheck"){const m=i?.edges.find($=>$.node.id===e.name)?.node;u=m?`${m.type==="campaign"?"Campaign: ":"Track: "}${m.name}`:e.name}return{label:`${e.source} - ${u}`,value:k(e)}}))?.sort((o,n)=>o.label.localeCompare(n.label))??[],[c,i]);return{isLoading:g,pathOptions:R,factRefOptions:S}};function l(t){if(t)try{return p(t,{defaultSource:"unknown",defaultScope:"default"})}catch{return null}return null}export{M as useRuleOptions};
2
2
  //# sourceMappingURL=useRuleOptions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as b,ButtonGroup as f,Button as g}from"@material-ui/core";import n,{useState as E}from"react";import{useFormContext as k,Controller as y}from"react-hook-form";import{ExpressionType as l,ExpressionTypeReadableMap as C}from"../../../types/ExpressionType.esm.js";import"../../../../Frequency/types.esm.js";import"../../../../Frequency/util.esm.js";import"../../../../Frequency/FrequencyComponent.esm.js";import"../../../types/Path.esm.js";const x=b(e=>({button:{backgroundColor:e.palette.background.default},selectedButton:{backgroundColor:e.palette.action.hover}})),B=({name:e,disabled:a})=>{const o=x(),{control:m,getValues:p}=k(),s=`${e}`,c=p(s),[i,u]=E(c||l.AllOf),d=r=>{u(r)};return n.createElement(y,{control:m,name:e,render:({field:{onChange:r}})=>n.createElement(f,{color:"primary"},Object.values(l).map(t=>n.createElement(g,{key:t,className:i===t?`${o.selectedButton} ${o.button}`:`${o.button}`,onClick:()=>{d(t),r(t)},disabled:a},C[t])))})};export{B as ExpressionTypeToggle};
1
+ import{makeStyles as b,ButtonGroup as g,Button as f}from"@material-ui/core";import n,{useState as k}from"react";import{useFormContext as E,Controller as y}from"react-hook-form";import{ExpressionType as a,ExpressionTypeReadableMap as C}from"../../../types/ExpressionType.esm.js";import"../../../../Frequency/types.esm.js";import"../../../../Frequency/util.esm.js";import"../../../../Frequency/FrequencyComponent.esm.js";import"../../../types/Path.esm.js";const x=b(e=>({button:{backgroundColor:e.palette.background.default,padding:e.spacing(.5,1.5)},selectedButton:{backgroundColor:e.palette.action.hover}})),B=({name:e,disabled:l})=>{const o=x(),{control:p,getValues:m}=E(),s=`${e}`,c=m(s),[i,u]=k(c||a.AllOf),d=r=>{u(r)};return n.createElement(y,{control:p,name:e,render:({field:{onChange:r}})=>n.createElement(g,{color:"primary"},Object.values(a).map(t=>n.createElement(f,{key:t,className:i===t?`${o.selectedButton} ${o.button}`:`${o.button}`,onClick:()=>{d(t),r(t)},disabled:l},C[t])))})};export{B as ExpressionTypeToggle};
2
2
  //# sourceMappingURL=ExpressionTypeToggle.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Box as p,Grid as r}from"@material-ui/core";import{makeStyles as b}from"@material-ui/core/styles";import t from"react";import{useFormContext as B}from"react-hook-form";import{AddMenuButton as N}from"./AddMenuButton.esm.js";import"@material-ui/icons/Delete";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"./Conditions/ControlledAutocomplete.esm.js";import"./Conditions/styles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/graphqlKeys.esm.js";import"../../utils/checkFormUtils.esm.js";import{ConditionList as y}from"./Conditions/ConditionList.esm.js";import{ExpressionBox as A}from"./Expressions/ExpressionBox.esm.js";import{ExpressionTypeToggle as C}from"./Expressions/ExpressionTypeToggle.esm.js";import{useRuleInputHandlers as P}from"./useRuleInputHandlers.esm.js";const $=b(e=>({root:{padding:0},inner:{marginLeft:e.spacing(2),paddingBottom:e.spacing(2),borderLeft:`1px solid ${e.palette.border}`,display:"flex",flexDirection:"row",gap:0},connector:{borderBottom:`1px solid ${e.palette.border}`,padding:e.spacing(0),width:"15px",height:"20px"},noPadding:{padding:0}})),k=({name:e,depth:o,disabled:i})=>{const n=$(),{getValues:a,setValue:l,trigger:c}=B(),{handleAddCondition:g,handleAddExpression:x,handleDeleteCondition:f}=P(e,a,l,c),u=`${e}`,m=a(u),E=m?.conditions||[],h=m?.expressions;return t.createElement(p,{className:o>0?n.inner:n.root},o>0&&t.createElement(p,{className:n.connector}),t.createElement(r,{container:!0,spacing:0,direction:"column",className:n.noPadding},t.createElement(r,{item:!0,className:n.noPadding},t.createElement(C,{disabled:i,name:`${e}.expressionType`})),t.createElement(r,{item:!0,container:!0,spacing:0,direction:"column",className:n.noPadding},t.createElement(y,{depth:o,handleDelete:d=>f(d,e),disabled:i,conditions:E,name:e}),h?.map((d,s)=>t.createElement(A,{key:s,expression:d,name:`${e}.expressions[${s}]`,depth:o,disabled:i}))),!i&&t.createElement(r,{item:!0,className:n.noPadding},t.createElement(N,{onAddCondition:g,onAddExpression:x}))))};export{k as RuleInputBox};
1
+ import{Box as s,Grid as r}from"@material-ui/core";import{makeStyles as b}from"@material-ui/core/styles";import t from"react";import{useFormContext as B}from"react-hook-form";import{AddMenuButton as N}from"./AddMenuButton.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"@material-ui/icons/Search";import"../../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../../FactExplorer/FactExplorer.esm.js";import"../../../FactExplorer/FactExplorerContext.esm.js";import"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import"../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"../../utils/checkFormUtils.esm.js";import"./Conditions/ValueListInput.esm.js";import{ConditionList as y}from"./Conditions/ConditionList.esm.js";import{ExpressionBox as A}from"./Expressions/ExpressionBox.esm.js";import{ExpressionTypeToggle as C}from"./Expressions/ExpressionTypeToggle.esm.js";import{useRuleInputHandlers as P}from"./useRuleInputHandlers.esm.js";const $=b(e=>({root:{padding:0},inner:{marginLeft:e.spacing(2),paddingBottom:e.spacing(2),borderLeft:`1px solid ${e.palette.border}`,display:"flex",flexDirection:"row",gap:0},connector:{borderBottom:`1px solid ${e.palette.border}`,padding:e.spacing(0),width:"15px",height:"20px"},noPadding:{padding:0}})),k=({name:e,depth:i,disabled:n})=>{const o=$(),{setValue:l,trigger:c,watch:p}=B(),{handleAddCondition:g,handleAddExpression:x,handleDeleteCondition:f}=P(e,p,l,c),E=`${e}`,d=p(E),u=d?.conditions||[],h=d?.expressions;return t.createElement(s,{className:i>0?o.inner:o.root},i>0&&t.createElement(s,{className:o.connector}),t.createElement(r,{container:!0,spacing:0,direction:"column",className:o.noPadding},t.createElement(r,{item:!0,className:o.noPadding},t.createElement(C,{disabled:n,name:`${e}.expressionType`})),t.createElement(r,{item:!0,container:!0,spacing:0,direction:"column",className:o.noPadding},t.createElement(y,{depth:i,handleDelete:m=>f(m,e),disabled:n,conditions:u,name:e}),h?.map((m,a)=>t.createElement(A,{key:a,expression:m,name:`${e}.expressions[${a}]`,depth:i,disabled:n}))),!n&&t.createElement(r,{item:!0,className:o.noPadding},t.createElement(N,{onAddCondition:g,onAddExpression:x}))))};export{k as RuleInputBox};
2
2
  //# sourceMappingURL=RuleInputBox.esm.js.map
@@ -1,2 +1,2 @@
1
- import{ExpressionType as l}from"../../types/ExpressionType.esm.js";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import"../../types/Path.esm.js";const x=(a,e,i,t)=>({handleAddCondition:async()=>{const n=`${a}`,o=[...e(n)?.conditions||[],{factRef:"",path:"",operator:"",value:""}],s=`${a}.conditions`;i(s,o),await t(s)},handleAddExpression:async()=>{const n=`${a}.expressions`,o=e(n)||[];o.push({expressionType:l.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:""}]}),i(n,o),await t(n)},handleDeleteCondition:async(n,o)=>{const s=o.match(/(.*\.expressions)(?=\[\d+])/)?.[0]||o,p=`${o}.conditions`,r=e(p);if(r.splice(n,1),r.length===0){i(p,void 0);const c=parseInt(o.slice(o.lastIndexOf("[")+1,o.lastIndexOf("]")),10),d=e(s);d[c]?.expressions?.splice(c,1),i(s,d[c]?.expressions?d:void 0),await t(s)}else i(p,r),await t(p)}});export{x as useRuleInputHandlers};
1
+ import{ExpressionType as l}from"../../types/ExpressionType.esm.js";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import"../../types/Path.esm.js";const x=(p,n,i,t)=>({handleAddCondition:async()=>{const o=`${p}`,s=[...n(o)?.conditions||[],{factRef:"",path:"",operator:"",value:""}],e=`${p}.conditions`;i(e,s),await t(e)},handleAddExpression:async()=>{const o=`${p}.expressions`,s=n(o)||[];s.push({expressionType:l.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:""}]}),i(o,s),await t(o)},handleDeleteCondition:async(o,s)=>{const e=s.match(/(.*\.expressions)(?=\[\d+])/)?.[0]||s,a=`${s}.conditions`,r=n(a);if(r.splice(o,1),r.length===0){i(a,void 0);const c=parseInt(s.slice(s.lastIndexOf("[")+1,s.lastIndexOf("]")),10),d=n(e);d[c]?.expressions?.splice(c,1),i(e,d[c]?.expressions?d:void 0),await t(e)}else i(a,r),await t(a)}});export{x as useRuleInputHandlers};
2
2
  //# sourceMappingURL=useRuleInputHandlers.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Typography as r}from"@material-ui/core";import{makeStyles as f}from"@material-ui/core/styles";import{uniqBy as u}from"lodash";import e from"react";import{FormControlledSelect as E}from"../../../FormControlledSelect/FormControlledSelect.esm.js";import{useOptions as v}from"../../../GroupSelector/useOptions.esm.js";import{CHECK_FIELDS as y}from"../../utils/checkFormUtils.esm.js";const b=f(t=>({container:{display:"flex",flexDirection:"column",gap:t.spacing(1)}})),g=({control:t,disabled:a,error:n})=>{const l=b(),{options:i,isLoading:m}=v(),p=u(i.map(o=>({value:o.ref,label:o.name})),"value"),{owner:{name:s,description:c,selectLabel:d}}=y.details;return e.createElement("div",{className:l.container},e.createElement("div",null,e.createElement(r,{variant:"subtitle2"},s),e.createElement(r,{variant:"caption"},c)),e.createElement("div",null,e.createElement(E,{name:"detailsStep.ownerEntityRef",control:t,options:p,placeholder:d,disabled:a||m,helperText:n?.message??void 0})))};export{g as TeamDetailsInput};
1
+ import{parseEntityRef as v}from"@backstage/catalog-model";import{Typography as y}from"@material-ui/core";import{makeStyles as b}from"@material-ui/core/styles";import{uniqBy as g}from"lodash";import o from"react";import{useFormContext as h}from"react-hook-form";import"../../../../contexts/TrackFormContext.esm.js";import"../../../../contexts/CheckFormContext.esm.js";import"../../../../contexts/CampaignFormContext.esm.js";import{useLoggedInUser as w}from"../../../../contexts/UserProvider.esm.js";import{FormControlledAutocomplete as x}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{useLabelOptions as L}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useOptions as S}from"../../../GroupSelector/useOptions.esm.js";import{CHECK_FIELDS as C}from"../../utils/checkFormUtils.esm.js";const R=b(a=>({container:{display:"flex",flexDirection:"column",gap:a.spacing(1)}})),T=({control:a,disabled:l,error:n})=>{const i=R(),{options:p,isLoading:s}=S();let e=g(p.map(m=>({value:m.ref,label:m.name})),"value");const{user:c,userEntityRef:r}=w();r&&(e=[{value:r,label:c?.metadata?.name??r},...e]);const{watch:f}=h(),t=f("detailsStep.ownerEntityRef");t&&r!==t&&!e.some(m=>m.value===t)&&(e=[{value:t,label:v(t).name},...e]);const u=L(e),{owner:{name:d,selectLabel:E}}=C.details;return o.createElement("div",{className:i.container},o.createElement("div",null,o.createElement(y,{variant:"subtitle2"},d)),o.createElement("div",null,o.createElement(x,{freeSolo:!1,name:"detailsStep.ownerEntityRef",control:a,placeholder:E,width:250,helperText:n?.message??void 0,disabled:l||s,...u})))};export{T as TeamDetailsInput};
2
2
  //# sourceMappingURL=TeamDetailsInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as p}from"@material-ui/core/styles";import t from"react";import{useFormContext as n}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as a}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{CheckNameInput as s}from"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CheckDescriptionInput as c}from"../FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js";import{TeamDetailsInput as l}from"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/core";import"@material-ui/icons/Delete";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/graphqlKeys.esm.js";import"../utils/checkFormUtils.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";const d=p(r=>({container:{display:"flex",flexDirection:"column",gap:r.spacing(1)}})),f=()=>{const r=d(),{isLoading:m,isReadOnly:o}=a(),{control:e,formState:{errors:i}}=n();return t.createElement("div",{className:r.container},t.createElement(s,{control:e,error:i?.detailsStep?.name,isLoading:m,disabled:o}),t.createElement(c,{control:e,error:i?.detailsStep?.description,isLoading:m,disabled:o}),t.createElement(l,{control:e,disabled:o,error:i?.detailsStep?.ownerEntityRef}))};export{f as CheckDetailsStep};
1
+ import{makeStyles as p}from"@material-ui/core/styles";import t from"react";import{useFormContext as n}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as a}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{CheckNameInput as s}from"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CheckDescriptionInput as c}from"../FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js";import{TeamDetailsInput as l}from"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/core";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"../utils/checkFormUtils.esm.js";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../FormFields/CheckPathResolverInput.esm.js";const d=p(r=>({container:{display:"flex",flexDirection:"column",gap:r.spacing(1)}})),f=()=>{const r=d(),{isLoading:m,isReadOnly:o}=a(),{control:i,formState:{errors:e}}=n();return t.createElement("div",{className:r.container},t.createElement(s,{control:i,error:e?.detailsStep?.name,isLoading:m,disabled:o}),t.createElement(c,{control:i,error:e?.detailsStep?.description,isLoading:m,disabled:o}),t.createElement(l,{control:i,disabled:o,error:e?.detailsStep?.ownerEntityRef}))};export{f as CheckDetailsStep};
2
2
  //# sourceMappingURL=CheckDetailsStep.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{stringifyEntityRef as l}from"@backstage/catalog-model";import{EntityListProvider as c}from"@backstage/plugin-catalog-react";import{makeStyles as s,Typography as d}from"@material-ui/core";import{isEqual as f}from"lodash";import t from"react";import{useFormContext as y}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as E}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{CheckDryRun as g}from"../../CheckDryRun/CheckDryRun.esm.js";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../CheckDryRun/CheckDryRunDetails.esm.js";import{CheckDryRunProvider as u}from"../../CheckDryRun/CheckDryRunContext.esm.js";import{mapToCheckerInput as v}from"../utils/checkFormUtils.esm.js";import{ExpandableSection as x}from"../../ExpandableSection/ExpandableSection.esm.js";import{FilterPreviewTable as h}from"../../Filter/FilterPreviewTable/FilterPreviewTable.esm.js";import{emptyFilters as m}from"../../Filter/types.esm.js";import{FormattedPreview as S}from"../../FormattedPreview/FormattedPreview.esm.js";const k=s(e=>({container:{display:"flex",flexDirection:"column",gap:e.spacing(2)},preview:{color:e.palette.text.primary,fontSize:e.typography.body1.fontSize,borderTop:`1px solid ${e.palette.divider}`,overflow:"auto",padding:e.spacing(1,2),maxHeight:420,"& pre":{marginTop:0,background:`${e.palette.background.paper} !important`}},previewSection:{marginBottom:e.spacing(2)}})),C=()=>{const e=k(),{getValues:i}=y(),{selectedItem:o}=E(),r=v(i(),o),a=i("filtersStep.filter"),n=f(a,m());return t.createElement(u,null,t.createElement(d,{variant:"body2"},"Take a moment to review your check and perform dry runs to ensure everything is working as expected before you save."),t.createElement("div",{className:e.container},t.createElement(x,{className:e.previewSection,title:"YAML"},t.createElement("div",{className:e.preview},t.createElement(S,{data:{...r,id:o?r.id:"<ID WILL BE GENERATED WHEN CHECK IS SAVED>"},dataType:"yaml"}))),t.createElement(c,{pagination:{limit:10}},t.createElement(h,{title:`Test Against ${n?"All Entities - Search to Get Started":"Applicable Entities"}`,filter:a??m(),hideTags:!0,additionalColumns:[{title:"Dry Run",cellStyle:{padding:"0px 16px 0px 20px"},id:"dry-run",render:p=>t.createElement(t.Fragment,null,t.createElement(g,{check:r,entityRef:l(p)}))}]}))))};export{C as CheckReviewStep};
2
+ //# sourceMappingURL=CheckReviewStep.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Typography as r,FormControlLabel as p,Checkbox as c}from"@material-ui/core";import{makeStyles as s}from"@material-ui/core/styles";import e from"react";import{useFormContext as d,Controller as u}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as E}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import{PassFailMessageInput as C}from"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as f}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as v}from"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Delete";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/graphqlKeys.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";const g=s(t=>({container:{display:"flex",flexDirection:"column",gap:t.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),x=()=>{const t=g(),{isLoading:l,isReadOnly:n}=E(),{control:i}=d(),{rules:a,warnings:o}=f.rulesStep;return e.createElement("div",{className:t.container},e.createElement("div",{className:t.innerContainer},e.createElement("div",null,e.createElement(r,{variant:"subtitle2"},a.name),e.createElement(r,{variant:"caption"},a.description)),e.createElement(v,{disabled:n,name:"rulesStep.expressions",depth:0})),e.createElement(C,{control:i,isLoading:l,disabled:n}),e.createElement("div",{className:t.container},e.createElement("div",{className:t.innerContainer},e.createElement("div",null,e.createElement(r,{variant:"subtitle2"},o.name),e.createElement(r,{variant:"caption"},o.description)),e.createElement(u,{name:"rulesStep.warning",control:i,render:({field:m})=>e.createElement(p,{disabled:n,control:e.createElement(c,{checked:m.value,onChange:m.onChange}),label:o.label})}))))};export{x as CheckRulesStep};
1
+ import{Typography as n,FormControlLabel as p,Checkbox as c}from"@material-ui/core";import{makeStyles as s}from"@material-ui/core/styles";import e from"react";import{useFormContext as d,Controller as u}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as E}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{FormFieldLabel as f}from"../../FormFieldLabel/FormFieldLabel.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import{PassFailMessageInput as C}from"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as h}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as g}from"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import{CheckPathResolverInput as k}from"../FormFields/CheckPathResolverInput.esm.js";const v=s(t=>({container:{display:"flex",flexDirection:"column",gap:t.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),b=()=>{const t=v(),{isLoading:l,isReadOnly:r}=E(),{control:o}=d(),{rules:m,warnings:i}=h.rulesStep;return e.createElement("div",{className:t.container},e.createElement("div",{className:t.innerContainer},e.createElement(k,{control:o}),e.createElement("div",null,e.createElement(f,{title:m.name,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks#rules"}),e.createElement(n,{variant:"caption"},m.description)),e.createElement(g,{disabled:r,name:"rulesStep.expressions",depth:0})),e.createElement(C,{control:o,isLoading:l,disabled:r}),e.createElement("div",{className:t.container},e.createElement("div",{className:t.innerContainer},e.createElement("div",null,e.createElement(n,{variant:"subtitle2"},i.name),e.createElement(n,{variant:"caption"},i.description)),e.createElement(u,{name:"rulesStep.warning",control:o,render:({field:a})=>e.createElement(p,{disabled:r,control:e.createElement(c,{checked:a.value,onChange:a.onChange}),label:i.label})}))))};export{b as CheckRulesStep};
2
2
  //# sourceMappingURL=CheckRulesStep.esm.js.map
@@ -1,2 +1,2 @@
1
- var l=(a=>(a.AllOf="all",a.AnyOf="any",a))(l||{});const n={all:"ALL OF",any:"ANY OF"};export{l as ExpressionType,n as ExpressionTypeReadableMap};
1
+ var n=(a=>(a.AllOf="all",a.AnyOf="any",a.Not="not",a))(n||{});const l={all:"ALL OF",any:"ANY OF",not:"NOT"};export{n as ExpressionType,l as ExpressionTypeReadableMap};
2
2
  //# sourceMappingURL=ExpressionType.esm.js.map
@@ -1,2 +1,2 @@
1
- import{zodResolver as s}from"@hookform/resolvers/zod";import{useForm as a}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as n}from"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{mapCheckerToFormValues as u,mapToCheckerInput as h,DEFAULT_FORM_VALUES as l}from"./utils/checkFormUtils.esm.js";import{checkFormSchema as f}from"./utils/validation.esm.js";const d=t=>{const{selectedItem:o}=c();let e=l;o&&(e=u(o));const m=a({defaultValues:e,mode:"onChange",resolver:s(f)}),{showModal:i}=n();return{formMethods:m,onSubmit:async r=>{if(!await i({title:"Save Check",message:`Are you sure you want to save check: ${r.detailsStep.name}?`,error:!1}))return;const p=h(r,o);t(p)}}};export{d as useCheckForm};
1
+ import{zodResolver as n}from"@hookform/resolvers/zod";import{useForm as a}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as u}from"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as f}from"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{mapCheckerToFormValues as l,mapToCheckerInput as d,DEFAULT_FORM_VALUES as h}from"./utils/checkFormUtils.esm.js";import{checkFormSchema as C}from"./utils/validation.esm.js";const S=m=>{const{selectedItem:e}=c(),{userEntityRef:t}=u();let o=h;e&&(o=l(e)),t&&!o.detailsStep.ownerEntityRef&&(o.detailsStep.ownerEntityRef=t);const i=a({defaultValues:o,mode:"onChange",resolver:n(C)}),{showModal:s}=f();return{formMethods:i,onSubmit:async r=>{if(!await s({title:"Save Check",message:`Are you sure you want to save check: ${r.detailsStep.name}?`,error:!1}))return;const p=d(r,e);m(p)}}};export{S as useCheckForm};
2
2
  //# sourceMappingURL=useCheckForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{FrequencySchema as g}from"@spotify/backstage-plugin-soundcheck-common";import{isObject as w}from"lodash";import{v4 as k}from"uuid";import{mapInputFilterToFormFilters as v,mapFiltersToInputFilter as x,mapFiltersToCatalogFilter as E}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as b}from"../../Filter/types.esm.js";import{TimeUnit as d}from"../../Frequency/types.esm.js";import{isTimeUnit as T}from"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as c}from"../types/ExpressionType.esm.js";import{defaultSchedule as S}from"../types/Schedule.esm.js";import"../types/Path.esm.js";import{CHECK_NAME_MAX_LENGTH as C}from"./validation.esm.js";const h=e=>{if(w(e)&&"frequency"in e){const s=g.safeParse(e.frequency);if(s.success){const t=s.data;if("cron"in t)return{enabled:!0,frequency:{type:"cron",unit:d.Hours,value:1,cron:t.cron}};const r=Object.keys(t);if(r.length){const n=r[0];if(T(n))return{enabled:!0,frequency:{type:"HumanDuration",unit:n,value:t[n]??1,cron:""}}}}}return{enabled:!1,frequency:{type:"HumanDuration",unit:d.Hours,value:1,cron:""}}},m=(e,s)=>{const{enabled:t,frequency:r}=e;if(t){const{cron:n,type:i,unit:a,value:o}=r;return i==="HumanDuration"?{frequency:{[a]:o},filter:E(s)}:{frequency:{cron:n}}}},y=e=>{if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1;const s=Number(e);if(!isNaN(s))return s}return e},p=e=>{if(!e)return{};if(e.expressionType){const s={[e.expressionType]:e.conditions?.map(t=>({factRef:t.factRef,path:t.path,operator:t.operator,value:y(t.value)}))};return e.expressions&&e.expressions.forEach(t=>{s[e.expressionType]?.push(p(t))}),s}if(e.expressions)return e.expressions.map(p);if(e.conditions&&e.conditions.length===1){const s=e.conditions[0];return{factRef:s.factRef,path:s.path,operator:s.operator,value:y(s.value)}}return{}},l=(e,s=!0)=>{if(!e)return{conditions:[]};const t=Object.keys(e),r=t.includes("all")||s&&!t.includes("any")?c.AllOf:c.AnyOf;if(t.includes(r)||s){const n=e[r]||[e],i=[],a=[];return n.forEach(o=>{const f=Object.keys(o);f.includes("all")||f.includes("any")?a.push(l(o,!1)):i.push({factRef:o.factRef,path:o.path,operator:o.operator,value:o.value})}),{expressions:a.length>0?a:void 0,conditions:i,expressionType:r}}return{expressionType:c.AllOf,conditions:[{factRef:e.factRef,path:e.path,operator:e.operator,value:e.value}]}},R=e=>({detailsStep:{name:e.name??"",description:e.description??"",ownerEntityRef:e.ownerEntityRef??""},rulesStep:{expressions:l(e.rule),passedMessage:e.passedMessage??void 0,failedMessage:e.failedMessage??void 0,warning:e.warning??!1},filtersStep:{filter:v(e.filter)},scheduleStep:{schedule:h(e.schedule)}}),M=(e,s)=>{const{detailsStep:t,rulesStep:r,filtersStep:n,scheduleStep:i}=e;return{id:s?s.id:k(),ownerEntityRef:t.ownerEntityRef??void 0,name:t.name,description:t.description,passedMessage:r.passedMessage??void 0,failedMessage:r.failedMessage??void 0,rule:p(r.expressions),warning:r.warning??!1,filter:n.filter?x(n.filter):void 0,schedule:m(i.schedule,n.filter)}},u=(e,s="$")=>{const t=[];if(e.type==="object"&&e.properties){const r=e.properties;for(const n in r)if(r.hasOwnProperty(n)){const i=`${s}.${n}`;t.push(i);const a=r[n];t.push(...u(a,i))}}if(e.type==="array"&&e.items){const r=`${s}[*]`;t.push(r);const n=Array.isArray(e.items)?e.items:[e.items];for(const i of n)t.push(...u(i,r))}return t},A={detailsStep:{name:"",description:"",ownerEntityRef:""},rulesStep:{expressions:{expressionType:c.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:"",conditions:[]}]},warning:!1},filtersStep:{filter:b()},scheduleStep:{schedule:S()}},F={details:{name:{name:"Check name",description:"Give your check a meaningful name so it's easy to remember",helperText:`Max ${C} characters`,placeholder:"Example: Code Coverage Check"},description:{name:"Check description",description:"Give your check a meaningful description so others know what it's for",placeholder:"Example: Ensure code coverage meets the minimum threshold"},owner:{name:"Check owner",description:"Add yourself, or a team, as the owner of this check",selectLabel:"Owner"}},rulesStep:{rules:{name:"Check rules",description:"Add the rules you want your check to enforce"},messages:{name:"Pass/Fail messages (Optional)",description:"Add the messages that will appear to you when checks either pass or fail",passMessagePlaceholder:"Enter pass message...",failMessagePlaceholder:"Enter fail message...",passedTabName:"Passed Message",failedTabName:"Failed Message"},warnings:{name:"Enable warnings",description:"Enable if the check should emit warning check results if it fails",label:"Warning"}},filter:{description:'Setting the filters below will limit the scope of the Check so that only those Entities that match the filter will be monitored by the Check. As an example, choosing a "Kind" of "Component" will make this Check only apply to Entities whose Kind is indeed set to "Component". This would exclude Entities like Groups, Users, APIs, etc. from being impacted by the Check.'},schedule:{description:"By default, checks are executed when any fact they depend on is updated. However, you may also schedule a check to run on a schedule.",checkboxLabel:"Schedule check"}};export{F as CHECK_FIELDS,A as DEFAULT_FORM_VALUES,u as generateJsonPaths,R as mapCheckerToFormValues,p as mapExpressionToRule,h as mapInputScheduleToSchedule,l as mapRuleToExpression,m as mapScheduleToInputSchedule,M as mapToCheckerInput};
1
+ import{FrequencySchema as b}from"@spotify/backstage-plugin-soundcheck-common";import{isObject as T}from"lodash";import{v4 as k}from"uuid";import{mapInputFilterToFormFilters as S,mapFiltersToInputFilter as R,mapFiltersToCatalogFilter as C}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as P}from"../../Filter/types.esm.js";import{TimeUnit as y}from"../../Frequency/types.esm.js";import{isTimeUnit as A}from"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as p}from"../types/ExpressionType.esm.js";import{defaultSchedule as M}from"../types/Schedule.esm.js";import"../types/Path.esm.js";import{CHECK_NAME_MAX_LENGTH as F}from"./validation.esm.js";const g=e=>{if(T(e)&&"frequency"in e){const r=b.safeParse(e.frequency);if(r.success){const t=r.data;if("cron"in t)return{enabled:!0,frequency:{type:"cron",unit:y.Hours,value:1,cron:t.cron}};const s=Object.keys(t);if(s.length){const o=s[0];if(A(o))return{enabled:!0,frequency:{type:"HumanDuration",unit:o,value:t[o]??1,cron:""}}}}}return{enabled:!1,frequency:{type:"HumanDuration",unit:y.Hours,value:1,cron:""}}},x=(e,r)=>{const{enabled:t,frequency:s}=e;if(t){const{cron:o,type:n,unit:a,value:c}=s;return n==="HumanDuration"?{frequency:{[a]:c},filter:C(r)}:{frequency:{cron:o}}}},d=e=>{if(Array.isArray(e))return e.map(r=>d(r));if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1;const r=Number(e);if(!isNaN(r))return r}return e},l=e=>{if(!e)return{};if(e.expressionType){const r={[e.expressionType]:e.conditions?.map(t=>({factRef:t.factRef,path:t.path,operator:t.operatorPrefix?`${t.operatorPrefix}:${t.operator}`:t.operator,value:d(t.value)}))};return e.expressions&&e.expressions.forEach(t=>{r[e.expressionType]?.push(l(t))}),r}if(e.expressions)return e.expressions.map(l);if(e.conditions&&e.conditions.length===1){const r=e.conditions[0];return{factRef:r.factRef,path:r.path,operator:r.operatorPrefix?`${r.operatorPrefix}:${r.operator}`:r.operator,value:d(r.value)}}return{}},v=e=>{if(e?.match(/.:./)){const r=e.split(":");if(["all","any","none"].includes(r[0]))return{operator:r[1],operatorPrefix:r[0]}}return{}},h=(e,r=!0)=>{if(!e)return{conditions:[]};const t=Object.keys(e);let s=t.includes("all")||r&&!t.includes("any")?p.AllOf:p.AnyOf;if(t.includes("not")&&(s=p.Not),t.includes(s)||r){const a=e[s]||[e],c=[],u=[];return a.forEach(i=>{const f=Object.keys(i);if(f.includes("all")||f.includes("any")||f.includes("not"))u.push(h(i,!1));else{const{operator:w,operatorPrefix:E}=v(i.operator);c.push({factRef:i.factRef,path:i.path,operator:w??i.operator,value:i.value,operatorPrefix:E})}}),{expressions:u.length>0?u:void 0,conditions:c,expressionType:s}}const{operator:o,operatorPrefix:n}=v(e.operator);return{expressionType:p.AllOf,conditions:[{factRef:e.factRef,path:e.path,operator:o??e.operator,value:e.value,operatorPrefix:n}]}},O=e=>({detailsStep:{name:e.name??"",description:e.description??"",ownerEntityRef:e.ownerEntityRef??""},rulesStep:{pathResolver:e.pathResolver??"jsonpath",expressions:h(e.rule),passedMessage:e.passedMessage??void 0,failedMessage:e.failedMessage??void 0,warning:e.warning??!1},filtersStep:{filter:S(e.filter)},scheduleStep:{schedule:g(e.schedule)}}),q=(e,r)=>{const{detailsStep:t,rulesStep:s,filtersStep:o,scheduleStep:n}=e;return{id:r?r.id:k(),ownerEntityRef:t.ownerEntityRef??void 0,name:t.name,description:t.description,pathResolver:s.pathResolver,passedMessage:s.passedMessage??void 0,failedMessage:s.failedMessage??void 0,rule:l(s.expressions),warning:s.warning??!1,filter:o.filter?R(o.filter):void 0,schedule:x(n.schedule,o.filter)}},m=(e,r="$")=>{const t=[];if(e.type==="object"&&e.properties){const s=e.properties;for(const o in s)if(s.hasOwnProperty(o)){const n=`${r}.${o}`;t.push(n);const a=s[o];t.push(...m(a,n))}}if(e.type==="array"&&e.items){const s=`${r}[*]`;t.push(s);const o=Array.isArray(e.items)?e.items:[e.items];for(const n of o)t.push(...m(n,s))}return t},N={detailsStep:{name:"",description:"",ownerEntityRef:""},rulesStep:{pathResolver:"jsonpath",expressions:{expressionType:p.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",operatorPrefix:"",value:"",conditions:[]}]},warning:!1},filtersStep:{filter:P()},scheduleStep:{schedule:M()}},$={details:{name:{name:"Check name",helperText:`Max ${F} characters`,placeholder:"Name your check (e.g., 'Code Coverage\u2019)"},description:{name:"Check description",placeholder:"Describe your check clearly so others understand its purpose. e.g., 'Ensure code coverage meets the minimum threshold.'"},owner:{name:"Check owner",selectLabel:"Assign an owner"}},rulesStep:{rules:{name:"Check rules",description:"Define the rules the check will verify."},messages:{name:"Pass/Fail messages (Optional)",description:"Add the messages for check success and failure.",passMessagePlaceholder:"Enter pass message...",failMessagePlaceholder:"Enter fail message...",passedTabName:"Passed Message",failedTabName:"Failed Message"},warnings:{name:"Enable warnings",description:"Enable to classify failures as warnings, so they don\u2019t impact certification.",label:"Warning"}},filter:{description:'Setting the filters below will limit the scope of the Check so that only those Entities that match the filter will be monitored by the Check. As an example, choosing a "Kind" of "Component" will make this Check only apply to Entities whose Kind is indeed set to "Component". This would exclude Entities like Groups, Users, APIs, etc. from being impacted by the Check.'},schedule:{description:"Checks are automatically triggered whenever a dependent fact is updated. When collectors are scheduled, there is generally no need to schedule checks.",checkboxLabel:"Schedule check"}};export{$ as CHECK_FIELDS,N as DEFAULT_FORM_VALUES,m as generateJsonPaths,O as mapCheckerToFormValues,l as mapExpressionToRule,g as mapInputScheduleToSchedule,h as mapRuleToExpression,x as mapScheduleToInputSchedule,q as mapToCheckerInput};
2
2
  //# sourceMappingURL=checkFormUtils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{CheckMessagingSchema as c,CheckDetailsSchema as l,parseFactRef as m}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{isValidCron as p}from"../../../utils/cron.esm.js";import{validateTimeUnitValue as u}from"../../../utils/time.esm.js";import{TimeUnit as f}from"../../Frequency/types.esm.js";import"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as r}from"../types/ExpressionType.esm.js";import"../types/Path.esm.js";const i=t=>{try{return m(t),!0}catch{return"Invalid fact reference. [source]:[scope]/[name]."}},d=100,y=async t=>{if(!await i(t))throw new Error("Fact reference validation failed");return t},a=e.lazy(()=>e.strictObject({factRef:e.string().refine(y,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required"),operator:e.string().min(1,"Required"),value:e.union([e.string().min(1,"Required"),e.number(),e.boolean()]),conditions:e.array(a).optional()})),n=e.lazy(()=>e.strictObject({expressionType:e.enum([r.AllOf,r.AnyOf]).optional(),expressions:e.array(n).optional(),conditions:e.array(a).optional()})),g=e.strictObject({expressions:n}).merge(c),b=e.strictObject({filter:e.strictObject({selectedKinds:e.string().array(),selectedTypes:e.string().array(),selectedLifecycles:e.string().array(),selectedOwners:e.string().array(),selectedSystems:e.string().array(),selectedTags:e.string().array()}).optional()}),h=e.nativeEnum(f),O=({type:t,cron:o,value:s})=>t==="cron"?p(o):t==="HumanDuration"?u(s)===!0:!0,j=e.strictObject({type:e.enum(["HumanDuration","cron"]),unit:h.optional(),value:e.number().min(1,"Value must be greater than 0.").optional(),cron:e.string().optional()}).refine(O,{message:"Invalid frequency configuration"}),v=e.strictObject({enabled:e.boolean(),frequency:j}),S=e.strictObject({schedule:v.optional()}),T=e.strictObject({detailsStep:l,rulesStep:g,filtersStep:b,scheduleStep:S});export{d as CHECK_NAME_MAX_LENGTH,T as checkFormSchema,i as validateFactRef};
1
+ import{CheckMessagingSchema as c,CheckDetailsSchema as p,parseFactRef as l}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FiltersSchema as m,FrequencySchema as f}from"../../../utils/validation.esm.js";import{ExpressionType as t}from"../types/ExpressionType.esm.js";import"../../Frequency/types.esm.js";import"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import"../types/Path.esm.js";const i=r=>{try{return l(r),!0}catch{return"Invalid fact reference. [source]:[scope]/[name]."}},u=100,o=async r=>{if(!await i(r))throw new Error("Fact reference validation failed");return r},a=e.union([e.string().min(1,"Required"),e.number(),e.boolean()]),n=e.lazy(()=>e.strictObject({factRef:e.string().refine(o,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required"),operator:e.string().min(1,"Required"),operatorPrefix:e.string().optional().nullable(),value:a.or(e.array(a).min(1,"Required")).or(e.strictObject({factRef:e.string().refine(o,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required")})),conditions:e.array(n).optional()})),s=e.lazy(()=>e.strictObject({expressionType:e.enum([t.AllOf,t.AnyOf,t.Not]).optional(),expressions:e.array(s).optional(),conditions:e.array(n).optional()})),d=e.strictObject({expressions:s,pathResolver:e.string().optional()}).merge(c),h=e.strictObject({filter:m.optional()}),b=e.strictObject({enabled:e.boolean(),frequency:f}),g=e.strictObject({schedule:b.optional()}),y=e.strictObject({detailsStep:p,rulesStep:d,filtersStep:h,scheduleStep:g});export{u as CHECK_NAME_MAX_LENGTH,y as checkFormSchema,i as validateFactRef};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{withStyles as r}from"@material-ui/core";import i from"@material-ui/icons/Check";import c from"@material-ui/icons/Close";import n from"@material-ui/icons/HelpOutline";import l from"@material-ui/icons/RemoveCircleOutline";import p from"@material-ui/icons/ReportProblemOutlined";import o from"react";import{ResultState as a}from"../../graphql/generated/index.esm.js";import{resultToText as s}from"../../text.esm.js";const f=r(e=>({root:{color:e.palette.success.main}}))(i),d=r(e=>({root:{color:e.palette.error.main}}))(c),u=r(e=>({root:{color:e.palette.warning.main}}))(p),E=r(e=>({root:{color:e.palette.info.main}}))(n),N=r(e=>({root:{color:e.palette.text.disabled}}))(l),b=r(e=>({root:{color:e.palette.error.main}}))(l),h=({result:e,className:m})=>{const t={className:m,"aria-label":s(e),"aria-hidden":!1};return e===a.Passed?o.createElement(f,{...t}):e===a.NotReported?o.createElement(E,{...t}):e===a.Failed?o.createElement(d,{...t}):e===a.Warning?o.createElement(u,{...t}):e===a.NotApplicable?o.createElement(N,{...t}):e===a.Error?o.createElement(b,{...t}):null};export{h as CheckIcon};
1
+ import{withStyles as r}from"@material-ui/core";import i from"@material-ui/icons/Check";import c from"@material-ui/icons/Close";import n from"@material-ui/icons/HelpOutline";import l from"@material-ui/icons/RemoveCircleOutline";import p from"@material-ui/icons/ReportProblemOutlined";import o from"react";import{ResultState as a}from"../../graphql/generated/index.esm.js";import{resultToText as s}from"../../text.esm.js";const f=r(e=>({root:{color:e.palette.success.main}}))(i),d=r(e=>({root:{color:e.palette.error.main}}))(c),u=r(e=>({root:{color:e.palette.warning.main}}))(p),E=r(e=>({root:{color:e.palette.text.primary}}))(n),N=r(e=>({root:{color:e.palette.text.disabled}}))(l),b=r(e=>({root:{color:e.palette.error.main}}))(l),x=({result:e,className:m})=>{const t={className:m,"aria-label":s(e),"aria-hidden":!1};return e===a.Passed?o.createElement(f,{...t}):e===a.NotReported?o.createElement(E,{...t}):e===a.Failed?o.createElement(d,{...t}):e===a.Warning?o.createElement(u,{...t}):e===a.NotApplicable?o.createElement(N,{...t}):e===a.Error?o.createElement(b,{...t}):null};export{x as CheckIcon};
2
2
  //# sourceMappingURL=CheckIcon.esm.js.map