@spotify/backstage-plugin-soundcheck 0.17.0 → 0.18.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 (162) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/config.d.ts +14 -0
  3. package/dist/api.esm.js +1 -1
  4. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  5. package/dist/components/Badges/StatusBadge.esm.js +1 -1
  6. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
  7. package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
  8. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
  9. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  10. package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
  11. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  12. package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +1 -1
  13. package/dist/components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js +1 -1
  14. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  15. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  16. package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
  17. package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
  18. package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
  19. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
  20. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
  21. package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +2 -0
  22. package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +2 -0
  23. package/dist/components/CollectorPage/CollectorFactTable.esm.js +2 -0
  24. package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js +1 -1
  25. package/dist/components/CollectorPage/Configurators/Github/DependabotAlertsFactDetails.esm.js +1 -1
  26. package/dist/components/CollectorPage/Configurators/Github/SecretScanningAlertsFactDetails.esm.js +1 -1
  27. package/dist/components/CollectorPage/Configurators/Github/SecurityAdvisoriesFactDetails.esm.js +1 -1
  28. package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
  29. package/dist/components/CollectorPage/Configurators/SonarQube/IssuesFactDetailsInput.esm.js +1 -1
  30. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  31. package/dist/components/ColorChip/ColorChip.esm.js +2 -0
  32. package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
  33. package/dist/components/Expand/Expand.esm.js +1 -1
  34. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  35. package/dist/components/FactExplorer/FactExplorerContext.esm.js +1 -1
  36. package/dist/components/FactExplorer/FactExplorerDialog.esm.js +1 -1
  37. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  38. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  39. package/dist/components/FilterSidebar/FilterSidebar.esm.js +1 -1
  40. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  41. package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
  42. package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
  43. package/dist/components/GroupHierarchySelector/GroupHierarchyCategorySelection.esm.js +2 -0
  44. package/dist/components/GroupHierarchySelector/GroupHierarchyChip.esm.js +2 -0
  45. package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +2 -0
  46. package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +2 -0
  47. package/dist/components/GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js +2 -0
  48. package/dist/components/GroupHierarchySelector/usePreviousSelectedGroups.esm.js +2 -0
  49. package/dist/components/ImportExportPanel/ImportExportPanel.esm.js +2 -0
  50. package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
  51. package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
  52. package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +1 -1
  53. package/dist/components/OverviewTable/Cell/CheckCell.esm.js +1 -1
  54. package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
  55. package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
  56. package/dist/components/PassingPercentProgressbar/PassPercentageProgressbar.esm.js +2 -0
  57. package/dist/components/QuickstartPage/HowDoIListItem.esm.js +1 -1
  58. package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +1 -1
  59. package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -1
  60. package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +5 -5
  61. package/dist/components/QuickstartPage/WelcomeModal.esm.js +1 -1
  62. package/dist/components/QuickstartPage/styles.esm.js +1 -1
  63. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  64. package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
  65. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +2 -0
  66. package/dist/components/SoundcheckDialog/SoundcheckDialog.esm.js +1 -1
  67. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
  68. package/dist/components/SoundcheckHeader/headerUtil.esm.js +1 -1
  69. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  70. package/dist/components/TechHealth/Filters/FilterProvider.esm.js +1 -1
  71. package/dist/components/TechHealth/Filters/utils.esm.js +1 -1
  72. package/dist/components/TechHealth/Loading/Loading.esm.js +1 -1
  73. package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +1 -1
  74. package/dist/components/TechInsights/ColorLegend.esm.js +2 -0
  75. package/dist/components/TechInsights/ColorSchemeSelector.esm.js +2 -0
  76. package/dist/components/TechInsights/FilterControls.esm.js +2 -0
  77. package/dist/components/TechInsights/HierarchicalTechInsightsPage.esm.js +2 -0
  78. package/dist/components/TechInsights/HierarchyTable.esm.js +2 -0
  79. package/dist/components/TechInsights/LoadingOverlay.esm.js +2 -0
  80. package/dist/components/TechInsights/LowestPerformingTeams.esm.js +2 -0
  81. package/dist/components/TechInsights/NivoCirclePacking.esm.js +2 -0
  82. package/dist/components/TechInsights/NivoIcicle.esm.js +2 -0
  83. package/dist/components/TechInsights/NivoSunburst.esm.js +2 -0
  84. package/dist/components/TechInsights/NivoTreemap.esm.js +2 -0
  85. package/dist/components/TechInsights/SelectedNodeSidebar.esm.js +2 -0
  86. package/dist/components/TechInsights/SummaryTiles.esm.js +2 -0
  87. package/dist/components/TechInsights/TeamComparison/FailingComponentsTable.esm.js +2 -0
  88. package/dist/components/TechInsights/TeamComparison/MultiCheckStatusHistoryChart.esm.js +2 -0
  89. package/dist/components/TechInsights/TeamPerformanceCard.esm.js +2 -0
  90. package/dist/components/TechInsights/TeamPerformanceListCard.esm.js +2 -0
  91. package/dist/components/TechInsights/TeamStatusBar.esm.js +2 -0
  92. package/dist/components/TechInsights/TechInsightsCardsView.esm.js +2 -0
  93. package/dist/components/TechInsights/TechInsightsChartView.esm.js +2 -0
  94. package/dist/components/TechInsights/TechInsightsGroupSelector.esm.js +2 -0
  95. package/dist/components/TechInsights/TechInsightsPage2.esm.js +2 -0
  96. package/dist/components/TechInsights/TechInsightsTableView.esm.js +2 -0
  97. package/dist/components/TechInsights/TechInsightsViewSelector.esm.js +2 -0
  98. package/dist/components/TechInsights/Tiles/TileUtils.esm.js +2 -0
  99. package/dist/components/TechInsights/Tiles/TrackStatusCard.esm.js +2 -0
  100. package/dist/components/TechInsights/TopPerformingTeams.esm.js +2 -0
  101. package/dist/components/TechInsights/ViewModeControls.esm.js +2 -0
  102. package/dist/components/TechInsights/VisualizationBreadcrumb.esm.js +2 -0
  103. package/dist/components/TechInsights/colorContrast.esm.js +2 -0
  104. package/dist/components/TechInsights/findNodePath.esm.js +2 -0
  105. package/dist/components/TechInsights/hierarchy/GroupNode.esm.js +2 -0
  106. package/dist/components/TechInsights/hierarchy/Hierarchy.esm.js +2 -0
  107. package/dist/components/TechInsights/hierarchyToNivo.esm.js +2 -0
  108. package/dist/components/TechInsights/persistence/FavoriteViews.esm.js +2 -0
  109. package/dist/components/TechInsights/styles.esm.js +2 -0
  110. package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +2 -0
  111. package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +1 -1
  112. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
  113. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
  114. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  115. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  116. package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +1 -1
  117. package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
  118. package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
  119. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  120. package/dist/components/TrackSelection/TrackSelection.esm.js +2 -0
  121. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
  122. package/dist/graphql/generated/index.esm.js +301 -76
  123. package/dist/hooks/cache/useEntityCountCached.esm.js +2 -0
  124. package/dist/hooks/cache/useTrackCountCached.esm.js +2 -0
  125. package/dist/hooks/campaigns/useGetCampaigns.esm.js +1 -1
  126. package/dist/hooks/campaigns/useSendCampaignNotification.esm.js +2 -0
  127. package/dist/hooks/catalog/useGetEntityCount.esm.js +2 -0
  128. package/dist/hooks/checks/useImportChecks.esm.js +2 -0
  129. package/dist/hooks/checks/useUpdateCheck.esm.js +1 -1
  130. package/dist/hooks/facets/useFacetFilters.esm.js +1 -1
  131. package/dist/hooks/graphqlKeys.esm.js +1 -1
  132. package/dist/hooks/groups/useAllGroups.esm.js +1 -1
  133. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  134. package/dist/hooks/groups/useUsersGroupClaims.esm.js +1 -1
  135. package/dist/hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js +2 -0
  136. package/dist/hooks/heirarchy/useGetDescendentsOfGroups.esm.js +2 -0
  137. package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +2 -0
  138. package/dist/hooks/heirarchy/useGroupTypeHierarchy.esm.js +2 -0
  139. package/dist/hooks/heirarchy/useHierarchicalTrackStatus.esm.js +2 -0
  140. package/dist/hooks/tracks/useGetAllTracks.esm.js +1 -1
  141. package/dist/hooks/tracks/useGetTracksApplicableEntityCount.esm.js +2 -0
  142. package/dist/hooks/tracks/useImportTracks.esm.js +2 -0
  143. package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +2 -0
  144. package/dist/index.d.ts +3 -0
  145. package/dist/routes.esm.js +1 -1
  146. package/dist/utils/colors.esm.js +1 -1
  147. package/dist/utils/export.esm.js +7 -3
  148. package/dist/utils/helpers.esm.js +2 -0
  149. package/package.json +40 -23
  150. package/dist/components/OrgInsights/OrgInsightsPage.esm.js +0 -2
  151. package/dist/components/OrgInsights/OrgInsightsSidebar.esm.js +0 -2
  152. package/dist/components/OrgInsights/OrgInsightsViewSelector.esm.js +0 -2
  153. package/dist/components/OrgInsights/TrackCardGrid.esm.js +0 -2
  154. package/dist/components/OrgInsights/TrackComparison.esm.js +0 -2
  155. package/dist/components/OrgInsights/TrackStatusTile.esm.js +0 -2
  156. package/dist/components/OrgInsights/styles.esm.js +0 -2
  157. package/dist/components/QuickstartPage/QuickStartChecksCard.esm.js +0 -2
  158. package/dist/components/QuickstartPage/QuickstartCollectorConfigurationsCard.esm.js +0 -2
  159. package/dist/components/QuickstartPage/QuickstartTracksCard.esm.js +0 -2
  160. package/dist/components/TechHealth/Loading/Emoji.esm.js +0 -2
  161. package/dist/components/TechHealth/Loading/EmojiFountain.esm.js +0 -2
  162. package/dist/utils/getGroupFilterFromConfig.esm.js +0 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,61 @@
1
1
  # @spotify/backstage-plugin-soundcheck
2
2
 
3
+ ## 0.18.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependency `@types/git-url-parse` to `^16.0.0`.
8
+ - Updated dependency `@types/jest` to `^30.0.0`.
9
+ - Updated dependency `slate` to `^0.117.0`.
10
+ Updated dependency `slate-history` to `0.113.1`.
11
+ Updated dependency `slate-react` to `^0.117.0`.
12
+ - Updated dependency `backstage` to `1.41.1`.
13
+ - Soundcheck - Adds pseudo landing page for portal installs only.
14
+ - Added initial integration details page.
15
+ - Updates the loading screen used by Soundcheck to display a useful message instead of a simple icon.
16
+ - Changed fact explorer to allow an arbitrary fact ref to use for custom tracks.
17
+ - Removed some MUI v5 dependencies
18
+ - Added applicableEntitiesCount property to Track graphql API.
19
+ - Made it more obvious in the Check form that we do not recommend scheduling checks.
20
+ - Added advanced group selection to tech insights page
21
+ - Updated types.
22
+ - Fixed issue where checks with check results pushed in through API would not have a check insights page.
23
+ - Fixed Soundcheck fact collector references in No-Code UI.
24
+ - Updated dependencies
25
+ - Updated dependencies
26
+ - Updated dependencies
27
+ - Updated dependencies
28
+ - Updated dependencies
29
+ - @spotify/backstage-plugin-core@0.8.9
30
+ - @spotify/backstage-plugin-soundcheck-common@0.18.1
31
+
32
+ ## 0.18.0
33
+
34
+ ### Minor Changes
35
+
36
+ - BREAKING CHANGE: Updates were made to the CampaignStore interface in Soundcheck. A new method was added: 'getCampaignsByTrackIds', which returns campaigns not by the campaign id but by the track id used by the campaign.
37
+ - Added ability to send a notification to owners of all entities that are still failing a Campaign from the Campaign view page. Permissions for this can be configured via the RBAC role: `soundcheck.campaign.notifications.create`. **DB Migration required to add some indexes.**
38
+
39
+ ### Patch Changes
40
+
41
+ - Added possibility to specify a number of days for historical status in Check and Track Insights.
42
+ - Added possibility to export all tracks and import tracks from YAML.
43
+ - Top failing checks are now grouped by level in Track Insights.
44
+ - Fixed some minor color issues on the UI.
45
+ - Added updated timestamp to tooltip on overview page check results.
46
+ - Setting `status` badge type as default for pre-canned tracks and new tracks created via No-Code UI.
47
+ - Added possibility to export all checks and import checks from YAML.
48
+ - Resolved an issue with Track Insight's history chart area colors.
49
+ - Track Insights now uses a 100% stacked area chart.
50
+ - Updates Soundcheck to prepare for the coming leadership insights page. No user-facing changes.
51
+ - Updated dependencies
52
+ - Updated dependencies
53
+ - Updated dependencies
54
+ - Updated dependencies
55
+ - Updated dependencies
56
+ - Updated dependencies
57
+ - @spotify/backstage-plugin-soundcheck-common@0.18.0
58
+
3
59
  ## 0.17.0
4
60
 
5
61
  ### Minor Changes
package/config.d.ts CHANGED
@@ -31,5 +31,19 @@ export interface Config {
31
31
  */
32
32
  group?: EntityFilter;
33
33
  };
34
+ /**
35
+ * Settings to enable notifications and integration with the backstage notifications plugin.
36
+ * Controls notifications on a global scale.
37
+ *
38
+ * @visibility frontend
39
+ */
40
+ notifications?: {
41
+ /**
42
+ * Enabled or disable notification on a global level.
43
+ *
44
+ * @visibility frontend
45
+ */
46
+ enabled?: boolean;
47
+ };
34
48
  };
35
49
  }
