@spotify/backstage-plugin-soundcheck 0.12.10 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/alpha/package.json +1 -1
  3. package/dist/components/CampaignDetailsPage/CampaignChecks.esm.js +2 -0
  4. package/dist/components/CampaignDetailsPage/CampaignDetailsPage.esm.js +2 -0
  5. package/dist/components/CampaignDetailsPage/CampaignProgress.esm.js +2 -0
  6. package/dist/components/CampaignDetailsPage/CampaignResultsTable.esm.js +2 -0
  7. package/dist/components/CampaignForm/CampaignForm.esm.js +2 -0
  8. package/dist/components/CampaignForm/CampaignFormDescription.esm.js +2 -0
  9. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js +2 -0
  10. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +2 -0
  11. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignScheduleField.esm.js +2 -0
  12. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignSupportChannelField.esm.js +2 -0
  13. package/dist/components/CampaignForm/Steps/CampaignMilestonesStep.esm.js +2 -0
  14. package/dist/components/CampaignForm/Steps/CampaignTrackStep.esm.js +2 -0
  15. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +2 -0
  16. package/dist/components/CampaignForm/hooks/utils.esm.js +2 -0
  17. package/dist/components/CampaignForm/types/CampaignFormTypes.esm.js +2 -0
  18. package/dist/components/CampaignForm/utils/validation.esm.js +2 -0
  19. package/dist/components/CampaignsPage/AddCampaignView.esm.js +2 -0
  20. package/dist/components/CampaignsPage/CampaignEmptyState.esm.js +2 -0
  21. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +2 -0
  22. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  23. package/dist/components/CampaignsPage/EditCampaignView.esm.js +2 -0
  24. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  25. package/dist/components/CheckForm/CheckForm.esm.js +2 -0
  26. package/dist/components/CheckForm/CheckFormDescription.esm.js +2 -0
  27. package/dist/components/CheckForm/FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js +2 -0
  28. package/dist/components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js +2 -0
  29. package/dist/components/CheckForm/FormFields/PassFailMessageInput/PassFailMessageInput.esm.js +2 -0
  30. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +2 -0
  31. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +2 -0
  32. package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +2 -0
  33. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +2 -0
  34. package/dist/components/CheckForm/FormFields/RuleInput/useRuleInputHandlers.esm.js +2 -0
  35. package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +2 -0
  36. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +2 -0
  37. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +2 -0
  38. package/dist/components/CheckForm/types/CheckFormTypes.esm.js +2 -0
  39. package/dist/components/CheckForm/types/Schedule.esm.js +2 -0
  40. package/dist/components/CheckForm/useCheckForm.esm.js +2 -0
  41. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -0
  42. package/dist/components/CheckForm/utils/validation.esm.js +2 -0
  43. package/dist/components/CheckPage/CheckDetailsView.esm.js +1 -1
  44. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  45. package/dist/components/CheckPage/FilterBar/FilterBar.esm.js +1 -1
  46. package/dist/components/ChecksPage/AddCheckView.esm.js +2 -0
  47. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
  48. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  49. package/dist/components/DroppableInput/DroppableInput.esm.js +1 -1
  50. package/dist/components/OverviewPage/CampaignBanner/CampaignBanner.esm.js +2 -0
  51. package/dist/components/OverviewPage/{CampaignRow/useCampaignRowStyles.esm.js → CampaignBanner/useCampaignBannerStyles.esm.js} +2 -2
  52. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  53. package/dist/components/OverviewPage/OverviewTabs.esm.js +1 -1
  54. package/dist/components/OverviewTable/Cell/CheckCell.esm.js +2 -0
  55. package/dist/components/OverviewTable/Cell/CheckNameCell.esm.js +2 -0
  56. package/dist/components/OverviewTable/Cell/EntityRefCell.esm.js +2 -0
  57. package/dist/components/OverviewTable/Cell/HighestLevelBadge.esm.js +2 -0
  58. package/dist/components/OverviewTable/Cell/TrackCheckIndicator.esm.js +2 -0
  59. package/dist/components/OverviewTable/Cell/TrackLevelHeaderCell.esm.js +2 -0
  60. package/dist/components/OverviewTable/Cell/TrackTitleCell.esm.js +2 -0
  61. package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +2 -0
  62. package/dist/components/OverviewTable/OverviewTable.esm.js +2 -0
  63. package/dist/components/OverviewTable/OverviewTableContent.esm.js +2 -0
  64. package/dist/components/OverviewTable/OverviewTableSkeleton.esm.js +2 -0
  65. package/dist/components/OverviewTable/ResultsTable.esm.js +2 -0
  66. package/dist/components/OverviewTable/ResultsTableHeader.esm.js +2 -0
  67. package/dist/components/OverviewTable/ResultsTableRow.esm.js +2 -0
  68. package/dist/components/OverviewTable/resultsTableUtils.esm.js +2 -0
  69. package/dist/components/OverviewTable/useWindowDimensions.esm.js +2 -0
  70. package/dist/components/Router.esm.js +1 -1
  71. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  72. package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
  73. package/dist/components/TechHealth/Filters/FilterProvider.esm.js +1 -1
  74. package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +1 -1
  75. package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +1 -1
  76. package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
  77. package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
  78. package/dist/components/TrackPage/utils.esm.js +1 -1
  79. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
  80. package/dist/hooks/catalog/useGetEntityFacets.esm.js +1 -1
  81. package/dist/hooks/facets/useFacetFilters.esm.js +1 -1
  82. package/dist/utils/export.esm.js +3 -3
  83. package/package.json +15 -15
  84. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignChecks.esm.js +0 -2
  85. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignDetailsPage.esm.js +0 -2
  86. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignProgress.esm.js +0 -2
  87. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignResultsTable.esm.js +0 -2
  88. package/dist/components/CampaignsTab/CampaignListPage/CampaignListPage.esm.js +0 -2
  89. package/dist/components/CampaignsTab/MutateCampaignsViews/AddCampaignView.esm.js +0 -2
  90. package/dist/components/CampaignsTab/MutateCampaignsViews/CampaignForm.esm.js +0 -2
  91. package/dist/components/CampaignsTab/MutateCampaignsViews/CampaignFormDescription.esm.js +0 -2
  92. package/dist/components/CampaignsTab/MutateCampaignsViews/EditCampaignView.esm.js +0 -2
  93. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js +0 -2
  94. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +0 -2
  95. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignScheduleField/CampaignScheduleField.esm.js +0 -2
  96. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignSupportChannelField.esm.js +0 -2
  97. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignMilestonesStep.esm.js +0 -2
  98. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignTrackStep.esm.js +0 -2
  99. package/dist/components/CampaignsTab/MutateCampaignsViews/hooks/useCampaignForm.esm.js +0 -2
  100. package/dist/components/CampaignsTab/MutateCampaignsViews/hooks/utils.esm.js +0 -2
  101. package/dist/components/CampaignsTab/MutateCampaignsViews/types/CampaignFormTypes.esm.js +0 -2
  102. package/dist/components/CampaignsTab/MutateCampaignsViews/utils/validation.esm.js +0 -2
  103. package/dist/components/ChecksPage/MutateCheckViews/AddCheckView.esm.js +0 -2
  104. package/dist/components/ChecksPage/MutateCheckViews/CheckForm/CheckForm.esm.js +0 -2
  105. package/dist/components/ChecksPage/MutateCheckViews/CheckForm/CheckFormDescription.esm.js +0 -2
  106. package/dist/components/ChecksPage/MutateCheckViews/CheckForm/Steps/CheckDetailsStep.esm.js +0 -2
  107. package/dist/components/ChecksPage/MutateCheckViews/CheckForm/Steps/CheckRulesStep.esm.js +0 -2
  108. package/dist/components/ChecksPage/MutateCheckViews/FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js +0 -2
  109. package/dist/components/ChecksPage/MutateCheckViews/FormFields/CheckScheduleSection/ScheduleSection.esm.js +0 -2
  110. package/dist/components/ChecksPage/MutateCheckViews/FormFields/PassFailMessageInput/PassFailMessageInput.esm.js +0 -2
  111. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +0 -2
  112. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +0 -2
  113. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +0 -2
  114. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/RuleInputBox.esm.js +0 -2
  115. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/useRuleInputHandlers.esm.js +0 -2
  116. package/dist/components/ChecksPage/MutateCheckViews/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +0 -2
  117. package/dist/components/ChecksPage/MutateCheckViews/hooks/useCheckForm.esm.js +0 -2
  118. package/dist/components/ChecksPage/MutateCheckViews/types/CheckFormTypes.esm.js +0 -2
  119. package/dist/components/ChecksPage/MutateCheckViews/types/Schedule.esm.js +0 -2
  120. package/dist/components/ChecksPage/MutateCheckViews/utils/checkFormUtils.esm.js +0 -2
  121. package/dist/components/ChecksPage/MutateCheckViews/utils/validation.esm.js +0 -2
  122. package/dist/components/EmptyState/CampaignEmptyState.esm.js +0 -2
  123. package/dist/components/OverviewPage/CampaignRow/CampaignRow.esm.js +0 -2
  124. package/dist/components/OverviewPage/TableContent/TableContent.esm.js +0 -2
  125. package/dist/components/OverviewPage/TableContent/VirtualTableContent.esm.js +0 -2
  126. package/dist/components/ResultsTable/CheckCell/CheckCell.esm.js +0 -2
  127. package/dist/components/ResultsTable/HighestLevelBadge.esm.js +0 -2
  128. package/dist/components/ResultsTable/ProgramCheckIndicator.esm.js +0 -2
  129. package/dist/components/ResultsTable/ProgramCheckRow.esm.js +0 -2
  130. package/dist/components/ResultsTable/ProgramLevelRow.esm.js +0 -2
  131. package/dist/components/ResultsTable/ProgramTitleRow.esm.js +0 -2
  132. package/dist/components/ResultsTable/ResultsTableFooter.esm.js +0 -2
  133. package/dist/components/ResultsTable/skeletons/ResultsTableSkeleton.esm.js +0 -2
  134. package/dist/components/ResultsTable/virtualized/Cell.esm.js +0 -2
  135. package/dist/components/ResultsTable/virtualized/Row.esm.js +0 -2
  136. package/dist/components/ResultsTable/virtualized/VirtualizedResultsTable.esm.js +0 -2
  137. package/dist/components/ResultsTable/virtualized/virtualizedTableUtils.esm.js +0 -2
  138. /package/dist/components/{CampaignsTab/CampaignDetailsPage → CampaignDetailsPage}/CampaignDetailRow.esm.js +0 -0
  139. /package/dist/components/{CampaignsTab/CampaignDetailsPage → CampaignDetailsPage}/CampaignDetails.esm.js +0 -0
  140. /package/dist/components/{CampaignsTab/CampaignDetailsPage → CampaignDetailsPage}/CampaignMilestones.esm.js +0 -0
  141. /package/dist/components/{CampaignsTab/MutateCampaignsViews → CampaignForm}/Steps/CampaignDetailsStep/CampaignDescriptionField.esm.js +0 -0
  142. /package/dist/components/{CampaignsTab/MutateCampaignsViews → CampaignForm}/Steps/CampaignDetailsStep/CampaignNameField.esm.js +0 -0
  143. /package/dist/components/{CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignScheduleField → CampaignForm/Steps/CampaignDetailsStep}/EndDateChips.esm.js +0 -0
  144. /package/dist/components/{CampaignsTab/MutateCampaignsViews → CampaignForm}/utils/campaignFormUtils.esm.js +0 -0
  145. /package/dist/components/{CampaignsTab → CampaignsPage}/CampaignListPage/CampaignMetadata.esm.js +0 -0
  146. /package/dist/components/{CampaignsTab → CampaignsPage}/CampaignListPage/CampaignSummaryCard.esm.js +0 -0
  147. /package/dist/components/{CampaignsTab → CampaignsPage/CampaignListPage}/CampaignTypes.esm.js +0 -0
  148. /package/dist/components/{CampaignsTab/skeletons → CampaignsPage/CampaignListPage}/CampaignsOverviewSkeleton.esm.js +0 -0
  149. /package/dist/components/{CampaignsTab → CampaignsPage}/CampaignListPage/useArchiveConfirmationModal.esm.js +0 -0
  150. /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/CheckNameInput/CheckNameInput.esm.js +0 -0
  151. /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/AddMenuButton.esm.js +0 -0
  152. /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/Conditions/ConditionList.esm.js +0 -0
  153. /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js +0 -0
  154. /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/Conditions/styles.esm.js +0 -0
  155. /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/FormFields/RuleInput/Expressions/ExpressionBox.esm.js +0 -0
  156. /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/types/ExpressionType.esm.js +0 -0
  157. /package/dist/components/{ChecksPage/MutateCheckViews → CheckForm}/types/Path.esm.js +0 -0
  158. /package/dist/components/OverviewPage/{CampaignRow → CampaignBanner}/utils.esm.js +0 -0
  159. /package/dist/components/OverviewPage/{skeletons/OverviewTabsSkeleton.esm.js → OverviewTabsSkeleton.esm.js} +0 -0
  160. /package/dist/components/{ResultsTable/CheckCell → OverviewTable/Cell}/CheckCellTooltip.esm.js +0 -0
@@ -1,2 +1,2 @@
1
- import{makeStyles as f,Tabs as b,Tab as g}from"@material-ui/core";import s,{useCallback as k,useEffect as $}from"react";import{RefetchingIndicator as v}from"../RefetchingIndicator/RefetchingIndicator.esm.js";const x=f(o=>({root:{borderTop:`1px solid ${o.palette.divider}`,borderBottom:`1px solid ${o.palette.divider}`},tab:{textTransform:"uppercase",paddingTop:o.spacing(2),paddingBottom:o.spacing(2)}})),T=({unfilteredFacets:o,onChange:a,kind:p,type:r})=>{const m=x(),t={types:o?.types.filter(({count:e})=>e>0)??[]},u=k((e,n)=>{a(t?.types[n].kind??"",t?.types[n].type)},[t?.types,a]);$(()=>{const e=t?.types&&t.types.length>=0,n=!p&&e,i=p&&e&&!t?.types.find(({kind:l,type:y})=>p===l&&(!r&&!y||r===y));(n||i)&&a(t?.types[0]?.kind??"",t?.types[0]?.type,!0)},[p,r,t?.types,a]);const d=t?.types.map(({kind:e,type:n,count:i})=>{const l=`${e}|${n??""}`;return{key:l,label:`${n??e} (${i>50?"50+":i})`,id:l,className:m.tab}})??[];if(!d.length)return null;const c=t?.types.findIndex(e=>e.kind===p&&(!e.type&&!r||e.type===r))??-1;return s.createElement(s.Fragment,null,s.createElement(v,null),s.createElement(b,{onChange:u,indicatorColor:"primary",variant:"scrollable",value:c>-1?c:!1},d.map(e=>s.createElement(g,{...e}))))};export{T as OverviewTabs};
1
+ import{makeStyles as b,Tabs as k,Tab as $}from"@material-ui/core";import r,{useCallback as v,useEffect as T,useMemo as h}from"react";import{RefetchingIndicator as x}from"../RefetchingIndicator/RefetchingIndicator.esm.js";const E=b(p=>({root:{borderTop:`1px solid ${p.palette.divider}`,borderBottom:`1px solid ${p.palette.divider}`},tab:{textTransform:"uppercase",paddingTop:p.spacing(2),paddingBottom:p.spacing(2)}})),C=({unfilteredFacets:p,onChange:o,kind:s,type:a})=>{const u=E(),n={types:p?.types.filter(({count:e})=>e>0)??[]},f=v((e,t)=>{o(n?.types[t].kind??"",n?.types[t].type)},[n?.types,o]);T(()=>{const e=n?.types&&n.types.length>=0,t=!s&&e,i=s&&e&&!n?.types.find(({kind:y,type:m})=>s===y&&(!a&&!m||a===m));(t||i)&&o(n?.types[0]?.kind??"",n?.types[0]?.type,!0)},[s,a,n?.types,o]);const l=h(()=>n?.types.reduce((e,t)=>(t.type&&(e[t.type]=e[t.type]?e[t.type]+1:1),e),{}),[n?.types]),g=e=>e?!!l[e]&&l[e]>1:!1,d=n?.types.map(({kind:e,type:t,count:i})=>{const y=`${e}|${t??""}`;return{key:y,label:`${g(t)?`${e} - ${t}`:t??e} (${i>50?"50+":i})`,id:y,className:u.tab}})??[];if(!d.length)return null;const c=n?.types.findIndex(e=>e.kind===s&&(!e.type&&!a||e.type===a))??-1;return r.createElement(r.Fragment,null,r.createElement(x,null),r.createElement(k,{onChange:f,indicatorColor:"primary",variant:"scrollable",value:c>-1?c:!1},d.map(e=>r.createElement($,{...e}))))};export{C as OverviewTabs};
2
2
  //# sourceMappingURL=OverviewTabs.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{parseEntityRef as f}from"@backstage/catalog-model";import{Link as h}from"@backstage/core-components";import{makeStyles as k}from"@material-ui/core";import t,{memo as u}from"react";import{ResultState as p}from"../../../graphql/generated/index.esm.js";import{CheckIcon as v}from"../../CheckIcon/CheckIcon.esm.js";import{CheckCellTooltip as $}from"./CheckCellTooltip.esm.js";const E=k(r=>({root:{padding:0},iconWrapper:{padding:r.spacing(1.5),display:"flex",alignItems:"center",justifyContent:"center"},link:{"&:hover $iconWrapper, &:active $iconWrapper, &:focus $iconWrapper":{backgroundColor:r.palette.action.hover}},icon:{width:"17px",height:"17px"},virtualized:{borderBottom:`1px solid ${r.palette.divider}`,borderRight:`1px solid ${r.palette.divider}`}})),N=u(({trackId:r,check:a,entityRef:o,result:i,entityRoute:d,isVirtualized:c})=>{const e=E();if(typeof o!="string"){const m=t.createElement("div",{className:e.iconWrapper},t.createElement("div",{className:e.icon}));return c?t.createElement("div",{className:`${e.root} ${e.virtualized}`,"aria-hidden":!0},m):t.createElement("td",{className:e.root,"aria-hidden":!0},m)}const n=t.createElement(v,{className:e.icon,result:i??p.NotReported}),l=t.createElement("div",{className:e.iconWrapper},n),s=i&&i===p.NotApplicable?l:t.createElement(h,{className:e.link,to:`${d(f(o))}/soundcheck/tracks/${r}/checks/${a.id}`},l);return c?t.createElement("div",{className:`${e.root} ${e.virtualized}`},t.createElement($,{check:a,icon:n,entityRef:o},s)):t.createElement("td",{className:`${e.root}`},s)});export{N as CheckCell};
