@spotify/backstage-plugin-soundcheck 0.17.0 → 0.18.0

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 (112) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/config.d.ts +14 -0
  3. package/dist/api.esm.js +1 -1
  4. package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
  5. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
  6. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  7. package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
  8. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  9. package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
  10. package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
  11. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
  12. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
  13. package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +2 -0
  14. package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
  15. package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
  16. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  17. package/dist/components/FilterSidebar/FilterSidebar.esm.js +1 -1
  18. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  19. package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
  20. package/dist/components/ImportExportPanel/ImportExportPanel.esm.js +2 -0
  21. package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
  22. package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
  23. package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +1 -1
  24. package/dist/components/OverviewTable/Cell/CheckCell.esm.js +1 -1
  25. package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
  26. package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
  27. package/dist/components/PassingPercentProgressbar/PassPercentageProgressbar.esm.js +2 -0
  28. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  29. package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
  30. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +2 -0
  31. package/dist/components/SoundcheckDialog/SoundcheckDialog.esm.js +1 -1
  32. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
  33. package/dist/components/SoundcheckHeader/headerUtil.esm.js +1 -1
  34. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  35. package/dist/components/TechHealth/Filters/FilterProvider.esm.js +1 -1
  36. package/dist/components/TechHealth/Filters/utils.esm.js +1 -1
  37. package/dist/components/TechInsights/ColorLegend.esm.js +2 -0
  38. package/dist/components/TechInsights/LoadingOverlay.esm.js +2 -0
  39. package/dist/components/TechInsights/LowestPerformingTeams.esm.js +2 -0
  40. package/dist/components/TechInsights/NivoCirclePacking.esm.js +2 -0
  41. package/dist/components/TechInsights/NivoIcicle.esm.js +2 -0
  42. package/dist/components/TechInsights/NivoSunburst.esm.js +2 -0
  43. package/dist/components/TechInsights/NivoTreemap.esm.js +2 -0
  44. package/dist/components/TechInsights/TeamComparison/CheckComparison.esm.js +2 -0
  45. package/dist/components/TechInsights/TeamComparison/FailingComponentsTable.esm.js +2 -0
  46. package/dist/components/TechInsights/TeamComparison/LineChartContainer.esm.js +2 -0
  47. package/dist/components/TechInsights/TeamComparison/MultiCheckStatusHistoryChart.esm.js +2 -0
  48. package/dist/components/TechInsights/TeamComparison/MultiTrackHistoryChart.esm.js +2 -0
  49. package/dist/components/TechInsights/TeamComparison/TeamComparison.esm.js +2 -0
  50. package/dist/components/TechInsights/TeamComparison/TrackComparison.esm.js +2 -0
  51. package/dist/components/TechInsights/TeamPerformanceCard.esm.js +2 -0
  52. package/dist/components/TechInsights/TeamPerformanceListCard.esm.js +2 -0
  53. package/dist/components/TechInsights/TechInsightsGroupSelector.esm.js +2 -0
  54. package/dist/components/TechInsights/TechInsightsPage.esm.js +2 -0
  55. package/dist/components/TechInsights/TechInsightsPage2.esm.js +2 -0
  56. package/dist/components/TechInsights/TechInsightsSidebar.esm.js +2 -0
  57. package/dist/components/TechInsights/TechInsightsViewSelector.esm.js +2 -0
  58. package/dist/components/TechInsights/Tiles/CheckStatusTile.esm.js +2 -0
  59. package/dist/components/TechInsights/Tiles/TileUtils.esm.js +2 -0
  60. package/dist/components/TechInsights/Tiles/TrackStatusTile.esm.js +2 -0
  61. package/dist/components/TechInsights/TopPerformingTeams.esm.js +2 -0
  62. package/dist/components/TechInsights/TrackCardGrid.esm.js +2 -0
  63. package/dist/components/TechInsights/TrackCardGridBox.esm.js +2 -0
  64. package/dist/components/TechInsights/colorContrast.esm.js +2 -0
  65. package/dist/components/TechInsights/hierarchy/GroupNode.esm.js +2 -0
  66. package/dist/components/TechInsights/hierarchy/Hierarchy.esm.js +2 -0
  67. package/dist/components/TechInsights/hierarchy/VirtualRow.esm.js +2 -0
  68. package/dist/components/TechInsights/hierarchyToNivo.esm.js +2 -0
  69. package/dist/components/TechInsights/persistence/FavoriteViews.esm.js +2 -0
  70. package/dist/components/TechInsights/styles.esm.js +2 -0
  71. package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +2 -0
  72. package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +1 -1
  73. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
  74. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  75. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  76. package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +1 -1
  77. package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
  78. package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
  79. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  80. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
  81. package/dist/graphql/generated/index.esm.js +250 -80
  82. package/dist/hooks/aggregations/useCertificationStatusHistories.esm.js +2 -0
  83. package/dist/hooks/aggregations/useCertificationStatuses.esm.js +2 -0
  84. package/dist/hooks/aggregations/useCheckStatusByGroups.esm.js +2 -0
  85. package/dist/hooks/aggregations/useCheckStatusHistoriesMultiFilter.esm.js +2 -0
  86. package/dist/hooks/campaigns/useGetCampaigns.esm.js +1 -1
  87. package/dist/hooks/campaigns/useSendCampaignNotification.esm.js +2 -0
  88. package/dist/hooks/checks/useImportChecks.esm.js +2 -0
  89. package/dist/hooks/facets/useFacetFilters.esm.js +1 -1
  90. package/dist/hooks/graphqlKeys.esm.js +1 -1
  91. package/dist/hooks/groups/useAllGroups.esm.js +1 -1
  92. package/dist/hooks/groups/useUsersGroupClaims.esm.js +1 -1
  93. package/dist/hooks/heirarchy/useGetDescendentsOfGroups.esm.js +2 -0
  94. package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +2 -0
  95. package/dist/hooks/heirarchy/useHierarchicalTrackStatus.esm.js +2 -0
  96. package/dist/hooks/heirarchy/useRootGroups.esm.js +2 -0
  97. package/dist/hooks/savedViews/useDeleteView.esm.js +2 -0
  98. package/dist/hooks/savedViews/useSaveView.esm.js +2 -0
  99. package/dist/hooks/savedViews/useSavedViews.esm.js +2 -0
  100. package/dist/hooks/tracks/useImportTracks.esm.js +2 -0
  101. package/dist/utils/colors.esm.js +1 -1
  102. package/dist/utils/export.esm.js +7 -3
  103. package/dist/utils/helpers.esm.js +2 -0
  104. package/package.json +32 -16
  105. package/dist/components/OrgInsights/OrgInsightsPage.esm.js +0 -2
  106. package/dist/components/OrgInsights/OrgInsightsSidebar.esm.js +0 -2
  107. package/dist/components/OrgInsights/OrgInsightsViewSelector.esm.js +0 -2
  108. package/dist/components/OrgInsights/TrackCardGrid.esm.js +0 -2
  109. package/dist/components/OrgInsights/TrackComparison.esm.js +0 -2
  110. package/dist/components/OrgInsights/TrackStatusTile.esm.js +0 -2
  111. package/dist/components/OrgInsights/styles.esm.js +0 -2
  112. package/dist/utils/getGroupFilterFromConfig.esm.js +0 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @spotify/backstage-plugin-soundcheck
2
2
 
3
+ ## 0.18.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 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.
8
+ - 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.**
9
+
10
+ ### Patch Changes
11
+
12
+ - Added possibility to specify a number of days for historical status in Check and Track Insights.
13
+ - Added possibility to export all tracks and import tracks from YAML.
14
+ - Top failing checks are now grouped by level in Track Insights.
15
+ - Fixed some minor color issues on the UI.
16
+ - Added updated timestamp to tooltip on overview page check results.
17
+ - Setting `status` badge type as default for pre-canned tracks and new tracks created via No-Code UI.
18
+ - Added possibility to export all checks and import checks from YAML.
19
+ - Resolved an issue with Track Insight's history chart area colors.
20
+ - Track Insights now uses a 100% stacked area chart.
21
+ - Updates Soundcheck to prepare for the coming leadership insights page. No user-facing changes.
22
+ - Updated dependencies
23
+ - Updated dependencies
24
+ - Updated dependencies
25
+ - Updated dependencies
26
+ - Updated dependencies
27
+ - Updated dependencies
28
+ - @spotify/backstage-plugin-soundcheck-common@0.18.0
29
+
3
30
  ## 0.17.0
4
31
 