package/dist/api.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createApiRef as c}from"@backstage/core-plugin-api";import{GraphQLClient as h}from"graphql-request";import{getSdk as u}from"./graphql/generated/index.esm.js";const y=c({id:"plugin.soundcheck"}),o=n=>"response"in n&&"errors"in n.response,g=n=>"response"in n&&"message"in n.response;class l{#s;#a;#t;constructor(t){this.#s=t.fetchApi,this.#a=t.discoveryApi;const e=new h("/graphql",{fetch:async(s,a)=>{const i=`${await this.#a.getBaseUrl("soundcheck")}${s}`;return this.#s.fetch(i,a)}});this.#t=u(e)}#n=t=>o(t)?t.response?.errors?.[0].message??`${t}`:g(t)?t.response.message:`${t}`;#e=async t=>{try{return await t()}catch(e){throw new Error(`Error from Soundcheck backend: ${this.#n(e)}`)}};async getAllCertifications(t,e=!1,s=!1){return this.#e(async()=>{const{certifications:a}=await this.#t.getAllCertifications({entityRef:t,includeFilteredChecks:e,includeDraftTracks:s});return a})}async getCertificationDetails(t,e=!1,s=!1){return this.#e(async()=>{const{certifications:a}=await this.#t.getCertificationDetails({entityRef:t,includeFilteredChecks:e,includeDraftTracks:s});return a})}async getCertificationDetailsForTrack(t,e,s){return this.#e(async()=>{const{trackCertification:a}=await this.#t.getCertificationDetailsForTrack({entityRef:t,trackId:e,includeFilteredChecks:s});return a})}async getCheckResultDetails(t,e,s){return this.#e(async()=>{const{checkResult:a}=await this.#t.getCheckResultDetails({entityRef:t,trackId:e,checkId:s});return a})}async getFacetsForOwner(t){return this.#e(async()=>{const{facetsForOwner:e}=await this.#t.getFacetsForOwner({ownerEntityRef:t});return e})}async getTrackOverviewForOwner(t,e,s,a,i){return this.#e(async()=>{const{trackOverviewForOwner:r}=await this.#t.getTrackOverviewForOwner({ownerEntityRef:t,facet:e,first:s,after:a,entitySearch:i});return r})}async getTracks(t){return this.#e(async()=>{const{tracks:e}=await this.#t.getTracks({filter:t});return e})}async getTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.getTrack({id:t});return e})}async createTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.createTrack({input:t});return e})}async updateTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.updateTrack({input:t});return e})}async deleteTrack(t){return this.#e(async()=>{const{trackDeleted:e}=await this.#t.deleteTrack({trackId:t});return e})}async getPlaylists(t){return this.#e(async()=>{const{playlists:e}=await this.#t.getPlaylists({entityRef:t});return e})}async getOperators(){return this.#e(async()=>{const{operators:t}=await this.#t.getOperators();return t})}async getCheck(t){return this.#e(async()=>(await this.#t.getCheck({id:t})).check)}async getChecks(t){return this.#e(async()=>{const{checkers:e}=await this.#t.getCheckers({filter:t});return e})}async getExecutableChecks(){return this.#e(async()=>{const{executableChecks:t}=await this.#t.getExecutableChecks();return t})}async createCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.createCheck({input:t});return e})}async updateCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.updateCheck({input:t});return e})}async deleteCheck(t){return this.#e(async()=>await this.#t.deleteChecker({checkerId:t}))}async executeCheck(t){return this.#e(async()=>{const{result:e}=await this.#t.executeCheck({input:t});return e})}async setEntityExempt(t){return this.#e(async()=>{const{setEntityExempt:e}=await this.#t.setEntityExempt({input:t});return e})}async setManualCheckResult(t){return this.#e(async()=>await this.#t.setManualCheckResult({input:t}))}async deleteExemption(t,e){return this.#e(async()=>await this.#t.deleteExemption({checkId:t,entityRef:e}))}async getExemption(t,e){return this.#e(async()=>await this.#t.getExemption({checkId:t,entityRef:e}))}async getExemptions(t,e,s,a,i){return this.#e(async()=>await this.#t.getExemptions({checkId:t,first:e,after:s,last:a,before:i}))}async getExemptCheckIds(t,e){return this.#e(async()=>await this.#t.getExemptCheckIds({entityRef:t,trackId:e}))}async getCollectors(t){return this.#e(async()=>{const{collectors:e}=await this.#t.getCollectors({ids:t});return e})}async getFactSchema(t,e){if(!(!t||!e))return this.#e(async()=>{const{factSchema:s}=await this.#t.getFactSchemas({collectorId:t,factName:e});return s})}async updateCollectorConfig(t){return this.#e(async()=>{const{collector:e}=await this.#t.updateCollectorConfig({input:t});return e})}async getOverallCheckPassRates(t){return this.#e(async()=>await this.#t.getOverallCheckPassRates({filter:t}))}async getIndividualCheckPassRates(t){return this.#e(async()=>await this.#t.getIndividualCheckPassRates({filter:t}))}async getOverallTrackPassRate(t){return this.#e(async()=>await this.#t.getOverallTrackPassRate({filter:t}))}async getIndividualTrackPassRate(t){return this.#e(async()=>await this.#t.getIndividualTrackPassRate({filter:t}))}async getOverallEntityPassRates(t){return this.#e(async()=>await this.#t.getOverallEntityPassRates({filter:t}))}async getIndividualEntityPassRates(t){return this.#e(async()=>await this.#t.getIndividualEntityPassRates({input:t}))}async getOverallGroupPassRates(t){return this.#e(async()=>await this.#t.getOverallGroupPassRates({input:t}))}async getIndividualGroupPassRates(t){return this.#e(async()=>await this.#t.getIndividualGroupPassRates({input:t}))}async getEntityRefsForTechHealthFilter(t){return this.#e(async()=>await this.#t.getEntityRefsForTechHealthFilter({ownerEntityRef:t}))}async getTrackEntities(t){return this.#e(async()=>await this.#t.getTrackEntities({input:t}))}async getCampaigns(t){return this.#e(async()=>{const{campaigns:e}=await this.#t.getCampaigns({filter:t});return e})}async createCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.createCampaign({input:t});return e})}async updateCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.updateCampaign({input:t});return e})}async deleteCampaign(t){return this.#e(async()=>{const{campaignDeleted:e}=await this.#t.deleteCampaign({campaignId:t});return e})}async archiveCampaign(t){return this.#e(async()=>{const{campaignArchived:e}=await this.#t.archiveCampaign({campaignId:t});return e})}async getCampaignOwners(){return this.#e(async()=>{const{campaignOwners:t}=await this.#t.getCampaignOwners();return t})}async getCheckOwners(){return this.#e(async()=>{const{checkOwners:t}=await this.#t.getCheckOwners();return t})}async getTrackOwners(){return this.#e(async()=>{const{trackOwners:t}=await this.#t.getTrackOwners();return t})}async getCertificationStatus(t){return this.#e(async()=>this.#t.getCertificationStatus({input:t}))}async getCertificationStatusHistory(t){return this.#e(async()=>this.#t.getCertificationStatusHistory({input:t}))}async getCheckStatus(t){return this.#e(async()=>(await this.#t.getCheckStatus({input:t})).checkStatus)}async getCheckStatuses(t){return this.#e(async()=>(await this.#t.getCheckStatuses({input:t})).checkStatuses)}async getCheckStatusHistory(t){return this.#e(async()=>(await this.#t.getCheckStatusHistory({input:t})).checkStatusHistory)}async getCheckStatusHistories(t){return this.#e(async()=>(await this.#t.getCheckStatusHistories({input:t})).checkStatusHistories)}async getCheckEntities(t){return this.#e(async()=>await this.#t.getCheckEntities({input:t}))}async getPathResolvers(){return this.#e(async()=>{const{pathResolvers:t}=await this.#t.getPathResolvers();return t})}async getCheckTemplates(){return this.#e(async()=>{const{checkerTemplates:t}=await this.#t.getCheckTemplates();return t})}async getFact(t){return this.#e(async()=>{const{fact:e}=await this.#t.getFact(t);return e})}}export{l as SoundcheckApi,y as soundcheckApiRef};
1
+ import{createApiRef as c}from"@backstage/core-plugin-api";import{GraphQLClient as u}from"graphql-request";import{getSdk as h}from"./graphql/generated/index.esm.js";const y=c({id:"plugin.soundcheck"}),o=r=>"response"in r&&"errors"in r.response,g=r=>"response"in r&&"message"in r.response;class p{#s;#a;#t;constructor(t){this.#s=t.fetchApi,this.#a=t.discoveryApi;const e=new u("/graphql",{fetch:async(s,a)=>{const i=`${await this.#a.getBaseUrl("soundcheck")}${s}`;return this.#s.fetch(i,a)}});this.#t=h(e)}#r=t=>o(t)?t.response?.errors?.[0].message??`${t}`:g(t)?t.response.message:`${t}`;#e=async t=>{try{return await t()}catch(e){throw new Error(`Error from Soundcheck backend: ${this.#r(e)}`)}};async getMultipleTrackStatuses(t){return this.#e(async()=>{const{multipleTrackStatuses:e}=await this.#t.getMultipleTrackStatuses({input:t});return e})}async getAllCertifications(t,e=!1,s=!1){return this.#e(async()=>{const{certifications:a}=await this.#t.getAllCertifications({entityRef:t,includeFilteredChecks:e,includeDraftTracks:s});return a})}async getCertificationDetails(t,e=!1,s=!1){return this.#e(async()=>{const{certifications:a}=await this.#t.getCertificationDetails({entityRef:t,includeFilteredChecks:e,includeDraftTracks:s});return a})}async getCertificationDetailsForTrack(t,e,s){return this.#e(async()=>{const{trackCertification:a}=await this.#t.getCertificationDetailsForTrack({entityRef:t,trackId:e,includeFilteredChecks:s});return a})}async getCheckResultDetails(t,e,s){return this.#e(async()=>{const{checkResult:a}=await this.#t.getCheckResultDetails({entityRef:t,trackId:e,checkId:s});return a})}async getFacetsForOwner(t){return this.#e(async()=>{const{facetsForOwner:e}=await this.#t.getFacetsForOwner({ownerEntityRef:t});return e})}async getTrackOverviewForOwner(t,e,s,a,i){return this.#e(async()=>{const{trackOverviewForOwner:n}=await this.#t.getTrackOverviewForOwner({ownerEntityRef:t,facet:e,first:s,after:a,entitySearch:i});return n})}async getTracks(t){return this.#e(async()=>{const{tracks:e}=await this.#t.getTracks({filter:t});return e})}async getTracksApplicableEntityCount(t,e){return this.#e(async()=>{const{tracks:s}=await this.#t.getTracksApplicableEntityCount({filter:t,groupRef:e});return s?.edges?.map(({node:a})=>({id:a.id,applicableEntityCount:a.applicableEntityCount??0}))})}async getTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.getTrack({id:t});return e})}async createTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.createTrack({input:t});return e})}async updateTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.updateTrack({input:t});return e})}async deleteTrack(t){return this.#e(async()=>{const{trackDeleted:e}=await this.#t.deleteTrack({trackId:t});return e})}async importTracks(t){return this.#e(async()=>{const{status:e}=await this.#t.importTracks({tracks:t});return e})}async getPlaylists(t){return this.#e(async()=>{const{playlists:e}=await this.#t.getPlaylists({entityRef:t});return e})}async getOperators(){return this.#e(async()=>{const{operators:t}=await this.#t.getOperators();return t})}async getCheck(t){return this.#e(async()=>(await this.#t.getCheck({id:t})).check)}async getChecks(t){return this.#e(async()=>{const{checkers:e}=await this.#t.getCheckers({filter:t});return e})}async getExecutableChecks(){return this.#e(async()=>{const{executableChecks:t}=await this.#t.getExecutableChecks();return t})}async createCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.createCheck({input:t});return e})}async updateCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.updateCheck({input:t});return e})}async deleteCheck(t){return this.#e(async()=>await this.#t.deleteChecker({checkerId:t}))}async executeCheck(t){return this.#e(async()=>{const{result:e}=await this.#t.executeCheck({input:t});return e})}async importChecks(t){return this.#e(async()=>{const{status:e}=await this.#t.importCheckers({checkers:t});return e})}async setEntityExempt(t){return this.#e(async()=>{const{setEntityExempt:e}=await this.#t.setEntityExempt({input:t});return e})}async setManualCheckResult(t){return this.#e(async()=>await this.#t.setManualCheckResult({input:t}))}async deleteExemption(t,e){return this.#e(async()=>await this.#t.deleteExemption({checkId:t,entityRef:e}))}async getExemption(t,e){return this.#e(async()=>await this.#t.getExemption({checkId:t,entityRef:e}))}async getExemptions(t,e,s,a,i){return this.#e(async()=>await this.#t.getExemptions({checkId:t,first:e,after:s,last:a,before:i}))}async getExemptCheckIds(t,e){return this.#e(async()=>await this.#t.getExemptCheckIds({entityRef:t,trackId:e}))}async getCollectors(t){return this.#e(async()=>{const{collectors:e}=await this.#t.getCollectors({ids:t});return e})}async getFactSchema(t,e){if(!(!t||!e))return this.#e(async()=>{const{factSchema:s}=await this.#t.getFactSchemas({collectorId:t,factName:e});return s})}async updateCollectorConfig(t){return this.#e(async()=>{const{collector:e}=await this.#t.updateCollectorConfig({input:t});return e})}async getOverallCheckPassRates(t){return this.#e(async()=>await this.#t.getOverallCheckPassRates({filter:t}))}async getIndividualCheckPassRates(t){return this.#e(async()=>await this.#t.getIndividualCheckPassRates({filter:t}))}async getOverallTrackPassRate(t){return this.#e(async()=>await this.#t.getOverallTrackPassRate({filter:t}))}async getIndividualTrackPassRate(t){return this.#e(async()=>await this.#t.getIndividualTrackPassRate({filter:t}))}async getOverallEntityPassRates(t){return this.#e(async()=>await this.#t.getOverallEntityPassRates({filter:t}))}async getIndividualEntityPassRates(t){return this.#e(async()=>await this.#t.getIndividualEntityPassRates({input:t}))}async getOverallGroupPassRates(t){return this.#e(async()=>await this.#t.getOverallGroupPassRates({input:t}))}async getIndividualGroupPassRates(t){return this.#e(async()=>await this.#t.getIndividualGroupPassRates({input:t}))}async getEntityRefsForTechHealthFilter(t){return this.#e(async()=>await this.#t.getEntityRefsForTechHealthFilter({ownerEntityRef:t}))}async getTrackEntities(t){return this.#e(async()=>await this.#t.getTrackEntities({input:t}))}async getCampaigns(t,e){return this.#e(async()=>{const{campaigns:s}=await this.#t.getCampaigns({filter:t,byTrackIds:e});return s})}async createCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.createCampaign({input:t});return e})}async updateCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.updateCampaign({input:t});return e})}async deleteCampaign(t){return this.#e(async()=>{const{campaignDeleted:e}=await this.#t.deleteCampaign({campaignId:t});return e})}async sendCampaignNotification(t){return this.#e(async()=>{const{sendCampaignNotification:e}=await this.#t.sendCampaignNotification({input:t});return e})}async archiveCampaign(t){return this.#e(async()=>{const{campaignArchived:e}=await this.#t.archiveCampaign({campaignId:t});return e})}async getCampaignOwners(){return this.#e(async()=>{const{campaignOwners:t}=await this.#t.getCampaignOwners();return t})}async getCheckOwners(){return this.#e(async()=>{const{checkOwners:t}=await this.#t.getCheckOwners();return t})}async getTrackOwners(){return this.#e(async()=>{const{trackOwners:t}=await this.#t.getTrackOwners();return t})}async getCertificationStatus(t){return this.#e(async()=>this.#t.getCertificationStatus({input:t}))}async getCertificationStatusHistory(t){return this.#e(async()=>this.#t.getCertificationStatusHistory({input:t}))}async getTrackStatusHistory(t){return this.#e(async()=>(await this.#t.getTrackStatusHistory({input:t})).trackStatusHistory)}async getTrackStatusHistories(t){return this.#e(async()=>(await this.#t.getTrackStatusHistories({input:t})).trackStatusHistories)}async getCheckStatus(t){return this.#e(async()=>(await this.#t.getCheckStatus({input:t})).checkStatus)}async getCheckStatuses(t){return this.#e(async()=>(await this.#t.getCheckStatuses({input:t})).checkStatuses)}async getCheckStatusHistory(t){return this.#e(async()=>(await this.#t.getCheckStatusHistory({input:t})).checkStatusHistory)}async getCheckStatusHistories(t){return this.#e(async()=>(await this.#t.getCheckStatusHistories({input:t})).checkStatusHistories)}async getCheckEntities(t){return this.#e(async()=>await this.#t.getCheckEntities({input:t}))}async getSavedViews(t){return this.#e(async()=>await this.#t.getSavedViews({input:t}))}async saveView(t){return this.#e(async()=>{const{saveView:e}=await this.#t.saveView({input:t});return e})}async deleteView(t){return this.#e(async()=>{const{deleteView:e}=await this.#t.deleteView({input:t});return e})}async getPathResolvers(){return this.#e(async()=>{const{pathResolvers:t}=await this.#t.getPathResolvers();return t})}async getCheckTemplates(){return this.#e(async()=>{const{checkerTemplates:t}=await this.#t.getCheckTemplates();return t})}async getFact(t){return this.#e(async()=>{const{fact:e}=await this.#t.getFact(t);return e})}async getRootGroups(){return this.#e(async()=>{const{rootGroups:t}=await this.#t.rootGroups();return t})}async getDescendantsOfGroups(t){return this.#e(async()=>{const{getDescendantsOfGroups:e}=await this.#t.getDescendentsOfGroups({ids:t});return e})}async getAncestorsOfGroups(t){return this.#e(async()=>{const{getAncestorsOfGroups:e}=await this.#t.getAncestorsOfGroups({ids:t});return e})}async getGroupTypeHierarchy(){return this.#e(async()=>{const{groupTypeHierarchy:t}=await this.#t.getGroupTypeHierarchy();return t})}async getGroupHierarchy(t,e,s){return this.#e(async()=>{const{groupHierarchy:a}=await this.#t.getGroupHierarchy({groupRef:t,ownedEntitiesFilter:e,includeParent:s});return a})}async getHierarchicalTrackStatus(t,e){return this.#e(async()=>{const{hierarchicalTrackStatus:s}=await this.#t.getHierarchicalTrackStatus({trackId:t,groupRef:e});return s})}async getHierarchicalTrackStatuses(t,e){return this.#e(async()=>{const{hierarchicalTrackStatuses:s}=await this.#t.getHierarchicalTrackStatuses({trackIds:t,groupRef:e});return s})}}export{p as SoundcheckApi,y as soundcheckApiRef};
2
2
  //# sourceMappingURL=api.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o}from"react/jsx-runtime";import{compatWrapper as c}from"@backstage/core-compat-api";import{createExtensionDataRef as s,createExtensionBlueprint as g,coreExtensionData as t,ExtensionBoundary as l}from"@backstage/frontend-plugin-api";import{lazy as f}from"react";import{RoutingPageWrapper as m}from"../components/RoutingPage/RoutingPage.esm.js";const e=s().with({id:"soundcheck.integrationId"}),h=g({kind:"integration",attachTo:[{id:"page:soundcheck/SoundcheckRoutingPage",input:"integrations"},{id:"app/routes",input:"routes"}],output:[t.routePath,t.reactElement,t.routeRef.optional(),e],dataRefs:{integrationId:e},*factory({integrationId:n,loader:r,path:a,routeRef:i},{node:d}){const p=f(()=>r().then(u=>({default:()=>u})));yield t.routePath(a??`/soundcheck/integrations/${n}`),yield t.reactElement(c(o(l,{node:d,children:o(m,{children:o(p,{})})}))),i&&(yield t.routeRef(i)),yield e(n)}});export{h as IntegrationPageBlueprint,e as integrationIdExtensionDataRef};
1
+ import{jsx as o}from"react/jsx-runtime";import{compatWrapper as c}from"@backstage/core-compat-api";import{createExtensionDataRef as s,createExtensionBlueprint as g,coreExtensionData as t,ExtensionBoundary as l}from"@backstage/frontend-plugin-api";import{lazy as f}from"react";import{RoutingPageWrapper as m}from"../components/RoutingPage/RoutingPage.esm.js";const e=s().with({id:"soundcheck.integrationId"}),h=g({kind:"integration",attachTo:[{id:"page:soundcheck/SoundcheckRoutingPage",input:"integrations"},{id:"app/routes",input:"routes"}],output:[t.routePath,t.reactElement,t.routeRef.optional(),e],dataRefs:{integrationId:e},*factory({integrationId:n,loader:r,path:a,routeRef:i},{node:d}){const p=f(()=>r().then(u=>({default:()=>u})));yield t.routePath(a??`/soundcheck/integrations/${n}/edit`),yield t.reactElement(c(o(l,{node:d,children:o(m,{children:o(p,{})})}))),i&&(yield t.routeRef(i)),yield e(n)}});export{h as IntegrationPageBlueprint,e as integrationIdExtensionDataRef};
2
2
  //# sourceMappingURL=IntegrationPageBlueprint.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,Fragment as k,jsxs as d}from"react/jsx-runtime";import{makeStyles as C,useTheme as b,Box as y,Tooltip as $}from"@material-ui/core";import z from"@material-ui/icons/Check";import N from"@material-ui/icons/Close";import v from"@material-ui/icons/PriorityHigh";import x from"@mui/icons-material/QuestionMark";import W from"classnames";import{CircularProgressbarWithChildren as p,buildStyles as c}from"react-circular-progressbar";import"react-circular-progressbar/dist/styles.css";const u=24,w=15,h=s=>s==="small"?1:2,L=C(s=>({root:{position:"relative",display:"inline-block",alignItems:"center",justifyContent:"center",cursor:"default",lineHeight:0,width:({size:t})=>`${u*h(t)}px`,height:({size:t})=>`${u*h(t)}px`},icon:{color:s.palette.background.default,fontSize:({size:t})=>w*h(t)}})),S=({className:s,status:t,size:f="small"})=>{const l=L({size:f}),n=b();if(!t)return e(k,{});const o=t.passed+t.failed+t.warning+t.error+t.notReported,r=o?t.passed/o*100:0,a=o?t.warning/o*100:0,i=o?(t.failed+t.error)/o*100:0,m=100-r-a-i,g=e(y,{className:W(s,l.root),role:"img","aria-label":`${r} badge`,children:d(p,{value:r,strokeWidth:r<100?15:50,styles:c({pathColor:n.palette.success.main,trailColor:"transparent",strokeLinecap:"butt",rotation:0}),children:[r===100&&e(z,{className:l.icon}),r<100&&d(p,{value:a,strokeWidth:a<100?15:50,styles:c({pathColor:n.palette.warning.main,trailColor:"transparent",strokeLinecap:"butt",rotation:r/100}),children:[a===100&&e(v,{className:l.icon}),a<100&&d(p,{value:i,strokeWidth:i<100?15:50,styles:c({pathColor:n.palette.error.main,trailColor:"transparent",strokeLinecap:"butt",rotation:(r+a)/100}),children:[i===100&&e(N,{className:l.icon}),i<100&&e(p,{value:m,strokeWidth:m<100?15:50,styles:c({pathColor:n.palette.divider,trailColor:"transparent",strokeLinecap:"butt",rotation:(r+a+i)/100}),children:m===100&&e(x,{className:l.icon})})]})]})]})});return e($,{title:`${t.passed}/${o} checks passed (${Math.round(r)}%)`,children:g})};export{S as StatusBadge};
1
+ import{jsx as e,Fragment as k,jsxs as d}from"react/jsx-runtime";import{makeStyles as C,useTheme as b,Box as y,Tooltip as $}from"@material-ui/core";import z from"@material-ui/icons/Check";import N from"@material-ui/icons/Close";import v from"@material-ui/icons/HelpOutline";import x from"@material-ui/icons/PriorityHigh";import W from"classnames";import{CircularProgressbarWithChildren as p,buildStyles as c}from"react-circular-progressbar";import"react-circular-progressbar/dist/styles.css";const u=24,w=15,h=s=>s==="small"?1:2,L=C(s=>({root:{position:"relative",display:"inline-block",alignItems:"center",justifyContent:"center",cursor:"default",lineHeight:0,width:({size:t})=>`${u*h(t)}px`,height:({size:t})=>`${u*h(t)}px`},icon:{color:s.palette.background.default,fontSize:({size:t})=>w*h(t)}})),S=({className:s,status:t,size:f="small"})=>{const l=L({size:f}),n=b();if(!t)return e(k,{});const o=t.passed+t.failed+t.warning+t.error+t.notReported,r=o?t.passed/o*100:0,a=o?t.warning/o*100:0,i=o?(t.failed+t.error)/o*100:0,m=100-r-a-i,g=e(y,{className:W(s,l.root),role:"img","aria-label":`${r} badge`,children:d(p,{value:r,strokeWidth:r<100?15:50,styles:c({pathColor:n.palette.success.main,trailColor:"transparent",strokeLinecap:"butt",rotation:0}),children:[r===100&&e(z,{className:l.icon}),r<100&&d(p,{value:a,strokeWidth:a<100?15:50,styles:c({pathColor:n.palette.warning.main,trailColor:"transparent",strokeLinecap:"butt",rotation:r/100}),children:[a===100&&e(x,{className:l.icon}),a<100&&d(p,{value:i,strokeWidth:i<100?15:50,styles:c({pathColor:n.palette.error.main,trailColor:"transparent",strokeLinecap:"butt",rotation:(r+a)/100}),children:[i===100&&e(N,{className:l.icon}),i<100&&e(p,{value:m,strokeWidth:m<100?15:50,styles:c({pathColor:n.palette.divider,trailColor:"transparent",strokeLinecap:"butt",rotation:(r+a+i)/100}),children:m===100&&e(v,{className:l.icon})})]})]})]})});return e($,{title:`${t.passed}/${o} checks passed (${Math.round(r)}%)`,children:g})};export{S as StatusBadge};
2
2
  //# sourceMappingURL=StatusBadge.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as l,jsx as o}from"react/jsx-runtime";import{makeStyles as g,Typography as m}from"@material-ui/core";import{uniqBy as h}from"lodash";import"../../../../contexts/TrackFormContext.esm.js";import"../../../../contexts/CheckFormContext.esm.js";import"../../../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as v}from"../../../../contexts/UserProvider.esm.js";import{useGroupOptions as x}from"../../../../hooks/groups/useGroupOptions.esm.js";import{FormControlledAutocomplete as y}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as w}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import{CAMPAIGN_FIELDS as b}from"../../utils/campaignFormUtils.esm.js";const C=g(e=>({helperText:{marginLeft:0},selectField:{display:"flex",flexDirection:"column",gap:e.spacing(1),marginBottom:e.spacing(2)},fieldContainer:{width:"250px"}})),F=({control:e,errors:p,isLoading:s,disabled:d})=>{const i=C(),{owner:t}=b.details,{options:c}=x(),{user:f,userEntityRef:n}=v();let r=h(c?.map(a=>({value:a.ref,label:a.name})),"value");const u=w(r);return n&&(r=[{value:n,label:f?.metadata.name},...r]),l("div",{className:i.selectField,children:[l("header",{children:[o(m,{variant:"subtitle2",children:t.name}),o(m,{variant:"caption",children:t.description})]}),o("div",{className:i.fieldContainer,children:o(y,{name:"detailsStep.ownerEntityRef",control:e,placeholder:"Owner",freeSolo:!1,disabled:d||s,helperText:p?.ownerEntityRef?.message??void 0,...u})})]})};export{F as CampaignOwnerField};
1
+ import{jsxs as l,jsx as o}from"react/jsx-runtime";import{makeStyles as g,Typography as m}from"@material-ui/core";import{uniqBy as h}from"lodash";import"../../../../contexts/TrackFormContext.esm.js";import"../../../../contexts/CheckFormContext.esm.js";import"../../../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as v}from"../../../../contexts/UserProvider.esm.js";import{useGroupOptions as x}from"../../../../hooks/groups/useGroupOptions.esm.js";import{FormControlledAutocomplete as y}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as w}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{CAMPAIGN_FIELDS as b}from"../../utils/campaignFormUtils.esm.js";const C=g(e=>({helperText:{marginLeft:0},selectField:{display:"flex",flexDirection:"column",gap:e.spacing(1),marginBottom:e.spacing(2)},fieldContainer:{width:"250px"}})),F=({control:e,errors:p,isLoading:s,disabled:d})=>{const t=C(),{owner:n}=b.details,{options:c}=x(),{user:f,userEntityRef:r}=v();let i=h(c?.map(a=>({value:a.ref,label:a.name})),"value");const u=w(i);return r&&(i=[{value:r,label:f?.metadata.name??r},...i]),l("div",{className:t.selectField,children:[l("header",{children:[o(m,{variant:"subtitle2",children:n.name}),o(m,{variant:"caption",children:n.description})]}),o("div",{className:t.fieldContainer,children:o(y,{name:"detailsStep.ownerEntityRef",control:e,placeholder:"Owner",freeSolo:!1,disabled:d||s,helperText:p?.ownerEntityRef?.message??void 0,...u})})]})};export{F as CampaignOwnerField};
2
2
  //# sourceMappingURL=CampaignOwnerField.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as a}from"react/jsx-runtime";import{Content as S}from"@backstage/core-components";import{useRouteRef as U}from"@backstage/core-plugin-api";import{EntityRefLink as A}from"@backstage/plugin-catalog-react";import{usePermission as b}from"@backstage/plugin-permission-react";import{makeStyles as V,Button as W,Paper as q,Grid as s,Typography as T,Box as J}from"@material-ui/core";import{soundcheckCampaignReadPermission as K,soundcheckCampaignUpdatePermission as Q}from"@spotify/backstage-plugin-soundcheck-common";import{DateTime as x}from"luxon";import{useMemo as g}from"react";import{useParams as X,useNavigate as Y}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as Z}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatuses as _}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useCheckStatusHistories as $}from"../../hooks/aggregations/useCheckStatusHistories.esm.js";import{useSearchParam as f}from"../../hooks/useSearchParam.esm.js";import{campaignEditRouteRef as ee}from"../../routes.esm.js";import{CheckCard as ie}from"../CheckCard/CheckCard.esm.js";import{LoadingIndicator as te}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as re}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as oe}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as ne}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"react-markdown";import"rehype-raw";import"remark-gfm";import{FilterBar as ae}from"../TrackPage/FilterBar/FilterBar.esm.js";import{toFilter as se}from"../TrackPage/FilterBar/util.esm.js";import{TrackEntitiesTable as me}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{CampaignStatusHistoryTile as ce}from"./CampaignStatusHistoryTile.esm.js";import{CampaignStatusTile as de}from"./CampaignStatusTile.esm.js";import{DaysRemainingTile as pe}from"./DaysRemainingTile.esm.js";const le=V(e=>({root:{height:"100%",background:e.palette.background.default},header:{backgroundColor:e.palette.background.paper,borderRadius:0,marginBottom:e.spacing(2),paddingLeft:e.spacing(1),borderLeft:"none",borderRight:"none"},progressContainer:{display:"flex",marginBottom:e.spacing(3)},campaignContainerContent:{paddingTop:e.spacing(1),paddingBottom:e.spacing(1),backgroundColor:e.palette.background.paper},editButton:{marginLeft:"auto"},checksContainer:{},entitiesContainer:{marginTop:e.spacing(3)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},content:{paddingTop:0},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},sectionTitle:{paddingBottom:e.spacing(1)}})),ge=()=>{const e=le(),[m,I]=f("owners"),[c,L]=f("lifecycles"),[d,B]=f("types"),[p,D]=f("systems"),l=g(()=>se({lifecycles:c,owners:m,types:d,systems:p}),[c,m,d,p]),{campaignId:n}=X(),{data:E,isLoading:u}=Z({ids:[n],first:1}),o=E?.edges?.[0]?.node,t=o?.track,y=t?.levels?.[0],{loading:P,allowed:M}=b({permission:K,resourceRef:n}),{loading:k,allowed:C}=b({permission:Q,resourceRef:n}),w=o?x.fromISO(o.startDate):void 0,z=w?Math.max(Math.ceil(x.now().diff(w,"days").days),1):void 0,R=Array.from(new Set(t?.levels.flatMap(r=>r.checks).map(r=>r.id)??[])),{data:F}=_({trackId:t?.id,checkIds:R,filter:l},!!t),{data:H}=$({trackId:t?.id,checkIds:R,numberOfDays:z??30,filter:l},!!t),v=Y(),N=U(ee),O=g(()=>t?.ownerEntityRef?i(A,{color:"inherit",entityRef:t.ownerEntityRef,className:e.ownerLink}):null,[t?.ownerEntityRef,e.ownerLink]),G=g(()=>!k&&C&&t?.isEditable?i(W,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{v(N({campaignId:n}))},children:"Edit Campaign"}):null,[C,e.editButton,N,k,v,t,n]),j=g(()=>t?.description?i(ne,{className:e.headerDescription,content:t.description}):null,[e.headerDescription,t?.description]);return oe({title:t?.name,description:j,customSubtitle:O,sectionRight:G}),a("div",{children:[i(re,{entityName:"track",entityId:n,showNotFound:!u&&!o,showCannotView:!P&&!M}),u&&i(te,{}),t&&a("div",{className:e.root,children:[i(q,{elevation:1,className:e.header,children:i(S,{className:e.campaignContainerContent,children:i(ae,{track:t,owners:m,setOwners:I,lifecycles:c,setLifecycles:L,types:d,setTypes:B,systems:p,setSystems:D})})}),a(S,{className:e.content,children:[i("div",{className:e.progressContainer,children:a(s,{container:!0,spacing:2,children:[i(s,{item:!0,xs:2,children:i(pe,{campaign:o})}),i(s,{item:!0,xs:4,children:i(de,{campaign:o,filter:l})}),i(s,{item:!0,xs:6,children:i(ce,{campaign:o,filter:l})})]})}),a("div",{className:e.checksContainer,children:[i(T,{variant:"h3",className:e.sectionTitle,children:"Checks"}),y&&i(J,{className:e.content,children:i(s,{container:!0,spacing:1,children:y.checks.map(r=>i(s,{item:!0,xs:12,sm:6,md:4,children:i(ie,{track:t,check:r,status:F?.find(h=>h.id===r.id),history:H?.find(h=>h.id===r.id)})},r.id))})}),t&&a("div",{className:e.entitiesContainer,children:[i(T,{variant:"h3",className:e.sectionTitle,children:"Entities"}),i(me,{track:t,initialPageSize:10,lifecycles:c,owners:m,types:d,systems:p})]})]})]})]})]})};export{ge as CampaignInsightsPage};
1
+ import{jsx as i,jsxs as r,Fragment as W}from"react/jsx-runtime";import{Content as x}from"@backstage/core-components";import{useRouteRef as q,useApi as J,configApiRef as K}from"@backstage/core-plugin-api";import{EntityRefLink as Q}from"@backstage/plugin-catalog-react";import{usePermission as u}from"@backstage/plugin-permission-react";import{makeStyles as X,Button as Y,Paper as Z,Grid as s,Typography as E,Box as _}from"@material-ui/core";import{soundcheckCampaignReadPermission as $,soundcheckCampaignUpdatePermission as ee,soundcheckCampaignNotificationsCreatePermission as ie}from"@spotify/backstage-plugin-soundcheck-common";import{DateTime as I}from"luxon";import{useMemo as g}from"react";import{useParams as te,useNavigate as ne}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as oe}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatuses as re}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useCheckStatusHistories as ae}from"../../hooks/aggregations/useCheckStatusHistories.esm.js";import{useSearchParam as f}from"../../hooks/useSearchParam.esm.js";import{campaignEditRouteRef as se}from"../../routes.esm.js";import{CheckCard as ce}from"../CheckCard/CheckCard.esm.js";import{LoadingIndicator as me}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as de}from"../PageWarningMessage/PageWarningMessage.esm.js";import{SendCampaignNotificationDialog as pe}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as le}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as ge}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"react-markdown";import"rehype-raw";import"remark-gfm";import{FilterBar as fe}from"../TrackPage/FilterBar/FilterBar.esm.js";import{toFilter as he}from"../TrackPage/FilterBar/util.esm.js";import{TrackEntitiesTable as ue}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{CampaignStatusHistoryTile as ke}from"./CampaignStatusHistoryTile.esm.js";import{CampaignStatusTile as ye}from"./CampaignStatusTile.esm.js";import{DaysRemainingTile as Ce}from"./DaysRemainingTile.esm.js";const we=X(e=>({root:{height:"100%",background:e.palette.background.default},header:{backgroundColor:e.palette.background.paper,borderRadius:0,marginBottom:e.spacing(2),paddingLeft:e.spacing(1),borderLeft:"none",borderRight:"none"},progressContainer:{display:"flex",marginBottom:e.spacing(3)},campaignContainerContent:{paddingTop:e.spacing(1),paddingBottom:e.spacing(1),backgroundColor:e.palette.background.paper},editButton:{marginLeft:"auto"},notificationButton:{marginRight:e.spacing(1)},checksContainer:{},entitiesContainer:{marginTop:e.spacing(3)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},content:{paddingTop:0},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},sectionTitle:{paddingBottom:e.spacing(1)}})),Ne=()=>{const e=we(),[c,D]=f("owners"),[m,L]=f("lifecycles"),[d,P]=f("types"),[p,M]=f("systems"),l=g(()=>he({lifecycles:m,owners:c,types:d,systems:p}),[m,c,d,p]),{campaignId:a}=te(),{data:F,isLoading:k}=oe({ids:[a],first:1}),n=F?.edges?.[0]?.node,t=n?.track,y=t?.levels?.[0],{loading:O,allowed:z}=u({permission:$,resourceRef:a}),{loading:C,allowed:w}=u({permission:ee,resourceRef:a}),N=n?I.fromISO(n.startDate):void 0,A=N?Math.max(Math.ceil(I.now().diff(N,"days").days),1):void 0,R=Array.from(new Set(t?.levels.flatMap(o=>o.checks).map(o=>o.id)??[])),{data:H}=re({trackId:t?.id,checkIds:R,filter:l},!!t),{data:G}=ae({trackId:t?.id,checkIds:R,numberOfDays:A??30,filter:l},!!t),b=ne(),v=q(se),j=g(()=>t?.ownerEntityRef?i(Q,{color:"inherit",entityRef:t.ownerEntityRef,className:e.ownerLink}):null,[t?.ownerEntityRef,e.ownerLink]),S=J(K).getOptionalBoolean("soundcheck.notifications.enabled"),{loading:B,allowed:T}=u({permission:ie}),U=g(()=>r(W,{children:[S&&!B&&T&&n&&i(pe,{campaign:n,buttonClass:e.notificationButton}),!C&&w&&t?.isEditable?i(Y,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{b(v({campaignId:a}))},children:"Edit Campaign"}):null]}),[S,B,T,n,e.notificationButton,e.editButton,C,w,t?.isEditable,b,v,a]),V=g(()=>t?.description?i(ge,{className:e.headerDescription,content:t.description}):null,[e.headerDescription,t?.description]);return le({title:t?.name,description:V,customSubtitle:j,sectionRight:U}),r("div",{children:[i(de,{entityName:"track",entityId:a,showNotFound:!k&&!n,showCannotView:!O&&!z}),k&&i(me,{}),t&&r("div",{className:e.root,children:[i(Z,{elevation:1,className:e.header,children:i(x,{className:e.campaignContainerContent,children:i(fe,{track:t,owners:c,setOwners:D,lifecycles:m,setLifecycles:L,types:d,setTypes:P,systems:p,setSystems:M})})}),r(x,{className:e.content,children:[i("div",{className:e.progressContainer,children:r(s,{container:!0,spacing:2,children:[i(s,{item:!0,xs:2,children:i(Ce,{campaign:n})}),i(s,{item:!0,xs:4,children:i(ye,{campaign:n,filter:l})}),i(s,{item:!0,xs:6,children:i(ke,{campaign:n,filter:l})})]})}),r("div",{className:e.checksContainer,children:[i(E,{variant:"h3",className:e.sectionTitle,children:"Checks"}),y&&i(_,{className:e.content,children:i(s,{container:!0,spacing:1,children:y.checks.map(o=>i(s,{item:!0,xs:12,sm:6,md:4,children:i(ce,{track:t,check:o,status:H?.find(h=>h.id===o.id),history:G?.find(h=>h.id===o.id)})},o.id))})}),t&&r("div",{className:e.entitiesContainer,children:[i(E,{variant:"h3",className:e.sectionTitle,children:"Entities"}),i(ue,{track:t,initialPageSize:10,lifecycles:m,owners:c,types:d,systems:p})]})]})]})]})]})};export{Ne as CampaignInsightsPage};
2
2
  //# sourceMappingURL=CampaignInsightsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as a,jsxs as S}from"react/jsx-runtime";import{useRouteRef as $,useApi as z,featureFlagsApiRef as J}from"@backstage/core-plugin-api";import{usePermission as K}from"@backstage/plugin-permission-react";import{makeStyles as Q,Grid as n,Button as U}from"@material-ui/core";import{soundcheckCampaignCreatePermission as V}from"@spotify/backstage-plugin-soundcheck-common";import{useState as t,useEffect as y}from"react";import{useNavigate as X}from"react-router-dom";import Y from"react-use/lib/useDebounce";import{useGetCampaignOwners as _}from"../../../hooks/campaigns/useGetCampaignOwners.esm.js";import{useGetCampaigns as ee}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import{campaignCreateRouteRef as ae}from"../../../routes.esm.js";import{FilterDefault as c}from"../../../utils/filters.esm.js";import{EmptyCampaignState as re}from"../CampaignEmptyState.esm.js";import{EmptyState as ie}from"../../EmptyState/EmptyState.esm.js";import{Pagination as te}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ne}from"../../SearchFilters/SearchFilters.esm.js";import{CampaignsOverviewSkeleton as se}from"./CampaignsOverviewSkeleton.esm.js";import{CampaignSummaryCard as oe}from"./CampaignSummaryCard.esm.js";import me from"./useArchiveConfirmationModal.esm.js";var b=(e=>(e.title="No campaigns found",e.description="No campaigns matched your search. Consider changing search term and filters.",e))(b||{});const le=Q(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),ge=({campaignsPerPage:e,currentCursor:w})=>{const s=le(),[d,u]=t(w),[m,B]=t(""),[h,R]=t(""),[f,A]=t(c.Alpha),[C,I]=t(c.Owner),[P,k]=t(c.Status),{data:F,isLoading:O}=_();Y(()=>{R(m)},500,[m]);const{loading:L,allowed:j}=K({permission:V}),{data:i,isLoading:l}=ee({ids:void 0,first:e,after:d,orderAlphabetical:f,searchByOwner:C,searchByName:h,searchByStatus:P}),E=X(),G=$(ae),T=()=>E(G()),[g,D]=t(i),p=g?.edges.map(r=>r.node),[v,N]=t([]);y(()=>{u(void 0),N([])},[h]);const x=z(J),W=!x.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-campaigns")||x.isActive("soundcheck-enable-campaigns"),H=!j||!W,q=r=>{A(r.target.value)},M=r=>{I(r.target.value)},Z=r=>{k(r.target.value)};if(y(()=>{i&&D(()=>({totalCount:i.totalCount,edges:i.edges,pageInfo:{startCursor:i.pageInfo.startCursor,endCursor:i.pageInfo.endCursor,hasNextPage:i?.pageInfo.hasNextPage??!1,hasPreviousPage:i?.pageInfo.hasPreviousPage??!1}}))},[i]),!l&&!p)return a(re,{});let o;return l?o=a(se,{}):p?.length?o=p.map(r=>a(n,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result",children:a(me,{children:a(oe,{campaign:r})})},r.id)):o=a(n,{xs:12,item:!0,role:"listitem","aria-label":"result",children:a(ie,{title:"No campaigns found",description:"No campaigns matched your search. Consider changing search term and filters."})}),S(n,{container:!0,direction:"row",className:s.container,children:[S(n,{container:!0,className:s.header,children:[a(ne,{searchPlaceholder:"Search Available Campaigns",isLoading:l||O,searchTerm:m,setSearchTerm:B,filterAlpha:f,handleAlphabeticalFilterChange:q,filterOwner:C,handleOwnerFilterChange:M,filterStatus:P,handleStatusFilterChange:Z,owners:F}),a(n,{item:!0,xs:2,className:s.headerButtons,children:!L&&a(U,{disabled:H,variant:"contained",color:"primary",onClick:T,className:s.createButton,children:"Create Campaign"})})]}),a(n,{container:!0,spacing:4,role:"list","aria-label":"campaigns",children:o}),(g?.pageInfo.hasNextPage||v?.length>0)&&a(n,{item:!0,xs:12,children:a(te,{response:g,listingsPerPage:e,cursor:d,setCursor:u,prevCursors:v,setPrevCursors:N,labelPerPageDropdown:"Campaigns Per Page:",urlRoute:"campaigns?campaignsPerPage="})})]})};export{ge as CampaignListPage,b as CampaignNoResults};