2
+ //# sourceMappingURL=CheckCell.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as o,Typography as i}from"@material-ui/core";import a from"react";import{RowHeights as c}from"../resultsTableUtils.esm.js";import{TrackCheckIndicator as l}from"./TrackCheckIndicator.esm.js";const n=o(e=>({checkNameCell:{padding:0,backgroundColor:e.palette.background.paper},checkNameContent:{padding:`0 ${e.spacing(2)}px`,display:"flex",justifyContent:"space-between",alignItems:"center"},checkNameTypography:{overflow:"hidden",textOverflow:"ellipsis",fontWeight:e.typography.body1.fontWeight},checkIndicator:{flexBasis:e.spacing(8)},checkNameCellVirtualized:{height:`${c.check}px`,lineHeight:`${c.check}px`,borderBottom:`1px solid ${e.palette.divider}`,borderRight:`1px solid ${e.palette.divider}`}})),p=({name:e,progress:r})=>{const t=n();return a.createElement("div",{className:t.checkNameCell,"aria-label":`${e} check`},a.createElement("div",{className:`${t.checkNameContent} ${t.checkNameCellVirtualized}`},a.createElement(i,{variant:"subtitle2",component:"p",className:t.checkNameTypography},e),a.createElement(l,{className:t.checkIndicator,progress:r})))};export{p as CheckNameCell};
2
+ //# sourceMappingURL=CheckNameCell.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{parseEntityRef as m}from"@backstage/catalog-model";import{Link as d}from"@backstage/core-components";import{useRouteRef as f}from"@backstage/core-plugin-api";import{entityRouteRef as s,humanizeEntityRef as r}from"@backstage/plugin-catalog-react";import{makeStyles as c,Tooltip as p}from"@material-ui/core";import t from"react";import{useEntityByRef as k}from"../../../hooks/catalog/useEntityByRef.esm.js";import{CellWidths as u}from"../resultsTableUtils.esm.js";const y=c(()=>({cellWrapper:{display:"flex",alignItems:"flex-end",height:"100%"},cellText:{textOrientation:"mixed",transform:`translateX(${u.checkResult*.4}px) rotate(-55deg)`,transformOrigin:"center left",wordBreak:"keep-all",fontWeight:"bold"},cellLink:{overflow:"hidden",textOverflow:"ellipsis",width:"125px",display:"inline-block"}})),x=({entityRef:i})=>{const{data:l}=k(i),n=f(s),a=y(),e=i?m(i):void 0,o=e?t.createElement(p,{title:l?.metadata.title?l.metadata.title:r(e,{defaultKind:e.kind}),arrow:!0,placement:"left-end"},t.createElement(d,{className:a.cellLink,"aria-label":`entity link to ${e.name}`,to:n(e)},l?.metadata.title?l.metadata.title:r(e,{defaultKind:e.kind}))):t.createElement(t.Fragment,null);return t.createElement("div",{className:a.cellWrapper},t.createElement("div",{className:a.cellText},o))};export{x as EntityRefCell};
2
+ //# sourceMappingURL=EntityRefCell.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as m}from"@material-ui/core";import t from"react";import{LevelBadge as i}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as o}from"../../Badges/NoLevelBadge.esm.js";import{CampaignBadge as n}from"../../Badges/CampaignBadge.esm.js";import{RowHeights as g,NO_LEVEL_BADGE_NAME as d}from"../resultsTableUtils.esm.js";const c=m(e=>({badgeCell:{borderRight:`1px solid ${e.palette.divider}`,height:`${g.trackTitle}px`,display:"flex",justifyContent:"center",alignItems:"center"}})),s=({highestLevel:e,trackType:r})=>{const a=c();if(!e?.badge)return t.createElement("div",{className:a.badgeCell},"\xA0");let l=e.name!==d?t.createElement(i,{badge:e.badge}):t.createElement(o,null);return r==="campaign"&&(l=t.createElement(n,null)),t.createElement("div",{className:a.badgeCell},l)};export{s as HighestLevelBadgeCell};
2
+ //# sourceMappingURL=HighestLevelBadge.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as p,Tooltip as l,LinearProgress as m}from"@material-ui/core";import s,{useMemo as u}from"react";import{ResultState as a}from"../../../graphql/generated/index.esm.js";const g=p(e=>({root:{height:"8px",minWidth:"64px",marginLeft:e.spacing(2),borderRadius:"100vh",backgroundColor:e.palette.action.hover},bar:{backgroundColor:e.palette.success.main,transition:"none"}})),d=e=>{const t=g(e),r=u(()=>Object.entries(e.progress).reduce((i,[,c])=>i+c,0),[e.progress]);if(r===0)return null;const o=e.progress[a.Passed]??0,n=Math.round(o/r*100);return s.createElement(l,{arrow:!0,title:`Check passing at ${n}%, ${o} of ${r} ${r===1?"entity":"entities"} passing.`,enterDelay:0,placement:"top"},s.createElement(m,{variant:"determinate",value:(e.progress[a.Passed]??0)/r*100,classes:{root:t.root,bar:t.bar}}))};export{d as TrackCheckIndicator};
2
+ //# sourceMappingURL=TrackCheckIndicator.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as o,Typography as a}from"@material-ui/core";import r from"react";import{RowHeights as i}from"../resultsTableUtils.esm.js";const t=o(e=>{const l=e.palette.action.hover;return{root:{color:e.palette.text.primary,backgroundColor:l},levelTypography:{overflow:"hidden",textOverflow:"ellipsis"},levelHeaderCell:{padding:`${e.spacing(.5)}px ${e.spacing(2)}px`,borderRight:`1px solid ${e.palette.divider}`,height:`${i.levelTitle}px`}}}),p=({name:e})=>{const l=t();return r.createElement("div",{className:`${l.levelHeaderCell} ${l.root}`,"aria-label":`${e}`},r.createElement(a,{variant:"subtitle2",component:"p",className:l.levelTypography},e))},n=()=>{const e=t();return r.createElement("div",{className:`${e.levelHeaderCell} ${e.root}`},"\xA0")};export{p as TrackLevelHeaderCell,n as TrackLevelHeaderFill};
2
+ //# sourceMappingURL=TrackLevelHeaderCell.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as r,Typography as o}from"@material-ui/core";import a,{memo as l}from"react";const n=r(e=>({trackNameCell:{padding:0,position:"sticky",backgroundColor:e.palette.background.paper,borderRight:`1px solid ${e.palette.divider}`},trackNameContent:{padding:e.spacing(2)},trackNameTypography:{overflow:"hidden",textOverflow:"ellipsis"}})),c=l(({name:e})=>{const t=n();return a.createElement("div",{className:t.trackNameCell},a.createElement("div",{className:t.trackNameContent},a.createElement(o,{className:t.trackNameTypography,variant:"h5",component:"p"},e)))});export{c as TrackTitleCell};
2
+ //# sourceMappingURL=TrackTitleCell.esm.js.map
@@ -0,0 +1,2 @@
1
+ import r from"react";import{CheckCell as a}from"./CheckCell.esm.js";import{CheckNameCell as m}from"./CheckNameCell.esm.js";import{EntityRefCell as o}from"./EntityRefCell.esm.js";import{HighestLevelBadgeCell as i}from"./HighestLevelBadge.esm.js";import{TrackLevelHeaderCell as d,TrackLevelHeaderFill as s}from"./TrackLevelHeaderCell.esm.js";import{TrackTitleCell as y}from"./TrackTitleCell.esm.js";const k=e=>({type:"TrackHeader",render:()=>r.createElement(y,{name:e})}),C=e=>({type:"LevelHeader",render:()=>e?r.createElement(d,{name:e}):r.createElement(s,null)}),p=(e,t)=>r.createElement(m,{name:e,progress:t}),u=(e,t)=>({type:"CheckTitle",render:()=>p(e,t)}),f=({trackId:e,check:t,entityRef:l,result:n,entityRoute:c})=>r.createElement(a,{check:t,entityRef:l,entityRoute:c,trackId:e,result:n,isVirtualized:!0}),h=(e,t,l,n,c)=>({type:"CheckResult",render:()=>r.createElement(f,{trackId:e,check:t,entityRef:l,result:n,entityRoute:c})}),E=e=>r.createElement(o,{entityRef:e}),R=e=>({type:"EntityHeader",render:()=>E(e)}),v=(e,t)=>({type:"LevelBadge",render:()=>r.createElement(i,{highestLevel:e,trackType:t})}),H=e=>t=>{const l=e[t.rowIndex].cells[t.columnIndex];return l?r.createElement("div",{style:t.style},l.render()):r.createElement("div",{style:t.style})};export{H as cellRenderer,h as checkResultCell,u as checkTitleCell,R as entityHeaderCell,v as levelBadgeCell,C as levelHeaderCell,k as trackHeaderCell};
2
+ //# sourceMappingURL=cellRenderer.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as m}from"@material-ui/core";import e from"react";import{AlertPanel as f}from"../AlertPanel/AlertPanel.esm.js";import{NoCertifications as E,NoEntities as d}from"../EmptyState/EmptyState.esm.js";import{OverviewTableContent as y}from"./OverviewTableContent.esm.js";const h=m(()=>({scrollContainer:{overflow:"auto",paddingBottom:0,width:"100%"}})),u=({facets:t,ownerEntityRef:r,hasError:o,kind:i,type:s,setError:a,isFixedGroup:l})=>{const p=h();if(o)return e.createElement(f,{severity:"error",title:o.message});const n="Use the groups drop-down list at the top-right of the page to select another group.";return t&&(t.types?.length??0)>0?t.types?.find(c=>c.count>0)?e.createElement("div",{className:p.scrollContainer},e.createElement(y,{facets:t,kind:i,type:s,setError:a,ownerEntityRef:r,hasError:o})):e.createElement(E,{ownerEntityRef:r,selectGroupHint:n}):e.createElement(d,{ownerEntityRef:r,selectGroupHint:l?void 0:n})};export{u as OverviewTable};
2
+ //# sourceMappingURL=OverviewTable.esm.js.map
@@ -0,0 +1,2 @@
1
+ import i,{useMemo as m}from"react";import{ResultsTable as y}from"./ResultsTable.esm.js";const E=({facets:e,ownerEntityRef:t,kind:l,type:p,setError:r})=>{const a=m(()=>{const n=new Map;return e.types.forEach(({kind:o,type:s})=>{const c=`${o}|${s??""}`;n.set(c,i.createElement(y,{key:c,ownerEntityRef:t,kind:o,type:s,setError:r}))}),n},[e,t,r]);return i.createElement("div",null,a.get(`${l}|${p??""}`))};export{E as OverviewTableContent};
2
+ //# sourceMappingURL=OverviewTableContent.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as k}from"@material-ui/core";import{Skeleton as l}from"@material-ui/lab";import e from"react";const E=k(t=>({table:{backgroundColor:t.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap","& th, & td":{border:`1px solid ${t.palette.divider}`,borderCollapse:"collapse"},paddingBottom:t.spacing(2)},trackTitle:{padding:t.spacing(2)},checkResult:{padding:t.spacing(1.5)},title:{padding:`${t.spacing(1)}px ${t.spacing(2)}px`},header:{backgroundColor:t.palette.action.hover},entityHeader:{padding:t.spacing(1.5)}})),g=({entityCount:t=25,levelCount:d=3,checkCount:m=5})=>{const a=E(),c=new Array(t).fill(void 0),o=new Array(m).fill(void 0),p=new Array(d).fill(void 0);return e.createElement("table",{"aria-label":"table loading",className:a.table},e.createElement("tbody",null,e.createElement("tr",null,e.createElement("td",{className:a.trackTitle}),c.map((i,r)=>e.createElement("td",{className:a.entityHeader,key:r},e.createElement(l,{width:20,height:60,variant:"rect"})))),e.createElement("tr",null,e.createElement("td",{className:a.trackTitle},e.createElement(l,{width:180,height:40})),c.map((i,r)=>e.createElement("td",{className:a.checkResult,key:r},e.createElement(l,{width:20,height:20,variant:"circle"})))),p.map((i,r)=>e.createElement(e.Fragment,{key:r},e.createElement("tr",{className:a.header},e.createElement("td",{className:a.title},e.createElement(l,{width:180})),c.map((s,n)=>e.createElement("td",{key:n}))),o.map((s,n)=>e.createElement("tr",{key:n},e.createElement("td",{className:a.title},e.createElement(l,{width:240})),c.map((y,h)=>e.createElement("td",{key:h,className:a.checkResult},e.createElement(l,{width:18,height:18,variant:"rect"})))))))))};export{g as OverviewTableSkeleton};
2
+ //# sourceMappingURL=OverviewTableSkeleton.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useRouteRef as z}from"@backstage/core-plugin-api";import{entityRouteRef as H}from"@backstage/plugin-catalog-react";import{makeStyles as x,Grid as O}from"@material-ui/core";import e,{useEffect as A,useState as F,useRef as G,useLayoutEffect as L}from"react";import{VariableSizeGrid as N}from"react-window";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useProgramOverviewForOwner as $}from"../../hooks/certifications/useProgramOverviewForOwner.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"../Pagination/Pagination.esm.js";import{useCursorPagination as J,CursorPagination as V}from"../Pagination/CursorPagination.esm.js";import{cellRenderer as j}from"./Cell/cellRenderer.esm.js";import{OverviewTableSkeleton as q}from"./OverviewTableSkeleton.esm.js";import{ResultsTableHeader as B}from"./ResultsTableHeader.esm.js";import{generateRows as D,generateHeaderRow as I}from"./ResultsTableRow.esm.js";import{calculateTableWidth as K,CellWidths as h,RowHeights as M}from"./resultsTableUtils.esm.js";import Q from"./useWindowDimensions.esm.js";const C=25,U=x(r=>({table:{backgroundColor:r.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"},tableContainer:{backgroundColor:r.palette.background.paper}})),X=({setError:r,kind:l,type:m,ownerEntityRef:t})=>{const{cursor:b,pageSize:s,...w}=J({defaultPageSize:C,label:"entitiesPerPage"}),{data:o,isLoading:R,isError:c}=$(t,{kind:l,type:m},s,b),g=U(),E=z(H);A(()=>{r?.(c?new Error("Error loading track overview"):void 0)},[c,r]);const[k,v]=F(0),{height:y}=Q(),a=G(null);if(L(()=>{o&&t&&a?.current&&v(a.current.clientWidth-16)},[a,o,t]),R)return e.createElement(q,null);if(!o||!t)return null;const{programs:P,entityRefs:i,totalCount:S,endCursor:T,prevCursor:W}=o,n=i.length>=25?i:[...i,...Array.from({length:25-i.length},()=>{})],u=D(P,n,E),f=I(n),d=K(n.length)+60;return e.createElement("div",{ref:a},e.createElement(O,{"aria-label":`Check results for ${m??l}`,key:`${l}|${m??""}`,item:!0,xs:12,className:g.tableContainer},k>0&&e.createElement(e.Fragment,null,e.createElement(B,{headerRow:f,gridWidth:d}),e.createElement(N,{className:g.table,columnCount:n.length+1,columnWidth:p=>p===0?h.trackTitle:h.checkResult,rowCount:u.length,rowHeight:p=>u[p].height,height:y*.7-M.paginationControl-f.height,width:d},j(u)))),e.createElement(V,{...w,totalCount:S,defaultPageSize:C,endCursor:T,prevCursor:W,pageSize:s,labelRowsPerPage:"Entities per page:"}))};export{X as ResultsTable};
2
+ //# sourceMappingURL=ResultsTable.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as o}from"@material-ui/core";import a from"react";import{CellWidths as l}from"./resultsTableUtils.esm.js";const s=o(e=>({tableHeader:{backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",border:`1px solid ${e.palette.divider}`,width:({gridWidth:t})=>t??300},headerRow:{display:"inline-block"}})),c=({headerRow:e,gridWidth:t})=>{const r=s({gridWidth:t});return a.createElement("div",{className:r.tableHeader},e.cells.map((d,i)=>a.createElement("div",{className:r.headerRow,style:{height:e.height,width:i===0?l.trackTitle:l.checkResult}},d.render())))};export{c as ResultsTableHeader};
2
+ //# sourceMappingURL=ResultsTableHeader.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{ResultState as v}from"../../graphql/generated/index.esm.js";import{entityHeaderCell as g,trackHeaderCell as k,levelBadgeCell as C,levelHeaderCell as p,checkTitleCell as H,checkResultCell as E}from"./Cell/cellRenderer.esm.js";import{findLongestRefTitle as T,calculateHeightForRefTitle as y,RowHeights as h,generateNoLevelBadge as L}from"./resultsTableUtils.esm.js";const w=o=>{const t=T(o??[]);return{height:Math.min(y(t.length??1)-10,125),cells:[g(""),...o.map(a=>g(a||""))]}},A=(o,t,a)=>{const r=[];return o.forEach(({program:c,levels:m,highestLevels:f})=>{r.push({height:h.trackTitle,cells:[k(c.name),...t.map(e=>{const l=e?f.find(i=>i.entityRef===e)||L(e):void 0;return C(l,c.type??void 0)})]}),m.forEach(e=>{r.push({height:h.levelTitle,cells:[p(e.name),...t.map(l=>p(""))]}),e.checks.forEach(({check:l,results:i,totalCount:d,totalPassing:n})=>{const u={PASSED:n,FAILED:d-n};r.push({height:h.check,cells:[H(l.name,u),...t.map(s=>E(c.id,l,s,i.find(R=>R.entityRef===s)?.result??v.NotApplicable,a))]})})})}),r};export{w as generateHeaderRow,A as generateRows};
2
+ //# sourceMappingURL=ResultsTableRow.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{parseEntityRef as r}from"@backstage/catalog-model";import{humanizeEntityRef as n}from"@backstage/plugin-catalog-react";import{BadgeVariant as c}from"../../graphql/generated/index.esm.js";const a=8,d=16,h={trackTitle:70,levelTitle:30,check:42,entityRefFooter:100,paginationControl:50},i={trackTitle:350+d*2,checkResult:42},f=e=>e.reduce((t,l)=>t+l.height,0),g=e=>e*i.checkResult+i.trackTitle,s=e=>e.filter(t=>t!==void 0).map(t=>{const l=r(t);return n(l,{defaultKind:l.kind})}).reduce((t,l)=>t.length>l.length?t:l,""),u=e=>a*e+a,o="NoLevel",m=e=>({name:o,badge:{options:{level:0,color:""},variant:c.Medal},entityRef:e,ordinal:0});export{i as CellWidths,o as NO_LEVEL_BADGE_NAME,h as RowHeights,u as calculateHeightForRefTitle,f as calculateTableHeight,g as calculateTableWidth,s as findLongestRefTitle,m as generateNoLevelBadge};
2
+ //# sourceMappingURL=resultsTableUtils.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useState as i,useEffect as o}from"react";const r=()=>{const{innerWidth:e,innerHeight:t}=window;return{width:e,height:t}};function s(){const[e,t]=i(r());return o(()=>{const n=()=>{t(r())};return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[]),e}export{s as default};
2
+ //# sourceMappingURL=useWindowDimensions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as m,useRouteRefParams as d}from"@backstage/core-plugin-api";import{useEntity as s}from"@backstage/plugin-catalog-react";import e from"react";import{Routes as $,Route as c,Navigate as u}from"react-router-dom";import{useAllCertifications as v}from"../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as h}from"../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@backstage/catalog-model";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import{usePlaylists as y}from"../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistTrackCheckRouteRef as I,certificationPlaylistTrackRouteRef as E,certificationPlaylistRouteRef as f,certificationTrackRouteRef as k,certificationRouteRef as g}from"../routes.esm.js";import{EntityContent as o}from"./EntityContent/EntityContent.esm.js";const x=()=>{const{entity:r}=s(),t=m(f),a=m(k),{isLoading:n,data:l}=y(r),{isLoading:i,data:C}=v(r);if(n||i)return null;const p=l?.[0]?.id,R=C?.[0]?.program.id;return!p&&!R?null:e.createElement(u,{to:p?t({playlistId:p}):a({trackId:R}),replace:!0})},T=()=>{const{entity:r}=s(),{playlistId:t}=d(f),a=m(E),{data:n}=y(r),l=n?.find(i=>i.id===t)?.trackIds[0];return l?e.createElement(u,{to:a({playlistId:t,trackId:l}),replace:!0}):null},F=()=>{const{entity:r}=s(),{playlistId:t,trackId:a}=d(E),{data:n}=h(r,a),l=m(I),i=n?.levels[0]?.checks[0]?.id;return i?e.createElement(u,{to:l({playlistId:t,trackId:a,checkId:i}),replace:!0}):null},P=()=>{const{entity:r}=s(),{trackId:t}=d(k),a=m(g),{data:n}=h(r,t),l=n?.levels[0]?.checks[0]?.id;return l?e.createElement(u,{to:a({trackId:t,checkId:l}),replace:!0}):null},L=()=>e.createElement($,null,e.createElement(c,{path:I.path,element:e.createElement(o,null)}),e.createElement(c,{path:E.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(F,null))}),e.createElement(c,{path:f.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(T,null))}),e.createElement(c,{path:k.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(P,null))}),e.createElement(c,{path:g.path,element:e.createElement(o,null)}),e.createElement(c,{path:"/",element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(x,null))}));export{P as RedirectToFirstCheck,T as RedirectToFirstPlaylistTrack,F as RedirectToFirstPlaylistTrackCheck,L as Router};
1
+ import{useRouteRef as m,useRouteRefParams as d}from"@backstage/core-plugin-api";import{useEntity as s}from"@backstage/plugin-catalog-react";import e from"react";import{Routes as $,Route as i,Navigate as u}from"react-router-dom";import{useAllCertifications as v}from"../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as R}from"../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@backstage/catalog-model";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import{usePlaylists as y}from"../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistTrackCheckRouteRef as I,certificationPlaylistTrackRouteRef as E,certificationPlaylistRouteRef as f,certificationTrackRouteRef as k,certificationRouteRef as g}from"../routes.esm.js";import{EntityContent as o}from"./EntityContent/EntityContent.esm.js";const x=()=>{const{entity:r}=s(),t=m(f),a=m(k),{isLoading:c,data:l}=y(r),{isLoading:n,data:P}=v(r);if(c||n)return null;const p=l?.[0]?.id,h=P?.[0]?.program.id;return!p&&!h?null:e.createElement(u,{to:p?t({playlistId:p}):a({trackId:h}),replace:!0})},T=()=>{const{entity:r}=s(),{playlistId:t}=d(f),a=m(E),{data:c}=y(r),l=c?.find(n=>n.id===t)?.trackIds[0];return l?e.createElement(u,{to:a({playlistId:t,trackId:l}),replace:!0}):null},F=()=>{const{entity:r}=s(),{playlistId:t,trackId:a}=d(E),{data:c}=R(r,a),l=m(I),n=c?.levels[0]?.checks[0]?.id;return n?e.createElement(u,{to:l({playlistId:t,trackId:a,checkId:n}),replace:!0}):null},C=()=>{const{entity:r}=s(),{trackId:t}=d(k),a=m(g),{data:c}=R(r,t),l=c?.levels?.find(n=>n.checks.length>0)?.checks[0].id;return l?e.createElement(u,{to:a({trackId:t,checkId:l}),replace:!0}):null},L=()=>e.createElement($,null,e.createElement(i,{path:I.path,element:e.createElement(o,null)}),e.createElement(i,{path:E.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(F,null))}),e.createElement(i,{path:f.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(T,null))}),e.createElement(i,{path:k.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(C,null))}),e.createElement(i,{path:g.path,element:e.createElement(o,null)}),e.createElement(i,{path:"/",element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(x,null))}));export{C as RedirectToFirstCheck,T as RedirectToFirstPlaylistTrack,F as RedirectToFirstPlaylistTrackCheck,L as Router};
2
2
  //# sourceMappingURL=Router.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Page as y,Header as I,TabbedLayout as l}from"@backstage/core-components";import{useRouteRef as w,useApi as s,configApiRef as T,featureFlagsApiRef as S}from"@backstage/core-plugin-api";import{usePermission as A}from"@backstage/plugin-permission-react";import{makeStyles as L,Box as o}from"@material-ui/core";import{SpotifyLicenseBanner as D}from"@spotify/backstage-plugin-core";import{soundcheckCollectorReadPermission as B}from"@spotify/backstage-plugin-soundcheck-common";import e,{useState as F}from"react";import{useLocation as N,Routes as G,Route as t}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import{UserProvider as H}from"../../contexts/UserProvider.esm.js";import O from"../../hooks/useConfirmationModal.esm.js";import{AlertProvider as $}from"../../hooks/useSoundcheckAlert.esm.js";import{rootRouteRef as M}from"../../routes.esm.js";import{CampaignsPage as Q}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignDetailsPage as U}from"../CampaignsTab/CampaignDetailsPage/CampaignDetailsPage.esm.js";import{EditCampaignView as V}from"../CampaignsTab/MutateCampaignsViews/EditCampaignView.esm.js";import{CheckPage as p}from"../CheckPage/CheckPage.esm.js";import{CheckInsightsPage as u}from"../CheckPage/CheckInsightsPage.esm.js";import{ChecksTab as j}from"../ChecksTab/ChecksTab.esm.js";import{CollectorPage as q}from"../CollectorPage/CollectorPage.esm.js";import{CollectorsPage as z}from"../CollectorsPage/CollectorsPage.esm.js";import{EditTrackPage as J}from"../EditTrackPage/EditTrackPage.esm.js";import{GroupSelector as K}from"../GroupSelector/GroupSelector.esm.js";import{OverviewPageContent as W}from"../OverviewPage/OverviewPageContent.esm.js";import{SoundcheckQueryClientProvider as X}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{TechHealth as Y}from"../TechHealth/TechHealth.esm.js";import{TrackPage as Z}from"../TrackPage/TrackPage.esm.js";import{TracksTab as _}from"../TracksTab/TracksTab.esm.js";import{Breadcrumbs as ee}from"./Breadcrumbs.esm.js";import{generateBreadcrumbs as te}from"./utils.esm.js";const le=L(n=>({tabContent:{margin:0,padding:0},root:{"& > *":{display:"flex",flexDirection:"column",flexGrow:1}},pageContent:{display:"flex",flexDirection:"row",flexGrow:1},pageLayout:{display:"flex",flexDirection:"column",flex:"1 1 0%","& > article":{display:"flex",flexDirection:"column",flex:"1 1 auto",padding:`${n.spacing(3)}px !important`}}})),re=({title:n="Soundcheck"})=>{const c=le(),d=w(M),m=s(T).getOptionalStringArray("soundcheck.flags")?.includes("enable-check-insights"),[h,f]=F(void 0),r=s(S),g=!r.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-tech-health")||r.isActive("soundcheck-enable-tech-health"),E=!r.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-collectors")||r.isActive("soundcheck-enable-collectors"),k=!r.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-campaigns")||r.isActive("soundcheck-enable-campaigns"),{loading:b,allowed:C}=A({permission:B}),R=E&&!b&&C,v=g,i=N().pathname.replace(/\/+$/,""),P=i===d(),x=te(i);return e.createElement($,null,e.createElement(H,null,e.createElement(X,null,e.createElement(O,null,e.createElement(o,{className:c.root},e.createElement(y,{themeId:"tool"},e.createElement(D,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),e.createElement(I,{title:n,subtitle:e.createElement(ee,{pages:x})},P&&e.createElement(K,{setError:f})),e.createElement(o,{className:c.pageContent},e.createElement(o,{className:c.pageLayout},e.createElement(G,null,e.createElement(t,{path:"/campaigns/:campaignId/edit",element:e.createElement(V,null)}),e.createElement(t,{path:"/campaigns/:campaignId",element:e.createElement(U,null)}),e.createElement(t,{path:"/tracks/:trackId/edit",element:e.createElement(J,null)}),e.createElement(t,{path:"/tracks/:trackId",element:e.createElement(Z,null)}),m&&e.createElement(t,{path:"/tracks/:trackId/checks/:checkId",element:e.createElement(u,null)}),m?e.createElement(t,{path:"/checks/:checkId",element:e.createElement(u,null)}):e.createElement(t,{path:"/checks/:checkId",element:e.createElement(p,null)}),e.createElement(t,{path:"/checks/:checkId/edit",element:e.createElement(p,null)}),e.createElement(t,{path:"/collectors/:collectorId",element:e.createElement(q,null)}),e.createElement(t,{path:"/*",element:e.createElement(l,null,e.createElement(l.Route,{title:"Overview",path:"/"},e.createElement("div",{className:c.tabContent},e.createElement(W,{groupSelectorError:h}))),v&&e.createElement(l.Route,{title:"Tech Health",path:"/tech-health"},e.createElement(Y,null)),e.createElement(l.Route,{title:"Checks",path:"/checks"},e.createElement(j,null)),e.createElement(l.Route,{title:"Tracks",path:"/tracks"},e.createElement(_,null)),k&&e.createElement(l.Route,{title:"Campaigns",path:"/campaigns"},e.createElement(Q,null)),R&&e.createElement(l.Route,{title:"Collectors",path:"/collectors"},e.createElement(z,null)))}))))))))))};export{re as RoutingPage};