5
32
  ### 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 h}from"graphql-request";import{getSdk as u}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 h("/graphql",{fetch:async(s,a)=>{const n=`${await this.#a.getBaseUrl("soundcheck")}${s}`;return this.#s.fetch(n,a)}});this.#t=u(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 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,n){return this.#e(async()=>{const{trackOverviewForOwner:i}=await this.#t.getTrackOverviewForOwner({ownerEntityRef:t,facet:e,first:s,after:a,entitySearch:n});return i})}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 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,n){return this.#e(async()=>await this.#t.getExemptions({checkId:t,first:e,after:s,last:a,before:n}))}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 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 getGroupTypeHierarchy(){return this.#e(async()=>{const{groupTypeHierarchy:t}=await this.#t.getGroupTypeHierarchy();return t})}async getGroupHierarchy(t){return this.#e(async()=>{const{groupHierarchy:e}=await this.#t.getGroupHierarchy({groupRef:t});return e})}async getHierarchicalTrackStatus(t,e){return this.#e(async()=>{const{hierarchicalTrackStatus:s}=await this.#t.getHierarchicalTrackStatus({trackId: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 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{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{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 t,jsxs as m}from"react/jsx-runtime";import{useRouteRef as re}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 ne,Button as ae,Typography as z,Tabs as le,Tab as U,Box as $}from"@material-ui/core";import{soundcheckCheckReadPermission as ce,soundcheckCheckUpdatePermission as me,toEntityFilterQuery as F,combineEntityFilterQueries as de}from"@spotify/backstage-plugin-soundcheck-common";import b from"lodash/isEqual";import{useMemo as l,useState as x,useEffect as pe,useCallback as M}from"react";import{useSearchParams as he,useParams as fe,useNavigate as ue}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCheck as ge}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as ye}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as ke}from"../../hooks/aggregations/useCheckStatus.esm.js";import{checkEditRouteRef as Ce}from"../../routes.esm.js";import{toFilter as Se}from"../../utils/helpers.esm.js";import{CheckStatusBar as xe}from"../CheckStatusBar/CheckStatusBar.esm.js";import{FilterSidebar as we}from"../FilterSidebar/FilterSidebar.esm.js";import{StateFilter as be}from"../FilterSidebar/StateFilter.esm.js";import{LoadingIndicator as Ee}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as G}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 Ne}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 Ie}from"../TechHealth/Filters/utils.esm.js";import{CheckEntitiesTable as Re}from"./CheckEntitiesTable/CheckEntitiesTable.esm.js";import{CheckStatusHistoryChart as Te}from"./CheckStatusHistoryChart.esm.js";import{CheckStatusTable as Be}from"./CheckStatusTable.esm.js";import{ExemptionsTable as Le}from"./ExemptionsTable.esm.js";function De(e,r){for(const d of e.levels)for(const c of d.checks)if(c.id===r)return c;return null}const Fe=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"}}}})),Pe=()=>{const e=Fe(),[r,d]=he(),{trackId:c,checkId:n}=fe(),a=l(()=>r.getAll("states"),[r]),p=l(()=>r.getAll("owners"),[r]),h=l(()=>r.getAll("lifecycles"),[r]),f=l(()=>r.getAll("types"),[r]),u=l(()=>r.getAll("systems"),[r]),Q=l(()=>Ie(r.get("numberOfDays")),[r]),[g,E]=x(h),[y,v]=x(p),[k,N]=x(f),[C,I]=x(u),[S,R]=x(a);pe(()=>{v(p),E(h),N(f),I(u),R(a)},[p,h,f,u,a]);const V=l(()=>{const i={owners:!b(y,p),lifecycles:!b(g,h),types:!b(k,f),systems:!b(C,u),states:!b(S,a)};return Object.values(i).some(Boolean)},[y,p,g,h,k,f,C,u,S,a]),J=M(()=>{const i=new URLSearchParams(r);i.delete("lifecycles"),i.delete("owners"),i.delete("types"),i.delete("systems"),i.delete("states"),g.length>0&&g.forEach(o=>i.append("lifecycles",o)),y.length>0&&y.forEach(o=>i.append("owners",o)),k.length>0&&k.forEach(o=>i.append("types",o)),C.length>0&&C.forEach(o=>i.append("systems",o)),S.length>0&&S.forEach(o=>i.append("states",o)),d(i)},[r,g,y,k,C,S,d]),K=M(()=>{E([]),v([]),N([]),I([]),R([]);const i=new URLSearchParams(r);i.delete("lifecycles"),i.delete("owners"),i.delete("types"),i.delete("systems"),i.delete("states"),d(i)},[r,d]),T=Se({lifecycles:h,owners:p,types:f,systems:u}),{data:w,isLoading:X}=ye(c),{data:s,isLoading:B}=ge(n),{loading:Y,allowed:Z}=j({permission:ce,resourceRef:n}),{loading:P,allowed:A}=j({permission:me,resourceRef:n}),O=ue(),H=re(Ce),_=ne();let L;if(n)if(w){const i=F(w.filter),o=F(De(w,n)?.filter);L=de(i,o)}else s&&(L=F(s.filter));const{data:W}=ke({checkId:n,trackId:c,filter:T,states:a?.length?a:void 0},!!n),q=l(()=>s?.ownerEntityRef?t(se,{color:"inherit",entityRef:s.ownerEntityRef,className:e.ownerLink}):null,[s?.ownerEntityRef,e.ownerLink]),ee=l(()=>!P&&A&&s?.isEditable?t(ae,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{O(H({checkId:s.id}))},children:"Edit Check"}):null,[A,s?.id,s?.isEditable,e.editButton,H,P,O]),te=l(()=>s?.description?t(Ne,{className:e.headerDescription,content:s.description}):null,[e.headerDescription,s?.description]);ve({title:s?.name??n??"Soundcheck",description:te,customSubtitle:q,sectionRight:ee});const[D,ie]=x(0);return m("div",{children:[t(G,{entityName:"track",entityId:c,showNotFound:!!c&&!X&&!w}),t(G,{entityName:"check",entityId:n,showNotFound:!B&&!s,showCannotView:!!s&&!Y&&!Z}),B&&t(Ee,{}),!B&&!!s&&t("div",{className:e.root,children:m("div",{className:e.pageContent,children:[t(we,{trackFilter:L,stagedTypes:k,stagedLifecycles:g,stagedOwners:y,stagedSystems:C,onTypesChange:N,onLifecyclesChange:E,onOwnersChange:v,onSystemsChange:I,onApplyFilters:J,onClearFilters:K,hasFilterChanges:V,children:t(be,{states:a,stagedStates:S,onStagedStatesChange:R})}),m("div",{className:e.mainContentArea,children:[t("div",{className:e.statusContainer,children:m("div",{className:e.statusCards,children:[m("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:_.spacing(2)},children:t(xe,{status:W})}),t("div",{children:t(Be,{checkStatus:W})})]}),m("div",{className:e.historicalStatusSection,children:[t(z,{className:e.statusTitle,children:"Historical Status"}),t("div",{style:{height:"100%"},children:t(Te,{checkId:n,trackId:c,filter:T,states:a,numberOfDays:Q})})]})]})}),m("div",{className:e.entitiesContainer,children:[m(le,{value:D,onChange:(i,o)=>ie(o),indicatorColor:"primary",textColor:"primary","aria-label":"Entities and Exemptions Tabs",children:[t(U,{label:"Entities"}),t(U,{label:"Exemptions"})]}),t($,{hidden:D!==0,children:t(Re,{checkId:n,trackId:w?.id,filter:T,states:a})}),t($,{hidden:D!==1,children:t(Le,{checkId:n})})]})]})]})})]})};export{Pe 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 m,Box as i,Typography as f,Tooltip as h,Icon as y,IconButton as x}from"@material-ui/core";import I from"@material-ui/icons/ArrowDropDown";import b from"@material-ui/icons/ArrowDropUp";import u from"@material-ui/icons/HelpOutline";import v from"../Expand/Expand.esm.js";const g=m(({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}})),j=({label:l,tooltip:r,isExpanded:s,setIsExpanded:p,children:d})=>{const n=g(),a=()=>{p(t=>!t)},c=t=>{(t.key==="Enter"||t.key===" ")&&a()};return o(i,{children:[o("div",{className:n.header,onClick:a,onKeyDown:c,role:"button",tabIndex:0,children:[o("div",{className:n.label,children:[e(i,{children:e(f,{variant:"subtitle2",children:l})}),r&&e(h,{title:r,className:n.tooltipIcon,children:e(y,{children:e(u,{style:{fontSize:16,verticalAlign:"text-top"}})})})]}),e(i,{children:e(x,{size:"small",onKeyDown:c,children:s?e(b,{fontSize:"small"}):e(I,{fontSize:"small"})})})]}),e(v,{visible:s,children:d})]})};export{j as CollapsablePanel};