1
+ import{jsx as a,jsxs as S}from"react/jsx-runtime";import{useRouteRef as $,useApi as z,featureFlagsApiRef as J}from"@backstage/core-plugin-api";import{usePermission as K}from"@backstage/plugin-permission-react";import{makeStyles as Q,Grid as n,Button as U}from"@material-ui/core";import{soundcheckCampaignCreatePermission as V}from"@spotify/backstage-plugin-soundcheck-common";import{useState as t,useEffect as y}from"react";import{useNavigate as X}from"react-router-dom";import Y from"react-use/lib/useDebounce";import{useGetCampaignOwners as _}from"../../../hooks/campaigns/useGetCampaignOwners.esm.js";import{useGetCampaigns as ee}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import{campaignCreateRouteRef as ae}from"../../../routes.esm.js";import{FilterDefault as c}from"../../../utils/filters.esm.js";import{EmptyCampaignState as re}from"../CampaignEmptyState.esm.js";import{EmptyState as ie}from"../../EmptyState/EmptyState.esm.js";import{Pagination as te}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ne}from"../../SearchFilters/SearchFilters.esm.js";import{CampaignsOverviewSkeleton as se}from"./CampaignsOverviewSkeleton.esm.js";import{CampaignSummaryCard as oe}from"./CampaignSummaryCard.esm.js";import me from"./useArchiveConfirmationModal.esm.js";var b=(e=>(e.title="No campaigns found",e.description="No campaigns matched your search. Consider changing search term and filters.",e))(b||{});const le=Q(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),ge=({campaignsPerPage:e,currentCursor:w})=>{const s=le(),[d,u]=t(w),[m,B]=t(""),[h,R]=t(""),[f,A]=t(c.Alpha),[C,I]=t(c.Owner),[P,k]=t(c.Status),{data:F,isLoading:O}=_();Y(()=>{R(m)},500,[m]);const{loading:L,allowed:j}=K({permission:V}),{data:i,isLoading:l}=ee({ids:void 0,first:e,after:d,orderAlphabetical:f,searchByOwner:C,searchByName:h,searchByStatus:P}),E=X(),G=$(ae),T=()=>E(G()),[g,D]=t(i),p=g?.edges.map(r=>r.node),[v,N]=t([]);y(()=>{u(void 0),N([])},[h]);const x=z(J),W=!x.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-campaigns")||x.isActive("soundcheck-enable-campaigns"),H=!j||!W,q=r=>{A(r.target.value)},M=r=>{I(r.target.value)},Z=r=>{k(r.target.value)};if(y(()=>{i&&D(()=>({totalCount:i.totalCount,edges:i.edges,pageInfo:{startCursor:i.pageInfo.startCursor,endCursor:i.pageInfo.endCursor,hasNextPage:i?.pageInfo.hasNextPage??!1,hasPreviousPage:i?.pageInfo.hasPreviousPage??!1}}))},[i]),!l&&!p)return a(re,{});let o;return l?o=a(se,{}):p?.length?o=p.map(r=>a(n,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result",children:a(me,{children:a(oe,{campaign:r})})},r.id)):o=a(n,{xs:12,item:!0,role:"listitem","aria-label":"result",children:a(ie,{title:"No campaigns found",description:"No campaigns matched your search. Consider changing search term and filters."})}),S(n,{container:!0,direction:"row",className:s.container,children:[S(n,{container:!0,className:s.header,children:[a(ne,{searchPlaceholder:"Search Available Campaigns",isLoading:l||O,searchTerm:m,setSearchTerm:B,filterAlpha:f,handleAlphabeticalFilterChange:q,filterOwner:C,handleOwnerFilterChange:M,filterStatus:P,handleStatusFilterChange:Z,owners:F}),a(n,{item:!0,xs:4,className:s.headerButtons,children:!L&&a(U,{disabled:H,variant:"contained",color:"primary",onClick:T,className:s.createButton,children:"Create Campaign"})})]}),a(n,{container:!0,spacing:4,role:"list","aria-label":"campaigns",children:o}),(g?.pageInfo.hasNextPage||v?.length>0)&&a(n,{item:!0,xs:12,children:a(te,{response:g,listingsPerPage:e,cursor:d,setCursor:u,prevCursors:v,setPrevCursors:N,labelPerPageDropdown:"Campaigns Per Page:",urlRoute:"campaigns?campaignsPerPage="})})]})};export{ge as CampaignListPage,b as CampaignNoResults};
2
2
  //# sourceMappingURL=CampaignListPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as n}from"react/jsx-runtime";import{useRouteRef as b}from"@backstage/core-plugin-api";import{useEntity as P}from"@backstage/plugin-catalog-react";import{makeStyles as v,Tabs as B,IconButton as M,Menu as j,MenuItem as u,Switch as k}from"@material-ui/core";import D from"@material-ui/icons/ArrowDropDown";import L from"@material-ui/icons/Settings.js";import{useState as O,useEffect as Q}from"react";import g from"react-use/lib/useLocalStorage";import{useAllCertifications as U}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as V}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistRouteRef as X,certificationTrackRouteRef as Y}from"../../routes.esm.js";import{CertificationTab as q}from"./CertificationTab.esm.js";import{PlaylistCertificationTab as F}from"./PlaylistCertificationTab.esm.js";import{CertificationTabsSkeleton as G}from"./skeletons/CertificationTabsSkeleton.esm.js";function H(r=[],a=[],c,l){if(c){const o=r.findIndex(s=>s.id===c);return o<0?!1:o}const e=a.findIndex(o=>o.track.id===l);return e<0?!1:e+r.length}const J=v(r=>({tabsContainer:{display:"flex",alignItems:"center"},tabs:{flex:1},settingsButton:{display:"flex",alignItems:"center",marginRight:r.spacing(1)}})),K=({playlistId:r,trackId:a,onSettingsChange:c})=>{const l=J(),[e,o]=O(null),[s,y]=g("soundcheck.certifications.showNotApplicable",!1),[m,x]=g("soundcheck.certifications.showExempt",!0),[f,I]=g("soundcheck.certifications.showDraftTracksAndCampaigns",!1);Q(()=>{c?.({showNotApplicable:!!s,showExempt:!!m})},[s,m,c]);const S=t=>{o({top:t.clientY,left:t.clientX})},w=()=>{o(null)},{entity:C}=P(),{isLoading:T,data:p}=U(C,!1,f),{isLoading:R,data:d}=V(C),z=b(X),A=b(Y);if(R||T||!a)return i(G,{});const E=H(d,p,r,a);return n("div",{className:l.tabsContainer,children:[n(B,{className:l.tabs,value:E,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable",children:[d?.length&&d.map(({id:t,name:h})=>i(F,{id:t,name:h,selected:t===a,href:z({playlistId:t})},t)),p&&p.filter(({track:{type:t}})=>t!=="playlist").map(({track:{id:t,name:h,badge:N}})=>i(q,{id:t,name:h,badge:N,selected:t===a,href:A({trackId:t})},t))]}),n(M,{className:l.settingsButton,onClick:S,size:"small",children:[i(L,{fontSize:"small"}),i(D,{fontSize:"small"})]}),n(j,{open:!!e,onClose:w,anchorReference:"anchorPosition",anchorPosition:e?{top:e.top,left:e.left}:void 0,transformOrigin:{vertical:"top",horizontal:"right"},children:[n(u,{onClick:()=>{y(!s)},dense:!0,children:[i(k,{size:"small",checked:s}),"Show Not Applicable Checks"]}),n(u,{onClick:()=>{x(!m)},dense:!0,children:[i(k,{size:"small",checked:m}),"Show Exempt Checks"]}),n(u,{onClick:()=>{I(!f)},dense:!0,children:[i(k,{size:"small",checked:f}),"Show Draft Tracks and Campaigns"]})]})]})};export{K as CertificationTabs};