1
+ import{Page as v,Header as P,TabbedLayout as r}from"@backstage/core-components";import{useRouteRef as x,useApi as w,featureFlagsApiRef as I}from"@backstage/core-plugin-api";import{usePermission as y}from"@backstage/plugin-permission-react";import{makeStyles as T,Box as m}from"@material-ui/core";import{SpotifyLicenseBanner as S}from"@spotify/backstage-plugin-core";import{soundcheckCollectorReadPermission as A}from"@spotify/backstage-plugin-soundcheck-common";import e,{useState as L}from"react";import{useLocation as D,Routes as B,Route as t}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import{UserProvider as F}from"../../contexts/UserProvider.esm.js";import N from"../../hooks/useConfirmationModal.esm.js";import{AlertProvider as G}from"../../hooks/useSoundcheckAlert.esm.js";import{rootRouteRef as H}from"../../routes.esm.js";import{CampaignDetailsPage as O}from"../CampaignDetailsPage/CampaignDetailsPage.esm.js";import{CampaignsPage as $}from"../CampaignsPage/CampaignsPage.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../CampaignForm/CampaignForm.esm.js";import"../FullScreenDialog/FullScreenDialog.esm.js";import{EditCampaignView as M}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckPage as Q}from"../CheckPage/CheckPage.esm.js";import{CheckInsightsPage as i}from"../CheckPage/CheckInsightsPage.esm.js";import{ChecksTab as U}from"../ChecksTab/ChecksTab.esm.js";import{CollectorPage as V}from"../CollectorPage/CollectorPage.esm.js";import{CollectorsPage as W}from"../CollectorsPage/CollectorsPage.esm.js";import{EditTrackPage as j}from"../EditTrackPage/EditTrackPage.esm.js";import{GroupSelector as q}from"../GroupSelector/GroupSelector.esm.js";import{OverviewPageContent as z}from"../OverviewPage/OverviewPageContent.esm.js";import{SoundcheckQueryClientProvider as J}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{TechHealth as K}from"../TechHealth/TechHealth.esm.js";import{TrackPage as X}from"../TrackPage/TrackPage.esm.js";import{TracksTab as Y}from"../TracksTab/TracksTab.esm.js";import{Breadcrumbs as Z}from"./Breadcrumbs.esm.js";import{generateBreadcrumbs as _}from"./utils.esm.js";const ee=T(c=>({tabContent:{margin:0,padding:0},root:{"& > *":{display:"flex",flexDirection:"column",flexGrow:1}},pageContent:{display:"flex",flexDirection:"row",flexGrow:1},pageLayout:{display:"flex",flexDirection:"column",flex:"1 1 0%",maxWidth:"100%","& > article":{display:"flex",flexDirection:"column",flex:"1 1 auto",padding:`${c.spacing(3)}px !important`}}})),te=({title:c="Soundcheck"})=>{const o=ee(),s=x(H),[p,u]=L(void 0),l=w(I),d=!l.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-tech-health")||l.isActive("soundcheck-enable-tech-health"),h=!l.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-collectors")||l.isActive("soundcheck-enable-collectors"),f=!l.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-campaigns")||l.isActive("soundcheck-enable-campaigns"),{loading:g,allowed:E}=y({permission:A}),k=h&&!g&&E,b=d,n=D().pathname.replace(/\/+$/,""),C=n===s(),R=_(n);return e.createElement(G,null,e.createElement(F,null,e.createElement(J,null,e.createElement(N,null,e.createElement(m,{className:o.root},e.createElement(v,{themeId:"tool"},e.createElement(S,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),e.createElement(P,{title:c,subtitle:e.createElement(Z,{pages:R})},C&&e.createElement(q,{setError:u})),e.createElement(m,{className:o.pageContent},e.createElement(m,{className:o.pageLayout},e.createElement(B,null,e.createElement(t,{path:"/campaigns/:campaignId/edit",element:e.createElement(M,null)}),e.createElement(t,{path:"/campaigns/:campaignId",element:e.createElement(O,null)}),e.createElement(t,{path:"/tracks/:trackId/edit",element:e.createElement(j,null)}),e.createElement(t,{path:"/tracks/:trackId",element:e.createElement(X,null)}),e.createElement(t,{path:"/tracks/:trackId/checks/:checkId",element:e.createElement(i,null)}),e.createElement(t,{path:"/checks/:checkId",element:e.createElement(i,null)}),e.createElement(t,{path:"/checks/:checkId/edit",element:e.createElement(Q,null)}),e.createElement(t,{path:"/collectors/:collectorId",element:e.createElement(V,null)}),e.createElement(t,{path:"/*",element:e.createElement(r,null,e.createElement(r.Route,{title:"Overview",path:"/"},e.createElement("div",{className:o.tabContent},e.createElement(z,{groupSelectorError:p}))),b&&e.createElement(r.Route,{title:"Tech Health",path:"/tech-health"},e.createElement(K,null)),e.createElement(r.Route,{title:"Checks",path:"/checks"},e.createElement(U,null)),e.createElement(r.Route,{title:"Tracks",path:"/tracks"},e.createElement(Y,null)),f&&e.createElement(r.Route,{title:"Campaigns",path:"/campaigns"},e.createElement($,null)),k&&e.createElement(r.Route,{title:"Collectors",path:"/collectors"},e.createElement(W,null)))}))))))))))};export{te as RoutingPage};
2
2
  //# sourceMappingURL=RoutingPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseEntityRef as N}from"@backstage/catalog-model";import{makeStyles as b,Grid as v,InputLabel as r,NativeSelect as n}from"@material-ui/core";import e from"react";import{CampaignStatus as m}from"../CampaignsTab/CampaignTypes.esm.js";import{SearchBar as F}from"../SearchBar/SearchBar.esm.js";const y=b(t=>({searchbar:{maxWidth:"275px","& input":{paddingTop:t.spacing(1),paddingBottom:t.spacing(1)}},filters:{display:"flex",alignItems:"center",padding:0},dropdownFilters:{margin:"0 15px",alignItems:"center"},selectHolder:{minWidth:105,"& select":{paddingTop:t.spacing(1),paddingBottom:t.spacing(1)}},label:{marginBottom:t.spacing(.5)}})),S=({searchPlaceholder:t,isLoading:c,searchTerm:o,setSearchTerm:d,filterAlpha:p,handleAlphabeticalFilterChange:h,filterOwner:g,handleOwnerFilterChange:u,filterStatus:s,handleStatusFilterChange:i,owners:E})=>{const a=y();return e.createElement(v,{item:!0,xs:10,className:a.filters},e.createElement("div",null,e.createElement(r,{className:a.label,htmlFor:"search-bar"},t||"Search"),e.createElement(F,{searchTerm:o,disabled:c,setSearchTerm:d,placeholder:"Name",variant:"outlined",size:"small",className:a.searchbar,id:"search-bar"})),e.createElement("div",{className:a.dropdownFilters},e.createElement(r,{className:a.label,htmlFor:"sort-by"},"Sort By"),e.createElement(n,{id:"sort-by",className:a.selectHolder,value:p,onChange:h},e.createElement("option",{value:"default"},"Default"),e.createElement("option",{value:"ascending"},"Name A-Z"),e.createElement("option",{value:"descending"},"Name Z-A"))),e.createElement("div",{className:a.dropdownFilters},e.createElement(r,{className:a.label,htmlFor:"filter-owner"},"Filter By Owner"),e.createElement(n,{id:"filter-owner",className:a.selectHolder,value:g,onChange:u},e.createElement("option",{key:"all",value:"all"},"All"),E?.map((l,f)=>e.createElement("option",{key:l+f,value:l},N(l).name)))),s&&i&&e.createElement("div",{className:a.dropdownFilters},e.createElement(r,{className:a.label,htmlFor:"filter-status"},"Filter By Status"),e.createElement(n,{id:"filter-status",className:a.selectHolder,value:s,onChange:i},Object.keys(m).map(l=>e.createElement(e.Fragment,{key:l},e.createElement("option",{value:l},m[l]))))))};export{S as SearchFilters};
1
+ import{parseEntityRef as N}from"@backstage/catalog-model";import{makeStyles as b,Grid as v,InputLabel as r,NativeSelect as n}from"@material-ui/core";import e from"react";import"../CampaignsPage/CampaignListPage/CampaignListPage.esm.js";import{CampaignStatus as m}from"../CampaignsPage/CampaignListPage/CampaignTypes.esm.js";import{SearchBar as F}from"../SearchBar/SearchBar.esm.js";const y=b(t=>({searchbar:{maxWidth:"275px","& input":{paddingTop:t.spacing(1),paddingBottom:t.spacing(1)}},filters:{display:"flex",alignItems:"center",padding:0},dropdownFilters:{margin:"0 15px",alignItems:"center"},selectHolder:{minWidth:105,"& select":{paddingTop:t.spacing(1),paddingBottom:t.spacing(1)}},label:{marginBottom:t.spacing(.5)}})),S=({searchPlaceholder:t,isLoading:c,searchTerm:o,setSearchTerm:d,filterAlpha:p,handleAlphabeticalFilterChange:h,filterOwner:g,handleOwnerFilterChange:u,filterStatus:s,handleStatusFilterChange:i,owners:E})=>{const a=y();return e.createElement(v,{item:!0,xs:10,className:a.filters},e.createElement("div",null,e.createElement(r,{className:a.label,htmlFor:"search-bar"},t||"Search"),e.createElement(F,{searchTerm:o,disabled:c,setSearchTerm:d,placeholder:"Name",variant:"outlined",size:"small",className:a.searchbar,id:"search-bar"})),e.createElement("div",{className:a.dropdownFilters},e.createElement(r,{className:a.label,htmlFor:"sort-by"},"Sort By"),e.createElement(n,{id:"sort-by",className:a.selectHolder,value:p,onChange:h},e.createElement("option",{value:"default"},"Default"),e.createElement("option",{value:"ascending"},"Name A-Z"),e.createElement("option",{value:"descending"},"Name Z-A"))),e.createElement("div",{className:a.dropdownFilters},e.createElement(r,{className:a.label,htmlFor:"filter-owner"},"Filter By Owner"),e.createElement(n,{id:"filter-owner",className:a.selectHolder,value:g,onChange:u},e.createElement("option",{key:"all",value:"all"},"All"),E?.map((l,f)=>e.createElement("option",{key:l+f,value:l},N(l).name)))),s&&i&&e.createElement("div",{className:a.dropdownFilters},e.createElement(r,{className:a.label,htmlFor:"filter-status"},"Filter By Status"),e.createElement(n,{id:"filter-status",className:a.selectHolder,value:s,onChange:i},Object.keys(m).map(l=>e.createElement(e.Fragment,{key:l},e.createElement("option",{value:l},m[l]))))))};export{S as SearchFilters};
2
2
  //# sourceMappingURL=SearchFilters.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseEntityRef as L}from"@backstage/catalog-model";import{humanizeEntityRef as E}from"@backstage/plugin-catalog-react";import{createFilterOptions as U}from"@material-ui/lab/Autocomplete";import c,{createContext as h,useCallback as x,useMemo as R,useContext as S}from"react";import k from"react-use/lib/useLocalStorage";import{useLoggedInUser as A}from"../../../contexts/UserProvider.esm.js";import{useFacetFilters as C}from"../../../hooks/facets/useFacetFilters.esm.js";import{TechHealthLoading as N}from"../Loading/TechHealthLoading.esm.js";import{useFacetOptions as V}from"./useFacetOptions.esm.js";import{emptyFacetFilters as w,DEFAULT_NUMBER_OF_DAYS as I,mapFacetFiltersToFilter as T}from"./utils.esm.js";const m=h({facetOptionsLoading:!1,getFacetOptions:()=>[],getFacetOptionLabel:()=>"",facetFilters:w(),clearAllFilters:()=>{},getSelectedFacetValues:()=>[],setSelectedFacetValues:()=>{},numberOfDays:I,setNumberOfDays:()=>{},filter:{},loggedInUser:"Unknown"}),_=()=>S(m),F=f=>{const{userEntityRef:s,loading:u}=A(),{isLoading:n,facetOptions:r}=V(),[p]=k("soundcheck.overview.groupRef",null),{facetFilters:a,numberOfDays:o,setFacetFilter:g,getFacetFilter:d,clearFacetFilters:O,setNumberOfDays:y}=C(r,p??void 0),b=x(e=>r[e].map(({value:t})=>t),[r]),v=R(()=>T(r,a,o,s),[a,r,o,s]),D={facetOptionsLoading:n,getFacetOptions:b,getFacetOptionLabel:(e,t)=>{let l=r[e].find(i=>i.value===t)?.label;if(!l)try{const i=L(t);l=E(i)}catch{}return U(),l??t},facetFilters:a,clearAllFilters:O,getSelectedFacetValues:e=>d(e),setSelectedFacetValues:(e,t)=>{g(e,t)},numberOfDays:o,setNumberOfDays:y,filter:v??{},loggedInUser:"Unknown"};return n||u?c.createElement(N,null):c.createElement(m.Provider,{...f,value:D})};export{F as FilterProvider,F as default,_ as useFilterContext};
1
+ import{parseEntityRef as L}from"@backstage/catalog-model";import{humanizeEntityRef as E}from"@backstage/plugin-catalog-react";import{createFilterOptions as U}from"@material-ui/lab/Autocomplete";import c,{createContext as h,useCallback as x,useMemo as R,useContext as S}from"react";import k from"react-use/lib/useLocalStorage";import{useLoggedInUser as A}from"../../../contexts/UserProvider.esm.js";import{useFacetFilters as C}from"../../../hooks/facets/useFacetFilters.esm.js";import{TechHealthLoading as N}from"../Loading/TechHealthLoading.esm.js";import{useFacetOptions as V}from"./useFacetOptions.esm.js";import{emptyFacetFilters as w,DEFAULT_NUMBER_OF_DAYS as I,mapFacetFiltersToFilter as T}from"./utils.esm.js";const m=h({facetOptionsLoading:!1,getFacetOptions:()=>[],getFacetOptionLabel:()=>"",facetFilters:w(),clearAllFilters:()=>{},getSelectedFacetValues:()=>[],setSelectedFacetValues:()=>{},numberOfDays:I,setNumberOfDays:()=>{},filter:{},loggedInUser:"Unknown"}),_=()=>S(m),F=f=>{const{userEntityRef:s,loading:u}=A(),{isLoading:n,facetOptions:r}=V(),[p]=k("soundcheck.overview.groupRef",null),{facetFilters:a,numberOfDays:o,setFacetFilter:d,getFacetFilter:g,clearFacetFilters:O,setNumberOfDays:y}=C(r,p??void 0),b=x(e=>r[e].map(({value:t})=>t),[r]),v=R(()=>T(r,a,o,s),[a,r,o,s]),D={facetOptionsLoading:n,getFacetOptions:b,getFacetOptionLabel:(e,t)=>{let l=r[e].find(i=>i.value===t)?.label;if(!l)try{const i=L(t);l=E(i)}catch{}return U(),l??t},facetFilters:a,clearAllFilters:O,getSelectedFacetValues:e=>g(e),setSelectedFacetValues:(e,t)=>{d(e,t)},numberOfDays:o,setNumberOfDays:y,filter:v??{},loggedInUser:"Unknown"};return n||u?c.createElement(N,null):c.createElement(m.Provider,{...f,value:D})};export{F as FilterProvider,F as default,_ as useFilterContext};
2
2
  //# sourceMappingURL=FilterProvider.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseEntityRef as T}from"@backstage/catalog-model";import{EntityDisplayName as I}from"@backstage/plugin-catalog-react";import{makeStyles as $,Typography as B,Checkbox as C}from"@material-ui/core";import D from"@material-ui/icons/Category";import G from"@material-ui/icons/Class";import M from"@material-ui/icons/Group";import N from"@material-ui/icons/Loop";import{toEntityFilterQuery as j}from"@spotify/backstage-plugin-soundcheck-common";import e,{useMemo as P}from"react";import{useGetEntityFacets as l}from"../../../hooks/catalog/useGetEntityFacets.esm.js";import i from"../../MultiSelectFilter/MultiSelectFilter.esm.js";const Q=$(t=>({root:{display:"flex",flexDirection:"row",alignItems:"center",gap:t.spacing(2)}})),c=(t,{selected:n})=>e.createElement(e.Fragment,null,e.createElement(C,{value:t,checked:n,color:"primary"}),e.createElement(I,{entityRef:t,hideIcon:!0})),q=({track:t,label:n,owners:p,setOwners:y,lifecycles:f,setLifecycles:d,types:E,setTypes:u,systems:g,setSystems:b})=>{const h=Q(),r=j(t.filter),{data:w,isLoading:F}=l("relations.ownedBy",r),{data:o,isLoading:L}=l("spec.lifecycle",r),{data:s,isLoading:O}=l("spec.type",r),{data:a,isLoading:k}=l("relations.partOf",r),m=P(()=>a?.filter(S=>{try{return T(S).kind.toLowerCase()==="system"}catch{return!1}}),[a]),v=(o||[]).length<=1,x=(s||[]).length<=1,R=(m||[]).length<=1;return e.createElement("div",{className:h.root},e.createElement(B,{variant:"caption"},`${n}:`),e.createElement(i,{name:"system",label:"System",icon:e.createElement(D,null),filters:g,setFilters:b,options:m??[],disabled:k||R,customRenderOption:c}),e.createElement(i,{name:"owner",label:"Owner",icon:e.createElement(M,null),filters:p,setFilters:y,options:w??[],disabled:F,customRenderOption:c}),e.createElement(i,{name:"type",label:"Type",icon:e.createElement(G,null),filters:E,setFilters:u,options:s??[],disabled:O||x}),e.createElement(i,{name:"lifecycle",label:"Lifecycle",icon:e.createElement(N,null),filters:f,setFilters:d,options:o??[],disabled:L||v}))};export{q as FilterBar};
1
+ import{parseEntityRef as T}from"@backstage/catalog-model";import{EntityDisplayName as $}from"@backstage/plugin-catalog-react";import{makeStyles as I,Typography as j,Checkbox as B}from"@material-ui/core";import C from"@material-ui/icons/Category";import D from"@material-ui/icons/Class";import M from"@material-ui/icons/Group";import N from"@material-ui/icons/Loop";import{toEntityFilterQuery as Q}from"@spotify/backstage-plugin-soundcheck-common";import e,{useMemo as G}from"react";import{useGetEntityFacets as l}from"../../../hooks/catalog/useGetEntityFacets.esm.js";import i from"../../MultiSelectFilter/MultiSelectFilter.esm.js";const q=I(t=>({root:{display:"flex",flexDirection:"row",alignItems:"center",gap:t.spacing(2)}})),c=(t,{selected:n})=>e.createElement(e.Fragment,null,e.createElement(B,{value:t,checked:n,color:"primary"}),e.createElement($,{entityRef:t,hideIcon:!0})),z=({track:t,label:n,owners:p,setOwners:y,lifecycles:f,setLifecycles:d,types:E,setTypes:u,systems:g,setSystems:b})=>{const h=q(),r=Q(t.filter),{data:w,isLoading:F}=l("relations.ownedBy",r),{data:o,isLoading:L}=l("spec.lifecycle",r),{data:s,isLoading:O}=l("spec.type",r),{data:a,isLoading:k}=l("relations.partOf",r),m=G(()=>a?.filter(S=>{try{return T(S).kind.toLowerCase()==="system"}catch{return!1}}),[a]),v=(o||[]).length<=1,x=(s||[]).length<=1,R=(m||[]).length<=1;return e.createElement("div",{className:h.root},e.createElement(j,{variant:"caption"},`${n}:`),e.createElement(i,{name:"system",label:"System",icon:e.createElement(C,null),filters:g,setFilters:b,options:m??[],disabled:k||R,customRenderOption:c}),e.createElement(i,{name:"owner",label:"Owner",icon:e.createElement(M,null),filters:p,setFilters:y,options:w??[],disabled:F,customRenderOption:c}),e.createElement(i,{name:"type",label:"Type",icon:e.createElement(D,null),filters:E,setFilters:u,options:s??[],disabled:O||x}),e.createElement(i,{name:"lifecycle",label:"Lifecycle",icon:e.createElement(N,null),filters:f,setFilters:d,options:o??[],disabled:L||v}))};export{z as FilterBar};
2
2
  //# sourceMappingURL=FilterBar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as x,lighten as b,darken as h,Typography as r}from"@material-ui/core";import a,{useState as R,useRef as E}from"react";import S from"../../RichTooltip/RichTooltip.esm.js";import{getProgressColor as i}from"../utils.esm.js";const m=e=>{const t=e.passed+e.failed+e.warning+e.notReported;return t===0?100:Math.round(e.passed/t*100)},C=(e,t)=>e.levels.find(n=>n.ordinal===t),L=x(e=>({cell:{backgroundColor:({passRate:t})=>i(e,t),color:({passRate:t})=>e.palette.getContrastText(i(e,t)),cursor:"default",borderRadius:"4px",textAlign:"center",fontSize:".9rem",width:"50px"},tooltip:{width:"225px"},topLevelStatus:{borderBottom:`1px solid ${e.palette.divider}`,paddingBottom:e.spacing(1)},levelStatus:{borderBottom:`1px solid ${e.palette.divider}`,paddingTop:e.spacing(1),paddingBottom:e.spacing(1)},bottomLevelStatus:{paddingTop:e.spacing(1)},levelPassRate:{backgroundColor:({passRate:t})=>b(i(e,t),.75),color:({passRate:t})=>h(i(e,t),.7),borderRadius:"4px",textAlign:"center",fontSize:".7rem",width:"32px",height:"15px"}})),k=({track:e,status:t})=>{const n=m(t),s=L({passRate:n}),[u,p]=R(!1),d=E(null),g=()=>{d.current=setTimeout(()=>p(!0),500)},v=()=>{clearTimeout(d.current),p(!1)};return a.createElement(S,{content:a.createElement("div",{className:s.tooltip},t.statusByLevel.map((o,c)=>{let l;c===0?l=s.topLevelStatus:c===t.statusByLevel.length-1?l=s.bottomLevelStatus:l=s.levelStatus;const f=o.passed+o.failed+o.warning+o.notReported,y=C(e,o.ordinal);return a.createElement("div",{key:c,className:l,style:{display:"flex",flexDirection:"column",justifyContent:"space-between"}},a.createElement("div",null,a.createElement(r,{variant:"caption",style:{fontWeight:"bold"}},y?.name??`Level ${o.ordinal}`)),a.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.createElement(r,{variant:"caption"},`Passing ${o.passed} of ${f} checks`),a.createElement(r,{className:s.levelPassRate},`${m(o)}%`)))})),open:u,placement:"bottom",onClose:()=>p(!1)},a.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center"},onMouseEnter:g,onMouseLeave:v},a.createElement(r,{className:s.cell},`${n}%`)))};export{k as TrackStatusChip};
1
+ import{makeStyles as h,lighten as C,darken as E,Typography as r}from"@material-ui/core";import o,{useState as S,useRef as k}from"react";import R from"../../RichTooltip/RichTooltip.esm.js";import{getProgressColor as i}from"../utils.esm.js";import{getApplicableCheckCount as m}from"./utils.esm.js";const g=e=>{const t=m(e);return t===0?-1:Math.round(e.passed/t*100)},L=(e,t)=>e.levels.find(s=>s.ordinal===t),N=h(e=>({cell:{backgroundColor:({passRate:t})=>i(e,t),color:({passRate:t})=>e.palette.getContrastText(i(e,t)),cursor:"default",borderRadius:"4px",textAlign:"center",fontSize:".9rem",width:"50px"},tooltip:{width:"225px"},topLevelStatus:{borderBottom:`1px solid ${e.palette.divider}`,paddingBottom:e.spacing(1)},levelStatus:{borderBottom:`1px solid ${e.palette.divider}`,paddingTop:e.spacing(1),paddingBottom:e.spacing(1)},bottomLevelStatus:{paddingTop:e.spacing(1)},levelPassRate:{backgroundColor:({passRate:t})=>C(i(e,t),.75),color:({passRate:t})=>E(i(e,t),.7),borderRadius:"4px",textAlign:"center",fontSize:".7rem",width:"32px",height:"15px"}})),T=({track:e,status:t})=>{const s=g(t),a=N({passRate:s}),[v,p]=S(!1),u=k(null),f=()=>{u.current=setTimeout(()=>p(!0),500)},y=()=>{clearTimeout(u.current),p(!1)},x=m(t);return o.createElement(R,{content:o.createElement("div",{className:a.tooltip},t.statusByLevel.map((l,c)=>{let n;c===0?n=a.topLevelStatus:c===t.statusByLevel.length-1?n=a.bottomLevelStatus:n=a.levelStatus;const d=m(l),b=L(e,l.ordinal);return o.createElement("div",{key:c,className:n,style:{display:"flex",flexDirection:"column",justifyContent:"space-between"}},o.createElement("div",null,o.createElement(r,{variant:"caption",style:{fontWeight:"bold"}},b?.name??`Level ${l.ordinal}`)),o.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},o.createElement(r,{variant:"caption"},d===0?"No Applicable Checks":`Passing ${l.passed} of ${d} checks`),o.createElement(r,{className:a.levelPassRate},d===0?"N/A":`${g(l)}%`)))})),open:v,placement:"bottom",onClose:()=>p(!1)},o.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center"},onMouseEnter:f,onMouseLeave:y},o.createElement(r,{className:a.cell},x===0?"N/A":`${s}%`)))};export{T as TrackStatusChip};
2
2
  //# sourceMappingURL=TrackStatusChip.esm.js.map
@@ -1,2 +1,2 @@
1
- import{OverflowTooltip as s}from"@backstage/core-components";import{EntityRefLink as d,EntityRefLinks as o}from"@backstage/plugin-catalog-react";import{makeStyles as u,Chip as m}from"@material-ui/core";import r from"react";import{LevelBadge as c}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as p}from"../../Badges/NoLevelBadge.esm.js";import"../../Badges/CampaignBadge.esm.js";import{TrackStatusChip as f}from"./TrackStatusChip.esm.js";const i=u(()=>({linkHover:{"& span":{"&:hover":{textDecoration:"underline"}}}})),y=Object.freeze({createBadgeColumn(){return{title:"",field:"badge",render:e=>e.badge?r.createElement(c,{badge:e.badge}):r.createElement(p,null),width:"auto",align:"center",sorting:!1}},createStatusColumn(){return{title:"Checks",field:"status",render:e=>e.status&&r.createElement(f,{track:e.track,status:e.status}),width:"auto",align:"center",sorting:!1}},createNameColumn(e){return{title:"Name",field:"resolved.entityRef",highlight:!0,customSort(t,a){return 0},render:({entity:t})=>{const a=i();return r.createElement(d,{entityRef:t,defaultKind:e?.defaultKind||"Component",className:a.linkHover})}}},createSystemColumn(){return{title:"System",field:"resolved.partOfSystemRelationTitle",customSort(e,t){return 0},render:({resolved:e})=>{const t=i();return r.createElement(o,{entityRefs:e.partOfSystemRelations,defaultKind:"system",className:t.linkHover})}}},createOwnerColumn(){return{title:"Owner",field:"resolved.ownedByRelationsTitle",customSort(e,t){return 0},render:({resolved:e})=>{const t=i();return r.createElement(o,{entityRefs:e.ownedByRelations,defaultKind:"group",className:t.linkHover})}}},createSpecTypeColumn(){return{title:"Type",field:"entity.spec.type",customSort(e,t){return 0}}},createSpecLifecycleColumn(){return{title:"Lifecycle",field:"entity.spec.lifecycle",customSort(e,t){return 0},width:"auto"}},createMetadataDescriptionColumn(){return{title:"Description",field:"entity.metadata.description",customSort(e,t){return 0},render:({entity:e})=>r.createElement(s,{text:e.metadata.description,placement:"bottom-start"}),width:"auto"}},createTagsColumn(){return{title:"Tags",field:"entity.metadata.tags",cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:e})=>r.createElement(r.Fragment,null,e.metadata.tags&&e.metadata.tags.map(t=>r.createElement(m,{key:t,label:t,size:"small",variant:"outlined",style:{marginBottom:"0px"}}))),width:"auto",sorting:!1}},createTitleColumn(e){return{title:"Title",field:"entity.metadata.title",customSort(t,a){return 0},hidden:e?.hidden,searchable:!0}},createLabelColumn(e,t){return{title:t?.title||"Label",field:"entity.metadata.labels",customSort(a,n){return 0},cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:a})=>{const n=a.metadata?.labels,l=n&&n[e]||t?.defaultValue;return r.createElement(r.Fragment,null,l&&r.createElement(m,{key:l,label:l,size:"small",variant:"outlined"}))},width:"auto",sorting:!1}},createNamespaceColumn(){return{title:"Namespace",field:"entity.metadata.namespace",customSort(e,t){return 0},width:"auto"}}});export{y as columnFactories};
1
+ import{OverflowTooltip as s}from"@backstage/core-components";import{EntityRefLink as c,EntityRefLinks as o}from"@backstage/plugin-catalog-react";import{makeStyles as u,withStyles as d,Chip as m}from"@material-ui/core";import p from"@material-ui/icons/RemoveCircleOutline";import r from"react";import{LevelBadge as f}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as y}from"../../Badges/NoLevelBadge.esm.js";import"../../Badges/CampaignBadge.esm.js";import{TrackStatusChip as g}from"./TrackStatusChip.esm.js";import{getApplicableCheckCount as S}from"./utils.esm.js";const i=u(()=>({linkHover:{"& span":{"&:hover":{textDecoration:"underline"}}}})),h=d(e=>({root:{color:e.palette.text.disabled}}))(p),C=Object.freeze({createBadgeColumn(){return{title:"",field:"badge",render:e=>S(e.status)===0?r.createElement(h,null):e.badge?r.createElement(f,{badge:e.badge}):r.createElement(y,null),width:"auto",align:"center",sorting:!1}},createStatusColumn(){return{title:"Checks",field:"status",render:e=>e.status&&r.createElement(g,{track:e.track,status:e.status}),width:"auto",align:"center",sorting:!1}},createNameColumn(e){return{title:"Name",field:"resolved.entityRef",highlight:!0,customSort(t,a){return 0},render:({entity:t})=>{const a=i();return r.createElement(c,{entityRef:t,defaultKind:e?.defaultKind||"Component",className:a.linkHover})}}},createSystemColumn(){return{title:"System",field:"resolved.partOfSystemRelationTitle",customSort(e,t){return 0},render:({resolved:e})=>{const t=i();return r.createElement(o,{entityRefs:e.partOfSystemRelations,defaultKind:"system",className:t.linkHover})}}},createOwnerColumn(){return{title:"Owner",field:"resolved.ownedByRelationsTitle",customSort(e,t){return 0},render:({resolved:e})=>{const t=i();return r.createElement(o,{entityRefs:e.ownedByRelations,defaultKind:"group",className:t.linkHover})}}},createSpecTypeColumn(){return{title:"Type",field:"entity.spec.type",customSort(e,t){return 0}}},createSpecLifecycleColumn(){return{title:"Lifecycle",field:"entity.spec.lifecycle",customSort(e,t){return 0},width:"auto"}},createMetadataDescriptionColumn(){return{title:"Description",field:"entity.metadata.description",customSort(e,t){return 0},render:({entity:e})=>r.createElement(s,{text:e.metadata.description,placement:"bottom-start"}),width:"auto"}},createTagsColumn(){return{title:"Tags",field:"entity.metadata.tags",cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:e})=>r.createElement(r.Fragment,null,e.metadata.tags&&e.metadata.tags.map(t=>r.createElement(m,{key:t,label:t,size:"small",variant:"outlined",style:{marginBottom:"0px"}}))),width:"auto",sorting:!1}},createTitleColumn(e){return{title:"Title",field:"entity.metadata.title",customSort(t,a){return 0},hidden:e?.hidden,searchable:!0}},createLabelColumn(e,t){return{title:t?.title||"Label",field:"entity.metadata.labels",customSort(a,n){return 0},cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:a})=>{const n=a.metadata?.labels,l=n&&n[e]||t?.defaultValue;return r.createElement(r.Fragment,null,l&&r.createElement(m,{key:l,label:l,size:"small",variant:"outlined"}))},width:"auto",sorting:!1}},createNamespaceColumn(){return{title:"Namespace",field:"entity.metadata.namespace",customSort(e,t){return 0},width:"auto"}}});export{C as columnFactories};
2
2
  //# sourceMappingURL=columns.esm.js.map
@@ -1,2 +1,2 @@
1
- import{RELATION_PART_OF as y,RELATION_OWNED_BY as f,stringifyEntityRef as l}from"@backstage/catalog-model";import{getEntityRelations as r,humanizeEntityRef as i}from"@backstage/plugin-catalog-react";function R(d){const{trackDetails:n,track:m,entity:t}=d,a=r(t,y,{kind:"system"}),o=r(t,f),s=l(t);return{id:s,entity:t,badge:n.badge??void 0,track:m,status:n.status,resolved:{name:i(t,{defaultKind:"Component"}),entityRef:s,ownedByRelationsTitle:o.map(e=>i(e,{defaultKind:"group"})).join(", "),ownedByRelations:o,partOfSystemRelationTitle:a.map(e=>i(e,{defaultKind:"system"})).join(", "),partOfSystemRelations:a}}}export{R as toTrackEntityRow};
1
+ import{RELATION_PART_OF as m,RELATION_OWNED_BY as y,stringifyEntityRef as p}from"@backstage/catalog-model";import{getEntityRelations as d,humanizeEntityRef as a}from"@backstage/plugin-catalog-react";import f from"lodash";function u(e){return Object.keys(e).filter(t=>!["notApplicable","ordinal"].includes(t)&&typeof f.get(e,t,0)=="number").reduce((t,i)=>t+f.get(e,i,0),0)}function c(e){const{trackDetails:t,track:i,entity:n}=e,r=d(n,m,{kind:"system"}),s=d(n,y),l=p(n);return{id:l,entity:n,badge:t.badge??void 0,track:i,status:t.status,resolved:{name:a(n,{defaultKind:"Component"}),entityRef:l,ownedByRelationsTitle:s.map(o=>a(o,{defaultKind:"group"})).join(", "),ownedByRelations:s,partOfSystemRelationTitle:r.map(o=>a(o,{defaultKind:"system"})).join(", "),partOfSystemRelations:r}}}export{u as getApplicableCheckCount,c as toTrackEntityRow};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{getTrendLineColor as e,TrendLineColor as n}from"../Charts/chartUtils.esm.js";const s=(o,r)=>{if(isNaN(r))return"#ddd";const t=100;return r<t/3?e(o,n.RED):r<t*(2/3)?o.palette.status.warning:e(o,n.GREEN)};export{s as getProgressColor};
1
+ import{getTrendLineColor as o,TrendLineColor as n}from"../Charts/chartUtils.esm.js";const s=(e,r)=>{if(isNaN(r))return"#ddd";if(r<0)return e.palette.status.aborted;const t=100;return r<t/3?o(e,n.RED):r<t*(2/3)?e.palette.status.warning:o(e,n.GREEN)};export{s as getProgressColor};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as Q,featureFlagsApiRef as U}from"@backstage/core-plugin-api";import{usePermission as W}from"@backstage/plugin-permission-react";import{makeStyles as Z,Button as T,Grid as o}from"@material-ui/core";import{soundcheckTrackCreatePermission as $}from"@spotify/backstage-plugin-soundcheck-common";import e,{useState as i,useEffect as q}from"react";import z from"react-use/lib/useDebounce";import{useTrackFormContext as J}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as K}from"../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetTrackOwners as V}from"../../../hooks/tracks/useGetTrackOwners.esm.js";import X from"../../../images/no-results.svg";import{FilterDefault as y}from"../../../utils/filters.esm.js";import{EmptyState as v}from"../../EmptyState/EmptyState.esm.js";import{Pagination as Y}from"../../Pagination/Pagination.esm.js";import{SearchFilters as _}from"../../SearchFilters/SearchFilters.esm.js";import{TrackEmptyState as d,TrackNoResults as x}from"./TrackEmptyState.esm.js";import{TracksOverviewSkeleton as ee}from"./TracksOverviewSkeleton.esm.js";import{TrackSummaryCard as re}from"./TrackSummaryCard.esm.js";const te=Z(t=>({headerButtons:{display:"flex",gap:t.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:t.spacing(0,0,1)},container:{padding:t.spacing(3),gap:t.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:t.spacing(1.5),paddingBottom:t.spacing(1.5)}})),ae=({tracksPerPage:t,currentCursor:w})=>{const n=te(),[g,A]=i(w),[l,b]=i(""),[u,S]=i(y.Alpha),[f,N]=i(y.Owner),[B,F]=i(""),{data:I,isLoading:O}=V();z(()=>{F(l)},500,[l]);const{setShowAddModal:h}=J(),{loading:k,allowed:L}=W({permission:$}),{data:a,isLoading:c}=K({ids:void 0,types:["standard","playlist"],first:t,after:g,orderAlphabetical:u,searchByOwner:f,searchByName:B}),[m,G]=i(a),p=m?.edges?.map(r=>r.node),[P,R]=i([]),C=Q(U),D=!C.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-track-creation")||C.isActive("soundcheck-enable-track-creation"),E=!L||!D,j=r=>{S(r.target.value)},H=r=>{N(r.target.value)};if(q(()=>{a&&G(()=>({totalCount:a.totalCount,edges:a.edges,pageInfo:{startCursor:a.pageInfo.startCursor,endCursor:a.pageInfo.endCursor,hasNextPage:a?.pageInfo.hasNextPage??!1,hasPreviousPage:a?.pageInfo.hasPreviousPage??!1}}))},[a]),!c&&!p)return e.createElement(v,{title:d.title,description:d.description,imgSrc:X,action:!k&&e.createElement(T,{disabled:E,variant:"contained",color:"primary",onClick:()=>h(!0)},d.callToAction)});let s;c?s=e.createElement(ee,null):p?.length?s=p?.map(r=>e.createElement(o,{key:r.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`track card ${r.id}`},e.createElement(re,{summary:r}))):s=e.createElement(o,{xs:12,item:!0,role:"listitem","aria-label":"result"},e.createElement(v,{title:x.title,description:x.description}));const M=m?.pageInfo.hasNextPage||P?.length>0;return e.createElement(o,{container:!0,direction:"row",className:n.container},e.createElement(o,{container:!0,className:n.header},e.createElement(_,{searchPlaceholder:"Search Available Tracks",isLoading:c||O,searchTerm:l,setSearchTerm:b,filterAlpha:u,handleAlphabeticalFilterChange:j,filterOwner:f,handleOwnerFilterChange:H,owners:I}),e.createElement(o,{item:!0,xs:2,className:n.headerButtons},!k&&e.createElement(T,{disabled:E,variant:"contained",color:"primary",onClick:()=>h(!0),className:n.createButton},"Create Track"))),e.createElement(o,{container:!0,spacing:4,role:"list","aria-label":"tracks"},s),M&&e.createElement(o,{item:!0,xs:12},e.createElement(Y,{response:m,listingsPerPage:t,cursor:g,setCursor:A,prevCursors:P,setPrevCursors:R,labelPerPageDropdown:"Tracks Per Page:",urlRoute:"tracks?tracksPerPage="})))};export{ae as TrackListPage};
1
+ import{useApi as $,featureFlagsApiRef as Q}from"@backstage/core-plugin-api";import{usePermission as U}from"@backstage/plugin-permission-react";import{makeStyles as W,Button as T,Grid as o}from"@material-ui/core";import{soundcheckTrackCreatePermission as q}from"@spotify/backstage-plugin-soundcheck-common";import e,{useState as i,useEffect as z}from"react";import J from"react-use/lib/useDebounce";import{useTrackFormContext as K}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as V}from"../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetTrackOwners as X}from"../../../hooks/tracks/useGetTrackOwners.esm.js";import Y from"../../../images/no-results.svg";import{FilterDefault as y}from"../../../utils/filters.esm.js";import{EmptyState as v}from"../../EmptyState/EmptyState.esm.js";import{Pagination as Z}from"../../Pagination/Pagination.esm.js";import{SearchFilters as _}from"../../SearchFilters/SearchFilters.esm.js";import{TrackEmptyState as d,TrackNoResults as x}from"./TrackEmptyState.esm.js";import{TracksOverviewSkeleton as ee}from"./TracksOverviewSkeleton.esm.js";import{TrackSummaryCard as re}from"./TrackSummaryCard.esm.js";const te=W(t=>({headerButtons:{display:"flex",gap:t.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:t.spacing(0,0,1)},container:{padding:t.spacing(3),gap:t.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:t.spacing(1.5),paddingBottom:t.spacing(1.5)}})),ae=({tracksPerPage:t,currentCursor:w})=>{const n=te(),[g,A]=i(w),[l,b]=i(""),[u,S]=i(y.Alpha),[f,N]=i(y.Owner),[B,F]=i(""),{data:I,isLoading:O}=X();J(()=>{F(l)},500,[l]);const{setShowAddModal:h}=K(),{loading:k,allowed:L}=U({permission:q}),{data:a,isLoading:c}=V({ids:void 0,types:["standard","playlist"],first:t,after:g,orderAlphabetical:u,searchByOwner:f,searchByName:B}),[m,G]=i(a),p=m?.edges?.map(r=>r.node),[P,R]=i([]),C=$(Q),D=!C.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-track-creation")||C.isActive("soundcheck-enable-track-creation"),E=!L||!D,j=r=>{S(r.target.value)},H=r=>{N(r.target.value)};if(z(()=>{a&&G(()=>({totalCount:a.totalCount,edges:a.edges,pageInfo:{startCursor:a.pageInfo.startCursor,endCursor:a.pageInfo.endCursor,hasNextPage:a?.pageInfo.hasNextPage??!1,hasPreviousPage:a?.pageInfo.hasPreviousPage??!1}}))},[a]),!c&&!p)return e.createElement(v,{title:d.title,description:d.description,imgSrc:Y,action:!k&&e.createElement(T,{disabled:E,variant:"contained",color:"primary",onClick:()=>h(!0)},d.callToAction)});let s;c?s=e.createElement(ee,null):p?.length?s=p?.map(r=>e.createElement(o,{key:r.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`track card ${r.id}`},e.createElement(re,{summary:r}))):s=e.createElement(o,{xs:12,item:!0,role:"listitem","aria-label":"result"},e.createElement(v,{title:x.title,description:x.description}));const M=m?.pageInfo.hasNextPage||P?.length>0;return e.createElement(o,{container:!0,direction:"row",className:n.container},e.createElement(o,{container:!0,className:n.header},e.createElement(_,{searchPlaceholder:"Search Available Tracks",isLoading:c||O,searchTerm:l,setSearchTerm:b,filterAlpha:u,handleAlphabeticalFilterChange:j,filterOwner:f,handleOwnerFilterChange:H,owners:I}),e.createElement(o,{item:!0,xs:2,className:n.headerButtons},!k&&e.createElement(T,{disabled:E,variant:"contained",color:"primary",onClick:()=>h(!0),className:n.createButton},"Create Track"))),e.createElement(o,{container:!0,spacing:4,role:"list","aria-label":"tracks"},s),M&&e.createElement(o,{item:!0,xs:12},e.createElement(Z,{response:m,listingsPerPage:t,cursor:g,setCursor:A,prevCursors:P,setPrevCursors:R,labelPerPageDropdown:"Tracks Per Page:",urlRoute:"tracks?tracksPerPage="})))};export{ae as TrackListPage};
2
2
  //# sourceMappingURL=TrackListPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as r,alertApiRef as i}from"@backstage/core-plugin-api";import{catalogApiRef as c}from"@backstage/plugin-catalog-react";import{useQuery as f}from"@tanstack/react-query";import{QueryKeys as m}from"../graphqlKeys.esm.js";const p=(t,e)=>{const o=r(i),s=r(c);return f([m.GetEntityFacets,t,e],async()=>(await s.getEntityFacets({facets:[t],filter:e})).facets[t]?.map(a=>a.value).sort()||[],{onError:()=>{o.post({message:`Failed to load facet: ${t}`,severity:"error"})}})};export{p as useGetEntityFacets};
1
+ import{useApi as r,alertApiRef as c}from"@backstage/core-plugin-api";import{catalogApiRef as f}from"@backstage/plugin-catalog-react";import{useQuery as m}from"@tanstack/react-query";import{QueryKeys as p}from"../graphqlKeys.esm.js";const n=(e,t,o=!0)=>{const a=r(c),s=r(f);return m([p.GetEntityFacets,e,t],async()=>(await s.getEntityFacets({facets:[e],filter:t})).facets[e]?.map(i=>i.value).sort()||[],{enabled:o,onError:()=>{a.post({message:`Failed to load facet: ${e}`,severity:"error"})}})};export{n as useGetEntityFacets};
2
2
  //# sourceMappingURL=useGetEntityFacets.esm.js.map
@@ -1,2 +1,2 @@
1
- import{camelCase as n}from"lodash";import{useCallback as b,useEffect as p}from"react";import{useSearchParams as _,useLocation as N,useNavigate as j}from"react-router-dom";import S from"react-use/lib/useLocalStorage";import{Facet as m}from"../../components/TechHealth/Filters/types.esm.js";import"../../components/TechHealth/Filters/FacetFilter.esm.js";import"../../components/TechHealth/Filters/FilterProvider.esm.js";import"../../components/TechHealth/Filters/Filters.esm.js";import"../../components/TechHealth/Filters/FiltersHeader.esm.js";import"../../components/TechHealth/Filters/FiltersSection.esm.js";import"@backstage/catalog-model";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../useSoundcheckAlert.esm.js";import"../useConfirmationModal.esm.js";import{emptyFacetFilters as h,DEFAULT_NUMBER_OF_DAYS as l,MIN_NUMBER_OF_DAYS as D,MAX_NUMBER_OF_DAYS as v}from"../../components/TechHealth/Filters/utils.esm.js";const A=(d,y)=>{const[e]=_(),s=N(),i=j(),f=y??d[m.EntityOwner][0]?.value,[a=h(f),u]=S("soundcheck.techHealth.facetFilters",h(f));a&&Object.values(m).forEach(t=>{a[t]||(a[t]=[])});const[c=l,g]=S("soundcheck.techHealth.numberOfDays",l),E=t=>!isNaN(t)&&t>=D&&t<=v,F=b((t,r)=>{const o={...a??h()};o[t]=r,u(o)},[a,u]);return p(()=>{const t=e.get("days");if(t&&t!==c.toString()){const r=parseInt(t,10);g(E(r)?r:l)}},[]),p(()=>{const t=e.get("days");(!t||t!==c.toString())&&(e.set("days",c.toString()),i({pathname:s.pathname,search:`?${e.toString()}`}))},[c,e,s,i]),p(()=>{Object.values(m).forEach(t=>{const r=e.get(n(t));r&&r!==a[t].join(",")&&F(t,r.split(","))})},[]),p(()=>{Object.values(m).forEach(t=>{const r=a[t].join(","),o=n(t);r.length&&e.get(o)!==r&&(e.set(o,r),i({pathname:s.pathname,search:`?${e.toString()}`}))})},[a,e,s,i,f]),{setFacetFilter:(t,r)=>{F(t,r);const o=n(t);if(r.length){const O=r.join(",");e.get(o)!==O&&e.set(o,O)}else e.delete(o);i({pathname:s.pathname,search:`?${e.toString()}`})},getFacetFilter:t=>a?a[t]:[],clearFacetFilters:()=>{g(l),u(h()),e.delete("days"),Object.values(m).forEach(t=>{e.delete(n(t))}),i({pathname:s.pathname,search:`?${e.toString()}`})},facetFilters:a,numberOfDays:c,setNumberOfDays:g}};export{A as useFacetFilters};
1
+ import{camelCase as l}from"lodash";import{useCallback as _,useEffect as g,useLayoutEffect as b}from"react";import{useSearchParams as N,useLocation as D,useNavigate as j}from"react-router-dom";import E from"react-use/lib/useLocalStorage";import{Facet as n}from"../../components/TechHealth/Filters/types.esm.js";import"../../components/TechHealth/Filters/FacetFilter.esm.js";import"../../components/TechHealth/Filters/FilterProvider.esm.js";import"../../components/TechHealth/Filters/Filters.esm.js";import"../../components/TechHealth/Filters/FiltersHeader.esm.js";import"../../components/TechHealth/Filters/FiltersSection.esm.js";import"@backstage/catalog-model";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../useSoundcheckAlert.esm.js";import"../useConfirmationModal.esm.js";import{emptyFacetFilters as h,DEFAULT_NUMBER_OF_DAYS as f,MIN_NUMBER_OF_DAYS as v,MAX_NUMBER_OF_DAYS as A}from"../../components/TechHealth/Filters/utils.esm.js";const M=(S,O)=>{const[e]=N(),s=D(),i=j(),u=O??S[n.EntityOwner][0]?.value,[a=h(u),p]=E("soundcheck.techHealth.facetFilters",h(u));a&&Object.values(n).forEach(t=>{a[t]||(a[t]=[])});const[c=f,F]=E("soundcheck.techHealth.numberOfDays",f),d=t=>!isNaN(t)&&t>=v&&t<=A,y=_((t,r)=>{const o={...a??h()};o[t]=r,p(o)},[a,p]);return g(()=>{const t=e.get("days");if(t&&t!==c.toString()){const r=parseInt(t,10);F(d(r)?r:f)}},[]),g(()=>{const t=e.get("days");(!t||t!==c.toString())&&(e.set("days",c.toString()),i({pathname:s.pathname,search:`?${e.toString()}`}))},[c,e,s,i]),b(()=>{let t=!0;const r=a;Object.values(n).forEach(o=>{const m=e.get(l(o));m?(t=!1,r[o]=m.split(",")):r[o]=[]}),t||p(r)},[]),g(()=>{Object.values(n).forEach(t=>{const r=a[t].join(","),o=l(t);r.length&&e.get(o)!==r&&(e.set(o,r),i({pathname:s.pathname,search:`?${e.toString()}`}))})},[a,e,s,i,u]),{setFacetFilter:(t,r)=>{y(t,r);const o=l(t);if(r.length){const m=r.join(",");e.get(o)!==m&&e.set(o,m)}else e.delete(o);i({pathname:s.pathname,search:`?${e.toString()}`})},getFacetFilter:t=>a?a[t]:[],clearFacetFilters:()=>{F(f),p(h()),e.delete("days"),Object.values(n).forEach(t=>{e.delete(l(t))}),i({pathname:s.pathname,search:`?${e.toString()}`})},facetFilters:a,numberOfDays:c,setNumberOfDays:F}};export{M as useFacetFilters};
2
2
  //# sourceMappingURL=useFacetFilters.esm.js.map
@@ -1,6 +1,6 @@
1
- import{dump as a}from"js-yaml";const r=e=>{const t={ordinal:e.ordinal,checks:e.checks};return e.name&&(t.name=e.name),e.description&&(e.description=e.description),t},i=(e,t)=>{const n=new Blob([e],{type:"text/plain"}),s=window.document.createElement("a");s.href=window.URL.createObjectURL(n),s.download=t,s.click(),s.remove()},o=e=>{const t={id:e.id,name:e.name,ownerEntityRef:e.ownerEntityRef,levels:e.levels.map(r)};e.description&&(t.description=e.description),e.documentationURL&&(t.documentationURL=e.documentationURL),e.filter&&(t.filter=e.filter);const n=`# Exported YAML Track. You can rename the track id if needed.
1
+ import{dump as a}from"js-yaml";const r=e=>{const t={ordinal:e.ordinal,checks:e.checks};return e.name&&(t.name=e.name),e.description&&(e.description=e.description),t},i=(e,t)=>{const n=new Blob([e],{type:"text/plain"}),s=window.document.createElement("a");s.href=window.URL.createObjectURL(n),s.download=t,s.click(),s.remove()},c=e=>{const t={id:e.id,name:e.name,ownerEntityRef:e.ownerEntityRef,levels:e.levels.map(r)};e.description&&(t.description=e.description),e.documentationURL&&(t.documentationURL=e.documentationURL),e.filter&&(t.filter=e.filter);const n=`# Exported YAML Track. You can rename the track id if needed.
2
2
  # Please ensure you have also exported the associated checks and that the ids match.
3
- `+a(t);return i(n,`track-${e.id}.yaml`),n},c=e=>{const t={id:e.id,rule:e.rule};e.ownerEntityRef&&(t.ownerEntityRef=e.ownerEntityRef),e.name&&(t.name=e.name),e.description&&(t.description=e.description),e.filter&&(t.filter=e.filter),e.warning&&(t.warning=e.warning),e.passedMessage&&(t.passedMessage=e.passedMessage),e.failedMessage&&(t.failedMessage=e.failedMessage),e.passedMessage&&(t.passedMessage=e.passedMessage);const n=`# Exported YAML Check. You can rename the check id if needed.
3
+ `+a(t);return i(n,`track-${e.id}.yaml`),n},d=e=>{const t={id:e.id,rule:e.rule};e.ownerEntityRef&&(t.ownerEntityRef=e.ownerEntityRef),e.name&&(t.name=e.name),e.description&&(t.description=e.description),e.filter&&(t.filter=e.filter),e.warning&&(t.warning=e.warning),e.passedMessage&&(t.passedMessage=e.passedMessage),e.failedMessage&&(t.failedMessage=e.failedMessage),e.passedMessage&&(t.passedMessage=e.passedMessage),e.schedule&&(t.schedule=e.schedule);const n=`# Exported YAML Check. You can rename the check id if needed.
4
4
  # Please ensure the ids match in the associated tracks.
5
- `+a(t);return i(n,`check-${e.id}.yaml`),n};export{c as exportCheck,o as exportTrack};
5
+ `+a(t);return i(n,`check-${e.id}.yaml`),n};export{d as exportCheck,c as exportTrack};
6
6
  //# sourceMappingURL=export.esm.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spotify/backstage-plugin-soundcheck",
3
3
  "description": "Ensure quality, reliability and alignment of software development with codified checks and guidance.",
4
- "version": "0.12.10",
4
+ "version": "0.13.0",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://backstage.spotify.com",
7
7
  "main": "./dist/index.esm.js",
@@ -46,12 +46,12 @@
46
46
  "dependencies": {
47
47
  "@backstage/catalog-client": "^1.6.5",
48
48
  "@backstage/catalog-model": "^1.5.0",
49
- "@backstage/core-compat-api": "^0.2.6",
50
- "@backstage/core-components": "^0.14.8",
49
+ "@backstage/core-compat-api": "^0.2.7",
50
+ "@backstage/core-components": "^0.14.9",
51
51
  "@backstage/core-plugin-api": "^1.9.3",
52
- "@backstage/frontend-plugin-api": "^0.6.6",
53
- "@backstage/plugin-catalog-react": "^1.12.1",
54
- "@backstage/plugin-permission-react": "^0.4.23",
52
+ "@backstage/frontend-plugin-api": "^0.6.7",
53
+ "@backstage/plugin-catalog-react": "^1.12.2",
54
+ "@backstage/plugin-permission-react": "^0.4.24",
55
55
  "@backstage/types": "^1.1.1",
56
56
  "@date-io/luxon": "^1.0.0",
57
57
  "@hookform/resolvers": "^3.3.2",
@@ -59,8 +59,8 @@
59
59
  "@material-ui/icons": "^4.9.1",
60
60
  "@material-ui/lab": "4.0.0-alpha.61",
61
61
  "@material-ui/pickers": "3.3.11",
62
- "@spotify/backstage-plugin-core": "^0.7.2",
63
- "@spotify/backstage-plugin-soundcheck-common": "^0.13.3",
62
+ "@spotify/backstage-plugin-core": "^0.7.3",
63
+ "@spotify/backstage-plugin-soundcheck-common": "^0.13.4",
64
64
  "@tanstack/react-query": "^4.6.1",
65
65
  "@types/react-csv": "^1.1.6",
66
66
  "@uiw/react-md-editor": "3.20.10",
@@ -91,19 +91,19 @@
91
91
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
92
92
  },
93
93
  "devDependencies": {
94
- "@backstage/cli": "^0.26.9",
95
- "@backstage/core-app-api": "^1.12.6",
96
- "@backstage/dev-utils": "^1.0.33",
94
+ "@backstage/cli": "^0.26.11",
95
+ "@backstage/core-app-api": "^1.14.0",
96
+ "@backstage/dev-utils": "^1.0.35",
97
97
  "@backstage/e2e-test-utils": "^0.1.1",
98
- "@backstage/frontend-test-utils": "^0.1.8",
99
- "@backstage/test-utils": "^1.5.6",
98
+ "@backstage/frontend-test-utils": "^0.1.10",
99
+ "@backstage/test-utils": "^1.5.8",
100
100
  "@graphql-codegen/cli": "^5.0.0",
101
101
  "@graphql-codegen/typescript": "^4.0.0",
102
102
  "@graphql-codegen/typescript-graphql-request": "^6.0.0",
103
103
  "@graphql-codegen/typescript-operations": "^4.0.0",
104
104
  "@playwright/test": "^1.32.3",
105
- "@sp4b-dev/test-utils": "^0.0.4",
106
- "@spotify/backstage-plugin-core-common": "^0.5.13",
105
+ "@sp4b-dev/test-utils": "^0.0.5",
106
+ "@spotify/backstage-plugin-core-common": "^0.5.14",
107
107
  "@testing-library/jest-dom": "^6.0.0",
108
108
  "@testing-library/react": "^14.0.0",
109
109
  "@testing-library/user-event": "^14.0.0",
@@ -1,2 +0,0 @@
1
- import{Typography as n}from"@material-ui/core";import{makeStyles as c}from"@material-ui/core/styles";import e from"react";import{DraggableChip as o}from"../../DraggableChip/DraggableChip.esm.js";const l=c(a=>({sectionLabel:{margin:a.spacing(2,0)},chipContainer:{display:"flex",flexDirection:"column",fontWeight:"bold",fontSize:a.typography.pxToRem(16),color:a.palette.grey[600],"& .Mui-disabled":{opacity:1}}})),m=({campaign:a})=>{const t=l(),r=a.track?.levels?.[0].checks??[];return e.createElement(e.Fragment,null,e.createElement(n,{color:"textPrimary",variant:"h5",className:t.sectionLabel},"Campaign Checks"),e.createElement("div",{className:t.chipContainer},r.length?r.map(i=>e.createElement(o,{key:i.id,chip:i,disabled:!0})):e.createElement(n,{variant:"body1",color:"textSecondary",style:{alignSelf:"center"}},"There are no checks for this campaign.")))};export{m as CampaignChecks};
2
- //# sourceMappingURL=CampaignChecks.esm.js.map
@@ -1,2 +0,0 @@
1
- import{Grid as a}from"@material-ui/core";import{makeStyles as p}from"@material-ui/core/styles";import e from"react";import{DndProvider as c}from"react-dnd";import{HTML5Backend as s}from"react-dnd-html5-backend";import{useParams as l}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as g}from"../../../hooks/useNavigateBack.esm.js";import{useGetCampaign as d}from"../../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as f}from"../../../routes.esm.js";import{EmptyCampaignState as E}from"../../EmptyState/CampaignEmptyState.esm.js";import{FullScreenDialog as C}from"../../FullScreenDialog/FullScreenDialog.esm.js";import{Loading as u}from"../../TechHealth/Loading/Loading.esm.js";import{CampaignChecks as x}from"./CampaignChecks.esm.js";import{CampaignDetails as S}from"./CampaignDetails.esm.js";import{CampaignMilestones as k}from"./CampaignMilestones.esm.js";import{CampaignProgress as y}from"./CampaignProgress.esm.js";const D=p(t=>({root:{flexGrow:1,padding:t.spacing(2)},progressSection:{minHeight:350,fontSize:t.typography.body1.fontSize}})),P=()=>{const t=D(),{campaignId:r}=l(),{data:o,isLoading:i}=d(r??""),m=o?.edges?.[0]?.node,[n]=g(f);return i?e.createElement("div",{"data-testid":"loading-indicator"},e.createElement(u,null)):m?e.createElement(C,{title:"Campaign Details",open:!0,handleClose:n},e.createElement(c,{backend:s},e.createElement(a,{container:!0,className:t.root,spacing:3,direction:"column"},e.createElement(a,{item:!0,xs:12},e.createElement(S,{campaign:m})),e.createElement(a,{item:!0,xs:6},e.createElement(x,{campaign:m})),e.createElement(a,{item:!0,xs:12,className:t.progressSection},e.createElement(y,{campaign:m})),e.createElement(a,{item:!0,xs:12},e.createElement(k,{campaign:m}))))):e.createElement(E,null)};export{P as CampaignDetailsPage};
2
- //# sourceMappingURL=CampaignDetailsPage.esm.js.map
@@ -1,2 +0,0 @@
1
- import{Typography as n}from"@material-ui/core";import{makeStyles as C}from"@material-ui/core/styles";import e from"react";import{useGetCampaignProgress as P}from"../../../hooks/campaigns/useGetCampaignProgress.esm.js";import"../../Pagination/Pagination.esm.js";import{useCursorPagination as f,CursorPagination as b}from"../../Pagination/CursorPagination.esm.js";import{ResultsTableSkeleton as v}from"../../ResultsTable/skeletons/ResultsTableSkeleton.esm.js";import{CampaignResultsTable as S}from"./CampaignResultsTable.esm.js";const i=C(r=>({sectionLabel:{margin:r.spacing(2,0)},paginationContainer:{margin:r.spacing(0,0,0,-4)}})),o=25,t=()=>{const r=i();return e.createElement(n,{variant:"h5",className:r.sectionLabel,color:"textPrimary"},"Campaign Progress")},k=({campaign:r})=>{const m=i(),{cursor:s,pageSize:l,...c}=f({defaultPageSize:o,label:"entitiesPerPage"}),{data:a,isLoading:g,isError:p}=P(r.id,l,s);if(g)return e.createElement(e.Fragment,null,e.createElement(t,null),e.createElement("div",{"data-testid":"progress-indicator"},e.createElement(v,{checkCount:1,levelCount:1})));if(p)return e.createElement(e.Fragment,null,e.createElement(t,null),e.createElement(n,{color:"error"},"Failed to load campaign progress."));if(!a)return e.createElement(e.Fragment,null,e.createElement(t,null),e.createElement(n,null,"No campaign progress available."));const{totalCount:u,endCursor:E,prevCursor:d}=a;return e.createElement(e.Fragment,null,e.createElement(t,null),e.createElement(S,{results:a,campaignTrackId:r.track.id}),e.createElement("div",{className:m.paginationContainer},e.createElement(b,{...c,totalCount:u,defaultPageSize:o,endCursor:E,prevCursor:d,pageSize:l,rowsPerPageOptions:[o],labelRowsPerPage:"Entities per page:"})))};export{k as CampaignProgress};
2
- //# sourceMappingURL=CampaignProgress.esm.js.map
@@ -1,2 +0,0 @@
1
- import{useRouteRef as R}from"@backstage/core-plugin-api";import{entityRouteRef as C}from"@backstage/plugin-catalog-react";import{makeStyles as b,Grid as k}from"@material-ui/core";import m from"react";import{VariableSizeGrid as T}from"react-window";import{ResultState as w}from"../../../graphql/generated/index.esm.js";import{checkTitleCell as y,checkResultCell as S,entityHeaderCell as p,getCellRenderer as A}from"../../ResultsTable/virtualized/Cell.esm.js";import{CellWidths as u,calculateTableHeight as H,calculateTableWidth as x,RowHeights as E,findLongestRefTitle as N,calculateHeightForRefTitle as W}from"../../ResultsTable/virtualized/virtualizedTableUtils.esm.js";const g=25,v=(r,a,c,n)=>{const i=[];for(const{check:e,results:l,totalCount:s,totalPassing:o}of r)i.push({height:E.check,cells:[y(e.name,{PASSED:o,FAILED:s-o}),...a.flatMap(h=>{if(h===void 0)return[];const f=l.find(({entityRef:d})=>d===h)?.result??w.NotApplicable;return[S(n,e,h,f,c)]})]});const t=N(a??[]);return i.push({height:Math.min(W(t.length??1),220),cells:[p(""),...a.map(e=>p(e||""))]}),i},D=b(r=>({table:{backgroundColor:r.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left"}})),F=({results:r,campaignTrackId:a})=>{const c=D(),n=R(C),{checks:i,entityRefs:t}=r,e=t.length>=g?t:[...t,...Array.from({length:g-t.length},()=>{})],l=v(i,e,n,a),s=A(l);return m.createElement(k,{item:!0,xs:12},m.createElement(T,{style:{overflow:"auto hidden"},className:c.table,columnCount:e.length+1,columnWidth:o=>o===0?u.programTitle:u.checkResult,rowCount:l.length,rowHeight:o=>l[o].height,height:H(l),width:x(e.length+1)},s))};export{F as CampaignResultsTable};
2
- //# sourceMappingURL=CampaignResultsTable.esm.js.map
@@ -1,2 +0,0 @@
1
- import{useApi as M,featureFlagsApiRef as W}from"@backstage/core-plugin-api";import{usePermission as U}from"@backstage/plugin-permission-react";import{makeStyles as q,Grid as n,Button as z}from"@material-ui/core";import{soundcheckCampaignCreatePermission as J}from"@spotify/backstage-plugin-soundcheck-common";import e,{useState as i,useEffect as K}from"react";import Q from"react-use/lib/useDebounce";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as V}from"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{useGetCampaignOwners as X}from"../../../hooks/campaigns/useGetCampaignOwners.esm.js";import{useGetCampaigns as Y}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import{FilterDefault as c}from"../../../utils/filters.esm.js";import{EmptyState as Z}from"../../EmptyState/EmptyState.esm.js";import{EmptyCampaignState as _}from"../../EmptyState/CampaignEmptyState.esm.js";import{Pagination as $}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ee}from"../../SearchFilters/SearchFilters.esm.js";import{CampaignNoResults as E}from"../MutateCampaignsViews/types/CampaignFormTypes.esm.js";import{CampaignsOverviewSkeleton as ae}from"../skeletons/CampaignsOverviewSkeleton.esm.js";import{CampaignSummaryCard as te}from"./CampaignSummaryCard.esm.js";import re from"./useArchiveConfirmationModal.esm.js";const ie=q(t=>({headerButtons:{display:"flex",gap:t.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:t.spacing(0,0,1)},container:{padding:t.spacing(3),gap:t.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:t.spacing(1.5),paddingBottom:t.spacing(1.5)}})),ne=({campaignsPerPage:t,currentCursor:S})=>{const o=ie(),[d,v]=i(S),[m,w]=i(""),[x,y]=i(""),[u,b]=i(c.Alpha),[f,A]=i(c.Owner),[h,B]=i(c.Status),{data:N,isLoading:F}=X();Q(()=>{y(m)},500,[m]);const{setShowAddModal:k}=V(),{loading:I,allowed:O}=U({permission:J}),{data:r,isLoading:l}=Y({ids:void 0,first:t,after:d,orderAlphabetical:u,searchByOwner:f,searchByName:x,searchByStatus:h}),[p,L]=i(r),g=p?.edges.map(a=>a.node),[C,G]=i([]),P=M(W),R=!P.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-campaigns")||P.isActive("soundcheck-enable-campaigns"),T=!O||!R,D=a=>{b(a.target.value)},j=a=>{A(a.target.value)},H=a=>{B(a.target.value)};if(K(()=>{r&&L(()=>({totalCount:r.totalCount,edges:r.edges,pageInfo:{startCursor:r.pageInfo.startCursor,endCursor:r.pageInfo.endCursor,hasNextPage:r?.pageInfo.hasNextPage??!1,hasPreviousPage:r?.pageInfo.hasPreviousPage??!1}}))},[r]),!l&&!g)return e.createElement(_,null);let s;return l?s=e.createElement(ae,null):g?.length?s=g.map(a=>e.createElement(n,{key:a.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result"},e.createElement(re,null,e.createElement(te,{campaign:a})))):s=e.createElement(n,{xs:12,item:!0,role:"listitem","aria-label":"result"},e.createElement(Z,{title:E.title,description:E.description})),e.createElement(n,{container:!0,direction:"row",className:o.container},e.createElement(n,{container:!0,className:o.header},e.createElement(ee,{searchPlaceholder:"Search Available Campaigns",isLoading:l||F,searchTerm:m,setSearchTerm:w,filterAlpha:u,handleAlphabeticalFilterChange:D,filterOwner:f,handleOwnerFilterChange:j,filterStatus:h,handleStatusFilterChange:H,owners:N}),e.createElement(n,{item:!0,xs:2,className:o.headerButtons},!I&&e.createElement(z,{disabled:T,variant:"contained",color:"primary",onClick:()=>k(!0),className:o.createButton},"Create Campaign"))),e.createElement(n,{container:!0,spacing:4,role:"list","aria-label":"campaigns"},s),(p?.pageInfo.hasNextPage||C?.length>0)&&e.createElement(n,{item:!0,xs:12},e.createElement($,{response:p,listingsPerPage:t,cursor:d,setCursor:v,prevCursors:C,setPrevCursors:G,labelPerPageDropdown:"Campaigns Per Page:",urlRoute:"campaigns?campaignsPerPage="})))};export{ne as CampaignListPage};
2
- //# sourceMappingURL=CampaignListPage.esm.js.map
@@ -1,2 +0,0 @@
1
- import m,{useEffect as p}from"react";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as n}from"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCreateCampaign as s}from"../../../hooks/campaigns/useCreateCampaign.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{FullScreenDialog as c}from"../../FullScreenDialog/FullScreenDialog.esm.js";import{CampaignForm as l}from"./CampaignForm.esm.js";const d=()=>{const{hideModal:o,showAddModal:r,setIsLoading:t}=n(),{mutateAsync:i,isLoading:e}=s();return p(()=>{t(e)},[t,e]),m.createElement(c,{title:"Create a Campaign",open:r,handleClose:o},m.createElement(l,{onSave:async a=>{await i(a,{onSuccess:()=>o()})},onCancel:o}))};export{d as AddCampaignView};
2
- //# sourceMappingURL=AddCampaignView.esm.js.map
@@ -1,2 +0,0 @@
1
- import{Typography as k}from"@material-ui/core";import e from"react";import{Controller as y}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as v}from"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import F from"../../../hooks/useFeatureFlag.esm.js";import{formStyles as L}from"../../../utils/formStyles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{emptyFilters as D}from"../../Filter/types.esm.js";import{FilterComponent as M}from"../../Filter/FilterComponent.esm.js";import{FormStepper as A}from"../../FormStepper/FormStepper.esm.js";import{CampaignFormDescription as N}from"./CampaignFormDescription.esm.js";import{useCampaignForm as O}from"./hooks/useCampaignForm.esm.js";import{CampaignDetailsStep as x}from"./Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js";import{CampaignTrackStep as T}from"./Steps/CampaignTrackStep.esm.js";import{CampaignMilestonesStep as I}from"./Steps/CampaignMilestonesStep.esm.js";import{StepNameMapping as R}from"./types/CampaignFormTypes.esm.js";import{CAMPAIGN_FIELDS as V}from"./utils/campaignFormUtils.esm.js";var c=(t=>(t.Details="Enter campaign details",t.Checks="Add checks",t.Entities="Choose the affected entities (Optional)",t.Milestones="Set campaign milestones",t))(c||{});const B=({onSave:t,onCancel:d,selectedCampaign:a})=>{const g=L(),{isLoading:o,isReadOnly:f}=v(),{control:i,handleSubmit:n,errors:r,trigger:C,getValues:S,onSubmit:m,checkChips:h,checksLoading:b}=O(t,a),s=S(),u=s.detailsStep.startDate;F("debugMode")&&console.log(s);const l=[{label:"Enter campaign details",content:()=>e.createElement(x,{control:i,isLoading:o,disabled:!1,errors:r.detailsStep,startDate:u})},{label:"Add checks",content:()=>e.createElement(T,{control:i,isLoading:o||b,disabled:!1,errors:r.tracksStep,checkChips:h})},{label:"Choose the affected entities (Optional)",content:()=>e.createElement("div",{className:g.filters},e.createElement(k,{variant:"body2"},V.filter.description),e.createElement(y,{name:"filtersStep",control:i,render:({field:p})=>e.createElement(M,{value:p.value??D(),onChange:p.onChange})}))},{label:"Set campaign milestones",content:()=>e.createElement(I,{control:i,isLoading:o,disabled:!1,errors:r.milestonesStep})}],E=a?[...Array(l.length).keys()]:[0];return e.createElement("form",{onSubmit:n(m)},e.createElement(A,{onClose:d,handleSubmit:n,trigger:C,onSubmit:m,initialVisited:E,stepNameMap:R,steps:l,isLoading:o,isReadOnly:f,saveButtonText:"Save Campaign",detailsComponent:e.createElement(N,null)}))};export{B as CampaignForm,c as CampaignStepLabel};
2
- //# sourceMappingURL=CampaignForm.esm.js.map
@@ -1,2 +0,0 @@
1
- import{useRouteRef as i}from"@backstage/core-plugin-api";import{makeStyles as r,Typography as a,Button as m}from"@material-ui/core";import e from"react";import{useNavigate as s}from"react-router-dom";import{techHealthRouteRef as l}from"../../../routes.esm.js";const c=r(t=>({container:{display:"flex",gap:t.spacing(1),flexDirection:"column"},link:{fontWeight:"bold",padding:0,color:t.palette.text.primary,"&:hover":{textDecoration:"underline",transform:"none"}},list:{marginTop:0},listItem:{marginBottom:t.spacing(1)}})),p=()=>{const t=c(),n=i(l),o=s();return e.createElement("div",{className:t.container},e.createElement(a,{variant:"h6"},"Creating campaigns"),e.createElement(a,{variant:"body1"},"A Campaign is a focused short term initiative."),e.createElement(a,{variant:"body1"},"You can create campaigns, assign them to teams that own software components, and track them towards a completion milestone via the"," ",e.createElement(m,{variant:"text",color:"primary",onClick:()=>o(n()),className:t.link},"Tech Health")," ","page."),e.createElement(a,{variant:"body1"},"Some use cases for campaigns include:"),e.createElement("div",null,e.createElement("ul",{className:t.list},e.createElement("li",{className:t.listItem},e.createElement(a,{variant:"body1"},"When your organization wants to upgrade Spring libraries to use a specific version of Spring Boot.")),e.createElement("li",null,e.createElement(a,{variant:"body1"},"When your organization wants to remove unneeded data endpoints to save costs.")))))};export{p as CampaignFormDescription};
2
- //# sourceMappingURL=CampaignFormDescription.esm.js.map
@@ -1,2 +0,0 @@
1
- import{useRouteRef as l}from"@backstage/core-plugin-api";import e,{useEffect as u}from"react";import{useNavigate as d,useParams as C}from"react-router-dom";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as E}from"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as L}from"../../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCampaign as R}from"../../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as S}from"../../../routes.esm.js";import{EmptyCampaignState as y}from"../../EmptyState/CampaignEmptyState.esm.js";import{FullScreenDialog as F}from"../../FullScreenDialog/FullScreenDialog.esm.js";import{Loading as v}from"../../TechHealth/Loading/Loading.esm.js";import{CampaignForm as w}from"./CampaignForm.esm.js";const x=()=>{const t=d(),o=l(S),{campaignId:p}=C(),{setIsLoading:m}=E(),{mutateAsync:s,isLoading:a}=L(),{data:g,isLoading:r}=R(p??""),i=g?.edges?.[0]?.node;if(u(()=>m(a),[m,a]),!r&&!i)return e.createElement(y,null);const c=async f=>{await s(f,{onSuccess:()=>t(o())})},n=()=>t(o());return e.createElement(F,{title:"Update Campaign",open:!0,handleClose:n},r?e.createElement(v,null):e.createElement(w,{onSave:c,onCancel:n,selectedCampaign:i}))};export{x as EditCampaignView};
2
- //# sourceMappingURL=EditCampaignView.esm.js.map
@@ -1,2 +0,0 @@
1
- import e from"react";import{CampaignDescriptionField as n}from"./CampaignDescriptionField.esm.js";import{CampaignNameField as l}from"./CampaignNameField.esm.js";import{CampaignOwnerField as m}from"./CampaignOwnerField.esm.js";import{CampaignScheduleField as d}from"./CampaignScheduleField/CampaignScheduleField.esm.js";import{CampaignSupportChannelField as s}from"./CampaignSupportChannelField.esm.js";const p=({control:r,errors:o,isLoading:i,disabled:a,startDate:t})=>e.createElement(e.Fragment,null,e.createElement(l,{control:r,errors:o,isLoading:i,disabled:a}),e.createElement(n,{control:r,errors:o,isLoading:i,disabled:a}),e.createElement(m,{control:r,errors:o,isLoading:i,disabled:a}),e.createElement(s,{control:r,errors:o,isLoading:i,disabled:a}),e.createElement(d,{control:r,errors:o,isLoading:i,disabled:a,startDate:t}));export{p as CampaignDetailsStep};
2
- //# sourceMappingURL=CampaignDetailsStep.esm.js.map
@@ -1,2 +0,0 @@
1
- import{makeStyles as f,Typography as l}from"@material-ui/core";import{uniqBy as u}from"lodash";import e from"react";import"../../../../../contexts/TrackFormContext.esm.js";import"../../../../../contexts/CheckFormContext.esm.js";import"../../../../../contexts/CampaignFormContext.esm.js";import{useLoggedInUser as g}from"../../../../../contexts/UserProvider.esm.js";import{FormControlledSelect as E}from"../../../../FormControlledSelect/FormControlledSelect.esm.js";import{useOptions as y}from"../../../../GroupSelector/useOptions.esm.js";import{CAMPAIGN_FIELDS as v}from"../../utils/campaignFormUtils.esm.js";const h=f(t=>({helperText:{marginLeft:0},selectField:{display:"flex",flexDirection:"column",gap:t.spacing(1),marginBottom:t.spacing(2)},fieldContainer:{width:"250px"}})),w=({control:t,errors:m,isLoading:s,disabled:p})=>{const o=h(),{owner:i}=v.details,{options:d}=y(),{user:c,userEntityRef:a}=g();let r=u(d?.map(n=>({value:n.ref,label:n.name})),"value");return a&&(r=[{value:a,label:c?.metadata.name},...r]),e.createElement("div",{className:o.selectField},e.createElement("header",null,e.createElement(l,{variant:"subtitle2"},i.name),e.createElement(l,{variant:"caption"},i.description)),e.createElement("div",{className:o.fieldContainer},e.createElement(E,{name:"detailsStep.ownerEntityRef",control:t,options:r,placeholder:"Owner",disabled:p||s,style:{width:"100%"},helperText:m?.ownerEntityRef?.message??void 0})))};export{w as CampaignOwnerField};
2
- //# sourceMappingURL=CampaignOwnerField.esm.js.map
@@ -1,2 +0,0 @@
1
- import h from"@date-io/luxon";import{makeStyles as N,Typography as m}from"@material-ui/core";import{KeyboardDatePicker as C}from"@material-ui/pickers/DatePicker";import{MuiPickersUtilsProvider as b}from"@material-ui/pickers/MuiPickersUtilsProvider";import e,{useState as i}from"react";import{Controller as D}from"react-hook-form";import{CAMPAIGN_FIELDS as k}from"../../../utils/campaignFormUtils.esm.js";import{EndDateChips as F}from"./EndDateChips.esm.js";const S=N(t=>({helperText:{margin:t.spacing(.5,0)},selectFieldGroup:{display:"flex",flexDirection:"column",gap:t.spacing(2),marginBottom:t.spacing(2)},selectField:{display:"flex",flexDirection:"column",gap:t.spacing(1),padding:0},scheduleTitle:{fontWeight:"bold"},fieldContainer:{width:"250px"},select:{width:"100%",height:"100%",paddingRight:t.spacing(.5),"& button":{paddingTop:0,paddingBottom:0,"&:hover":{backgroundColor:"transparent"}}},dialog:{padding:0,"& [class*=MuiToolbar-root]":{backgroundColor:t.palette.background.paper,borderBottom:`1px solid ${t.palette.divider}`,"& [class*=MuiPickersToolbarText]":{color:t.palette.text.primary}},"& [class*=MuiDialogActions-root]":{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(1),"& [class*=MuiButton-label]":{color:t.palette.text.primary}}}})),O=({control:t,errors:o,isLoading:n,disabled:s,startDate:x})=>{const a=S(),[v,d]=i(!1),[y,p]=i(!1),[E,T]=i(x),[P,g]=i(void 0),{startingDate:u,endingDate:f}=k.details;return e.createElement("div",{className:a.selectFieldGroup},e.createElement(m,{variant:"subtitle2",className:a.scheduleTitle},"Campaign schedule"),e.createElement("div",{className:a.selectField},e.createElement(m,{variant:"subtitle2"},u.name),e.createElement("div",{className:a.fieldContainer},e.createElement(D,{control:t,name:"detailsStep.startDate",render:({field:r})=>{const{ref:M,...c}=r;return e.createElement(b,{utils:h},e.createElement(C,{inputRef:r.ref,...c,format:"MMMM dd, yyyy",autoOk:!0,FormHelperTextProps:{className:a.helperText},inputVariant:"outlined",className:a.select,error:!!o?.startDate,helperText:o?.startDate?.message??void 0,onChange:l=>{T(l),r.onChange(l)},open:v,disabled:n||s,DialogProps:{PaperProps:{className:a.dialog}},margin:"dense",size:"small",InputProps:{readOnly:!0,placeholder:u.placeholder,onClick:()=>d(!0),className:a.select},onOpen:()=>d(!0),onClose:()=>d(!1)}))}}))),e.createElement("div",{className:a.selectField},e.createElement(m,{variant:"subtitle2"},f.name),e.createElement("div",{className:a.fieldContainer},e.createElement(D,{name:"detailsStep.targetCompletionDate",control:t,render:({field:r})=>{const{ref:M,...c}=r;return e.createElement(b,{utils:h},e.createElement(C,{inputRef:r.ref,...c,disablePast:!0,format:"MMMM dd, yyyy",autoOk:!0,FormHelperTextProps:{className:a.helperText},inputVariant:"outlined",className:a.select,error:!!o?.targetCompletionDate,helperText:o?.targetCompletionDate?.message??void 0,onChange:l=>{r.onChange(l)},open:y,disabled:n||s,DialogProps:{PaperProps:{className:a.dialog}},InputProps:{readOnly:!0,placeholder:f.placeholder,onClick:()=>p(!0),className:a.select,margin:"dense"},margin:"dense",onOpen:()=>{g(void 0),p(!0)},onClose:()=>p(!1),ToolbarComponent:l=>e.createElement(F,{props:l,isLoading:n,disabled:!!s,startDate:E,selectedDuration:P,setSelectedDuration:g})}))}}))))};export{O as CampaignScheduleField};
2
- //# sourceMappingURL=CampaignScheduleField.esm.js.map
@@ -1,2 +0,0 @@
1
- import{makeStyles as p,Typography as o}from"@material-ui/core";import e from"react";import{FormTextInput as m}from"../../../../FormTextInput/FormTextInput.esm.js";import{CAMPAIGN_FIELDS as s}from"../../utils/campaignFormUtils.esm.js";const d=p(t=>({fieldContainer:{width:"250px"},container:{marginBottom:t.spacing(2)}})),c=({control:t,errors:a,isLoading:i,disabled:l})=>{const n=d(),{support:r}=s.details;return e.createElement("div",{className:n.container},e.createElement(o,{variant:"subtitle2"},r.name),e.createElement(o,{variant:"caption"},r.description),e.createElement("div",{className:n.fieldContainer},e.createElement(m,{name:"detailsStep.supportChannel",control:t,placeholder:r.placeholder,disabled:l||i,variant:"outlined",margin:"dense",error:a?.supportChannel,helperText:a?.supportChannel?.message??void 0})))};export{c as CampaignSupportChannelField};
2
- //# sourceMappingURL=CampaignSupportChannelField.esm.js.map
@@ -1,2 +0,0 @@
1
- import{makeStyles as b,Divider as y,Grid as p,Typography as i,TextField as E}from"@material-ui/core";import N from"@material-ui/icons/Remove";import e from"react";import{useFieldArray as C,Controller as u}from"react-hook-form";import{NoBorderButton as x}from"../../../NoBorderButton/NoBorderButton.esm.js";import{CAMPAIGN_FIELDS as F}from"../utils/campaignFormUtils.esm.js";const S=b(r=>({milestoneHeader:{display:"flex",alignItems:"center",marginBottom:r.spacing(1)},divider:{margin:"20px 0"},helperText:{marginLeft:0},selectContainer:{width:"250px"},section:{marginBottom:r.spacing(2)}})),R=({control:r,errors:n,isLoading:o,disabled:l})=>{const a=S(),{name:s,description:c,passrate:d}=F.milestones,{fields:f,append:g,remove:h}=C({control:r,name:"milestonesStep.milestones"}),v=()=>g({name:"",description:"",passRate:"0"});return e.createElement(e.Fragment,null,f.map((T,t)=>e.createElement("div",{key:T.id},t!==0&&e.createElement(y,{className:a.divider}),e.createElement(p,{container:!0,spacing:1,className:a.milestoneHeader},e.createElement(p,{item:!0,xs:!0},e.createElement(i,{variant:"subtitle2"},s.name),e.createElement(i,{variant:"caption"},s.description),e.createElement(u,{name:`milestonesStep.milestones.${t}.name`,control:r,defaultValue:"",render:({field:m})=>e.createElement(E,{...m,FormHelperTextProps:{className:a.helperText},variant:"outlined",fullWidth:!0,placeholder:s.placeholder,disabled:o||l,type:"text",margin:"dense",error:!!n?.milestones?.[t]?.name,helperText:n?.milestones?.[t]?.name?.message??s.helperText})})),t!==0&&!l&&e.createElement(p,{item:!0},e.createElement(x,{label:"Remove Milestone",startIcon:e.createElement(N,null),onClick:()=>h(t),disabled:l}))),e.createElement("div",{className:a.section},e.createElement(i,{variant:"subtitle2"},c.name),e.createElement(i,{variant:"caption"},c.description),e.createElement(u,{name:`milestonesStep.milestones.${t}.description`,control:r,defaultValue:"",render:({field:m})=>e.createElement(E,{...m,FormHelperTextProps:{className:a.helperText},variant:"outlined",multiline:!0,minRows:4,fullWidth:!0,placeholder:c.placeholder,disabled:o||l,type:"text",margin:"dense",error:!!n?.milestones?.[t]?.description,helperText:n?.milestones?.[t]?.description?.message})})),e.createElement("div",{className:a.section},e.createElement(i,{variant:"subtitle2"},d.name),e.createElement(i,{variant:"caption"},d.description),e.createElement("div",{className:a.selectContainer},e.createElement(u,{name:`milestonesStep.milestones.${t}.passRate`,control:r,defaultValue:"",render:({field:m})=>e.createElement(E,{...m,FormHelperTextProps:{className:a.helperText},variant:"outlined",fullWidth:!0,placeholder:d.placeholder,disabled:o||l,type:"number",margin:"dense",error:!!n?.milestones?.[t]?.passRate,helperText:n?.milestones?.[t]?.passRate?.message??void 0})}))))),e.createElement(x,{label:"Add Milestone",onClick:()=>v(),disabled:l}))};export{R as CampaignMilestonesStep};
2
- //# sourceMappingURL=CampaignMilestonesStep.esm.js.map
@@ -1,2 +0,0 @@
1
- import{makeStyles as E,FormControl as x,Typography as d,Grid as a}from"@material-ui/core";import{findIndex as b}from"lodash";import e,{useCallback as y}from"react";import{DndProvider as S}from"react-dnd";import{HTML5Backend as T}from"react-dnd-html5-backend";import{useFieldArray as v,Controller as D}from"react-hook-form";import N from"../../../../hooks/useFeatureFlag.esm.js";import{ChecksErrors as L}from"../../../ChecksErrors/ChecksErrors.esm.js";import{DroppableInput as M}from"../../../DroppableInput/DroppableInput.esm.js";import{ChecksSection as I}from"../../../TrackForm/Steps/LevelsStep/ChecksSection/ChecksSection.esm.js";const w=E(t=>({columnHeader:{display:"flex",justifyContent:"space-between",alignItems:"center"},subtitle:{color:t.palette.text.primary,marginLeft:"-16px"},helperText:{fontSize:t.typography.subtitle2.fontSize,color:t.palette.textSubtle,marginBottom:t.spacing(1)},levelsContainer:{marginTop:"0",flexDirection:"column"},errorText:{marginTop:t.spacing(3),marginLeft:t.spacing(-4)},formContainer:{width:"100%"}})),H=({control:t,disabled:i,isLoading:l,errors:c,checkChips:m})=>{const o=w(),{fields:n,remove:s,replace:h}=v({control:t,name:"tracksStep.checks",keyName:"key"});N("debugMode")&&(console.log(m),console.log(n));const g=new Set(n.flatMap(({id:r})=>r)),f=m.filter(r=>!g.has(r.id)),p=r=>{h([...n,r])},k=y(r=>{const u=b(n,C=>C.id===r.id);s(u)},[s,n]);return e.createElement(D,{control:t,name:"tracksStep.checks",render:()=>e.createElement(x,{error:!!c?.checks,disabled:i||l,variant:"outlined",className:o.formContainer},e.createElement(d,{className:o.helperText},"Drag or right-click on a check to add it to the Campaign."),e.createElement(a,{item:!0,xs:12},e.createElement(a,{container:!0,spacing:4},e.createElement(S,{backend:T},e.createElement(a,{item:!0,xs:5},e.createElement(I,{chips:f,isLoading:l,disabled:i,label:"Campaign Checks",onContextMenuAdd:p})),e.createElement(a,{item:!0,xs:7},e.createElement(a,{container:!0},e.createElement(a,{item:!0,xs:12,className:o.columnHeader},e.createElement(d,{variant:"subtitle1",className:o.subtitle},"Included Checks")),e.createElement(a,{container:!0,item:!0,spacing:5,className:o.levelsContainer},e.createElement(M,{chips:n,onDelete:k,onDrop:p,error:!!c?.checks,placeholder:"Drag and drop checks here to include them in this level",disabled:i}))),c?.checks&&e.createElement("div",{className:o.errorText},e.createElement(L,{checksErrors:c.checks})))))))})};export{H as CampaignTrackStep};
2
- //# sourceMappingURL=CampaignTrackStep.esm.js.map