@spotify/backstage-plugin-soundcheck 0.19.4 → 0.19.6

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 (53) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/alpha/integrations.esm.js +1 -1
  3. package/dist/api.esm.js +1 -1
  4. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  5. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  6. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  7. package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +1 -1
  8. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
  9. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  10. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  11. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  12. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  13. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
  14. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  15. package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
  16. package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +1 -1
  17. package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +1 -1
  18. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  19. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  20. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
  21. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +1 -1
  22. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  23. package/dist/components/CollectorPage/DependantCheckCard.esm.js +1 -1
  24. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  25. package/dist/components/DescriptionCell/DescriptionCell.esm.js +1 -1
  26. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
  27. package/dist/components/Menus/SimpleMenu.esm.js +1 -1
  28. package/dist/components/Menus/useCampaignActions.esm.js +1 -1
  29. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  30. package/dist/components/PageCustomActions/PageCustomActions.esm.js +1 -1
  31. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
  32. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +2 -0
  33. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +1 -1
  34. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  35. package/dist/components/TechInsights/SummaryTilesBUI.esm.js +1 -1
  36. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  37. package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +1 -1
  38. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
  39. package/dist/components/TechInsights/TechInsightsTableView.esm.js +1 -1
  40. package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
  41. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  42. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  43. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  44. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
  45. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  46. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
  47. package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +1 -1
  48. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  49. package/dist/hooks/filters/useFilters.esm.js +1 -1
  50. package/dist/routes.esm.js +1 -1
  51. package/dist/utils/tracks.esm.js +2 -0
  52. package/package.json +1 -1
  53. package/dist/components/RoutingPage/RoutingMainMenu.esm.js +0 -2
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as C}from"react/jsx-runtime";import{useApi as I,featureFlagsApiRef as re,useRouteRef as te}from"@backstage/core-plugin-api";import{usePermission as oe}from"@backstage/plugin-permission-react";import{makeStyles as ae,Button as B,Grid as a}from"@material-ui/core";import{soundcheckCheckCreatePermission as ie}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useMemo as se,useEffect as P}from"react";import{useNavigate as ce}from"react-router-dom";import ne from"react-use/lib/useDebounce";import{soundcheckApiRef as me}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as pe}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useGetCheckOwners as le}from"../../../hooks/checks/useGetCheckOwners.esm.js";import{useImportChecks as de}from"../../../hooks/checks/useImportChecks.esm.js";import{useLCPReporting as he}from"../../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ge}from"../../../hooks/useLoadTimeReporting.esm.js";import ue from"../../../images/no-results.svg";import{checkTemplatesRouteRef as fe}from"../../../routes.esm.js";import{exportChecks as ke}from"../../../utils/export.esm.js";import{FilterDefault as L}from"../../../utils/filters.esm.js";import{EmptyState as O}from"../../EmptyState/EmptyState.esm.js";import"../../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{ImportExportPanelDeprecated as Ce}from"../../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{Pagination as Pe}from"../../Pagination/Pagination.esm.js";import{SearchFilters as be}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as ve}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as xe}from"./CheckSummaryCard.esm.js";var T=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(T||{}),F=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(F||{});const ye=ae(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),Ae=({checksPerPage:e,currentCursor:E})=>{const[m,b]=i(E),[g,G]=i(""),[c,j]=i(L.Alpha),[n,D]=i(L.Owner),[p,H]=i(""),v=se(()=>({routeName:"soundcheck-checks",additionalAttributes:{checksPerPage:e,pageCursor:m||"",sortOrder:c||"",ownerFilter:n||"",nameSearch:p||""}}),[e,m,c,n,p]),{reportContentLoaded:x}=ge(v),{reporter:M}=he(v),l=ye(),{data:V,isLoading:u}=le();ne(()=>{H(g)},500,[g]);const{loading:y,allowed:W}=oe({permission:ie}),{data:o,isLoading:s}=pe({ids:void 0,first:e,after:m,orderAlphabetical:c,searchByOwner:n,searchByName:p}),[f,$]=i(o),d=f?.edges?.map(r=>r.node),[A,w]=i([]);P(()=>{b(void 0),w([])},[p,c,n]);const N=I(re),q=!N.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-check-creation")||N.isActive("soundcheck-enable-check-creation"),k=!W||!q,z=r=>{j(r.target.value)},J=r=>{D(r.target.value)};P(()=>{o&&$(()=>({totalCount:o.totalCount,edges:o.edges,pageInfo:{startCursor:o.pageInfo.startCursor,endCursor:o.pageInfo.endCursor,hasNextPage:o?.pageInfo.hasNextPage??!1,hasPreviousPage:o?.pageInfo.hasPreviousPage??!1}}))},[o]);const K=ce(),Q=te(fe),R=()=>K(Q()),U=I(me),{mutateAsync:X}=de(),Y=async r=>X(r),Z=async()=>{const r=await U.getChecks({orderAlphabetical:"asc"});return ke(r.edges.map(ee=>ee.node))},S=M?.getLCPValue();if(P(()=>{!s&&!u&&x({lcp:S})},[s,u,x,S]),!s&&!d)return t(O,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:ue,action:!y&&t(B,{disabled:k,variant:"contained",color:"primary",onClick:R,children:"Get started"})});let h;s?h=t(ve,{}):d?.length?h=d?.map(r=>t(a,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${r.id}`,children:t(xe,{check:r})},r.id)):h=t(a,{xs:12,item:!0,role:"listitem","aria-label":"result",children:t(O,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."})});const _=f?.pageInfo.hasNextPage||A?.length>0;return C(a,{container:!0,direction:"row",className:l.container,children:[C(a,{container:!0,className:l.header,children:[t(be,{searchPlaceholder:"Search Available Checks",isLoading:s||u,searchTerm:g,setSearchTerm:G,filterAlpha:c,handleAlphabeticalFilterChange:z,filterOwner:n,handleOwnerFilterChange:J,owners:V}),C(a,{item:!0,xs:4,className:l.headerButtons,children:[t(Ce,{resourceType:"check",disableImport:k,disableExport:s||!d?.length,onImport:Y,onExport:Z}),!y&&t(B,{disabled:k,variant:"contained",color:"primary",onClick:R,className:l.createButton,children:"Create Check"})]})]}),t(a,{container:!0,spacing:4,role:"list","aria-label":"checks",children:h}),_&&t(a,{item:!0,xs:12,children:t(Pe,{response:f,listingsPerPage:e,cursor:m,setCursor:b,prevCursors:A,setPrevCursors:w,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})})]})};export{T as CheckEmptyState,Ae as CheckListPage,F as CheckNoResults};
1
+ import{jsx as t,jsxs as C}from"react/jsx-runtime";import{useApi as I,featureFlagsApiRef as re,useRouteRef as te}from"@backstage/core-plugin-api";import{usePermission as oe}from"@backstage/plugin-permission-react";import{makeStyles as ae,Button as B,Grid as a}from"@material-ui/core";import{soundcheckCheckCreatePermission as ie}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useMemo as se,useEffect as P}from"react";import{useNavigate as ce}from"react-router-dom";import ne from"react-use/lib/useDebounce";import{soundcheckApiRef as me}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as pe}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useGetCheckOwners as le}from"../../../hooks/checks/useGetCheckOwners.esm.js";import{useImportChecks as de}from"../../../hooks/checks/useImportChecks.esm.js";import{useLCPReporting as he}from"../../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ge}from"../../../hooks/useLoadTimeReporting.esm.js";import ue from"../../../images/no-results.svg";import{checkTemplatesRouteRef as fe}from"../../../routes.esm.js";import{exportChecks as ke}from"../../../utils/export.esm.js";import{FilterDefault as L}from"../../../utils/filters.esm.js";import{EmptyState as O}from"../../EmptyState/EmptyState.esm.js";import"../../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{ImportExportPanelDeprecated as Ce}from"../../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{Pagination as Pe}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ve}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as be}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as xe}from"./CheckSummaryCard.esm.js";var T=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(T||{}),F=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(F||{});const ye=ae(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),Ae=({checksPerPage:e,currentCursor:E})=>{const[m,v]=i(E),[g,G]=i(""),[c,j]=i(L.Alpha),[n,D]=i(L.Owner),[p,H]=i(""),b=se(()=>({routeName:"soundcheck-checks",additionalAttributes:{checksPerPage:e,pageCursor:m||"",sortOrder:c||"",ownerFilter:n||"",nameSearch:p||""}}),[e,m,c,n,p]),{reportContentLoaded:x}=ge(b),{reporter:M}=he(b),l=ye(),{data:V,isLoading:u}=le();ne(()=>{H(g)},500,[g]);const{loading:y,allowed:W}=oe({permission:ie}),{data:o,isLoading:s}=pe({ids:void 0,first:e,after:m,orderAlphabetical:c,searchByOwner:n,searchByName:p}),[f,$]=i(o),d=f?.edges?.map(r=>r.node),[A,w]=i([]);P(()=>{v(void 0),w([])},[p,c,n]);const N=I(re),q=!N.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-check-creation")||N.isActive("soundcheck-enable-check-creation"),k=!W||!q,z=r=>{j(r.target.value)},J=r=>{D(r.target.value)};P(()=>{o&&$(()=>({totalCount:o.totalCount,edges:o.edges,pageInfo:{startCursor:o.pageInfo.startCursor,endCursor:o.pageInfo.endCursor,hasNextPage:o?.pageInfo.hasNextPage??!1,hasPreviousPage:o?.pageInfo.hasPreviousPage??!1}}))},[o]);const K=ce(),Q=te(fe),R=()=>K(Q()),U=I(me),{mutateAsync:X}=de(),Y=async r=>X(r),Z=async()=>{const r=await U.getChecks({orderAlphabetical:"asc"});return ke(r.edges.map(ee=>ee.node))},S=M?.getLCPValue();if(P(()=>{!s&&!u&&x({lcp:S})},[s,u,x,S]),!s&&!d)return t(O,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:ue,action:!y&&t(B,{disabled:k,variant:"contained",color:"primary",onClick:R,children:"Get started"})});let h;s?h=t(be,{}):d?.length?h=d?.map(r=>t(a,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${r.id}`,children:t(xe,{check:r})},r.id)):h=t(a,{xs:12,item:!0,role:"listitem","aria-label":"result",children:t(O,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."})});const _=f?.pageInfo.hasNextPage||A?.length>0;return C(a,{container:!0,direction:"row",className:l.container,children:[C(a,{container:!0,className:l.header,children:[t(ve,{searchPlaceholder:"Search Available Checks",isLoading:s||u,searchTerm:g,setSearchTerm:G,filterAlpha:c,handleAlphabeticalFilterChange:z,filterOwner:n,handleOwnerFilterChange:J,owners:V}),C(a,{item:!0,xs:4,className:l.headerButtons,children:[t(Ce,{resourceType:"check",disableImport:k,disableExport:s||!d?.length,onImport:Y,onExport:Z}),!y&&t(B,{disabled:k,variant:"contained",color:"primary",onClick:R,className:l.createButton,children:"Create Check"})]})]}),t(a,{container:!0,spacing:4,role:"list","aria-label":"checks",children:h}),_&&t(a,{item:!0,xs:12,children:t(Pe,{response:f,listingsPerPage:e,cursor:m,setCursor:v,prevCursors:A,setPrevCursors:w,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})})]})};export{T as CheckEmptyState,Ae as CheckListPage,F as CheckNoResults};
2
2
  //# sourceMappingURL=CheckListPageDeprecated.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as m,Fragment as G}from"react/jsx-runtime";import{useRouteRef as P,useApi as E}from"@backstage/core-plugin-api";import{entityPresentationApiRef as O}from"@backstage/plugin-catalog-react";import{usePermission as z}from"@backstage/plugin-permission-react";import{Box as I,HeaderPage as W,Flex as Y,Table as q,TableHeader as J,Column as p,TableBody as K,TablePagination as Q}from"@backstage/ui";import{makeStyles as X}from"@material-ui/core";import{soundcheckCheckCreatePermission as Z}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as _,isEmpty as h,upperFirst as $}from"lodash";import{useState as u,useMemo as b}from"react";import{soundcheckApiRef as ee}from"../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as te}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useSearchName as re}from"../../hooks/useSearchName.esm.js";import{usePagination as oe}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useProfileImages as ie}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportChecks as ne}from"../../hooks/checks/useImportChecks.esm.js";import{checkTemplatesRouteRef as ae,checkDetailsRouteRef as me}from"../../routes.esm.js";import{exportChecks as se}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as pe}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{EmptyStateNoChecks as ce}from"../EmptyState/EmptyStateNoChecks.esm.js";import{ImportExportPanelBUI as le}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import"../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{ListPageCustomActions as de}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as fe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useCheckActions as he}from"../Menus/useCheckActions.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as ue}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const T=10,ge=X(()=>({container:{padding:"0 var(--bui-space-3) var(--bui-space-6)"},emptySpacing:{margin:"var(--bui-space-3) 0"}})),ye=({check:r,profileImageMap:i})=>{const c=P(me),n=he(r);return t(ue,{ownerEntityRef:r.ownerEntityRef??"",href:c({checkId:r.id}),profileImageSrc:i[r.ownerEntityRef??""],menuActions:n,name:r.name??r.id,description:r.description??"",cells:[{title:$(r.type??"Default")}]})},we=()=>{const r=ge(),[i,c]=u(""),[n,x]=u("ascending"),[a,A]=u(""),{isLoading:s,data:g}=te({}),l=b(()=>g?.edges?.map(e=>e.node)??[],[g?.edges]),{loading:y,allowed:w}=z({permission:Z}),B=P(ae),{profileImageMap:L}=ie(l.filter(e=>e.ownerEntityRef).map(e=>e.ownerEntityRef)),d=re({items:l,searchTerm:i}),k=E(O),C=b(()=>{if(!a)return d;const e=_(d,o=>a==="owner"?o.ownerEntityRef?k.forEntity(o.ownerEntityRef).snapshot.primaryTitle:-1:a==="type"?o.type?o.type:"default":o?.name?.toLowerCase()??o.id.toLowerCase());return n==="descending"&&e.reverse(),e},[a,d,n,k]),{mutateAsync:N}=ne(),v=async e=>N(e),H=E(ee),M=async()=>{const e=await H.getChecks({orderAlphabetical:"asc"});return se(e.edges.map(o=>o.node))},{paginatedItems:f,reset:D,paginationProps:F}=oe({pageParam:"perPage",defaultPageSize:T,items:C}),U=s,R=!s&&h(f),V=!s&&!h(f),j=C.length>T;let S=null;return R&&(S=i?t(pe,{title:"No checks found",body:"Your current search term did not return any checks. Please try a different search term."}):t(ce,{})),m(G,{children:[t(I,{children:t(W,{customActions:m(Y,{gap:"2",align:"center",children:[t(le,{resourceType:"check",disableImport:!y&&!w,disableExport:s||h(l),onImport:v,onExport:M}),t(de,{searchValue:i,setSearchValue:e=>{D(),c(e)},canCreate:!y&&w,createHref:B()})]}),title:"Checks"})}),m(I,{className:r.container,children:[U&&t(fe,{rowCount:10}),R&&t("div",{className:r.emptySpacing,children:S}),V&&m(q,{onSortChange:({direction:e,column:o})=>{A(String(o)),x(e)},sortDescriptor:{direction:n,column:a},children:[m(J,{children:[t(p,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"73%"},children:"Name"}),t(p,{id:"type",style:{width:"10%"},allowsSorting:!0,children:"Type"}),t(p,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Check Owner"}),t(p,{id:"actions",style:{width:"2%"}})]}),t(K,{children:f.map(e=>t(ye,{check:e,profileImageMap:L??{}},e.id))})]}),j&&t(Q,{...F})]})]})};export{we as ChecksListPageBUI};
1
+ import{jsx as t,jsxs as a,Fragment as F}from"react/jsx-runtime";import{useRouteRef as E,useApi as I}from"@backstage/core-plugin-api";import{entityPresentationApiRef as G}from"@backstage/plugin-catalog-react";import{usePermission as O}from"@backstage/plugin-permission-react";import{HeaderPage as z,Flex as W,Container as Y,Table as q,TableHeader as J,Column as f,TableBody as K,TablePagination as Q}from"@backstage/ui";import{makeStyles as X}from"@material-ui/core";import{soundcheckCheckCreatePermission as Z}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as _,isEmpty as h}from"lodash";import{useState as u,useMemo as S}from"react";import{soundcheckApiRef as $}from"../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as ee}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useSearchName as te}from"../../hooks/useSearchName.esm.js";import{usePagination as re}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useProfileImages as oe}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportChecks as ie}from"../../hooks/checks/useImportChecks.esm.js";import{checkTemplatesRouteRef as me,checkDetailsRouteRef as ne}from"../../routes.esm.js";import{exportChecks as ae}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as se}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{EmptyStateNoChecks as pe}from"../EmptyState/EmptyStateNoChecks.esm.js";import{ImportExportPanelBUI as ce}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import"../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{ListPageCustomActions as le}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as de}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useCheckActions as fe}from"../Menus/useCheckActions.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as he}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const b=10,ue=({check:o,profileImageMap:i})=>{const p=E(ne),m=fe(o);return t(he,{ownerEntityRef:o.ownerEntityRef??"",href:p({checkId:o.id}),profileImageSrc:i[o.ownerEntityRef??""],menuActions:m,name:o.name??o.id,description:o.description??"",cells:[]})},ge=X(()=>({container:{marginBottom:"var(--bui-space-12)"}})),ye=()=>{const o=ge(),[i,p]=u(""),[m,T]=u("ascending"),[n,A]=u(""),{isLoading:s,data:g}=ee({}),c=S(()=>g?.edges?.map(e=>e.node)??[],[g?.edges]),{loading:y,allowed:w}=O({permission:Z}),x=E(me),{profileImageMap:B}=oe(c.filter(e=>e.ownerEntityRef).map(e=>e.ownerEntityRef)),l=te({items:c,searchTerm:i}),k=I(G),C=S(()=>{if(!n)return l;const e=_(l,r=>n==="owner"?r.ownerEntityRef?k.forEntity(r.ownerEntityRef).snapshot.primaryTitle:-1:n==="type"?r.type?r.type:"default":r?.name?.toLowerCase()??r.id.toLowerCase());return m==="descending"&&e.reverse(),e},[n,l,m,k]),{mutateAsync:L}=ie(),N=async e=>L(e),H=I($),M=async()=>{const e=await H.getChecks({orderAlphabetical:"asc"});return ae(e.edges.map(r=>r.node))},{paginatedItems:d,reset:U,paginationProps:v}=re({pageParam:"perPage",defaultPageSize:b,items:C}),D=s,R=!s&&h(d),V=!s&&!h(d),j=C.length>b;let P=null;return R&&(P=i?t(se,{title:"No checks found",body:"Your current search term did not return any checks. Please try a different search term."}):t(pe,{})),a(F,{children:[t(z,{customActions:a(W,{gap:"2",align:"center",children:[t(ce,{resourceType:"check",disableImport:!y&&!w,disableExport:s||h(c),onImport:N,onExport:M}),t(le,{searchValue:i,setSearchValue:e=>{U(),p(e)},canCreate:!y&&w,createHref:x()})]}),title:"Checks"}),a(Y,{className:o.container,children:[D&&t(de,{rowCount:10}),R&&P,V&&a(q,{onSortChange:({direction:e,column:r})=>{A(String(r)),T(e)},sortDescriptor:{direction:m,column:n},children:[a(J,{children:[t(f,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"83%"},children:"Name"}),t(f,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Check Owner"}),t(f,{id:"actions",style:{width:"2%"}})]}),t(K,{children:d.map(e=>t(ue,{check:e,profileImageMap:B??{}},e.id))})]}),j&&t(Q,{...v})]})]})};export{ye as ChecksListPageBUI};
2
2
  //# sourceMappingURL=ChecksListPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as e,Fragment as B}from"react/jsx-runtime";import{useRouteRef as x}from"@backstage/core-plugin-api";import{Row as R,Cell as C,Flex as N,Box as b,Text as L,Table as E,TableHeader as F,Column as g,TableBody as $,TablePagination as j}from"@backstage/ui";import{makeStyles as A}from"@material-ui/core";import{memo as D,useMemo as f,useState as P}from"react";import{CircularProgressbar as H}from"react-circular-progressbar";import{useNavigate as U,useLocation as z}from"react-router-dom";import{TrackEntityField as K}from"../../graphql/generated/index.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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as M}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{trackCheckDetailsRouteRef as O}from"../../routes.esm.js";import{getPercentage as Q}from"../../utils/formatters.esm.js";import"../CheckStatusBar/CheckStatusBar.esm.js";import{CheckStatusBarBUI as V}from"../CheckStatusBar/CheckStatusBarBUI.esm.js";import{CustomCell as W}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as q}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";const G=A(()=>({statusBar:{width:"30%"},customCell:{padding:"0 var(--bui-space-3)"},circularProgressbar:{width:"60%"}})),w=10;K.Name;const J=D(({trackId:d,check:i,checkStatuses:p,searchParams:s})=>{const c=G(),h=x(O),u=U(),t=p?.find(r=>r.id===i.id),{passPercent:m,applicableChecks:a}=f(()=>{const r=t?t.numberOfEntities-t.notApplicable-t.exempt:0;return{passPercent:Q(t?.passed,r),applicableChecks:r}},[t]);return n(R,{onAction:()=>{const r=h({trackId:d,checkId:i.id});u(s?`${r}${s}`:r)},children:[e(C,{leadingIcon:e("div",{className:c.circularProgressbar,children:e(H,{value:m,strokeWidth:12,styles:{path:{stroke:m===100?"var(--bui-fg-success)":"var(--bui-fg-danger)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})}),title:`${m}%`}),e(C,{title:i.name}),e(W,{children:n(N,{align:"center",gap:"3",children:[e(b,{children:n(L,{color:"secondary",children:[t?.passed??0," of ",a," checks passing"]})}),e(b,{className:c.statusBar,children:e(V,{status:t})})]})})]},i.id)}),X=({trackId:d,checks:i,checkStatuses:p,searchValue:s})=>{const[c,h]=P("ascending"),[u,t]=P("name"),m=z().search,a=f(()=>[...i??[]].sort((o,l)=>{const I=o.name.toLowerCase().trim(),T=l.name.toLowerCase().trim(),k=I.localeCompare(T,void 0,{sensitivity:"base"});return c==="ascending"?k:-k}),[i,c]),r=f(()=>{if(!s?.length)return a;const o=s.toLowerCase();return a.filter(({name:l})=>l.toLowerCase().includes(o))},[a,s]),{paginatedItems:y,paginationProps:S}=M({pageParam:"perPage",defaultPageSize:w,items:r}),v=a.length>w;return!a?.length||!r.length?e(q,{title:"No checks",body:"There are no checks found."}):n(B,{children:[n(E,{onSortChange:({direction:o,column:l})=>{t(String(l)),h(o)},sortDescriptor:{direction:c,column:u},children:[n(F,{children:[e(g,{id:"compliance",style:{width:"5%"},children:"Compliance"}),e(g,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"75%"},children:"Name"}),e(g,{id:"checks",style:{width:"20%"},children:"Checks"})]}),e($,{children:y.map(o=>e(J,{trackId:d,check:o,checkStatuses:p,searchParams:m},o.id))})]}),v&&e(j,{...S})]})};export{X as ChecksTable};