1
+ import{jsx as i,jsxs as n}from"react/jsx-runtime";import{useRouteRef as b}from"@backstage/core-plugin-api";import{useEntity as P}from"@backstage/plugin-catalog-react";import{makeStyles as v,Tabs as B,IconButton as M,Menu as j,MenuItem as u,Switch as k}from"@material-ui/core";import D from"@material-ui/icons/ArrowDropDown";import L from"@material-ui/icons/Settings.js";import{useState as O,useEffect as Q}from"react";import g from"react-use/lib/useLocalStorage";import{useAllCertifications as U}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as X}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistRouteRef as Y,certificationTrackRouteRef as $}from"../../routes.esm.js";import{CertificationTab as q}from"./CertificationTab.esm.js";import{PlaylistCertificationTab as F}from"./PlaylistCertificationTab.esm.js";import{CertificationTabsSkeleton as G}from"./skeletons/CertificationTabsSkeleton.esm.js";function H(r=[],a=[],c,l){if(c){const o=r.findIndex(s=>s.id===c);return o<0?!1:o}const e=a.findIndex(o=>o.track.id===l);return e<0?!1:e+r.length}const J=v(r=>({tabsContainer:{display:"flex",alignItems:"center"},tabs:{flex:1},settingsButton:{display:"flex",alignItems:"center",marginRight:r.spacing(1)}})),K=({playlistId:r,trackId:a,onSettingsChange:c})=>{const l=J(),[e,o]=O(null),[s,y]=g("soundcheck.certifications.showNotApplicable",!1),[m,x]=g("soundcheck.certifications.showExempt",!0),[f,I]=g("soundcheck.certifications.showDraftTracksAndCampaigns",!1);Q(()=>{c?.({showNotApplicable:!!s,showExempt:!!m})},[s,m,c]);const S=t=>{o({top:t.clientY,left:t.clientX})},w=()=>{o(null)},{entity:C}=P(),{isLoading:T,data:p}=U(C,!1,f),{isLoading:R,data:d}=X(C),z=b(Y),A=b($);if(R||T||!a)return i(G,{});const E=H(d,p,r,a);return n("div",{className:l.tabsContainer,children:[n(B,{className:l.tabs,value:E,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable",children:[d?.length&&d.map(({id:t,name:h})=>i(F,{id:t,name:h,selected:t===a,href:z({playlistId:t})},t)),p&&p.filter(({track:{type:t}})=>t!=="playlist").map(({track:{id:t,name:h,badge:N}})=>i(q,{id:t,name:h,badge:N,selected:t===a,href:A({trackId:t})},t))]}),n(M,{className:l.settingsButton,onClick:S,size:"small",children:[i(L,{fontSize:"small"}),i(D,{fontSize:"small"})]}),n(j,{open:!!e,onClose:w,anchorReference:"anchorPosition",anchorPosition:e?{top:e.top,left:e.left}:void 0,transformOrigin:{vertical:"top",horizontal:"right"},children:[n(u,{onClick:()=>{y(!s)},dense:!0,children:[i(k,{size:"small",checked:s}),"Show Not Applicable Checks"]}),n(u,{onClick:()=>{x(!m)},dense:!0,children:[i(k,{size:"small",checked:m}),"Show Exempt Checks"]}),n(u,{onClick:()=>{I(!f)},dense:!0,children:[i(k,{size:"small",checked:f}),"Show Draft Tracks and Campaigns"]})]})]})};export{K as CertificationTabs};
2
2
  //# sourceMappingURL=CertificationTabs.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as l,jsx as o}from"react/jsx-runtime";import{Progress as R}from"@backstage/core-components";import{useApi as u,errorApiRef as T}from"@backstage/core-plugin-api";import{useEntity as b}from"@backstage/plugin-catalog-react";import{scaffolderApiRef as D,useTemplateSecrets as I,useCustomFieldExtensions as B}from"@backstage/plugin-scaffolder-react";import{useTemplateParameterSchema as F,useFilteredSchemaProperties as O,Stepper as U}from"@backstage/plugin-scaffolder-react/alpha";import{makeStyles as j,Dialog as A,DialogTitle as P,Typography as J,IconButton as N,DialogContent as W}from"@material-ui/core";import M from"@material-ui/icons/Close";import Q from"git-url-parse";import{useState as V,useEffect as q}from"react";import{useOutlet as z}from"react-router-dom";import{OngoingTaskComponent as G}from"./OngoingTaskComponent.esm.js";import{ReviewStateComponent as H}from"./ReviewStateComponent.esm.js";class h{type;name;owner;lifecycle;title;description;sourceLocation;managedByLocation;slackChannel;entity;constructor(e){this.lifecycle=e.spec?.lifecycle||"unknown",this.name=e.metadata.name,this.owner=e.spec?.owner||"unknown",this.type=e.spec?.type||"unknown",this.title=e.metadata.title,this.description=e.metadata.description||"",this.sourceLocation=e.metadata.annotations?.["backstage.io/source-location"]?.replace("url:",""),this.managedByLocation=e.metadata.annotations?.["backstage.io/managed-by-location"],this.slackChannel=e.metadata.annotations?.["spotify.net/slack-channel"],this.entity=e}}const K=t=>{const e={};if(e.componentId=t.name,t.sourceLocation){const{name:n,owner:a,protocol:r,source:i}=Q(t.sourceLocation);e.repoUrl=`${r}://${i}/${a}/${n}`,e.repo={host:i,org:a,repo:n,url:e.repoUrl,gitUrl:`git@${i}:${a}/${n}.git`,paramUrl:`${r}://${i}?owner=${a}&repo=${n}`}}e.facts=JSON.parse(t.entity.metadata.annotations?.["sysmodel.spotify.net/raw-component-facts"]||"{}");const s=t;return delete s.entity,{...e,...s}},X=j({titleContent:{display:"flex",justifyContent:"space-between",alignItems:"center"}}),Y=t=>{const{title:e,open:s,setOpen:n,onClose:a,templateRef:r}=t,i=X(),m=u(T),y=u(D),{loading:g,manifest:w,error:c}=F(r),{secrets:k}=I(),C=z(),$=B(C),p=O(w),{entity:S}=b(),[d,f]=V(void 0),x=async E=>{const{taskId:L}=await y.scaffold({templateRef:r,values:E,secrets:k});f(L)},v=()=>{n(!1),f(void 0)};return q(()=>{c&&m.post(new Error(`Failed to load template, ${c}`))},[c,m]),l(A,{open:s,onClose:a,fullWidth:!0,maxWidth:"md",children:[o(P,{children:l("div",{className:i.titleContent,children:[o(J,{variant:"h5",children:e}),o(N,{onClick:v,children:o(M,{})})]})}),l(W,{children:[g&&o(R,{}),d?o(G,{taskId:d}):p&&o(U,{manifest:p,onCreate:x,extensions:$,components:{createButtonText:"Execute",ReviewStateComponent:H},initialState:{backstage:K(new h(S))},...t})]})]})};export{Y as FixMeDialog,h as SimplifiedEntity};
1
+ import{jsxs as l,jsx as o}from"react/jsx-runtime";import{Progress as L}from"@backstage/core-components";import{useApi as u,errorApiRef as R}from"@backstage/core-plugin-api";import{useEntity as T}from"@backstage/plugin-catalog-react";import{scaffolderApiRef as b,useTemplateSecrets as D,useCustomFieldExtensions as B}from"@backstage/plugin-scaffolder-react";import{useTemplateParameterSchema as F,useFilteredSchemaProperties as O,Stepper as U}from"@backstage/plugin-scaffolder-react/alpha";import{makeStyles as j,Dialog as A,DialogTitle as P,Typography as J,IconButton as N,DialogContent as W}from"@material-ui/core";import M from"@material-ui/icons/Close";import Q from"git-url-parse";import{useState as V,useEffect as q}from"react";import{useOutlet as z}from"react-router-dom";import{OngoingTaskComponent as G}from"./OngoingTaskComponent.esm.js";import{ReviewStateComponent as H}from"./ReviewStateComponent.esm.js";class h{type;name;owner;lifecycle;title;description;sourceLocation;managedByLocation;slackChannel;entity;constructor(e){this.lifecycle=e.spec?.lifecycle||"unknown",this.name=e.metadata.name,this.owner=e.spec?.owner||"unknown",this.type=e.spec?.type||"unknown",this.title=e.metadata.title,this.description=e.metadata.description||"",this.sourceLocation=e.metadata.annotations?.["backstage.io/source-location"]?.replace("url:",""),this.managedByLocation=e.metadata.annotations?.["backstage.io/managed-by-location"],this.slackChannel=e.metadata.annotations?.["spotify.net/slack-channel"],this.entity=e}}const K=t=>{const e={};if(e.componentId=t.name,t.sourceLocation){const{name:n,owner:a,protocol:r,source:i}=Q(t.sourceLocation);e.repoUrl=`${r}://${i}/${a}/${n}`,e.repo={host:i,org:a,repo:n,url:e.repoUrl,gitUrl:`git@${i}:${a}/${n}.git`,paramUrl:`${r}://${i}?owner=${a}&repo=${n}`}}e.facts=JSON.parse(t.entity.metadata.annotations?.["sysmodel.spotify.net/raw-component-facts"]||"{}");const s=t;return delete s.entity,{...e,...s}},X=j({titleContent:{display:"flex",justifyContent:"space-between",alignItems:"center"}}),Y=t=>{const{title:e,open:s,setOpen:n,onClose:a,templateRef:r}=t,i=X(),m=u(R),y=u(b),{loading:g,manifest:w,error:c}=F(r),{secrets:k}=D(),C=z(),$=B(C),p=O(w),{entity:S}=T(),[d,f]=V(void 0),x=async E=>{const{taskId:I}=await y.scaffold({templateRef:r,values:E,secrets:k});f(I)},v=()=>{n(!1),f(void 0)};return q(()=>{c&&m.post(new Error(`Failed to load template, ${c}`))},[c,m]),l(A,{open:s,onClose:a,fullWidth:!0,maxWidth:"md",children:[o(P,{children:l("div",{className:i.titleContent,children:[o(J,{variant:"h5",children:e}),o(N,{onClick:v,children:o(M,{})})]})}),l(W,{children:[g&&o(L,{}),d?o(G,{taskId:d}):p&&o(U,{manifest:p,onCreate:x,extensions:$,components:{createButtonText:"Execute",ReviewStateComponent:H},initialState:{backstage:K(new h(S))},...t})]})]})};export{Y as FixMeDialog,h as SimplifiedEntity};
2
2
  //# sourceMappingURL=FixMeDialog.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{Content as s}from"@backstage/core-components";import{FormProvider as d}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as h}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{formStyles as f}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{FormStepper as u}from"../FormStepper/FormStepper.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import"./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 C}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"./FormFields/CheckPathResolverInput.esm.js";import{CheckDetailsStep as b}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as k}from"./Steps/CheckRulesStep.esm.js";import{CheckApplicabilityStep as g}from"./Steps/CheckApplicabilityStep.esm.js";import{CheckReviewStep as v}from"./Steps/CheckReviewStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as y}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 F}from"./useCheckForm.esm.js";const x=({onSave:p,onClose:r})=>{const{isLoading:n,isReadOnly:i,selectedItem:l}=h(),{formMethods:o,onSubmit:e}=F(p),a=f(),m=[{label:"Enter check details",content:()=>t(b,{})},{label:"Add rules",content:()=>t(k,{})},{label:"Choose the affected entities (Optional)",content:()=>t(g,{})},{label:"Set the check schedule (Optional)",content:()=>t(C,{control:o.control,disabled:i})},{label:"Review and test (Optional)",content:()=>t(v,{})}],c=l?[...Array(m.length).keys()]:[0];return t(s,{className:a.formWrapper,children:t(d,{...o,children:t(S,{children:t("form",{onSubmit:o.handleSubmit(e),children:t(u,{onClose:()=>r?r():void 0,handleSubmit:o.handleSubmit,trigger:o.trigger,onSubmit:e,initialVisited:c,stepNameMap:y,steps:m,isLoading:n,isReadOnly:i,saveButtonText:"Save Check"})})})})})};export{x as CheckForm};
1
+ import{jsx as t}from"react/jsx-runtime";import{Content as s}from"@backstage/core-components";import{FormProvider as d}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as h}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{formStyles as f}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{FormStepper as u}from"../FormStepper/FormStepper.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import"./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 C}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"./FormFields/CheckPathResolverInput.esm.js";import{CheckDetailsStep as b}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as k}from"./Steps/CheckRulesStep.esm.js";import{CheckApplicabilityStep as g}from"./Steps/CheckApplicabilityStep.esm.js";import{CheckReviewStep as v}from"./Steps/CheckReviewStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as y}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 F}from"./useCheckForm.esm.js";const R=({onSave:p,onClose:r})=>{const{isLoading:n,isReadOnly:e,selectedItem:l}=h(),{formMethods:o,onSubmit:i}=F(p),c=f(),m=[{label:"Enter check details",content:()=>t(b,{})},{label:"Add rules",content:()=>t(k,{})},{label:"Choose the affected entities (Optional)",content:()=>t(g,{})},{label:"Review and test (Optional)",content:()=>t(v,{})},{label:"Set the check schedule (Not Recommended)",content:()=>t(C,{control:o.control,disabled:e})}],a=l?[...Array(m.length).keys()]:[0];return t(s,{className:c.formWrapper,children:t(d,{...o,children:t(S,{children:t("form",{onSubmit:o.handleSubmit(i),children:t(u,{onClose:()=>r?r():void 0,handleSubmit:o.handleSubmit,trigger:o.trigger,onSubmit:i,initialVisited:a,stepNameMap:y,steps:m,isLoading:n,isReadOnly:e,saveButtonText:"Save Check"})})})})})};export{R as CheckForm};
2
2
  //# sourceMappingURL=CheckForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as l,jsx as t}from"react/jsx-runtime";import{makeStyles as i}from"@material-ui/core";import{useMemo as m}from"react";import{useGetPathResolvers as n}from"../../../hooks/useGetPathResolvers.esm.js";import{FormControlledAutocomplete as c}from"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../../ListboxVirtualized/ListboxVirtualized.esm.js";import{FormFieldLabel as d}from"../../FormFieldLabel/FormFieldLabel.esm.js";const h=i(e=>({wrapper:{marginBottom:e.spacing(2)}})),u=({control:e})=>{const s=h(),{data:r,isLoading:p}=n(),a=m(()=>r?.map(o=>o.id),[r]);return l("div",{className:s.wrapper,children:[t(d,{title:"Path resolver (Optional)",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks#path-resolvers"}),t("div",{children:t(c,{control:e,name:"rulesStep.pathResolver",disabled:p,options:a??[],freeSolo:!1,disableClearable:!0,width:250,getOptionLabel:o=>o==="jsonpath"?"jsonpath (default)":o,getOptionValue:o=>o&&o==="jsonpath (default)"?"jsonpath":o??"",placeholder:"path resolver"})})]})};export{u as CheckPathResolverInput};
1
+ import{jsxs as i,jsx as e}from"react/jsx-runtime";import{makeStyles as l}from"@material-ui/core";import{useMemo as m}from"react";import{useGetPathResolvers as n}from"../../../hooks/useGetPathResolvers.esm.js";import{FormControlledAutocomplete as c}from"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../../ListboxVirtualized/ListboxVirtualized.esm.js";import"../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as d}from"../../FormFieldLabel/FormFieldLabel.esm.js";const h=l(t=>({wrapper:{marginBottom:t.spacing(2)}})),u=({control:t})=>{const p=h(),{data:r,isLoading:s}=n(),a=m(()=>r?.map(o=>o.id),[r]);return i("div",{className:p.wrapper,children:[e(d,{title:"Path resolver (Optional)",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks#path-resolvers"}),e("div",{children:e(c,{control:t,name:"rulesStep.pathResolver",disabled:s,options:a??[],freeSolo:!1,disableClearable:!0,width:250,getOptionLabel:o=>o==="jsonpath"?"jsonpath (default)":o,getOptionValue:o=>o&&o==="jsonpath (default)"?"jsonpath":o??"",placeholder:"path resolver"})})]})};export{u as CheckPathResolverInput};
2
2
  //# sourceMappingURL=CheckPathResolverInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as l,jsx as e}from"react/jsx-runtime";import{makeStyles as b,Typography as d,Grid as c,FormControlLabel as f,Checkbox as y}from"@material-ui/core";import{useWatch as C,useFormContext as x,Controller as i}from"react-hook-form";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import{FrequencyComponent as S}from"../../../Frequency/FrequencyComponent.esm.js";import{CHECK_FIELDS as g}from"../../utils/checkFormUtils.esm.js";const v=b(n=>({container:{display:"flex",flexDirection:"column",gap:n.spacing(1)}})),k=({control:n,disabled:a})=>{const r=v(),s=C({control:n,name:"scheduleStep.schedule"}),{watch:h}=x(),t=h("detailsStep.type"),{description:m,checkboxLabel:u}=g.schedule;return l("div",{className:r.container,children:[t==="manual"&&e("div",{className:r.container,children:e(d,{children:"Schedules do not apply to manual checks. These types of checks are meant to be executed manually by users and so cannot be scheduled."})}),t!=="manual"&&l("div",{className:r.container,children:[e(d,{variant:"body2",children:m}),l(c,{item:!0,xs:12,children:[e(c,{item:!0,children:e(i,{name:"scheduleStep.schedule.enabled",control:n,render:({field:o})=>e(f,{disabled:a,control:e(y,{checked:o.value,onChange:o.onChange}),label:u})})}),e(c,{item:!0,children:e(i,{name:"scheduleStep.schedule.frequency",control:n,render:({field:o,fieldState:p})=>e(S,{disabled:a||!s.enabled,value:o.value,onChange:o.onChange,errors:p.error})})})]})]})]})};export{k as ScheduleSection};
