@spotify/backstage-plugin-soundcheck 0.21.0 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/alpha/apis.esm.js +1 -1
  3. package/dist/alpha/integrations.esm.js +1 -1
  4. package/dist/alpha/pages.esm.js +1 -1
  5. package/dist/alpha/plugin.esm.js +1 -1
  6. package/dist/alpha.d.ts +76 -22
  7. package/dist/api.esm.js +1 -1
  8. package/dist/blueprints/CampaignActionBlueprint.esm.js +2 -0
  9. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  10. package/dist/components/AccordionSection/AccordionSection.esm.js +2 -0
  11. package/dist/components/Alert/Alert.esm.js +1 -1
  12. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  13. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  14. package/dist/components/CampaignPage/CampaignActionsContext.esm.js +2 -0
  15. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  16. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
  17. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  18. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  19. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  20. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  21. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  22. package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
  23. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  24. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  25. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  26. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
  27. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  28. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  29. package/dist/components/CheckDetails/CheckPullRequest.esm.js +2 -0
  30. package/dist/components/CheckDryRun/CheckDryRun.esm.js +1 -1
  31. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  32. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  33. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  34. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  35. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  36. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  37. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  38. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  39. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  40. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
  41. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  42. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
  43. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  44. package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
  45. package/dist/components/CheckTemplatesPage/TemplateCategoryBUI.esm.js +1 -1
  46. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  47. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  48. package/dist/components/ChecksTable/FixMeCell.esm.js +2 -0
  49. package/dist/components/ChecksTable/PullRequestsTable.esm.js +2 -0
  50. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
  51. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +1 -1
  52. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  53. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  54. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  55. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
  56. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  57. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  58. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  59. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  60. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  61. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  62. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  63. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  64. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  65. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  66. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  67. package/dist/components/CollectorPage/Configurators/SonarQube/utils.esm.js +1 -1
  68. package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +1 -1
  69. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  70. package/dist/components/CreateNewTrackPage/CreateNewTrackPage.esm.js +2 -0
  71. package/dist/components/EmptyState/EmptyStateNoTracks.esm.js +1 -1
  72. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  73. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  74. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  75. package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
  76. package/dist/components/FilterSidebar/util.esm.js +1 -1
  77. package/dist/components/FixMeButton/FixMeButton.esm.js +2 -0
  78. package/dist/components/FixWithAiKAButton/FixWithAiKAButton.esm.js +2 -0
  79. package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +1 -1
  80. package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +1 -1
  81. package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +1 -1
  82. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
  83. package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
  84. package/dist/components/LoadingIcon/LoadingIcon.esm.js +2 -0
  85. package/dist/components/Menus/useCampaignActions.esm.js +1 -1
  86. package/dist/components/Menus/useCheckActions.esm.js +1 -1
  87. package/dist/components/Menus/useTrackActions.esm.js +1 -1
  88. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  89. package/dist/components/ProgressBar/ProgressBar.esm.js +2 -0
  90. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
  91. package/dist/components/RelativeTime/RelativeTime.esm.js +1 -1
  92. package/dist/components/Router.esm.js +1 -1
  93. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
  94. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +1 -1
  95. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +1 -1
  96. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js +1 -1
  97. package/dist/components/Stepper/Stepper.esm.js +1 -1
  98. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  99. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  100. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
  101. package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +1 -1
  102. package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
  103. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  104. package/dist/components/TrackBuilderPage/TrackBuilderPage.esm.js +1 -1
  105. package/dist/components/TrackBuilderPage/components/CheckItem/CheckItem.esm.js +2 -0
  106. package/dist/components/TrackBuilderPage/components/IntegrationTags/IntegrationTags.esm.js +2 -0
  107. package/dist/components/TrackBuilderPage/components/RunChecksStep/RunChecksStep.esm.js +2 -0
  108. package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js +2 -0
  109. package/dist/components/TrackBuilderPage/components/SelectTracksStep/SelectTracksStep.esm.js +2 -0
  110. package/dist/components/TrackBuilderPage/components/TrackAccordion/TrackAccordion.esm.js +2 -0
  111. package/dist/components/TrackBuilderPage/components/TrackBuilderStatus/TrackBuilderStatus.esm.js +2 -0
  112. package/dist/components/TrackBuilderPage/hooks/useTrackBuilderStatus.esm.js +2 -0
  113. package/dist/components/TrackBuilderPage/hooks/useTrackCheckExecutions.esm.js +2 -0
  114. package/dist/components/TrackBuilderPage/utils.esm.js +4 -0
  115. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  116. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  117. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  118. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  119. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
  120. package/dist/components/TrackPage/TrackHistoryChartBUI.esm.js +1 -1
  121. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  122. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
  123. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  124. package/dist/components/ViewPullRequests/ViewPullRequests.esm.js +2 -0
  125. package/dist/contexts/UserProvider.esm.js +1 -1
  126. package/dist/graphql/generated/index.esm.js +168 -85
  127. package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
  128. package/dist/hooks/fixMe/useFixMe.esm.js +2 -0
  129. package/dist/hooks/fixWithAika/useFixWithAika.esm.js +2 -0
  130. package/dist/hooks/graphqlKeys.esm.js +1 -1
  131. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  132. package/dist/hooks/remedy/useRemediesForCheck.esm.js +2 -0
  133. package/dist/hooks/remedy/useRemediesForEntity.esm.js +2 -0
  134. package/dist/hooks/tracks/useDeleteTrack.esm.js +1 -1
  135. package/dist/hooks/tracks/useOutOfBoxTracks.esm.js +2 -0
  136. package/dist/hooks/tracks/useSaveOutOfBoxTracks.esm.js +2 -0
  137. package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +1 -1
  138. package/dist/index.d.ts +52 -3
  139. package/dist/index.esm.js +1 -1
  140. package/dist/plugin.esm.js +1 -1
  141. package/dist/routes.esm.js +1 -1
  142. package/package.json +24 -24
  143. package/dist/components/Badge/Badge.esm.js +0 -2
  144. package/dist/components/TrackBuilderPage/RunFirstCheckStep.esm.js +0 -2
  145. package/dist/components/TrackBuilderPage/SelectTracksStep.esm.js +0 -2
  146. package/dist/components/TrackBuilderPage/mockData.esm.js +0 -2
@@ -1,2 +1,2 @@
1
- import{jsxs as m,Fragment as D,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as b,Paper as h,Divider as c}from"@material-ui/core";import{useForm as S,FormProvider as T}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as N}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as I}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as O,confirmationModalContent as k}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as _}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as x,defaultPagerDutyConfig as A,SERVICE_COLLECTOR_TYPE as B,STANDARDS_COLLECTOR_TYPE as M,INCIDENTS_COLLECTOR_TYPE as Y,incidentsCollectorConfig as j,mapPagerDutyCollectorConfigToConfig as H}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as U}from"./validation.esm.js";const V=b(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),z=({disabled:t,selectedCollector:e})=>{const a=S({defaultValues:e?x(e.config):A(),mode:"onChange",resolver:P(U)}),{formState:{errors:i},handleSubmit:n}=a,l=V(),d=!!i.service||!!i.standards||!!i.incidents,{mutateAsync:p}=N(),[f,C]=E(w),{showModal:g}=L(),s=async v=>{if(!await g(k(e)))return;const y=H(v);await p({collectorId:e.id,config:y})&&C()};I(O(e));const u=!e.config?.token||!e.config?.server;return m(D,{children:[o(R,{collectorName:"PagerDuty",collectorId:e.id,invalidConfig:u,hasNonUIOptions:!0}),o(h,{className:l.section,children:o(T,{...a,children:m("form",{onSubmit:n(s),children:[o(r,{name:B.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:M.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:Y.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",disabled:t,FactDetailsComponent:_,multipleCollectors:{enable:!0,defaultConfig:j(e.config)}})]})})}),o("div",{className:l.section,children:o(F,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:d})})]})};export{z as PagerDutyConfigurator};
1
+ import{jsxs as m,Fragment as D,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as b,Paper as h,Divider as c}from"@material-ui/core";import{useForm as S,FormProvider as T}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useUpdateCollectorConfig as N}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as I}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as O,confirmationModalContent as k}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as _}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as x,defaultPagerDutyConfig as A,SERVICE_COLLECTOR_TYPE as B,STANDARDS_COLLECTOR_TYPE as M,INCIDENTS_COLLECTOR_TYPE as Y,incidentsCollectorConfig as j,mapPagerDutyCollectorConfigToConfig as H}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as U}from"./validation.esm.js";const V=b(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),z=({disabled:t,selectedCollector:e})=>{const a=S({defaultValues:e?x(e.config):A(),mode:"onChange",resolver:P(U)}),{formState:{errors:i},handleSubmit:n}=a,l=V(),d=!!i.service||!!i.standards||!!i.incidents,{mutateAsync:p}=N(),[f,C]=E(w),{showModal:g}=L(),s=async v=>{if(!await g(k(e)))return;const y=H(v);await p({collectorId:e.id,config:y})&&C()};I(O(e));const u=!e.config?.token||!e.config?.server;return m(D,{children:[o(R,{collectorName:"PagerDuty",collectorId:e.id,invalidConfig:u,hasNonUIOptions:!0}),o(h,{className:l.section,children:o(T,{...a,children:m("form",{onSubmit:n(s),children:[o(r,{name:B.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:M.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:Y.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",disabled:t,FactDetailsComponent:_,multipleCollectors:{enable:!0,defaultConfig:j(e.config)}})]})})}),o("div",{className:l.section,children:o(F,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:d})})]})};export{z as PagerDutyConfigurator};
2
2
  //# sourceMappingURL=PagerDutyConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as C,Fragment as j,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as w,Paper as _,Box as J,Button as Y,Divider as y}from"@material-ui/core";import k from"@material-ui/icons/UnfoldLess";import I from"@material-ui/icons/UnfoldMore";import{useCallback as z,useMemo as H,useState as l}from"react";import{useForm as V,FormProvider as X}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as G}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as U}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as $}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as q}from"../../../../routes.esm.js";import{FooterButtons as K}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Q}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as g}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as W,confirmationModalContent as Z}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as oo}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as eo}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as to}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as io,defaultScmCollectorConfig as v,EXISTS_COLLECTOR_TYPE as lo,REGEX_COLLECTOR_TYPE as ao,JSON_COLLECTOR_TYPE as ro,mapScmCollectorConfigToConfig as no}from"./utils.esm.js";import{scmCollectorFormSchema as so}from"./validation.esm.js";const mo=w(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},collapseAllContainer:{display:"flex",justifyContent:"flex-end",padding:e.spacing(1.5,6),borderBottom:`1px solid ${e.palette.divider}`}})),co=({disabled:e,selectedCollector:i})=>{const O=z(async(t,...d)=>{const f={enabled:!1,collectors:[]},M={exists:t.exists.enabled?t.exists:f,json:t.json.enabled?t.json:f,regex:t.regex.enabled?t.regex:f};return P(so)(M,...d)},[]),u=V({defaultValues:i?io(i.config):v(),mode:"onChange",resolver:O}),a=H(()=>v(i.config),[i]),{formState:{isValid:T},handleSubmit:x}=u,r=mo(),L=!T,{mutateAsync:N}=$(),[R,A]=U(q),{showModal:B}=G(),b=async t=>{if(!await B(Z(i)))return;const d=no(t);await N({collectorId:i.id,config:d})&&A()};Q(W(i));const[h,n]=l(!0),[S,s]=l(!0),[F,m]=l(!0),[c,E]=l(!0),p=h&&S&&F,D=()=>{p?(n(!1),s(!1),m(!1),E(!1)):(n(!0),s(!0),m(!0),E(!0))};return C(j,{children:[C(_,{className:r.section,children:[o(J,{className:r.collapseAllContainer,children:o(Y,{startIcon:p?o(I,{}):o(k,{}),onClick:D,variant:"outlined",size:"small",children:p?"Expand All":"Collapse All"})}),o(X,{...u,children:C("form",{onSubmit:x(b),children:[o(g,{name:lo,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:a.exists.collectors[0]},FactDetailsComponent:oo,collapsed:h,onCollapsedChange:n,allFactsCollapsed:c}),o(y,{}),o(g,{name:ao,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:a.regex.collectors[0]},FactDetailsComponent:to,collapsed:S,onCollapsedChange:s,allFactsCollapsed:c}),o(y,{}),o(g,{name:ro,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:a.json.collectors[0]},FactDetailsComponent:eo,collapsed:F,onCollapsedChange:m,allFactsCollapsed:c})]})})]}),o("div",{className:r.section,children:o(K,{onCancel:R,saveButtonText:"Save",isLoading:!1,onSave:x(b),disableSave:L,noMargin:!0})})]})};export{co as ScmConfigurator};
1
+ import{jsxs as C,Fragment as j,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as w,Paper as _,Box as J,Button as Y,Divider as y}from"@material-ui/core";import k from"@material-ui/icons/UnfoldLess";import I from"@material-ui/icons/UnfoldMore";import{useCallback as z,useMemo as H,useState as l}from"react";import{useForm as V,FormProvider as X}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as G}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as U}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useUpdateCollectorConfig as $}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as q}from"../../../../routes.esm.js";import{FooterButtons as K}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Q}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as g}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as W,confirmationModalContent as Z}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as oo}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as eo}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as to}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as io,defaultScmCollectorConfig as v,EXISTS_COLLECTOR_TYPE as lo,REGEX_COLLECTOR_TYPE as ao,JSON_COLLECTOR_TYPE as ro,mapScmCollectorConfigToConfig as no}from"./utils.esm.js";import{scmCollectorFormSchema as so}from"./validation.esm.js";const mo=w(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},collapseAllContainer:{display:"flex",justifyContent:"flex-end",padding:e.spacing(1.5,6),borderBottom:`1px solid ${e.palette.divider}`}})),co=({disabled:e,selectedCollector:i})=>{const O=z(async(t,...d)=>{const f={enabled:!1,collectors:[]},M={exists:t.exists.enabled?t.exists:f,json:t.json.enabled?t.json:f,regex:t.regex.enabled?t.regex:f};return P(so)(M,...d)},[]),u=V({defaultValues:i?io(i.config):v(),mode:"onChange",resolver:O}),a=H(()=>v(i.config),[i]),{formState:{isValid:T},handleSubmit:x}=u,r=mo(),L=!T,{mutateAsync:N}=$(),[R,A]=U(q),{showModal:B}=G(),b=async t=>{if(!await B(Z(i)))return;const d=no(t);await N({collectorId:i.id,config:d})&&A()};Q(W(i));const[h,n]=l(!0),[S,s]=l(!0),[F,m]=l(!0),[c,E]=l(!0),p=h&&S&&F,D=()=>{p?(n(!1),s(!1),m(!1),E(!1)):(n(!0),s(!0),m(!0),E(!0))};return C(j,{children:[C(_,{className:r.section,children:[o(J,{className:r.collapseAllContainer,children:o(Y,{startIcon:p?o(I,{}):o(k,{}),onClick:D,variant:"outlined",size:"small",children:p?"Expand All":"Collapse All"})}),o(X,{...u,children:C("form",{onSubmit:x(b),children:[o(g,{name:lo,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:a.exists.collectors[0]},FactDetailsComponent:oo,collapsed:h,onCollapsedChange:n,allFactsCollapsed:c}),o(y,{}),o(g,{name:ao,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:a.regex.collectors[0]},FactDetailsComponent:to,collapsed:S,onCollapsedChange:s,allFactsCollapsed:c}),o(y,{}),o(g,{name:ro,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:a.json.collectors[0]},FactDetailsComponent:eo,collapsed:F,onCollapsedChange:m,allFactsCollapsed:c})]})})]}),o("div",{className:r.section,children:o(K,{onCancel:R,saveButtonText:"Save",isLoading:!1,onSave:x(b),disableSave:L,noMargin:!0})})]})};export{co as ScmConfigurator};
2
2
  //# sourceMappingURL=ScmConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as p,Fragment as Q,jsx as o}from"react/jsx-runtime";import{zodResolver as F}from"@hookform/resolvers/zod";import{makeStyles as y,Paper as k,Divider as s}from"@material-ui/core";import{asArray as w}from"@spotify/backstage-plugin-soundcheck-common";import{useForm as I,FormProvider as N}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as D}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as M}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as P}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as A}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as R,confirmationModalContent as H}from"../Common/utils.esm.js";import{IssuesFactDetailsInput as U}from"./IssuesFactDetailsInput.esm.js";import{MeasuresFactDetailsInput as z}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as E,defaultSonarQubeConfig as L,issuesCollectorConfig as O,measuresCollectorConfig as V,mapSonarQubeCollectorConfigToConfig as q}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as G}from"./validation.esm.js";const J=y(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),K=({disabled:t,selectedCollector:e})=>{const n=I({defaultValues:e?E(e.config):L(),mode:"onChange",resolver:F(G)}),{formState:{errors:r},handleSubmit:l}=n,m=J(),d=!!r.projects||!!r.projectTags||!!r.issues||!!r.measures,{mutateAsync:u}=M(),[f,C]=D(P),{showModal:g}=T(),c=async j=>{if(!await g(H(e)))return;const v=q(j);await u({collectorId:e.id,config:v})&&C()};B(R(e));const a=w(e.config),b=a[0]?.token,S=a[0]?.username&&a[0]?.password,h=!b&&!S;return p(Q,{children:[o(A,{collectorName:"SonarQube",collectorId:e.id,invalidConfig:h,hasNonUIOptions:!0}),o(k,{className:m.section,children:o(N,{...n,children:p("form",{onSubmit:l(c),children:[o(i,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:U,multipleCollectors:{enable:!0,defaultConfig:O(e.config)}}),o(s,{}),o(i,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:z,multipleCollectors:{enable:!0,defaultConfig:V(e.config)}})]})})}),o("div",{className:m.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:d})})]})};export{K as SonarQubeConfigurator};
1
+ import{jsxs as p,Fragment as Q,jsx as o}from"react/jsx-runtime";import{zodResolver as F}from"@hookform/resolvers/zod";import{makeStyles as y,Paper as k,Divider as s}from"@material-ui/core";import{asArray as w}from"@spotify/backstage-plugin-soundcheck-common";import{useForm as I,FormProvider as N}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as D}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useUpdateCollectorConfig as M}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as P}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as A}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as R,confirmationModalContent as H}from"../Common/utils.esm.js";import{IssuesFactDetailsInput as U}from"./IssuesFactDetailsInput.esm.js";import{MeasuresFactDetailsInput as z}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as E,defaultSonarQubeConfig as L,issuesCollectorConfig as O,measuresCollectorConfig as V,mapSonarQubeCollectorConfigToConfig as q}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as G}from"./validation.esm.js";const J=y(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),K=({disabled:t,selectedCollector:e})=>{const n=I({defaultValues:e?E(e.config):L(),mode:"onChange",resolver:F(G)}),{formState:{errors:r},handleSubmit:l}=n,m=J(),d=!!r.projects||!!r.projectTags||!!r.issues||!!r.measures,{mutateAsync:u}=M(),[f,C]=D(P),{showModal:g}=T(),c=async j=>{if(!await g(H(e)))return;const v=q(j);await u({collectorId:e.id,config:v})&&C()};B(R(e));const a=w(e.config),b=a[0]?.token,S=a[0]?.username&&a[0]?.password,h=!b&&!S;return p(Q,{children:[o(A,{collectorName:"SonarQube",collectorId:e.id,invalidConfig:h,hasNonUIOptions:!0}),o(k,{className:m.section,children:o(N,{...n,children:p("form",{onSubmit:l(c),children:[o(i,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:U,multipleCollectors:{enable:!0,defaultConfig:O(e.config)}}),o(s,{}),o(i,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:z,multipleCollectors:{enable:!0,defaultConfig:V(e.config)}})]})})}),o("div",{className:m.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:d})})]})};export{K as SonarQubeConfigurator};
2
2
  //# sourceMappingURL=SonarQubeConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{asArray as d}from"@spotify/backstage-plugin-soundcheck-common";import{defaultBaseCollectorOption as u,defaultCollectorOption as O}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as p,mapFormIntegrationConfigToBackendConfig as m}from"../Common/utils.esm.js";const C="projects",E="project-tags",r="issues",f="measures",D=["OPEN","CONFIRMED","REOPENED","RESOLVED","CLOSED"],y=["BLOCKER","CRITICAL","MAJOR","MINOR","INFO"],L=["VULNERABILITY","BUG","CODE_SMELL"],T=["OPEN"],g=["ncloc","complexity","violations","open_issues"],I={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},metrics:{name:"Metrics",helperText:"Add more metrics to collect",placeholder:"Example: code_smells"}}},S=(t,s,c,o,i)=>({...u(t),factDetails:{factName:s??"",statuses:c??T,severities:o,types:i}}),N=(t,s,c)=>({...u(t),factDetails:{factName:s??"",metrics:c??g}}),_=t=>({projects:O(t),projectTags:O(t),issues:{enabled:!1,collectors:[S(t,r,T)]},measures:{enabled:!1,collectors:[N(t,f,g)]}});function R(t){const{projects:s,projectTags:c,issues:o,measures:i}=t;if(s.enabled||c.enabled||o.enabled||i.enabled){const l={},n=[];return l.collects=n,s.enabled&&n.push(m({factType:C,configOption:s})),c.enabled&&n.push(m({factType:E,configOption:c})),o.enabled&&o.collectors.forEach(a=>{n.push(m({factType:r,configOption:a,additionalParams:{factName:a.factDetails.factName,statuses:a.factDetails.statuses?.length?a.factDetails.statuses:void 0,severities:a.factDetails.severities?.length?a.factDetails.severities:void 0,types:a.factDetails.types?.length?a.factDetails.types:void 0}}))}),i.enabled&&i.collectors.forEach(a=>{n.push(m({factType:f,configOption:a,additionalParams:{factName:a.factDetails.factName,metrics:a.factDetails.metrics}}))}),l}return{collects:[]}}function b(t){const s=_(t);if(t){const c=d(t).flatMap(o=>o.collects);if(c){const o=d(c),i=o.find(e=>e.type===C);i&&(s.projects={...p({parentConfig:t,factTypeConfig:i}),enabled:!0});const l=o.find(e=>e.type===E);l&&(s.projectTags={...p({parentConfig:t,factTypeConfig:l}),enabled:!0});const n=o.filter(e=>e.type===r);n.length&&(s.issues={enabled:!0,collectors:n.map(e=>({...p({parentConfig:t,factTypeConfig:e}),factDetails:{factName:e.factName??r,statuses:e.statuses?.length?e.statuses:void 0,severities:e.severities?.length?e.severities:void 0,types:e.types?.length?e.types:void 0}}))});const a=o.filter(e=>e.type===f);a.length&&(s.measures={enabled:!0,collectors:a.map(e=>({...p({parentConfig:t,factTypeConfig:e}),factDetails:{factName:e.factName??f,metrics:e.metrics}}))})}}return s}export{T as DEFAULT_ISSUE_STATUSES,g as DEFAULT_METRICS,r as ISSUES_COLLECTOR_TYPE,y as ISSUE_SEVERITY_OPTIONS,D as ISSUE_STATUS_OPTIONS,L as ISSUE_TYPE_OPTIONS,f as MEASURES_COLLECTOR_TYPE,C as PROJECTS_COLLECTOR_TYPE,E as PROJECT_TAGS_COLLECTOR_TYPE,I as SONARQUBE_COLLECTOR_FIELDS,_ as defaultSonarQubeConfig,S as issuesCollectorConfig,b as mapConfigToSonarQubeCollectorConfig,R as mapSonarQubeCollectorConfigToConfig,N as measuresCollectorConfig};