2
+ //# sourceMappingURL=CollapsablePanel.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as b,jsx as o}from"react/jsx-runtime";import{makeStyles as x,Box as c,Chip as g,TextField as T,FormControlLabel as C,Checkbox as S}from"@material-ui/core";import v from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as k}from"@material-ui/lab";import{useState as I,useEffect as L}from"react";import{ListboxVirtualized as z}from"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{HTTP_STATUSES as p}from"./utils.esm.js";const H=x(a=>({statusInput:{marginTop:0},statusChips:{marginBottom:a.spacing(1)},helperText:{marginLeft:0}})),j=({value:a,onChange:i,disabled:r,errors:m,helperText:d})=>{const n=H(),[s,u]=I(a??[]);L(()=>{i&&i(s.map(e=>Number(e)))},[s,i]);const f=(e,t)=>{u(s?.filter(l=>l!==t))},h=(e,t)=>{const l=t.length?t[t.length-1]:void 0;l&&isNaN(Number(l))||u(t)};return b(c,{children:[o(c,{children:s.map(e=>o(g,{label:e,size:"small",className:n.statusChips,onDelete:t=>f(t,e),clickable:!1,disabled:r},e))}),o(k,{disableCloseOnSelect:!0,fullWidth:!0,multiple:!0,freeSolo:!0,popupIcon:null,renderTags:()=>null,disabled:r,options:p.map(e=>e.value),getOptionLabel:e=>p.find(t=>t.value===e)?.label??"",value:s,onChange:(e,t)=>h(e,t),ListboxComponent:z,ListboxProps:{itemHeight:40},renderInput:e=>o(T,{...e,variant:"outlined",margin:"dense",className:n.statusInput,placeholder:"Example: 500",disabled:r,error:!!m,helperText:m?.message??d,FormHelperTextProps:{className:n.helperText}}),renderOption:(e,{selected:t})=>o(C,{onClick:l=>l.preventDefault(),control:o(S,{icon:o(N,{fontSize:"small"}),checkedIcon:o(v,{fontSize:"small"}),checked:t,disabled:r}),label:p.find(l=>l.value===e)?.label??""})})]})};export{j as HttpStatusesInput};
1
+ import{jsxs as b,jsx as o}from"react/jsx-runtime";import{makeStyles as x,Box as c,Chip as T,TextField as g,FormControlLabel as C,Checkbox as S}from"@material-ui/core";import v from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as k}from"@material-ui/lab";import{useState as I,useEffect as L}from"react";import{ListboxVirtualized as z}from"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{HTTP_STATUSES as p}from"./utils.esm.js";const H=x(a=>({statusInput:{marginTop:0},statusChips:{marginBottom:a.spacing(1)},helperText:{marginLeft:0}})),E=({value:a,onChange:i,disabled:r,errors:m,helperText:d})=>{const n=H(),[s,u]=I(a??[]);L(()=>{i&&i(s.map(e=>Number(e)))},[s,i]);const f=(e,t)=>{u(s?.filter(l=>l!==t))},h=(e,t)=>{const l=t.length?t[t.length-1]:void 0;l&&isNaN(Number(l))||u(t)};return b(c,{children:[o(c,{children:s.map(e=>o(T,{label:e,size:"small",className:n.statusChips,onDelete:t=>f(t,e),clickable:!1,disabled:r},e))}),o(k,{disableCloseOnSelect:!0,fullWidth:!0,multiple:!0,freeSolo:!0,popupIcon:null,renderTags:()=>null,disabled:r,options:p.map(e=>e.value),getOptionLabel:e=>p.find(t=>t.value===e)?.label??"",value:s,onChange:(e,t)=>h(e,t),ListboxComponent:z,ListboxProps:{itemHeight:40},renderInput:e=>o(g,{...e,variant:"outlined",margin:"dense",className:n.statusInput,placeholder:"Example: 500",disabled:r,error:!!m,helperText:m?.message??d,FormHelperTextProps:{className:n.helperText}}),renderOption:(e,{selected:t})=>o(C,{onClick:l=>l.preventDefault(),control:o(S,{icon:o(N,{fontSize:"small"}),checkedIcon:o(v,{fontSize:"small"}),checked:t,disabled:r}),label:p.find(l=>l.value===e)?.label??""})})]})};export{E as HttpStatusesInput};
2
2
  //# sourceMappingURL=HttpStatusesInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as T}from"react/jsx-runtime";import{makeStyles as F,FormControlLabel as O,Checkbox as z,Typography as A,Box as j,TextField as w}from"@material-ui/core";import I from"@material-ui/icons/CheckBox";import B from"@material-ui/icons/CheckBoxOutlineBlank";import E from"@material-ui/icons/ExpandMore";import{Autocomplete as G}from"@material-ui/lab";import{useState as N,useMemo as m,useCallback as p}from"react";import{useGetEntityRefs as D}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const P=F({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),Q=({label:d,values:o,onChange:n,disabled:f,filter:g,renderOption:b,renderTags:h})=>{const i=P(),[C,a]=N(!1),{data:t,isLoading:u,error:k}=D(g),s=m(()=>o?.map(l=>l.toLocaleLowerCase("en-US"))??[],[o]),x=p((l,r)=>{n(r),t&&t.every(c=>r.includes(c))&&a(!1)},[t,n]),y=p(()=>{n(o?.length?o:void 0)},[o,n]),L=p((l,r)=>b?.(l,r)??e(O,{onClick:c=>c.preventDefault(),control:e(z,{icon:e(B,{fontSize:"small"}),checkedIcon:e(I,{fontSize:"small"}),checked:r.selected}),label:l,classes:{label:i.label}}),[b,i.label]),S=m(()=>f||u||!o?.length&&!t?.length,[f,u,o?.length,t?.length]),v=m(()=>Array.from(new Set([...t??[],...s])),[t,s]);return k?e(A,{color:"error",children:"Failed to load entities"}):T(j,{pb:1,pt:1,className:i.container,children:[e(H,{title:d,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(G,{open:C,onOpen:()=>a(!0),onClose:()=>a(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":d,options:v,value:s,onChange:x,onBlur:y,disabled:S,ListboxComponent:M,renderOption:L,renderTags:h,size:"small",popupIcon:e(E,{"data-testid":"selected-facets-expand"}),renderInput:l=>e(w,{...l,variant:"outlined"})})]})};export{Q as EntitiesAutocompletePicker};