1
+ import{jsxs as o,jsx as e}from"react/jsx-runtime";import{makeStyles as p,Typography as i,Box as f,Link as b,Grid as l,FormControlLabel as y,Checkbox as g}from"@material-ui/core";import{Alert as k}from"@material-ui/lab";import{useWatch as C,useFormContext as S,Controller as d}from"react-hook-form";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import{FrequencyComponent as x}from"../../../Frequency/FrequencyComponent.esm.js";import{CHECK_FIELDS as v}from"../../utils/checkFormUtils.esm.js";const F=p(n=>({container:{display:"flex",flexDirection:"column",gap:n.spacing(1)}})),N=({control:n,disabled:t})=>{const c=F(),a=C({control:n,name:"scheduleStep.schedule"}),{watch:h}=S(),s=h("detailsStep.type"),{description:u}=v.schedule;return o("div",{className:c.container,children:[s==="manual"&&e("div",{className:c.container,children:e(i,{children:"Schedules do not apply to manual checks. These types of checks are meant to be executed manually by users and so cannot be scheduled."})}),s!=="manual"&&o("div",{className:c.container,children:[e(i,{variant:"body2",children:u}),e(f,{maxWidth:900,children:e(k,{severity:a.enabled?"error":"warning",action:e(b,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/#fact-framework",target:"_blank",children:"Docs"}),children:a.enabled?"You are currently scheduling this Check. This is unnecessary in a majority of cases and should be disabled.":"Scheduling Checks is NOT RECOMMEND and can cause severe rate limit issues. Schedule integrations instead."})}),o(l,{item:!0,xs:12,children:[e(l,{item:!0,children:e(d,{name:"scheduleStep.schedule.enabled",control:n,render:({field:r})=>e(y,{disabled:t,control:e(g,{checked:r.value,onChange:r.onChange}),label:"My check does not use the fact framework and requires manual scheduling"})})}),a.enabled&&e(l,{item:!0,children:e(d,{name:"scheduleStep.schedule.frequency",control:n,render:({field:r,fieldState:m})=>e(x,{disabled:t||!a.enabled,value:r.value,onChange:r.onChange,errors:m.error})})})]})]})]})};export{N as ScheduleSection};
2
2
  //# sourceMappingURL=ScheduleSection.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as a,Fragment as D}from"react/jsx-runtime";import{Box as r,FormLabel as c,TextField as T,IconButton as A}from"@material-ui/core";import k from"@material-ui/icons/Close";import E from"@material-ui/icons/Delete";import G from"@material-ui/icons/List";import{asArray as M}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as R,useCallback as b}from"react";import{useFormContext as W,Controller as z}from"react-hook-form";import{useOperators as H}from"../../../../../hooks/operators/useOperators.esm.js";import{FactExplorerDialogButton as F}from"../../../../FactExplorer/FactExplorerDialog.esm.js";import"../../../../FactExplorer/FactExplorerContext.esm.js";import{FormControlledAutocomplete as v}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FactValueDisplay as q}from"./FactValueDisplay.esm.js";import{useRuleConditionStyles as J}from"./styles.esm.js";import{useRuleOptions as K}from"./useRuleOptions.esm.js";import{ValueListInputDialogButton as O}from"./ValueListInput.esm.js";const Q=({name:l,handleDelete:w,disabled:d,disableDelete:x})=>{const t=J(),{control:p,setValue:s,watch:m,clearErrors:h}=W(),{data:N,isLoading:g}=H(),S=m("rulesStep.pathResolver")==="jsonpath",f=R(()=>N?.map(e=>({value:e.name,label:e.title})).sort((e,o)=>e.label.localeCompare(o.label))??[],[N]),j=R(()=>f.map(e=>e.value),[f]),{pathOptions:B,factRefOptions:u,isLoading:$}=K(l,p),I=R(()=>u?.map(e=>e.value)??[],[u]),P=b(({factRef:e,path:o})=>{s(`${l}.factRef`,e),s(`${l}.path`,o),h()},[h,l,s]),V=b(({factRef:e,path:o})=>{s(`${l}.value`,{factRef:e,path:o}),h()},[h,l,s]),L=b(e=>{s(`${l}.value`,e.length>0?e:""),h()},[h,l,s]),i=m(`${l}.value`),C=b(()=>{s(`${l}.value`,"")},[l,s]);return n(r,{className:t.container,children:[a(r,{className:t.connector}),n(r,{paddingTop:2,paddingLeft:2,paddingRight:2,paddingBottom:2,width:"100%",className:t.innerContainer,children:[n(r,{className:t.inputsContainer,children:[u&&n(r,{children:[a(c,{className:t.formLabel,children:"Fact"}),a(v,{name:`${l}.factRef`,control:p,placeholder:"Fact",options:I,getOptionLabel:e=>u?.find(o=>e===o.value)?.label??e,getOptionValue:e=>u?.find(o=>e===o.label)?.value??e??"",disabled:d||$,width:428})]}),n(r,{flexGrow:1,children:[a(c,{className:t.formLabel,children:"Path"}),a(v,{name:`${l}.path`,placeholder:"Path",control:p,disabled:d||$,options:S?B:[],fullWidth:!0})]}),n(r,{children:[a(c,{className:t.formLabel,style:{visibility:"hidden"},children:"Explore"}),a(r,{width:150,children:a(F,{factRef:m(`${l}.factRef`),path:m(`${l}.path`),onSave:P,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,hideIcon:!0})})]})]}),n(r,{className:t.inputsContainer,children:[f&&n(D,{children:[n(r,{children:[a(c,{className:t.formLabel,children:"Prefix (Optional)"}),a(v,{name:`${l}.operatorPrefix`,control:p,placeholder:"Prefix",options:["all","any","none"],disabled:g||d,width:120})]}),n(r,{children:[a(c,{className:t.formLabel,children:"Operator"}),a(v,{name:`${l}.operator`,control:p,placeholder:"Operator",options:j,disabled:g||d,getOptionLabel:e=>(o=>f?.find(y=>o===y.value)?.label??o??"")(e),getOptionValue:e=>(o=>f?.find(y=>o===y.label)?.value??o??"")(e),width:300})]})]}),n(r,{flexGrow:1,children:[a(c,{className:t.formLabel,children:"Value"}),typeof i=="object"&&!Array.isArray(i)?a(q,{value:i,handleClear:C}):a(z,{name:`${l}.value`,control:p,defaultValue:"",render:({field:e,fieldState:o})=>a(T,{...e,variant:"outlined",placeholder:"Enter a value",FormHelperTextProps:{className:t.helperText},error:o.invalid,helperText:o.error?o.error.message:null,margin:"dense",disabled:d||typeof i=="object",className:t.noMargin,fullWidth:!0,InputProps:{endAdornment:a(A,{onClick:C,size:"small",children:a(k,{})}),startAdornment:Array.isArray(i)?a(O,{values:i,onSave:L,iconButton:a(G,{})}):null}})})]}),n(r,{children:[a(c,{className:t.formLabel,style:{visibility:"hidden"},children:"Alternative Input"}),n(r,{display:"flex",width:150,children:[a(F,{factRef:typeof i=="object"?i?.factRef:void 0,path:typeof i=="object"?i?.path:void 0,onSave:V,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,text:"Fact",hideIcon:!0}),a(O,{values:typeof i=="object"&&!Array.isArray(i)?void 0:M(i),onSave:L})]})]})]})]}),a(A,{onClick:w,className:t.deleteButton,"data-testid":`${l}-delete-button`,disabled:d||x,hidden:d||x,style:{visibility:d||x?"hidden":void 0},children:a(E,{className:t.deleteIcon})})]})};export{Q as RuleConditionInput};
1
+ import{jsxs as n,jsx as a,Fragment as D}from"react/jsx-runtime";import{Box as r,FormLabel as c,TextField as T,IconButton as A}from"@material-ui/core";import k from"@material-ui/icons/Close";import E from"@material-ui/icons/Delete";import G from"@material-ui/icons/List";import{asArray as M}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as R,useCallback as b}from"react";import{useFormContext as W,Controller as z}from"react-hook-form";import{useOperators as H}from"../../../../../hooks/operators/useOperators.esm.js";import{FactExplorerDialogButton as F}from"../../../../FactExplorer/FactExplorerDialog.esm.js";import"../../../../FactExplorer/FactExplorerContext.esm.js";import{FormControlledAutocomplete as v}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FactValueDisplay as q}from"./FactValueDisplay.esm.js";import{useRuleConditionStyles as J}from"./styles.esm.js";import{useRuleOptions as K}from"./useRuleOptions.esm.js";import{ValueListInputDialogButton as O}from"./ValueListInput.esm.js";const Q=({name:l,handleDelete:w,disabled:d,disableDelete:x})=>{const t=J(),{control:p,setValue:s,watch:m,clearErrors:h}=W(),{data:N,isLoading:g}=H(),S=m("rulesStep.pathResolver")==="jsonpath",f=R(()=>N?.map(e=>({value:e.name,label:e.title})).sort((e,o)=>e.label.localeCompare(o.label))??[],[N]),j=R(()=>f.map(e=>e.value),[f]),{pathOptions:B,factRefOptions:u,isLoading:L}=K(l,p),I=R(()=>u?.map(e=>e.value)??[],[u]),P=b(({factRef:e,path:o})=>{s(`${l}.factRef`,e),s(`${l}.path`,o),h()},[h,l,s]),V=b(({factRef:e,path:o})=>{s(`${l}.value`,{factRef:e,path:o}),h()},[h,l,s]),$=b(e=>{s(`${l}.value`,e.length>0?e:""),h()},[h,l,s]),i=m(`${l}.value`),C=b(()=>{s(`${l}.value`,"")},[l,s]);return n(r,{className:t.container,children:[a(r,{className:t.connector}),n(r,{paddingTop:2,paddingLeft:2,paddingRight:2,paddingBottom:2,width:"100%",className:t.innerContainer,children:[n(r,{className:t.inputsContainer,children:[u&&n(r,{children:[a(c,{className:t.formLabel,children:"Fact"}),a(v,{name:`${l}.factRef`,control:p,placeholder:"Fact",options:I,getOptionLabel:e=>u?.find(o=>e===o.value)?.label??e,getOptionValue:e=>u?.find(o=>e===o.label)?.value??e??"",disabled:d||L,width:428})]}),n(r,{flexGrow:1,children:[a(c,{className:t.formLabel,children:"Path"}),a(v,{name:`${l}.path`,placeholder:"Path",control:p,disabled:d||L,options:S?B:[],fullWidth:!0})]}),n(r,{children:[a(c,{className:t.formLabel,style:{visibility:"hidden"},children:"Explore"}),a(r,{width:150,children:a(F,{factRef:m(`${l}.factRef`),path:m(`${l}.path`),onSave:P,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,hideIcon:!0})})]})]}),n(r,{className:t.inputsContainer,children:[f&&n(D,{children:[n(r,{children:[a(c,{className:t.formLabel,children:"Prefix (Optional)"}),a(v,{name:`${l}.operatorPrefix`,control:p,placeholder:"Prefix",options:["all","any","none"],disabled:g||d,width:120})]}),n(r,{children:[a(c,{className:t.formLabel,children:"Operator"}),a(v,{name:`${l}.operator`,control:p,placeholder:"Operator",options:j,disabled:g||d,getOptionLabel:e=>(o=>f?.find(y=>o===y.value)?.label??o??"")(e),getOptionValue:e=>(o=>f?.find(y=>o===y.label)?.value??o??"")(e),width:300})]})]}),n(r,{flexGrow:1,children:[a(c,{className:t.formLabel,children:"Value"}),typeof i=="object"&&!Array.isArray(i)?a(q,{value:i,handleClear:C}):a(z,{name:`${l}.value`,control:p,defaultValue:"",render:({field:e,fieldState:o})=>a(T,{...e,variant:"outlined",placeholder:"Enter a value",FormHelperTextProps:{className:t.helperText},error:o.invalid,helperText:o.error?o.error.message:null,margin:"dense",disabled:d||typeof i=="object",className:t.noMargin,fullWidth:!0,InputProps:{endAdornment:a(A,{onClick:C,size:"small",children:a(k,{})}),startAdornment:Array.isArray(i)?a(O,{values:i,onSave:$,iconButton:a(G,{})}):null}})})]}),n(r,{children:[a(c,{className:t.formLabel,style:{visibility:"hidden"},children:"Alternative Input"}),n(r,{display:"flex",width:150,children:[a(F,{factRef:typeof i=="object"?i?.factRef:void 0,path:typeof i=="object"?i?.path:void 0,onSave:V,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,text:"Fact",hideIcon:!0}),a(O,{values:typeof i=="object"&&!Array.isArray(i)?void 0:M(i),onSave:$})]})]})]})]}),a(A,{onClick:w,className:t.deleteButton,"data-testid":`${l}-delete-button`,disabled:d||x,hidden:d||x,style:{visibility:d||x?"hidden":void 0},children:a(E,{className:t.deleteIcon})})]})};export{Q as RuleConditionInput};
2
2
  //# sourceMappingURL=RuleConditionInput.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{parseFactRef as p,stringifyFactRef as $}from"@spotify/backstage-plugin-soundcheck-common";import{useState as b,useEffect as y,useMemo as f}from"react";import{useWatch as C}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 F}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=(o,d)=>{const{data:m,isLoading:h}=G(),{data:s}=F({}),r=C({control:d,name:`${o}.factRef`}),[i,g]=b(()=>l(r));y(()=>{g(l(r))},[r]);const{data:n}=O(i?.source,i?.name),k=f(()=>n?L(n.schema):[],[n]),R=f(()=>m?.flatMap(e=>e.factNames.map(a=>{const t=e.id==="soundcheck"?{source:e.id,scope:"default",name:a}:p(a,{defaultSource:e.id,defaultScope:"default"});let u=t.name;if(t.source==="soundcheck"){const c=s?.edges.find(S=>S.node.id===t.name.replace("track/",""))?.node;u=c?`${c.type==="campaign"?"Campaign: ":"Track: "}${c.name}`:t.name}return{label:`${t.source} - ${u}`,value:$(t)}}))?.sort((e,a)=>e.label.localeCompare(a.label))??[],[m,s]);return{isLoading:h,pathOptions:k,factRefOptions:R}};function l(o){if(o)try{return p(o,{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{jsxs as y,jsx as i}from"react/jsx-runtime";import{parseEntityRef as h}from"@backstage/catalog-model";import{Typography as b}from"@material-ui/core";import{makeStyles as g}from"@material-ui/core/styles";import{uniqBy as x}from"lodash";import{useFormContext as E}from"react-hook-form";import"../../../../contexts/TrackFormContext.esm.js";import"../../../../contexts/CheckFormContext.esm.js";import"../../../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as w}from"../../../../contexts/UserProvider.esm.js";import{useGroupOptions as L}from"../../../../hooks/groups/useGroupOptions.esm.js";import{FormControlledAutocomplete as S}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as C}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import{CHECK_FIELDS as R}from"../../utils/checkFormUtils.esm.js";const T=g(m=>({container:{display:"flex",flexDirection:"column",gap:m.spacing(1)}})),D=({control:m,disabled:a,error:n})=>{const l=T(),{options:p,isLoading:s}=L();let e=x(p.map(r=>({value:r.ref,label:r.name})),"value");const{user:c,userEntityRef:t}=w();t&&(e=[{value:t,label:c?.metadata?.name??t},...e]);const{watch:d}=E(),o=d("detailsStep.ownerEntityRef");o&&t!==o&&!e.some(r=>r.value===o)&&(e=[{value:o,label:h(o).name},...e]);const f=C(e),{owner:{name:u,selectLabel:v}}=R.details;return y("div",{className:l.container,children:[i("div",{children:i(b,{variant:"subtitle2",children:u})}),i("div",{children:i(S,{freeSolo:!1,name:"detailsStep.ownerEntityRef",control:m,placeholder:v,width:250,helperText:n?.message??void 0,disabled:a||s,...f})})]})};export{D as TeamDetailsInput};
1
+ import{jsxs as y,jsx as i}from"react/jsx-runtime";import{parseEntityRef as h}from"@backstage/catalog-model";import{Typography as b}from"@material-ui/core";import{makeStyles as g}from"@material-ui/core/styles";import{uniqBy as x}from"lodash";import{useFormContext as E}from"react-hook-form";import"../../../../contexts/TrackFormContext.esm.js";import"../../../../contexts/CheckFormContext.esm.js";import"../../../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as w}from"../../../../contexts/UserProvider.esm.js";import{useGroupOptions as L}from"../../../../hooks/groups/useGroupOptions.esm.js";import{FormControlledAutocomplete as S}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as C}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{CHECK_FIELDS as R}from"../../utils/checkFormUtils.esm.js";const T=g(m=>({container:{display:"flex",flexDirection:"column",gap:m.spacing(1)}})),D=({control:m,disabled:a,error:n})=>{const l=T(),{options:p,isLoading:s}=L();let e=x(p.map(r=>({value:r.ref,label:r.name})),"value");const{user:c,userEntityRef:t}=w();t&&(e=[{value:t,label:c?.metadata?.name??t},...e]);const{watch:d}=E(),o=d("detailsStep.ownerEntityRef");o&&t!==o&&!e.some(r=>r.value===o)&&(e=[{value:o,label:h(o).name},...e]);const f=C(e),{owner:{name:u,selectLabel:v}}=R.details;return y("div",{className:l.container,children:[i("div",{children:i(b,{variant:"subtitle2",children:u})}),i("div",{children:i(S,{freeSolo:!1,name:"detailsStep.ownerEntityRef",control:m,placeholder:v,width:250,helperText:n?.message??void 0,disabled:a||s,...f})})]})};export{D as TeamDetailsInput};
2
2
  //# sourceMappingURL=TeamDetailsInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{withStyles as p,Tooltip as n}from"@material-ui/core";import s from"@material-ui/icons/Check";import d from"@material-ui/icons/Close";import f from"@material-ui/icons/HelpOutline";import x from"@material-ui/icons/NotInterested";import c from"@material-ui/icons/RemoveCircleOutline";import h from"@material-ui/icons/ReportProblemOutlined";import{ResultState as a}from"../../graphql/generated/index.esm.js";import{resultToText as r}from"../../text.esm.js";const u=p(o=>({root:{color:o.palette.success.main}}))(s),b=p(o=>({root:{color:o.palette.error.main}}))(d),N=p(o=>({root:{color:o.palette.warning.main}}))(h),T=p(o=>({root:{color:o.palette.text.primary}}))(f),g=p(o=>({root:{color:o.palette.text.disabled}}))(c),I=p(o=>({root:{color:o.palette.text.disabled}}))(x),R=p(o=>({root:{color:o.palette.error.main}}))(c),i=({icon:o,tooltip:m})=>t(n,{title:m,children:o}),w=({result:o,className:m,tooltip:l=!0})=>{const e={className:m,"aria-label":r(o),"aria-hidden":!1};return o===a.Passed?t(i,{icon:t(u,{...e}),tooltip:l?r(o):""}):o===a.NotReported?t(i,{icon:t(T,{...e}),tooltip:l?r(o):""}):o===a.Failed?t(i,{icon:t(b,{...e}),tooltip:l?r(o):""}):o===a.Warning?t(i,{icon:t(N,{...e}),tooltip:l?r(o):""}):o===a.NotApplicable?t(i,{icon:t(g,{...e}),tooltip:l?r(o):""}):o===a.Exempt?t(i,{icon:t(I,{...e}),tooltip:l?r(o):""}):o===a.Error?t(i,{icon:t(R,{...e}),tooltip:l?r(o):""}):null};export{w as CheckIcon,i as IconWithTooltip};
1
+ import{jsxs as c,Fragment as h,jsx as t}from"react/jsx-runtime";import{withStyles as l,lighten as f,Tooltip as g}from"@material-ui/core";import x from"@material-ui/icons/Check";import u from"@material-ui/icons/Close";import T from"@material-ui/icons/HelpOutline";import N from"@material-ui/icons/NotInterested";import m from"@material-ui/icons/RemoveCircleOutline";import b from"@material-ui/icons/ReportProblemOutlined";import{ResultState as n}from"../../graphql/generated/index.esm.js";import{resultToText as s}from"../../text.esm.js";const w=l(o=>({root:{color:o.palette.success.main}}))(x),S=l(o=>({root:{color:o.palette.error.main}}))(u),v=l(o=>({root:{color:o.palette.warning.main}}))(b),D=l(o=>({root:{color:o.palette.text.primary}}))(T),E=l(o=>({root:{color:o.palette.text.disabled}}))(m),I=l(o=>({root:{color:o.palette.info.main}}))(N),R=l(o=>({root:{color:f(o.palette.error.main,.2)}}))(m),r=({icon:o,tooltip:a})=>t(g,{title:a,children:o}),j=({result:o,className:a,tooltip:d=!0,timestamp:p})=>{const i={className:a,"aria-label":s(o),"aria-hidden":!1},e=d?c(h,{children:[t("div",{children:t("strong",{children:s(o)})}),p&&c("div",{children:[t("strong",{children:"Updated:"})," ",new Date(p).toLocaleDateString()," ",new Date(p).toLocaleTimeString()]})]}):"";return o===n.Passed?t(r,{icon:t(w,{...i}),tooltip:e}):o===n.NotReported?t(r,{icon:t(D,{...i}),tooltip:e}):o===n.Failed?t(r,{icon:t(S,{...i}),tooltip:e}):o===n.Warning?t(r,{icon:t(v,{...i}),tooltip:e}):o===n.NotApplicable?t(r,{icon:t(E,{...i}),tooltip:e}):o===n.Exempt?t(r,{icon:t(I,{...i}),tooltip:e}):o===n.Error?t(r,{icon:t(R,{...i}),tooltip:e}):null};export{j as CheckIcon,r as IconWithTooltip};
2
2
  //# sourceMappingURL=CheckIcon.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as f}from"react/jsx-runtime";import{useRouteRef as ie}from"@backstage/core-plugin-api";import{EntityRefLink as se}from"@backstage/plugin-catalog-react";import{usePermission as j}from"@backstage/plugin-permission-react";import{makeStyles as oe,useTheme as re,Button as ne,Typography as z,Tabs as ae,Tab as $,Box as M}from"@material-ui/core";import{soundcheckCheckReadPermission as le,soundcheckCheckUpdatePermission as ce,toEntityFilterQuery as A,combineEntityFilterQueries as de}from"@spotify/backstage-plugin-soundcheck-common";import v from"lodash/isEqual";import{useMemo as h,useState as x,useEffect as me,useCallback as Q}from"react";import{useSearchParams as pe,useParams as he,useNavigate as fe}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCheck as ue}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as ge}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as ye}from"../../hooks/aggregations/useCheckStatus.esm.js";import{checkEditRouteRef as ke}from"../../routes.esm.js";import{CheckStatusBar as Ce}from"../CheckStatusBar/CheckStatusBar.esm.js";import{FilterSidebar as Se}from"../FilterSidebar/FilterSidebar.esm.js";import{StateFilter as xe}from"../FilterSidebar/StateFilter.esm.js";import{LoadingIndicator as we}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as U}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as ve}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as Ee}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import{CheckEntitiesTable as be}from"./CheckEntitiesTable/CheckEntitiesTable.esm.js";import{CheckStatusHistoryChart as Ne}from"./CheckStatusHistoryChart.esm.js";import{CheckStatusTable as Ie}from"./CheckStatusTable.esm.js";import{ExemptionsTable as Re}from"./ExemptionsTable.esm.js";const Te=e=>{const{lifecycles:s,owners:c,types:l,systems:r}=e,n=s?.length?{"spec.lifecycle":s}:void 0,d=c?.length?{"relations.ownedBy":c}:void 0,m=l?.length?{"spec.type":l}:void 0,p=r?.length?{"relations.partOf":r}:void 0;if(n||d||m||p)return{...n,...d,...m,...p}};function Be(e,s){for(const c of e.levels)for(const l of c.checks)if(l.id===s)return l;return null}const Le=oe(e=>({root:{height:"100%"},pageContent:{display:"flex",minHeight:`calc(100vh - ${e.spacing(15)}px)`,borderTop:`1px solid ${e.palette.divider}`,height:"100%"},mainContentArea:{flex:1,display:"flex",flexDirection:"column",minWidth:0},editButton:{marginLeft:"auto"},statusContainer:{borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(3,0,2,3)},statusCards:{display:"flex",gap:e.spacing(2)},currentStatusSection:{width:"325px",minWidth:"325px",flex:0,display:"flex",flexDirection:"column"},historicalStatusSection:{flex:1,flexShrink:1,flexGrow:1,flexBasis:"auto",minWidth:"150px",display:"flex",flexDirection:"column"},statusTitle:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${e.typography.h5.fontSize}px`,cursor:"default",marginBottom:e.spacing(2)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},entitiesContainer:{padding:e.spacing(2,3,3,3)},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}}})),Fe=()=>{const e=Le(),[s,c]=pe(),{trackId:l,checkId:r}=he(),n=h(()=>s.getAll("states"),[s]),d=h(()=>s.getAll("owners"),[s]),m=h(()=>s.getAll("lifecycles"),[s]),p=h(()=>s.getAll("types"),[s]),u=h(()=>s.getAll("systems"),[s]),[g,E]=x(m),[y,b]=x(d),[k,N]=x(p),[C,I]=x(u),[S,R]=x(n);me(()=>{b(d),E(m),N(p),I(u),R(n)},[d,m,p,u,n]);const G=h(()=>{const i={owners:!v(y,d),lifecycles:!v(g,m),types:!v(k,p),systems:!v(C,u),states:!v(S,n)};return Object.values(i).some(Boolean)},[y,d,g,m,k,p,C,u,S,n]),V=Q(()=>{const i=new URLSearchParams(s);i.delete("lifecycles"),i.delete("owners"),i.delete("types"),i.delete("systems"),i.delete("states"),g.length>0&&g.forEach(a=>i.append("lifecycles",a)),y.length>0&&y.forEach(a=>i.append("owners",a)),k.length>0&&k.forEach(a=>i.append("types",a)),C.length>0&&C.forEach(a=>i.append("systems",a)),S.length>0&&S.forEach(a=>i.append("states",a)),c(i)},[s,g,y,k,C,S,c]),J=Q(()=>{E([]),b([]),N([]),I([]),R([]);const i=new URLSearchParams(s);i.delete("lifecycles"),i.delete("owners"),i.delete("types"),i.delete("systems"),i.delete("states"),c(i)},[s,c]),T=Te({lifecycles:m,owners:d,types:p,systems:u}),{data:w,isLoading:K}=ge(l),{data:o,isLoading:B}=ue(r),{loading:X,allowed:Y}=j({permission:le,resourceRef:r}),{loading:D,allowed:P}=j({permission:ce,resourceRef:r}),H=fe(),O=ie(ke),Z=re();let L;if(r)if(w){const i=A(w.filter),a=A(Be(w,r)?.filter);L=de(i,a)}else o&&(L=A(o.filter));const{data:W}=ye({checkId:r,trackId:l,filter:T,states:n?.length?n:void 0},!!r),_=h(()=>o?.ownerEntityRef?t(se,{color:"inherit",entityRef:o.ownerEntityRef,className:e.ownerLink}):null,[o?.ownerEntityRef,e.ownerLink]),q=h(()=>!D&&P&&o?.isEditable?t(ne,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{H(O({checkId:o.id}))},children:"Edit Check"}):null,[P,o?.id,o?.isEditable,e.editButton,O,D,H]),ee=h(()=>o?.description?t(Ee,{className:e.headerDescription,content:o.description}):null,[e.headerDescription,o?.description]);ve({title:o?.name??r??"Soundcheck",description:ee,customSubtitle:_,sectionRight:q});const[F,te]=x(0);return f("div",{children:[t(U,{entityName:"track",entityId:l,showNotFound:!!l&&!K&&!w}),t(U,{entityName:"check",entityId:r,showNotFound:!B&&!o,showCannotView:!!o&&!X&&!Y}),B&&t(we,{}),!B&&!!o&&t("div",{className:e.root,children:f("div",{className:e.pageContent,children:[t(Se,{trackFilter:L,stagedTypes:k,stagedLifecycles:g,stagedOwners:y,stagedSystems:C,onTypesChange:N,onLifecyclesChange:E,onOwnersChange:b,onSystemsChange:I,onApplyFilters:V,onClearFilters:J,hasFilterChanges:G,children:t(xe,{states:n,stagedStates:S,onStagedStatesChange:R})}),f("div",{className:e.mainContentArea,children:[t("div",{className:e.statusContainer,children:f("div",{className:e.statusCards,children:[f("div",{className:e.currentStatusSection,children:[t(z,{className:e.statusTitle,children:"Current Status"}),t("div",{style:{width:"100%",height:30,display:"flex",alignItems:"flex-start",marginBottom:Z.spacing(2)},children:t(Ce,{status:W})}),t("div",{children:t(Ie,{checkStatus:W})})]}),f("div",{className:e.historicalStatusSection,children:[t(z,{className:e.statusTitle,children:"Historical Status"}),t("div",{style:{height:"100%"},children:t(Ne,{checkId:r,trackId:l,filter:T,states:n})})]})]})}),f("div",{className:e.entitiesContainer,children:[f(ae,{value:F,onChange:(i,a)=>te(a),indicatorColor:"primary",textColor:"primary","aria-label":"Entities and Exemptions Tabs",children:[t($,{label:"Entities"}),t($,{label:"Exemptions"})]}),t(M,{hidden:F!==0,children:t(be,{checkId:r,trackId:w?.id,filter:T,states:n})}),t(M,{hidden:F!==1,children:t(Re,{checkId:r})})]})]})]})})]})};export{Fe as CheckInsightsPage};
1
+ import{jsx as i,jsxs as m}from"react/jsx-runtime";import{useRouteRef as oe}from"@backstage/core-plugin-api";import{EntityRefLink as ne}from"@backstage/plugin-catalog-react";import{usePermission as j}from"@backstage/plugin-permission-react";import{makeStyles as ae,useTheme as le,Button as ce,Typography as Q,Tabs as de,Tab as G,Box as J}from"@material-ui/core";import{soundcheckCheckReadPermission as me,soundcheckCheckUpdatePermission as pe,toEntityFilterQuery as A,combineEntityFilterQueries as he}from"@spotify/backstage-plugin-soundcheck-common";import b from"lodash/isEqual";import{useMemo as n,useState as w,useEffect as fe,useCallback as K}from"react";import{useSearchParams as ue,useParams as ge,useNavigate as ye}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCheck as ke}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Ce}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as Se}from"../../hooks/aggregations/useCheckStatus.esm.js";import{checkEditRouteRef as xe}from"../../routes.esm.js";import{toFilter as ve}from"../../utils/helpers.esm.js";import{CheckStatusBar as we}from"../CheckStatusBar/CheckStatusBar.esm.js";import{FilterSidebar as be}from"../FilterSidebar/FilterSidebar.esm.js";import{StateFilter as Ee}from"../FilterSidebar/StateFilter.esm.js";import{LoadingIndicator as Ne}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as V}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Ie}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as Re}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as Te}from"../TechHealth/Filters/utils.esm.js";import{CheckEntitiesTable as Le}from"./CheckEntitiesTable/CheckEntitiesTable.esm.js";import{CheckStatusHistoryChart as Be}from"./CheckStatusHistoryChart.esm.js";import{CheckStatusTable as De}from"./CheckStatusTable.esm.js";import{ExemptionsTable as Fe}from"./ExemptionsTable.esm.js";function Ae(e,r){for(const h of e.levels)for(const l of h.checks)if(l.id===r)return l;return null}const Pe=ae(e=>({root:{height:"100%"},pageContent:{display:"flex",minHeight:`calc(100vh - ${e.spacing(15)}px)`,borderTop:`1px solid ${e.palette.divider}`,height:"100%"},mainContentArea:{flex:1,display:"flex",flexDirection:"column",minWidth:0},editButton:{marginLeft:"auto"},statusContainer:{borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(3,0,2,3)},statusCards:{display:"flex",gap:e.spacing(2)},currentStatusSection:{width:"325px",minWidth:"325px",flex:0,display:"flex",flexDirection:"column"},historicalStatusSection:{flex:1,flexShrink:1,flexGrow:1,flexBasis:"auto",minWidth:"150px",display:"flex",flexDirection:"column"},statusTitle:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${e.typography.h5.fontSize}px`,cursor:"default",marginBottom:e.spacing(2)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},entitiesContainer:{padding:e.spacing(2,3,3,3)},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}}})),Oe=()=>{const e=Pe(),[r,h]=ue(),{trackId:l,checkId:s}=ge(),a=n(()=>r.getAll("states"),[r]),f=n(()=>r.getAll("owners"),[r]),u=n(()=>r.getAll("lifecycles"),[r]),g=n(()=>r.getAll("types"),[r]),y=n(()=>r.getAll("systems"),[r]),X=n(()=>Te(r.get("numberOfDays")),[r]),[k,E]=w(u),[C,N]=w(f),[S,I]=w(g),[x,R]=w(y),[v,T]=w(a);fe(()=>{N(f),E(u),I(g),R(y),T(a)},[f,u,g,y,a]);const Y=n(()=>{const t={owners:!b(C,f),lifecycles:!b(k,u),types:!b(S,g),systems:!b(x,y),states:!b(v,a)};return Object.values(t).some(Boolean)},[C,f,k,u,S,g,x,y,v,a]),Z=K(()=>{const t=new URLSearchParams(r);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),t.delete("states"),k.length>0&&k.forEach(o=>t.append("lifecycles",o)),C.length>0&&C.forEach(o=>t.append("owners",o)),S.length>0&&S.forEach(o=>t.append("types",o)),x.length>0&&x.forEach(o=>t.append("systems",o)),v.length>0&&v.forEach(o=>t.append("states",o)),h(t)},[r,k,C,S,x,v,h]),q=K(()=>{E([]),N([]),I([]),R([]),T([]);const t=new URLSearchParams(r);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),t.delete("states"),h(t)},[r,h]),L=ve({lifecycles:u,owners:f,types:g,systems:y}),{data:p,isLoading:P}=Ce(l),{data:c,isLoading:O}=ke(s),{loading:H,allowed:B}=j({permission:me,resourceRef:s}),d=n(()=>c??p?.levels.flatMap(t=>t.checks).find(t=>t.id===s),[c,s,p?.levels]),{loading:W,allowed:z}=j({permission:pe,resourceRef:s}),M=ye(),U=oe(xe),_=le();let D;if(s)if(p){const t=A(p.filter),o=A(Ae(p,s)?.filter);D=he(t,o)}else d?.filter&&(D=A(d.filter));const{data:$}=Se({checkId:s,trackId:l,filter:L,states:a?.length?a:void 0},!!s),ee=n(()=>c?.ownerEntityRef?i(ne,{color:"inherit",entityRef:c.ownerEntityRef,className:e.ownerLink}):null,[c?.ownerEntityRef,e.ownerLink]),te=n(()=>!W&&z&&c?.isEditable?i(ce,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{M(U({checkId:c.id}))},children:"Edit Check"}):null,[z,c?.id,c?.isEditable,e.editButton,U,W,M]),ie=n(()=>d?.description?i(Re,{className:e.headerDescription,content:d.description}):null,[e.headerDescription,d?.description]);Ie({title:d?.name??s??"Soundcheck",description:ie,customSubtitle:ee,sectionRight:te});const re=n(()=>!!d&&!H&&!B,[B,d,H]),[F,se]=w(0);return m("div",{children:[i(V,{entityName:"track",entityId:l,showNotFound:!!l&&!P&&!p}),i(V,{entityName:"check",entityId:s,showCannotView:re}),(O||!!l&&P)&&i(Ne,{}),!O&&B&&i("div",{className:e.root,children:m("div",{className:e.pageContent,children:[i(be,{trackFilter:D,stagedTypes:S,stagedLifecycles:k,stagedOwners:C,stagedSystems:x,onTypesChange:I,onLifecyclesChange:E,onOwnersChange:N,onSystemsChange:R,onApplyFilters:Z,onClearFilters:q,hasFilterChanges:Y,children:i(Ee,{states:a,stagedStates:v,onStagedStatesChange:T})}),m("div",{className:e.mainContentArea,children:[i("div",{className:e.statusContainer,children:m("div",{className:e.statusCards,children:[m("div",{className:e.currentStatusSection,children:[i(Q,{className:e.statusTitle,children:"Current Status"}),i("div",{style:{width:"100%",height:30,display:"flex",alignItems:"flex-start",marginBottom:_.spacing(2)},children:i(we,{status:$})}),i("div",{children:i(De,{checkStatus:$})})]}),m("div",{className:e.historicalStatusSection,children:[i(Q,{className:e.statusTitle,children:"Historical Status"}),i("div",{style:{height:"100%"},children:i(Be,{checkId:s,trackId:l,filter:L,states:a,numberOfDays:X})})]})]})}),m("div",{className:e.entitiesContainer,children:[m(de,{value:F,onChange:(t,o)=>se(o),indicatorColor:"primary",textColor:"primary","aria-label":"Entities and Exemptions Tabs",children:[i(G,{label:"Entities"}),i(G,{label:"Exemptions"})]}),i(J,{hidden:F!==0,children:i(Le,{checkId:s,trackId:p?.id,filter:L,states:a})}),i(J,{hidden:F!==1,children:i(Fe,{checkId:s})})]})]})]})})]})};export{Oe as CheckInsightsPage};
2
2
  //# sourceMappingURL=CheckInsightsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as f}from"react/jsx-runtime";import{makeStyles as u,useTheme as x}from"@material-ui/core";import{DateTime as A}from"luxon";import{ResponsiveContainer as v,LineChart as g,CartesianGrid as I,XAxis as L,YAxis as c,Tooltip as b,Line as n}from"recharts";import{useCheckStatusHistory as C}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{getCheckStatusColor as o}from"../../utils/colors.esm.js";import{compactNumberFormatter as D}from"../../utils/formatters.esm.js";import{LoadingChart as W}from"../Charts/LoadingChart.esm.js";const K=u({root:{height:250,width:"100%",position:"relative",borderRadius:"4px"}}),S=({checkId:d,trackId:m,filter:p,states:l})=>{const t=x(),k=K(),{data:s,isLoading:h}=C({checkId:d,trackId:m,filter:p,states:l,numberOfDays:30},!!d);if(h)return e(W,{type:"line",numLines:3});const r=i=>s?.history.some(y=>y[i]>0)??!1,a={stroke:t.palette.background.paper,strokeWidth:1,r:5};return e("div",{className:k.root,children:e(v,{height:250,debounce:1,children:f(g,{data:s?.history??[],margin:{top:0,right:0,bottom:0,left:0},children:[e(I,{stroke:t.palette.divider,strokeWidth:1,horizontal:!0,vertical:!1}),e(L,{dataKey:"date",tickFormatter:i=>A.fromISO(i).toFormat("MMM d"),tickLine:!1,axisLine:!1}),e(c,{yAxisId:"percentage",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:i=>`${i}%`,ticks:[0,25,50,75,100]}),e(c,{yAxisId:"count",orientation:"right",domain:[0,s?.numberOfEntities??0],axisLine:!1,tickLine:!1,tickFormatter:i=>D(i)}),e(b,{contentStyle:{backgroundColor:t.palette.background.paper,color:t.palette.text.primary,border:`1px solid ${t.palette.divider}`},cursor:{stroke:t.palette.divider,strokeWidth:1}}),r("passed")&&e(n,{type:"monotone",dataKey:"passed",stroke:o(t,"passed"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"passed"),...a}}),r("failed")&&e(n,{type:"monotone",dataKey:"failed",stroke:o(t,"failed"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"failed"),...a}}),r("warning")&&e(n,{type:"monotone",dataKey:"warning",stroke:o(t,"warning"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"warning"),...a}}),r("error")&&e(n,{type:"monotone",dataKey:"error",stroke:o(t,"error"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"error"),...a}}),r("exempt")&&e(n,{type:"monotone",dataKey:"exempt",stroke:o(t,"exempt"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"exempt"),...a}}),r("notReported")&&e(n,{type:"monotone",dataKey:"notReported",stroke:o(t,"not-reported"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"not-reported"),...a}})]})})})};export{S as CheckStatusHistoryChart};
1
+ import{jsx as e,jsxs as m}from"react/jsx-runtime";import{makeStyles as x,useTheme as A}from"@material-ui/core";import{DateTime as v}from"luxon";import{ResponsiveContainer as g,LineChart as I,CartesianGrid as b,XAxis as L,YAxis as c,Tooltip as C,Line as n}from"recharts";import{useCheckStatusHistory as D}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{getCheckStatusColor as o}from"../../utils/colors.esm.js";import{compactNumberFormatter as W}from"../../utils/formatters.esm.js";import{LoadingChart as K}from"../Charts/LoadingChart.esm.js";import{TimePeriodBar as F}from"../TimePeriodBar/TimePeriodBar.esm.js";const S=x({root:{height:290,width:"100%",position:"relative",borderRadius:"4px"}}),w=({checkId:d,trackId:p,filter:l,states:k,numberOfDays:h})=>{const t=A(),y=S(),{data:s,isLoading:f}=D({checkId:d,trackId:p,filter:l,states:k,numberOfDays:h},!!d);if(f)return e(K,{type:"line",numLines:3});const r=i=>s?.history.some(u=>u[i]>0)??!1,a={stroke:t.palette.background.paper,strokeWidth:1,r:5};return m("div",{className:y.root,children:[e(F,{}),e(g,{height:250,debounce:1,children:m(I,{data:s?.history??[],margin:{top:0,right:0,bottom:0,left:0},children:[e(b,{stroke:t.palette.divider,strokeWidth:1,horizontal:!0,vertical:!1}),e(L,{dataKey:"date",tickFormatter:i=>v.fromISO(i).toFormat("MMM d"),tickLine:!1,axisLine:!1}),e(c,{yAxisId:"percentage",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:i=>`${i}%`,ticks:[0,25,50,75,100]}),e(c,{yAxisId:"count",orientation:"right",domain:[0,s?.numberOfEntities??0],axisLine:!1,tickLine:!1,tickFormatter:i=>W(i)}),e(C,{contentStyle:{backgroundColor:t.palette.background.paper,color:t.palette.text.primary,border:`1px solid ${t.palette.divider}`},cursor:{stroke:t.palette.divider,strokeWidth:1}}),r("passed")&&e(n,{type:"monotone",dataKey:"passed",stroke:o(t,"passed"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"passed"),...a}}),r("failed")&&e(n,{type:"monotone",dataKey:"failed",stroke:o(t,"failed"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"failed"),...a}}),r("warning")&&e(n,{type:"monotone",dataKey:"warning",stroke:o(t,"warning"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"warning"),...a}}),r("error")&&e(n,{type:"monotone",dataKey:"error",stroke:o(t,"error"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"error"),...a}}),r("exempt")&&e(n,{type:"monotone",dataKey:"exempt",stroke:o(t,"exempt"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"exempt"),...a}}),r("notReported")&&e(n,{type:"monotone",dataKey:"notReported",stroke:o(t,"not-reported"),yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o(t,"not-reported"),...a}})]})})]})};export{w as CheckStatusHistoryChart};
2
2
  //# sourceMappingURL=CheckStatusHistoryChart.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as w}from"react/jsx-runtime";import{useApi as _,featureFlagsApiRef as q,useRouteRef as z}from"@backstage/core-plugin-api";import{usePermission as J}from"@backstage/plugin-permission-react";import{makeStyles as K,Button as x,Grid as o}from"@material-ui/core";import{soundcheckCheckCreatePermission as U}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useEffect as y}from"react";import{useNavigate as V}from"react-router-dom";import X from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as Y}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCheckOwners as ee}from"../../../hooks/checks/useGetCheckOwners.esm.js";import re from"../../../images/no-results.svg";import{checkTemplatesRouteRef as te}from"../../../routes.esm.js";import{FilterDefault as A}from"../../../utils/filters.esm.js";import{EmptyState as S}from"../../EmptyState/EmptyState.esm.js";import{Pagination as ae}from"../../Pagination/Pagination.esm.js";import{SearchFilters as oe}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as ie}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as se}from"./CheckSummaryCard.esm.js";var B=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(B||{}),I=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(I||{});const ce=K(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),ne=({checksPerPage:e,currentCursor:R})=>{const s=ce(),[h,p]=i(R),[n,F]=i(""),[g,O]=i(A.Alpha),[u,T]=i(A.Owner),[f,G]=i(""),{data:L,isLoading:E}=ee();X(()=>{G(n)},500,[n]);const{loading:k,allowed:j}=J({permission:U}),{data:a,isLoading:l}=Y({ids:void 0,first:e,after:h,orderAlphabetical:g,searchByOwner:u,searchByName:f}),[m,D]=i(a),d=m?.edges?.map(t=>t.node),[C,P]=i([]);y(()=>{p(void 0),P([])},[f]);const v=_(q),H=!v.getRegisteredFlags().find(t=>t.name==="soundcheck-enable-check-creation")||v.isActive("soundcheck-enable-check-creation"),b=!j||!H,W=t=>{O(t.target.value)},$=t=>{T(t.target.value)};y(()=>{a&&D(()=>({totalCount:a.totalCount,edges:a.edges,pageInfo:{startCursor:a.pageInfo.startCursor,endCursor:a.pageInfo.endCursor,hasNextPage:a?.pageInfo.hasNextPage??!1,hasPreviousPage:a?.pageInfo.hasPreviousPage??!1}}))},[a]);const M=V(),Q=z(te),N=()=>M(Q());if(!l&&!d)return r(S,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:re,action:!k&&r(x,{disabled:b,variant:"contained",color:"primary",onClick:N,children:"Get started"})});let c;l?c=r(ie,{}):d?.length?c=d?.map(t=>r(o,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${t.id}`,children:r(se,{check:t})},t.id)):c=r(o,{xs:12,item:!0,role:"listitem","aria-label":"result",children:r(S,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."})});const Z=m?.pageInfo.hasNextPage||C?.length>0;return w(o,{container:!0,direction:"row",className:s.container,children:[w(o,{container:!0,className:s.header,children:[r(oe,{searchPlaceholder:"Search Available Checks",isLoading:l||E,searchTerm:n,setSearchTerm:F,filterAlpha:g,handleAlphabeticalFilterChange:W,filterOwner:u,handleOwnerFilterChange:$,owners:L}),r(o,{item:!0,xs:2,className:s.headerButtons,children:!k&&r(x,{disabled:b,variant:"contained",color:"primary",onClick:N,className:s.createButton,children:"Create Check"})})]}),r(o,{container:!0,spacing:4,role:"list","aria-label":"checks",children:c}),Z&&r(o,{item:!0,xs:12,children:r(ae,{response:m,listingsPerPage:e,cursor:h,setCursor:p,prevCursors:C,setPrevCursors:P,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})})]})};export{B as CheckEmptyState,ne as CheckListPage,I as CheckNoResults};
1
+ import{jsx as t,jsxs as h}from"react/jsx-runtime";import{useApi as w,featureFlagsApiRef as X,useRouteRef as Y}from"@backstage/core-plugin-api";import{usePermission as _}from"@backstage/plugin-permission-react";import{makeStyles as ee,Button as A,Grid as o}from"@material-ui/core";import{soundcheckCheckCreatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useEffect as N}from"react";import{useNavigate as te}from"react-router-dom";import ae from"react-use/lib/useDebounce";import{soundcheckApiRef as oe}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as ie}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCheckOwners as se}from"../../../hooks/checks/useGetCheckOwners.esm.js";import{useImportChecks as ce}from"../../../hooks/checks/useImportChecks.esm.js";import ne from"../../../images/no-results.svg";import{checkTemplatesRouteRef as me}from"../../../routes.esm.js";import{exportChecks as le}from"../../../utils/export.esm.js";import{FilterDefault as I}from"../../../utils/filters.esm.js";import{EmptyState as S}from"../../EmptyState/EmptyState.esm.js";import{ImportExportPanel as pe}from"../../ImportExportPanel/ImportExportPanel.esm.js";import{Pagination as de}from"../../Pagination/Pagination.esm.js";import{SearchFilters as he}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as ge}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as ue}from"./CheckSummaryCard.esm.js";var B=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(B||{}),R=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(R||{});const fe=ee(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),ke=({checksPerPage:e,currentCursor:E})=>{const s=fe(),[g,u]=i(E),[l,F]=i(""),[f,O]=i(I.Alpha),[k,T]=i(I.Owner),[C,G]=i(""),{data:L,isLoading:j}=se();ae(()=>{G(l)},500,[l]);const{loading:P,allowed:D}=_({permission:re}),{data:a,isLoading:c}=ie({ids:void 0,first:e,after:g,orderAlphabetical:f,searchByOwner:k,searchByName:C}),[p,H]=i(a),n=p?.edges?.map(r=>r.node),[b,v]=i([]);N(()=>{u(void 0),v([])},[C]);const x=w(X),W=!x.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-check-creation")||x.isActive("soundcheck-enable-check-creation"),d=!D||!W,$=r=>{O(r.target.value)},q=r=>{T(r.target.value)};N(()=>{a&&H(()=>({totalCount:a.totalCount,edges:a.edges,pageInfo:{startCursor:a.pageInfo.startCursor,endCursor:a.pageInfo.endCursor,hasNextPage:a?.pageInfo.hasNextPage??!1,hasPreviousPage:a?.pageInfo.hasPreviousPage??!1}}))},[a]);const z=te(),J=Y(me),y=()=>z(J()),M=w(oe),{mutateAsync:Q}=ce(),V=async r=>Q(r),Z=async()=>{const r=await M.getChecks({orderAlphabetical:"asc"});return le(r.edges.map(U=>U.node))};if(!c&&!n)return t(S,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:ne,action:!P&&t(A,{disabled:d,variant:"contained",color:"primary",onClick:y,children:"Get started"})});let m;c?m=t(ge,{}):n?.length?m=n?.map(r=>t(o,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${r.id}`,children:t(ue,{check:r})},r.id)):m=t(o,{xs:12,item:!0,role:"listitem","aria-label":"result",children:t(S,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."})});const K=p?.pageInfo.hasNextPage||b?.length>0;return h(o,{container:!0,direction:"row",className:s.container,children:[h(o,{container:!0,className:s.header,children:[t(he,{searchPlaceholder:"Search Available Checks",isLoading:c||j,searchTerm:l,setSearchTerm:F,filterAlpha:f,handleAlphabeticalFilterChange:$,filterOwner:k,handleOwnerFilterChange:q,owners:L}),h(o,{item:!0,xs:4,className:s.headerButtons,children:[t(pe,{resourceType:"check",disableImport:d,disableExport:c||!n?.length,onImport:V,onExport:Z}),!P&&t(A,{disabled:d,variant:"contained",color:"primary",onClick:y,className:s.createButton,children:"Create Check"})]})]}),t(o,{container:!0,spacing:4,role:"list","aria-label":"checks",children:m}),K&&t(o,{item:!0,xs:12,children:t(de,{response:p,listingsPerPage:e,cursor:g,setCursor:u,prevCursors:b,setPrevCursors:v,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})})]})};export{B as CheckEmptyState,ke as CheckListPage,R as CheckNoResults};
2
2
  //# sourceMappingURL=CheckListPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as o,jsx as e}from"react/jsx-runtime";import{makeStyles as f,Box as i,Typography as h,Tooltip as x,Icon as y,IconButton as I}from"@material-ui/core";import b from"@material-ui/icons/ArrowDropDown";import u from"@material-ui/icons/ArrowDropUp";import g from"@material-ui/icons/HelpOutline";import v from"../Expand/Expand.esm.js";const D=f(({palette:l})=>({header:{display:"flex",alignItems:"left",flexDirection:"row",cursor:"pointer",justifyContent:"space-between"},label:{display:"flex",alignItems:"center"},tooltipIcon:{display:"flex",alignItems:"center",justifyContent:"center",color:l.text.primary}})),E=({label:l,tooltip:r,isExpanded:a,setIsExpanded:p,children:d,onExpandDone:m=()=>{}})=>{const n=D(),s=()=>{p(t=>!t)},c=t=>{(t.key==="Enter"||t.key===" ")&&s()};return o(i,{children:[o("div",{className:n.header,onClick:s,onKeyDown:c,role:"button",tabIndex:0,children:[o("div",{className:n.label,children:[e(i,{children:e(h,{variant:"subtitle2",children:l})}),r&&e(x,{title:r,className:n.tooltipIcon,children:e(y,{children:e(g,{style:{fontSize:16,verticalAlign:"text-top"}})})})]}),e(i,{children:e(I,{size:"small",onKeyDown:c,children:a?e(u,{fontSize:"small"}):e(b,{fontSize:"small"})})})]}),e(v,{visible:a,onExpandDone:m,children:d})]})};export{E as CollapsablePanel};