1
+ import{asArray as g}from"@spotify/backstage-plugin-soundcheck-common";import{defaultBaseCollectorOption as u,defaultCollectorOption as O}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as p,mapFormIntegrationConfigToBackendConfig as m}from"../Common/utils.esm.js";const C="projects",E="project-tags",r="issues",f="measures",D=["OPEN","CONFIRMED","REOPENED","RESOLVED","CLOSED"],y=["BLOCKER","CRITICAL","MAJOR","MINOR","INFO"],L=["VULNERABILITY","BUG","CODE_SMELL"],T=["OPEN"],d=["ncloc","complexity","violations","open_issues"],I={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},metrics:{name:"Metrics",helperText:"Add more metrics to collect",placeholder:"Example: code_smells"}}},S=(t,o,c,s,i)=>({...u(t),factDetails:{factName:o??"",statuses:c??T,severities:s,types:i}}),N=(t,o,c)=>({...u(t),factDetails:{factName:o??"",metrics:c??d}}),_=t=>({projects:O(t),projectTags:O(t),issues:{enabled:!1,collectors:[S(t,r,T)]},measures:{enabled:!1,collectors:[N(t,f,d)]}});function R(t){const{projects:o,projectTags:c,issues:s,measures:i}=t;if(o.enabled||c.enabled||s.enabled||i.enabled){const l={},n=[];return l.collects=n,o.enabled&&n.push(m({factType:C,configOption:o})),c.enabled&&n.push(m({factType:E,configOption:c})),s.enabled&&s.collectors.forEach(a=>{n.push(m({factType:r,configOption:a,additionalParams:{factName:a.factDetails.factName,statuses:a.factDetails.statuses?.length?a.factDetails.statuses:void 0,severities:a.factDetails.severities?.length?a.factDetails.severities:void 0,types:a.factDetails.types?.length?a.factDetails.types:void 0}}))}),i.enabled&&i.collectors.forEach(a=>{n.push(m({factType:f,configOption:a,additionalParams:{factName:a.factDetails.factName,metrics:a.factDetails.metrics}}))}),l}return{collects:[]}}function b(t){const o=_(t);if(t){const c=g(t).flatMap(s=>s.collects).filter(s=>s!==void 0);if(c){const s=g(c),i=s.find(e=>e.type===C);i&&(o.projects={...p({parentConfig:t,factTypeConfig:i}),enabled:!0});const l=s.find(e=>e.type===E);l&&(o.projectTags={...p({parentConfig:t,factTypeConfig:l}),enabled:!0});const n=s.filter(e=>e.type===r);n.length&&(o.issues={enabled:!0,collectors:n.map(e=>({...p({parentConfig:t,factTypeConfig:e}),factDetails:{factName:e.factName??r,statuses:e.statuses?.length?e.statuses:void 0,severities:e.severities?.length?e.severities:void 0,types:e.types?.length?e.types:void 0}}))});const a=s.filter(e=>e.type===f);a.length&&(o.measures={enabled:!0,collectors:a.map(e=>({...p({parentConfig:t,factTypeConfig:e}),factDetails:{factName:e.factName??f,metrics:e.metrics}}))})}}return o}export{T as DEFAULT_ISSUE_STATUSES,d as DEFAULT_METRICS,r as ISSUES_COLLECTOR_TYPE,y as ISSUE_SEVERITY_OPTIONS,D as ISSUE_STATUS_OPTIONS,L as ISSUE_TYPE_OPTIONS,f as MEASURES_COLLECTOR_TYPE,C as PROJECTS_COLLECTOR_TYPE,E as PROJECT_TAGS_COLLECTOR_TYPE,I as SONARQUBE_COLLECTOR_FIELDS,_ as defaultSonarQubeConfig,S as issuesCollectorConfig,b as mapConfigToSonarQubeCollectorConfig,R as mapSonarQubeCollectorConfigToConfig,N as measuresCollectorConfig};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as p}from"react/jsx-runtime";import{makeStyles as a,useTheme as f}from"@material-ui/core";import s from"../../images/integrations-bui/azure-rgb.svg";import g from"../../images/integrations-bui/azure-wht.svg";import n from"../../images/integrations-bui/bigquery-rgb.svg";import c from"../../images/integrations-bui/bigquery-wht.svg";import u from"../../images/integrations-bui/catalog-rgb.svg";import h from"../../images/integrations-bui/catalog-wht.svg";import b from"../../images/integrations-bui/data-registry-rgb.svg";import d from"../../images/integrations-bui/data-registry-wht.svg";import l from"../../images/integrations-bui/datadog-rgb.svg";import y from"../../images/integrations-bui/datadog-wht.svg";import k from"../../images/integrations-bui/default-logo-rgb.svg";import j from"../../images/integrations-bui/default-logo-wht.svg";import q from"../../images/integrations-bui/github-rgb.svg";import w from"../../images/integrations-bui/github-wht.svg";import x from"../../images/integrations-bui/gitlab-rgb.svg";import I from"../../images/integrations-bui/gitlab-wht.svg";import z from"../../images/integrations-bui/http-rgb.svg";import B from"../../images/integrations-bui/http-wht.svg";import T from"../../images/integrations-bui/jira-rgb.svg";import v from"../../images/integrations-bui/jira-wht.svg";import D from"../../images/integrations-bui/kubernetes-rgb.svg";import F from"../../images/integrations-bui/kubernetes-wht.svg";import L from"../../images/integrations-bui/newrelic-rgb.svg";import M from"../../images/integrations-bui/newrelic-wht.svg";import N from"../../images/integrations-bui/pagerduty-rgb.svg";import S from"../../images/integrations-bui/pagerduty-wht.svg";import U from"../../images/integrations-bui/scm-rgb.svg";import W from"../../images/integrations-bui/scm-wht.svg";import A from"../../images/integrations-bui/sonarqube-rgb.svg";import E from"../../images/integrations-bui/sonarqube-wht.svg";import G from"../../images/integrations-bui/soundcheck-rgb.svg";import H from"../../images/integrations-bui/soundcheck-wht.svg";import O from"../../images/integrations-bui/techinsights-rgb.svg";import Q from"../../images/integrations-bui/techinsights-wht.svg";import{isDarkTheme as R}from"../Charts/chartUtils.esm.js";const _={github:q,gitlab:x,datadog:l,scm:U,pagerduty:N,catalog:u,soundcheck:G,techinsights:O,kubernetes:D,jira:T,sonarqube:A,newrelic:L,bigquery:n,azure:s,http:z,"data-registry":b},C={github:w,gitlab:I,datadog:y,scm:W,pagerduty:S,catalog:h,soundcheck:H,techinsights:Q,kubernetes:F,jira:v,sonarqube:E,newrelic:M,bigquery:c,azure:g,http:B,"data-registry":d},J=a(()=>({image:{objectFit:"contain",color:"white",height:"var(--bui-space-4)",maxWidth:"100%"}})),K=({integrationId:r,noMargin:t})=>{const i=J(),e=f(),m=R(e);let o=m?C[r]:_[r];return o||(o=m?j:k),p("img",{src:o,alt:r,style:t?{marginBottom:0}:{},className:i.image})};export{K as IntegrationLogoBUI};
1
+ import{jsx as p}from"react/jsx-runtime";import{makeStyles as f,useTheme as s}from"@material-ui/core";import g from"../../images/integrations-bui/azure-rgb.svg";import c from"../../images/integrations-bui/azure-wht.svg";import n from"../../images/integrations-bui/bigquery-rgb.svg";import u from"../../images/integrations-bui/bigquery-wht.svg";import h from"../../images/integrations-bui/catalog-rgb.svg";import l from"../../images/integrations-bui/catalog-wht.svg";import b from"../../images/integrations-bui/data-registry-rgb.svg";import d from"../../images/integrations-bui/data-registry-wht.svg";import y from"../../images/integrations-bui/datadog-rgb.svg";import k from"../../images/integrations-bui/datadog-wht.svg";import v from"../../images/integrations-bui/default-logo-rgb.svg";import j from"../../images/integrations-bui/default-logo-wht.svg";import q from"../../images/integrations-bui/github-rgb.svg";import w from"../../images/integrations-bui/github-wht.svg";import x from"../../images/integrations-bui/gitlab-rgb.svg";import z from"../../images/integrations-bui/gitlab-wht.svg";import I from"../../images/integrations-bui/http-rgb.svg";import B from"../../images/integrations-bui/http-wht.svg";import T from"../../images/integrations-bui/jira-rgb.svg";import D from"../../images/integrations-bui/jira-wht.svg";import F from"../../images/integrations-bui/kubernetes-rgb.svg";import L from"../../images/integrations-bui/kubernetes-wht.svg";import M from"../../images/integrations-bui/newrelic-rgb.svg";import S from"../../images/integrations-bui/newrelic-wht.svg";import U from"../../images/integrations-bui/pagerduty-rgb.svg";import W from"../../images/integrations-bui/pagerduty-wht.svg";import A from"../../images/integrations-bui/scm-rgb.svg";import C from"../../images/integrations-bui/scm-wht.svg";import E from"../../images/integrations-bui/sonarqube-rgb.svg";import G from"../../images/integrations-bui/sonarqube-wht.svg";import H from"../../images/integrations-bui/soundcheck-rgb.svg";import K from"../../images/integrations-bui/soundcheck-wht.svg";import N from"../../images/integrations-bui/techinsights-rgb.svg";import O from"../../images/integrations-bui/techinsights-wht.svg";import{isDarkTheme as Q}from"../Charts/chartUtils.esm.js";const R={github:q,gitlab:x,datadog:y,scm:A,pagerduty:U,catalog:h,soundcheck:H,techinsights:N,kubernetes:F,jira:T,sonarqube:E,newrelic:M,bigquery:n,azure:g,http:I,"data-registry":b},Z={github:w,gitlab:z,datadog:k,scm:C,pagerduty:W,catalog:l,soundcheck:K,techinsights:O,kubernetes:L,jira:D,sonarqube:G,newrelic:S,bigquery:u,azure:c,http:B,"data-registry":d},_={small:"var(--bui-space-4)",medium:"var(--bui-space-6)",large:"var(--bui-space-8)"},J=f(()=>({image:{objectFit:"contain",color:"white",height:"var(--bui-space-4)",maxWidth:"100%"}})),P=({integrationId:r,noMargin:t,size:i="small"})=>{const e=J(),a=s(),m=Q(a);let o=m?Z[r]:R[r];return o||(o=m?j:v),p("img",{src:o,alt:r,style:{height:_[i],marginBottom:t?0:void 0},className:e.image})};export{P as IntegrationLogoBUI};
2
2
  //# sourceMappingURL=IntegrationLogoBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as r,Fragment as Y}from"react/jsx-runtime";import{useRouteRef as w}from"@backstage/core-plugin-api";import{usePermission as $}from"@backstage/plugin-permission-react";import{HeaderPage as z,SearchField as O,Container as V,TableRoot as W,TableHeader as J,Column as g,TableBody as K,Row as Q,Flex as X,Text as Z,TooltipTrigger as _,ButtonIcon as ee,Tooltip as te,Box as oe,CellText as P,Button as ie}from"@backstage/ui";import{makeStyles as re}from"@material-ui/core";import{RiInformationLine as ne}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as ae}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as se,isEmpty as p}from"lodash";import{useState as C,useMemo as x,useEffect as ce,useCallback as de}from"react";import{useNavigate as le}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as me}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as ge}from"../../hooks/useSortSearchParams.esm.js";import{useGetCollectors as pe}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as ue}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as he}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationDetailsRouteRef as fe,integrationEditRouteRef as Ce}from"../../routes.esm.js";import{CustomCell as R}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as be}from"../EmptyState/EmptyStateBUI.esm.js";import{LoadingTableSkeleton as Ie}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{IntegrationLogoBUI as Se}from"./IntegrationLogoBUI.esm.js";const B=["github","gitlab","scm","pagerduty","datadog","kubernetes","jira","sonarqube","newrelic","bigquery","catalog","azure","http","data-registry"],N=t=>{const s=t.hasUIConfig?"UI":"YAML";return p(t.config)&&p(t.collectionConfigs)?"None":s},L=re(()=>({container:{marginBottom:"var(--bui-space-12)"},button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),T=({integration:t,hasConfigPage:s})=>{const n=L(),c=w(fe),a=le(),u=w(Ce);return r(Q,{onAction:()=>a(c({integrationId:t.id})),children:[e(R,{children:r(X,{gap:"2",align:"center",children:[e(Se,{integrationId:t.id}),e(Z,{children:t.name??t.id}),t.description&&r(_,{children:[e(ee,{className:n.button,variant:"secondary",icon:e(ne,{}),onClick:()=>a(c({integrationId:t.id}))}),e(te,{className:n.tooltip,children:e(oe,{className:n.scrollBox,children:e("p",{children:t.description})})})]})]})}),e(P,{title:`${String(t.dependentChecks?.length??0)} checks`}),e(P,{title:N(t)}),e(R,{onClick:d=>d.stopPropagation(),children:e(ie,{onClick:()=>a(u({integrationId:t.id})),isDisabled:!s,variant:"tertiary","aria-label":`${t.id} configure`,children:"Configure"})})]})},ye=["name","dependent-checks","config-source"],ke=({integrations:t})=>{const s=L(),{updateSortParams:n,searchParams:c}=ge(),[a,u]=C(""),[d,v]=C(()=>c.get("sortDirection")==="descending"?"descending":"ascending"),[l,D]=C(()=>{const o=c.get("sort");return o&&ye.includes(o)?o:""}),b=x(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:t?.length}}),[t?.length]),{reportContentLoaded:I}=he(b),{reporter:U}=ue(b),{loading:H,allowed:A}=$({permission:ae}),{data:E,isLoading:m}=pe(),h=t?.map(o=>o.integrationId)??B,S=me({items:E??[],searchTerm:a}),f=x(()=>{const o=se(S,i=>l==="name"?i.name??i.id:l==="dependent-checks"?i.dependentChecks?.length??0:l==="config-source"?N(i):h.includes(i.id)?1:2);return d==="descending"&&o.reverse(),o},[S,h,l,d]),y=U?.getLCPValue();ce(()=>{m||I({lcp:y})},[m,I,y]);const j=de(({direction:o,column:i})=>{const k=String(i);D(k),v(o),n({sort:k,sortDirection:o})},[n]),F=!m&&!p(f),M=m,q=!m&&p(f),G=e(be,{title:"No integrations found",body:"Your current search term did not return any integrations. Please try a different search term."});return r(Y,{children:[e(z,{customActions:e(O,{value:a,onChange:u,"aria-label":"Search Name"}),title:"Integrations"}),r(V,{className:s.container,children:[M&&e(Ie,{rowCount:10,rowHeight:36}),q&&G,F&&r(W,{onSortChange:j,sortDescriptor:{direction:d,column:l},children:[r(J,{children:[e(g,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"63%"},children:"Name"}),e(g,{id:"dependent-checks",allowsSorting:!0,style:{width:"15%"},children:"Dependent Checks"}),e(g,{id:"config-source",allowsSorting:!0,style:{width:"15%"},children:"Config Source"}),e(g,{style:{width:"7%"}})]}),e(K,{children:f.map(o=>e(T,{integration:o,hasConfigPage:!H&&A&&h.includes(o.id)},o.id))})]})]})]})};export{B as ConfigurableIntegrationIds,T as IntegrationRow,ke as IntegrationsListPageBUI};
