@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.
- package/CHANGELOG.md +13 -0
- package/dist/alpha/integrations.esm.js +1 -1
- package/dist/api.esm.js +1 -1
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
- package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
- package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
- package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
- package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +1 -1
- package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +1 -1
- package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
- package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/DependantCheckCard.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
- package/dist/components/DescriptionCell/DescriptionCell.esm.js +1 -1
- package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
- package/dist/components/Menus/SimpleMenu.esm.js +1 -1
- package/dist/components/Menus/useCampaignActions.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
- package/dist/components/PageCustomActions/PageCustomActions.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
- package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +2 -0
- package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +1 -1
- package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
- package/dist/components/TechInsights/SummaryTilesBUI.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsTableView.esm.js +1 -1
- package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
- package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
- package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
- package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +1 -1
- package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
- package/dist/hooks/filters/useFilters.esm.js +1 -1
- package/dist/routes.esm.js +1 -1
- package/dist/utils/tracks.esm.js +2 -0
- package/package.json +1 -1
- 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
|
|
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
|
|
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{
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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
|
package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js
ADDED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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])
|
|
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
|