2
+ //# sourceMappingURL=CollapsablePanel.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as a,jsx as e}from"react/jsx-runtime";import{Content as E,LinkButton as D}from"@backstage/core-components";import{useRouteRef as y}from"@backstage/core-plugin-api";import{usePermission as x}from"@backstage/plugin-permission-react";import{makeStyles as F,Box as i,Button as I,Typography as g,Card as S,CardHeader as j,CardContent as A,Tooltip as G,CardActions as H}from"@material-ui/core";import{Alert as L}from"@material-ui/lab";import{soundcheckCollectorReadPermission as M,soundcheckCollectorUpdatePermission as U,parseFactRef as N,asArray as $}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as P,uniq as O}from"lodash";import{useMemo as b}from"react";import{useParams as V,useNavigate as W}from"react-router-dom";import{useGetCollectors as q}from"../../hooks/collectors/useGetCollectors.esm.js";import{integrationEditRouteRef as _,integrationsPageRouteRef as z,checkDetailsRouteRef as J}from"../../routes.esm.js";import{mapRuleToExpression as K}from"../CheckForm/utils/checkFormUtils.esm.js";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as Q}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as X}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as Y}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Z}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as ee}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"react-markdown";import"rehype-raw";import"remark-gfm";import{CollectorFactTable as te}from"./CollectorFactTable.esm.js";const oe=F(d=>({card:{width:360},cardDescription:{"& p":{marginTop:d.spacing(.5),marginBottom:d.spacing(.5)}},cardContent:{flexGrow:1}})),re=({id:d,title:C,description:o,rules:l,integrationId:h,hasSchedule:k})=>{const m=oe(),R=y(J),f=b(()=>{const t=[],s=c=>{for(const r of c.conditions??[])t.push(r.factRef),typeof r.value=="object"&&Object.hasOwn(r.value,"factRef")&&t.push(r.value.factRef);for(const r of c.expressions??[])s(r)};return l&&s(l),O(t).filter(c=>{try{return N(c).source===h}catch{return!1}})},[h,l]);return a(S,{className:m.card,children:[e(j,{title:C}),a(A,{className:m.cardContent,children:[o&&e(i,{overflow:"auto",maxHeight:200,children:e(ee,{className:m.cardDescription,content:o})}),!P(f)&&a(i,{marginTop:1,overflow:"auto",maxHeight:120,children:[e(g,{variant:"subtitle2",children:"Used Fact Refs"}),f.map(t=>e(i,{children:t},"factRef"))]}),k&&e(i,{marginTop:1,children:e(G,{title:"Configure this integration's collection schedule instead.",children:e(L,{severity:"warning",children:"Check Schedule Detected"})})})]}),e(H,{children:e(D,{variant:"outlined",to:R({checkId:d}),target:"_blank",children:"View"})})]})},ie=({id:d})=>{const C=V(),o=d??C.integrationId,{data:l,isLoading:h}=q([o??""]),{loading:k,allowed:m}=x({permission:M}),{loading:R,allowed:f}=x({permission:U}),t=l?.[0],s=h||R||k,c=f&&t?.isEditable,r=W(),v=y(_),w=y(z),B=b(()=>a(i,{display:"flex",gridGap:12,children:[e(I,{variant:"contained",color:"primary",onClick:()=>{r(w())},children:"All Integrations"}),o&&c&&e(I,{variant:"contained",color:"primary",onClick:()=>{r(v({integrationId:o}))},children:"Edit Integration"})]}),[w,v,o,c,r]);return Z({title:t?.name??o,description:t?t.description??"":"",docLink:t?`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t.id}`:"",sectionRight:B}),e(Q,{hidePath:!0,children:a(E,{children:[s&&e(X,{}),e(Y,{entityName:"Integration",entityId:o,showNotFound:!s&&!t,showCannotView:!s&&!m}),t&&a(i,{children:[a(i,{marginBottom:2,children:[e(g,{variant:"h6",children:"Facts"}),e(i,{marginBottom:2,children:e(te,{facts:t.factNames.map(n=>{const u=(p=>{try{return N(p).name}catch{return p}})(n),T=$(t.config?.collects).find(p=>p?.type===u||p?.factName===u);return{factRef:`${o}:default/${u}`,factName:u,config:T,uiConfig:!!t.hasUIConfig}})})})]}),a(i,{marginBottom:2,children:[e(g,{variant:"h6",children:"Dependant Checks"}),P(t.dependentChecks)?e(g,{variant:"body2",children:"No dependant checks"}):e(i,{display:"flex",gridGap:12,flexWrap:"wrap",children:t.dependentChecks.map(n=>e(re,{id:n.id,title:n.name??n.id,description:n.description??void 0,rules:K(n.rule),integrationId:o,hasSchedule:n.schedule},n.id))})]})]})]})})};export{ie as CollectorDetailsPage};
2
+ //# sourceMappingURL=CollectorDetailsPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as c}from"react/jsx-runtime";import{makeStyles as s,TableContainer as h,Paper as m,Table as u,TableHead as g,TableRow as i,TableCell as r,TableBody as p,Box as t}from"@material-ui/core";import{isEmpty as y}from"lodash";import{getCronDescription as b}from"../../utils/cron.esm.js";import{FactExplorerDialogButton as C}from"../FactExplorer/FactExplorerDialog.esm.js";import"../FactExplorer/FactExplorerContext.esm.js";const T=s(o=>({noConfig:{color:o.palette.action.disabled}})),q=({facts:o})=>{const l=T();return e(h,{component:m,children:c(u,{size:"small",children:[e(g,{children:c(i,{children:[e(r,{children:"Fact Name"}),e(r,{align:"center",width:120,children:"Source"}),e(r,{children:"Schedule"}),e(r,{align:"center",width:150,children:"Test"})]})}),c(p,{children:[y(o)&&e(i,{children:e(r,{colSpan:10,children:"No Available Facts Found for Integration"})}),o.map(({factName:d,config:n,uiConfig:f,factRef:a})=>c(i,{children:[e(r,{children:e("strong",{children:d})}),c(r,{className:n?void 0:l.noConfig,align:"center",children:[!n&&"No Config",n&&(f?"UI":"YAML")]}),c(r,{children:[n?.frequency&&(n.frequency.cron?c(t,{children:["cron(",n.frequency.cron,")"," ",b(n.frequency.cron)]}):c(t,{children:["Every ",Object.values(n.frequency)[0]," ",Object.keys(n.frequency)[0]]})),!n?.frequency&&e(t,{className:l.noConfig,children:"No Schedule Configured"})]}),e(r,{align:"center",children:e(C,{variant:"text",factRef:a,size:"small",text:"Test"})})]},a))]})]})})};export{q as CollectorFactTable};
2
+ //# sourceMappingURL=CollectorFactTable.esm.js.map