1
+ import{jsx as e,jsxs as r,Fragment as M}from"react/jsx-runtime";import{useRouteRef as w}from"@backstage/core-plugin-api";import{usePermission as Y}from"@backstage/plugin-permission-react";import{HeaderPage as $,SearchField as O,Container as V,TableRoot as W,TableHeader as q,Column as g,TableBody as z,Row as J,Flex as K,Text as Q,TooltipTrigger as X,ButtonIcon as Z,Tooltip as _,Box as ee,CellText as y,Button as te}from"@backstage/ui";import{makeStyles as oe}from"@material-ui/core";import{RiInformationLine as ie}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as ne,isEmpty as p}from"lodash";import{useState as f,useMemo as P,useEffect as ae,useCallback as se}from"react";import{useNavigate as ce}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as de}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as me}from"../../hooks/useSortSearchParams.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useGetCollectors as le}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as ge}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as pe}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationDetailsRouteRef as he,integrationEditRouteRef as ue}from"../../routes.esm.js";import{CustomCell as x}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as fe}from"../EmptyState/EmptyStateBUI.esm.js";import{LoadingTableSkeleton as Ce}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{IntegrationLogoBUI as Se}from"./IntegrationLogoBUI.esm.js";const R=t=>{const s=t.hasUIConfig?"UI":"YAML";return p(t.config)&&p(t.collectionConfigs)?"None":s},B=oe(()=>({container:{marginBottom:"var(--bui-space-12)"},button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),N=({integration:t,hasConfigPage:s})=>{const n=B(),c=w(he),a=ce(),h=w(ue);return r(J,{onAction:()=>a(c({integrationId:t.id})),children:[e(x,{children:r(K,{gap:"2",align:"center",children:[e(Se,{integrationId:t.id}),e(Q,{children:t.name??t.id}),t.description&&r(X,{children:[e(Z,{className:n.button,variant:"secondary",icon:e(ie,{}),onClick:()=>a(c({integrationId:t.id}))}),e(_,{className:n.tooltip,children:e(ee,{className:n.scrollBox,children:e("p",{children:t.description})})})]})]})}),e(y,{title:`${String(t.dependentChecks?.length??0)} checks`}),e(y,{title:R(t)}),e(x,{onClick:d=>d.stopPropagation(),children:e(te,{onClick:()=>a(h({integrationId:t.id})),isDisabled:!s,variant:"tertiary","aria-label":`${t.id} configure`,children:"Configure"})})]})},be=["name","dependent-checks","config-source"],ke=({integrations:t})=>{const s=B(),{updateSortParams:n,searchParams:c}=me(),[a,h]=f(""),[d,T]=f(()=>c.get("sortDirection")==="descending"?"descending":"ascending"),[m,L]=f(()=>{const o=c.get("sort");return o&&be.includes(o)?o:""}),C=P(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:t?.length}}),[t?.length]),{reportContentLoaded:S}=pe(C),{reporter:v}=ge(C),{loading:D,allowed:E}=Y({permission:re}),{data:U,isLoading:l}=le(),b=de({items:U??[],searchTerm:a}),u=P(()=>{const o=ne(b,i=>m==="name"?i.name??i.id:m==="dependent-checks"?i.dependentChecks?.length??0:m==="config-source"?R(i):i.isEditable?1:2);return d==="descending"&&o.reverse(),o},[b,m,d]),k=v?.getLCPValue();ae(()=>{l||S({lcp:k})},[l,S,k]);const H=se(({direction:o,column:i})=>{const I=String(i);L(I),T(o),n({sort:I,sortDirection:o})},[n]),A=!l&&!p(u),F=l,j=!l&&p(u),G=e(fe,{title:"No integrations found",body:"Your current search term did not return any integrations. Please try a different search term."});return r(M,{children:[e($,{customActions:e(O,{value:a,onChange:h,"aria-label":"Search Name"}),title:"Integrations"}),r(V,{className:s.container,children:[F&&e(Ce,{rowCount:10,rowHeight:36}),j&&G,A&&r(W,{onSortChange:H,sortDescriptor:{direction:d,column:m},children:[r(q,{children:[e(g,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"63%"},children:"Name"}),e(g,{id:"dependent-checks",allowsSorting:!0,style:{width:"15%"},children:"Dependent Checks"}),e(g,{id:"config-source",allowsSorting:!0,style:{width:"15%"},children:"Config Source"}),e(g,{style:{width:"7%"}})]}),e(z,{children:u.map(o=>e(N,{integration:o,hasConfigPage:!D&&E&&o.isEditable},o.id))})]})]})]})};export{N as IntegrationRow,ke as IntegrationsListPageBUI};
2
2
  //# sourceMappingURL=IntegrationsListPageBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as t,Fragment as y,jsx as e}from"react/jsx-runtime";import{useRouteRef as n}from"@backstage/core-plugin-api";import{HeaderPage as b,Container as C,Box as a,Text as o,Flex as i,Card as d,CardBody as m,Link as u}from"@backstage/ui";import{makeStyles as R}from"@material-ui/core/styles";import{RiAddLine as v,RiLayoutGridFill as N}from"@remixicon/react";import{useNavigate as x}from"react-router-dom";import B from"react-use/lib/useLocalStorage";import{trackCreateRouteRef as T,tracksPageRouteRef as w,trackBuilderRouteRef as P}from"../../routes.esm.js";import{PROVIDER_STORAGE_KEY as S}from"../TrackBuilderPage/utils.esm.js";const E=R(()=>({container:{marginBottom:"var(--bui-space-12)"},icon:{width:"64px",height:"64px",background:"var(--bui-bg-neutral-2)",borderRadius:"var(--bui-radius-full)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--bui-fg-success)"},cardBody:{padding:"var(--bui-space-10)"},card:{width:"30%",cursor:"pointer"}})),_=()=>{const r=E(),p=n(T),h=n(w),f=n(P),s=x(),g="Create a custom track or use Spotify templates.",[l]=B(S,null),k=()=>{const c=f();return l?`${c}?step=2&provider=${l}`:c};return t(y,{children:[e(b,{title:"Create New Track",breadcrumbs:[{label:"All Tracks",href:h()}]}),t(C,{className:r.container,children:[e(a,{mb:"8",children:e(o,{color:"secondary",variant:"body-large",children:g})}),t(i,{children:[e(d,{className:r.card,onClick:()=>s(p()),children:t(m,{className:r.cardBody,children:[e(i,{direction:"column",align:"center",mb:"2",children:e(a,{className:r.icon,children:e(v,{size:64})})}),t(i,{direction:"column",align:"center",gap:"1",children:[e(o,{variant:"title-small",children:"Create Custom Track"}),e(o,{color:"secondary",children:"Create a custom track with your own checks. Ensure that checks are created first."}),e(a,{mt:"4",children:e(u,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#creating-a-custom-track",target:"_blank",rel:"noopener noreferrer",onClick:c=>c.stopPropagation(),children:"Documentation"})})]})]})}),e(d,{className:r.card,onClick:()=>s(k()),children:t(m,{className:r.cardBody,children:[e(i,{direction:"column",align:"center",mb:"2",children:e(a,{className:r.icon,children:e(N,{size:36})})}),t(i,{direction:"column",align:"center",gap:"1",children:[e(o,{variant:"title-small",children:"Use Spotify Templates"}),e(o,{color:"secondary",children:"Ready-to-use tracks and checks recommended by Spotify. You can modify this configuration at any time."}),e(a,{mt:"4",children:e(u,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#creating-tracks-using-spotify-templates",target:"_blank",rel:"noopener noreferrer",onClick:c=>c.stopPropagation(),children:"Documentation"})})]})]})})]})]})]})};export{_ as CreateNewTrackPage};