1
+ import{jsx as e,jsxs as T}from"react/jsx-runtime";import{makeStyles as F,FormControlLabel as O,Checkbox as z,Typography as A,Box as w,TextField as I}from"@material-ui/core";import j from"@material-ui/icons/CheckBox";import B from"@material-ui/icons/CheckBoxOutlineBlank";import E from"@material-ui/icons/ExpandMore";import{Autocomplete as G}from"@material-ui/lab";import{useState as N,useMemo as m,useCallback as p}from"react";import{useGetEntityRefs as D}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const P=F({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),Q=({label:d,values:o,onChange:n,disabled:f,filter:g,renderOption:b,renderTags:h})=>{const i=P(),[C,a]=N(!1),{data:t,isLoading:u,error:k}=D(g),s=m(()=>o?.map(l=>l.toLocaleLowerCase("en-US"))??[],[o]),x=p((l,r)=>{n(r),t&&t.every(c=>r.includes(c))&&a(!1)},[t,n]),y=p(()=>{n(o?.length?o:void 0)},[o,n]),L=p((l,r)=>b?.(l,r)??e(O,{onClick:c=>c.preventDefault(),control:e(z,{icon:e(B,{fontSize:"small"}),checkedIcon:e(j,{fontSize:"small"}),checked:r.selected}),label:l,classes:{label:i.label}}),[b,i.label]),S=m(()=>f||u||!o?.length&&!t?.length,[f,u,o?.length,t?.length]),v=m(()=>Array.from(new Set([...t??[],...s])),[t,s]);return k?e(A,{color:"error",children:"Failed to load entities"}):T(w,{pb:1,pt:1,className:i.container,children:[e(H,{title:d,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(G,{open:C,onOpen:()=>a(!0),onClose:()=>a(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":d,options:v,value:s,onChange:x,onBlur:y,disabled:S,ListboxComponent:M,renderOption:L,renderTags:h,size:"small",popupIcon:e(E,{"data-testid":"selected-facets-expand"}),renderInput:l=>e(I,{...l,variant:"outlined"})})]})};export{Q as EntitiesAutocompletePicker};
2
2
  //# sourceMappingURL=EntitiesAutocompletePicker.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as z,FormControlLabel as A,Checkbox as I,Typography as j,Box as B,TextField as E}from"@material-ui/core";import G from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import U from"@material-ui/icons/ExpandMore";import{Autocomplete as V}from"@material-ui/lab";import{useState as D,useMemo as s,useCallback as d}from"react";import{useGetEntityFacets as H}from"../../hooks/catalog/useGetEntityFacets.esm.js";import{FormFieldLabel as M}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as P}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const $=z({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),q=({facet:f,label:b,values:l,onChange:n,disabled:g,filter:x,renderOption:u,renderTags:k,facetFilter:h})=>{const i=$(),[y,c]=D(!1),{data:r,isLoading:C,error:S}=H(f,x),o=s(()=>r?.filter(h??(()=>!0)).map(e=>e.toLocaleLowerCase("en-US")),[r,h]),m=s(()=>l?.map(e=>e.toLocaleLowerCase("en-US"))??[],[l]),F=d((e,a)=>{n(a),o&&o.every(p=>a.includes(p))&&c(!1)},[o,n]),v=d(()=>{n(l?.length?l:void 0)},[l,n]),O=d((e,a)=>u?.(e,a)??t(A,{onClick:p=>p.preventDefault(),control:t(I,{icon:t(N,{fontSize:"small"}),checkedIcon:t(G,{fontSize:"small"}),checked:a.selected}),label:e,classes:{label:i.label}}),[u,i.label]),T=s(()=>g||C||!l?.length&&(!r?.length||!o?.length),[g,C,l?.length,r?.length,o?.length]),w=s(()=>Array.from(new Set([...o??[],...m])),[o,m]);return S?L(j,{color:"error",children:["Failed to load facet: ",f]}):L(B,{pb:1,pt:1,className:i.container,children:[t(M,{title:b,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),t(V,{open:y,onOpen:()=>c(!0),onClose:()=>c(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":b,options:w,value:m,getOptionLabel:e=>r&&o?r[o.indexOf(e)]??e:e,onChange:F,onBlur:v,disabled:T,ListboxComponent:P,renderOption:O,renderTags:k,size:"small",popupIcon:t(U,{"data-testid":"selected-facets-expand"}),renderInput:e=>t(E,{...e,variant:"outlined"})})]})};export{q as EntityAutocompletePicker};
1
+ import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as z,FormControlLabel as A,Checkbox as I,Typography as j,Box as B,TextField as E}from"@material-ui/core";import G from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import U from"@material-ui/icons/ExpandMore";import{Autocomplete as V}from"@material-ui/lab";import{useState as $,useMemo as s,useCallback as d}from"react";import{useGetEntityFacets as D}from"../../hooks/catalog/useGetEntityFacets.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const P=z({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),q=({facet:f,label:b,values:l,onChange:n,disabled:g,filter:x,renderOption:u,renderTags:k,facetFilter:h})=>{const i=P(),[y,c]=$(!1),{data:r,isLoading:C,error:S}=D(f,x),o=s(()=>r?.filter(h??(()=>!0)).map(e=>e.toLocaleLowerCase("en-US")),[r,h]),m=s(()=>l?.map(e=>e.toLocaleLowerCase("en-US"))??[],[l]),F=d((e,a)=>{n(a),o&&o.every(p=>a.includes(p))&&c(!1)},[o,n]),T=d(()=>{n(l?.length?l:void 0)},[l,n]),v=d((e,a)=>u?.(e,a)??t(A,{onClick:p=>p.preventDefault(),control:t(I,{icon:t(N,{fontSize:"small"}),checkedIcon:t(G,{fontSize:"small"}),checked:a.selected}),label:e,classes:{label:i.label}}),[u,i.label]),O=s(()=>g||C||!l?.length&&(!r?.length||!o?.length),[g,C,l?.length,r?.length,o?.length]),w=s(()=>Array.from(new Set([...o??[],...m])),[o,m]);return S?L(j,{color:"error",children:["Failed to load facet: ",f]}):L(B,{pb:1,pt:1,className:i.container,children:[t(H,{title:b,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),t(V,{open:y,onOpen:()=>c(!0),onClose:()=>c(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":b,options:w,value:m,getOptionLabel:e=>r&&o?r[o.indexOf(e)]??e:e,onChange:F,onBlur:T,disabled:O,ListboxComponent:M,renderOption:v,renderTags:k,size:"small",popupIcon:t(U,{"data-testid":"selected-facets-expand"}),renderInput:e=>t(E,{...e,variant:"outlined"})})]})};export{q as EntityAutocompletePicker};
2
2
  //# sourceMappingURL=EntityAutocompletePicker.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as s,jsx as e,Fragment as p}from"react/jsx-runtime";import{createElement as T}from"react";import{parseEntityRef as w}from"@backstage/catalog-model";import{useApi as E,configApiRef as L}from"@backstage/core-plugin-api";import{EntityDisplayName as h}from"@backstage/plugin-catalog-react";import{makeStyles as O,Box as f,Typography as R,Button as g,Grid as n,Checkbox as z,Chip as N}from"@material-ui/core";import{combineEntityFilterQueries as j}from"@spotify/backstage-plugin-soundcheck-common";import{getGroupFilterFromConfig as B}from"../../utils/getGroupFilterFromConfig.esm.js";import{EntitiesAutocompletePicker as W}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{EntityAutocompletePicker as c}from"../Filter/EntityAutocompletePicker.esm.js";const y=(i,{selected:r})=>s(p,{children:[e(z,{value:i,checked:r,color:"primary"}),e(h,{entityRef:i})]}),u=(i,r)=>e(p,{children:i.map((l,a)=>T(N,{...r({index:a}),key:l,label:e(h,{entityRef:l}),size:"small"}))}),D=i=>{try{return w(i).kind.toLowerCase()==="system"}catch{return!1}},G=O(i=>({sidebar:{width:"275px",flexShrink:0,height:"100%",padding:i.spacing(3),display:"flex",flexDirection:"column",borderRight:`1px solid ${i.palette.divider}`},filterLabel:{fontWeight:"bold",marginBottom:i.spacing(1)},additionalFilters:{marginTop:i.spacing(2)}})),P=({trackFilter:i,stagedTypes:r,stagedLifecycles:l,stagedOwners:a,stagedSystems:d,onTypesChange:b,onLifecyclesChange:C,onOwnersChange:x,onSystemsChange:F,onApplyFilters:k,onClearFilters:v,hasFilterChanges:A,children:m})=>{const o=G(),S=E(L);return s("div",{className:o.sidebar,children:[s(f,{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1,children:[e(R,{variant:"subtitle2",className:o.filterLabel,children:"Filters"}),(r.length>0||l.length>0||a.length>0||d.length>0)&&e(g,{size:"small",onClick:v,children:"Clear All"})]}),s(n,{container:!0,spacing:1,children:[e(n,{item:!0,xs:12,children:e(c,{facet:"spec.type",label:"Type",values:r,onChange:t=>b(t??[]),filter:i})}),e(n,{item:!0,xs:12,children:e(c,{facet:"spec.lifecycle",label:"Lifecycle",values:l,onChange:t=>C(t??[]),filter:i})}),e(n,{item:!0,xs:12,children:e(W,{label:"Owner",values:a,onChange:t=>x(t??[]),filter:j({kind:["group"]},B(S)),renderOption:y,renderTags:u})}),e(n,{item:!0,xs:12,children:e(c,{facet:"relations.partOf",label:"System",values:d,onChange:t=>F(t??[]),filter:i,renderOption:y,renderTags:u,facetFilter:D})})]}),m&&e("div",{className:o.additionalFilters,children:m}),e(f,{mt:2,children:e(g,{variant:"contained",color:"primary",size:"small",fullWidth:!0,onClick:k,disabled:!A,children:"Apply Filters"})})]})};export{P as FilterSidebar};
1
+ import{jsxs as s,jsx as e,Fragment as p}from"react/jsx-runtime";import{createElement as T}from"react";import{parseEntityRef as w}from"@backstage/catalog-model";import{useApi as E,configApiRef as L}from"@backstage/core-plugin-api";import{EntityDisplayName as h}from"@backstage/plugin-catalog-react";import{makeStyles as O,Box as f,Typography as R,Button as g,Grid as n,Checkbox as z,Chip as N}from"@material-ui/core";import{combineEntityFilterQueries as j,getGroupFilterFromConfig as B}from"@spotify/backstage-plugin-soundcheck-common";import{EntitiesAutocompletePicker as W}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{EntityAutocompletePicker as c}from"../Filter/EntityAutocompletePicker.esm.js";const y=(i,{selected:r})=>s(p,{children:[e(z,{value:i,checked:r,color:"primary"}),e(h,{entityRef:i})]}),u=(i,r)=>e(p,{children:i.map((l,a)=>T(N,{...r({index:a}),key:l,label:e(h,{entityRef:l}),size:"small"}))}),D=i=>{try{return w(i).kind.toLowerCase()==="system"}catch{return!1}},G=O(i=>({sidebar:{width:"275px",flexShrink:0,height:"100%",padding:i.spacing(3),display:"flex",flexDirection:"column",borderRight:`1px solid ${i.palette.divider}`},filterLabel:{fontWeight:"bold",marginBottom:i.spacing(1)},additionalFilters:{marginTop:i.spacing(2)}})),P=({trackFilter:i,stagedTypes:r,stagedLifecycles:l,stagedOwners:a,stagedSystems:d,onTypesChange:b,onLifecyclesChange:C,onOwnersChange:x,onSystemsChange:F,onApplyFilters:k,onClearFilters:v,hasFilterChanges:A,children:m})=>{const o=G(),S=E(L);return s("div",{className:o.sidebar,children:[s(f,{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1,children:[e(R,{variant:"subtitle2",className:o.filterLabel,children:"Filters"}),(r.length>0||l.length>0||a.length>0||d.length>0)&&e(g,{size:"small",onClick:v,children:"Clear All"})]}),s(n,{container:!0,spacing:1,children:[e(n,{item:!0,xs:12,children:e(c,{facet:"spec.type",label:"Type",values:r,onChange:t=>b(t??[]),filter:i})}),e(n,{item:!0,xs:12,children:e(c,{facet:"spec.lifecycle",label:"Lifecycle",values:l,onChange:t=>C(t??[]),filter:i})}),e(n,{item:!0,xs:12,children:e(W,{label:"Owner",values:a,onChange:t=>x(t??[]),filter:j({kind:["group"]},B(S)),renderOption:y,renderTags:u})}),e(n,{item:!0,xs:12,children:e(c,{facet:"relations.partOf",label:"System",values:d,onChange:t=>F(t??[]),filter:i,renderOption:y,renderTags:u,facetFilter:D})})]}),m&&e("div",{className:o.additionalFilters,children:m}),e(f,{mt:2,children:e(g,{variant:"contained",color:"primary",size:"small",fullWidth:!0,onClick:k,disabled:!A,children:"Apply Filters"})})]})};export{P as FilterSidebar};
2
2
  //# sourceMappingURL=FilterSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as s,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Box as r,TextField as C,FormControlLabel as S,Checkbox as b,Typography as g}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import k from"@material-ui/icons/CheckBoxOutlineBlank";import L from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import{useState as A,useEffect as F,useCallback as c}from"react";import{CheckIcon as E}from"../CheckIcon/CheckIcon.esm.js";import{FormFieldLabel as T}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const N=["PASSED","FAILED","WARNING","NOT_APPLICABLE","EXEMPT"],O=h({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),m=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),P=(l,{selected:t})=>e(S,{onClick:o=>o.preventDefault(),control:e(b,{icon:e(k,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:s(r,{display:"flex",alignItems:"center",children:[e(E,{result:l}),e(r,{mr:1}),e(g,{children:m(l)})]})}),j=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const a=O(),[p,n]=A(!1);F(()=>{o(l)},[l,o]);const d=c((i,u)=>{o(u)},[o]),f=c(()=>{o(t?.length?t:[])},[t,o]);return s(r,{pb:1,pt:1,className:a.container,children:[e(T,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(I,{open:p,onOpen:()=>n(!0),onClose:()=>n(!1),className:a.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:N,value:t,getOptionLabel:m,onChange:d,onBlur:f,ListboxComponent:y,renderOption:P,size:"small",popupIcon:e(L,{"data-testid":"selected-facets-expand"}),renderInput:i=>e(C,{...i,variant:"outlined"})})]})};export{j as StateFilter};
1
+ import{jsxs as s,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Box as r,TextField as C,FormControlLabel as S,Checkbox as b,Typography as g}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import k from"@material-ui/icons/CheckBoxOutlineBlank";import L from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import{useState as A,useEffect as F,useCallback as c}from"react";import{CheckIcon as T}from"../CheckIcon/CheckIcon.esm.js";import{FormFieldLabel as E}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const N=["PASSED","FAILED","WARNING","EXEMPT","NOT_APPLICABLE"],O=h({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),m=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),P=(l,{selected:t})=>e(S,{onClick:o=>o.preventDefault(),control:e(b,{icon:e(k,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:s(r,{display:"flex",alignItems:"center",children:[e(T,{result:l}),e(r,{mr:1}),e(g,{children:m(l)})]})}),v=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const a=O(),[p,n]=A(!1);F(()=>{o(l)},[l,o]);const d=c((i,u)=>{o(u)},[o]),f=c(()=>{o(t?.length?t:[])},[t,o]);return s(r,{pb:1,pt:1,className:a.container,children:[e(E,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(I,{open:p,onOpen:()=>n(!0),onClose:()=>n(!1),className:a.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:N,value:t,getOptionLabel:m,onChange:d,onBlur:f,ListboxComponent:y,renderOption:P,size:"small",popupIcon:e(L,{"data-testid":"selected-facets-expand"}),renderInput:i=>e(C,{...i,variant:"outlined"})})]})};export{v as StateFilter};
2
2
  //# sourceMappingURL=StateFilter.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{TextField as L,FormControlLabel as k,Checkbox as z}from"@material-ui/core";import F from"@material-ui/icons/CheckBox";import I from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as O}from"@material-ui/lab";import{Controller as W}from"react-hook-form";import{ListboxVirtualized as j}from"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useStyles as w}from"./FormControlledAutocomplete.esm.js";const y=({name:i,rules:p,label:c,control:u,options:f,getOptionLabel:h,getOptionValue:m,onChange:b,disabled:C,placeholder:g,freeSolo:x=!0,width:s,helperText:v,disableClearable:S,fullWidth:d})=>{const a=w();return e(W,{name:i,control:u,rules:p,render:({field:l,fieldState:n})=>e(O,{...l,value:l.value,freeSolo:x,autoSelect:!0,"data-testid":`${i}-autocomplete`,style:s?{width:s}:{minWidth:d?void 0:250},disabled:C,options:f,getOptionLabel:h,classes:{clearIndicator:a.clearIndicator},disableClearable:S,fullWidth:d,multiple:!0,size:"small",renderInput:o=>e(L,{...o,variant:"outlined",label:c,error:n.invalid,placeholder:l.value?.length?"":g,FormHelperTextProps:{className:a.helperText},margin:"dense",className:a.noMargin,helperText:v??(n.error?n.error.message:null)}),renderOption:(o,{selected:t})=>e(k,{onClick:r=>r.preventDefault(),control:e(z,{icon:e(I,{fontSize:"small"}),checkedIcon:e(F,{fontSize:"small"}),checked:t}),label:o}),onChange:(o,t)=>{const r=m?t.map(T=>m(T)):t;b?.(r),l.onChange(r)},ListboxComponent:j})})};export{y as FormControlledMultipleAutocomplete};
1
+ import{jsx as e}from"react/jsx-runtime";import{TextField as L,FormControlLabel as k,Checkbox as z}from"@material-ui/core";import F from"@material-ui/icons/CheckBox";import I from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as O}from"@material-ui/lab";import{Controller as W}from"react-hook-form";import{ListboxVirtualized as w}from"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useStyles as y}from"./FormControlledAutocomplete.esm.js";const A=({name:i,rules:p,label:c,control:u,options:f,getOptionLabel:h,getOptionValue:m,onChange:b,disabled:C,placeholder:g,freeSolo:x=!0,width:s,helperText:v,disableClearable:S,fullWidth:d})=>{const a=y();return e(W,{name:i,control:u,rules:p,render:({field:l,fieldState:n})=>e(O,{...l,value:l.value,freeSolo:x,autoSelect:!0,"data-testid":`${i}-autocomplete`,style:s?{width:s}:{minWidth:d?void 0:250},disabled:C,options:f,getOptionLabel:h,classes:{clearIndicator:a.clearIndicator},disableClearable:S,fullWidth:d,multiple:!0,size:"small",renderInput:o=>e(L,{...o,variant:"outlined",label:c,error:n.invalid,placeholder:l.value?.length?"":g,FormHelperTextProps:{className:a.helperText},margin:"dense",className:a.noMargin,helperText:v??(n.error?n.error.message:null)}),renderOption:(o,{selected:t})=>e(k,{onClick:r=>r.preventDefault(),control:e(z,{icon:e(I,{fontSize:"small"}),checkedIcon:e(F,{fontSize:"small"}),checked:t}),label:o}),onChange:(o,t)=>{const r=m?t.map(T=>m(T)):t;b?.(r),l.onChange(r)},ListboxComponent:w})})};export{A as FormControlledMultipleAutocomplete};
2
2
  //# sourceMappingURL=FormControlledMultipleAutocomplete.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as y,Fragment as F,jsx as r}from"react/jsx-runtime";import{makeStyles as L,Tooltip as $,IconButton as x,CircularProgress as b}from"@material-ui/core";import M from"@material-ui/icons/GetApp";import O from"@material-ui/icons/Publish";import P from"js-yaml";import{capitalize as a}from"lodash";import{useState as E}from"react";import{useSoundcheckAlert as H}from"../../hooks/useSoundcheckAlert.esm.js";const J=L(e=>({button:{height:"44px",lineHeight:"1.25rem",padding:e.spacing(1.5,1),marginRight:e.spacing(.5),borderRadius:"12px",color:e.palette.text.primary}})),V=({resourceType:e,disableImport:w,disableExport:I,onImport:A,onExport:S})=>{const k=`${a(e)} Import Success`,n=`Error Importing ${a(e)}s`,v=`Error Exporting ${a(e)}s`,l=J(),{showAlert:s}=H(),[z,c]=E(!1),[C,p]=E(!1),N=async()=>{try{p(!0),await S()}catch(t){s({title:v,message:`An error occurred while exporting ${e}s: ${t.message}`,severity:"error"})}finally{p(!1)}},R=async t=>{try{c(!0);const o=t.target?.files?.[0],m=new FileReader;o&&(m.readAsText(o,"utf-8"),m.onload=async T=>{const d=T.target?.result?.toString();if(d){const j=P.load(d);try{const{created:g,skipped:B,failed:i}=await A(j);let h=k,u="success",f=`Successfully imported ${g.length} ${e}(s), failed ${i.length} ${e}(s), ${B.length} ${e}(s) already existed.`;i.length&&(h=n,u=g.length?"warning":"error",f+=` Errors: ${JSON.stringify(i)}.`),s({title:h,message:f,severity:u})}catch{}}})}catch(o){s({title:n,message:`An error occurred while importing ${e}s: ${o.message}`,severity:"error"})}finally{t.target.value="",c(!1)}};return y(F,{children:[r($,{title:`Export all ${e}s`,children:r(x,{className:l.button,disabled:I,onClick:N,children:C?r(b,{size:24}):r(O,{})})}),r($,{title:`Import YAML ${e}(s)`,children:y(x,{className:l.button,disabled:w,component:"label",children:[z?r(b,{size:24}):r(M,{}),r("input",{type:"file",hidden:!0,onChange:R,accept:".yaml"})]})})]})};export{V as ImportExportPanel};
2
+ //# sourceMappingURL=ImportExportPanel.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as a,Fragment as s,jsx as e}from"react/jsx-runtime";import{Link as u}from"@backstage/core-components";import{useRouteRef as N}from"@backstage/core-plugin-api";import{TableCell as d,Box as r,Typography as h}from"@material-ui/core";import{makeStyles as w}from"@material-ui/core/styles";import{Skeleton as o}from"@material-ui/lab";import{CircularProgressbar as C,buildStyles as S}from"react-circular-progressbar";import"react-circular-progressbar/dist/styles.css";import{useSearchParams as R}from"react-router-dom";import{trackCheckDetailsRouteRef as B}from"../../routes.esm.js";import{getPercentageColor as g}from"../../utils/colors.esm.js";import{compactNumberFormatter as f}from"../../utils/formatters.esm.js";import{CheckStatusBar as v}from"../CheckStatusBar/CheckStatusBar.esm.js";const b=w(i=>({checkContent:{display:"flex",alignItems:"center",gap:i.spacing(2),width:"100%",paddingTop:i.spacing(1),paddingBottom:i.spacing(1)},checkStatus:{display:"flex",alignItems:"center",gap:i.spacing(1),minWidth:"fit-content"},checkName:{display:"flex",alignItems:"center"},checkNameLink:{color:"inherit",textDecoration:"none","&:hover":{textDecoration:"none"}},progressCircle:{width:"24px !important",height:"24px !important"},passPercentage:{fontWeight:"bold",fontSize:"1.25em",minWidth:"50px"},passingText:{color:i.palette.text.secondary,display:"flex",flexDirection:"column",alignItems:"flex-end",lineHeight:1.2,minWidth:"40px"},categoryBarSection:{display:"flex",flexDirection:"column",alignItems:"flex-end",width:"100%",justifyContent:"flex-end"},categoryBar:{"& .MuiBox-root > div":{height:"8px"},width:"100%"},skeleton:{backgroundColor:i.palette.action.hover},passingTextCell:{width:"100px",paddingRight:0,paddingTop:i.spacing(1),paddingBottom:i.spacing(1)}})),I=({check:i,status:n,theme:c,trackId:x})=>{const t=b(),k=N(B),[m]=R(),p=n?n.numberOfEntities-n.notApplicable-n.exempt:0,l=p>0?Math.round((n?.passed??0)/p*100):0,y=`${k({trackId:x,checkId:i.id})}${m.toString()?`?${m.toString()}`:""}`;return a(s,{children:[e(d,{style:{width:"120px",paddingRight:0},children:e(r,{className:t.checkStatus,children:n?a(s,{children:[e(r,{className:t.progressCircle,children:e(C,{value:l,strokeWidth:12,styles:S({strokeLinecap:"round",pathColor:g(c,l),trailColor:c.palette.divider})})}),a(h,{className:t.passPercentage,style:{color:g(c,l)},children:[l,"%"]})]}):a(s,{children:[e(o,{variant:"circle",width:24,height:24,className:t.skeleton}),e(o,{width:45,height:24,className:t.skeleton})]})})}),e(d,{style:{width:"300px",paddingRight:0},children:e(r,{className:t.checkName,children:e(u,{to:y,className:t.checkNameLink,children:e(h,{children:i.name})})})}),e(d,{style:{width:"250px",paddingRight:0},children:e(r,{className:t.categoryBarSection,children:n?e(r,{style:{width:"100%",display:"flex",justifyContent:"flex-end"},children:e(v,{status:n,className:t.categoryBar})}):e(o,{variant:"rect",width:250,height:8,className:t.skeleton})})}),e(d,{style:{width:"100px",paddingRight:0,paddingTop:c.spacing(1),paddingBottom:c.spacing(1)},children:e(r,{className:t.passingText,children:n?a(s,{children:[a(h,{variant:"caption",children:[f(n.passed)," of"," ",f(p)]}),e(h,{variant:"caption",children:"passing"})]}):a(s,{children:[e(o,{width:60,height:16,className:t.skeleton}),e(o,{width:40,height:16,className:t.skeleton})]})})})]})};export{I as CheckRowContent};
1
+ import{jsxs as n,Fragment as r,jsx as e}from"react/jsx-runtime";import{Link as y}from"@backstage/core-components";import{useRouteRef as u}from"@backstage/core-plugin-api";import{TableCell as s,Box as c,Typography as d}from"@material-ui/core";import{makeStyles as N}from"@material-ui/core/styles";import{Skeleton as o}from"@material-ui/lab";import"react-circular-progressbar/dist/styles.css";import{useSearchParams as w}from"react-router-dom";import{trackCheckDetailsRouteRef as S}from"../../routes.esm.js";import{compactNumberFormatter as m}from"../../utils/formatters.esm.js";import{CheckStatusBar as B}from"../CheckStatusBar/CheckStatusBar.esm.js";import{PassPercentageProgressbar as C}from"../PassingPercentProgressbar/PassPercentageProgressbar.esm.js";const R=N(t=>({checkContent:{display:"flex",alignItems:"center",gap:t.spacing(2),width:"100%",paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},checkStatus:{display:"flex",alignItems:"center",gap:t.spacing(1),minWidth:"fit-content"},checkName:{display:"flex",alignItems:"center"},checkNameLink:{color:"inherit",textDecoration:"none","&:hover":{textDecoration:"none"}},passingText:{color:t.palette.text.secondary,display:"flex",flexDirection:"column",alignItems:"flex-end",lineHeight:1.2,minWidth:"40px"},categoryBarSection:{display:"flex",flexDirection:"column",alignItems:"flex-end",width:"100%",justifyContent:"flex-end"},categoryBar:{"& .MuiBox-root > div":{height:"8px"},width:"100%"},skeleton:{backgroundColor:t.palette.action.hover},passingTextCell:{width:"100px",paddingRight:0,paddingTop:t.spacing(1),paddingBottom:t.spacing(1)}})),I=({check:t,status:a,theme:h,trackId:g})=>{const i=R(),x=u(S),[p]=w(),l=a?a.numberOfEntities-a.notApplicable-a.exempt:0,f=l>0?Math.round((a?.passed??0)/l*100):0,k=`${x({trackId:g,checkId:t.id})}${p.toString()?`?${p.toString()}`:""}`;return n(r,{children:[e(s,{style:{width:"120px",paddingRight:0},children:e(c,{className:i.checkStatus,children:a?e(C,{passPercentage:f}):n(r,{children:[e(o,{variant:"circle",width:24,height:24,className:i.skeleton}),e(o,{width:45,height:24,className:i.skeleton})]})})}),e(s,{style:{width:"300px",paddingRight:0},children:e(c,{className:i.checkName,children:e(y,{to:k,className:i.checkNameLink,children:e(d,{children:t.name})})})}),e(s,{style:{width:"250px",paddingRight:0},children:e(c,{className:i.categoryBarSection,children:a?e(c,{style:{width:"100%",display:"flex",justifyContent:"flex-end"},children:e(B,{status:a,className:i.categoryBar})}):e(o,{variant:"rect",width:250,height:8,className:i.skeleton})})}),e(s,{style:{width:"100px",paddingRight:0,paddingTop:h.spacing(1),paddingBottom:h.spacing(1)},children:e(c,{className:i.passingText,children:a?n(r,{children:[n(d,{variant:"caption",children:[m(a.passed)," of"," ",m(l)]}),e(d,{variant:"caption",children:"passing"})]}):n(r,{children:[e(o,{width:60,height:16,className:i.skeleton}),e(o,{width:40,height:16,className:i.skeleton})]})})})]})};export{I as CheckRowContent};
2
2
  //# sourceMappingURL=CheckRowContent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as s,Fragment as x}from"react/jsx-runtime";import{TableRow as i,TableContainer as y,Table as d,TableBody as m,useTheme as T,TableCell as h,Box as I,IconButton as b,Typography as N,Collapse as S}from"@material-ui/core";import{makeStyles as w}from"@material-ui/core/styles";import B from"@material-ui/icons/KeyboardArrowDown";import H from"@material-ui/icons/KeyboardArrowUp";import{memo as R,useState as z,useCallback as L,useMemo as j}from"react";import{CheckRowContent as W}from"./CheckRowContent.esm.js";const p=w(l=>({root:{width:"100%"},levelCell:{display:"flex",alignItems:"flex-start",width:"100%",padding:l.spacing(1)},levelContent:{display:"flex",flexDirection:"column",gap:l.spacing(2),width:"100%"},levelHeader:{display:"flex",alignItems:"center"},levelName:{fontSize:"1rem",fontWeight:500,lineHeight:1,marginLeft:l.spacing(1)},headerCell:{fontWeight:500,color:l.palette.text.secondary,padding:l.spacing(2)}})),u=R(({check:l,status:n,theme:a,trackId:t})=>e(i,{children:e(W,{check:l,status:n,theme:a,trackId:t})}));u.displayName="CheckRow";const D=({level:l,checkStatuses:n,trackId:a})=>{const t=p(),o=T(),[r,k]=z(!0),g=L(()=>{k(c=>!c)},[]),f=j(()=>l.checks.map(c=>{const v=n?.find(C=>C.id===c.id);return e(u,{check:c,status:v,theme:o,trackId:a},c.id)}),[l.checks,n,o,a]);return s(x,{children:[e(i,{children:e(h,{colSpan:4,className:t.levelCell,children:s(I,{className:t.levelHeader,children:[e(b,{size:"small",onClick:g,children:r?e(H,{}):e(B,{})}),e(N,{className:t.levelName,children:l.name??`Level ${l.ordinal}`})]})})}),e(i,{children:e(h,{style:{paddingTop:0,paddingBottom:0},children:e(S,{in:r,timeout:"auto",unmountOnExit:!0,children:e(d,{size:"small",padding:"none",children:e(m,{children:f})})})})})]})},E=({track:l,checkStatuses:n})=>{const a=p();return l.levels?.length?e(y,{component:"div",className:a.root,children:e(d,{children:e(m,{children:l.levels.map(t=>e(D,{level:t,checkStatuses:n,trackId:l.id},t.ordinal))})})}):null};export{E as LevelsTable};
1
+ import{jsx as e,Fragment as o,jsxs as d}from"react/jsx-runtime";import{TableRow as s,useTheme as k,TableContainer as v,Table as m,TableBody as h,TableCell as p,Box as C,IconButton as x,Typography as y,Collapse as T}from"@material-ui/core";import{makeStyles as b}from"@material-ui/core/styles";import w from"@material-ui/icons/KeyboardArrowDown";import N from"@material-ui/icons/KeyboardArrowUp";import{memo as S,useState as I,useCallback as B}from"react";import{CheckRowContent as R}from"./CheckRowContent.esm.js";const g=b(l=>({root:{width:"100%"},levelCell:{display:"flex",alignItems:"flex-start",width:"100%",padding:l.spacing(1)},levelContent:{display:"flex",flexDirection:"column",gap:l.spacing(2),width:"100%"},levelHeader:{display:"flex",alignItems:"center"},levelName:{fontSize:"1rem",fontWeight:500,lineHeight:1,marginLeft:l.spacing(1)},headerCell:{fontWeight:500,color:l.palette.text.secondary,padding:l.spacing(2)}})),f=S(({checks:l,checkStatuses:i,theme:n,trackId:a})=>e(o,{children:l.map(t=>{const c=i?.find(r=>r.id===t.id);return e(s,{children:e(R,{check:t,status:c,theme:n,trackId:a})})})}));f.displayName="CheckRows";const u=({level:l,children:i})=>{const n=g(),[a,t]=I(!0),c=B(()=>{t(r=>!r)},[]);return d(o,{children:[e(s,{children:e(p,{colSpan:4,className:n.levelCell,children:d(C,{className:n.levelHeader,children:[e(x,{size:"small",onClick:c,children:a?e(N,{}):e(w,{})}),e(y,{className:n.levelName,children:l.name??`Level ${l.ordinal}`})]})})}),e(s,{children:e(p,{style:{paddingTop:0,paddingBottom:0},children:e(T,{in:a,timeout:"auto",unmountOnExit:!0,children:e(m,{size:"small",padding:"none",children:e(h,{children:i})})})})})]})},L=({track:l,checkStatuses:i})=>{const n=g(),a=k();return l.levels?.length?e(v,{component:"div",className:n.root,children:e(m,{children:e(h,{children:l.levels.map(t=>e(u,{level:t,children:e(f,{checks:t.checks,checkStatuses:i,theme:a,trackId:l.id})},t.ordinal))})})}):null};export{u as LevelRow,L as LevelsTable};
2
2
  //# sourceMappingURL=LevelsTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as p,Fragment as s,jsx as r}from"react/jsx-runtime";import{withStyles as w,Button as C,makeStyles as S,Popover as P,TextField as O,Checkbox as T}from"@material-ui/core";import z from"@material-ui/icons/ArrowDropDown";import{Autocomplete as F}from"@material-ui/lab";import{useState as I}from"react";import{ListboxVirtualized as L}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const d=w(o=>({root:{color:o.palette.text.primary,paddingLeft:o.spacing(1),paddingRight:o.spacing(1),textTransform:"initial",fontSize:o.typography.body1.fontSize}}))(C),$=S(o=>({root:{borderBottom:`1px solid ${o.palette.grey.A100}`,padding:o.spacing(1.5),backgroundColor:o.palette.background.paper},popper:{width:300,height:400,overflow:"hidden"},paper:{boxShadow:"none",margin:0},popperDisablePortal:{width:"100% !important"},listbox:{border:"none",height:400},option:{padding:`${o.spacing(.5)}px !important`,'&[data-selected="true"]':{background:"inherit"}},chips:{display:"flex",flexWrap:"wrap"},chip:{margin:1}})),B=({name:o,options:c,label:l,icon:m,filters:h,setFilters:u,disabled:g,customRenderOption:f})=>{const t=$(),[n,a]=I(null),b=e=>{a(e.currentTarget)},x=()=>{a(null)},v=(e,i)=>{u(i)},y=e=>r(O,{...e,name:"filter",variant:"outlined",placeholder:"Filter",fullWidth:!0}),k=(e,{selected:i})=>p(s,{children:[r(T,{value:e,checked:i,color:"primary"}),e]});return p(s,{children:[r(d,{startIcon:m,endIcon:r(z,{}),onClick:b,disabled:g,children:l}),r(P,{id:`${l}-filter-popover`,open:!!n,anchorEl:n,onClose:x,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},PaperProps:{elevation:4,className:t.popper},children:r(F,{multiple:!0,disablePortal:!0,classes:{root:t.root,paper:t.paper,popperDisablePortal:t.popperDisablePortal,listbox:t.listbox,option:t.option},ListboxComponent:L,renderOption:f??k,id:`multi-select-filter-${o}--select`,value:h,options:c,limitTags:3,onChange:v,getOptionSelected:(e,i)=>e.toLowerCase()===i.toLowerCase(),renderInput:y,renderTags:()=>null,closeIcon:null,popupIcon:null,handleHomeEndKeys:!0,clearOnEscape:!0,open:!0})})]})};export{d as QuickFilterButton,B as default};
1
+ import{jsxs as p,Fragment as s,jsx as r}from"react/jsx-runtime";import{withStyles as w,Button as C,makeStyles as S,Popover as P,TextField as I,Checkbox as O}from"@material-ui/core";import T from"@material-ui/icons/ArrowDropDown";import{Autocomplete as z}from"@material-ui/lab";import{useState as F}from"react";import{ListboxVirtualized as L}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const d=w(o=>({root:{color:o.palette.text.primary,paddingLeft:o.spacing(1),paddingRight:o.spacing(1),textTransform:"initial",fontSize:o.typography.body1.fontSize}}))(C),$=S(o=>({root:{borderBottom:`1px solid ${o.palette.grey.A100}`,padding:o.spacing(1.5),backgroundColor:o.palette.background.paper},popper:{width:300,height:400,overflow:"hidden"},paper:{boxShadow:"none",margin:0},popperDisablePortal:{width:"100% !important"},listbox:{border:"none",height:400},option:{padding:`${o.spacing(.5)}px !important`,'&[data-selected="true"]':{background:"inherit"}},chips:{display:"flex",flexWrap:"wrap"},chip:{margin:1}})),B=({name:o,options:c,label:l,icon:m,filters:h,setFilters:u,disabled:g,customRenderOption:f})=>{const t=$(),[n,a]=F(null),b=e=>{a(e.currentTarget)},x=()=>{a(null)},v=(e,i)=>{u(i)},y=e=>r(I,{...e,name:"filter",variant:"outlined",placeholder:"Filter",fullWidth:!0}),k=(e,{selected:i})=>p(s,{children:[r(O,{value:e,checked:i,color:"primary"}),e]});return p(s,{children:[r(d,{startIcon:m,endIcon:r(T,{}),onClick:b,disabled:g,children:l}),r(P,{id:`${l}-filter-popover`,open:!!n,anchorEl:n,onClose:x,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},PaperProps:{elevation:4,className:t.popper},children:r(z,{multiple:!0,disablePortal:!0,classes:{root:t.root,paper:t.paper,popperDisablePortal:t.popperDisablePortal,listbox:t.listbox,option:t.option},ListboxComponent:L,renderOption:f??k,id:`multi-select-filter-${o}--select`,value:h,options:c,limitTags:3,onChange:v,getOptionSelected:(e,i)=>e.toLowerCase()===i.toLowerCase(),renderInput:y,renderTags:()=>null,closeIcon:null,popupIcon:null,handleHomeEndKeys:!0,clearOnEscape:!0,open:!0})})]})};export{d as QuickFilterButton,B as default};
2
2
  //# sourceMappingURL=MultiSelectFilter.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i}from"react/jsx-runtime";import{parseEntityRef as h}from"@backstage/catalog-model";import{Link as f}from"@backstage/core-components";import{makeStyles as k}from"@material-ui/core";import{memo as u}from"react";import{ResultState as p}from"../../../graphql/generated/index.esm.js";import{CheckIcon as v}from"../../CheckIcon/CheckIcon.esm.js";import{CheckCellTooltip as $}from"./CheckCellTooltip.esm.js";const N=k(r=>({root:{padding:0},iconWrapper:{padding:r.spacing(1.5),display:"flex",alignItems:"center",justifyContent:"center"},link:{"&:hover $iconWrapper, &:active $iconWrapper, &:focus $iconWrapper":{backgroundColor:r.palette.action.hover}},icon:{width:"17px",height:"17px"},virtualized:{borderBottom:`1px solid ${r.palette.divider}`,borderRight:`1px solid ${r.palette.divider}`}})),g=u(({trackId:r,check:c,entityRef:o,result:t,entityRoute:m,isVirtualized:a})=>{const e=N();if(typeof o!="string"){const s=i("div",{className:e.iconWrapper,children:i("div",{className:e.icon})});return a?i("div",{className:`${e.root} ${e.virtualized}`,"aria-hidden":!0,children:s}):i("td",{className:e.root,"aria-hidden":!0,children:s})}const n=i(v,{className:e.icon,result:t??p.NotReported}),l=i("div",{className:e.iconWrapper,children:n}),d=t&&t===p.NotApplicable?l:i(f,{className:e.link,to:`${m(h(o))}/soundcheck/tracks/${r}/checks/${c.id}`,children:l});return a?i("div",{className:`${e.root} ${e.virtualized}`,children:i($,{check:c,icon:n,entityRef:o,children:d})}):i("td",{className:`${e.root}`,children:d})});export{g as CheckCell};
1
+ import{jsx as t}from"react/jsx-runtime";import{parseEntityRef as f}from"@backstage/catalog-model";import{Link as k}from"@backstage/core-components";import{makeStyles as u}from"@material-ui/core";import{memo as $}from"react";import{ResultState as p}from"../../../graphql/generated/index.esm.js";import{CheckIcon as v}from"../../CheckIcon/CheckIcon.esm.js";import{CheckCellTooltip as N}from"./CheckCellTooltip.esm.js";const g=u(i=>({root:{padding:0},iconWrapper:{padding:i.spacing(1.5),display:"flex",alignItems:"center",justifyContent:"center"},link:{"&:hover $iconWrapper, &:active $iconWrapper, &:focus $iconWrapper":{backgroundColor:i.palette.action.hover}},icon:{width:"17px",height:"17px"},virtualized:{borderBottom:`1px solid ${i.palette.divider}`,borderRight:`1px solid ${i.palette.divider}`}})),y=$(({trackId:i,check:c,entityRef:r,result:o,entityRoute:m,isVirtualized:a,timestamp:h})=>{const e=g();if(typeof r!="string"){const d=t("div",{className:e.iconWrapper,children:t("div",{className:e.icon})});return a?t("div",{className:`${e.root} ${e.virtualized}`,"aria-hidden":!0,children:d}):t("td",{className:e.root,"aria-hidden":!0,children:d})}const n=t(v,{className:e.icon,result:o??p.NotReported,timestamp:h}),l=t("div",{className:e.iconWrapper,children:n}),s=o&&o===p.NotApplicable?l:t(k,{className:e.link,to:`${m(f(r))}/soundcheck/tracks/${i}/checks/${c.id}`,children:l});return a?t("div",{className:`${e.root} ${e.virtualized}`,children:t(N,{check:c,icon:n,entityRef:r,children:s})}):t("td",{className:`${e.root}`,children:s})});export{y as CheckCell};
2
2
  //# sourceMappingURL=CheckCell.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as l}from"react/jsx-runtime";import{CheckCell as a}from"./CheckCell.esm.js";import{CheckNameCell as o}from"./CheckNameCell.esm.js";import{EntityRefCell as d}from"./EntityRefCell.esm.js";import{TrackBadgeCell as i}from"./TrackBadgeCell.esm.js";import{TrackLevelHeaderCell as s,TrackLevelHeaderFill as k}from"./TrackLevelHeaderCell.esm.js";import{TrackTitleCell as y}from"./TrackTitleCell.esm.js";const m=e=>({type:"TrackHeader",render:()=>l(y,{name:e})}),C=e=>({type:"LevelHeader",render:()=>e?l(s,{name:e}):l(k,{})}),p=(e,t,r)=>l(o,{name:e,progress:t,checkId:r}),f=(e,t,r)=>({type:"CheckTitle",render:()=>p(e,t,r)}),u=({trackId:e,check:t,entityRef:r,result:c,entityRoute:n})=>l(a,{check:t,entityRef:r,entityRoute:n,trackId:e,result:c,isVirtualized:!0}),h=(e,t,r,c,n)=>({type:"CheckResult",render:()=>l(u,{trackId:e,check:t,entityRef:r,result:c,entityRoute:n})}),R=(e,t)=>l(d,{entityRef:e,noTransform:t}),T=(e,t)=>({type:"EntityHeader",render:()=>R(e,t)}),H=(e,t,r)=>({type:"LevelBadge",render:()=>l(i,{small:r,trackStatus:e,trackType:t})}),v=e=>t=>{const r=e[t.rowIndex].cells[t.columnIndex];return r?l("div",{style:t.style,children:r.render()}):l("div",{style:t.style})};export{v as cellRenderer,h as checkResultCell,f as checkTitleCell,T as entityHeaderCell,C as levelHeaderCell,H as trackBadgeCell,m as trackHeaderCell};
1
+ import{jsx as l}from"react/jsx-runtime";import{CheckCell as o}from"./CheckCell.esm.js";import{CheckNameCell as i}from"./CheckNameCell.esm.js";import{EntityRefCell as d}from"./EntityRefCell.esm.js";import{TrackBadgeCell as s}from"./TrackBadgeCell.esm.js";import{TrackLevelHeaderCell as m,TrackLevelHeaderFill as k}from"./TrackLevelHeaderCell.esm.js";import{TrackTitleCell as y}from"./TrackTitleCell.esm.js";const p=e=>({type:"TrackHeader",render:()=>l(y,{name:e})}),C=e=>({type:"LevelHeader",render:()=>e?l(m,{name:e}):l(k,{})}),f=(e,t,r)=>l(i,{name:e,progress:t,checkId:r}),u=(e,t,r)=>({type:"CheckTitle",render:()=>f(e,t,r)}),h=({trackId:e,check:t,entityRef:r,result:c,entityRoute:n,timestamp:a})=>l(o,{check:t,entityRef:r,entityRoute:n,trackId:e,result:c,isVirtualized:!0,timestamp:a}),R=(e,t,r,c,n,a)=>({type:"CheckResult",render:()=>l(h,{trackId:e,check:t,entityRef:r,result:c,entityRoute:n,timestamp:a})}),T=(e,t)=>l(d,{entityRef:e,noTransform:t}),H=(e,t)=>({type:"EntityHeader",render:()=>T(e,t)}),v=(e,t,r)=>({type:"LevelBadge",render:()=>l(s,{small:r,trackStatus:e,trackType:t})}),I=e=>t=>{const r=e[t.rowIndex].cells[t.columnIndex];return r?l("div",{style:t.style,children:r.render()}):l("div",{style:t.style})};export{I as cellRenderer,R as checkResultCell,u as checkTitleCell,H as entityHeaderCell,C as levelHeaderCell,v as trackBadgeCell,p as trackHeaderCell};
2
2
  //# sourceMappingURL=cellRenderer.esm.js.map