1
+ import{jsx as e,jsxs as o,Fragment as N}from"react/jsx-runtime";import{useRouteRef as L}from"@backstage/core-plugin-api";import{Row as $,Cell as b,Flex as j,Box as C,Text as A,Table as E,TableHeader as F,Column as f,TableBody as G,TablePagination as D}from"@backstage/ui";import{makeStyles as H}from"@material-ui/core";import{sortBy as U}from"lodash";import{memo as y,useMemo as k,useState as w}from"react";import{CircularProgressbar as z}from"react-circular-progressbar";import{useNavigate as M,useLocation as O}from"react-router-dom";import{TrackEntityField as Q}from"../../graphql/generated/index.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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as V}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{trackCheckDetailsRouteRef as W}from"../../routes.esm.js";import{getPercentage as P}from"../../utils/formatters.esm.js";import"../CheckStatusBar/CheckStatusBar.esm.js";import{CheckStatusBarBUI as X}from"../CheckStatusBar/CheckStatusBarBUI.esm.js";import{CustomCell as Y}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as q}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";const J=H(()=>({statusBar:{width:"45%"},customCell:{padding:"0 var(--bui-space-3)"},circularProgressbar:{width:"var(--bui-space-7)"}})),S=10;Q.Name;const K=y(()=>e("svg",{width:"0",height:"0",style:{position:"absolute",visibility:"hidden"},children:e("defs",{children:o("linearGradient",{id:"progressGradient",x1:"1",y1:"0",x2:"0",y2:"1",children:[e("stop",{offset:"0%",stopColor:"var(--bui-fg-warning)"}),e("stop",{offset:"100%",stopColor:"var(--bui-fg-success)"})]})})})),v=(r,t)=>t?.find(d=>d.id===r),x=r=>r?r.numberOfEntities-r.notApplicable-r.exempt:0,Z=y(({trackId:r,check:t,checkStatuses:d,searchParams:c})=>{const n=J(),u=L(W),l=M(),a=v(t.id,d),{passPercent:p,applicableChecks:h}=k(()=>{const i=x(a);return{passPercent:P(a?.passed,i),applicableChecks:i}},[a]);return o($,{onAction:()=>{const i=u({trackId:r,checkId:t.id});l(c?`${i}${c}`:i)},children:[e(b,{leadingIcon:o("div",{className:n.circularProgressbar,title:`${p}%`,children:[e(K,{}),e(z,{value:p,strokeWidth:12,styles:{path:{stroke:"url(#progressGradient)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})]}),title:`${p}%`}),e(b,{title:t.name}),e(Y,{children:o(j,{align:"center",gap:"3",justify:"between",children:[e(C,{children:o(A,{color:"secondary",children:[a?.passed??0," of ",h," checks passing"]})}),e(C,{className:n.statusBar,children:e(X,{status:a})})]})})]},t.id)}),_=({trackId:r,checks:t,checkStatuses:d,searchValue:c})=>{const[n,u]=w("descending"),[l,a]=w("compliance"),p=O().search,h=k(()=>{if(!c?.length)return t??[];const s=c.toLowerCase();return t?.filter(({name:m})=>m.toLowerCase().includes(s))??[]},[t,c]),i=k(()=>{const s=U([...h],m=>{const g=v(m.id);if(l==="compliance"){const R=x(g);return P(g?.passed,R)}return l==="checks"?g?.passed:m.name.toLowerCase()});return n==="descending"&&s.reverse(),s},[h,l,n]),{paginatedItems:I,paginationProps:B}=V({pageParam:"perPage",defaultPageSize:S,items:i}),T=i.length>S;return i?.length?o(N,{children:[o(E,{onSortChange:({direction:s,column:m})=>{a(String(m)),u(s)},sortDescriptor:{direction:n,column:l},children:[o(F,{children:[e(f,{id:"compliance",allowsSorting:!0,style:{width:"5%"},children:"Compliance"}),e(f,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"75%"},children:"Name"}),e(f,{id:"checks",allowsSorting:!0,style:{width:"20%"},children:"Checks"})]}),e(G,{children:I.map(s=>e(Z,{trackId:r,check:s,checkStatuses:d,searchParams:p},s.id))})]}),T&&e(D,{...B})]}):e(q,{title:"No checks",body:"There are no checks found."})};export{_ as ChecksTable};
2
2
  //# sourceMappingURL=ChecksTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as n,Fragment as k}from"react/jsx-runtime";import{useRouteRef as v}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{Box as r,Text as d,Grid as O,Flex as P,Button as w,HeaderPage as V}from"@backstage/ui";import{makeStyles as Y}from"@material-ui/core";import{soundcheckCollectorReadPermission as J,soundcheckCollectorUpdatePermission as K,parseFactRef as Q,asArray as X}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as Z}from"lodash";import{useMemo as _,useCallback as ee,useEffect as te}from"react";import{useParams as oe,useNavigate as ie}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as re}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useGetCollectors as ne}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as ae}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{useLCPReporting as se}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as le}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationEditRouteRef as de,integrationsPageRouteRef as ce}from"../../routes.esm.js";import{mapRuleToExpression as me}from"../CheckForm/utils/checkFormUtils.esm.js";import{ConfigurableCollectorIds as pe}from"../CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js";import{DocLinkButton as fe}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as f}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as ge}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as he}from"../LoadingIndicator/LoadingIndicator.esm.js";import{CollectorFactTableBUI as ue}from"./CollectorFactTableBUI.esm.js";import{DependantCheckCard as be}from"./DependantCheckCard.esm.js";const Ce=Y(()=>({container:{padding:"0 var(--bui-space-5) var(--bui-space-6)"}})),ye=({id:N,integrations:U})=>{const L=Ce(),x=oe(),o=N??x.integrationId,g=_(()=>({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:o||""}}),[o]),{reportContentLoaded:h}=le(g),{reporter:A}=se(g),{data:E,isLoading:D}=ne([o??""]),{loading:F,allowed:T}=R({permission:J}),{loading:u,allowed:b}=R({permission:K}),{showModal:C}=re(),{mutate:y,isPending:c}=ae(o??""),$=ee(async()=>{!await C({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||c||y()},[y,c,C]),t=E?.[0],m=D||u||F,B=U?.map(p=>p.integrationId)??pe,M=!u&&b&&t?.isEditable&&t?.isConfigurable&&B.includes(o??""),S=ie(),W=v(de),G=v(ce),j=t?.hasUIConfig;let a;if(m)a=e(he,{});else if(!T)a=e(f,{title:"Cannot view Integration",body:`User does not have permission to view Integration id: ${o}`});else if(!t)a=e(f,{title:"Integration not found",body:`There is no integration with the requested id: ${o}.`});else{const p=n(r,{mb:"6",children:[e(r,{mb:"3",children:e(d,{variant:"title-small",style:{fontWeight:"bold"},children:"Facts"})}),e(r,{children:e(ue,{facts:t.factNames.map(i=>{const l=(s=>{try{return Q(s).name}catch{return s}})(i),H=X(t.config?.collects).find(s=>s?.type===l||s?.factName===l);return{factRef:`${o}:default/${l}`,factName:l,config:H,uiConfig:!!t.hasUIConfig,parentConfig:t.config}})})})]}),q=n(r,{mb:"6",children:[e(r,{mb:"3",children:e(d,{variant:"title-small",style:{fontWeight:"bold"},children:"Dependant Checks"})}),Z(t.dependentChecks)?e(f,{title:"No dependant checks",body:"No dependant checks"}):e(O.Root,{columns:"5",gap:"3",children:t.dependentChecks.map(i=>e(be,{id:i.id,title:i.name??i.id,description:i.description??void 0,rules:me(i.rule),integrationId:o,hasSchedule:i.schedule},i.id))})]}),z=b&&j&&n(r,{mb:"6",children:[e(r,{mb:"3",children:e(d,{variant:"title-small",style:{fontWeight:"bold"},children:"Admin Actions"})}),t.hasUIConfig&&n(P,{align:"center",gap:"2",children:[e(w,{isDisabled:c,size:"small",variant:"secondary",onClick:$,children:"Remove Config"}),e(d,{color:"secondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]});a=n(k,{children:[p,q,z]})}const I=A?.getLCPValue();return te(()=>{m||h({lcp:I})},[m,h,I]),n(k,{children:[e(r,{children:e(V,{title:t?.name??t?.id??"Integration",breadcrumbs:[{label:"Integrations",href:G()}],customActions:n(P,{align:"center",children:[M?e(w,{onClick:()=>S(W({integrationId:o??""})),children:"Configure"}):void 0,e(fe,{href:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t?.id}`})]})})}),e(r,{className:L.container,children:e(ge,{hidePath:!0,children:a})})]})};export{ye as CollectorDetailsPageBUI};
1
+ import{jsx as e,jsxs as r,Fragment as k}from"react/jsx-runtime";import{useRouteRef as v}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{Box as n,Text as c,Grid as O,Flex as P,Button as w,HeaderPage as V,Container as Y}from"@backstage/ui";import{makeStyles as J}from"@material-ui/core";import{soundcheckCollectorReadPermission as K,soundcheckCollectorUpdatePermission as Q,parseFactRef as X,asArray as Z}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as _}from"lodash";import{useMemo as ee,useCallback as te,useEffect as oe}from"react";import{useParams as ie,useNavigate as re}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as ne}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useGetCollectors as ae}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as se}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{useLCPReporting as le}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ce}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationEditRouteRef as de,integrationsPageRouteRef as me}from"../../routes.esm.js";import{mapRuleToExpression as pe}from"../CheckForm/utils/checkFormUtils.esm.js";import{ConfigurableCollectorIds as fe}from"../CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js";import{DocLinkButton as ge}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as f}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as he}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as ue}from"../LoadingIndicator/LoadingIndicator.esm.js";import{CollectorFactTableBUI as Ce}from"./CollectorFactTableBUI.esm.js";import{DependantCheckCard as be}from"./DependantCheckCard.esm.js";const Ie=J(()=>({container:{marginBottom:"var(--bui-space-12)"}})),ye=({id:N,integrations:U})=>{const L=Ie(),x=ie(),o=N??x.integrationId,g=ee(()=>({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:o||""}}),[o]),{reportContentLoaded:h}=ce(g),{reporter:A}=le(g),{data:E,isLoading:B}=ae([o??""]),{loading:D,allowed:F}=R({permission:K}),{loading:u,allowed:C}=R({permission:Q}),{showModal:b}=ne(),{mutate:I,isPending:d}=se(o??""),T=te(async()=>{!await b({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||d||I()},[I,d,b]),t=E?.[0],m=B||u||D,$=U?.map(p=>p.integrationId)??fe,M=!u&&C&&t?.isEditable&&t?.isConfigurable&&$.includes(o??""),S=re(),W=v(de),G=v(me),j=t?.hasUIConfig;let a;if(m)a=e(ue,{});else if(!F)a=e(f,{title:"Cannot view Integration",body:`User does not have permission to view Integration id: ${o}`});else if(!t)a=e(f,{title:"Integration not found",body:`There is no integration with the requested id: ${o}.`});else{const p=r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Facts"})}),e(n,{children:e(Ce,{facts:t.factNames.map(i=>{const l=(s=>{try{return X(s).name}catch{return s}})(i),H=Z(t.config?.collects).find(s=>s?.type===l||s?.factName===l);return{factRef:`${o}:default/${l}`,factName:l,config:H,uiConfig:!!t.hasUIConfig,parentConfig:t.config}})})})]}),q=r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Dependant Checks"})}),_(t.dependentChecks)?e(f,{title:"No dependant checks",body:"No dependant checks"}):e(O.Root,{columns:"5",gap:"3",children:t.dependentChecks.map(i=>e(be,{id:i.id,title:i.name??i.id,description:i.description??void 0,rules:pe(i.rule),integrationId:o,hasSchedule:i.schedule},i.id))})]}),z=C&&j&&r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Admin Actions"})}),t.hasUIConfig&&r(P,{align:"center",gap:"2",children:[e(w,{isDisabled:d,size:"small",variant:"secondary",onClick:T,children:"Remove Config"}),e(c,{color:"secondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]});a=r(k,{children:[p,q,z]})}const y=A?.getLCPValue();return oe(()=>{m||h({lcp:y})},[m,h,y]),r(k,{children:[e(V,{title:t?.name??t?.id??"Integration",breadcrumbs:[{label:"Integrations",href:G()}],customActions:r(P,{align:"center",children:[M?e(w,{onClick:()=>S(W({integrationId:o??""})),children:"Configure"}):void 0,e(ge,{href:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t?.id}`})]})}),e(Y,{className:L.container,children:e(he,{hidePath:!0,children:a})})]})};export{ye as CollectorDetailsPageBUI};
2
2
  //# sourceMappingURL=CollectorDetailsPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as e,Fragment as O}from"react/jsx-runtime";import{Content as W,LinkButton as q}from"@backstage/core-components";import{useRouteRef as P}from"@backstage/core-plugin-api";import{usePermission as U}from"@backstage/plugin-permission-react";import{Box as z,HeaderPage as Y,Flex as _,Button as J}from"@backstage/ui";import{makeStyles as K,Box as n,Button as N,Typography as l,Card as Q,CardHeader as X,CardContent as Z,Tooltip as ee,CardActions as te}from"@material-ui/core";import{Alert as oe}from"@material-ui/lab";import{soundcheckCollectorReadPermission as ie,soundcheckCollectorUpdatePermission as re,parseFactRef as $,asArray as ne}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as E,uniq as ae}from"lodash";import{useMemo as A,useCallback as ce,useEffect as se}from"react";import{useParams as de,useNavigate as le}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as me}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useGetCollectors as pe}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as fe}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{useFeatureFlag as ge}from"../../hooks/useFeatureFlag.esm.js";import{useLCPReporting as he}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ue}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationEditRouteRef as Ce,integrationsPageRouteRef as ye,checkDetailsRouteRef as ke}from"../../routes.esm.js";import{mapRuleToExpression as Ie}from"../CheckForm/utils/checkFormUtils.esm.js";import{ConfigurableCollectorIds as be}from"../CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js";import{DocLinkButton as ve}from"../DocLinkButton/DocLinkButton.esm.js";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as Re}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as xe}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as we}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Be}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContentDeprecated as Pe}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import{CollectorFactTable as Ne}from"./CollectorFactTable.esm.js";const Ae=K(d=>({card:{width:360},cardDescription:{"& p":{marginTop:d.spacing(.5),marginBottom:d.spacing(.5)}},cardContent:{flexGrow:1}})),De=({id:d,title:h,description:u,rules:o,integrationId:m,hasSchedule:C})=>{const p=Ae(),v=P(ke),y=A(()=>{const c=[],k=s=>{for(const a of s.conditions??[])c.push(a.factRef),typeof a.value=="object"&&Object.hasOwn(a.value,"factRef")&&c.push(a.value.factRef);for(const a of s.expressions??[])k(a)};return o&&k(o),ae(c).filter(s=>{try{return $(s).source===m}catch{return!1}})},[m,o]);return r(Q,{className:p.card,children:[e(X,{title:h}),r(Z,{className:p.cardContent,children:[u&&e(n,{overflow:"auto",maxHeight:200,children:e(Pe,{className:p.cardDescription,content:u})}),!E(y)&&r(n,{marginTop:1,overflow:"auto",maxHeight:120,children:[e(l,{variant:"subtitle2",children:"Used Fact Refs"}),y.map(c=>e(n,{children:c},"factRef"))]}),C&&e(n,{marginTop:1,children:e(ee,{title:"Configure this integration's collection schedule instead.",children:e(oe,{severity:"warning",children:"Check Schedule Detected"})})})]}),e(te,{children:e(q,{variant:"outlined",to:v({checkId:d}),target:"_blank",children:"View"})})]})},Fe=({id:d,integrations:h})=>{const u=de(),o=d??u.integrationId,m=A(()=>({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:o||""}}),[o]),{reportContentLoaded:C}=ue(m),{reporter:p}=he(m),{data:v,isLoading:y}=pe([o??""]),{loading:c,allowed:k}=U({permission:ie}),{loading:s,allowed:a}=U({permission:re}),{showModal:D}=me(),{mutate:F,isPending:R}=fe(o??""),M=ce(async()=>{!await D({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||R||F()},[F,R,D]),t=v?.[0],f=y||s||c,G=h?.map(i=>i.integrationId)??be,T=h?.find(i=>i.integrationId===o)?.routePath,x=!s&&a&&t?.isEditable&&t?.isConfigurable&&G.includes(o??""),I=le(),w=P(Ce),B=P(ye),H=t?.hasUIConfig,S=A(()=>r(n,{display:"flex",gridGap:12,children:[e(N,{variant:"contained",color:"primary",onClick:()=>{I(B())},children:"All Integrations"}),o&&x&&e(N,{variant:"contained",color:"primary",onClick:()=>{I(T??w({integrationId:o}))},children:"Edit Integration"})]}),[B,T,w,o,x,I]);Be({title:t?.name??o,description:t?t.description??"":"",docLink:t?`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t.id}`:"",sectionRight:S});const L=p?.getLCPValue();se(()=>{f||C({lcp:L})},[f,C,L]);const j=ge("backstage-ui");return r(O,{children:[j&&e(z,{children:e(Y,{title:t?.name??t?.id??"Integration",breadcrumbs:[{label:"Integrations",href:B()}],customActions:r(_,{align:"center",children:[x?e(J,{onClick:()=>I(w({integrationId:o??""})),children:"Configure"}):void 0,e(ve,{href:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t?.id}`})]})})}),e(Re,{hidePath:!0,children:r(W,{children:[f&&e(xe,{}),e(we,{entityName:"Integration",entityId:o,showNotFound:!f&&!t,showCannotView:!f&&!k}),t&&r(n,{children:[r(n,{marginBottom:2,children:[e(l,{variant:"h6",children:"Facts"}),e(n,{marginBottom:2,children:e(Ne,{facts:t.factNames.map(i=>{const b=(g=>{try{return $(g).name}catch{return g}})(i),V=ne(t.config?.collects).find(g=>g?.type===b||g?.factName===b);return{factRef:`${o}:default/${b}`,factName:b,config:V,uiConfig:!!t.hasUIConfig,parentConfig:t.config}})})})]}),r(n,{marginBottom:2,children:[e(l,{variant:"h6",children:"Dependant Checks"}),E(t.dependentChecks)?e(l,{variant:"body2",children:"No dependant checks"}):e(n,{display:"flex",gridGap:12,flexWrap:"wrap",children:t.dependentChecks.map(i=>e(De,{id:i.id,title:i.name??i.id,description:i.description??void 0,rules:Ie(i.rule),integrationId:o,hasSchedule:i.schedule},i.id))})]}),a&&H&&r(n,{marginBottom:2,children:[e(l,{variant:"h6",children:"Admin Actions"}),t.hasUIConfig&&r(n,{marginTop:1,display:"flex",alignItems:"center",gridGap:16,children:[e(N,{disabled:R,size:"small",variant:"contained",color:"secondary",onClick:M,children:"Remove Config"}),e(l,{variant:"body2",color:"textSecondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]})]})]})})]})};export{Fe as CollectorDetailsPageDeprecated};
1
+ import{jsxs as a,jsx as e}from"react/jsx-runtime";import{Content as $,LinkButton as O}from"@backstage/core-components";import{useRouteRef as b}from"@backstage/core-plugin-api";import{usePermission as F}from"@backstage/plugin-permission-react";import{makeStyles as W,Box as r,Button as x,Typography as l,Card as q,CardHeader as z,CardContent as Y,Tooltip as _,CardActions as J}from"@material-ui/core";import{Alert as K}from"@material-ui/lab";import{soundcheckCollectorReadPermission as Q,soundcheckCollectorUpdatePermission as X,parseFactRef as M,asArray as Z}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as U,uniq as ee}from"lodash";import{useMemo as N,useCallback as te,useEffect as oe}from"react";import{useParams as ie,useNavigate as re}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as ne}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useGetCollectors as ae}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as ce}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{useLCPReporting as se}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as de}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationEditRouteRef as le,integrationsPageRouteRef as me,checkDetailsRouteRef as pe}from"../../routes.esm.js";import{mapRuleToExpression as fe}from"../CheckForm/utils/checkFormUtils.esm.js";import{ConfigurableCollectorIds as he}from"../CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as ge}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as ue}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as Ce}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as ye}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContentDeprecated as ve}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import{CollectorFactTable as Re}from"./CollectorFactTable.esm.js";const ke=W(d=>({card:{width:360},cardDescription:{"& p":{marginTop:d.spacing(.5),marginBottom:d.spacing(.5)}},cardContent:{flexGrow:1}})),Ie=({id:d,title:g,description:u,rules:t,integrationId:m,hasSchedule:C})=>{const p=ke(),k=b(pe),y=N(()=>{const c=[],v=s=>{for(const n of s.conditions??[])c.push(n.factRef),n.value&&typeof n.value=="object"&&Object.hasOwn(n.value,"factRef")&&c.push(n.value.factRef);for(const n of s.expressions??[])v(n)};return t&&v(t),ee(c).filter(s=>{try{return M(s).source===m}catch{return!1}})},[m,t]);return a(q,{className:p.card,children:[e(z,{title:g}),a(Y,{className:p.cardContent,children:[u&&e(r,{overflow:"auto",maxHeight:200,children:e(ve,{className:p.cardDescription,content:u})}),!U(y)&&a(r,{marginTop:1,overflow:"auto",maxHeight:120,children:[e(l,{variant:"subtitle2",children:"Used Fact Refs"}),y.map(c=>e(r,{children:c},"factRef"))]}),C&&e(r,{marginTop:1,children:e(_,{title:"Configure this integration's collection schedule instead.",children:e(K,{severity:"warning",children:"Check Schedule Detected"})})})]}),e(J,{children:e(O,{variant:"outlined",to:k({checkId:d}),target:"_blank",children:"View"})})]})},we=({id:d,integrations:g})=>{const u=ie(),t=d??u.integrationId,m=N(()=>({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:t||""}}),[t]),{reportContentLoaded:C}=de(m),{reporter:p}=se(m),{data:k,isLoading:y}=ae([t??""]),{loading:c,allowed:v}=F({permission:Q}),{loading:s,allowed:n}=F({permission:X}),{showModal:P}=ne(),{mutate:T,isPending:I}=ce(t??""),G=te(async()=>{!await P({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||I||T()},[T,I,P]),o=k?.[0],f=y||s||c,S=g?.map(i=>i.integrationId)??he,A=g?.find(i=>i.integrationId===t)?.routePath,B=!s&&n&&o?.isEditable&&o?.isConfigurable&&S.includes(t??""),w=re(),D=b(le),L=b(me),H=o?.hasUIConfig,j=N(()=>a(r,{display:"flex",gridGap:12,children:[e(x,{variant:"contained",color:"primary",onClick:()=>{w(L())},children:"All Integrations"}),t&&B&&e(x,{variant:"contained",color:"primary",onClick:()=>{w(A??D({integrationId:t}))},children:"Edit Integration"})]}),[L,A,D,t,B,w]);ye({title:o?.name??t,description:o?o.description??"":"",docLink:o?`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${o.id}`:"",sectionRight:j});const E=p?.getLCPValue();return oe(()=>{f||C({lcp:E})},[f,C,E]),e(ge,{hidePath:!0,children:a($,{children:[f&&e(ue,{}),e(Ce,{entityName:"Integration",entityId:t,showNotFound:!f&&!o,showCannotView:!f&&!v}),o&&a(r,{children:[a(r,{marginBottom:2,children:[e(l,{variant:"h6",children:"Facts"}),e(r,{marginBottom:2,children:e(Re,{facts:o.factNames.map(i=>{const R=(h=>{try{return M(h).name}catch{return h}})(i),V=Z(o.config?.collects).find(h=>h?.type===R||h?.factName===R);return{factRef:`${t}:default/${R}`,factName:R,config:V,uiConfig:!!o.hasUIConfig,parentConfig:o.config}})})})]}),a(r,{marginBottom:2,children:[e(l,{variant:"h6",children:"Dependant Checks"}),U(o.dependentChecks)?e(l,{variant:"body2",children:"No dependant checks"}):e(r,{display:"flex",gridGap:12,flexWrap:"wrap",children:o.dependentChecks.map(i=>e(Ie,{id:i.id,title:i.name??i.id,description:i.description??void 0,rules:fe(i.rule),integrationId:t,hasSchedule:i.schedule},i.id))})]}),n&&H&&a(r,{marginBottom:2,children:[e(l,{variant:"h6",children:"Admin Actions"}),o.hasUIConfig&&a(r,{marginTop:1,display:"flex",alignItems:"center",gridGap:16,children:[e(x,{disabled:I,size:"small",variant:"contained",color:"secondary",onClick:G,children:"Remove Config"}),e(l,{variant:"body2",color:"textSecondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]})]})]})})};export{we as CollectorDetailsPageDeprecated};
2
2
  //# sourceMappingURL=CollectorDetailsPageDeprecated.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as a,Fragment as b,jsx as o}from"react/jsx-runtime";import{Content as C}from"@backstage/core-components";import{useRouteRef as m}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{Box as P,HeaderPage as k,ButtonLink as y}from"@backstage/ui";import{RiInformationLine as x}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as F}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as L}from"react-router-dom";import{useGetCollectors as w}from"../../hooks/collectors/useGetCollectors.esm.js";import{useFeatureFlag as B}from"../../hooks/useFeatureFlag.esm.js";import{integrationsPageRouteRef as M,integrationDetailsRouteRef as N}from"../../routes.esm.js";import{formStyles as j}from"../../utils/formStyles.esm.js";import{LoadingIndicator as E}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as H}from"../PageWarningMessage/PageWarningMessage.esm.js";import{RoutingMainMenu as S}from"../RoutingPage/RoutingMainMenu.esm.js";import{Configurator as U}from"./Configurators/Configurator.esm.js";const W=({collectorId:s,includeHeader:l})=>{const c=L(),r=s??c.integrationId,t=B("backstage-ui"),{data:f,isLoading:d}=w([r??""]),{loading:p,allowed:g}=R({permission:F}),u=m(M),h=m(N),e=f?.[0],i=d||p,n=g&&e?.isEditable,I=j();return a(b,{children:[t&&l&&o(S,{children:null}),t&&o(P,{children:o(k,{title:"Configuration",breadcrumbs:[{label:"Integrations",href:u()},{label:e?.name??e?.id??"Integration",href:h({integrationId:r??""})}],customActions:o(y,{iconStart:o(x,{}),href:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${e?.id}`,target:"_blank",rel:"noopener noreferrer",variant:"secondary"})})}),a(C,{className:t?I.formWrapperBUI:"",children:[i&&o(E,{}),o(H,{entityName:"Integration",entityId:r,showNotFound:!i&&!e,showCannotEdit:!i&&!n}),e&&n&&o(U,{selectedCollector:e})]})]})};export{W as CollectorPage};
1
+ import{jsxs as a,Fragment as h,jsx as t}from"react/jsx-runtime";import{Content as b}from"@backstage/core-components";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as C}from"@backstage/plugin-permission-react";import{HeaderPage as P,ButtonLink as R}from"@backstage/ui";import{RiInformationLine as k}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as y}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as F}from"react-router-dom";import{useGetCollectors as L}from"../../hooks/collectors/useGetCollectors.esm.js";import{useFeatureFlag as w}from"../../hooks/useFeatureFlag.esm.js";import{integrationsPageRouteRef as x,integrationDetailsRouteRef as N}from"../../routes.esm.js";import{formStyles as j}from"../../utils/formStyles.esm.js";import{LoadingIndicator as B}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as E}from"../PageWarningMessage/PageWarningMessage.esm.js";import{Configurator as S}from"./Configurators/Configurator.esm.js";const U=({collectorId:m})=>{const c=F(),r=m??c.integrationId,i=w("backstage-ui"),{data:l,isLoading:f}=L([r??""]),{loading:p,allowed:d}=C({permission:y}),g=s(x),u=s(N),o=l?.[0],e=f||p,n=d&&o?.isEditable,I=j();return a(h,{children:[i&&t(P,{title:"Configuration",breadcrumbs:[{label:"Integrations",href:g()},{label:o?.name??o?.id??"Integration",href:u({integrationId:r??""})}],customActions:t(R,{iconStart:t(k,{}),href:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${o?.id}`,target:"_blank",rel:"noopener noreferrer",variant:"secondary"})}),a(b,{className:i?I.formWrapperBUI:"",children:[e&&t(B,{}),t(E,{entityName:"Integration",entityId:r,showNotFound:!e&&!o,showCannotEdit:!e&&!n}),o&&n&&t(S,{selectedCollector:o})]})]})};export{U as CollectorPage};
2
2
  //# sourceMappingURL=CollectorPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as e}from"react/jsx-runtime";import{useRouteRef as g}from"@backstage/core-plugin-api";import{Card as x,CardHeader as y,CardBody as C,Box as o,Text as v,Button as R,Tooltip as k,CardFooter as b,ButtonLink as w}from"@backstage/ui";import{makeStyles as B}from"@material-ui/core";import{Alert as D}from"@material-ui/lab";import{parseFactRef as T}from"@spotify/backstage-plugin-soundcheck-common";import{uniq as j,isEmpty as S}from"lodash";import{useMemo as F}from"react";import{TooltipTrigger as H}from"react-aria-components";import{checkDetailsRouteRef as I}from"../../routes.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import{SoundcheckMarkdownContentBUI as L}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const M=B(()=>({cardDescription:{"& p":{marginTop:"var(--bui-space-0)",marginBottom:"var(--bui-space-0)"}},cardContent:{flexGrow:1},container:{padding:"0 var(--bui-space-5)"}})),N=({id:p,title:f,description:a,rules:c,integrationId:s,hasSchedule:h})=>{const d=M(),u=g(I),l=F(()=>{const r=[],m=i=>{for(const t of i.conditions??[])r.push(t.factRef),typeof t.value=="object"&&Object.hasOwn(t.value,"factRef")&&r.push(t.value.factRef);for(const t of i.expressions??[])m(t)};return c&&m(c),j(r).filter(i=>{try{return T(i).source===s}catch{return!1}})},[s,c]);return n(x,{children:[e(y,{title:f}),n(C,{className:d.cardContent,children:[a&&e(o,{style:{maxHeight:"200px",overflow:"auto"},children:e(L,{className:d.cardDescription,content:a})}),!S(l)&&n(o,{mt:"6",style:{maxHeight:"120px",overflow:"auto"},children:[e(v,{style:{fontWeight:"bold"},children:"Used Fact Refs"}),l.map(r=>e(o,{children:r},"factRef"))]}),h&&e(o,{mt:"6",children:n(H,{children:[e(R,{variant:"tertiary",style:{padding:0,height:"auto"},children:e(D,{severity:"warning",children:"Check Schedule Detected"})}),e(k,{children:"Configure this integration's collection schedule instead."})]})})]}),e(b,{children:e(o,{mt:"6",children:e(w,{href:u({checkId:p}),target:"_blank",children:"View"})})})]})};export{N as DependantCheckCard};
1
+ import{jsxs as n,jsx as e}from"react/jsx-runtime";import{useRouteRef as g}from"@backstage/core-plugin-api";import{Card as v,CardHeader as x,CardBody as y,Box as o,Text as C,Button as R,Tooltip as k,CardFooter as b,ButtonLink as w}from"@backstage/ui";import{makeStyles as B}from"@material-ui/core";import{Alert as D}from"@material-ui/lab";import{parseFactRef as T}from"@spotify/backstage-plugin-soundcheck-common";import{uniq as j,isEmpty as S}from"lodash";import{useMemo as F}from"react";import{TooltipTrigger as H}from"react-aria-components";import{checkDetailsRouteRef as I}from"../../routes.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import{SoundcheckMarkdownContentBUI as L}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const M=B(()=>({cardDescription:{"& p":{marginTop:"var(--bui-space-0)",marginBottom:"var(--bui-space-0)"}},cardContent:{flexGrow:1},container:{padding:"0 var(--bui-space-5)"}})),N=({id:p,title:f,description:a,rules:c,integrationId:s,hasSchedule:h})=>{const d=M(),u=g(I),l=F(()=>{const r=[],m=i=>{for(const t of i.conditions??[])r.push(t.factRef),t.value&&typeof t.value=="object"&&Object.hasOwn(t.value,"factRef")&&r.push(t.value.factRef);for(const t of i.expressions??[])m(t)};return c&&m(c),j(r).filter(i=>{try{return T(i).source===s}catch{return!1}})},[s,c]);return n(v,{children:[e(x,{title:f}),n(y,{className:d.cardContent,children:[a&&e(o,{style:{maxHeight:"200px",overflow:"auto"},children:e(L,{className:d.cardDescription,content:a})}),!S(l)&&n(o,{mt:"6",style:{maxHeight:"120px",overflow:"auto"},children:[e(C,{style:{fontWeight:"bold"},children:"Used Fact Refs"}),l.map(r=>e(o,{children:r},"factRef"))]}),h&&e(o,{mt:"6",children:n(H,{children:[e(R,{variant:"tertiary",style:{padding:0,height:"auto"},children:e(D,{severity:"warning",children:"Check Schedule Detected"})}),e(k,{children:"Configure this integration's collection schedule instead."})]})})]}),e(b,{children:e(o,{mt:"6",children:e(w,{href:u({checkId:p}),target:"_blank",children:"View"})})})]})};export{N as DependantCheckCard};
2
2
  //# sourceMappingURL=DependantCheckCard.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as d,Fragment as j}from"react/jsx-runtime";import{useRouteRef as S}from"@backstage/core-plugin-api";import{usePermission as q}from"@backstage/plugin-permission-react";import{Box as k,HeaderPage as F,SearchField as M,Table as Y,TableHeader as z,Column as c,TableBody as G,Row as V,Cell as g,Button as $}from"@backstage/ui";import{makeStyles as J}from"@material-ui/core";import{soundcheckCollectorUpdatePermission as K}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as O,isEmpty as p}from"lodash";import{useState as C,useMemo as P,useEffect as Q}from"react";import{useNavigate as W}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as X}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useGetCollectors as Z}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as _}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ee}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationDetailsRouteRef as te,integrationEditRouteRef as ie}from"../../routes.esm.js";import{CustomCell as oe}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as re}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{LoadingTableSkeleton as ne}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{IntegrationLogoBUI as ae,hasLogo as se}from"./IntegrationLogoBUI.esm.js";const de=J(()=>({container:{padding:"0 var(--bui-space-3) var(--bui-space-6)"}})),R=["github","gitlab","scm","pagerduty","datadog","kubernetes","jira","sonarqube","newrelic","bigquery","catalog","azure","http","data-registry"],L=t=>{const r=t.hasUIConfig?"UI":"YAML";return p(t.config)&&p(t.collectionConfigs)?"None":r},N=({integration:t,hasConfigPage:r})=>{const m=S(te),l=W(),n=S(ie);return d(V,{onAction:()=>l(m({integrationId:t.id})),children:[e(g,{leadingIcon:e(ae,{integrationId:t.id}),title:se(t.id)?"":t.name??t.id}),e(g,{title:t.description??"N/A"}),e(g,{title:`${String(t.dependentChecks?.length??0)} checks`}),e(g,{title:L(t)}),e(oe,{onClick:u=>u.stopPropagation(),children:e($,{onClick:()=>l(n({integrationId:t.id})),isDisabled:!r,variant:"tertiary",children:"Edit"})})]})},ce=({integrations:t})=>{const r=de(),[m,l]=C(""),[n,u]=C("ascending"),[a,B]=C(""),y=P(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:t?.length}}),[t?.length]),{reportContentLoaded:b}=ee(y),{reporter:v}=_(y),{loading:T,allowed:U}=q({permission:K}),{data:A,isLoading:s}=Z(),h=t?.map(i=>i.integrationId)??R,w=X({items:A??[],searchTerm:m}),f=P(()=>{const i=O(w,o=>a==="name"?o.name??o.id:a==="dependent-checks"?o.dependentChecks?.length??0:a==="config-source"?L(o):h.includes(o.id)?1:2);return n==="descending"&&i.reverse(),i},[w,h,a,n]),I=v?.getLCPValue();Q(()=>{s||b({lcp:I})},[s,b,I]);const D=!s&&!p(f),E=s,x=!s&&p(f),H=e(re,{title:"No integrations found",body:"Your current search term did not return any integrations. Please try a different search term."});return d(j,{children:[e(k,{children:e(F,{customActions:e(M,{value:m,onChange:l,"aria-label":"Search Name"}),title:"Integrations"})}),d(k,{className:r.container,children:[E&&e(ne,{rowCount:10,rowHeight:36}),x&&H,D&&d(Y,{onSortChange:({direction:i,column:o})=>{B(String(o)),u(i)},sortDescriptor:{direction:n,column:a},children:[d(z,{children:[e(c,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"20%"},children:"Name"}),e(c,{style:{width:"54%"},children:"Description"}),e(c,{id:"dependent-checks",allowsSorting:!0,style:{width:"12%"},children:"Dependent Checks"}),e(c,{id:"config-source",allowsSorting:!0,style:{width:"12%"},children:"Config Source"}),e(c,{style:{width:"2%"}})]}),e(G,{children:f.map(i=>e(N,{integration:i,hasConfigPage:!T&&U&&h.includes(i.id)},i.id))})]})]})]})};export{R as ConfigurableIntegrationIds,N as IntegrationRow,ce as IntegrationsListPageBUI};
1
+ import{jsx as e,jsxs as d,Fragment as j}from"react/jsx-runtime";import{useRouteRef as S}from"@backstage/core-plugin-api";import{usePermission as x}from"@backstage/plugin-permission-react";import{HeaderPage as q,SearchField as F,Container as M,Table as Y,TableHeader as z,Column as m,TableBody as G,Row as V,Cell as g,Button as $}from"@backstage/ui";import{makeStyles as J}from"@material-ui/core";import{soundcheckCollectorUpdatePermission as K}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as O,isEmpty as p}from"lodash";import{useState as C,useMemo as k,useEffect as Q}from"react";import{useNavigate as W}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as X}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useGetCollectors as Z}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as _}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ee}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationDetailsRouteRef as te,integrationEditRouteRef as ie}from"../../routes.esm.js";import{CustomCell as oe}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ne}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{LoadingTableSkeleton as re}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{IntegrationLogoBUI as ae,hasLogo as se}from"./IntegrationLogoBUI.esm.js";const P=["github","gitlab","scm","pagerduty","datadog","kubernetes","jira","sonarqube","newrelic","bigquery","catalog","azure","http","data-registry"],R=t=>{const n=t.hasUIConfig?"UI":"YAML";return p(t.config)&&p(t.collectionConfigs)?"None":n},L=({integration:t,hasConfigPage:n})=>{const c=S(te),l=W(),r=S(ie);return d(V,{onAction:()=>l(c({integrationId:t.id})),children:[e(g,{leadingIcon:e(ae,{integrationId:t.id}),title:se(t.id)?"":t.name??t.id}),e(g,{title:t.description??"N/A"}),e(g,{title:`${String(t.dependentChecks?.length??0)} checks`}),e(g,{title:R(t)}),e(oe,{onClick:u=>u.stopPropagation(),children:e($,{onClick:()=>l(r({integrationId:t.id})),isDisabled:!n,variant:"tertiary",children:"Configure"})})]})},de=J(()=>({container:{marginBottom:"var(--bui-space-12)"}})),me=({integrations:t})=>{const n=de(),[c,l]=C(""),[r,u]=C("ascending"),[a,N]=C(""),y=k(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:t?.length}}),[t?.length]),{reportContentLoaded:b}=ee(y),{reporter:B}=_(y),{loading:T,allowed:v}=x({permission:K}),{data:A,isLoading:s}=Z(),h=t?.map(i=>i.integrationId)??P,w=X({items:A??[],searchTerm:c}),f=k(()=>{const i=O(w,o=>a==="name"?o.name??o.id:a==="dependent-checks"?o.dependentChecks?.length??0:a==="config-source"?R(o):h.includes(o.id)?1:2);return r==="descending"&&i.reverse(),i},[w,h,a,r]),I=B?.getLCPValue();Q(()=>{s||b({lcp:I})},[s,b,I]);const D=!s&&!p(f),U=s,E=!s&&p(f),H=e(ne,{title:"No integrations found",body:"Your current search term did not return any integrations. Please try a different search term."});return d(j,{children:[e(q,{customActions:e(F,{value:c,onChange:l,"aria-label":"Search Name"}),title:"Integrations"}),d(M,{className:n.container,children:[U&&e(re,{rowCount:10,rowHeight:36}),E&&H,D&&d(Y,{onSortChange:({direction:i,column:o})=>{N(String(o)),u(i)},sortDescriptor:{direction:r,column:a},children:[d(z,{children:[e(m,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"20%"},children:"Name"}),e(m,{style:{width:"51%"},children:"Description"}),e(m,{id:"dependent-checks",allowsSorting:!0,style:{width:"12%"},children:"Dependent Checks"}),e(m,{id:"config-source",allowsSorting:!0,style:{width:"12%"},children:"Config Source"}),e(m,{style:{width:"5%"}})]}),e(G,{children:f.map(i=>e(L,{integration:i,hasConfigPage:!T&&v&&h.includes(i.id)},i.id))})]})]})]})};export{P as ConfigurableIntegrationIds,L as IntegrationRow,me as IntegrationsListPageBUI};
2
2
  //# sourceMappingURL=IntegrationsListPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o,jsxs as n}from"react/jsx-runtime";import{Link as a}from"@backstage/core-components";import{Flex as c,Text as m,TooltipTrigger as s,ButtonIcon as p,Tooltip as d,Box as h}from"@backstage/ui";import{makeStyles as x}from"@material-ui/core";import{RiInformationLine as g,RiExternalLinkLine as u}from"@remixicon/react";import{CustomCell as f}from"../CustomCell/CustomCell.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import{SoundcheckMarkdownContentBUI as k}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const b=x(()=>({button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50em",padding:0},scrollBox:{maxHeight:"30em",overflow:"auto",padding:"0 var(--bui-space-3)"},docsUrlLink:{display:"flex",alignItems:"center",color:"var(--bui-fg-primary)"},docsUrlIcon:{width:"16px",height:"16px"}})),L=({title:e,description:r,documentationURL:i})=>{const t=b();return o(f,{children:n(c,{gap:"0",align:"center",children:[o(m,{children:e}),n(s,{children:[o(p,{className:t.button,isDisabled:!r,variant:"secondary",icon:o(g,{})}),o(d,{className:t.tooltip,children:o(h,{className:t.scrollBox,children:o(k,{content:r})})})]}),i&&o(a,{to:/^https?:\/\//i.test(i)?i:`http://${i}`,className:t.docsUrlLink,onClick:l=>{l.stopPropagation()},children:o(u,{className:t.docsUrlIcon})})]})})};export{L as DescriptionCell};
1
+ import{jsx as o,jsxs as r}from"react/jsx-runtime";import{Flex as l,Text as m,TooltipTrigger as c,ButtonIcon as a,Tooltip as p,Box as s}from"@backstage/ui";import{makeStyles as d}from"@material-ui/core";import{RiInformationLine as h}from"@remixicon/react";import{CustomCell as x}from"../CustomCell/CustomCell.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import{SoundcheckMarkdownContentBUI as u}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const f=d(()=>({button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50em",padding:0},scrollBox:{maxHeight:"30em",overflow:"auto",padding:"0 var(--bui-space-3)"}})),g=({title:n,description:i,onClick:e})=>{const t=f();return o(x,{children:r(l,{gap:"0",align:"center",children:[o(m,{children:n}),r(c,{children:[o(a,{className:t.button,isDisabled:!i,variant:"secondary",icon:o(h,{}),onClick:e}),o(p,{className:t.tooltip,children:o(s,{className:t.scrollBox,children:o(u,{content:i})})})]})]})})};export{g as DescriptionCell};
2
2
  //# sourceMappingURL=DescriptionCell.esm.js.map
@@ -1,2 +1,2 @@
1
- import{getPercentage as f}from"../../../utils/formatters.esm.js";const u=(e,a)=>{if(!e||typeof e!="object")return null;if(e.groupRef===a)return e.status;if(e.children&&Array.isArray(e.children))for(const o of e.children){const c=u(o,a);if(c)return c}return null},p=(e,a,o,c,l)=>{const s=c.forEntity(e.entityRef).snapshot.primaryTitle,g=e.entityRef,r=a?u(a,g):null,h=o(r?.allPassPercentage||0),d=e.ownedEntityRefs?.length||0;if(!e.children||Object.keys(e.children).length===0){if(d===0)return;const i=Math.log(d+1);if(i===0)return;const n=(r?.passed??0)+(r?.failed??0)+(r?.warning??0)+(r?.error??0)+(r?.notReported??0)+(r?.exempt??0),P={id:s,name:s,entityRef:g,value:i,numberOfEntities:d,color:h,passPercentage:r?.allPassPercentage||0,failPercentage:f(r?.failed,n),warningPercentage:f(r?.warning,n),notReportedPercentage:f(r?.notReported,n),errorPercentage:f(r?.error,n),children:[]};return l&&(P.parent=l),P}const m=Object.values(e.children),t={id:s,name:s,entityRef:g,numberOfEntities:0,color:"",passPercentage:0,failPercentage:0,warningPercentage:0,errorPercentage:0,notReportedPercentage:0,children:[]};l&&(t.parent=l);const y=m.map(i=>{const n=p(i,a,o,c,t);return t.numberOfEntities+=n?.numberOfEntities??0,n}).filter(i=>i!==void 0);return t.children=y,t.color=o(r?.allPassPercentage||0),t.passPercentage=r?.allPassPercentage||0,t};export{p as hierarchyToNivo};
1
+ import{getPercentage as n}from"../../../utils/formatters.esm.js";import{getTrackStatusTotal as R}from"../../../utils/tracks.esm.js";const u=(e,a)=>{if(!e||typeof e!="object")return null;if(e.groupRef===a)return e.status;if(e.children&&Array.isArray(e.children))for(const c of e.children){const l=u(c,a);if(l)return l}return null},p=(e,a,c,l,f)=>{const g=l.forEntity(e.entityRef).snapshot.primaryTitle,d=e.entityRef,r=a?u(a,d):null,h=c(r?.allPassPercentage||0),P=e.ownedEntityRefs?.length||0,t=r?R(r):0;if(!e.children||Object.keys(e.children).length===0){if(P===0)return;const i=Math.log(P+1);if(i===0)return;const s={id:g,name:g,entityRef:d,value:i,numberOfEntities:P,color:h,passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};return f&&(s.parent=f),s}const m=Object.values(e.children),o={id:g,name:g,entityRef:d,numberOfEntities:0,color:"",passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};f&&(o.parent=f);const y=m.map(i=>{const s=p(i,a,c,l,o);return o.numberOfEntities+=s?.numberOfEntities??0,s}).filter(i=>i!==void 0);return o.children=y,o.color=c(r?.allPassPercentage||0),o};export{p as hierarchyToNivo};
2
2
  //# sourceMappingURL=hierarchyToNivo.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as m,jsx as o}from"react/jsx-runtime";import{MenuTrigger as l,ButtonIcon as c,Menu as s,MenuItem as d}from"@backstage/ui";import{makeStyles as u}from"@material-ui/core";import{RiMore2Line as p}from"@remixicon/react";const b=u(()=>({menuButton:{boxShadow:"none !important",backgroundColor:"inherit !important"}})),M=({placement:t,menuActions:i,disabled:e,label:r})=>{const a=b();return m(l,{children:[o(c,{isDisabled:e,variant:"secondary",className:a.menuButton,icon:o(p,{})}),o(s,{placement:t,"aria-label":r,children:i.map(n=>o(d,{iconStart:n.iconStart,onClick:n.onClick,id:n.id,children:n.label},n.id))})]})};export{M as SimpleMenu};
1
+ import{jsxs as i,jsx as o}from"react/jsx-runtime";import{Link as s}from"@backstage/core-components";import{MenuTrigger as u,ButtonIcon as p,Menu as h,MenuItem as r}from"@backstage/ui";import{makeStyles as k}from"@material-ui/core";import{RiMore2Fill as b,RiExternalLinkLine as L}from"@remixicon/react";const f=k(()=>({noButtonBg:{boxShadow:"none !important",backgroundColor:"inherit !important"},docsUrlLink:{color:"inherit",cursor:"default","&:hover":{textDecoration:"none"}}})),S=({placement:a,menuActions:c,disabled:l,label:m,documentationURL:e,isHeaderMenu:d=!0})=>{const t=f();return i(u,{children:[o(p,{isDisabled:l,variant:"secondary",className:d?void 0:t.noButtonBg,icon:o(b,{})}),i(h,{placement:a,"aria-label":m,children:[c.map(n=>o(r,{iconStart:n.iconStart,onClick:n.onClick,id:n.id,children:n.label},n.id)),e&&o(r,{iconStart:o(L,{}),id:"documentationURL",children:o(s,{to:/^https?:\/\//i.test(e)?e:`http://${e}`,className:t.docsUrlLink,target:"_blank",rel:"noreferrer",children:"Documentation"})},"documentationURL")]})]})};export{S as SimpleMenu};
2
2
  //# sourceMappingURL=SimpleMenu.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{useRouteRef as y}from"@backstage/core-plugin-api";import{usePermission as w}from"@backstage/plugin-permission-react";import{RiEditBoxLine as A,RiArchiveLine as L,RiDeleteBinLine as b}from"@remixicon/react";import{soundcheckCampaignUpdatePermission as x,soundcheckCampaignDeletePermission as D}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as a,useMemo as E}from"react";import{useNavigate as M}from"react-router-dom";import{v4 as P}from"uuid";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useArchiveCampaign as S}from"../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as T}from"../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as U}from"../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as B}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{campaignEditRouteRef as N}from"../../routes.esm.js";import{useArchiveConfirmationModal as $}from"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const j=i=>{const n=y(N),m=M(),s=i?.archived,{showModal:d}=B(),{showArchiveModal:c}=$(),{mutate:p}=U(),{mutate:l}=T(),{mutate:u}=S(),{loading:f,allowed:h}=w({permission:x,resourceRef:i?.id}),{loading:g,allowed:v}=w({permission:D,resourceRef:i?.id}),C=a(async()=>{i?.id&&await d({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${i.name??i.id}?`})&&l(i.id)},[d,l,i?.id,i?.name]),R=a(()=>{if(!i)return;const{track:e}=i,r={id:P(),ownerEntityRef:e.ownerEntityRef,description:e.description??"",name:e.name,documentationURL:e.documentationURL,type:"standard",levels:e.levels.map(o=>({checks:o.checks,description:o.description,name:o.name,ordinal:o.ordinal})),filter:e.filter??void 0,exclude:e.exclude??void 0,badgeType:"status",draft:e.draft??!1};p(r)},[i,p]),k=a(async()=>{if(!i?.id)return;const{saveTrack:e,confirmed:r}=await c({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${i.name??i.id}?`});r&&(e&&R(),u(i.id))},[u,i?.id,i?.name,R,c]);return E(()=>{if(!i?.id)return[];const e=[];return!f&&h&&e.push({label:"Edit",id:"edit",onClick:()=>m(n({campaignId:i.id})),iconStart:t(A,{})}),!g&&v&&(s||e.push({label:"Archive",id:"archive",onClick:k,iconStart:t(L,{})}),e.push({label:"Delete",id:"delete",onClick:C,iconStart:t(b,{})})),e},[i?.id,n,v,h,k,C,s,g,f,m])};export{j as useCampaignActions};
1
+ import{jsx as t}from"react/jsx-runtime";import{useRouteRef as L,useApi as N,configApiRef as x}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiEditBoxLine as E,RiArchiveLine as M,RiDeleteBinLine as P,RiNotificationLine as B}from"@remixicon/react";import{soundcheckCampaignUpdatePermission as T,soundcheckCampaignDeletePermission as U,soundcheckCampaignNotificationsCreatePermission as $}from"@spotify/backstage-plugin-soundcheck-common";import{useState as j,useCallback as r,useMemo as I}from"react";import{useNavigate as O}from"react-router-dom";import{v4 as q}from"uuid";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useArchiveCampaign as z}from"../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as F}from"../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as G}from"../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as H}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{campaignEditRouteRef as J}from"../../routes.esm.js";import{useArchiveConfirmationModal as K}from"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const Q=i=>{const m=L(J),s=O(),c=i?.archived,{showModal:d}=H(),[S,p]=j(!1),{showArchiveModal:l}=K(),{mutate:u}=G(),{mutate:f}=F(),{mutate:g}=z(),h=N(x).getOptionalBoolean("soundcheck.notifications.enabled"),{loading:C,allowed:v}=n({permission:T,resourceRef:i?.id}),{loading:R,allowed:k}=n({permission:U,resourceRef:i?.id}),{loading:w,allowed:A}=n({permission:$}),y=r(async()=>{i?.id&&await d({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${i.name??i.id}?`})&&f(i.id)},[d,f,i?.id,i?.name]),b=r(()=>{if(!i)return;const{track:e}=i,a={id:q(),ownerEntityRef:e.ownerEntityRef,description:e.description??"",name:e.name,documentationURL:e.documentationURL,type:"standard",levels:e.levels.map(o=>({checks:o.checks,description:o.description,name:o.name,ordinal:o.ordinal})),filter:e.filter??void 0,exclude:e.exclude??void 0,badgeType:"status",draft:e.draft??!1};u(a)},[i,u]),D=r(async()=>{if(!i?.id)return;const{saveTrack:e,confirmed:a}=await l({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${i.name??i.id}?`});a&&(e&&b(),g(i.id))},[g,i?.id,i?.name,b,l]);return{actions:I(()=>{if(!i?.id)return[];const e=[];return!C&&v&&e.push({label:"Edit",id:"edit",onClick:()=>s(m({campaignId:i.id})),iconStart:t(E,{})}),!R&&k&&(c||e.push({label:"Archive",id:"archive",onClick:D,iconStart:t(M,{})}),e.push({label:"Delete",id:"delete",onClick:y,iconStart:t(P,{})})),!w&&h&&A&&i&&e.push({label:"Send Reminder",id:"send",onClick:()=>p(!0),iconStart:t(B,{})}),e},[i,m,k,v,A,D,y,c,h,R,C,w,s]),showNotificationDialog:S,setShowNotificationDialog:p}};export{Q as useCampaignActions};
2
2
  //# sourceMappingURL=useCampaignActions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as a,jsxs as T}from"react/jsx-runtime";import{makeStyles as $,Grid as u}from"@material-ui/core";import{createContext as j,useMemo as H,useState as i,useEffect as y,useCallback as A}from"react";import{useSearchParams as z}from"react-router-dom";import B from"react-use/lib/useDebounce";import{useFacetsForOwner as I}from"../../hooks/facets/useFacetsForOwner.esm.js";import{useLCPReporting as K}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as M}from"../../hooks/useLoadTimeReporting.esm.js";import{LoadingIndicator as U}from"../LoadingIndicator/LoadingIndicator.esm.js";import{OverviewTable as q}from"../OverviewTable/OverviewTable.esm.js";import{RowHeights as J}from"../OverviewTable/resultsTableUtils.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as Q}from"../SoundcheckHeader/useHeader.esm.js";import{OverviewPageHeader as W}from"./OverviewPageHeader.esm.js";const X=$(e=>({tableContainer:{padding:0,backgroundColor:"transparent",paddingBottom:J.paginationControl},campaignsGrid:{margin:`0 0 ${e.spacing(3)}px`,border:`1px solid ${e.palette.divider}`},campaignsCard:{display:"flex",width:"100%",flexDirection:"column",padding:e.spacing(2),gap:e.spacing(2)},campaignsLink:{textAlign:"center",margin:`${e.spacing(1)}rem 0 ${e.spacing(1)}`},tableLoading:{backgroundColor:e.palette.background.paper,padding:e.spacing(6)},noPadding:{padding:0},accordion:{boxShadow:"none"}})),C=j({searchValue:"",updateSearchValue:e=>{},debouncedSearchValue:"",updateDebouncedSearchValue:e=>{},pivot:!1,updatePivot:e=>{}}),Y=({isFixedGroup:e=!1})=>{const[r,g]=z(),{group:d,kind:o,type:n}=Object.fromEntries(r.entries()),f=H(()=>({routeName:"soundcheck-overview",additionalAttributes:{group:d||"",selectedKind:o||"",selectedType:n||""}}),[d,o,n]),{reportContentLoaded:h}=M(f),{reporter:P}=K(f);Q();const[t,v]=i(void 0),[S,L]=i(void 0),[w,V]=i(),[c,E]=i(""),[O,b]=i(""),[F,G]=i(!1);B(()=>{b(c)},800,[c]),y(()=>{(t?.kind!==o||t?.type!==n)&&v({kind:o,type:n})},[o,n,t]);const{data:k,isLoading:p}=I(d),R=S||w,D=A((s,l,N)=>{s&&(v({kind:s,type:l}),l?(r.set("kind",s),r.set("type",l)):(r.delete("type"),r.set("kind",s)),g(r,{replace:N}))},[r,g]),m=X(),x=P?.getLCPValue();return y(()=>{p||h({lcp:x})},[p,h,x]),a(C.Provider,{value:{searchValue:c,updateSearchValue:E,debouncedSearchValue:O,updateDebouncedSearchValue:b,pivot:F,updatePivot:G},children:T(u,{container:!0,spacing:0,children:[a(u,{item:!0,xs:12,className:m.noPadding,children:a(W,{unfilteredFacets:k,kind:t?.kind,type:t?.type,onChange:D,setError:V,isLoading:p,isFixedGroup:e})}),a(u,{item:!0,xs:12,className:m.tableContainer,children:p?a("div",{className:m.tableLoading,children:a(U,{size:80})}):a(q,{facets:k,kind:t?.kind,type:t?.type,setError:L,hasError:R,ownerEntityRef:d,isFixedGroup:e})})]})})};export{Y as OverviewPageContent,C as OverviewPageContext};
1
+ import{jsx as a,jsxs as T}from"react/jsx-runtime";import{makeStyles as $,Grid as u}from"@material-ui/core";import{createContext as j,useMemo as H,useState as i,useEffect as y,useCallback as A}from"react";import{useSearchParams as z}from"react-router-dom";import B from"react-use/lib/useDebounce";import{useFacetsForOwner as I}from"../../hooks/facets/useFacetsForOwner.esm.js";import{useLCPReporting as K}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as M}from"../../hooks/useLoadTimeReporting.esm.js";import{LoadingIndicator as U}from"../LoadingIndicator/LoadingIndicator.esm.js";import{OverviewTable as q}from"../OverviewTable/OverviewTable.esm.js";import{RowHeights as J}from"../OverviewTable/resultsTableUtils.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as Q}from"../SoundcheckHeader/useHeader.esm.js";import{OverviewPageHeader as W}from"./OverviewPageHeader.esm.js";const X=$(e=>({tableContainer:{padding:0,backgroundColor:"transparent",paddingBottom:J.paginationControl},campaignsGrid:{margin:`0 0 ${e.spacing(3)}px`,border:`1px solid ${e.palette.divider}`},campaignsCard:{display:"flex",width:"100%",flexDirection:"column",padding:e.spacing(2),gap:e.spacing(2)},campaignsLink:{textAlign:"center",margin:`${e.spacing(1)}rem 0 ${e.spacing(1)}`},tableLoading:{backgroundColor:e.palette.background.paper,padding:e.spacing(6)},noPadding:{padding:0},accordion:{boxShadow:"none"}})),C=j({searchValue:"",updateSearchValue:e=>{},debouncedSearchValue:"",updateDebouncedSearchValue:e=>{},pivot:!1,updatePivot:e=>{}}),Y=({isFixedGroup:e=!1})=>{const[r,g]=z(),{group:d,kind:o,type:n}=Object.fromEntries(r.entries()),f=H(()=>({routeName:"soundcheck-overview",additionalAttributes:{group:d||"",selectedKind:o||"",selectedType:n||""}}),[d,o,n]),{reportContentLoaded:v}=M(f),{reporter:P}=K(f);Q();const[t,h]=i(void 0),[S,L]=i(void 0),[w,V]=i(),[c,E]=i(""),[O,b]=i(""),[F,G]=i(!1);B(()=>{b(c)},800,[c]),y(()=>{(t?.kind!==o||t?.type!==n)&&h({kind:o,type:n})},[o,n,t]);const{data:k,isLoading:p}=I(d),R=S||w,D=A((s,l,N)=>{s&&(h({kind:s,type:l}),l?(r.set("kind",s),r.set("type",l)):(r.delete("type"),r.set("kind",s)),g(r,{replace:N}))},[r,g]),m=X(),x=P?.getLCPValue();return y(()=>{p||v({lcp:x})},[p,v,x]),a(C.Provider,{value:{searchValue:c,updateSearchValue:E,debouncedSearchValue:O,updateDebouncedSearchValue:b,pivot:F,updatePivot:G},children:T(u,{container:!0,spacing:0,children:[a(u,{item:!0,xs:12,className:m.noPadding,children:a(W,{unfilteredFacets:k,kind:t?.kind,type:t?.type,onChange:D,setError:V,isLoading:p,isFixedGroup:e})}),a(u,{item:!0,xs:12,className:m.tableContainer,children:p?a("div",{className:m.tableLoading,children:a(U,{size:80})}):a(q,{facets:k,kind:t?.kind,type:t?.type,setError:L,hasError:R,ownerEntityRef:d,isFixedGroup:e})})]})})};export{Y as OverviewPageContent,C as OverviewPageContext};
2
2
  //# sourceMappingURL=OverviewPageContent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Flex as m,TagGroup as p,Tag as d,Box as g,SearchField as h}from"@backstage/ui";import{makeStyles as f}from"@material-ui/core";import{FilterMenu as b}from"../FilterMenu/FilterMenu.esm.js";const S=f(()=>({buttonGroup:{gap:"var(--bui-space-2)",display:"flex",alignItems:"center"},tagGroup:{"@global":{".bui-TagList":{justifyContent:"end !important"}}}})),v=({searchValue:s,setSearchValue:o,filters:i,selected:c,setSelected:n,selectedTags:a,onRemoveTag:u})=>{const l=S();return r(m,{align:"center",gap:"2",children:[a.length>0&&e(p,{"aria-label":"Selected Tags",items:a,onRemove:u,className:l.tagGroup,children:a.map(t=>e(d,{id:t.value,children:t.label},t.value))}),r(g,{className:l.buttonGroup,children:[e(b,{filters:i,selected:c,setSelected:n}),e(h,{value:s,onChange:o,"aria-label":"Search",style:{width:"auto"},placeholder:"Search"})]})]})};export{v as PageCustomActions};
1
+ import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Flex as p,TagGroup as d,Tag as g,Box as h,SearchField as f}from"@backstage/ui";import{makeStyles as S}from"@material-ui/core";import{FilterMenu as b}from"../FilterMenu/FilterMenu.esm.js";const v=S(()=>({buttonGroup:{gap:"var(--bui-space-2)",display:"flex",alignItems:"center"},tagGroup:{"@global":{".bui-TagList":{justifyContent:"end !important"}}}})),x=({searchValue:s,setSearchValue:o,filters:c,selected:i,setSelected:n,selectedTags:a,onRemoveTag:u,showSearch:m})=>{const l=v();return r(p,{align:"center",gap:"2",children:[a.length>0&&e(d,{"aria-label":"Selected Tags",items:a,onRemove:u,className:l.tagGroup,children:a.map(t=>e(g,{id:t.value,children:t.label},t.value))}),r(h,{className:l.buttonGroup,children:[e(b,{filters:c,selected:i,setSelected:n}),m&&e(f,{value:s,onChange:o,"aria-label":"Search",style:{width:"auto"},placeholder:"Search"})]})]})};export{x as PageCustomActions};
2
2
  //# sourceMappingURL=PageCustomActions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as o,Fragment as m}from"react/jsx-runtime";import{useApi as x,featureFlagsApiRef as A,useRouteRef as p}from"@backstage/core-plugin-api";import{usePermission as s}from"@backstage/plugin-permission-react";import{Box as h}from"@backstage/ui";import{soundcheckCampaignCreatePermission as E,soundcheckCheckCreatePermission as B,soundcheckTrackCreatePermission as F}from"@spotify/backstage-plugin-soundcheck-common";import{Helmet as O}from"react-helmet";import{Routes as j,Route as t,useParams as g,Navigate as l}from"react-router-dom";import{trackOverviewRouteRef as y,campaignOverviewRouteRef as H,techInsightsPageRouteRef as M}from"../../routes.esm.js";import{CampaignPage as U}from"../CampaignPage/CampaignPage.esm.js";import{CampaignTechInsightsExplorerPage as D}from"../CampaignPage/CampaignTechInsightsExplorerPage.esm.js";import{CampaignsPage as N}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignCreatePage as S}from"../CampaignCreatePage/CampaignCreatePage.esm.js";import{EditCampaignView as V}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckCreatePage as W}from"../CheckCreatePage/CheckCreatePage.esm.js";import{CheckEditPage as q}from"../CheckPage/CheckEditPage.esm.js";import{CheckPage as d}from"../CheckPage/CheckPage.esm.js";import{ChecksTab as z}from"../ChecksTab/ChecksTab.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import{CheckTemplatesPage as G}from"../CheckTemplatesPage/CheckTemplatesPage.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js";import{CollectorPage as J}from"../CollectorPage/CollectorPage.esm.js";import{CollectorDetailsPage as K}from"../CollectorPage/CollectorDetailsPage.esm.js";import"../CollectorPage/CollectorDetailsPageBUI.esm.js";import"../CollectorPage/CollectorDetailsPageDeprecated.esm.js";import{CollectorsPage as L}from"../CollectorsPage/CollectorsPage.esm.js";import{OverviewPageContent as Q}from"../OverviewPage/OverviewPageContent.esm.js";import{TechHealth as X}from"../TechHealth/TechHealth.esm.js";import{TechInsightsPage as Y}from"../TechInsights/TechInsightsPage.esm.js";import{TrackCreatePage as Z}from"../TrackCreatePage/TrackCreatePage.esm.js";import{TrackEditPage as _}from"../TrackEditPage/TrackEditPage.esm.js";import{TrackPage as $}from"../TrackPage/TrackPage.esm.js";import{TrackTechInsightsExplorerPage as ee}from"../TrackPage/TrackTechInsightsExplorerPage.esm.js";import{TracksTab as te}from"../TracksTab/TracksTab.esm.js";import{RoutingMainMenu as ae}from"./RoutingMainMenu.esm.js";import{RoutingPageWrapperBUI as re}from"./RoutingPageWrapperBUI.esm.js";const ie=()=>{const{trackId:a}=g(),i=p(y);if(!a)return null;const r=i({trackId:a});return e(l,{to:r,replace:!0})},ne=()=>{const{campaignId:a}=g(),i=p(H);if(!a)return null;const r=i({campaignId:a});return e(l,{to:r,replace:!0})},oe=()=>{const a=p(M)();return e(l,{to:a,replace:!0})},ce=({title:a="Soundcheck",integrations:i})=>{const r=x(A),c=r.getRegisteredFlags(),k=!c.find(n=>n.name==="soundcheck-enable-campaigns")||r.isActive("soundcheck-enable-campaigns"),{loading:f,allowed:u}=s({permission:E}),I=!f&&u,{loading:P,allowed:C}=s({permission:B}),v=!c.find(n=>n.name==="soundcheck-enable-check-creation")||r.isActive("soundcheck-enable-check-creation"),R=!P&&C&&v,{loading:T,allowed:b}=s({permission:F}),w=!c.find(n=>n.name==="soundcheck-enable-track-creation")||r.isActive("soundcheck-enable-track-creation");return e(re,{title:a,children:e(ae,{children:o(j,{children:[k&&o(m,{children:[e(t,{path:"/campaigns",element:e(N,{})}),e(t,{path:"/campaigns/:campaignId/edit",element:e(V,{})}),e(t,{path:"/campaigns/:campaignId",element:e(ne,{})}),e(t,{path:"/campaigns/:campaignId/overview",element:e(U,{})}),e(t,{path:"/campaigns/:campaignId/explorer",element:e(D,{})}),I&&e(t,{path:"/campaigns/create",element:e(S,{})})]}),e(t,{path:"/tracks",element:e(te,{})}),e(t,{path:"/tracks/:trackId/edit",element:e(_,{})}),!T&&b&&w&&e(t,{path:"/tracks/create",element:e(Z,{})}),e(t,{path:"/tracks/:trackId",element:e(ie,{})}),e(t,{path:"/tracks/:trackId/overview",element:e($,{})}),e(t,{path:"/tracks/:trackId/explorer",element:e(ee,{})}),e(t,{path:"/tracks/:trackId/checks/:checkId",element:e(d,{})}),e(t,{path:"/checks",element:e(z,{})}),e(t,{path:"/checks/:checkId",element:e(d,{})}),e(t,{path:"/checks/:checkId/edit",element:e(q,{})}),R&&o(m,{children:[e(t,{path:"/checks/create",element:e(W,{})}),e(t,{path:"/checks/templates",element:e(G,{})})]}),e(t,{path:"/integrations",element:e(L,{integrations:i})}),e(t,{path:"/integrations/:integrationId",element:e(K,{integrations:i})}),e(t,{path:"/integrations/:integrationId/edit",element:e(J,{})}),e(t,{path:"/tech-insights",element:o(m,{children:[e(O,{title:"Tech Insights"}),e(Y,{})]})}),e(t,{path:"/tech-health",element:e(h,{style:{margin:"36px 32px"},children:e(X,{})})}),e(t,{path:"/overview",element:e(h,{style:{margin:"var(--bui-space-6) var(--bui-space-2)"},children:e(Q,{})})}),e(t,{path:"/",element:e(oe,{})})]})})})};export{ce as RoutingPageBUI};
1
+ import{jsx as e,jsxs as o,Fragment as m}from"react/jsx-runtime";import{useApi as x,featureFlagsApiRef as A,useRouteRef as p}from"@backstage/core-plugin-api";import{usePermission as s}from"@backstage/plugin-permission-react";import{Box as h}from"@backstage/ui";import{soundcheckCampaignCreatePermission as E,soundcheckCheckCreatePermission as B,soundcheckTrackCreatePermission as F}from"@spotify/backstage-plugin-soundcheck-common";import{Helmet as O}from"react-helmet";import{Routes as j,Route as t,useParams as g,Navigate as l}from"react-router-dom";import{trackOverviewRouteRef as y,campaignOverviewRouteRef as H,techInsightsPageRouteRef as U}from"../../routes.esm.js";import{CampaignPage as D}from"../CampaignPage/CampaignPage.esm.js";import{CampaignTechInsightsExplorerPage as N}from"../CampaignPage/CampaignTechInsightsExplorerPage.esm.js";import{CampaignsPage as S}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignCreatePage as V}from"../CampaignCreatePage/CampaignCreatePage.esm.js";import{EditCampaignView as W}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckCreatePage as q}from"../CheckCreatePage/CheckCreatePage.esm.js";import{CheckEditPage as z}from"../CheckPage/CheckEditPage.esm.js";import{CheckPage as d}from"../CheckPage/CheckPage.esm.js";import{ChecksTab as G}from"../ChecksTab/ChecksTab.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import{CheckTemplatesPage as J}from"../CheckTemplatesPage/CheckTemplatesPage.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js";import{CollectorPage as K}from"../CollectorPage/CollectorPage.esm.js";import{CollectorDetailsPage as L}from"../CollectorPage/CollectorDetailsPage.esm.js";import"../CollectorPage/CollectorDetailsPageBUI.esm.js";import"../CollectorPage/CollectorDetailsPageDeprecated.esm.js";import{CollectorsPage as M}from"../CollectorsPage/CollectorsPage.esm.js";import{OverviewPageContent as Q}from"../OverviewPage/OverviewPageContent.esm.js";import{TechHealth as X}from"../TechHealth/TechHealth.esm.js";import{TechInsightsPage as Y}from"../TechInsights/TechInsightsPage.esm.js";import{TrackCreatePage as Z}from"../TrackCreatePage/TrackCreatePage.esm.js";import{TrackEditPage as _}from"../TrackEditPage/TrackEditPage.esm.js";import{TrackPage as $}from"../TrackPage/TrackPage.esm.js";import{TrackTechInsightsExplorerPage as ee}from"../TrackPage/TrackTechInsightsExplorerPage.esm.js";import{TracksTab as te}from"../TracksTab/TracksTab.esm.js";import{RoutingPageWrapperBUI as ae}from"./RoutingPageWrapperBUI.esm.js";const re=()=>{const{trackId:a}=g(),i=p(y);if(!a)return null;const r=i({trackId:a});return e(l,{to:r,replace:!0})},ie=()=>{const{campaignId:a}=g(),i=p(H);if(!a)return null;const r=i({campaignId:a});return e(l,{to:r,replace:!0})},ne=()=>{const a=p(U)();return e(l,{to:a,replace:!0})},oe=({title:a="Soundcheck",integrations:i})=>{const r=x(A),c=r.getRegisteredFlags(),k=!c.find(n=>n.name==="soundcheck-enable-campaigns")||r.isActive("soundcheck-enable-campaigns"),{loading:f,allowed:u}=s({permission:E}),I=!f&&u,{loading:P,allowed:C}=s({permission:B}),v=!c.find(n=>n.name==="soundcheck-enable-check-creation")||r.isActive("soundcheck-enable-check-creation"),R=!P&&C&&v,{loading:T,allowed:b}=s({permission:F}),w=!c.find(n=>n.name==="soundcheck-enable-track-creation")||r.isActive("soundcheck-enable-track-creation");return e(ae,{title:a,children:o(j,{children:[k&&o(m,{children:[e(t,{path:"/campaigns",element:e(S,{})}),e(t,{path:"/campaigns/:campaignId/edit",element:e(W,{})}),e(t,{path:"/campaigns/:campaignId",element:e(ie,{})}),e(t,{path:"/campaigns/:campaignId/overview",element:e(D,{})}),e(t,{path:"/campaigns/:campaignId/explorer",element:e(N,{})}),I&&e(t,{path:"/campaigns/create",element:e(V,{})})]}),e(t,{path:"/tracks",element:e(te,{})}),e(t,{path:"/tracks/:trackId/edit",element:e(_,{})}),!T&&b&&w&&e(t,{path:"/tracks/create",element:e(Z,{})}),e(t,{path:"/tracks/:trackId",element:e(re,{})}),e(t,{path:"/tracks/:trackId/overview",element:e($,{})}),e(t,{path:"/tracks/:trackId/explorer",element:e(ee,{})}),e(t,{path:"/tracks/:trackId/checks/:checkId",element:e(d,{})}),e(t,{path:"/checks",element:e(G,{})}),e(t,{path:"/checks/:checkId",element:e(d,{})}),e(t,{path:"/checks/:checkId/edit",element:e(z,{})}),R&&o(m,{children:[e(t,{path:"/checks/create",element:e(q,{})}),e(t,{path:"/checks/templates",element:e(J,{})})]}),e(t,{path:"/integrations",element:e(M,{integrations:i})}),e(t,{path:"/integrations/:integrationId",element:e(L,{integrations:i})}),e(t,{path:"/integrations/:integrationId/edit",element:e(K,{})}),e(t,{path:"/tech-insights",element:o(m,{children:[e(O,{title:"Tech Insights"}),e(Y,{})]})}),e(t,{path:"/tech-health",element:e(h,{style:{margin:"36px 24px"},children:e(X,{})})}),e(t,{path:"/overview",element:e(h,{style:{margin:"var(--bui-space-6) var(--bui-space-6)"},children:e(Q,{})})}),e(t,{path:"/",element:e(ne,{})})]})})};export{oe as RoutingPageBUI};
2
2
  //# sourceMappingURL=RoutingPageBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as i,jsxs as t,Fragment as B}from"react/jsx-runtime";import{Typography as e,Box as n,TextField as u,Button as b}from"@material-ui/core";import{capitalize as F}from"lodash";import{useState as s,useCallback as O}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useSendCampaignNotification as R}from"../../hooks/campaigns/useSendCampaignNotification.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as W}from"../../hooks/aggregations/useCertificationStatus.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as I}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as p}from"../FormFieldLabel/FormFieldLabel.esm.js";import{LoadingIndicator as A}from"../LoadingIndicator/LoadingIndicator.esm.js";import{SoundcheckDialog as E}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const $=["critical","high","normal","low"],j=({loading:m,notificationCount:o,reset:g,error:l,failingCount:d})=>t(n,{children:[m&&t(n,{textAlign:"center",children:[i(e,{variant:"body1",children:"Sending Notifications..."}),i(e,{variant:"caption",children:"Do not refresh or leave the page."}),i(n,{marginTop:2,marginBottom:1,children:i(A,{size:48})})]}),!m&&t(n,{children:[t(e,{variant:"body1",children:[t("strong",{children:[o," Notification",o===1?"":"s"," "]}),"sent to entity owners."]}),l&&i(e,{variant:"body2",color:"error",children:l.message}),d&&o<d&&t(e,{variant:"caption",children:["Notifications are grouped by owner, so this number might be less than the total failing entity count of"," ",i("strong",{children:d}),"."]}),i(n,{marginTop:2,children:i(b,{onClick:g,variant:"outlined",color:"primary",children:"Send Again"})})]})]}),z=({isOpen:m,campaign:o,handleClose:g})=>{const[l,d]=s(""),[f,x]=s(""),[h,S]=s("normal"),[a,w]=s(""),[N,y]=s(!1),{data:T}=W({trackId:o.track.id},m),{mutate:v,isLoading:C,notificationCount:k,error:L}=R(),D=O(()=>{v({campaignId:o.id,entityRefs:a?[a]:void 0,title:l,description:f,severity:h.toLowerCase()}),y(!0)},[o.id,f,a,v,h,l]),c=T?.certificationStatus?.statusByLevel[0]?.failed??0;return i(E,{handleClose:g,title:"Send a Campaign Reminder Notification",open:m,fullScreen:!1,maxWidth:"sm",children:N?i(j,{loading:C,notificationCount:k,reset:()=>y(!1),error:L,failingCount:c}):t(B,{children:[i(e,{variant:"body1",children:"Send a notification for all entities that are currently failing checks in this campaign. Notifications will be grouped by the owner of these entities."}),t(n,{marginTop:1,children:[i(n,{display:"flex",children:i(p,{title:"Severity"})}),i(I,{value:h,onChange:S,options:$,fullWidth:!1,getOptionLabel:r=>F(r)})]}),t(n,{marginTop:1,children:[i(p,{title:"Custom Notification Title (Optional)"}),i(u,{value:l,onChange:r=>d(r.target.value),placeholder:`Default: Entities Failing Campaign - ${o.name}`,type:"text",variant:"outlined",margin:"dense",fullWidth:!0})]}),t(n,{marginTop:1,children:[i(p,{title:"Custom Notification Description (Optional)"}),i(e,{variant:"caption",component:"div",children:"Templating for custom notification messages is currently not supported."}),i(u,{value:f,onChange:r=>x(r.target.value),placeholder:`Default: Entities owned by [ownerGroup] are failing checks required in Campaign - ${o.name}.`,type:"text",variant:"outlined",margin:"dense",multiline:!0,minRows:4,maxRows:8,fullWidth:!0})]}),t(n,{marginTop:1,children:[i(p,{title:"Entity Ref For Testing (Optional)"}),i(e,{variant:"caption",component:"div",children:"Select a specific entityRef to send a notification to - used for testing. Will bypass checking if the campaign is actually failing for this entity."}),i(u,{value:a,onChange:r=>w(r.target.value),placeholder:"example: component:default/test-component",type:"text",variant:"outlined",margin:"dense",fullWidth:!0})]}),t(n,{marginTop:2,display:"flex",alignItems:"center",children:[i(b,{disabled:!a&&c===0||C,variant:"outlined",color:"primary",onClick:D,children:"Send"}),a&&t(e,{style:{marginLeft:6},variant:"caption",children:["Notification will be sent to ",a,"."]}),!a&&!!c&&t(e,{style:{marginLeft:6},variant:"caption",children:["Notifications will be sent for the",i("strong",{children:` ~${c} `}),c===1?"entity":"entities"," failing this campaign"]}),!a&&c===0&&i(e,{color:"error",style:{marginLeft:6},variant:"caption",children:"No entities failing campaign."})]})]})})};export{z as SendCampaignNotificationDialogBUI};
2
+ //# sourceMappingURL=SendCampaignNotificationDialogBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as r}from"react/jsx-runtime";import{Box as c,Flex as i,Link as t,ButtonLink as n}from"@backstage/ui";import{makeStyles as o}from"@material-ui/core";import{RiCheckDoubleLine as s,RiQuestionLine as d,RiSettings2Line as u}from"@remixicon/react";const p=o(()=>({header:{background:"var(--bui-bg-surface-1)",padding:"var(--bui-space-3)",margin:"var(--bui-space-2)",borderRadius:"var(--bui-space-1)",boxShadow:"1px 1px 1px var(--bui-bg-surface-2)"}})),h=()=>{const a=p();return e(c,{className:a.header,children:r(i,{align:"center",justify:"between",children:[r(i,{align:"center",gap:"2",children:[e(s,{size:18}),e(t,{href:"/soundcheck",variant:"body-medium",children:"Soundcheck"})]}),r(i,{align:"center",gap:"2",children:[e(n,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/",variant:"secondary",iconStart:e(d,{}),target:"_blank",rel:"noreferrer",children:"Help"}),e(n,{href:"/settings",variant:"secondary",iconStart:e(u,{})})]})]})})};export{h as SoundcheckHeaderBUI};
1
+ import{jsx as t,jsxs as v,Fragment as y}from"react/jsx-runtime";import{useRouteRef as e,useApi as s,featureFlagsApiRef as x,configApiRef as A}from"@backstage/core-plugin-api";import{usePermission as P}from"@backstage/plugin-permission-react";import{Header as C,ButtonLink as n}from"@backstage/ui";import{RiCheckDoubleLine as H,RiQuestionLine as L,RiSettings2Line as w}from"@remixicon/react";import{soundcheckCollectorReadPermission as F}from"@spotify/backstage-plugin-soundcheck-common";import{rootRouteRef as I,tracksPageRouteRef as T,checksPageRouteRef as j,campaignsPageRouteRef as B,integrationsPageRouteRef as O,overviewRouteRef as z,techHealthRouteRef as D}from"../../routes.esm.js";const Q=()=>{const r=e(I)(),o=e(T)(),h=e(j)(),l=e(B)(),f=e(O)(),g=e(z)(),d=e(D)(),i=s(x),m=s(A).getOptionalStringArray("soundcheck.flags"),c=i.getRegisteredFlags(),u=(!c.find(a=>a.name==="soundcheck-enable-tech-health")||i.isActive("soundcheck-enable-tech-health"))&&!m?.includes("soundcheck-disable-tech-health"),p=!c.find(a=>a.name==="soundcheck-enable-campaigns")||i.isActive("soundcheck-enable-campaigns"),{loading:k,allowed:R}=P({permission:F}),b=(!c.find(a=>a.name==="soundcheck-enable-collectors")||i.isActive("soundcheck-enable-collectors"))&&!k&&R,S=[{id:"tech-insights",label:"Tech Insights",href:r,matchStrategy:"exact"},{id:"checks",label:"Checks",href:h,matchStrategy:"prefix"},{id:"tracks",label:"Tracks",href:o,matchStrategy:"prefix"},...p?[{id:"campaigns",label:"Campaigns",href:l,matchStrategy:"prefix"}]:[],...b?[{id:"integrations",label:"Integrations",href:f,matchStrategy:"prefix"}]:[],{id:"classic-overview",label:"Classic Overview",href:g,matchStrategy:"exact"},...u?[{id:"tech-health",label:"Tech Health",href:d,matchStrategy:"exact"}]:[]];return t(C,{title:"Soundcheck",icon:t(H,{size:18}),titleLink:r,tabs:S,customActions:v(y,{children:[t(n,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/",variant:"secondary",iconStart:t(L,{}),target:"_blank",rel:"noreferrer",children:"Help"}),t(n,{href:"/settings",variant:"secondary",iconStart:t(w,{})})]})})};export{Q as SoundcheckHeaderBUI};
2
2
  //# sourceMappingURL=SoundcheckHeaderBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as C,jsx as i}from"react/jsx-runtime";import{useApi as h}from"@backstage/core-plugin-api";import{entityPresentationApiRef as g}from"@backstage/plugin-catalog-react";import{Row as R,Cell as y,CellProfile as A}from"@backstage/ui";import{useNavigate as k}from"react-router-dom";import{CustomCell as w}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as P}from"../DescriptionCell/DescriptionCell.esm.js";import{SimpleMenu as x}from"../Menus/SimpleMenu.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const T=({ownerEntityRef:t,href:r,profileImageSrc:p,cells:n,menuActions:m,name:l,description:c,documentationURL:s})=>{const a=h(g),e=t?a.forEntity(t):void 0,f=k();return C(R,{onAction:()=>r&&f(r),children:[i(P,{title:l,description:c,documentationURL:s}),n.map((o,d)=>i(y,{title:o.title,leadingIcon:o.icon,onClick:u=>{o.onClick&&(u.stopPropagation(),o.onClick())}},`cell-${d}`)),i(A,{name:e?.snapshot.primaryTitle,src:p??e?.snapshot.primaryTitle}),i(w,{onClick:o=>o.stopPropagation(),children:i(x,{disabled:!m?.length,placement:"left top",menuActions:m??[]})})]})};export{T as TableRowWithOwner};
1
+ import{jsxs as u,jsx as i}from"react/jsx-runtime";import{useApi as h}from"@backstage/core-plugin-api";import{entityPresentationApiRef as g}from"@backstage/plugin-catalog-react";import{Row as R,Cell as k,CellProfile as y}from"@backstage/ui";import{useNavigate as A}from"react-router-dom";import{CustomCell as w}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as P}from"../DescriptionCell/DescriptionCell.esm.js";import{SimpleMenu as x}from"../Menus/SimpleMenu.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const T=({ownerEntityRef:r,href:t,profileImageSrc:n,cells:l,menuActions:e,name:c,description:s,documentationURL:a})=>{const f=h(g),m=r?f.forEntity(r):void 0,p=A();return u(R,{onAction:()=>t&&p(t),children:[i(P,{title:c,description:s,onClick:()=>t&&p(t)}),l.map((o,d)=>i(k,{title:o.title,leadingIcon:o.icon,onClick:C=>{o.onClick&&(C.stopPropagation(),o.onClick())}},`cell-${d}`)),i(y,{name:m?.snapshot.primaryTitle,src:n??m?.snapshot.primaryTitle}),i(w,{onClick:o=>o.stopPropagation(),children:i(x,{disabled:!e?.length,placement:"left top",menuActions:e??[],documentationURL:a,isHeaderMenu:!1})})]})};export{T as TableRowWithOwner};
2
2
  //# sourceMappingURL=TableRowWithOwner.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as a,jsx as i,Fragment as o}from"react/jsx-runtime";import{Box as t,Card as s,Text as n}from"@backstage/ui";import{makeStyles as h}from"@material-ui/core";import{Skeleton as p}from"@material-ui/lab";const m=h(()=>({summaryTilesContainer:{gap:"var(--bui-space-4)",display:"flex",marginBottom:"var(--bui-space-4)"},summaryTile:{padding:"var(--bui-space-3)"},tile:{minHeight:90,display:"flex",flexDirection:"column",justifyContent:"space-between"}})),c=({title:e,content:l,isLoading:r})=>{const d=m();return a(t,{className:d.tile,children:[i(n,{variant:"body-large",children:e}),r?i(o,{children:i(p,{variant:"text",width:50,height:40})}):i(t,{children:l})]})},g=({summaryStats:e,isLoading:l=!1})=>{const r=m();return a(t,{className:r.summaryTilesContainer,children:[i(s,{className:r.summaryTile,children:i(c,{isLoading:l||e.numTeams===void 0||e.numEntities===void 0,title:"Group Information",content:a(o,{children:[a(t,{children:[i(n,{children:e.numTeams})," ",i(n,{color:"secondary",children:"Groups"})]}),a(t,{children:[i(n,{children:e.numEntities})," ",i(n,{color:"secondary",children:"Entities"})]})]})})}),i(s,{className:r.summaryTile,children:i(c,{isLoading:l||e.totalActiveTracksCampaigns===void 0||e.totalCampaigns===void 0||e.totalTracks===void 0,title:"Tracks & Campaigns",content:a(o,{children:[a(t,{children:[i(n,{children:e.totalActiveTracksCampaigns})," ",i(n,{color:"secondary",children:"Total Tracks & Campaigns"})]}),a(t,{children:[i(n,{children:(e.totalCampaigns??0)+(e.totalTracks??0)})," ",i(n,{color:"secondary",children:"Applicable Tracks & Campaigns"})]})]})})}),i(s,{className:r.summaryTile,children:i(c,{isLoading:l||e.avgCompliance===void 0||e.totalCampaigns===void 0||e.totalTracks===void 0,title:"Average Compliance",content:i(o,{children:i(t,{children:i(n,{variant:"title-medium",children:!e.totalTracks&&!e.totalCampaigns?"-":`${e.avgCompliance}%`})})})})})]})};export{g as SummaryTilesBUI};
1
+ import{jsxs as t,jsx as i,Fragment as o}from"react/jsx-runtime";import{Box as r,Card as s,Text as e}from"@backstage/ui";import{makeStyles as p}from"@material-ui/core";import{Skeleton as h}from"@material-ui/lab";const m=p(()=>({summaryTilesContainer:{gap:"var(--bui-space-4)",display:"flex",marginBottom:"var(--bui-space-4)"},summaryTile:{padding:"var(--bui-space-3)"},tile:{minHeight:90,display:"flex",flexDirection:"column",justifyContent:"space-between"}})),c=({title:a,content:l,isLoading:n})=>{const d=m();return t(r,{className:d.tile,children:[i(e,{variant:"body-large",children:a}),n?i(o,{children:i(h,{variant:"text",width:50,height:40})}):i(r,{children:l})]})},u=({summaryStats:a,isLoading:l=!1})=>{const n=m();return t(r,{className:n.summaryTilesContainer,children:[i(s,{className:n.summaryTile,children:i(c,{isLoading:l||a.numTeams===void 0||a.numEntities===void 0,title:"Group Information",content:t(o,{children:[t(r,{children:[i(e,{children:a.numTeams})," ",i(e,{color:"secondary",children:a.numTeams===1?"Group":"Groups"})]}),t(r,{children:[i(e,{children:a.numEntities})," ",i(e,{color:"secondary",children:a.numEntities===1?"Entity":"Entities"})]})]})})}),i(s,{className:n.summaryTile,children:i(c,{isLoading:l||a.totalActiveTracksCampaigns===void 0||a.totalCampaigns===void 0||a.totalTracks===void 0,title:"Tracks & Campaigns",content:t(o,{children:[t(r,{children:[i(e,{children:a.totalActiveTracksCampaigns})," ",i(e,{color:"secondary",children:"Total Tracks & Campaigns"})]}),t(r,{children:[i(e,{children:(a.totalCampaigns??0)+(a.totalTracks??0)})," ",i(e,{color:"secondary",children:"Applicable Tracks & Campaigns"})]})]})})}),i(s,{className:n.summaryTile,children:i(c,{isLoading:l||a.avgCompliance===void 0||a.totalCampaigns===void 0||a.totalTracks===void 0,title:"Average Compliance",content:i(o,{children:i(r,{children:i(e,{variant:"title-medium",children:!a.totalTracks&&!a.totalCampaigns?"-":`${a.avgCompliance}%`})})})})})]})};export{u as SummaryTilesBUI};
2
2
  //# sourceMappingURL=SummaryTilesBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o,jsxs as M,Fragment as de}from"react/jsx-runtime";import{useApi as ue,useRouteRef as X}from"@backstage/core-plugin-api";import{entityPresentationApiRef as ge}from"@backstage/plugin-catalog-react";import{Box as g,HeaderPage as he,Flex as fe,SearchField as ke}from"@backstage/ui";import{makeStyles as ye,LinearProgress as Te}from"@material-ui/core";import{isEmpty as Se}from"lodash";import{useState as _,useMemo as s,useCallback as Ee,useEffect as Ce}from"react";import{useSearchParams as Le,useNavigate as Re}from"react-router-dom";import we from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSortTableLocalStorage as ve}from"../../hooks/useSortTableLocalStorage.esm.js";import{useBatchedHierarchicalTrackStatuses as be}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as Ie}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as Pe}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useFeatureFlag as Be}from"../../hooks/useFeatureFlag.esm.js";import{useLCPReporting as Ae}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as xe}from"../../hooks/useLoadTimeReporting.esm.js";import{trackExplorerRouteRef as Me,campaignExplorerRouteRef as Ue}from"../../routes.esm.js";import{getAllOwnedEntityCount as Fe}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as $e,getTracksBucket as De}from"../../utils/helpers.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ge}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as He}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as Ne}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{SummaryTiles as Oe}from"./SummaryTiles.esm.js";import{SummaryTilesBUI as je}from"./SummaryTilesBUI.esm.js";import{TechInsightsTableBUI as Ve}from"./TechInsightsTableBUI.esm.js";const ze=ye(()=>({container:{padding:"var(--bui-space-3)",paddingTop:0,position:"relative"}})),We=()=>{const Y=Be("backstage-ui"),[S,Z]=Le(),r=S.get("group")||"",[m,ee]=_(S.get("search")||""),[h,te]=_(""),U=s(()=>({routeName:"soundcheck-tech-insights",additionalAttributes:{group:r||"",tracksSearch:h||""}}),[r,h]),{reportContentLoaded:F}=xe({...U,enabled:!!r}),{reporter:re}=Ae(U),$=ze(),D=Re();He();const E=ue(ge),{order:ae,orderBy:oe,handleSort:ie}=ve({localStoragePrefix:"soundcheck-tech-insights",defaultSortBy:"entities",defaultDirection:"desc"});we(()=>{te(m);const e=new URLSearchParams(S.toString());m?e.set("search",m):e.delete("search"),Z(e,{replace:!0})},500,[m]);const{tracks:C,campaigns:G,counts:L,isLoading:l,error:R,activeTrackCount:w}=Pe(r,{},{enabled:!!r}),p=C.filter(e=>e.type==="campaign"),v=C.filter(e=>e.type!=="campaign"),f=p.filter(e=>{const t=h.toLowerCase(),n=(e.ownerEntityRef?E.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||n.includes(t)}),k=v.filter(e=>{const t=h.toLowerCase(),n=(e.ownerEntityRef?E.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||n.includes(t)}),b=s(()=>[...f,...k],[f,k]),c=s(()=>[...p.map(e=>e.id),...v.map(e=>e.id)],[p,v]),{data:I,isLoading:ne,error:se,progress:i}=be({trackIds:c,groupRef:r||"",skip:!r||c.length===0}),{data:H,isLoading:y}=Ie(r,{includeParent:!0}),P=s(()=>{const e=new Map;return Array.isArray(I)&&I.forEach(t=>{t&&t.trackId&&e.set(t.trackId,t)}),e},[I]),ce=s(()=>{const e=new Map;return Array.isArray(L)&&L.forEach(t=>{t&&t.id&&e.set(t.id,t.applicableEntityCount)}),e},[L]),N=l&&!R&&!!r,O=R||se,B=c.length>0&&ne&&!O&&!!r,j=s(()=>({totalCampaigns:f.length,totalTracks:k.length,totalActiveTracksCampaigns:w}),[w,f.length,k.length]),V=s(()=>{if(B)return{numTeams:void 0,avgCompliance:void 0};let e=0,t=0;const n=new Set;return b.forEach(T=>{const a=P.get(T.id);if(a){a.status&&typeof a.status.allPassPercentage=="number"&&(e+=a.status.allPassPercentage,t++),a.groupRef&&n.add(a.groupRef);const u=[a];for(;u.length>0;){const pe=u.pop();for(const x of pe.children)n.has(x.groupRef)||(n.add(x.groupRef),u.push(x))}}}),{numTeams:n.size,avgCompliance:t>0?Math.round(e/t):0}},[b,P,B]),d=s(()=>{if(y)return{numEntities:void 0};const e=H?.[r];return{numEntities:Fe(e)}},[H,y,r]),z=s(()=>({...j,...V,...d}),[j,V,d]),W=X(Me),q=X(Ue),me=Ee(e=>{if(!r)return;const t=new URLSearchParams;t.set("group",r),t.set("node",r);const n=p.find(({id:a})=>a===e);let T=W({trackId:e});if(n){const a=G?.edges.find(({node:u})=>u.track.id===e)?.node.id;a&&(T=q({campaignId:a}))}D(`${T}?${t.toString()}`)},[r,D,p,G,q,W]),J=r?E.forEntity(r).snapshot.primaryTitle:void 0,A=s(()=>!i||i.totalTracks===0?0:i.loadedTracks/i.totalTracks*100,[i]),K=l&&r&&!R||B&&i&&i.totalTracks>0,Q=re?.getLCPValue();Ce(()=>{if(!y&&!l&&(A===100||c.length===0)){const e=d.numEntities??0,t=c.length;F({lcp:Q,numberOfEntities:d.numEntities,entitiesBucket:$e(e),numberOfTracks:c.length,tracksBucket:De(t)})}},[y,l,A,c.length,d.numEntities,F,Q]);const le=Y?o(je,{summaryStats:z,isLoading:N}):o(Oe,{summaryStats:z,isLoading:l});return O?o(g,{mt:"6",className:$.container,children:o(Ge,{title:"No Tech Insights Data",body:"There was an error loading Tech Insights data."})}):M(de,{children:[o(g,{children:o(he,{title:`${J?`${J}'s `:""}Tech Insights`,customActions:M(fe,{align:"center",gap:"3",children:[o(Ne,{hideSelected:!0}),o(ke,{isDisabled:Se(C),value:m,onChange:ee,placeholder:"Search tracks or campaigns",style:{minWidth:250},"aria-label":"Search"})]})})}),M(g,{className:$.container,children:[o(g,{style:{marginTop:0},children:le}),K&&o(g,{style:{marginBottom:16},children:o(Te,{variant:i&&i.totalTracks>0?"determinate":"indeterminate",value:i&&i.totalTracks>0?A:void 0,"data-testid":"batch-loading-indicator"})}),o(Ve,{tracks:b,trackStatusMap:P,trackCountsMap:ce,sortColumn:oe,order:ae,handleSort:ie,handleTrackClick:me,isLoading:N||!!K,isSearch:!!m,activeTrackCount:w,hasGroupSelected:!!r})]})]})};export{We as TechInsightsPageBUI};
1
+ import{jsx as i,jsxs as x,Fragment as ue}from"react/jsx-runtime";import{useApi as de,useRouteRef as Q}from"@backstage/core-plugin-api";import{entityPresentationApiRef as ge}from"@backstage/plugin-catalog-react";import{Box as U,HeaderPage as fe,Flex as he,SearchField as ke,Container as ye}from"@backstage/ui";import{makeStyles as Te,LinearProgress as Se}from"@material-ui/core";import{isEmpty as Ee}from"lodash";import{useState as Z,useMemo as s,useCallback as Ce,useEffect as Le}from"react";import{useSearchParams as Re,useNavigate as we}from"react-router-dom";import be from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSortTableLocalStorage as ve}from"../../hooks/useSortTableLocalStorage.esm.js";import{useBatchedHierarchicalTrackStatuses as Ie}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as Pe}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as Be}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useFeatureFlag as Ae}from"../../hooks/useFeatureFlag.esm.js";import{useLCPReporting as xe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ue}from"../../hooks/useLoadTimeReporting.esm.js";import{trackExplorerRouteRef as Fe,campaignExplorerRouteRef as Me}from"../../routes.esm.js";import{getAllOwnedEntityCount as De}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as Ge,getTracksBucket as He}from"../../utils/helpers.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ne}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as $e}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as Oe}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{SummaryTiles as je}from"./SummaryTiles.esm.js";import{SummaryTilesBUI as We}from"./SummaryTilesBUI.esm.js";import{TechInsightsTableBUI as ze}from"./TechInsightsTableBUI.esm.js";const Ve=Te(()=>({container:{marginBottom:"var(--bui-space-12)"}})),qe=()=>{const _=Ve(),X=Ae("backstage-ui"),[T,Y]=Re(),r=T.get("group")||"",[m,ee]=Z(T.get("search")||""),[g,te]=Z(""),F=s(()=>({routeName:"soundcheck-tech-insights",additionalAttributes:{group:r||"",tracksSearch:g||""}}),[r,g]),{reportContentLoaded:M}=Ue({...F,enabled:!!r}),{reporter:re}=xe(F),D=we();$e();const S=de(ge),{order:oe,orderBy:ae,handleSort:ie}=ve({localStoragePrefix:"soundcheck-tech-insights",defaultSortBy:"entities",defaultDirection:"desc"});be(()=>{te(m);const e=new URLSearchParams(T.toString());m?e.set("search",m):e.delete("search"),Y(e,{replace:!0})},500,[m]);const{tracks:E,campaigns:G,counts:C,isLoading:l,error:L,activeTrackCount:R}=Be(r,{},{enabled:!!r}),p=E.filter(e=>e.type==="campaign"),w=E.filter(e=>e.type!=="campaign"),f=p.filter(e=>{const t=g.toLowerCase(),n=(e.ownerEntityRef?S.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||n.includes(t)}),h=w.filter(e=>{const t=g.toLowerCase(),n=(e.ownerEntityRef?S.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||n.includes(t)}),b=s(()=>[...f,...h],[f,h]),c=s(()=>[...p.map(e=>e.id),...w.map(e=>e.id)],[p,w]),{data:v,isLoading:ne,error:se,progress:a}=Ie({trackIds:c,groupRef:r||"",skip:!r||c.length===0}),{data:H,isLoading:k}=Pe(r,{includeParent:!0}),I=s(()=>{const e=new Map;return Array.isArray(v)&&v.forEach(t=>{t&&t.trackId&&e.set(t.trackId,t)}),e},[v]),ce=s(()=>{const e=new Map;return Array.isArray(C)&&C.forEach(t=>{t&&t.id&&e.set(t.id,t.applicableEntityCount)}),e},[C]),N=l&&!L&&!!r,$=L||se,P=c.length>0&&ne&&!$&&!!r,O=s(()=>({totalCampaigns:f.length,totalTracks:h.length,totalActiveTracksCampaigns:R}),[R,f.length,h.length]),j=s(()=>{if(P)return{numTeams:void 0,avgCompliance:void 0};let e=0,t=0;const n=new Set;return b.forEach(y=>{const o=I.get(y.id);if(o){o.status&&typeof o.status.allPassPercentage=="number"&&(e+=o.status.allPassPercentage,t++),o.groupRef&&n.add(o.groupRef);const d=[o];for(;d.length>0;){const pe=d.pop();for(const A of pe.children)n.has(A.groupRef)||(n.add(A.groupRef),d.push(A))}}}),{numTeams:n.size,avgCompliance:t>0?Math.round(e/t):0}},[b,I,P]),u=s(()=>{if(k)return{numEntities:void 0};const e=H?.[r];return{numEntities:De(e)}},[H,k,r]),W=s(()=>({...O,...j,...u}),[O,j,u]),z=Q(Fe),V=Q(Me),me=Ce(e=>{if(!r)return;const t=new URLSearchParams;t.set("group",r),t.set("node",r);const n=p.find(({id:o})=>o===e);let y=z({trackId:e});if(n){const o=G?.edges.find(({node:d})=>d.track.id===e)?.node.id;o&&(y=V({campaignId:o}))}D(`${y}?${t.toString()}`)},[r,D,p,G,V,z]),q=r?S.forEntity(r).snapshot.primaryTitle:void 0,B=s(()=>!a||a.totalTracks===0?0:a.loadedTracks/a.totalTracks*100,[a]),J=l&&r&&!L||P&&a&&a.totalTracks>0,K=re?.getLCPValue();Le(()=>{if(!k&&!l&&(B===100||c.length===0)){const e=u.numEntities??0,t=c.length;M({lcp:K,numberOfEntities:u.numEntities,entitiesBucket:Ge(e),numberOfTracks:c.length,tracksBucket:He(t)})}},[k,l,B,c.length,u.numEntities,M,K]);const le=X?i(We,{summaryStats:W,isLoading:N}):i(je,{summaryStats:W,isLoading:l});return $?i(U,{mt:"6",children:i(Ne,{title:"No Tech Insights Data",body:"There was an error loading Tech Insights data."})}):x(ue,{children:[i(fe,{title:`${q?`${q}'s `:""}Tech Insights`,customActions:x(he,{align:"center",gap:"3",children:[i(Oe,{hideSelected:!0}),i(ke,{isDisabled:Ee(E),value:m,onChange:ee,placeholder:"Search tracks or campaigns",style:{minWidth:250},"aria-label":"Search"})]})}),x(ye,{className:_.container,children:[i(U,{style:{marginTop:0},children:le}),J&&i(U,{style:{marginBottom:16},children:i(Se,{variant:a&&a.totalTracks>0?"determinate":"indeterminate",value:a&&a.totalTracks>0?B:void 0,"data-testid":"batch-loading-indicator"})}),i(ze,{tracks:b,trackStatusMap:I,trackCountsMap:ce,sortColumn:ae,order:oe,handleSort:ie,handleTrackClick:me,isLoading:N||!!J,isSearch:!!m,activeTrackCount:R,hasGroupSelected:!!r})]})]})};export{qe as TechInsightsPageBUI};
2
2
  //# sourceMappingURL=TechInsightsPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o,Fragment as ge,jsxs as Q}from"react/jsx-runtime";import{useApi as ue,useRouteRef as he}from"@backstage/core-plugin-api";import{entityPresentationApiRef as fe}from"@backstage/plugin-catalog-react";import{makeStyles as ke,Box as d,Typography as W,LinearProgress as ye}from"@material-ui/core";import{useTheme as Te}from"@material-ui/core/styles";import{useState as M,useMemo as s,useCallback as X,useEffect as Ce}from"react";import{useSearchParams as Se,useNavigate as we}from"react-router-dom";import Ee from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSortTableLocalStorage as Le}from"../../hooks/useSortTableLocalStorage.esm.js";import{useBatchedHierarchicalTrackStatuses as Re}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as ve}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as be}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useLCPReporting as Pe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ie}from"../../hooks/useLoadTimeReporting.esm.js";import{techInsightsTrackRouteRef as xe}from"../../routes.esm.js";import{getAllOwnedEntityCount as Ae}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as Be,getTracksBucket as Me}from"../../utils/helpers.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as Ne}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as je}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{FilterControls as Ge}from"./FilterControls.esm.js";import{SummaryTiles as De}from"./SummaryTiles.esm.js";import{TechInsightsTableView as Fe}from"./TechInsightsTableView.esm.js";const Oe=ke(a=>({container:{padding:a.spacing(3,2),paddingTop:0,position:"relative"},gridContainer:{marginTop:a.spacing(3)},gridItem:{cursor:"pointer","&:hover":{transform:"scale(1.02)",transition:"transform 0.2s ease-in-out"}},emptyState:{textAlign:"center",padding:a.spacing(4)},errorState:{textAlign:"center",padding:a.spacing(4)},headerControls:{display:"flex",alignItems:"center"},progressIndicator:{position:"absolute",top:0,left:0,right:0,zIndex:a.zIndex.speedDial},tableRow:{"&:hover":{backgroundColor:a.palette.action.hover}}})),ze=()=>{const[a,L]=Se(),r=a.get("group")||"",[g,Y]=M(a.get("search")||""),[S,Z]=M(""),[c,_]=M(a.get("tracks")?.split(",").filter(Boolean)||[]),N=s(()=>({routeName:"soundcheck-tech-insights",additionalAttributes:{group:r||"",tracksFilter:c.join(",")||"",tracksFilterCount:c.length,tracksSearch:S||""}}),[r,S,c]),{reportContentLoaded:j}=Ie({...N,enabled:!!r}),{reporter:q}=Pe(N),u=Oe(),J=Te(),G=we();Ne();const D=ue(fe),{order:K,orderBy:ee,handleSort:te}=Le({localStoragePrefix:"soundcheck-tech-insights",defaultSortBy:"entities",defaultDirection:"desc"});Ee(()=>{Z(g);const e=new URLSearchParams(a.toString());g?e.set("search",g):e.delete("search"),L(e,{replace:!0})},500,[g]);const re=X(e=>{_(e);const t=new URLSearchParams(a.toString());e.length>0?t.set("tracks",e.join(",")):t.delete("tracks"),L(t,{replace:!0})},[a,L]),{tracks:w,counts:R,isLoading:m,error:v,activeTrackCount:F}=be(r,{},{enabled:!!r}),h=w.filter(e=>e.type==="campaign"),f=w.filter(e=>e.type!=="campaign"),ae=s(()=>[...h,...f].map(e=>({id:e.id,name:e.name,type:e.type==="campaign"?"Campaign":"Track"})),[h,f]),k=h.filter(e=>{const t=S.toLowerCase(),l=(e.ownerEntityRef?D.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"",C=t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||l.includes(t),i=c.length===0||c.includes(e.id);return C&&i}),y=f.filter(e=>{const t=S.toLowerCase(),l=(e.ownerEntityRef?D.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"",C=t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||l.includes(t),i=c.length===0||c.includes(e.id);return C&&i}),p=s(()=>[...h.map(e=>e.id),...f.map(e=>e.id)],[h,f]),{data:b,isLoading:oe,error:ne,progress:n}=Re({trackIds:p,groupRef:r||"",skip:!r||p.length===0}),{data:O,isLoading:E}=ve(r,{includeParent:!0}),P=s(()=>{const e=new Map;return Array.isArray(b)&&b.forEach(t=>{t&&t.trackId&&e.set(t.trackId,t)}),e},[b]),ie=s(()=>{const e=new Map;return Array.isArray(R)&&R.forEach(t=>{t&&t.id&&e.set(t.id,t.applicableEntityCount)}),e},[R]),se=m&&!v&&!!r,z=v||ne,I=p.length>0&&oe&&!z&&!!r,H=s(()=>({totalCampaigns:k.length,totalTracks:y.length,totalActiveTracksCampaigns:F}),[F,k.length,y.length]),U=s(()=>{if(I)return{numTeams:void 0,avgCompliance:void 0};let e=0,t=0;const l=new Set;return[...k,...y].forEach(C=>{const i=P.get(C.id);if(i){i.status&&typeof i.status.allPassPercentage=="number"&&(e+=i.status.allPassPercentage,t++),i.groupRef&&l.add(i.groupRef);const A=[i];for(;A.length>0;){const de=A.pop();for(const B of de.children)l.has(B.groupRef)||(l.add(B.groupRef),A.push(B))}}}),{numTeams:l.size,avgCompliance:t>0?Math.round(e/t):0}},[k,y,P,I]),T=s(()=>{if(E)return{numEntities:void 0};const e=O?.[r];return{numEntities:Ae(e)}},[O,E,r]),ce=s(()=>({...H,...U,...T}),[H,U,T]),$=he(xe),le=X(e=>{if(!r)return;const t=new URLSearchParams;t.set("group",r),t.set("track",e),t.set("node",r),G(`${$()}?${t.toString()}`)},[r,G,$]),x=s(()=>!n||n.totalTracks===0?0:n.loadedTracks/n.totalTracks*100,[n]),pe=m&&r&&!v||I&&n&&n.totalTracks>0,V=q?.getLCPValue();Ce(()=>{if(!E&&!m&&(x===100||p.length===0)){const e=T.numEntities??0,t=p.length;j({lcp:V,numberOfEntities:T.numEntities,entitiesBucket:Be(e),numberOfTracks:p.length,tracksBucket:Me(t)})}},[E,m,x,p.length,T.numEntities,j,V]);const me=o(De,{summaryStats:ce,isLoading:m});return z?o(d,{className:u.container,children:o(W,{variant:"h4",className:u.errorState,children:"Error loading tech insights data"})}):o(ge,{children:Q(d,{className:u.container,children:[Q(d,{display:"flex",justifyContent:"space-between",alignItems:"center",gridGap:12,marginBottom:3,children:[o(je,{}),o(Ge,{searchText:g,onSearchTextChange:Y,selectedTrackIds:c,onSelectedTrackIdsChange:re,trackOptions:ae,applicableTracks:w,isLoading:se})]}),o(d,{style:{marginTop:0},children:me}),pe&&o(d,{style:{marginBottom:16},children:o(ye,{variant:n&&n.totalTracks>0?"determinate":"indeterminate",value:n&&n.totalTracks>0?x:void 0,"data-testid":"batch-loading-indicator"})}),w.length===0&&!m?o(d,{className:u.emptyState,children:o(W,{variant:"h6",children:r?"No applicable tracks found for the selected group":"Please select a group to view applicable tracks"})}):o(Fe,{tracks:[...k,...y],trackStatusMap:P,trackCountsMap:ie,orderBy:ee,order:K,handleSort:te,handleTrackClick:le,theme:J,classes:u})]})})};export{ze as TechInsightsPageDeprecated};
1
+ import{jsx as o,Fragment as ge,jsxs as Q}from"react/jsx-runtime";import{useApi as ue,useRouteRef as he}from"@backstage/core-plugin-api";import{entityPresentationApiRef as fe}from"@backstage/plugin-catalog-react";import{makeStyles as ke,Box as d,Typography as W,LinearProgress as ye}from"@material-ui/core";import{useTheme as Te}from"@material-ui/core/styles";import{useState as M,useMemo as s,useCallback as X,useEffect as Ce}from"react";import{useSearchParams as Se,useNavigate as we}from"react-router-dom";import Ee from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSortTableLocalStorage as Le}from"../../hooks/useSortTableLocalStorage.esm.js";import{useBatchedHierarchicalTrackStatuses as Re}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as ve}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as be}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useLCPReporting as Pe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ie}from"../../hooks/useLoadTimeReporting.esm.js";import{techInsightsTrackRouteRef as xe}from"../../routes.esm.js";import{getAllOwnedEntityCount as Ae}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as Be,getTracksBucket as Me}from"../../utils/helpers.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as Ne}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as je}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{FilterControls as Ge}from"./FilterControls.esm.js";import{SummaryTiles as De}from"./SummaryTiles.esm.js";import{TechInsightsTableView as Fe}from"./TechInsightsTableView.esm.js";const Oe=ke(a=>({container:{padding:a.spacing(3,2),paddingTop:0,position:"relative"},gridContainer:{marginTop:a.spacing(3)},gridItem:{cursor:"pointer","&:hover":{transform:"scale(1.02)",transition:"transform 0.2s ease-in-out"}},emptyState:{textAlign:"center",padding:a.spacing(4)},errorState:{textAlign:"center",padding:a.spacing(4)},headerControls:{display:"flex",alignItems:"center"},progressIndicator:{position:"absolute",top:0,left:0,right:0,zIndex:a.zIndex.speedDial},tableRow:{"&:hover":{backgroundColor:a.palette.action.hover}}})),ze=()=>{const[a,L]=Se(),r=a.get("group")||"",[g,Y]=M(a.get("search")||""),[S,Z]=M(""),[c,_]=M(a.get("tracks")?.split(",").filter(Boolean)||[]),N=s(()=>({routeName:"soundcheck-tech-insights",additionalAttributes:{group:r||"",tracksFilter:c.join(",")||"",tracksFilterCount:c.length,tracksSearch:S||""}}),[r,S,c]),{reportContentLoaded:j}=Ie({...N,enabled:!!r}),{reporter:q}=Pe(N),u=Oe(),J=Te(),G=we();Ne();const D=ue(fe),{order:K,orderBy:ee,handleSort:te}=Le({localStoragePrefix:"soundcheck-tech-insights",defaultSortBy:"entities",defaultDirection:"desc"});Ee(()=>{Z(g);const e=new URLSearchParams(a.toString());g?e.set("search",g):e.delete("search"),L(e,{replace:!0})},500,[g]);const re=X(e=>{_(e);const t=new URLSearchParams(a.toString());e.length>0?t.set("tracks",e.join(",")):t.delete("tracks"),L(t,{replace:!0})},[a,L]),{tracks:w,counts:R,isLoading:m,error:v,activeTrackCount:F}=be(r,{},{enabled:!!r}),h=w.filter(e=>e.type==="campaign"),f=w.filter(e=>e.type!=="campaign"),ae=s(()=>[...h,...f].map(e=>({id:e.id,name:e.name,type:e.type==="campaign"?"Campaign":"Track"})),[h,f]),k=h.filter(e=>{const t=S.toLowerCase(),l=(e.ownerEntityRef?D.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"",C=t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||l.includes(t),i=c.length===0||c.includes(e.id);return C&&i}),y=f.filter(e=>{const t=S.toLowerCase(),l=(e.ownerEntityRef?D.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"",C=t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||l.includes(t),i=c.length===0||c.includes(e.id);return C&&i}),p=s(()=>[...h.map(e=>e.id),...f.map(e=>e.id)],[h,f]),{data:b,isLoading:oe,error:ne,progress:n}=Re({trackIds:p,groupRef:r||"",skip:!r||p.length===0}),{data:O,isLoading:E}=ve(r,{includeParent:!0}),P=s(()=>{const e=new Map;return Array.isArray(b)&&b.forEach(t=>{t&&t.trackId&&e.set(t.trackId,t)}),e},[b]),ie=s(()=>{const e=new Map;return Array.isArray(R)&&R.forEach(t=>{t&&t.id&&e.set(t.id,t.applicableEntityCount)}),e},[R]),se=m&&!v&&!!r,z=v||ne,I=p.length>0&&oe&&!z&&!!r,H=s(()=>({totalCampaigns:k.length,totalTracks:y.length,totalActiveTracksCampaigns:F}),[F,k.length,y.length]),U=s(()=>{if(I)return{numTeams:void 0,avgCompliance:void 0};let e=0,t=0;const l=new Set;return[...k,...y].forEach(C=>{const i=P.get(C.id);if(i){i.status&&typeof i.status.allPassPercentage=="number"&&(e+=i.status.allPassPercentage,t++),i.groupRef&&l.add(i.groupRef);const A=[i];for(;A.length>0;){const de=A.pop();for(const B of de.children)l.has(B.groupRef)||(l.add(B.groupRef),A.push(B))}}}),{numTeams:l.size,avgCompliance:t>0?Math.round(e/t):0}},[k,y,P,I]),T=s(()=>{if(E)return{numEntities:void 0};const e=O?.[r];return{numEntities:Ae(e)}},[O,E,r]),ce=s(()=>({...H,...U,...T}),[H,U,T]),V=he(xe),le=X(e=>{if(!r)return;const t=new URLSearchParams;t.set("group",r),t.set("track",e),t.set("node",r),G(`${V()}?${t.toString()}`)},[r,G,V]),x=s(()=>!n||n.totalTracks===0?0:n.loadedTracks/n.totalTracks*100,[n]),pe=m&&r&&!v||I&&n&&n.totalTracks>0,$=q?.getLCPValue();Ce(()=>{if(!E&&!m&&(x===100||p.length===0)){const e=T.numEntities??0,t=p.length;j({lcp:$,numberOfEntities:T.numEntities,entitiesBucket:Be(e),numberOfTracks:p.length,tracksBucket:Me(t)})}},[E,m,x,p.length,T.numEntities,j,$]);const me=o(De,{summaryStats:ce,isLoading:m});return z?o(d,{className:u.container,children:o(W,{variant:"h4",className:u.errorState,children:"Error loading tech insights data"})}):o(ge,{children:Q(d,{className:u.container,children:[Q(d,{display:"flex",justifyContent:"space-between",alignItems:"center",gridGap:12,marginBottom:3,children:[o(je,{}),o(Ge,{searchText:g,onSearchTextChange:Y,selectedTrackIds:c,onSelectedTrackIdsChange:re,trackOptions:ae,applicableTracks:w,isLoading:se})]}),o(d,{style:{marginTop:0},children:me}),pe&&o(d,{style:{marginBottom:16},children:o(ye,{variant:n&&n.totalTracks>0?"determinate":"indeterminate",value:n&&n.totalTracks>0?x:void 0,"data-testid":"batch-loading-indicator"})}),w.length===0&&!m?o(d,{className:u.emptyState,children:o(W,{variant:"h6",children:r?"No applicable tracks found for the selected group":"Please select a group to view applicable tracks"})}):o(Fe,{tracks:[...k,...y],trackStatusMap:P,trackCountsMap:ie,orderBy:ee,order:K,handleSort:te,handleTrackClick:le,theme:J,classes:u})]})})};export{ze as TechInsightsPageDeprecated};
2
2
  //# sourceMappingURL=TechInsightsPageDeprecated.esm.js.map