2
+ //# sourceMappingURL=CreateNewTrackPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiAddLine as m}from"@remixicon/react";import{soundcheckTrackCreatePermission as p}from"@spotify/backstage-plugin-soundcheck-common";import{useNavigate as d}from"react-router-dom";import{trackCreateRouteRef as u}from"../../routes.esm.js";import{EmptyStateBUI as f}from"./EmptyStateBUI.esm.js";const k=({title:r})=>{const e=s(u),a=d(),{loading:i,allowed:c}=n({permission:p}),t=!i&&c;return o(f,{title:r??(t?"Create your first track":"No tracks found"),body:"Tracks encourage alignment to architectural best practices and standards.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks/",actionButtonIcon:o(m,{}),actionOnClick:t?()=>a(e()):()=>{},actionText:"Create a track",actionDisabled:!t})};export{k as EmptyStateNoTracks};
1
+ import{jsx as o}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiAddLine as m}from"@remixicon/react";import{soundcheckTrackCreatePermission as p}from"@spotify/backstage-plugin-soundcheck-common";import{useNavigate as d}from"react-router-dom";import{newTrackRouteRef as u}from"../../routes.esm.js";import{EmptyStateBUI as f}from"./EmptyStateBUI.esm.js";const k=({title:r})=>{const e=s(u),a=d(),{loading:i,allowed:c}=n({permission:p}),t=!i&&c;return o(f,{title:r??(t?"Create your first track":"No tracks found"),body:"Tracks encourage alignment to architectural best practices and standards.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks/",actionButtonIcon:o(m,{}),actionOnClick:t?()=>a(e()):()=>{},actionText:"Create a track",actionDisabled:!t})};export{k as EmptyStateNoTracks};
2
2
  //# sourceMappingURL=EmptyStateNoTracks.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as c}from"react/jsx-runtime";import{Link as g,InfoCard as v}from"@backstage/core-components";import{useRouteRef as d}from"@backstage/core-plugin-api";import{useEntity as C}from"@backstage/plugin-catalog-react";import{Divider as R}from"@material-ui/core";import S from"@material-ui/core/styles/makeStyles";import{SpotifyLicenseBanner as I}from"@spotify/backstage-plugin-core";import{Fragment as L}from"react";import{useAllCertifications as w}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 b}from"../../hooks/playlists/usePlaylists.esm.js";import"react-use/lib/useLocalStorage";import{certificationTrackRouteRef as x,certificationPlaylistTrackRouteRef as E}from"../../routes.esm.js";import{soundcheckBackend as N,invalidLicenseMessage as j}from"../../utils/license.esm.js";import{AlertPanel as A}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as P}from"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{NoCertifications as T}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{CardSkeleton as B}from"./skeletons/CardSkeleton.esm.js";const m=S(t=>({certificationWrapper:{display:"flex",justifyContent:"space-between",alignItems:"center"},infoCard:{display:"grid",gridRowGap:t.spacing(2)},emptyState:{overflow:"hidden"}})),n=({children:t,title:e})=>{const o=m();return i(v,{title:e,children:c("div",{className:o.infoCard,children:[i(I,{inline:!0,backend:N,invalidLicenseMessage:j}),t]})})},D=(t,e)=>t.find(o=>o.trackIds.some(a=>a===e))?.id??"",M=({title:t="Soundcheck"})=>{const{entity:e}=C(),o=m(),{data:a,isError:p,isLoading:l}=w(e),{data:s,isError:f,isLoading:k}=b(e),y=d(x),h=d(E);return p||f?i(n,{title:t,children:i(A,{severity:"error",title:"Error loading certifications"})}):l||k||!a||!s?i(n,{title:t,children:i(B,{})}):a.length?i(n,{title:t,children:a.map((r,u)=>c(L,{children:[c("div",{className:o.certificationWrapper,"data-testid":"soundcheck-track-row",children:[i(P,{name:r.track.name,badge:r.track.badge,trackType:r.track?.type},r.track.id),i(g,{to:r.track.type==="playlist"?h({playlistId:D(s,r.track.id),trackId:r.track.id}):y({trackId:r.track.id}),children:"View Details"})]}),u<a.length-1?i(R,{}):null]},r.track.name))}):i(n,{title:t,children:i("div",{className:o.emptyState,children:i(T,{})})})};export{M as Card,m as useStyles};
1
+ import{jsx as i,jsxs as m}from"react/jsx-runtime";import{Link as g,InfoCard as v}from"@backstage/core-components";import{useRouteRef as s}from"@backstage/core-plugin-api";import{useEntity as C}from"@backstage/plugin-catalog-react";import{Divider as R}from"@material-ui/core";import S from"@material-ui/core/styles/makeStyles";import{SpotifyLicenseBanner as I}from"@spotify/backstage-plugin-core";import{Fragment as L}from"react";import{useAllCertifications as w}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 b}from"../../hooks/playlists/usePlaylists.esm.js";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{certificationTrackRouteRef as x,certificationPlaylistTrackRouteRef as E}from"../../routes.esm.js";import{soundcheckBackend as N,invalidLicenseMessage as j}from"../../utils/license.esm.js";import{AlertPanel as A}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as P}from"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{NoCertifications as T}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{CardSkeleton as B}from"./skeletons/CardSkeleton.esm.js";const c=S(t=>({certificationWrapper:{display:"flex",justifyContent:"space-between",alignItems:"center"},infoCard:{display:"grid",gridRowGap:t.spacing(2)},emptyState:{overflow:"hidden"}})),n=({children:t,title:e})=>{const o=c();return i(v,{title:e,children:m("div",{className:o.infoCard,children:[i(I,{inline:!0,backend:N,invalidLicenseMessage:j}),t]})})},D=(t,e)=>t.find(o=>o.trackIds.some(a=>a===e))?.id??"",M=({title:t="Soundcheck"})=>{const{entity:e}=C(),o=c(),{data:a,isError:d,isLoading:l}=w(e),{data:p,isError:f,isLoading:k}=b(e),y=s(x),h=s(E);return d||f?i(n,{title:t,children:i(A,{severity:"error",title:"Error loading certifications"})}):l||k||!a||!p?i(n,{title:t,children:i(B,{})}):a.length?i(n,{title:t,children:a.map((r,u)=>m(L,{children:[m("div",{className:o.certificationWrapper,"data-testid":"soundcheck-track-row",children:[i(P,{name:r.track.name,badge:r.track.badge,trackType:r.track?.type},r.track.id),i(g,{to:r.track.type==="playlist"?h({playlistId:D(p,r.track.id),trackId:r.track.id}):y({trackId:r.track.id}),children:"View Details"})]}),u<a.length-1?i(R,{}):null]},r.track.name))}):i(n,{title:t,children:i("div",{className:o.emptyState,children:i(T,{})})})};export{M as Card,c as useStyles};
2
2
  //# sourceMappingURL=Card.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{stringifyEntityRef as ee}from"@backstage/catalog-model";import{makeStyles as te,Box as o,Typography as n,TextField as ae,Button as W}from"@material-ui/core";import{Alert as ie}from"@material-ui/lab";import{parseFactRef as oe}from"@spotify/backstage-plugin-soundcheck-common";import ne from"lodash";import{useMemo as g,useState as F,useEffect as re,useCallback as le}from"react";import{useGetEntityRefs as ce}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetLimitedEntityRefs as se}from"../../hooks/catalog/useGetLimitedEntityRefs.esm.js";import{useGetCollectors as de}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as he}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as pe}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as me}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as fe}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as ue,CollectorLogo as ve}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as G}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as ge}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as ye}from"../Filter/types.esm.js";import{FormattedPreview as w}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as be}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as Se}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as Fe}from"./useFactOptions.esm.js";const Ne=800,Re=te(t=>({content:{padding:t.spacing(2,3),width:Ne},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),xe=t=>{const p=!t?.length||t.every(h=>Object.values(h).every(N=>!N?.length))?[{...ye(),selectedKinds:["Component","System"]}]:t;return ge(p)},Ee=({factRef:t,updateFactRef:p,path:h,updatePath:N,entityRef:m,updateEntityRef:k,pathResolver:s,filters:R,onSave:P,hidePath:O})=>{const i=Re(),d=g(()=>{if(t)try{return oe(t)}catch{return}},[t]),[x,j]=F(d?.source??null);re(()=>{d?.source&&j(d.source)},[d?.source]);const[b,V]=F("jsonpath"),[E,B]=F(),[C,M]=F(),{data:I}=me(),A=g(()=>I?.map(r=>r.id)??[],[I]),{data:f}=he(d?.source,d?.name,!0),D=g(()=>f?fe(f.schema):[],[f]),{data:L,isLoading:J}=de(),$=L?.map(r=>r.id)?.sort()??[],S=!R?.length||R.every(r=>Object.values(r).every(Z=>!Z?.length)),{data:z,isLoading:H}=ce(xe(R),1e3,!S),K=z?.items.map(r=>ee(r)),{entityRefs:U,allLoading:q}=se(500,S),l=g(()=>L?.find(r=>r.id===x),[L,x]),{factOptions:Q}=Fe({selectedCollector:l}),{options:X,getOptionLabel:T}=be(Q),{data:c,isLoading:u}=pe({factRef:t||"",entityRef:C||"",path:E,pathResolver:s??b??void 0},!!t&&!!C),Y=le(()=>{B(h),M(m)},[m,h]),_=g(()=>!!l?.config?.cache,[l]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(n,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:$,onChange:r=>{j(r),p("")},value:x,placeholder:"Integration",disabled:J,fullWidth:!0,freeSolo:!0})]}),!l&&e(v,{children:a(o,{children:[e(n,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(ae,{value:t,onChange:r=>p(r.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!l&&e(v,{children:a(o,{className:i.section,children:[ue(l.id)?e(ve,{noMargin:!0,collectorId:l.id}):a(n,{variant:"h5",className:i.collectorName,component:"div",children:[l.name??l.id," "]}),!!l.description&&e(n,{variant:"body2",children:l.description}),e(y,{options:X,onChange:p,value:t??null,placeholder:"Select Fact",getOptionLabel:T,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(G,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(w,{data:f.schema})})})}),!O&&a(v,{children:[a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(n,{variant:"caption",children:"Defaults to jsonpath"}),s?e(n,{variant:"body1",children:s}):e(y,{options:A,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:T,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?D:[],onChange:r=>{E&&B(void 0),N(r)},value:h??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!P&&e(W,{className:i.testPathButton,variant:"contained",onClick:()=>P({factRef:t,path:h??"",pathResolver:b??s??""}),disabled:!h,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(G,{alwaysExpanded:O,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(n,{variant:"subtitle1",children:"Select an Entity"}),a(n,{variant:"caption",children:["Fact will be sampled from this entity.",e("br",{}),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."]}),e(y,{options:S?U??[]:K??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:S?q:H,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(W,{className:i.testPathButton,variant:"contained",onClick:Y,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!E&&!u&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Resolved Value"}),c?.resolvedValue!==null&&c?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(w,{data:c?.resolvedValue})}):e(n,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!C&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Fact Data"}),_&&e(n,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(Se,{})}),!u&&!!c?.fact&&e(o,{className:i.preview,children:c?.fact?.sensitive&&ne.isEmpty(c?.fact?.data)?e(o,{children:e(ie,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(w,{data:c?.fact?.data})}),!u&&!!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",c?.collectionError?.errorMessage]}),!u&&!c?.fact&&!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{Ee as FactExplorer};
1
+ import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{stringifyEntityRef as ee}from"@backstage/catalog-model";import{makeStyles as te,Box as o,Typography as r,TextField as ae,Button as W}from"@material-ui/core";import{Alert as ie}from"@material-ui/lab";import{parseFactRef as oe}from"@spotify/backstage-plugin-soundcheck-common";import re from"lodash";import{useMemo as g,useState as F,useEffect as ne,useCallback as le}from"react";import{useGetEntityRefs as ce}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetLimitedEntityRefs as se}from"../../hooks/catalog/useGetLimitedEntityRefs.esm.js";import{useGetCollectors as de}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as he}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as pe}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as me}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as fe}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as ue,CollectorLogo as ve}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as G}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as ge}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as ye}from"../Filter/types.esm.js";import{FormattedPreview as w}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as be}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as Se}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as Fe}from"./useFactOptions.esm.js";const Ne=800,Re=te(t=>({content:{padding:t.spacing(2,3),width:Ne},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),xe=t=>{const p=!t?.length||t.every(h=>Object.values(h).every(N=>!N?.length))?[{...ye(),selectedKinds:["Component","System"]}]:t;return ge(p)},Ee=({factRef:t,updateFactRef:p,path:h,updatePath:N,entityRef:m,updateEntityRef:k,pathResolver:s,filters:R,onSave:P,hidePath:O})=>{const i=Re(),d=g(()=>{if(t)try{return oe(t)}catch{return}},[t]),[x,j]=F(d?.source??null);ne(()=>{d?.source&&j(d.source)},[d?.source]);const[b,V]=F("jsonpath"),[E,B]=F(),[C,M]=F(),{data:I}=me(),A=g(()=>I?.map(n=>n.id)??[],[I]),{data:f}=he(d?.source,d?.name,!0),D=g(()=>f?fe(f.schema):[],[f]),{data:L,isLoading:J}=de(),$=L?.map(n=>n.id)?.sort()??[],S=!R?.length||R.every(n=>Object.values(n).every(Z=>!Z?.length)),{data:z,isLoading:H}=ce(xe(R),1e3,!S),K=z?.items.map(n=>ee(n)),{entityRefs:U,allLoading:q}=se(500,S),l=g(()=>L?.find(n=>n.id===x),[L,x]),{factOptions:Q}=Fe({selectedCollector:l}),{options:X,getOptionLabel:T}=be(Q),{data:c,isLoading:u}=pe({factRef:t||"",entityRef:C||"",path:E,pathResolver:s??b??void 0,refresh:!0},!!t&&!!C),Y=le(()=>{B(h),M(m)},[m,h]),_=g(()=>!!l?.config?.cache,[l]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(r,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:$,onChange:n=>{j(n),p("")},value:x,placeholder:"Integration",disabled:J,fullWidth:!0,freeSolo:!0})]}),!l&&e(v,{children:a(o,{children:[e(r,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(ae,{value:t,onChange:n=>p(n.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!l&&e(v,{children:a(o,{className:i.section,children:[ue(l.id)?e(ve,{noMargin:!0,collectorId:l.id}):a(r,{variant:"h5",className:i.collectorName,component:"div",children:[l.name??l.id," "]}),!!l.description&&e(r,{variant:"body2",children:l.description}),e(y,{options:X,onChange:p,value:t??null,placeholder:"Select Fact",getOptionLabel:T,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(G,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(w,{data:f.schema})})})}),!O&&a(v,{children:[a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(r,{variant:"caption",children:"Defaults to jsonpath"}),s?e(r,{variant:"body1",children:s}):e(y,{options:A,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:T,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?D:[],onChange:n=>{E&&B(void 0),N(n)},value:h??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!P&&e(W,{className:i.testPathButton,variant:"contained",onClick:()=>P({factRef:t,path:h??"",pathResolver:b??s??""}),disabled:!h,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(G,{alwaysExpanded:O,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(r,{variant:"subtitle1",children:"Select an Entity"}),a(r,{variant:"caption",children:["Fact will be sampled from this entity.",e("br",{}),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."]}),e(y,{options:S?U??[]:K??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:S?q:H,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(W,{className:i.testPathButton,variant:"contained",onClick:Y,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!E&&!u&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Resolved Value"}),c?.resolvedValue!==null&&c?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(w,{data:c?.resolvedValue})}):e(r,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!C&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Fact Data"}),_&&e(r,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(Se,{})}),!u&&!!c?.fact&&e(o,{className:i.preview,children:c?.fact?.sensitive&&re.isEmpty(c?.fact?.data)?e(o,{children:e(ie,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(w,{data:c?.fact?.data})}),!u&&!!c?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",c?.collectionError?.errorMessage]}),!u&&!c?.fact&&!c?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{Ee as FactExplorer};
2
2
  //# sourceMappingURL=FactExplorer.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseFactRef as c,stringifyFactRef as p}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as n}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as s}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";const l=({selectedCollector:e})=>{const{data:a}=s({});return{factOptions:n(()=>e?.factNames?.map(o=>{const t=e.id==="soundcheck"?{source:e.id,scope:"default",name:o}:c(o,{defaultSource:e.id,defaultScope:"default"});let m=t.name;if(e?.id==="soundcheck"){const r=a?.edges.find(i=>i.node.id===t.name.replace("track/",""))?.node;m=r?`${r.type==="campaign"?"Campaign: ":"Track: "}${r.name}`:t.name}return{label:m,value:p(t)}})?.sort((o,t)=>o.label.localeCompare(t.label))??[],[e?.factNames,e?.id,a])}};export{l as useFactOptions};
1
+ import{parseFactRef as p,stringifyFactRef as c}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as n}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as s}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";const l=({selectedCollector:e})=>{const{data:m}=s({});return{factOptions:n(()=>e?.factNames?.map(o=>{const t=e.id==="soundcheck"?{source:e.id,scope:"default",name:o}:p(o,{defaultSource:e.id,defaultScope:"default"});let a=t.name;if(e?.id==="soundcheck"){const r=m?.edges.find(i=>i.node.id===t.name.replace("track/",""))?.node;a=r?`${r.type==="campaign"?"Campaign: ":"Track: "}${r.name}`:t.name}return{label:a,value:c(t)}})?.sort((o,t)=>o.label.localeCompare(t.label))??[],[e?.factNames,e?.id,m])}};export{l as useFactOptions};
2
2
  //# sourceMappingURL=useFactOptions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{isEqual as g}from"lodash";import{useMemo as y,useCallback as F,useState as u,useEffect as O}from"react";import{useSearchParams as P}from"react-router-dom";const v=()=>{const[t,S]=P(),a=y(()=>t.getAll("owners"),[t]),l=y(()=>t.getAll("lifecycles"),[t]),c=y(()=>t.getAll("types"),[t]),r=y(()=>t.getAll("systems"),[t]),i=y(()=>t.getAll("certificationStatuses"),[t]),m=F(()=>a.map(e=>({label:e,value:e})),[a]),[n,h]=u(l),[o,w]=u(m()),[d,E]=u(c),[f,A]=u(r),[p,C]=u(i);O(()=>{w(m()),h(l??[]),E(c??[]),A(r??[]),C(i??[])},[a,l,c,r,m,i]);const b=y(()=>{const e={owners:!g(o,a??[]),lifecycles:!g(n,l??[]),types:!g(d,c??[]),systems:!g(f,r??[]),certificationStatus:!g(p,i??[])};return Object.values(e).some(Boolean)},[o,a,n,l,d,c,f,r,p,i]),L=F(()=>{const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),n.length>0&&n.forEach(s=>e.append("lifecycles",s)),o.length>0&&o.forEach(({value:s})=>e.append("owners",s)),d.length>0&&d.forEach(s=>e.append("types",s)),f.length>0&&f.forEach(s=>e.append("systems",s)),p.length>0&&p.forEach(s=>e.append("certificationStatuses",s)),S(e)},[t,n,o,d,f,p,S]);return{handleClearFilters:F(()=>{h([]),w([]),E([]),A([]),C([]);const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),S(e)},[t,S]),handleApplyFilters:L,hasFilterChanges:b,stagedTypes:d,stagedLifecycles:n,stagedSystems:f,stagedOwners:o,stagedCertificationStatuses:p,setStagedTypes:E,setStagedLifecycles:h,setStagedOwners:w,setStagedSystems:A,setStagedCertificationStatuses:C,owners:a,lifecycles:l,types:c,systems:r,certificationStatuses:i}};export{v as useTrackFilterSidebar};
1
+ import{isEqual as m}from"lodash";import{useMemo as y,useCallback as P,useState as S,useEffect as v}from"react";import{useSearchParams as T}from"react-router-dom";import{getSearchParamValues as u}from"./util.esm.js";const k=()=>{const[t,h]=T(),a=y(()=>u(t,"owners"),[t]),c=y(()=>u(t,"lifecycles"),[t]),r=y(()=>u(t,"types"),[t]),l=y(()=>u(t,"systems"),[t]),i=y(()=>u(t,"certificationStatuses"),[t]),g=P(()=>a.map(e=>({label:e,value:e})),[a]),[n,w]=S(c),[o,E]=S(g()),[d,C]=S(r),[f,b]=S(l),[p,L]=S(i);v(()=>{E(g()),w(c??[]),C(r??[]),b(l??[]),L(i??[])},[a,c,r,l,g,i]);const F=y(()=>{const e={owners:!m(o,a??[]),lifecycles:!m(n,c??[]),types:!m(d,r??[]),systems:!m(f,l??[]),certificationStatus:!m(p,i??[])};return Object.values(e).some(Boolean)},[o,a,n,c,d,r,f,l,p,i]),O=P(()=>{const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),n.length>0&&n.forEach(s=>e.append("lifecycles",s)),o.length>0&&o.forEach(({value:s})=>e.append("owners",s)),d.length>0&&d.forEach(s=>e.append("types",s)),f.length>0&&f.forEach(s=>e.append("systems",s)),p.length>0&&p.forEach(s=>e.append("certificationStatuses",s)),h(e)},[t,n,o,d,f,p,h]);return{handleClearFilters:P(()=>{w([]),E([]),C([]),b([]),L([]);const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),h(e)},[t,h]),handleApplyFilters:O,hasFilterChanges:F,stagedTypes:d,stagedLifecycles:n,stagedSystems:f,stagedOwners:o,stagedCertificationStatuses:p,setStagedTypes:C,setStagedLifecycles:w,setStagedOwners:E,setStagedSystems:b,setStagedCertificationStatuses:L,owners:a,lifecycles:c,types:r,systems:l,certificationStatuses:i}};export{k as useTrackFilterSidebar};
2
2
  //# sourceMappingURL=useTrackFilterSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{TrackCertificationState as e}from"../../graphql/generated/index.esm.js";const a=d=>{const{lifecycles:t,owners:o,types:i,systems:s}=d,r=t?.length?{"spec.lifecycle":t}:void 0,l=o?.length?{"relations.ownedBy":o}:void 0,n=i?.length?{"spec.type":i}:void 0,c=s?.length?{"relations.partOf":s}:void 0;if(r||l||n||c)return{...r,...l,...n,...c}},p={Passed:e.Passed,Failed:e.Failed,"Not Reported":e.NotReported};export{p as CERTIFICATION_STATUS_MAP,a as toFilter};
1
+ import{TrackCertificationState as l}from"../../graphql/generated/index.esm.js";const p=o=>{const{lifecycles:t,owners:e,types:i,systems:a}=o,s=t?.length?{"spec.lifecycle":t}:void 0,r=e?.length?{"relations.ownedBy":e}:void 0,n=i?.length?{"spec.type":i}:void 0,c=a?.length?{"relations.partOf":a}:void 0;if(s||r||n||c)return{...s,...r,...n,...c}},d={Passed:l.Passed,Failed:l.Failed,"Not Reported":l.NotReported},f=(o,t)=>o.getAll(t).flatMap(e=>e.split(",")).map(e=>e.trim()).filter(Boolean);export{d as CERTIFICATION_STATUS_MAP,f as getSearchParamValues,p as toFilter};
2
2
  //# sourceMappingURL=util.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as e,jsx as n}from"react/jsx-runtime";import{Button as m}from"@backstage/ui";import{useNavigate as f}from"react-router-dom";import{LoadingIcon as a}from"../LoadingIcon/LoadingIcon.esm.js";const h=({href:i,isDisabled:t,isRunning:o,hasShift:r})=>{const s=f();return e(m,{onClick:()=>i&&s(i),isDisabled:t,children:[o&&n(a,{})," ",r?"View Fix Progress":"Fix with Fleetshift"]})};export{h as FixMeButton};
2
+ //# sourceMappingURL=FixMeButton.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as i,jsxs as t}from"react/jsx-runtime";import{Button as r,Flex as n,Text as o}from"@backstage/ui";import{RiSparkling2Line as e}from"@remixicon/react";const a=()=>i(r,{variant:"secondary",children:t(n,{align:"center",gap:"2",children:[i(o,{weight:"bold",children:"Fix with Aika"})," ",i(e,{})]})});export{a as FixWithAiKAButton};
2
+ //# sourceMappingURL=FixWithAiKAButton.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as d}from"react/jsx-runtime";import{makeStyles as W,TextField as k}from"@material-ui/core";import{Autocomplete as w}from"@material-ui/lab";import{useCallback as A}from"react";import{Controller as M}from"react-hook-form";import{ListboxVirtualized as N}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const f=W(o=>({clearIndicator:{marginRight:o.spacing(1)},helperText:{marginLeft:0},noMargin:{margin:0}})),V=({name:o,rules:h,label:b,control:x,options:a,filterOptions:C,getOptionLabel:S,getOptionValue:r,getOptionSelected:v,onChange:m,disabled:O,placeholder:L,freeSolo:T=!0,width:c,helperText:I,disableClearable:y,fullWidth:u})=>{const i=f(),F=A(l=>a.find(s=>s.value===l)||l,[a]);return d(M,{name:o,control:x,rules:h,render:({field:l,fieldState:n})=>{const s=F(l.value);return d(w,{...l,value:s,freeSolo:T,autoSelect:!0,"data-testid":`${o}-autocomplete`,style:c?{width:c}:{minWidth:u?void 0:250},disabled:O,options:a,getOptionLabel:S,getOptionSelected:v,classes:{clearIndicator:i.clearIndicator},disableClearable:y,fullWidth:u,filterOptions:C,onChange:(p,e)=>{let t=null;e===null?t=null:typeof e=="string"?t=e:t=e.value;const g=r?r(t):t;m?.(g),l.onChange(g)},onInputChange:(p,e)=>{const t=r?r(e):e;m?.(t)},renderInput:p=>d(k,{...p,variant:"outlined",label:b,error:n.invalid,placeholder:L,FormHelperTextProps:{className:i.helperText},margin:"dense",className:i.noMargin,helperText:I??(n.error?n.error.message:null)}),ListboxComponent:N})}})};export{V as FormControlledAutocomplete,f as useStyles};
1
+ import{jsx as d}from"react/jsx-runtime";import{makeStyles as W,TextField as k}from"@material-ui/core";import{Autocomplete as w}from"@material-ui/lab";import{useCallback as A}from"react";import{Controller as M}from"react-hook-form";import{ListboxVirtualized as N}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const f=W(o=>({clearIndicator:{marginRight:o.spacing(1)},helperText:{marginLeft:0},noMargin:{margin:0}})),V=({name:o,rules:h,label:b,control:x,options:a,filterOptions:C,getOptionLabel:v,getOptionValue:r,getOptionSelected:O,onChange:m,disabled:S,placeholder:L,freeSolo:T=!0,width:c,helperText:I,disableClearable:y,fullWidth:u})=>{const i=f(),F=A(l=>a.find(s=>s.value===l)||l,[a]);return d(M,{name:o,control:x,rules:h,render:({field:l,fieldState:n})=>{const s=F(l.value);return d(w,{...l,value:s,freeSolo:T,"data-testid":`${o}-autocomplete`,style:c?{width:c}:{minWidth:u?void 0:250},disabled:S,options:a,getOptionLabel:v,getOptionSelected:O,classes:{clearIndicator:i.clearIndicator},disableClearable:y,fullWidth:u,filterOptions:C,onChange:(p,e)=>{let t=null;e===null?t=null:typeof e=="string"?t=e:t=e.value;const g=r?r(t):t;m?.(g),l.onChange(g)},onInputChange:(p,e)=>{const t=r?r(e):e;m?.(t)},renderInput:p=>d(k,{...p,variant:"outlined",label:b,error:n.invalid,placeholder:L,FormHelperTextProps:{className:i.helperText},margin:"dense",className:i.noMargin,helperText:I??(n.error?n.error.message:null)}),ListboxComponent:N})}})};export{V as FormControlledAutocomplete,f as useStyles};
2
2
  //# sourceMappingURL=FormControlledAutocomplete.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as u}from"react/jsx-runtime";import{Box as i,Flex as y}from"@backstage/ui";import{makeStyles as g}from"@material-ui/core";import{sortBy as b,uniqBy as x,isEmpty as v}from"lodash";import{useMemo as s,useCallback as B}from"react";import{Virtualizer as k,ListLayout as L,ListBox as G,ListBoxItem as S}from"react-aria-components";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useSearchName as w}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useGroupOptions as N}from"../../hooks/groups/useGroupOptions.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as $}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import{LoadingTableSkeleton as C}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const A=g(()=>({empty:{width:"36rem",margin:"var(--bui-space-4) 0"},listArea:{height:"16rem",width:"36rem",overflow:"auto",marginTop:"var(--bui-space-2)"},listBox:{padding:"var(--bui-space-2)","&:hover":{cursor:"pointer",backgroundColor:"var(--bui-bg-tint-hover)"}},listBoxSelected:{backgroundColor:"var(--bui-bg-tint)"}})),j=({searchTerm:d,selectRef:l,selectedRef:t})=>{const o=A(),{options:m,isLoading:a}=N(),p=s(()=>m.filter(e=>e.key==="My Groups").map(e=>({...e,key:`${e.ref}${e.ref===t?"-selectedGroup":""}`,id:e.ref})),[m,t]),n=s(()=>b(m.filter(e=>e.key==="All Groups").map(e=>({...e,key:`${e.ref}${e.ref===t?"-selectedGroup":""}`,id:e.ref})),e=>e.name.toLowerCase()),[m,t]),f=s(()=>x([...p,...n],"id"),[n,p]),c=w({items:f,searchTerm:d}),h=B(e=>{l(e.match(/-selectedGroup$/)?"":e)},[l]);return r(i,{children:r(i,{children:u(k,{layoutOptions:{padding:0,gap:2},layout:L,children:[a&&r(i,{className:o.listArea,children:r(C,{rowHeight:18,rowCount:8})}),v(c)&&!a?r(i,{className:o.empty,children:r($,{title:"No groups found.",body:"No groups found for the current selection."})}):r(G,{"aria-label":"Group List",items:c,className:o.listArea,selectionMode:"single",selectedKeys:t?[t]:void 0,onSelectionChange:e=>h(Object.values(e)[0]),children:e=>r(S,{textValue:e.name,className:`${o.listBox} ${e.ref===t?o.listBoxSelected:""}`,children:u(y,{justify:"between",children:[r(i,{children:e.name}),r(i,{children:e.type})]})})})]})})})};export{j as GroupSelectList};
1
+ import{jsx as r,jsxs as u}from"react/jsx-runtime";import{Box as i,Flex as y}from"@backstage/ui";import{makeStyles as g}from"@material-ui/core";import{sortBy as b,uniqBy as x,isEmpty as v}from"lodash";import{useMemo as s,useCallback as B}from"react";import{Virtualizer as k,ListLayout as L,ListBox as G,ListBoxItem as S}from"react-aria-components";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useSearchName as w}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useGroupOptions as N}from"../../hooks/groups/useGroupOptions.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as $}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import{LoadingTableSkeleton as C}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const A=g(()=>({empty:{width:"36rem",margin:"var(--bui-space-4) 0"},listArea:{height:"16rem",width:"36rem",overflow:"auto",marginTop:"var(--bui-space-2)"},listBox:{padding:"var(--bui-space-2)","&:hover":{cursor:"pointer",backgroundColor:"var(--bui-bg-tint-hover)"}},listBoxSelected:{backgroundColor:"var(--bui-bg-tint)"}})),j=({searchTerm:d,selectRef:p,selectedRef:t})=>{const o=A(),{options:m,isLoading:l}=N(),a=s(()=>m.filter(e=>e.key==="My Groups").map(e=>({...e,key:`${e.ref}${e.ref===t?"-selectedGroup":""}`,id:e.ref})),[m,t]),n=s(()=>b(m.filter(e=>e.key==="All Groups").map(e=>({...e,key:`${e.ref}${e.ref===t?"-selectedGroup":""}`,id:e.ref})),e=>e.name.toLowerCase()),[m,t]),f=s(()=>x([...a,...n],"id"),[n,a]),c=w({items:f,searchTerm:d}),h=B(e=>{p(e.match(/-selectedGroup$/)?"":e)},[p]);return r(i,{children:r(i,{children:u(k,{layoutOptions:{padding:0,gap:2},layout:L,children:[l&&r(i,{className:o.listArea,children:r(C,{rowHeight:18,rowCount:8})}),v(c)&&!l?r(i,{className:o.empty,children:r($,{title:"No groups found.",body:"No groups found for the current selection."})}):r(G,{"aria-label":"Group List",items:c,className:o.listArea,selectionMode:"single",selectedKeys:t?[t]:void 0,onSelectionChange:e=>h(Object.values(e)[0]),children:e=>r(S,{textValue:e.name,className:`${o.listBox} ${e.ref===t?o.listBoxSelected:""}`,children:u(y,{justify:"between",children:[r(i,{children:e.name}),r(i,{children:e.type})]})})})]})})})};export{j as GroupSelectList};
2
2
  //# sourceMappingURL=GroupSelectList.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as e,Fragment as D}from"react/jsx-runtime";import{useApi as F}from"@backstage/core-plugin-api";import{entityPresentationApiRef as M,useEntityPresentation as O}from"@backstage/plugin-catalog-react";import{Button as w,Flex as p,TextField as I,ButtonIcon as U,Box as y,Card as $,Text as l,Skeleton as G,TagGroup as A}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{RiUserLine as z,RiSearchLine as J,RiHistoryLine as K}from"@remixicon/react";import{sortBy as N,isEmpty as C,uniq as H}from"lodash";import{useState as k,useCallback as Q,useMemo as S}from"react";import{DialogTrigger as V,Popover as W,Dialog as X}from"react-aria-components";import{useGroupHierarchy as Y}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as Z}from"../../utils/getAllOwnedEntityCount.esm.js";import{GroupSelectionHistory as _}from"./GroupSelectionHistory.esm.js";import{GroupSelectList as ee}from"./GroupSelectList.esm.js";import{GroupTag as P}from"./GroupTag.esm.js";import{useGroupHistory as re}from"./useGroupHistory.esm.js";import{usePreviousSelectedGroups as ie}from"./usePreviousSelectedGroups.esm.js";const E=q(()=>({dialog:{padding:"var(--bui-space-3)",backgroundColor:"var(--bui-bg-surface-1)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-2)"},buttonArea:{marginTop:"var(--bui-space-2)"},selectedCard:{padding:"var(--bui-space-3)",gap:"var(--bui-space-2)",width:"36rem",margin:"var(--bui-space-3) 0"},relatedGroups:{marginTop:"var(--bui-space-2)"},tagArea:{height:"8rem",width:"16rem",overflow:"auto"}})),oe=({groupRef:o,onSelect:b})=>{const d=E(),{primaryTitle:i,secondaryTitle:f}=O(o),{isLoading:n,data:v}=Y(o,{includeParent:!0}),t=v?.[o],m=S(()=>Z(t),[t]),h=S(()=>{const a=t?.children??{};return N(Object.values(a).map(c=>({ref:c.entityRef,type:c.type})),"ref")},[t?.children]),u=S(()=>C(h)?[]:H(h.map(a=>a.ref)),[h]),g=S(()=>C(t?.parents)?[]:N(H(t.parents),a=>a),[t?.parents]);return r(y,{children:[r($,{className:d.selectedCard,children:[e(l,{variant:"body-medium",color:"secondary",children:"Currently Selected"}),r(p,{direction:"column",gap:"0",children:[e(l,{variant:"body-large",weight:"bold",children:i}),e(l,{variant:"body-medium",color:"secondary",children:f})]}),r(p,{gap:"0",direction:"column",children:[r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," directly owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[u.length," ",u.length===1?"entity":"entities"]})]}),r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," and it's subgroups owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[m," ",m===1?"entity":"entities"]})]})]})]}),r(p,{className:d.relatedGroups,children:[r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Parent Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(g)?e(l,{variant:"body-small",children:"No parent groups."}):e(A,{selectionMode:"single","aria-label":"Parent Groups",children:g.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,o)},`${a}-parent`))})]})]}),r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Child Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(u)?e(l,{variant:"body-small",children:"No child groups."}):e(A,{selectionMode:"single","aria-label":"Child Groups",children:u.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,void 0,o)},`${a}-child`))})]})]})]})]})},te=({selectedGroupRef:o,updateGroupRef:b})=>{const d=E(),[i,f]=k(o),[n,v]=k(""),[t,m]=k(!1),h=F(M),u=o?h.forEntity(o).snapshot.primaryTitle:void 0,{addGroupHistory:g,history:a}=re(),{addGroup:c,groupEntityRefs:B}=ie(),R=Q((s,x,T)=>{f(s),v(""),g(s,x,T)},[g]),L=!t&&(!i||n),j=!t&&i&&!n;return r(V,{onOpenChange:s=>{s&&o&&o!==i&&f(o),t&&m(!1)},children:[e(w,{variant:"secondary",iconStart:e(z,{}),children:u??"Select Group"}),e(W,{placement:"bottom right",children:e(X,{className:d.dialog,children:({close:s})=>{const x=()=>{i&&i!==o&&(b(i),c(i)),s()};return r(D,{children:[r(p,{align:"center",gap:"2",children:[e(I,{placeholder:"Search Groups",value:n,onChange:v,size:"small",icon:e(J,{}),"aria-label":"Search Groups",style:{flex:"1"}}),e(U,{"aria-label":"Show History",variant:"secondary",icon:e(K,{}),onClick:()=>m(!t)})]}),t&&e(_,{previouslySelectedGroups:B??[],history:a??[],selectRef:T=>{R(T),m(!1)}}),L&&e(ee,{searchTerm:n,selectedRef:i,selectRef:R}),j&&e(oe,{groupRef:i,onSelect:R}),r(p,{className:d.buttonArea,justify:"end",children:[e(w,{onClick:s,variant:"tertiary",children:"Close"}),e(w,{onClick:x,isDisabled:!i,children:"Apply"})]})]})}})})]})};export{te as GroupSelectorBUI};
1
+ import{jsxs as r,jsx as e,Fragment as D}from"react/jsx-runtime";import{useApi as F}from"@backstage/core-plugin-api";import{entityPresentationApiRef as M,useEntityPresentation as O}from"@backstage/plugin-catalog-react";import{Button as w,Flex as p,TextField as I,ButtonIcon as U,Box as y,Card as $,Text as l,Skeleton as G,TagGroup as A}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{RiUserLine as z,RiSearchLine as J,RiHistoryLine as K}from"@remixicon/react";import{sortBy as N,isEmpty as C,uniq as H}from"lodash";import{useState as k,useCallback as Q,useMemo as S}from"react";import{DialogTrigger as V,Popover as W,Dialog as X}from"react-aria-components";import{useGroupHierarchy as Y}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as Z}from"../../utils/getAllOwnedEntityCount.esm.js";import{GroupSelectionHistory as _}from"./GroupSelectionHistory.esm.js";import{GroupSelectList as ee}from"./GroupSelectList.esm.js";import{GroupTag as P}from"./GroupTag.esm.js";import{useGroupHistory as re}from"./useGroupHistory.esm.js";import{usePreviousSelectedGroups as ie}from"./usePreviousSelectedGroups.esm.js";const E=q(()=>({dialog:{padding:"var(--bui-space-3)",backgroundColor:"var(--bui-bg-popover)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-2)"},buttonArea:{marginTop:"var(--bui-space-2)"},selectedCard:{padding:"var(--bui-space-3)",gap:"var(--bui-space-2)",width:"36rem",margin:"var(--bui-space-3) 0"},relatedGroups:{marginTop:"var(--bui-space-2)"},tagArea:{height:"8rem",width:"16rem",overflow:"auto"}})),oe=({groupRef:o,onSelect:b})=>{const d=E(),{primaryTitle:i,secondaryTitle:f}=O(o),{isLoading:n,data:v}=Y(o,{includeParent:!0}),t=v?.[o],m=S(()=>Z(t),[t]),h=S(()=>{const a=t?.children??{};return N(Object.values(a).map(c=>({ref:c.entityRef,type:c.type})),"ref")},[t?.children]),u=S(()=>C(h)?[]:H(h.map(a=>a.ref)),[h]),g=S(()=>C(t?.parents)?[]:N(H(t.parents),a=>a),[t?.parents]);return r(y,{children:[r($,{className:d.selectedCard,children:[e(l,{variant:"body-medium",color:"secondary",children:"Currently Selected"}),r(p,{direction:"column",gap:"0",children:[e(l,{variant:"body-large",weight:"bold",children:i}),e(l,{variant:"body-medium",color:"secondary",children:f})]}),r(p,{gap:"0",direction:"column",children:[r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," directly owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[u.length," ",u.length===1?"entity":"entities"]})]}),r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," and it's subgroups owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[m," ",m===1?"entity":"entities"]})]})]})]}),r(p,{className:d.relatedGroups,children:[r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Parent Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(g)?e(l,{variant:"body-small",children:"No parent groups."}):e(A,{selectionMode:"single","aria-label":"Parent Groups",children:g.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,o)},`${a}-parent`))})]})]}),r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Child Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(u)?e(l,{variant:"body-small",children:"No child groups."}):e(A,{selectionMode:"single","aria-label":"Child Groups",children:u.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,void 0,o)},`${a}-child`))})]})]})]})]})},te=({selectedGroupRef:o,updateGroupRef:b})=>{const d=E(),[i,f]=k(o),[n,v]=k(""),[t,m]=k(!1),h=F(M),u=o?h.forEntity(o).snapshot.primaryTitle:void 0,{addGroupHistory:g,history:a}=re(),{addGroup:c,groupEntityRefs:B}=ie(),R=Q((s,x,T)=>{f(s),v(""),g(s,x,T)},[g]),L=!t&&(!i||n),j=!t&&i&&!n;return r(V,{onOpenChange:s=>{s&&o&&o!==i&&f(o),t&&m(!1)},children:[e(w,{variant:"secondary",iconStart:e(z,{}),children:u??"Select Group"}),e(W,{placement:"bottom right",children:e(X,{className:d.dialog,children:({close:s})=>{const x=()=>{i&&i!==o&&(b(i),c(i)),s()};return r(D,{children:[r(p,{align:"center",gap:"2",children:[e(I,{placeholder:"Search Groups",value:n,onChange:v,size:"small",icon:e(J,{}),"aria-label":"Search Groups",style:{flex:"1"}}),e(U,{"aria-label":"Show History",variant:"secondary",icon:e(K,{}),onClick:()=>m(!t)})]}),t&&e(_,{previouslySelectedGroups:B??[],history:a??[],selectRef:T=>{R(T),m(!1)}}),L&&e(ee,{searchTerm:n,selectedRef:i,selectRef:R}),j&&e(oe,{groupRef:i,onSelect:R}),r(p,{className:d.buttonArea,justify:"end",children:[e(w,{onClick:s,variant:"tertiary",children:"Close"}),e(w,{onClick:x,isDisabled:!i,children:"Apply"})]})]})}})})]})};export{te as GroupSelectorBUI};
2
2
  //# sourceMappingURL=GroupSelectorBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{getPercentage as n}from"../../../utils/formatters.esm.js";import{getTrackStatusTotal as R}from"../../../utils/tracks.esm.js";const u=(e,a)=>{if(!e||typeof e!="object")return null;if(e.groupRef===a)return e.status;if(e.children&&Array.isArray(e.children))for(const c of e.children){const l=u(c,a);if(l)return l}return null},p=(e,a,c,l,f)=>{const g=l.forEntity(e.entityRef).snapshot.primaryTitle,d=e.entityRef,r=a?u(a,d):null,h=c(r?.allPassPercentage||0),P=e.ownedEntityRefs?.length||0,t=r?R(r):0;if(!e.children||Object.keys(e.children).length===0){if(P===0)return;const i=Math.log(P+1);if(i===0)return;const s={id:g,name:g,entityRef:d,value:i,numberOfEntities:P,color:h,passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};return f&&(s.parent=f),s}const m=Object.values(e.children),o={id:g,name:g,entityRef:d,numberOfEntities:0,color:"",passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};f&&(o.parent=f);const y=m.map(i=>{const s=p(i,a,c,l,o);return o.numberOfEntities+=s?.numberOfEntities??0,s}).filter(i=>i!==void 0);return o.children=y,o.color=c(r?.allPassPercentage||0),o};export{p as hierarchyToNivo};
1
+ import{getPercentage as n}from"../../../utils/formatters.esm.js";import{getTrackStatusTotal as R}from"../../../utils/tracks.esm.js";const u=(e,a)=>{if(!e||typeof e!="object")return null;if(e.groupRef===a)return e.status;if(e.children&&Array.isArray(e.children))for(const c of e.children){const s=u(c,a);if(s)return s}return null},p=(e,a,c,s,f)=>{const g=e.entityRef,d=e.entityRef,r=a?u(a,d):null,h=c(r?.allPassPercentage||0),P=e.ownedEntityRefs?.length||0,t=r?R(r):0;if(!e.children||Object.keys(e.children).length===0){if(P===0)return;const i=Math.log(P+1);if(i===0)return;const l={id:g,name:g,entityRef:d,value:i,numberOfEntities:P,color:h,passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};return f&&(l.parent=f),l}const m=Object.values(e.children),o={id:g,name:g,entityRef:d,numberOfEntities:0,color:"",passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};f&&(o.parent=f);const y=m.map(i=>{const l=p(i,a,c,s,o);return o.numberOfEntities+=l?.numberOfEntities??0,l}).filter(i=>i!==void 0);return o.children=y,o.color=c(r?.allPassPercentage||0),o};export{p as hierarchyToNivo};
2
2
  //# sourceMappingURL=hierarchyToNivo.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as m}from"react/jsx-runtime";import{useEntity as d}from"@backstage/plugin-catalog-react";import{makeStyles as y}from"@material-ui/core";import{useState as g,useEffect as v}from"react";import C from"react-confetti";import L from"react-use/lib/useMeasure";import p from"react-use/lib/usePrevious";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as k}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";const w=y(()=>({root:{position:"absolute",width:"100%",height:"100%"}})),S=({trackId:t})=>{const s=w(),{entity:a}=d(),{data:f,isLoading:n}=k(a,t),[l,{width:c,height:h}]=L(),o=n?void 0:f?.highestLevel?.ordinal??-1,i=p(o),r=p(t),[u,e]=g(!1);return v(()=>{typeof i<"u"&&typeof o<"u"&&t===r&&o>i&&e(!0)},[o,i,t,r]),u?m("div",{ref:l,className:s.root,children:m(C,{width:c,height:h,numberOfPieces:1e3,gravity:1,initialVelocityY:20,recycle:!1,onConfettiComplete:()=>e(!1)})}):null};export{S as LevelUpParty};
1
+ import{jsx as m}from"react/jsx-runtime";import{useEntity as d}from"@backstage/plugin-catalog-react";import{makeStyles as y}from"@material-ui/core";import{useState as g,useEffect as v}from"react";import C from"react-confetti";import L from"react-use/lib/useMeasure";import p from"react-use/lib/usePrevious";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as k}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";const w=y(()=>({root:{position:"absolute",width:"100%",height:"100%"}})),S=({trackId:t})=>{const s=w(),{entity:a}=d(),{data:f,isLoading:n}=k(a,t),[l,{width:c,height:h}]=L(),o=n?void 0:f?.highestLevel?.ordinal??-1,i=p(o),r=p(t),[u,e]=g(!1);return v(()=>{typeof i<"u"&&typeof o<"u"&&t===r&&o>i&&e(!0)},[o,i,t,r]),u?m("div",{ref:l,className:s.root,children:m(C,{width:c,height:h,numberOfPieces:1e3,gravity:1,initialVelocityY:20,recycle:!1,onConfettiComplete:()=>e(!1)})}):null};export{S as LevelUpParty};
2
2
  //# sourceMappingURL=LevelUpParty.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{makeStyles as n}from"@material-ui/core";import{RiLoopRightLine as r}from"@remixicon/react";const i=n(()=>({spin:{animation:"$spin 1s linear infinite"},"@keyframes spin":{from:{transform:"rotate(0deg)"},to:{transform:"rotate(360deg)"}}})),s=()=>{const o=i();return t(r,{className:o.spin})};export{s as LoadingIcon};
2
+ //# sourceMappingURL=LoadingIcon.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{useRouteRef as L,useApi as N,configApiRef as x}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiEditBoxLine as E,RiArchiveLine as M,RiDeleteBinLine as P,RiNotificationLine as B}from"@remixicon/react";import{soundcheckCampaignUpdatePermission as T,soundcheckCampaignDeletePermission as U,soundcheckCampaignNotificationsCreatePermission as $}from"@spotify/backstage-plugin-soundcheck-common";import{useState as j,useCallback as r,useMemo as I}from"react";import{useNavigate as O}from"react-router-dom";import{v4 as q}from"uuid";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useArchiveCampaign as z}from"../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as F}from"../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as G}from"../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as H}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{campaignEditRouteRef as J}from"../../routes.esm.js";import{useArchiveConfirmationModal as K}from"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const Q=i=>{const m=L(J),s=O(),c=i?.archived,{showModal:d}=H(),[S,p]=j(!1),{showArchiveModal:l}=K(),{mutate:u}=G(),{mutate:f}=F(),{mutate:g}=z(),h=N(x).getOptionalBoolean("soundcheck.notifications.enabled"),{loading:C,allowed:v}=n({permission:T,resourceRef:i?.id}),{loading:R,allowed:k}=n({permission:U,resourceRef:i?.id}),{loading:w,allowed:A}=n({permission:$}),y=r(async()=>{i?.id&&await d({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${i.name??i.id}?`})&&f(i.id)},[d,f,i?.id,i?.name]),b=r(()=>{if(!i)return;const{track:e}=i,a={id:q(),ownerEntityRef:e.ownerEntityRef,description:e.description??"",name:e.name,documentationURL:e.documentationURL,type:"standard",levels:e.levels.map(o=>({checks:o.checks,description:o.description,name:o.name,ordinal:o.ordinal})),filter:e.filter??void 0,exclude:e.exclude??void 0,badgeType:"status",draft:e.draft??!1};u(a)},[i,u]),D=r(async()=>{if(!i?.id)return;const{saveTrack:e,confirmed:a}=await l({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${i.name??i.id}?`});a&&(e&&b(),g(i.id))},[g,i?.id,i?.name,b,l]);return{actions:I(()=>{if(!i?.id)return[];const e=[];return!C&&v&&e.push({label:"Edit",id:"edit",onClick:()=>s(m({campaignId:i.id})),iconStart:t(E,{})}),!R&&k&&(c||e.push({label:"Archive",id:"archive",onClick:D,iconStart:t(M,{})}),e.push({label:"Delete",id:"delete",onClick:y,iconStart:t(P,{})})),!w&&h&&A&&i&&e.push({label:"Send Reminder",id:"send",onClick:()=>p(!0),iconStart:t(B,{})}),e},[i,m,k,v,A,D,y,c,h,R,C,w,s]),showNotificationDialog:S,setShowNotificationDialog:p}};export{Q as useCampaignActions};
1
+ import{jsx as t}from"react/jsx-runtime";import{useRouteRef as E,useApi as x,configApiRef as N}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiEditBoxLine as M,RiArchiveLine as P,RiDeleteBinLine as B,RiNotificationLine as T,RiExternalLinkLine as U}from"@remixicon/react";import{soundcheckCampaignUpdatePermission as $,soundcheckCampaignDeletePermission as j,soundcheckCampaignNotificationsCreatePermission as I}from"@spotify/backstage-plugin-soundcheck-common";import{useState as O,useCallback as m,useMemo as q}from"react";import{useNavigate as z}from"react-router-dom";import{v4 as F}from"uuid";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useArchiveCampaign as G}from"../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as H}from"../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as J}from"../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as K}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{campaignEditRouteRef as Q}from"../../routes.esm.js";import{useExternalCampaignActions as V}from"../CampaignPage/CampaignActionsContext.esm.js";import{useArchiveConfirmationModal as W}from"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const X=i=>{const s=E(Q),r=z(),c=i?.archived,{showModal:d}=K(),[D,l]=O(!1),{showArchiveModal:p}=W(),{mutate:u}=J(),{mutate:f}=H(),{mutate:h}=G(),g=V(),C=x(N).getOptionalBoolean("soundcheck.notifications.enabled"),{loading:R,allowed:k}=n({permission:$,resourceRef:i?.id}),{loading:v,allowed:w}=n({permission:j,resourceRef:i?.id}),{loading:A,allowed:y}=n({permission:I}),b=m(async()=>{i?.id&&await d({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${i.name??i.id}?`})&&f(i.id)},[d,f,i?.id,i?.name]),L=m(()=>{if(!i)return;const{track:o}=i,e={id:F(),ownerEntityRef:o.ownerEntityRef,description:o.description??"",name:o.name,documentationURL:o.documentationURL,type:"standard",levels:o.levels.map(a=>({checks:a.checks,description:a.description,name:a.name,ordinal:a.ordinal})),filter:o.filter??void 0,exclude:o.exclude??void 0,badgeType:"status",draft:o.draft??!1};u(e)},[i,u]),S=m(async()=>{if(!i?.id)return;const{saveTrack:o,confirmed:e}=await p({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${i.name??i.id}?`});e&&(o&&L(),h(i.id))},[h,i?.id,i?.name,L,p]);return{actions:q(()=>{if(!i?.id)return[];const o=[];!R&&k&&o.push({label:"Edit",id:"edit",onClick:()=>r(s({campaignId:i.id})),iconStart:t(M,{})}),!v&&w&&(c||o.push({label:"Archive",id:"archive",onClick:S,iconStart:t(P,{})}),o.push({label:"Delete",id:"delete",onClick:b,iconStart:t(B,{})})),!A&&C&&y&&i&&o.push({label:"Send Reminder",id:"send",onClick:()=>l(!0),iconStart:t(T,{})});for(const e of g)o.push({label:e.label,id:e.id,onClick:()=>r(e.href(i.id)),iconStart:t(U,{})});return o},[i,s,w,k,y,g,S,b,c,C,v,R,A,r]),showNotificationDialog:D,setShowNotificationDialog:l}};export{X as useCampaignActions};
2
2
  //# sourceMappingURL=useCampaignActions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i}from"react/jsx-runtime";import{useRouteRef as u}from"@backstage/core-plugin-api";import{usePermission as p}from"@backstage/plugin-permission-react";import{RiExportLine as f,RiEditBoxLine as h,RiDeleteBinLine as k}from"@remixicon/react";import{soundcheckCheckUpdatePermission as C,soundcheckCheckDeletePermission as R}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as x,useMemo as E}from"react";import{useNavigate as b}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useDeleteCheck as D}from"../../hooks/checks/useDeleteCheck.esm.js";import{checkEditRouteRef as g}from"../../routes.esm.js";import{exportCheck as y}from"../../utils/export.esm.js";const L=e=>{const t=b(),r=u(g),{loading:m,allowed:s}=p({permission:C,resourceRef:e?.id}),{loading:n,allowed:c}=p({permission:R,resourceRef:e?.id}),{showModal:a}=w(),{mutate:l}=D(),d=x(async()=>{e?.id&&await a({title:"Delete Check",message:`Are you sure you want to delete the check '${e.name??e.id}'?`})&&l(e.id)},[a,e?.name,l,e?.id]);return E(()=>{if(!e)return[];const o=[{label:"Export",id:"export",onClick:()=>y(e),iconStart:i(f,{})}];return e.isEditable&&!m&&s&&o.push({label:"Edit",id:"edit",onClick:()=>t(r({checkId:e.id})),iconStart:i(h,{})}),e.isEditable&&!n&&c&&o.push({label:"Delete",id:"delete",onClick:d,iconStart:i(k,{})}),o},[c,s,e,r,d,n,m,t])};export{L as useCheckActions};
1
+ import{jsx as i}from"react/jsx-runtime";import{useRouteRef as u}from"@backstage/core-plugin-api";import{usePermission as d}from"@backstage/plugin-permission-react";import{RiExportLine as f,RiEditBoxLine as h,RiDeleteBinLine as k}from"@remixicon/react";import{soundcheckCheckUpdatePermission as C,soundcheckCheckDeletePermission as R}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as x,useMemo as E}from"react";import{useNavigate as b}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useDeleteCheck as D}from"../../hooks/checks/useDeleteCheck.esm.js";import{checkEditRouteRef as g}from"../../routes.esm.js";import{exportCheck as y}from"../../utils/export.esm.js";const L=e=>{const t=b(),r=u(g),{loading:m,allowed:s}=d({permission:C,resourceRef:e?.id}),{loading:n,allowed:c}=d({permission:R,resourceRef:e?.id}),{showModal:a}=w(),{mutate:l}=D(),p=x(async()=>{e?.id&&await a({title:"Delete Check",message:`Are you sure you want to delete the check '${e.name??e.id}'?`})&&l(e.id)},[a,e?.name,l,e?.id]);return E(()=>{if(!e)return[];const o=[{label:"Export",id:"export",onClick:()=>y(e),iconStart:i(f,{})}];return e.isEditable&&!m&&s&&o.push({label:"Edit",id:"edit",onClick:()=>t(r({checkId:e.id})),iconStart:i(h,{})}),e.isEditable&&!n&&c&&o.push({label:"Delete",id:"delete",onClick:p,iconStart:i(k,{})}),o},[c,s,e,r,p,n,m,t])};export{L as useCheckActions};
2
2
  //# sourceMappingURL=useCheckActions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r}from"react/jsx-runtime";import{useRouteRef as R,useApi as g,configApiRef as b}from"@backstage/core-plugin-api";import{usePermission as y}from"@backstage/plugin-permission-react";import{RiExportLine as w,RiEditBoxLine as T,RiDeleteBinLine as x,RiRefreshLine as C}from"@remixicon/react";import{soundcheckTrackDeletePermission as D,soundcheckTrackUpdatePermission as E}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as h,useMemo as A}from"react";import{useNavigate as I}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useDeleteTrack as M}from"../../hooks/tracks/useDeleteTrack.esm.js";import{useRecertifyTrack as N}from"../../hooks/tracks/useRecertifyTrack.esm.js";import{trackEditRouteRef as O}from"../../routes.esm.js";import{exportTrack as S}from"../../utils/export.esm.js";const B=e=>{const{loading:s,allowed:c}=y({permission:D,resourceRef:e?.id}),{loading:a,allowed:n}=y({permission:E,resourceRef:e?.id}),{showModal:t}=L(),{mutate:m}=N(),{mutate:l}=M(),d=I(),u=R(O),p=g(b).getOptionalConfig("soundcheck.certifications.history");let i=p?.getOptionalBoolean("enable")?p?.getOptionalNumber("retentionTimeInDays")??120:1;i=Math.min(i,365);const f=h(async()=>{e?.id&&await t({title:"Recertify Track",message:`Are you sure you want to recertify track ${e.name??e.id}? It will erase existing certification data, which cannot be undone. New data will be generated for the past ${i} day(s), reflecting the track's current configuration. This process may take some time, you will be notified upon completion.`})&&m({trackId:e.id,numberOfDays:i})},[t,e?.id,e?.name,m,i]),k=h(async()=>{e?.id&&await t({title:"Delete Track",message:`Are you sure you want to delete track ${e.name??e.id}?`})&&l(e.id)},[t,e?.id,e?.name,l]);return A(()=>{if(!e)return[];const o=[{label:"Export",id:"export",onClick:()=>S(e),iconStart:r(w,{})}];return e.isEditable&&!a&&n&&o.push({label:"Edit",id:"edit",onClick:()=>d(u({trackId:e.id})),iconStart:r(T,{})}),e.isEditable&&!s&&c&&o.push({label:"Delete",id:"delete",onClick:k,iconStart:r(x,{})}),!a&&n&&o.push({label:"Recertify",id:"recertify",onClick:f,iconStart:r(C,{})}),o},[c,n,k,f,s,a,d,e,u])};export{B as useTrackActions};
1
+ import{jsx as r}from"react/jsx-runtime";import{useRouteRef as R,useApi as g,configApiRef as b}from"@backstage/core-plugin-api";import{usePermission as y}from"@backstage/plugin-permission-react";import{RiExportLine as w,RiEditBoxLine as T,RiDeleteBinLine as x,RiRefreshLine as C}from"@remixicon/react";import{soundcheckTrackDeletePermission as D,soundcheckTrackUpdatePermission as E}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as h,useMemo as A}from"react";import{useNavigate as I}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useDeleteTrack as M}from"../../hooks/tracks/useDeleteTrack.esm.js";import{useRecertifyTrack as N}from"../../hooks/tracks/useRecertifyTrack.esm.js";import{trackEditRouteRef as O}from"../../routes.esm.js";import{exportTrack as S}from"../../utils/export.esm.js";const B=i=>{const{loading:s,allowed:m}=y({permission:D,resourceRef:i?.id}),{loading:a,allowed:n}=y({permission:E,resourceRef:i?.id}),{showModal:t}=L(),{mutate:c}=N(),{mutate:l}=M(),d=I(),p=R(O),u=g(b).getOptionalConfig("soundcheck.certifications.history");let e=u?.getOptionalBoolean("enable")?u?.getOptionalNumber("retentionTimeInDays")??120:1;e=Math.min(e,365);const f=h(async()=>{i?.id&&await t({title:"Recertify Track",message:`Are you sure you want to recertify track ${i.name??i.id}? It will erase existing certification data, which cannot be undone. New data will be generated for the past ${e} day(s), reflecting the track's current configuration. This process may take some time, you will be notified upon completion.`})&&c({trackId:i.id,numberOfDays:e})},[t,i?.id,i?.name,c,e]),k=h(async()=>{i?.id&&await t({title:"Delete Track",message:`Are you sure you want to delete track ${i.name??i.id}?`})&&l(i.id)},[t,i?.id,i?.name,l]);return A(()=>{if(!i)return[];const o=[{label:"Export",id:"export",onClick:()=>S(i),iconStart:r(w,{})}];return i.isEditable&&!a&&n&&o.push({label:"Edit",id:"edit",onClick:()=>d(p({trackId:i.id})),iconStart:r(T,{})}),i.isEditable&&!s&&m&&o.push({label:"Delete",id:"delete",onClick:k,iconStart:r(x,{})}),!a&&n&&o.push({label:"Recertify",id:"recertify",onClick:f,iconStart:r(C,{})}),o},[m,n,k,f,s,a,d,i,p])};export{B as useTrackActions};
2
2
  //# sourceMappingURL=useTrackActions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o,jsxs as P,Fragment as D}from"react/jsx-runtime";import{useRouteRef as M}from"@backstage/core-plugin-api";import{entityRouteRef as q}from"@backstage/plugin-catalog-react";import{makeStyles as B,Grid as I}from"@material-ui/core";import{useContext as J,useEffect as y,useState as K,useRef as Q,useLayoutEffect as U,useMemo as X}from"react";import{VariableSizeGrid as Y}from"react-window";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useTrackOverviewForOwner as Z}from"../../hooks/certifications/useTrackOverviewForOwner.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{EmptyState as _}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import"../OverviewPage/OverviewPage.esm.js";import"@spotify/backstage-plugin-core";import"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{OverviewPageContext as ee}from"../OverviewPage/OverviewPageContent.esm.js";import"../Pagination/Pagination.esm.js";import{useCursorPagination as te,CursorPagination as re}from"../Pagination/CursorPagination.esm.js";import{cellRenderer as oe}from"./Cell/cellRenderer.esm.js";import{OverviewTableSkeleton as ie}from"./OverviewTableSkeleton.esm.js";import{ResultsTableHeader as ne}from"./ResultsTableHeader.esm.js";import{generateRowsPivoted as ae,generateRows as le,generateHeaderRowPivoted as me,generateHeaderRow as se}from"./ResultsTableRow.esm.js";import{RowHeights as E,CellWidths as S,calculateTableWidth as ue}from"./resultsTableUtils.esm.js";import pe from"./useWindowDimensions.esm.js";const W=25,ce=B(i=>({table:{backgroundColor:i.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"},tableContainer:{backgroundColor:i.palette.background.paper}})),de=({setError:i,kind:p,type:l,ownerEntityRef:t})=>{const{cursor:x,pageSize:R,...c}=te({defaultPageSize:W,label:"entitiesPerPage"}),{debouncedSearchValue:m,pivot:s}=J(ee),{data:e,isLoading:d,isError:b}=Z(t,{kind:p,type:l==="all"?null:l},R,x,m);y(()=>{c.setCursor(""),c.setCurrentPage(0)},[m]);const k=ce(),g=M(q);y(()=>{i?.(b?new Error("Error loading track overview"):void 0)},[b,i]);const[H,z]=K(0),{height:T}=pe(),n=Q(null);U(()=>{e&&t&&n?.current&&z(n.current.clientWidth?n.current.clientWidth-16:100)},[n,e,t]);const{rows:h,headerRow:f,tableWidth:w,entityRefsWithPadding:N,getRowHeight:O,columnCount:V}=X(()=>{if(d||!e||!t)return{};const{tracks:a,entityRefs:r}=e;if(!r)return{};const u=r.length>=25?r:[...r,...Array.from({length:25-r.length},()=>{})],C=s?ae(a,r,g):le(a,u,g),v=C[0]?.cells?.length??u.length+1,G=s?me(a):se(u),L=ue(v-1)+60;return{rows:C,headerRow:G,tableWidth:L,entityRefsWithPadding:u,getRowHeight:j=>C[j]?.height??E.check,columnCount:v}},[e,g,d,t,s]);if(d)return o(ie,{});if(!e||!t)return null;const{totalCount:$,endCursor:A,prevCursor:F}=e;return!f||!w||!N||!h?.length?m?o(_,{title:"No Entities Found",description:`No entities found with name containing: '${m}'`}):null:P("div",{ref:n,children:[o(I,{"aria-label":`Check results for ${l??p}`,item:!0,xs:12,className:k.tableContainer,children:H>0&&P(D,{children:[o(ne,{headerRow:f,gridWidth:w}),o(Y,{className:k.table,columnCount:V,columnWidth:a=>a===0?S.trackTitle:S.checkResult,rowCount:h.length,rowHeight:O,height:T*.7-E.paginationControl-f.height,width:w,children:oe(h)},s?"entityView":"checkView")]})},`${p}|${l??""}`),o(re,{...c,totalCount:$,defaultPageSize:W,endCursor:A,prevCursor:F,pageSize:R,labelRowsPerPage:"Entities per page:"})]})};export{de as ResultsTable};
1
+ import{jsx as o,jsxs as P,Fragment as D}from"react/jsx-runtime";import{useRouteRef as M}from"@backstage/core-plugin-api";import{entityRouteRef as q}from"@backstage/plugin-catalog-react";import{makeStyles as B,Grid as I}from"@material-ui/core";import{useContext as J,useEffect as y,useState as K,useRef as Q,useLayoutEffect as U,useMemo as X}from"react";import{VariableSizeGrid as Y}from"react-window";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useTrackOverviewForOwner as Z}from"../../hooks/certifications/useTrackOverviewForOwner.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{EmptyState as _}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import"../OverviewPage/OverviewPage.esm.js";import"@spotify/backstage-plugin-core";import"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{OverviewPageContext as ee}from"../OverviewPage/OverviewPageContent.esm.js";import"../Pagination/Pagination.esm.js";import{useCursorPagination as te,CursorPagination as re}from"../Pagination/CursorPagination.esm.js";import{cellRenderer as oe}from"./Cell/cellRenderer.esm.js";import{OverviewTableSkeleton as ie}from"./OverviewTableSkeleton.esm.js";import{ResultsTableHeader as ne}from"./ResultsTableHeader.esm.js";import{generateRowsPivoted as ae,generateRows as le,generateHeaderRowPivoted as me,generateHeaderRow as se}from"./ResultsTableRow.esm.js";import{RowHeights as E,CellWidths as S,calculateTableWidth as ue}from"./resultsTableUtils.esm.js";import pe from"./useWindowDimensions.esm.js";const W=25,ce=B(i=>({table:{backgroundColor:i.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"},tableContainer:{backgroundColor:i.palette.background.paper}})),de=({setError:i,kind:p,type:l,ownerEntityRef:t})=>{const{cursor:x,pageSize:R,...c}=te({defaultPageSize:W,label:"entitiesPerPage"}),{debouncedSearchValue:m,pivot:s}=J(ee),{data:e,isLoading:d,isError:b}=Z(t,{kind:p,type:l==="all"?null:l},R,x,m);y(()=>{c.setCursor(""),c.setCurrentPage(0)},[m]);const k=ce(),g=M(q);y(()=>{i?.(b?new Error("Error loading track overview"):void 0)},[b,i]);const[H,z]=K(0),{height:T}=pe(),n=Q(null);U(()=>{e&&t&&n?.current&&z(n.current.clientWidth?n.current.clientWidth-16:100)},[n,e,t]);const{rows:h,headerRow:f,tableWidth:w,entityRefsWithPadding:N,getRowHeight:O,columnCount:V}=X(()=>{if(d||!e||!t)return{};const{tracks:a,entityRefs:r}=e;if(!r)return{};const u=r.length>=25?r:[...r,...Array.from({length:25-r.length},()=>{})],C=s?ae(a,r,g):le(a,u,g),v=C[0]?.cells?.length??u.length+1,G=s?me(a):se(u),L=ue(v-1)+60;return{rows:C,headerRow:G,tableWidth:L,entityRefsWithPadding:u,getRowHeight:j=>C[j]?.height??E.check,columnCount:v}},[e,g,d,t,s]);if(d)return o(ie,{});if(!e||!t)return null;const{totalCount:$,endCursor:A,prevCursor:F}=e;return!f||!w||!N||!h?.length?m?o(_,{title:"No Entities Found",description:`No entities found with name containing: '${m}'`}):null:P("div",{ref:n,children:[o(I,{"aria-label":`Check results for ${l??p}`,item:!0,xs:12,className:k.tableContainer,children:H>0&&P(D,{children:[o(ne,{headerRow:f,gridWidth:w}),o(Y,{className:k.table,columnCount:V,columnWidth:a=>a===0?S.trackTitle:S.checkResult,rowCount:h.length,rowHeight:O,height:T*.7-E.paginationControl-f.height,width:w,children:oe(h)},s?"entityView":"checkView")]})},`${p}|${l??""}`),o(re,{...c,totalCount:$,defaultPageSize:W,endCursor:A,prevCursor:F,pageSize:R,labelRowsPerPage:"Entities per page:"})]})};export{de as ResultsTable};
2
2
  //# sourceMappingURL=ResultsTable.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as i}from"react/jsx-runtime";import{Flex as v}from"@backstage/ui";import{makeStyles as p}from"@material-ui/core";const g=p(()=>({container:{gap:"var(--bui-space-1)",width:"100%"},segment:{height:"var(--bui-space-1_5)",border:"var(--bui-space-0_5) solid transparent",borderRadius:"var(--bui-space-1)"},empty:{height:"var(--bui-space-1_5)",background:"var(--bui-fg-disabled)",border:"var(--bui-space-0_5) solid transparent",borderRadius:"var(--bui-space-1)",width:"100%"}})),h=({segments:u,hideZeroSegments:d=!0})=>{const r=g(),b="var(--bui-fg-disabled)",t=(u??[]).filter(e=>Number.isFinite(e.value)).map(e=>({...e,value:Math.max(0,e.value)})),a=d?t.filter(({value:e})=>e>0):t,s=a.reduce((e,m)=>e+m.value,0);if(a.length===0||s===0)return i("div",{className:r.empty});const l=Math.max(0,100-s),o="In Progress",n=l>0?[...a,{key:o,label:o,value:l,color:b}]:a,c=n.length===1;return i(v,{className:r.container,children:n.map(e=>i("div",{className:r.segment,"aria-label":e.ariaLabel??e.label??e.key,title:e.label,style:{flexGrow:e.value,width:c?"100%":void 0,background:e.color}},e.key))})};export{h as ProgressBar};
2
+ //# sourceMappingURL=ProgressBar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i}from"react/jsx-runtime";import{makeStyles as n,LinearProgress as p}from"@material-ui/core";import{useState as a}from"react";import s from"react-use/lib/useDebounce";import d from"react-use/lib/useUnmount";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import{useIsFetching as c}from"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{FadeIn as f}from"../FadeIn/FadeIn.esm.js";const l=n(t=>({indicator:{position:"absolute",width:"100%",zIndex:t.zIndex.speedDial}})),h=()=>{const t=c(),r=l(),[o,e]=a(!!t),[u,m]=s(()=>{e(!!t)},250,[t]);return d(m),o?i(f,{children:i("div",{className:r.indicator,children:i(p,{variant:"indeterminate","data-testid":"refetching-indicator"})})}):null};export{h as RefetchingIndicator};
1
+ import{jsx as i}from"react/jsx-runtime";import{makeStyles as n,LinearProgress as p}from"@material-ui/core";import{useState as a}from"react";import s from"react-use/lib/useDebounce";import d from"react-use/lib/useUnmount";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import{useIsFetching as c}from"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{FadeIn as f}from"../FadeIn/FadeIn.esm.js";const l=n(t=>({indicator:{position:"absolute",width:"100%",zIndex:t.zIndex.speedDial}})),h=()=>{const t=c(),r=l(),[o,m]=a(!!t),[u,e]=s(()=>{m(!!t)},250,[t]);return d(e),o?i(f,{children:i("div",{className:r.indicator,children:i(p,{variant:"indeterminate","data-testid":"refetching-indicator"})})}):null};export{h as RefetchingIndicator};
2
2
  //# sourceMappingURL=RefetchingIndicator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as t}from"react/jsx-runtime";import{makeStyles as p,Tooltip as s,Typography as c}from"@material-ui/core";import d from"@material-ui/icons/Schedule";import{useAutoUpdatingRelativeTime as f}from"@spotify/backstage-plugin-core";import{DateTime as r}from"luxon";const g=p(i=>({root:{display:"inline-flex",alignItems:"center",gap:i.spacing(1)}})),T=({timestamp:i,description:o})=>{const a=g(),m=r.fromISO(i).toLocaleString(r.DATETIME_FULL),e=f(i),l=o?`${o}: ${e}`:void 0;return n("div",{className:a.root,children:[t(s,{title:m,children:t(c,{variant:"caption","aria-label":l,children:e})}),t(d,{fontSize:"small"})]})};export{T as RelativeTime};
1
+ import{jsxs as s,jsx as o}from"react/jsx-runtime";import{makeStyles as p,Tooltip as c,Typography as d}from"@material-ui/core";import f from"@material-ui/icons/Schedule";import{useAutoUpdatingRelativeTime as T}from"@spotify/backstage-plugin-core";import{DateTime as r}from"luxon";const g=p(i=>({root:{display:"inline-flex",alignItems:"center",gap:i.spacing(1)}})),h=({timestamp:i,description:t,showIcon:a=!0})=>{const m=g(),n=r.fromISO(i).toLocaleString(r.DATETIME_FULL),e=T(i),l=t?`${t}: ${e}`:void 0;return s("div",{className:m.root,children:[o(c,{title:n,children:o(d,{variant:"caption","aria-label":l,children:e})}),a&&o(f,{fontSize:"small"})]})};export{h as RelativeTime};
2
2
  //# sourceMappingURL=RelativeTime.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as s,Fragment as d}from"react/jsx-runtime";import{useRouteRef as p,useRouteRefParams as h}from"@backstage/core-plugin-api";import{useEntity as m}from"@backstage/plugin-catalog-react";import{SecretsContextProvider as L}from"@backstage/plugin-scaffolder-react";import{Routes as N,Route as l,Navigate as f}from"react-router-dom";import{ResultState as T}from"../graphql/generated/index.esm.js";import{useAllCertifications as S}from"../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as C}from"../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../hooks/playlists/usePlaylists.esm.js";import"react-use/lib/useLocalStorage";import{certificationPlaylistTrackCheckRouteRef as x,certificationPlaylistTrackRouteRef as k,certificationPlaylistRouteRef as R,certificationTrackRouteRef as y,certificationRouteRef as g}from"../routes.esm.js";import{EntityContent as n}from"./EntityContent/EntityContent.esm.js";const b=()=>{const{entity:i}=m(),e=p(R),a=p(y),{isLoading:r,data:o}=P(i),{isLoading:c,data:A}=S(i);if(r||c)return null;const u=o?.[0]?.id,I=A?.[0]?.track.id;return!u&&!I?null:t(f,{to:u?e({playlistId:u}):a({trackId:I}),replace:!0})},v=()=>{const{entity:i}=m(),{playlistId:e}=h(R),a=p(k),{data:r}=P(i),o=r?.find(c=>c.id===e)?.trackIds[0];return o?t(f,{to:a({playlistId:e,trackId:o}),replace:!0}):null},F=i=>(i?.levels?.flatMap(e=>e.checks??[])??[]).filter(e=>e.result!==T.Exempt&&e.result!==T.NotApplicable)[0],E=()=>{const{entity:i}=m(),{playlistId:e,trackId:a}=h(k),{data:r}=C(i,a),o=p(x),c=F(r)?.id??r?.levels[0]?.checks[0]?.id;return c?t(f,{to:o({playlistId:e,trackId:a,checkId:c}),replace:!0}):null},j=()=>{const{entity:i}=m(),{trackId:e}=h(y),a=p(g),{data:r}=C(i,e),o=F(r)?.id??r?.levels?.find(c=>c.checks.length>0)?.checks[0].id;return o?t(f,{to:a({trackId:e,checkId:o}),replace:!0}):null},D=()=>t(L,{children:s(N,{children:[t(l,{path:x.path,element:t(n,{})}),t(l,{path:k.path,element:s(d,{children:[t(n,{}),t(E,{})]})}),t(l,{path:R.path,element:s(d,{children:[t(n,{}),t(v,{})]})}),t(l,{path:y.path,element:s(d,{children:[t(n,{}),t(j,{})]})}),t(l,{path:g.path,element:t(n,{})}),t(l,{path:"/",element:s(d,{children:[t(n,{}),t(b,{})]})})]})});export{j as RedirectToFirstCheck,v as RedirectToFirstPlaylistTrack,E as RedirectToFirstPlaylistTrackCheck,D as Router};
1
+ import{jsx as t,jsxs as s,Fragment as m}from"react/jsx-runtime";import{useRouteRef as p,useRouteRefParams as h}from"@backstage/core-plugin-api";import{useEntity as d}from"@backstage/plugin-catalog-react";import{SecretsContextProvider as L}from"@backstage/plugin-scaffolder-react";import{Routes as N,Route as l,Navigate as f}from"react-router-dom";import{ResultState as T}from"../graphql/generated/index.esm.js";import{useAllCertifications as S}from"../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as C}from"../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../hooks/playlists/usePlaylists.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import{certificationPlaylistTrackCheckRouteRef as x,certificationPlaylistTrackRouteRef as k,certificationPlaylistRouteRef as R,certificationTrackRouteRef as y,certificationRouteRef as g}from"../routes.esm.js";import{EntityContent as n}from"./EntityContent/EntityContent.esm.js";const b=()=>{const{entity:i}=d(),e=p(R),a=p(y),{isLoading:r,data:o}=P(i),{isLoading:c,data:A}=S(i);if(r||c)return null;const u=o?.[0]?.id,I=A?.[0]?.track.id;return!u&&!I?null:t(f,{to:u?e({playlistId:u}):a({trackId:I}),replace:!0})},v=()=>{const{entity:i}=d(),{playlistId:e}=h(R),a=p(k),{data:r}=P(i),o=r?.find(c=>c.id===e)?.trackIds[0];return o?t(f,{to:a({playlistId:e,trackId:o}),replace:!0}):null},F=i=>(i?.levels?.flatMap(e=>e.checks??[])??[]).filter(e=>e.result!==T.Exempt&&e.result!==T.NotApplicable)[0],E=()=>{const{entity:i}=d(),{playlistId:e,trackId:a}=h(k),{data:r}=C(i,a),o=p(x),c=F(r)?.id??r?.levels[0]?.checks[0]?.id;return c?t(f,{to:o({playlistId:e,trackId:a,checkId:c}),replace:!0}):null},j=()=>{const{entity:i}=d(),{trackId:e}=h(y),a=p(g),{data:r}=C(i,e),o=F(r)?.id??r?.levels?.find(c=>c.checks.length>0)?.checks[0].id;return o?t(f,{to:a({trackId:e,checkId:o}),replace:!0}):null},D=()=>t(L,{children:s(N,{children:[t(l,{path:x.path,element:t(n,{})}),t(l,{path:k.path,element:s(m,{children:[t(n,{}),t(E,{})]})}),t(l,{path:R.path,element:s(m,{children:[t(n,{}),t(v,{})]})}),t(l,{path:y.path,element:s(m,{children:[t(n,{}),t(j,{})]})}),t(l,{path:g.path,element:t(n,{})}),t(l,{path:"/",element:s(m,{children:[t(n,{}),t(b,{})]})})]})});export{j as RedirectToFirstCheck,v as RedirectToFirstPlaylistTrack,E as RedirectToFirstPlaylistTrackCheck,D as Router};
2
2
  //# sourceMappingURL=Router.esm.js.map