@spotify/backstage-plugin-soundcheck 0.19.6 → 0.19.7

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 (75) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/alpha.d.ts +21 -21
  3. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  4. package/dist/components/CampaignPage/CampaignStatusHistoryChart.esm.js +1 -1
  5. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
  6. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  7. package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +1 -1
  8. package/dist/components/Cards/DescriptionCard/DescriptionCard.esm.js +1 -1
  9. package/dist/components/Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js +1 -1
  10. package/dist/components/Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js +1 -1
  11. package/dist/components/Cards/TrackStatusCard/TrackStatusCard.esm.js +1 -1
  12. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  13. package/dist/components/CheckPage/CheckStatusHistoryChartBUI.esm.js +1 -1
  14. package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +1 -1
  15. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  16. package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
  17. package/dist/components/CollectorPage/DependantCheckCard.esm.js +1 -1
  18. package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +1 -1
  19. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  20. package/dist/components/DescriptionCell/DescriptionCell.esm.js +1 -1
  21. package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +1 -1
  22. package/dist/components/ImportExportPanel/ImportExportPanelBUI.esm.js +1 -1
  23. package/dist/components/LoadingTableSkeleton/LoadingTableSkeleton.esm.js +1 -1
  24. package/dist/components/Menus/SimpleMenu.esm.js +1 -1
  25. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  26. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
  27. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +1 -1
  28. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  29. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  30. package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +1 -1
  31. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
  32. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
  33. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  34. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
  35. package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +1 -1
  36. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  37. package/dist/hooks/useLoadTimeReporting.esm.js +1 -1
  38. package/dist/hooks/useSearchNameOwner.esm.js +2 -0
  39. package/dist/images/integrations-bui/azure-rgb.svg +1 -0
  40. package/dist/images/integrations-bui/azure-wht.svg +1 -0
  41. package/dist/images/integrations-bui/bigquery-rgb.svg +1 -0
  42. package/dist/images/integrations-bui/bigquery-wht.svg +1 -0
  43. package/dist/images/integrations-bui/catalog-rgb.svg +1 -0
  44. package/dist/images/integrations-bui/catalog-wht.svg +1 -0
  45. package/dist/images/integrations-bui/data-registry-rgb.svg +1 -0
  46. package/dist/images/integrations-bui/data-registry-wht.svg +1 -0
  47. package/dist/images/integrations-bui/datadog-rgb.svg +1 -0
  48. package/dist/images/integrations-bui/datadog-wht.svg +1 -0
  49. package/dist/images/integrations-bui/default-logo-rgb.svg +1 -0
  50. package/dist/images/integrations-bui/default-logo-wht.svg +1 -0
  51. package/dist/images/integrations-bui/github-rgb.svg +1 -0
  52. package/dist/images/integrations-bui/github-wht.svg +1 -0
  53. package/dist/images/integrations-bui/gitlab-rgb.svg +1 -0
  54. package/dist/images/integrations-bui/gitlab-wht.svg +1 -0
  55. package/dist/images/integrations-bui/http-rgb.svg +1 -0
  56. package/dist/images/integrations-bui/http-wht.svg +1 -0
  57. package/dist/images/integrations-bui/jira-rgb.svg +1 -0
  58. package/dist/images/integrations-bui/jira-wht.svg +1 -0
  59. package/dist/images/integrations-bui/kubernetes-rgb.svg +1 -0
  60. package/dist/images/integrations-bui/kubernetes-wht.svg +1 -0
  61. package/dist/images/integrations-bui/newrelic-rgb.svg +1 -0
  62. package/dist/images/integrations-bui/newrelic-wht.svg +1 -0
  63. package/dist/images/integrations-bui/pagerduty-rgb.svg +1 -0
  64. package/dist/images/integrations-bui/pagerduty-wht.svg +1 -0
  65. package/dist/images/integrations-bui/scm-rgb.svg +1 -0
  66. package/dist/images/integrations-bui/scm-wht.svg +1 -0
  67. package/dist/images/integrations-bui/sonarqube-rgb.svg +1 -0
  68. package/dist/images/integrations-bui/sonarqube-wht.svg +1 -0
  69. package/dist/images/integrations-bui/soundcheck-rgb.svg +1 -0
  70. package/dist/images/integrations-bui/soundcheck-wht.svg +1 -0
  71. package/dist/images/integrations-bui/techinsights-rgb.svg +1 -0
  72. package/dist/images/integrations-bui/techinsights-wht.svg +1 -0
  73. package/dist/utils/lcpReporting.esm.js +1 -1
  74. package/dist/utils/tracks.esm.js +1 -1
  75. package/package.json +22 -22
@@ -1,2 +1,2 @@
1
- import{asArray as x}from"@spotify/backstage-plugin-soundcheck-common";import{sumBy as C}from"lodash";import{defaultBaseCollectorOption as D}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as m,mapFormIntegrationConfigToBackendConfig as h}from"../Common/utils.esm.js";const d={name:"",path:""},y={name:"",type:"string"},g={name:"",jsonPath:"",type:"string"},N={factName:"",data:[d]},_={factName:"",path:"",regex:"",data:[]},L={factName:"",path:"",data:[g]},u=(t={})=>{const l=D(t);return{exists:{enabled:!1,collectors:[{factDetails:N,...l}]},regex:{enabled:!1,collectors:[{factDetails:_,...l}]},json:{enabled:!1,collectors:[{factDetails:L,...l}]}}},O={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},branch:{name:"Custom Branch (Optional)",helperText:"If omitted collects data from default branch",placeholder:"Example: develop"},filePath:{name:"File Path",helperText:"Path to the file whose content will be searched",placeholder:"Example: /catalog-info.yaml"},label:{name:"Label",placeholder:"Label"},type:{name:"Type",placeholder:"Type"},exists:{filesSection:{name:"Files",description:"List the files whose existence will be checked"}},regex:{regex:{name:"RegEx Pattern",helperText:"RegEx pattern to match",placeholder:"Example: ^apiVersion: backstage.io/(.+)"},flags:{name:"RegEx Flags (Optional)",helperText:"Allowed RegEx flags: g, i, m, s, u, y",placeholder:"Example: mi"},trueFalseMode:{label:"True / False Mode",description:"True / False Mode uses a RegEx to search for a match in the given file."},captureGroupsMode:{label:"Capture Groups Mode",description:"RegEx Capture Groups Mode allows the collector to associate capture groups within a RegEx to named values."},captureGroupsSection:{name:"Capture Groups",description:"Each element must correspond to a capture group in the given RegEx"}},json:{jsonPath:{name:"Json Path",placeholder:"Example: $.metadata.tags"},jsonElementsSection:{name:"JSON / YAML Elements",description:"List json / yaml paths from which to pull data from the given file"}}}},i="exists",f="regex",r="json",E=["string","number","integer","boolean","object"],T=E.map(b);function P(t){const{exists:l,regex:c,json:o}=t;if(l.collectors.length||c.collectors.length||o.collectors.length){const a={},n=[];return a.collects=n,l.enabled&&l.collectors.forEach(e=>{n.push(h({factType:i,configOption:e,additionalParams:{factName:e.factDetails.factName,branch:e.factDetails.branch?.length?e.factDetails.branch:void 0,data:e.factDetails.data}}))}),c.enabled&&c.collectors.forEach(e=>{n.push(h({factType:f,configOption:e,additionalParams:{factName:e.factDetails.factName,branch:e.factDetails.branch?.length?e.factDetails.branch:void 0,path:e.factDetails.path,regex:e.factDetails.regex,flags:e.factDetails.flags?.length?e.factDetails.flags:void 0,data:e.factDetails.data.length?e.factDetails.data:void 0}}))}),o.enabled&&o.collectors.forEach(e=>{n.push(h({factType:r,configOption:e,additionalParams:{factName:e.factDetails.factName,branch:e.factDetails.branch?.length?e.factDetails.branch:void 0,path:e.factDetails.path,data:e.factDetails.data.map(s=>T.includes(s.type)?{name:s.name,jsonPath:s.jsonPath,type:"array",items:{type:A(s.type)}}:s)}}))}),a}return{collects:[]}}const p=(t,l)=>C(t,({type:c})=>+(c===l));function F(t){const l=u(t),c=t?.collects;if(c&&c.length>0){const o=x(c);return{exists:p(o,i)>0?{collectors:o.filter(a=>a.type===i).map(a=>({...m({factTypeConfig:a,parentConfig:t}),factDetails:{factName:a.factName,branch:a.branch,data:a.data}})),enabled:!0}:l.exists,regex:p(o,f)>0?{collectors:o.filter(a=>a.type===f).map(a=>({...m({factTypeConfig:a,parentConfig:t}),factDetails:{factName:a.factName,branch:a.branch,path:a.path,regex:a.regex,flags:a.flags,data:a.data}})),enabled:!0}:l.regex,json:p(o,r)>0?{collectors:o.filter(a=>a.type===r).map(a=>({...m({factTypeConfig:a,parentConfig:t}),factDetails:{factName:a.factName,branch:a.branch,path:a.path,data:a.data.map(n=>n.type==="array"?{name:n.name,jsonPath:n.jsonPath,type:b(n.items?.type)}:n)}})),enabled:p(o,r)>0}:l.json}}return l}function b(t="object"){return`array[${t}]`}function A(t){const l="array[";return t.substring(t.indexOf(l)+l.length,t.lastIndexOf("]"))}export{T as ARRAY_ELEMENT_TYPES,d as DEFAULT_EXISTS_FACT_DATA,g as DEFAULT_JSON_FACT_DATA,y as DEFAULT_REGEX_FACT_DATA,E as ELEMENT_TYPES,i as EXISTS_COLLECTOR_TYPE,r as JSON_COLLECTOR_TYPE,f as REGEX_COLLECTOR_TYPE,O as SCM_COLLECTOR_FIELDS,u as defaultScmCollectorConfig,F as mapConfigToScmCollectorConfig,P as mapScmCollectorConfigToConfig};
1
+ import{asArray as C}from"@spotify/backstage-plugin-soundcheck-common";import{sumBy as y}from"lodash";import{defaultBaseCollectorOption as D}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as h,mapFormIntegrationConfigToBackendConfig as d}from"../Common/utils.esm.js";const g={name:"",path:""},N={name:"",type:"string"},u={name:"",jsonPath:"",type:"string"},L={factName:"",data:[g]},_={factName:"",path:"",regex:"",data:[]},O={factName:"",path:"",data:[u]},E=(t={})=>{const o=D(t);return{exists:{enabled:!1,collectors:[{factDetails:L,...o}]},regex:{enabled:!1,collectors:[{factDetails:_,...o}]},json:{enabled:!1,collectors:[{factDetails:O,...o}]}}},P={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},branch:{name:"Custom Branch (Optional)",helperText:"If omitted collects data from default branch",placeholder:"Example: develop"},filePath:{name:"File Path",helperText:"Path to the file whose content will be searched",placeholder:"Example: /catalog-info.yaml"},label:{name:"Label",placeholder:"Label"},type:{name:"Type",placeholder:"Type"},exists:{filesSection:{name:"Files",description:"List the files whose existence will be checked"}},regex:{regex:{name:"RegEx Pattern",helperText:"RegEx pattern to match",placeholder:"Example: ^apiVersion: backstage.io/(.+)"},flags:{name:"RegEx Flags (Optional)",helperText:"Allowed RegEx flags: g, i, m, s, u, y",placeholder:"Example: mi"},trueFalseMode:{label:"True / False Mode",description:"True / False Mode uses a RegEx to search for a match in the given file."},captureGroupsMode:{label:"Capture Groups Mode",description:"RegEx Capture Groups Mode allows the collector to associate capture groups within a RegEx to named values."},captureGroupsSection:{name:"Capture Groups",description:"Each element must correspond to a capture group in the given RegEx"}},json:{jsonPath:{name:"Json Path",placeholder:"Example: $.metadata.tags"},jsonElementsSection:{name:"JSON / YAML Elements",description:"List json / yaml paths from which to pull data from the given file"}}}},f="exists",p="regex",i="json",m="yaml",T=["string","number","integer","boolean","object"],x=T.map(b);function A(t){const{exists:o,regex:c,json:l}=t;if(o.collectors.length||c.collectors.length||l.collectors.length){const e={},n=[];return e.collects=n,o.enabled&&o.collectors.forEach(a=>{n.push(d({factType:f,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,data:a.factDetails.data}}))}),c.enabled&&c.collectors.forEach(a=>{n.push(d({factType:p,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,regex:a.factDetails.regex,flags:a.factDetails.flags?.length?a.factDetails.flags:void 0,data:a.factDetails.data.length?a.factDetails.data:void 0}}))}),l.enabled&&l.collectors.forEach(a=>{n.push(d({factType:i,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,data:a.factDetails.data.map(s=>x.includes(s.type)?{name:s.name,jsonPath:s.jsonPath,type:"array",items:{type:R(s.type)}}:s)}}))}),e}return{collects:[]}}const r=(t,o)=>y(t,({type:c})=>+(c===o));function F(t){const o=E(t),c=t?.collects;if(c&&c.length>0){const l=C(c);return{exists:r(l,f)>0?{collectors:l.filter(e=>e.type===f).map(e=>({...h({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,data:e.data}})),enabled:!0}:o.exists,regex:r(l,p)>0?{collectors:l.filter(e=>e.type===p).map(e=>({...h({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,path:e.path,regex:e.regex,flags:e.flags,data:e.data}})),enabled:!0}:o.regex,json:r(l,i)+r(l,m)>0?{collectors:l.filter(e=>e.type===i||e.type===m).map(e=>({...h({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,path:e.path,data:e.data.map(n=>n.type==="array"?{name:n.name,jsonPath:n.jsonPath,type:b(n.items?.type)}:n)}})),enabled:r(l,i)+r(l,m)>0}:o.json}}return o}function b(t="object"){return`array[${t}]`}function R(t){const o="array[";return t.substring(t.indexOf(o)+o.length,t.lastIndexOf("]"))}export{x as ARRAY_ELEMENT_TYPES,g as DEFAULT_EXISTS_FACT_DATA,u as DEFAULT_JSON_FACT_DATA,N as DEFAULT_REGEX_FACT_DATA,T as ELEMENT_TYPES,f as EXISTS_COLLECTOR_TYPE,i as JSON_COLLECTOR_TYPE,p as REGEX_COLLECTOR_TYPE,P as SCM_COLLECTOR_FIELDS,m as YAML_COLLECTOR_TYPE,E as defaultScmCollectorConfig,F as mapConfigToScmCollectorConfig,A as mapScmCollectorConfigToConfig};
2
2
  //# sourceMappingURL=utils.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 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};
1
+ import{jsxs as c,jsx as e}from"react/jsx-runtime";import{useRouteRef as k}from"@backstage/core-plugin-api";import{Card as w,CardHeader as R,Text as p,CardBody as b,Box as i,Button as C,Tooltip as v,CardFooter as B,ButtonLink as x}from"@backstage/ui";import{makeStyles as y}from"@material-ui/core";import{Alert as D}from"@material-ui/lab";import{parseFactRef as N}from"@spotify/backstage-plugin-soundcheck-common";import{uniq as T,isEmpty as j}from"lodash";import{useMemo as I}from"react";import{TooltipTrigger as S}from"react-aria-components";import{checkDetailsRouteRef as F}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 H}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const M=y(()=>({cardDescription:{"& p":{marginTop:"var(--bui-space-0)",marginBottom:"var(--bui-space-0)"}},cardContent:{flexGrow:1},description:{maxHeight:"200px",wordBreak:"break-word",overflow:"auto"},factRef:{wordBreak:"break-word"},alertButton:{padding:0,display:"block",width:"100%"}})),O=({id:f,title:h,description:d,rules:n,integrationId:s,hasSchedule:u})=>{const t=M(),g=k(F),l=I(()=>{const o=[],m=a=>{for(const r of a.conditions??[])o.push(r.factRef),r.value&&typeof r.value=="object"&&Object.hasOwn(r.value,"factRef")&&o.push(r.value.factRef);for(const r of a.expressions??[])m(r)};return n&&m(n),T(o).filter(a=>{try{return N(a).source===s}catch{return!1}})},[s,n]);return c(w,{children:[e(R,{children:e(p,{variant:"body-large",weight:"bold",children:h})}),c(b,{className:t.cardContent,children:[d&&e(i,{className:t.description,children:e(H,{className:t.cardDescription,content:d})}),!j(l)&&c(i,{mt:"6",children:[e(p,{weight:"bold",children:"Used Fact Refs"}),l.map(o=>e(i,{className:t.factRef,children:o},"factRef"))]}),u&&e(i,{mt:"6",children:c(S,{children:[e(C,{variant:"tertiary",className:t.alertButton,children:e(D,{severity:"warning",children:"Check Schedule Detected"})}),e(v,{children:"Configure this integration's collection schedule instead."})]})})]}),e(B,{children:e(i,{mt:"6",children:e(x,{href:g({checkId:f}),target:"_blank",children:"View"})})})]})};export{O as DependantCheckCard};
2
2
  //# sourceMappingURL=DependantCheckCard.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as p}from"react/jsx-runtime";import{makeStyles as f,useTheme as s}from"@material-ui/core";import g from"../../images/azure-devops-rgb.svg";import n from"../../images/azure-devops-white.svg";import c from"../../images/bigquery-rgb.svg";import h from"../../images/bigquery-white.svg";import u from"../../images/cat-blk.svg";import l from"../../images/cat-wht.svg";import b from"../../images/data-registry-blk.svg";import d from"../../images/data-registry-wht.svg";import y from"../../images/dd_logo_h_rgb.svg";import k from"../../images/dd_logo_h_white.svg";import q from"../../images/GitHub_Logo.svg";import I from"../../images/GitHub_Logo_White.svg";import j from"../../images/gitlab-rgb.svg";import w from"../../images/gitlab-white.svg";import x from"../../images/http-rgb.svg";import B from"../../images/http-white.svg";import v from"../../images/jira-rgb.svg";import z from"../../images/jira-white.svg";import L from"../../images/k8s_blue.svg";import S from"../../images/k8s_white.svg";import T from"../../images/new-relic-rgb.svg";import D from"../../images/new-relic-white.svg";import F from"../../images/pd-black.svg";import M from"../../images/pd-white.svg";import $ from"../../images/SCM_DARK.svg";import A from"../../images/SCM_LIGHT.svg";import E from"../../images/sonarqube-rgb.svg";import G from"../../images/sonarqube-white.svg";import H from"../../images/soundcheck-black.svg";import K from"../../images/soundcheck-white.svg";import N from"../../images/tech-black.svg";import O from"../../images/tech-white.svg";import{isDarkTheme as Q}from"../Charts/chartUtils.esm.js";const m={github:q,gitlab:j,datadog:y,scm:A,pagerduty:F,catalog:u,soundcheck:H,techinsights:N,kubernetes:L,jira:v,sonarqube:E,newrelic:T,bigquery:c,azure:g,http:x,"data-registry":b},i={github:I,gitlab:w,datadog:k,scm:$,pagerduty:M,catalog:l,soundcheck:K,techinsights:O,kubernetes:S,jira:z,sonarqube:G,newrelic:D,bigquery:h,azure:n,http:B,"data-registry":d},R=new Set(["catalog","soundcheck","techinsights","sonarqube","data-registry"]),U=f(()=>({image:{objectFit:"contain",color:"white",height:"var(--bui-space-6)",maxWidth:"100%"},tallImage:{height:"var(--bui-space-8)",marginBottom:0}})),W=o=>!!m[o]&&!!i[o],_=({integrationId:o,noMargin:e})=>{const r=U(),a=s(),t=Q(a)?i[o]:m[o];return t?p("img",{src:t,alt:o,style:e?{marginBottom:0}:{},className:`${r.image} ${R.has(o)?r.tallImage:""}`}):null};export{_ as IntegrationLogoBUI,W as hasLogo};
1
+ import{jsx as p}from"react/jsx-runtime";import{makeStyles as a,useTheme as f}from"@material-ui/core";import s from"../../images/integrations-bui/azure-rgb.svg";import g from"../../images/integrations-bui/azure-wht.svg";import n from"../../images/integrations-bui/bigquery-rgb.svg";import c from"../../images/integrations-bui/bigquery-wht.svg";import u from"../../images/integrations-bui/catalog-rgb.svg";import h from"../../images/integrations-bui/catalog-wht.svg";import b from"../../images/integrations-bui/data-registry-rgb.svg";import d from"../../images/integrations-bui/data-registry-wht.svg";import l from"../../images/integrations-bui/datadog-rgb.svg";import y from"../../images/integrations-bui/datadog-wht.svg";import k from"../../images/integrations-bui/default-logo-rgb.svg";import j from"../../images/integrations-bui/default-logo-wht.svg";import q from"../../images/integrations-bui/github-rgb.svg";import w from"../../images/integrations-bui/github-wht.svg";import x from"../../images/integrations-bui/gitlab-rgb.svg";import I from"../../images/integrations-bui/gitlab-wht.svg";import z from"../../images/integrations-bui/http-rgb.svg";import B from"../../images/integrations-bui/http-wht.svg";import T from"../../images/integrations-bui/jira-rgb.svg";import v from"../../images/integrations-bui/jira-wht.svg";import D from"../../images/integrations-bui/kubernetes-rgb.svg";import F from"../../images/integrations-bui/kubernetes-wht.svg";import L from"../../images/integrations-bui/newrelic-rgb.svg";import M from"../../images/integrations-bui/newrelic-wht.svg";import N from"../../images/integrations-bui/pagerduty-rgb.svg";import S from"../../images/integrations-bui/pagerduty-wht.svg";import U from"../../images/integrations-bui/scm-rgb.svg";import W from"../../images/integrations-bui/scm-wht.svg";import A from"../../images/integrations-bui/sonarqube-rgb.svg";import E from"../../images/integrations-bui/sonarqube-wht.svg";import G from"../../images/integrations-bui/soundcheck-rgb.svg";import H from"../../images/integrations-bui/soundcheck-wht.svg";import O from"../../images/integrations-bui/techinsights-rgb.svg";import Q from"../../images/integrations-bui/techinsights-wht.svg";import{isDarkTheme as R}from"../Charts/chartUtils.esm.js";const _={github:q,gitlab:x,datadog:l,scm:U,pagerduty:N,catalog:u,soundcheck:G,techinsights:O,kubernetes:D,jira:T,sonarqube:A,newrelic:L,bigquery:n,azure:s,http:z,"data-registry":b},C={github:w,gitlab:I,datadog:y,scm:W,pagerduty:S,catalog:h,soundcheck:H,techinsights:Q,kubernetes:F,jira:v,sonarqube:E,newrelic:M,bigquery:c,azure:g,http:B,"data-registry":d},J=a(()=>({image:{objectFit:"contain",color:"white",height:"var(--bui-space-4)",maxWidth:"100%"}})),K=({integrationId:r,noMargin:t})=>{const i=J(),e=f(),m=R(e);let o=m?C[r]:_[r];return o||(o=m?j:k),p("img",{src:o,alt:r,style:t?{marginBottom:0}:{},className:i.image})};export{K as IntegrationLogoBUI};
2
2
  //# sourceMappingURL=IntegrationLogoBUI.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 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};
1
+ import{jsx as e,jsxs as a,Fragment as F}from"react/jsx-runtime";import{useRouteRef as k}from"@backstage/core-plugin-api";import{usePermission as q}from"@backstage/plugin-permission-react";import{HeaderPage as M,SearchField as Y,Container as $,Table as z,TableHeader as G,Column as m,TableBody as V,Row as W,Flex as J,Text as K,TooltipTrigger as O,ButtonIcon as Q,Tooltip as X,Box as Z,Cell as w,Button as _}from"@backstage/ui";import{makeStyles as ee}from"@material-ui/core";import{RiInformationLine as te}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as ie}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as re,isEmpty as g}from"lodash";import{useState as f,useMemo as S,useEffect as oe}from"react";import{useNavigate as ne}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as ae}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useGetCollectors as se}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as de}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as le}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationDetailsRouteRef as ce,integrationEditRouteRef as me}from"../../routes.esm.js";import{CustomCell as R}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ge}from"../EmptyState/EmptyStateBUI.esm.js";import{LoadingTableSkeleton as pe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{IntegrationLogoBUI as ue}from"./IntegrationLogoBUI.esm.js";const x=["github","gitlab","scm","pagerduty","datadog","kubernetes","jira","sonarqube","newrelic","bigquery","catalog","azure","http","data-registry"],B=t=>{const d=t.hasUIConfig?"UI":"YAML";return g(t.config)&&g(t.collectionConfigs)?"None":d},N=ee(()=>({container:{marginBottom:"var(--bui-space-12)"},button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),P=({integration:t,hasConfigPage:d})=>{const s=N(),c=k(ce),r=ne(),p=k(me);return a(W,{onAction:()=>r(c({integrationId:t.id})),children:[e(R,{children:a(J,{gap:"2",align:"center",children:[e(ue,{integrationId:t.id}),e(K,{children:t.name??t.id}),t.description&&a(O,{children:[e(Q,{className:s.button,variant:"secondary",icon:e(te,{}),onClick:()=>r(c({integrationId:t.id}))}),e(X,{className:s.tooltip,children:e(Z,{className:s.scrollBox,children:e("p",{children:t.description})})})]})]})}),e(w,{title:`${String(t.dependentChecks?.length??0)} checks`}),e(w,{title:B(t)}),e(R,{onClick:o=>o.stopPropagation(),children:e(_,{onClick:()=>r(p({integrationId:t.id})),isDisabled:!d,variant:"tertiary","aria-label":`${t.id} configure`,children:"Configure"})})]})},he=({integrations:t})=>{const d=N(),[s,c]=f(""),[r,p]=f("ascending"),[o,L]=f(""),C=S(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:t?.length}}),[t?.length]),{reportContentLoaded:b}=le(C),{reporter:T}=de(C),{loading:v,allowed:U}=q({permission:ie}),{data:H,isLoading:l}=se(),u=t?.map(i=>i.integrationId)??x,y=ae({items:H??[],searchTerm:s}),h=S(()=>{const i=re(y,n=>o==="name"?n.name??n.id:o==="dependent-checks"?n.dependentChecks?.length??0:o==="config-source"?B(n):u.includes(n.id)?1:2);return r==="descending"&&i.reverse(),i},[y,u,o,r]),I=T?.getLCPValue();oe(()=>{l||b({lcp:I})},[l,b,I]);const D=!l&&!g(h),E=l,A=!l&&g(h),j=e(ge,{title:"No integrations found",body:"Your current search term did not return any integrations. Please try a different search term."});return a(F,{children:[e(M,{customActions:e(Y,{value:s,onChange:c,"aria-label":"Search Name"}),title:"Integrations"}),a($,{className:d.container,children:[E&&e(pe,{rowCount:10,rowHeight:36}),A&&j,D&&a(z,{onSortChange:({direction:i,column:n})=>{L(String(n)),p(i)},sortDescriptor:{direction:r,column:o},children:[a(G,{children:[e(m,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"65%"},children:"Name"}),e(m,{id:"dependent-checks",allowsSorting:!0,style:{width:"15%"},children:"Dependent Checks"}),e(m,{id:"config-source",allowsSorting:!0,style:{width:"15%"},children:"Config Source"}),e(m,{style:{width:"5%"}})]}),e(V,{children:h.map(i=>e(P,{integration:i,hasConfigPage:!v&&U&&u.includes(i.id)},i.id))})]})]})]})};export{x as ConfigurableIntegrationIds,P as IntegrationRow,he as IntegrationsListPageBUI};
2
2
  //# sourceMappingURL=IntegrationsListPageBUI.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as o,jsxs as i}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:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),g=({title:n,description:r,onClick:e})=>{const t=f();return o(x,{children:i(l,{gap:"0",align:"center",children:[o(m,{children:n}),i(c,{children:[o(a,{className:t.button,isDisabled:!r,variant:"secondary",icon:o(h,{}),onClick:e}),o(p,{className:t.tooltip,children:o(s,{className:t.scrollBox,children:o(u,{content:r})})})]})]})})};export{g as DescriptionCell};
2
2
  //# sourceMappingURL=DescriptionCell.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as e,Fragment as D}from"react/jsx-runtime";import{useApi as F}from"@backstage/core-plugin-api";import{entityPresentationApiRef as M,useEntityPresentation as O}from"@backstage/plugin-catalog-react";import{Button as w,Flex as p,TextField as I,ButtonIcon as U,Box as g,Card as $,Text as l,Skeleton as G,TagGroup as A}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{RiUserLine as z,RiSearchLine as J,RiHistoryLine as K}from"@remixicon/react";import{sortBy as N,isEmpty as C,uniq as H}from"lodash";import{useState as k,useCallback as Q,useMemo as S}from"react";import{DialogTrigger as V,Popover as W,Dialog as X}from"react-aria-components";import{useGroupHierarchy as Y}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as Z}from"../../utils/getAllOwnedEntityCount.esm.js";import{GroupSelectionHistory as _}from"./GroupSelectionHistory.esm.js";import{GroupSelectList as ee}from"./GroupSelectList.esm.js";import{GroupTag as P}from"./GroupTag.esm.js";import{useGroupHistory as re}from"./useGroupHistory.esm.js";import{usePreviousSelectedGroups as ie}from"./usePreviousSelectedGroups.esm.js";const E=q(()=>({dialog:{padding:"var(--bui-space-3)",backgroundColor:"var(--bui-bg-surface-1)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-2)"},buttonArea:{marginTop:"var(--bui-space-2)"},selectedCard:{padding:"var(--bui-space-3)",gap:"var(--bui-space-2)",width:"36rem",margin:"var(--bui-space-3) 0"},relatedGroups:{marginTop:"var(--bui-space-2)"},tagArea:{height:"8rem",width:"16rem",overflow:"auto"}})),oe=({groupRef:o,onSelect:b})=>{const d=E(),{primaryTitle:i,secondaryTitle:f}=O(o),{isLoading:n,data:v}=Y(o,{includeParent:!0}),t=v?.[o],m=S(()=>Z(t),[t]),h=S(()=>{const a=t?.children??{};return N(Object.values(a).map(c=>({ref:c.entityRef,type:c.type})),"ref")},[t?.children]),u=S(()=>C(h)?[]:H(h.map(a=>a.ref)),[h]),y=S(()=>C(t?.parents)?[]:N(H(t.parents),a=>a),[t?.parents]);return r(g,{children:[r($,{className:d.selectedCard,children:[e(l,{variant:"body-medium",color:"secondary",children:"Currently Selected"}),r(p,{direction:"column",gap:"0",children:[e(l,{variant:"body-large",weight:"bold",children:i}),e(l,{variant:"body-medium",color:"secondary",children:f})]}),r(p,{gap:"0",direction:"column",children:[r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," directly owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[u.length," ",u.length===1?"entity":"entities"]})]}),r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," and it's subgroups owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[m," ",m===1?"entity":"entities"]})]})]})]}),r(p,{className:d.relatedGroups,children:[r(g,{style:{flex:1},children:[e(l,{color:"secondary",children:"Parent Groups"}),r(g,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(y)?e(l,{variant:"body-small",children:"No parent groups."}):e(A,{selectionMode:"single","aria-label":"Parent Groups",children:y.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,o)},`${a}-parent`))})]})]}),r(g,{style:{flex:1},children:[e(l,{color:"secondary",children:"Child Groups"}),r(g,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(u)?e(l,{variant:"body-small",children:"No child groups."}):e(A,{selectionMode:"single","aria-label":"Child Groups",children:u.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,void 0,o)},`${a}-child`))})]})]})]})]})},te=({selectedGroupRef:o,updateGroupRef:b})=>{const d=E(),[i,f]=k(o),[n,v]=k(""),[t,m]=k(!1),h=F(M),u=o?h.forEntity(o).snapshot.primaryTitle:void 0,{addGroupHistory:y,history:a}=re(),{addGroup:c,groupEntityRefs:B}=ie(),R=Q((s,x,T)=>{f(s),v(""),y(s,x,T)},[y]),L=!t&&(!i||n),j=!t&&i&&!n;return r(V,{onOpenChange:s=>{s&&o&&o!==i&&f(o),t&&m(!1)},children:[e(w,{variant:"secondary",iconStart:e(z,{}),children:u??"Select Group"}),e(W,{placement:"bottom right",children:e(X,{className:d.dialog,children:({close:s})=>{const x=()=>{i&&i!==o&&(b(i),c(i)),s()};return r(D,{children:[r(p,{children:[e(I,{placeholder:"Search Groups",value:n,onChange:v,size:"small",icon:e(J,{}),"aria-label":"Search Groups"}),e(U,{"aria-label":"Show History",variant:"secondary",icon:e(K,{}),onClick:()=>m(!t)})]}),t&&e(_,{previouslySelectedGroups:B??[],history:a??[],selectRef:T=>{R(T),m(!1)}}),L&&e(ee,{searchTerm:n,selectedRef:i,selectRef:R}),j&&e(oe,{groupRef:i,onSelect:R}),r(p,{className:d.buttonArea,justify:"end",children:[e(w,{onClick:s,variant:"tertiary",children:"Close"}),e(w,{onClick:x,isDisabled:!i,children:"Apply"})]})]})}})})]})};export{te as GroupSelectorBUI};
1
+ import{jsxs as r,jsx as e,Fragment as D}from"react/jsx-runtime";import{useApi as F}from"@backstage/core-plugin-api";import{entityPresentationApiRef as M,useEntityPresentation as O}from"@backstage/plugin-catalog-react";import{Button as w,Flex as p,TextField as I,ButtonIcon as U,Box as y,Card as $,Text as l,Skeleton as G,TagGroup as A}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{RiUserLine as z,RiSearchLine as J,RiHistoryLine as K}from"@remixicon/react";import{sortBy as N,isEmpty as C,uniq as H}from"lodash";import{useState as k,useCallback as Q,useMemo as S}from"react";import{DialogTrigger as V,Popover as W,Dialog as X}from"react-aria-components";import{useGroupHierarchy as Y}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as Z}from"../../utils/getAllOwnedEntityCount.esm.js";import{GroupSelectionHistory as _}from"./GroupSelectionHistory.esm.js";import{GroupSelectList as ee}from"./GroupSelectList.esm.js";import{GroupTag as P}from"./GroupTag.esm.js";import{useGroupHistory as re}from"./useGroupHistory.esm.js";import{usePreviousSelectedGroups as ie}from"./usePreviousSelectedGroups.esm.js";const E=q(()=>({dialog:{padding:"var(--bui-space-3)",backgroundColor:"var(--bui-bg-surface-1)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-2)"},buttonArea:{marginTop:"var(--bui-space-2)"},selectedCard:{padding:"var(--bui-space-3)",gap:"var(--bui-space-2)",width:"36rem",margin:"var(--bui-space-3) 0"},relatedGroups:{marginTop:"var(--bui-space-2)"},tagArea:{height:"8rem",width:"16rem",overflow:"auto"}})),oe=({groupRef:o,onSelect:b})=>{const d=E(),{primaryTitle:i,secondaryTitle:f}=O(o),{isLoading:n,data:v}=Y(o,{includeParent:!0}),t=v?.[o],m=S(()=>Z(t),[t]),h=S(()=>{const a=t?.children??{};return N(Object.values(a).map(c=>({ref:c.entityRef,type:c.type})),"ref")},[t?.children]),u=S(()=>C(h)?[]:H(h.map(a=>a.ref)),[h]),g=S(()=>C(t?.parents)?[]:N(H(t.parents),a=>a),[t?.parents]);return r(y,{children:[r($,{className:d.selectedCard,children:[e(l,{variant:"body-medium",color:"secondary",children:"Currently Selected"}),r(p,{direction:"column",gap:"0",children:[e(l,{variant:"body-large",weight:"bold",children:i}),e(l,{variant:"body-medium",color:"secondary",children:f})]}),r(p,{gap:"0",direction:"column",children:[r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," directly owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[u.length," ",u.length===1?"entity":"entities"]})]}),r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," and it's subgroups owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[m," ",m===1?"entity":"entities"]})]})]})]}),r(p,{className:d.relatedGroups,children:[r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Parent Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(g)?e(l,{variant:"body-small",children:"No parent groups."}):e(A,{selectionMode:"single","aria-label":"Parent Groups",children:g.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,o)},`${a}-parent`))})]})]}),r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Child Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(u)?e(l,{variant:"body-small",children:"No child groups."}):e(A,{selectionMode:"single","aria-label":"Child Groups",children:u.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,void 0,o)},`${a}-child`))})]})]})]})]})},te=({selectedGroupRef:o,updateGroupRef:b})=>{const d=E(),[i,f]=k(o),[n,v]=k(""),[t,m]=k(!1),h=F(M),u=o?h.forEntity(o).snapshot.primaryTitle:void 0,{addGroupHistory:g,history:a}=re(),{addGroup:c,groupEntityRefs:B}=ie(),R=Q((s,x,T)=>{f(s),v(""),g(s,x,T)},[g]),L=!t&&(!i||n),j=!t&&i&&!n;return r(V,{onOpenChange:s=>{s&&o&&o!==i&&f(o),t&&m(!1)},children:[e(w,{variant:"secondary",iconStart:e(z,{}),children:u??"Select Group"}),e(W,{placement:"bottom right",children:e(X,{className:d.dialog,children:({close:s})=>{const x=()=>{i&&i!==o&&(b(i),c(i)),s()};return r(D,{children:[r(p,{align:"center",gap:"2",children:[e(I,{placeholder:"Search Groups",value:n,onChange:v,size:"small",icon:e(J,{}),"aria-label":"Search Groups",style:{flex:"1"}}),e(U,{"aria-label":"Show History",variant:"secondary",icon:e(K,{}),onClick:()=>m(!t)})]}),t&&e(_,{previouslySelectedGroups:B??[],history:a??[],selectRef:T=>{R(T),m(!1)}}),L&&e(ee,{searchTerm:n,selectedRef:i,selectRef:R}),j&&e(oe,{groupRef:i,onSelect:R}),r(p,{className:d.buttonArea,justify:"end",children:[e(w,{onClick:s,variant:"tertiary",children:"Close"}),e(w,{onClick:x,isDisabled:!i,children:"Apply"})]})]})}})})]})};export{te as GroupSelectorBUI};
2
2
  //# sourceMappingURL=GroupSelectorBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as e,Fragment as Y,jsx as t}from"react/jsx-runtime";import{TooltipTrigger as $,ButtonIcon as x,Tooltip as A}from"@backstage/ui";import{RiExportLine as B,RiImportLine as j}from"@remixicon/react";import D from"js-yaml";import{capitalize as a}from"lodash";import{useState as E,useRef as F}from"react";import{useSoundcheckAlert as P}from"../../hooks/useSoundcheckAlert.esm.js";const z=({resourceType:r,disableImport:I,disableExport:b,onImport:v,onExport:w})=>{const k=`${a(r)} Import Success`,l=`Error Importing ${a(r)}s`,L=`Error Exporting ${a(r)}s`,{showAlert:s}=P(),[S,c]=E(!1),[T,p]=E(!1),m=F(null);return e(Y,{children:[e($,{children:[t(x,{isDisabled:b||T,onClick:async()=>{try{p(!0),await w()}catch(o){s({title:L,message:`An error occurred while exporting ${r}s: ${o.message}`,severity:"error"})}finally{p(!1)}},"aria-label":"Export All to YAML",icon:t(B,{}),variant:"secondary"}),e(A,{children:["Export all ",r,"s to YAML"]})]}),e($,{children:[t(x,{isDisabled:I||S,"aria-label":"Import from YAML",icon:t(j,{}),variant:"secondary",onClick:()=>m?.current?.click()}),e(A,{children:["Import ",r,"s from YAML"]})]}),t("input",{type:"file",hidden:!0,onChange:async o=>{try{c(!0);const i=o.target?.files?.[0],d=new FileReader;i&&(d.readAsText(i,"utf-8"),d.onload=async C=>{const g=C.target?.result?.toString();if(g){const M=D.load(g);try{const{created:f,skipped:R,failed:n}=await v(M);let h=k,u="success",y=`Successfully imported ${f.length} ${r}(s), failed ${n.length} ${r}(s), ${R.length} ${r}(s) already existed.`;n.length&&(h=l,u=f.length?"warning":"error",y+=` Errors: ${JSON.stringify(n)}.`),s({title:h,message:y,severity:u})}catch{}}})}catch(i){s({title:l,message:`An error occurred while importing ${r}s: ${i.message}`,severity:"error"})}finally{o.target.value="",c(!1)}},accept:".yaml",ref:m})]})};export{z as ImportExportPanelBUI};
1
+ import{jsxs as e,Fragment as Y,jsx as t}from"react/jsx-runtime";import{TooltipTrigger as x,ButtonLink as $,Tooltip as E}from"@backstage/ui";import{RiExportLine as B,RiImportLine as j}from"@remixicon/react";import D from"js-yaml";import{capitalize as a}from"lodash";import{useState as A,useRef as F}from"react";import{useSoundcheckAlert as P}from"../../hooks/useSoundcheckAlert.esm.js";const z=({resourceType:r,disableImport:I,disableExport:S,onImport:k,onExport:v})=>{const w=`${a(r)} Import Success`,l=`Error Importing ${a(r)}s`,L=`Error Exporting ${a(r)}s`,{showAlert:n}=P(),[b,c]=A(!1),[M,p]=A(!1),m=F(null);return e(Y,{children:[e(x,{children:[t($,{isDisabled:S||M,onClick:async()=>{try{p(!0),await v()}catch(o){n({title:L,message:`An error occurred while exporting ${r}s: ${o.message}`,severity:"error"})}finally{p(!1)}},"aria-label":"Export All to YAML",iconStart:t(B,{}),variant:"secondary",children:"Export"}),e(E,{children:["Export all ",r,"s to YAML"]})]}),e(x,{children:[t($,{isDisabled:I||b,"aria-label":"Import from YAML",iconStart:t(j,{}),variant:"secondary",onClick:()=>m?.current?.click(),children:"Import"}),e(E,{children:["Import ",r,"s from YAML"]})]}),t("input",{type:"file",hidden:!0,onChange:async o=>{try{c(!0);const i=o.target?.files?.[0],d=new FileReader;i&&(d.readAsText(i,"utf-8"),d.onload=async T=>{const g=T.target?.result?.toString();if(g){const C=D.load(g);try{const{created:f,skipped:R,failed:s}=await k(C);let h=w,u="success",y=`Successfully imported ${f.length} ${r}(s), failed ${s.length} ${r}(s), ${R.length} ${r}(s) already existed.`;s.length&&(h=l,u=f.length?"warning":"error",y+=` Errors: ${JSON.stringify(s)}.`),n({title:h,message:y,severity:u})}catch{}}})}catch(i){n({title:l,message:`An error occurred while importing ${r}s: ${i.message}`,severity:"error"})}finally{o.target.value="",c(!1)}},accept:".yaml",ref:m})]})};export{z as ImportExportPanelBUI};
2
2
  //# sourceMappingURL=ImportExportPanelBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{Box as i,Skeleton as a}from"@backstage/ui";import{makeStyles as l}from"@material-ui/core";const s=l(o=>({skeletonContainer:{gridGap:o.spacing(2),display:"flex",flexDirection:"column",margin:o.spacing(2,0)}})),m=({rowCount:o=5,rowHeight:t=32})=>{const n=s();return e(i,{className:n.skeletonContainer,children:[...Array(o).keys()].map((c,r)=>e(a,{height:t,width:"100%"},r))})};export{m as LoadingTableSkeleton};
1
+ import{jsx as n}from"react/jsx-runtime";import{Box as t,Skeleton as l}from"@backstage/ui";import{makeStyles as r}from"@material-ui/core";const s=r(e=>({skeletonContainer:{gridGap:e.spacing(2),display:"flex",flexDirection:"column",margin:e.spacing(2,0)}})),m=({rowCount:e=5,rowHeight:a=32})=>{const i=s();return n(t,{className:i.skeletonContainer,"aria-label":"loading skeleton",children:[...Array(e).keys()].map((g,o)=>n(l,{height:a,width:"100%","aria-label":`loading skeleton ${o+1}`},o))})};export{m as LoadingTableSkeleton};
2
2
  //# sourceMappingURL=LoadingTableSkeleton.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{jsxs as r,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 a}from"@backstage/ui";import{makeStyles as b}from"@material-ui/core";import{RiMore2Fill as k,RiExternalLinkLine as L}from"@remixicon/react";const f=b(()=>({noButtonBg:{boxShadow:"none !important",backgroundColor:"inherit !important"},docsUrlLink:{color:"inherit",cursor:"default","&:hover":{textDecoration:"none"}}})),S=({placement:l,menuActions:c,disabled:m,label:t,documentationURL:n,isHeaderMenu:d=!0})=>{const i=f();return r(u,{children:[o(p,{isDisabled:m,variant:"secondary",className:d?void 0:i.noButtonBg,icon:o(k,{}),"aria-label":t}),r(h,{placement:l,"aria-label":t,children:[c.map(e=>o(a,{iconStart:e.iconStart,onClick:e.onClick,id:e.id,children:e.label},e.id)),n&&o(a,{iconStart:o(L,{}),id:"documentationURL",children:o(s,{to:/^https?:\/\//i.test(n)?n:`http://${n}`,className:i.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 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};
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};
2
2
  //# sourceMappingURL=OverviewPageContent.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 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};
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
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as i,Fragment as v}from"react/jsx-runtime";import{useRouteRef as e,useApi as r,featureFlagsApiRef as x,configApiRef as y}from"@backstage/core-plugin-api";import{usePermission as A}from"@backstage/plugin-permission-react";import{Header as P,ButtonLink as C}from"@backstage/ui";import{RiCheckDoubleLine as w,RiSettings2Line as H}from"@remixicon/react";import{soundcheckCollectorReadPermission as I}from"@spotify/backstage-plugin-soundcheck-common";import{rootRouteRef as L,tracksPageRouteRef as F,checksPageRouteRef as T,campaignsPageRouteRef as B,integrationsPageRouteRef as O,overviewRouteRef as j,techHealthRouteRef as z,techInsightsPageRouteRef as D}from"../../routes.esm.js";const U=()=>{const s=e(L)(),o=e(F)(),n=e(T)(),h=e(B)(),l=e(O)(),f=e(j)(),g=e(z)(),m=e(D)(),a=r(x),d=r(y).getOptionalStringArray("soundcheck.flags"),c=a.getRegisteredFlags(),u=(!c.find(t=>t.name==="soundcheck-enable-tech-health")||a.isActive("soundcheck-enable-tech-health"))&&!d?.includes("soundcheck-disable-tech-health"),R=!c.find(t=>t.name==="soundcheck-enable-campaigns")||a.isActive("soundcheck-enable-campaigns"),{loading:p,allowed:k}=A({permission:I}),b=(!c.find(t=>t.name==="soundcheck-enable-collectors")||a.isActive("soundcheck-enable-collectors"))&&!p&&k,S=[{id:"tech-insights",label:"Tech Insights",href:m,matchStrategy:"prefix"},{id:"checks",label:"Checks",href:n,matchStrategy:"prefix"},{id:"tracks",label:"Tracks",href:o,matchStrategy:"prefix"},...R?[{id:"campaigns",label:"Campaigns",href:h,matchStrategy:"prefix"}]:[],...b?[{id:"integrations",label:"Integrations",href:l,matchStrategy:"prefix"}]:[],{id:"classic-overview",label:"Classic Overview",href:f,matchStrategy:"exact"},...u?[{id:"tech-health",label:"Tech Health",href:g,matchStrategy:"exact"}]:[]];return i(P,{title:"Soundcheck",icon:i(w,{size:18}),titleLink:s,tabs:S,customActions:i(v,{children:i(C,{href:"/settings",variant:"secondary",iconStart:i(H,{})})})})};export{U as SoundcheckHeaderBUI};
2
2
  //# sourceMappingURL=SoundcheckHeaderBUI.esm.js.map
@@ -1,2 +1,2 @@
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};
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 b}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 x=({ownerEntityRef:r,href:t,profileImageSrc:l,cells:c,menuActions:e,name:m,description:s,documentationURL:a})=>{const f=h(g),p=r?f.forEntity(r):void 0,n=A();return u(R,{onAction:()=>t&&n(t),children:[i(P,{title:m,description:s,onClick:()=>t&&n(t)}),c.map((o,d)=>i(k,{title:o.title,leadingIcon:o.icon,onClick:C=>{o.onClick&&(C.stopPropagation(),o.onClick())}},`cell-${d}`)),i(y,{name:p?.snapshot.primaryTitle,src:l??p?.snapshot.primaryTitle}),i(w,{onClick:o=>o.stopPropagation(),children:i(b,{label:`${m} actions`,disabled:!e?.length,placement:"left top",menuActions:e??[],documentationURL:a,isHeaderMenu:!1})})]})};export{x as TableRowWithOwner};
2
2
  //# sourceMappingURL=TableRowWithOwner.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as a,jsxs as x,Fragment as gt}from"react/jsx-runtime";import{useApi as ft,useRouteRef as Y}from"@backstage/core-plugin-api";import{entityPresentationApiRef as ht}from"@backstage/plugin-catalog-react";import{Box as U,HeaderPage as kt,Flex as yt,SearchField as Tt,Container as St}from"@backstage/ui";import{makeStyles as Ct,LinearProgress as Et}from"@material-ui/core";import{isEmpty as wt}from"lodash";import{useState as Z,useMemo as i,useCallback as Lt,useEffect as Rt}from"react";import{useSearchParams as vt,useNavigate as bt}from"react-router-dom";import It 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 Pt}from"../../hooks/useSortTableLocalStorage.esm.js";import{useBatchedHierarchicalTrackStatuses as Bt}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as At}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as xt}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useFeatureFlag as Ut}from"../../hooks/useFeatureFlag.esm.js";import{useLCPReporting as Ft}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Mt}from"../../hooks/useLoadTimeReporting.esm.js";import{trackExplorerRouteRef as $t,campaignExplorerRouteRef as Dt}from"../../routes.esm.js";import{getAllOwnedEntityCount as Gt}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as Ht,getTracksBucket as Nt}from"../../utils/helpers.esm.js";import{showTrack as Ot}from"../../utils/tracks.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as jt}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 zt}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as Kt}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{SummaryTiles as Vt}from"./SummaryTiles.esm.js";import{SummaryTilesBUI as Wt}from"./SummaryTilesBUI.esm.js";import{TechInsightsTableBUI as qt}from"./TechInsightsTableBUI.esm.js";const Jt=Ct(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Qt=()=>{const _=Jt(),tt=Ut("backstage-ui"),[y,et]=vt(),r=y.get("group")||"",[l,rt]=Z(y.get("search")||""),[f,ot]=Z(""),F=i(()=>({routeName:"soundcheck-tech-insights",additionalAttributes:{group:r||"",tracksSearch:f||""}}),[r,f]),{reportContentLoaded:M}=Mt({...F,enabled:!!r}),{reporter:at}=Ft(F),$=bt();zt();const T=ft(ht),{order:it,orderBy:st,handleSort:nt}=Pt({localStoragePrefix:"soundcheck-tech-insights",defaultSortBy:"entities",defaultDirection:"desc"});It(()=>{ot(l);const t=new URLSearchParams(y.toString());l?t.set("search",l):t.delete("search"),et(t,{replace:!0})},500,[l]);const{tracks:S,campaigns:D,counts:C,isLoading:p,error:E,activeTrackCount:w}=xt(r,{},{enabled:!!r}),d=S.filter(t=>t.type==="campaign"),L=S.filter(t=>t.type!=="campaign"),G=d.filter(t=>{const e=f.toLowerCase(),n=(t.ownerEntityRef?T.forEntity(t.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return e===""||t.name.toLowerCase().includes(e)||t.ownerEntityRef?.toLowerCase().includes(e)||n.includes(e)}),H=L.filter(t=>{const e=f.toLowerCase(),n=(t.ownerEntityRef?T.forEntity(t.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return e===""||t.name.toLowerCase().includes(e)||t.ownerEntityRef?.toLowerCase().includes(e)||n.includes(e)}),R=i(()=>[...G,...H],[G,H]),m=i(()=>[...d.map(t=>t.id),...L.map(t=>t.id)],[d,L]),{data:v,isLoading:ct,error:mt,progress:o}=Bt({trackIds:m,groupRef:r||"",skip:!r||m.length===0}),{data:N,isLoading:h}=At(r,{includeParent:!0}),b=i(()=>{const t=new Map;return Array.isArray(v)&&v.forEach(e=>{e&&e.trackId&&t.set(e.trackId,e)}),t},[v]),lt=i(()=>{const t=new Map;return Array.isArray(C)&&C.forEach(e=>{e&&e.id&&t.set(e.id,e.applicableEntityCount)}),t},[C]),O=p&&!E&&!!r,j=E||mt,I=m.length>0&&ct&&!j&&!!r,z=i(()=>({totalActiveTracksCampaigns:w}),[w]),K=i(()=>{if(I)return{numTeams:void 0,avgCompliance:void 0,totalCampaigns:void 0,totalTracks:void 0};let t=0,e=0,n=0,g=0;const s=new Set;return R.forEach(k=>{const c=b.get(k.id);if(c){c.status&&typeof c.status.allPassPercentage=="number"&&(t+=c.status.allPassPercentage,e++),c.groupRef&&s.add(c.groupRef);const B=[c];for(;B.length>0;){const ut=B.pop();for(const A of ut.children)s.has(A.groupRef)||(s.add(A.groupRef),B.push(A))}}Ot(c?.status)&&(k.type==="campaign"?n++:g++)}),{numTeams:s.size,avgCompliance:e>0?Math.round(t/e):0,totalCampaigns:n,totalTracks:g}},[R,b,I]),u=i(()=>{if(h)return{numEntities:void 0};const t=N?.[r];return{numEntities:Gt(t)}},[N,h,r]),V=i(()=>({...z,...K,...u}),[z,K,u]),W=Y($t),q=Y(Dt),pt=Lt(t=>{if(!r)return;const e=new URLSearchParams;e.set("group",r),e.set("node",r);const n=d.find(({id:s})=>s===t);let g=W({trackId:t});if(n){const s=D?.edges.find(({node:k})=>k.track.id===t)?.node.id;s&&(g=q({campaignId:s}))}$(`${g}?${e.toString()}`)},[r,$,d,D,q,W]),J=r?T.forEntity(r).snapshot.primaryTitle:void 0,P=i(()=>!o||o.totalTracks===0?0:o.loadedTracks/o.totalTracks*100,[o]),Q=p&&r&&!E||I&&o&&o.totalTracks>0,X=at?.getLCPValue();Rt(()=>{if(!h&&!p&&(P===100||m.length===0)){const t=u.numEntities??0,e=m.length;M({lcp:X,numberOfEntities:u.numEntities,entitiesBucket:Ht(t),numberOfTracks:m.length,tracksBucket:Nt(e)})}},[h,p,P,m.length,u.numEntities,M,X]);const dt=tt?a(Wt,{summaryStats:V,isLoading:O}):a(Vt,{summaryStats:V,isLoading:p});return j?a(U,{mt:"6",children:a(jt,{title:"No Tech Insights Data",body:"There was an error loading Tech Insights data."})}):x(gt,{children:[a(kt,{title:`${J?`${J}'s `:""}Tech Insights`,customActions:x(yt,{align:"center",gap:"3",children:[a(Kt,{hideSelected:!0}),a(Tt,{isDisabled:wt(S),value:l,onChange:rt,placeholder:"Search tracks or campaigns",style:{minWidth:250},"aria-label":"Search"})]})}),x(St,{className:_.container,children:[a(U,{style:{marginTop:0},children:dt}),Q&&a(U,{style:{marginBottom:16},children:a(Et,{variant:o&&o.totalTracks>0?"determinate":"indeterminate",value:o&&o.totalTracks>0?P:void 0,"data-testid":"batch-loading-indicator"})}),a(qt,{tracks:R,trackStatusMap:b,trackCountsMap:lt,sortColumn:st,order:it,handleSort:nt,handleTrackClick:pt,isLoading:O||!!Q,isSearch:!!l,activeTrackCount:w,hasGroupSelected:!!r})]})]})};export{Qt 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]),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};
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};
2
2
  //# sourceMappingURL=TechInsightsPageDeprecated.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as u,Fragment as A}from"react/jsx-runtime";import{useApi as $}from"@backstage/core-plugin-api";import{entityPresentationApiRef as j}from"@backstage/plugin-catalog-react";import{Table as F,TableHeader as H,Column as g,TableBody as U,Row as q,Cell as P,Flex as D,Box as v,Text as G,CellProfile as O}from"@backstage/ui";import{makeStyles as Y}from"@material-ui/core";import{uniq as Z,isEmpty as N,isNumber as x}from"lodash";import{useMemo as m}from"react";import{useProfileImages as _}from"../../hooks/catalog/useProfileImages.esm.js";import{getPercentage as y}from"../../utils/formatters.esm.js";import{getTrackStatusTotal as z}from"../../utils/tracks.esm.js";import{CustomCell as J}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as K}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoTracks as B}from"../EmptyState/EmptyStateNoTracks.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{LoadingTableSkeleton as L}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as Q}from"../StatusBar/StatusBar.esm.js";const V=Y(()=>({statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),W=({track:s,trackStatus:e,entitiesCount:h,handleTrackClick:b,profileImageMap:f})=>{const l=V(),c=$(j).forEntity(s.ownerEntityRef),k=m(()=>s.levels.reduce((t,o)=>t+o.checks.length,0),[s.levels]),a=m(()=>(e?.passed??0)+(e?.failed??0)+(e?.warning??0)+(e?.error??0)+(e?.notReported??0)+(e?.exempt??0),[e]),w=m(()=>{let t;return e?.allPassPercentage!==null&&e?.allPassPercentage!==void 0?t=e.allPassPercentage:e&&(t=y(e.passed+e.exempt,a)),t},[e,a]),S=m(()=>y(e?.failed,a),[e,a]),C=m(()=>y(e?.warning,a),[e,a]),p=m(()=>y(e?.notReported,a),[e,a]),T=m(()=>y(e?.error,a),[e,a]),E=f[c.snapshot.entityRef];return u(q,{onAction:()=>{b(s.id)},children:[r(P,{title:s.name??s.id}),r(J,{children:u(D,{align:"center",gap:"2",children:[r(v,{className:l.statusPercent,children:u(G,{children:[w,"%"]})}),r(v,{className:l.statusBar,children:r(Q,{passedPercent:w,failedPercent:S,warningPercent:C,notReportedPercent:p,errorPercent:T})})]})}),r(P,{title:s.type==="campaign"?"Campaign":"Track"}),r(P,{title:x(k)?`${k} Check${k===1?"":"s"}`:"N/A"}),r(P,{title:x(h)?`${h} ${h===1?"Entity":"Entities"}`:"N/A"}),r(O,{name:c.snapshot.primaryTitle,src:E??c.snapshot.primaryTitle})]})},X=({order:s,sortColumn:e,handleSort:h,handleTrackClick:b,tracks:f,trackStatusMap:l,trackCountsMap:c,isSearch:k,isLoading:a,activeTrackCount:w,hasGroupSelected:S})=>{const C=m(()=>[...f].filter(t=>{const o=l.get(t.id)?.status;let d=0;return o&&(d=z(o)),!o||d>0}).sort((t,o)=>{const d=l.get(t.id),M=l.get(o.id);let i,n;switch(e){case"name":i=t.name?.toLowerCase()||"",n=o.name?.toLowerCase()||"";break;case"type":i=t.type||"",n=o.type||"";break;case"owner":i=t.ownerEntityRef?.toLowerCase()||"",n=o.ownerEntityRef?.toLowerCase()||"";break;case"compliance":i=d?.status?.allPassPercentage??null,n=M?.status?.allPassPercentage??null;break;case"checks":i=t.levels.reduce((R,I)=>R+I.checks.length,0),n=o.levels.reduce((R,I)=>R+I.checks.length,0);break;case"entities":i=c.get(t.id)??0,n=c.get(o.id)??0;break;default:return 0}return typeof i=="number"&&typeof n=="number"?s==="asc"?i-n:n-i:typeof i=="number"&&n===null?-1:i===null&&typeof n=="number"?1:typeof i=="string"&&typeof n=="string"?s==="asc"?i.localeCompare(n):n.localeCompare(i):0}),[f,l,e,c,s]),p=m(()=>C.map(t=>{const o=l.get(t.id)?.status,d=c.get(t.id)??0;return{track:t,trackStatus:o,entitiesCount:d}}),[C,c,l]),T=Z(p.map(t=>t.track.ownerEntityRef)),{profileImageMap:E}=_(T);return!a&&N(f)?S?k&&w>0?r(K,{title:"No tracks or campaigns found.",body:"Your current search term did not return any tracks or campaigns. Please try a different search term. "}):r(B,{title:w>0?"No applicable tracks found for the selected group":void 0}):r(B,{title:"Select a group or create a new track"}):u(A,{children:[u(F,{sortDescriptor:{column:e,direction:s==="asc"?"ascending":"descending"},onSortChange:t=>h(t.column),children:[u(H,{children:[r(g,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"43%"},children:"Name"}),r(g,{id:"compliance",allowsSorting:!0,style:{width:"12%"},children:"Compliance"}),r(g,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),r(g,{id:"checks",allowsSorting:!0,style:{width:"10%"},children:"Checks"}),r(g,{id:"entities",allowsSorting:!0,style:{width:"10%"},children:"Entities"}),r(g,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Track Owner"})]}),r(U,{children:p.map(t=>r(W,{handleTrackClick:b,profileImageMap:E??{},...t},t.track.id))})]}),N(p)&&a&&r(L,{rowCount:10}),!N(p)&&a&&r(L,{rowCount:4})]})};export{X as TechInsightsTableBUI};
1
+ import{jsx as r,jsxs as p,Fragment as A}from"react/jsx-runtime";import{useApi as $}from"@backstage/core-plugin-api";import{entityPresentationApiRef as j}from"@backstage/plugin-catalog-react";import{Table as D,TableHeader as F,Column as u,TableBody as H,Row as U,Flex as q,Box as v,Text as G,Cell as I,CellProfile as O}from"@backstage/ui";import{makeStyles as Y}from"@material-ui/core";import{uniq as z,isEmpty as N,isNumber as x}from"lodash";import{useMemo as m}from"react";import{useProfileImages as J}from"../../hooks/catalog/useProfileImages.esm.js";import{getPercentage as y}from"../../utils/formatters.esm.js";import{showTrack as K}from"../../utils/tracks.esm.js";import{CustomCell as Q}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as V}from"../DescriptionCell/DescriptionCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as W}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoTracks as B}from"../EmptyState/EmptyStateNoTracks.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{LoadingTableSkeleton as L}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as X}from"../StatusBar/StatusBar.esm.js";const Z=Y(()=>({statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),_=({track:a,trackStatus:e,entitiesCount:h,handleTrackClick:w,profileImageMap:g})=>{const l=Z(),c=$(j).forEntity(a.ownerEntityRef),f=m(()=>a.levels.reduce((t,s)=>t+s.checks.length,0),[a.levels]),i=m(()=>(e?.passed??0)+(e?.failed??0)+(e?.warning??0)+(e?.error??0)+(e?.notReported??0)+(e?.exempt??0),[e]),k=m(()=>{let t;return e?.allPassPercentage!==null&&e?.allPassPercentage!==void 0?t=e.allPassPercentage:e&&(t=y(e.passed+e.exempt,i)),t},[e,i]),P=m(()=>y(e?.failed,i),[e,i]),C=m(()=>y(e?.warning,i),[e,i]),d=m(()=>y(e?.notReported,i),[e,i]),S=m(()=>y(e?.error,i),[e,i]),b=g[c.snapshot.entityRef];return p(U,{onAction:()=>{w(a.id)},children:[r(V,{title:a.name??a.id,description:a.description??"",onClick:()=>w(a.id)}),r(Q,{children:p(q,{align:"center",gap:"2",children:[r(v,{className:l.statusPercent,children:p(G,{children:[k,"%"]})}),r(v,{className:l.statusBar,children:r(X,{passedPercent:k,failedPercent:P,warningPercent:C,notReportedPercent:d,errorPercent:S})})]})}),r(I,{title:a.type==="campaign"?"Campaign":"Track"}),r(I,{title:x(f)?`${f} Check${f===1?"":"s"}`:"N/A"}),r(I,{title:x(h)?`${h} ${h===1?"Entity":"Entities"}`:"N/A"}),r(O,{name:c.snapshot.primaryTitle,src:b??c.snapshot.primaryTitle})]})},ee=({order:a,sortColumn:e,handleSort:h,handleTrackClick:w,tracks:g,trackStatusMap:l,trackCountsMap:c,isSearch:f,isLoading:i,activeTrackCount:k,hasGroupSelected:P})=>{const C=m(()=>[...g].filter(t=>K(l.get(t.id)?.status)).sort((t,s)=>{const T=l.get(t.id),M=l.get(s.id);let o,n;switch(e){case"name":o=t.name?.toLowerCase()||"",n=s.name?.toLowerCase()||"";break;case"type":o=t.type||"",n=s.type||"";break;case"owner":o=t.ownerEntityRef?.toLowerCase()||"",n=s.ownerEntityRef?.toLowerCase()||"";break;case"compliance":o=T?.status?.allPassPercentage??null,n=M?.status?.allPassPercentage??null;break;case"checks":o=t.levels.reduce((R,E)=>R+E.checks.length,0),n=s.levels.reduce((R,E)=>R+E.checks.length,0);break;case"entities":o=c.get(t.id)??0,n=c.get(s.id)??0;break;default:return 0}return typeof o=="number"&&typeof n=="number"?a==="asc"?o-n:n-o:typeof o=="number"&&n===null?-1:o===null&&typeof n=="number"?1:typeof o=="string"&&typeof n=="string"?a==="asc"?o.localeCompare(n):n.localeCompare(o):0}),[g,l,e,c,a]),d=m(()=>C.map(t=>{const s=l.get(t.id)?.status,T=c.get(t.id)??0;return{track:t,trackStatus:s,entitiesCount:T}}),[C,c,l]),S=z(d.map(t=>t.track.ownerEntityRef)),{profileImageMap:b}=J(S);return!i&&N(g)?P?f&&k>0?r(W,{title:"No tracks or campaigns found.",body:"Your current search term did not return any tracks or campaigns. Please try a different search term. "}):r(B,{title:k>0?"No applicable tracks found for the selected group":void 0}):r(B,{title:"Select a group or create a new track"}):p(A,{children:[p(D,{sortDescriptor:{column:e,direction:a==="asc"?"ascending":"descending"},onSortChange:t=>h(t.column),children:[p(F,{children:[r(u,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"43%"},children:"Name"}),r(u,{id:"compliance",allowsSorting:!0,style:{width:"12%"},children:"Compliance"}),r(u,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),r(u,{id:"checks",allowsSorting:!0,style:{width:"10%"},children:"Checks"}),r(u,{id:"entities",allowsSorting:!0,style:{width:"10%"},children:"Entities"}),r(u,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Track Owner"})]}),r(H,{children:d.map(t=>r(_,{handleTrackClick:w,profileImageMap:b??{},...t},t.track.id))})]}),N(d)&&i&&r(L,{rowCount:10}),!N(d)&&i&&r(L,{rowCount:4})]})};export{ee as TechInsightsTableBUI};
2
2
  //# sourceMappingURL=TechInsightsTableBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as m,Fragment as E}from"react/jsx-runtime";import{useRouteRef as P}from"@backstage/core-plugin-api";import{Table as x,TableHeader as C,Column as f,TableBody as k,TablePagination as v,Row as O,CellProfile as B,Cell as N,Flex as M,Text as D}from"@backstage/ui";import{sortBy as L}from"lodash";import{useMemo as u}from"react";import{useNavigate as $,createSearchParams as j}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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as F}from"../../hooks/useSearchName.esm.js";import{usePagination as H}from"../../hooks/usePagination.esm.js";import{useSortTableLocalStorage as z}from"../../hooks/useSortTableLocalStorage.esm.js";import{useProfileImages as A}from"../../hooks/catalog/useProfileImages.esm.js";import{trackOverviewRouteRef as G,campaignOverviewRouteRef as J}from"../../routes.esm.js";import{CustomCell as K}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as U}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{LoadingTableSkeleton as V}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as q}from"../StatusBar/StatusBar.esm.js";const w=10,Q=(e,a=[])=>{const o=[],i=r=>{!r.children||r.children.length===0?r.numberOfEntities>0&&o.push(r):(a.includes(r.entityRef)&&r.numberOfEntities>0&&o.push(r),r.children.forEach(s=>i(s)))};return i(e),o},W=({row:e,profileImageMap:a,trackId:o,campaignId:i})=>{const r=P(G),s=P(J),c=$();return m(O,{onAction:()=>{o&&c({pathname:i?s({campaignId:i}):r({trackId:o}),search:`?${j({owners:[e.entityRef]})}`})},children:[t(B,{name:e.name,src:a[e.entityRef]??e.name}),t(N,{title:`${e.numberOfEntities} ${e.numberOfEntities===1?"entity":"entities"}`}),t(K,{children:m(M,{align:"center",gap:"3",children:[m(D,{children:[e.passPercentage,"%"]}),t(q,{passedPercent:e.passPercentage,failedPercent:e.failPercentage,warningPercent:e.warningPercentage,notReportedPercent:e.notReportedPercentage,errorPercent:e.errorPercentage})]})})]})},X=({tableData:e,isLoading:a,trackId:o,selectedGroup:i,searchValue:r,campaignId:s})=>{const{order:c,orderBy:l,handleSort:y}=z({localStoragePrefix:"soundcheck-tech-insights-explorer",defaultSortBy:"entities",defaultDirection:"desc"}),p=u(()=>e?Q(e,i?[i]:[]):[],[i,e]),h=F({items:p,searchTerm:r}),d=u(()=>{const n=L(h??[],g=>l==="name"?g.name:l==="passPercentage"?g.passPercentage:l==="entities"?g.numberOfEntities:0);return c==="desc"&&n.reverse(),n},[h,c,l]),R=u(()=>p.map(n=>n.entityRef),[p]),{paginatedItems:S,paginationProps:b}=H({pageParam:"perPage",defaultPageSize:w,items:d}),I=d.length>w,{profileImageMap:T}=A(R);return a?t(V,{rowCount:10}):!a&&!d.length?t(U,{title:"No groups found",body:"No groups found for the current selection."}):m(E,{children:[m(x,{sortDescriptor:{column:l,direction:c==="asc"?"ascending":"descending"},onSortChange:n=>y(n.column),children:[m(C,{children:[t(f,{allowsSorting:!0,id:"name",isRowHeader:!0,style:{width:"65%"},children:"Name"}),t(f,{allowsSorting:!0,id:"entities",style:{width:"15%"},children:"Entities"}),t(f,{allowsSorting:!0,id:"passPercentage",style:{width:"20%"},children:"Compliance"})]}),t(k,{children:S.map(n=>t(W,{profileImageMap:T??{},row:n,trackId:o,campaignId:s},n.entityRef))})]}),I&&t(v,{...b})]})};export{X as TechInsightsExplorerTable};
1
+ import{jsx as t,jsxs as m,Fragment as B}from"react/jsx-runtime";import{useRouteRef as P}from"@backstage/core-plugin-api";import{Table as C,TableHeader as E,Column as f,TableBody as k,TablePagination as v,Row as N,CellProfile as O,Cell as M,Flex as D,Box as w,Text as L}from"@backstage/ui";import{makeStyles as $}from"@material-ui/core";import{sortBy as j}from"lodash";import{useMemo as u}from"react";import{useNavigate as F,createSearchParams as H}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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as z}from"../../hooks/useSearchName.esm.js";import{usePagination as A}from"../../hooks/usePagination.esm.js";import{useSortTableLocalStorage as G}from"../../hooks/useSortTableLocalStorage.esm.js";import{useProfileImages as Q}from"../../hooks/catalog/useProfileImages.esm.js";import{trackOverviewRouteRef as U,campaignOverviewRouteRef as V}from"../../routes.esm.js";import{CustomCell as W}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as X}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{LoadingTableSkeleton as q}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as J}from"../StatusBar/StatusBar.esm.js";const y=10,K=(e,s=[])=>{const o=[],i=r=>{!r.children||r.children.length===0?r.numberOfEntities>0&&o.push(r):(s.includes(r.entityRef)&&r.numberOfEntities>0&&o.push(r),r.children.forEach(c=>i(c)))};return i(e),o},Y=$(()=>({statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),Z=({row:e,profileImageMap:s,trackId:o,campaignId:i})=>{const r=Y(),c=P(U),l=P(V),n=F();return m(N,{onAction:()=>{o&&n({pathname:i?l({campaignId:i}):c({trackId:o}),search:`?${H({owners:[e.entityRef]})}`})},children:[t(O,{name:e.name,src:s[e.entityRef]??e.name}),t(M,{title:`${e.numberOfEntities} ${e.numberOfEntities===1?"entity":"entities"}`}),t(W,{children:m(D,{align:"center",gap:"2",children:[t(w,{className:r.statusPercent,children:m(L,{children:[e.passPercentage,"%"]})}),t(w,{className:r.statusBar,children:t(J,{passedPercent:e.passPercentage,failedPercent:e.failPercentage,warningPercent:e.warningPercentage,notReportedPercent:e.notReportedPercentage,errorPercent:e.errorPercentage})})]})})]})},_=({tableData:e,isLoading:s,trackId:o,selectedGroup:i,searchValue:r,campaignId:c})=>{const{order:l,orderBy:n,handleSort:S}=G({localStoragePrefix:"soundcheck-tech-insights-explorer",defaultSortBy:"entities",defaultDirection:"desc"}),p=u(()=>e?K(e,i?[i]:[]):[],[i,e]),h=z({items:p,searchTerm:r}),d=u(()=>{const a=j(h??[],g=>n==="name"?g.name:n==="passPercentage"?g.passPercentage:n==="entities"?g.numberOfEntities:0);return l==="desc"&&a.reverse(),a},[h,l,n]),b=u(()=>p.map(a=>a.entityRef),[p]),{paginatedItems:I,paginationProps:R}=A({pageParam:"perPage",defaultPageSize:y,items:d}),T=d.length>y,{profileImageMap:x}=Q(b);return s?t(q,{rowCount:10}):!s&&!d.length?t(X,{title:"No groups found",body:"No groups found for the current selection."}):m(B,{children:[m(C,{sortDescriptor:{column:n,direction:l==="asc"?"ascending":"descending"},onSortChange:a=>S(a.column),children:[m(E,{children:[t(f,{allowsSorting:!0,id:"name",isRowHeader:!0,style:{width:"75%"},children:"Name"}),t(f,{allowsSorting:!0,id:"entities",style:{width:"10%"},children:"Entities"}),t(f,{allowsSorting:!0,id:"passPercentage",style:{width:"15%"},children:"Compliance"})]}),t(k,{children:I.map(a=>t(Z,{profileImageMap:x??{},row:a,trackId:o,campaignId:c},a.entityRef))})]}),T&&t(v,{...R})]})};export{_ as TechInsightsExplorerTable};
2
2
  //# sourceMappingURL=TechInsightsExplorerTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as a,Fragment as ue}from"react/jsx-runtime";import{parseEntityRef as he}from"@backstage/catalog-model";import{useRouteRef as N}from"@backstage/core-plugin-api";import{usePermission as ke}from"@backstage/plugin-permission-react";import{Container as C,HeaderPage as ge,Box as f,Flex as D,Text as K}from"@backstage/ui";import{makeStyles as Se}from"@material-ui/core";import{toEntityFilterQuery as be,soundcheckTrackReadPermission as ve}from"@spotify/backstage-plugin-soundcheck-common";import{useState as E,useMemo as T,useEffect as U}from"react";import{useSearchParams as Ce,useParams as Ee}from"react-router-dom";import Te from"react-use/lib/useDebounce";import ye from"react-use/lib/useLocalStorage";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Le}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Ie}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as we}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useCheckStatuses as Re}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useFilters as Ne}from"../../hooks/filters/useFilters.esm.js";import{useLCPReporting as Be}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Fe}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as Pe,trackOverviewRouteRef as Oe,trackExplorerRouteRef as _e}from"../../routes.esm.js";import{getEntitiesBucket as He,getChecksBucket as xe}from"../../utils/helpers.esm.js";import{DescriptionCard as Ae}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as Ve}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import{TrackStatusCard as je}from"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as De}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as Ke}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Y}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Ue}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as Ye}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as Ge}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Me}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as $e}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{PageCustomActions as qe}from"../PageCustomActions/PageCustomActions.esm.js";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as Qe}from"../TechHealth/Filters/utils.esm.js";import{TopFailingChecksTableBUI as ze}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as We}from"./TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";const Je=Se(()=>({container:{marginBottom:"var(--bui-space-12)"},cards:{margin:"0 0 var(--bui-space-12)",display:"flex",gridGap:"var(--bui-space-4)"},tableContent:{margin:"var(--bui-space-3) 0 0"},levelSection:{margin:"0 0 var(--bui-space-6)"},levelHeading:{padding:"var(--bui-space-3)",background:"var(--bui-bg-surface-2)"}})),n={CHECKS_BY_LEVELS:"Checks By Levels",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},Xe=()=>{const s=Je(),[o,y]=Ce(),[B,G]=E(new Set([n.CHECKS_BY_LEVELS])),g=B.values().next().value??n.CHECKS_BY_LEVELS,[c,M]=E(o.get("search")||""),[F,$]=E(""),{trackId:i}=Ee(),{data:r,isLoading:u,isError:q}=Le(i),Q=N(Pe),P=$e(r??void 0),O=r?.ownerEntityRef,z=O?he(O).name:void 0,W=Array.from(new Set(r?.levels.flatMap(e=>e.checks).map(e=>e.id)??[])),{owners:m,lifecycles:l,types:p,systems:d}=Ue(),L=T(()=>Ye({lifecycles:l,owners:m,types:p,systems:d}),[l,m,p,d]),I=T(()=>Qe(o.get("numberOfDays")),[o]),[S,_]=E(!1),[h,w]=ye("track-overview-search-params","");U(()=>{!S&&o?.toString()?(h!==o.toString()&&w(o.toString()),_(!0)):!S&&h?(y(new URLSearchParams(h)),_(!0)):S&&h!==o.toString()&&w(o.toString())},[o,y,w,h,S]),Te(()=>{$(c);const e=new URLSearchParams(o.toString());c?e.set("search",c):e.delete("search"),y(e,{replace:!0})},300,[c]);const H=T(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:i||"",filtersApplied:m.length+l.length+p.length+d.length,ownersFilter:m.join(",")||"",lifecyclesFilter:l.join(",")||"",typesFilter:p.join(",")||"",systemsFilter:d.join(",")||"",numberOfDays:I,tracksSearch:F||""}}),[i,m,l,p,d,I,F]),{reportContentLoaded:x}=Fe(H),{reporter:J}=Be(H),{data:b,isLoading:A,isError:X}=Ie({trackId:i,filter:L},!!i),{data:Z,isLoading:V,isError:ee}=we({trackId:i,filter:L,numberOfDays:I},!!i),{data:v,isLoading:R}=Re({trackId:i,checkIds:W,filter:L},!!r),te=T(()=>be(r?.filter),[r]),re=q||X||ee,{loading:ie,allowed:oe}=ke({permission:ve,resourceRef:i}),{filters:ae,selected:se,setSelected:ce,onRemoveTag:ne,selectedTags:me}=Ne({entityFilterQuery:te}),le=r?.levels.flatMap(e=>{const k=c?.trim().toLowerCase();return{...e,checks:k?e.checks.filter(({name:fe})=>fe.toLowerCase().includes(k)):e.checks}})??[],j=J?.getLCPValue();U(()=>{if(!u&&!R&&!A&&!V){const e=b?.certificationStatus?.numberOfEntities??0,k=v?.length??0;x({lcp:j,numberOfEntities:e,entitiesBucket:He(e),numberOfChecks:k,checksBucket:xe(k)})}},[u,R,A,V,v,b,x,j]);const pe=N(Oe),de=N(_e);return u?t(C,{className:s.container,children:t(Ge,{})}):!u&&!r?t(C,{className:s.container,children:t(Y,{title:"Track not found",body:`There is no track with the requested id: ${i}.`})}):!ie&&!oe?t(C,{className:s.container,children:t(Y,{title:"Cannot view track",body:`No permission to view track with the requested id: ${i}.`})}):a(ue,{children:[t(ge,{title:r?.name,customActions:t(Me,{label:"Track Actions",disabled:!P.length,placement:"left top",menuActions:P}),breadcrumbs:[{label:"Tracks",href:Q()}],tabs:[{id:"overview",label:"Track Overview",href:i?pe({trackId:i}):""},{id:"explorer",label:"Tech Insights Explorer",href:i?de({trackId:i}):""}]}),a(C,{className:s.container,children:[a(f,{className:s.cards,children:[t(Ae,{description:r?.description??void 0,owner:z}),t(je,{track:r??void 0,status:b}),t(Ve,{track:r??void 0,history:Z,isError:re})]}),r&&a(f,{children:[a(D,{justify:"between",children:[t(f,{minWidth:"18rem",children:t(Ke,{options:Object.values(n),selected:B,ariaLabel:"Sections",onSelectionChange:G})}),t(qe,{searchValue:c,setSearchValue:e=>M(e),filters:ae,selected:se,setSelected:ce,onRemoveTag:ne,selectedTags:me,showSearch:g!==n.ENTITIES})]}),a(f,{className:s.tableContent,children:[g===n.CHECKS_BY_LEVELS&&t(f,{mt:"3",children:le.map(e=>a(f,{className:s.levelSection,children:[a(D,{align:"center",gap:"4",className:s.levelHeading,children:[a(K,{color:"secondary",children:["Level ",e.ordinal]})," ",t(K,{children:e.name})]}),t(De,{trackId:r.id,checks:e.checks,checkStatuses:v,isLoading:u||R})]},e.ordinal))}),g===n.TOP_FAILING_CHECKS&&t(ze,{track:r,checkStatuses:v,certificationStatus:b?.certificationStatus,searchValue:c}),g===n.ENTITIES&&t(We,{track:r,lifecycles:l,owners:m,types:p,systems:d,searchValue:c})]})]})]})]})};export{Xe as TrackPageBUI};
1
+ import{jsx as r,jsxs as a,Fragment as ue}from"react/jsx-runtime";import{parseEntityRef as he}from"@backstage/catalog-model";import{useRouteRef as P}from"@backstage/core-plugin-api";import{usePermission as ke}from"@backstage/plugin-permission-react";import{Container as C,HeaderPage as ge,Box as u,Flex as D,Text as U}from"@backstage/ui";import{makeStyles as Se}from"@material-ui/core";import{toEntityFilterQuery as Ee,soundcheckTrackReadPermission as be}from"@spotify/backstage-plugin-soundcheck-common";import{useState as v,useMemo as T,useEffect as G}from"react";import{useSearchParams as Ce,useParams as ve}from"react-router-dom";import Te from"react-use/lib/useDebounce";import ye from"react-use/lib/useLocalStorage";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Le}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Ie}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as we}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useCheckStatuses as Re}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useFilters as Ne}from"../../hooks/filters/useFilters.esm.js";import{useLCPReporting as Be}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Fe}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as Pe,trackOverviewRouteRef as Oe,trackExplorerRouteRef as _e}from"../../routes.esm.js";import{getEntitiesBucket as xe,getChecksBucket as He}from"../../utils/helpers.esm.js";import{DescriptionCard as Ae}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as Ve}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import{TrackStatusCard as je}from"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as Ke}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as De}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as M}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Ue}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as Ge}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as Me}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Ye}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as $e}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{PageCustomActions as qe}from"../PageCustomActions/PageCustomActions.esm.js";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as Qe}from"../TechHealth/Filters/utils.esm.js";import{TopFailingChecksTableBUI as ze}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as We}from"./TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";const Je=Se(()=>({container:{marginBottom:"var(--bui-space-12)"},cards:{margin:"0 0 var(--bui-space-12)",display:"flex",gridGap:"var(--bui-space-4)"},tableContent:{margin:"var(--bui-space-3) 0 0"},levelSection:{margin:"0 0 var(--bui-space-6)"},levelHeading:{padding:"var(--bui-space-3)",background:"var(--bui-bg-surface-2)"}})),n={CHECKS_BY_LEVELS:"Checks By Levels",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},Xe=()=>{const s=Je(),[o,y]=Ce(),[O,Y]=v(new Set([n.CHECKS_BY_LEVELS])),g=O.values().next().value??n.CHECKS_BY_LEVELS,[c,$]=v(o.get("search")||""),[_,q]=v(""),{trackId:i}=ve(),{data:t,isLoading:m,isError:Q}=Le(i),z=P(Pe),x=$e(t??void 0),H=t?.ownerEntityRef,W=H?he(H).name:void 0,J=Array.from(new Set(t?.levels.flatMap(e=>e.checks).map(e=>e.id)??[])),{owners:l,lifecycles:p,types:d,systems:f}=Ue(),L=T(()=>Ge({lifecycles:p,owners:l,types:d,systems:f}),[p,l,d,f]),I=T(()=>Qe(o.get("numberOfDays")),[o]),[S,A]=v(!1),[h,w]=ye("track-overview-search-params","");G(()=>{!S&&o?.toString()?(h!==o.toString()&&w(o.toString()),A(!0)):!S&&h?(y(new URLSearchParams(h)),A(!0)):S&&h!==o.toString()&&w(o.toString())},[o,y,w,h,S]),Te(()=>{q(c);const e=new URLSearchParams(o.toString());c?e.set("search",c):e.delete("search"),y(e,{replace:!0})},300,[c]);const V=T(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:i||"",filtersApplied:l.length+p.length+d.length+f.length,ownersFilter:l.join(",")||"",lifecyclesFilter:p.join(",")||"",typesFilter:d.join(",")||"",systemsFilter:f.join(",")||"",numberOfDays:I,tracksSearch:_||""}}),[i,l,p,d,f,I,_]),{reportContentLoaded:j}=Fe(V),{reporter:X}=Be(V),{data:E,isLoading:R,isError:Z}=Ie({trackId:i,filter:L},!!i),{data:ee,isLoading:N,isError:re}=we({trackId:i,filter:L,numberOfDays:I},!!i),{data:b,isLoading:B}=Re({trackId:i,checkIds:J,filter:L},!!t),te=T(()=>Ee(t?.filter),[t]),F=Q||Z||re,{loading:ie,allowed:oe}=ke({permission:be,resourceRef:i}),{filters:ae,selected:se,setSelected:ce,onRemoveTag:ne,selectedTags:me}=Ne({entityFilterQuery:te}),le=t?.levels.flatMap(e=>{const k=c?.trim().toLowerCase();return{...e,checks:k?e.checks.filter(({name:fe})=>fe.toLowerCase().includes(k)):e.checks}})??[],K=X?.getLCPValue();G(()=>{if(!m&&!B&&!R&&!N){const e=E?.certificationStatus?.numberOfEntities??0,k=b?.length??0;j({lcp:K,numberOfEntities:e,entitiesBucket:xe(e),numberOfChecks:k,checksBucket:He(k)})}},[m,B,R,N,b,E,j,K]);const pe=P(Oe),de=P(_e);return m?r(C,{className:s.container,children:r(Me,{})}):!m&&!t?r(C,{className:s.container,children:r(M,{title:"Track not found",body:`There is no track with the requested id: ${i}.`})}):!ie&&!oe?r(C,{className:s.container,children:r(M,{title:"Cannot view track",body:`No permission to view track with the requested id: ${i}.`})}):a(ue,{children:[r(ge,{title:t?.name,customActions:r(Ye,{label:"Track Actions",disabled:!x.length,placement:"left top",menuActions:x}),breadcrumbs:[{label:"Tracks",href:z()}],tabs:[{id:"overview",label:"Track Overview",href:i?pe({trackId:i}):""},{id:"explorer",label:"Tech Insights Explorer",href:i?de({trackId:i}):""}]}),a(C,{className:s.container,children:[a(u,{className:s.cards,children:[r(Ae,{description:t?.description??void 0,owner:W,isError:F,isLoading:m}),r(je,{track:t??void 0,status:E,isError:F,isLoading:R}),r(Ve,{track:t??void 0,history:ee,isError:F,isLoading:N})]}),t&&a(u,{children:[a(D,{justify:"between",children:[r(u,{minWidth:"18rem",children:r(De,{options:Object.values(n),selected:O,ariaLabel:"Sections",onSelectionChange:Y})}),r(qe,{searchValue:c,setSearchValue:e=>$(e),filters:ae,selected:se,setSelected:ce,onRemoveTag:ne,selectedTags:me,showSearch:g!==n.ENTITIES})]}),a(u,{className:s.tableContent,children:[g===n.CHECKS_BY_LEVELS&&r(u,{mt:"3",children:le.map(e=>a(u,{className:s.levelSection,children:[a(D,{align:"center",gap:"4",className:s.levelHeading,children:[a(U,{color:"secondary",children:["Level ",e.ordinal]})," ",r(U,{children:e.name})]}),r(Ke,{trackId:t.id,checks:e.checks,checkStatuses:b,isLoading:m||B})]},e.ordinal))}),g===n.TOP_FAILING_CHECKS&&r(ze,{track:t,checkStatuses:b,certificationStatus:E?.certificationStatus,searchValue:c}),g===n.ENTITIES&&r(We,{track:t,lifecycles:p,owners:l,types:d,systems:f,searchValue:c})]})]})]})]})};export{Xe as TrackPageBUI};
2
2
  //# sourceMappingURL=TrackPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as l,Fragment as V}from"react/jsx-runtime";import{useRouteRef as y,useApi as z}from"@backstage/core-plugin-api";import{entityPresentationApiRef as J}from"@backstage/plugin-catalog-react";import{usePermission as K}from"@backstage/plugin-permission-react";import{Container as d,HeaderPage as Q,Box as S,Flex as W,SearchField as X}from"@backstage/ui";import{makeStyles as Y}from"@material-ui/core";import{soundcheckTrackReadPermission as Z}from"@spotify/backstage-plugin-soundcheck-common";import{useState as C,useMemo as f,useEffect as _}from"react";import{useSearchParams as ee,useParams as re}from"react-router-dom";import te from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as oe}from"../../hooks/tracks/useGetAllTracks.esm.js";import{useTrack as ie}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useHierarchicalTrackStatus as ae}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as me}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as se}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ne}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as ce,trackOverviewRouteRef as pe,trackExplorerRouteRef as le}from"../../routes.esm.js";import{getAllOwnedEntityCount as de}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as fe,getTracksBucket as ue}from"../../utils/helpers.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as F}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as he}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import"../FilterSidebar/util.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js";import"../HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js";import{hierarchyToNivo as ge}from"../HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js";import{LoadingTableSkeleton as ke}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as be}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as Te}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as ve}from"../TechHealth/Filters/utils.esm.js";import{TechInsightsExplorerTable as ye}from"../TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js";import{TechInsightsGroupSelector as Se}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TopAndBottomPerformingTeams as we}from"../TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js";const Re=Y(()=>({container:{marginBottom:"var(--bui-space-12)"},teams:{margin:"0 0 var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},filters:{width:"25rem",marginLeft:"auto"}})),Le=()=>{const i=Re(),[a,O]=ee(),[m,B]=C(a.get("search")||""),o=a.get("group"),[w,j]=C(""),{trackId:e}=re(),{data:u,isLoading:n}=ie(e),R=Te(u??void 0),{owners:h,lifecycles:g,types:k,systems:b}=he(),D=y(ce),L=f(()=>ve(a.get("numberOfDays")),[a]);te(()=>{j(m);const t=new URLSearchParams(a.toString());m?t.set("search",m):t.delete("search"),O(t,{replace:!0})},300,[m]);const P=f(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:e||"",filtersApplied:h.length+g.length+k.length+b.length,ownersFilter:h.join(",")||"",lifecyclesFilter:g.join(",")||"",typesFilter:k.join(",")||"",systemsFilter:b.join(",")||"",numberOfDays:L,tracksSearch:w||""}}),[e,h,g,k,b,L,w]),{reportContentLoaded:I}=ne(P),{reporter:G}=se(P),{loading:H,allowed:q}=K({permission:Z,resourceRef:e}),{data:T,isLoading:c}=ae({trackId:e??"",groupRef:o??"",skip:!e}),{data:N}=oe({}),s=f(()=>N?.edges.find(t=>t.node.id===e)?.node,[N?.edges,e]),{data:p,isLoading:v}=me(o||void 0,{enabled:!!o&&!!e&&!!s,ownedEntitiesFilter:s?.filter??void 0}),x=z(J),M=f(()=>{if(!o)return;const t=p?.[o];return t?ge(t,T||null,()=>"var(--bui-fg-primary)",x,void 0):void 0},[p,x,o,T]),A=G?.getLCPValue();_(()=>{if(!n&&!v&&!c){const t=o?de(p?.[o]):0,E=s?1:0;I({lcp:A,numberOfEntities:t,entitiesBucket:fe(t),numberOfTracks:E,tracksBucket:ue(E)})}},[n,I,v,c,p,o,s,A]);const U=y(pe),$=y(le);return n?r(d,{className:i.container,children:r(ke,{})}):!n&&!u?r(d,{className:i.container,children:r(F,{title:"Track not found",body:`There is no track with the requested id: ${e}.`})}):!H&&!q?r(d,{className:i.container,children:r(F,{title:"Cannot view track",body:`No permission to view track with the requested id: ${e}.`})}):l(V,{children:[r(Q,{title:u?.name,customActions:r(be,{label:"Track Actions",disabled:!R.length,placement:"left top",menuActions:R}),breadcrumbs:[{label:"Tracks",href:D()}],tabs:[{id:"overview",label:"Track Overview",href:e?U({trackId:e}):""},{id:"explorer",label:"Tech Insights Explorer",href:e?$({trackId:e}):""}]}),l(d,{className:i.container,children:[r(S,{className:i.teams,children:r(we,{trackStatus:T??void 0,isLoading:c})}),l(S,{children:[l(W,{align:"center",gap:"3",className:i.filters,children:[r(Se,{}),r(X,{value:m,onChange:B,"aria-label":"Search",placeholder:"Search"})]}),r(S,{className:i.tableContent,children:r(ye,{tableData:M,isLoading:v||c,selectedGroup:o??void 0,trackId:s?.id})})]})]})]})};export{Le as TrackTechInsightsExplorerPage};
1
+ import{jsx as r,jsxs as l,Fragment as $}from"react/jsx-runtime";import{useRouteRef as y,useApi as z}from"@backstage/core-plugin-api";import{entityPresentationApiRef as J}from"@backstage/plugin-catalog-react";import{usePermission as K}from"@backstage/plugin-permission-react";import{Container as d,HeaderPage as Q,Box as S,Flex as W,SearchField as X}from"@backstage/ui";import{makeStyles as Y}from"@material-ui/core";import{soundcheckTrackReadPermission as Z}from"@spotify/backstage-plugin-soundcheck-common";import{useState as C,useMemo as f,useEffect as _}from"react";import{useSearchParams as ee,useParams as re}from"react-router-dom";import te from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as oe}from"../../hooks/tracks/useGetAllTracks.esm.js";import{useTrack as ie}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useHierarchicalTrackStatus as ae}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as me}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as se}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ne}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as ce,trackOverviewRouteRef as pe,trackExplorerRouteRef as le}from"../../routes.esm.js";import{getAllOwnedEntityCount as de}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as fe,getTracksBucket as ue}from"../../utils/helpers.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as F}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as he}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import"../FilterSidebar/util.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js";import"../HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js";import{hierarchyToNivo as ge}from"../HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js";import{LoadingTableSkeleton as ke}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as be}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as Te}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as ve}from"../TechHealth/Filters/utils.esm.js";import{TechInsightsExplorerTable as ye}from"../TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js";import{TechInsightsGroupSelector as Se}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TopAndBottomPerformingTeams as we}from"../TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js";const Re=Y(()=>({container:{marginBottom:"var(--bui-space-12)"},teams:{margin:"0 0 var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},filters:{width:"25rem",marginLeft:"auto"}})),Le=()=>{const i=Re(),[a,O]=ee(),[m,B]=C(a.get("search")||""),o=a.get("group"),[w,j]=C(""),{trackId:e}=re(),{data:u,isLoading:n}=ie(e),R=Te(u??void 0),{owners:h,lifecycles:g,types:k,systems:b}=he(),D=y(ce),L=f(()=>ve(a.get("numberOfDays")),[a]);te(()=>{j(m);const t=new URLSearchParams(a.toString());m?t.set("search",m):t.delete("search"),O(t,{replace:!0})},300,[m]);const P=f(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:e||"",filtersApplied:h.length+g.length+k.length+b.length,ownersFilter:h.join(",")||"",lifecyclesFilter:g.join(",")||"",typesFilter:k.join(",")||"",systemsFilter:b.join(",")||"",numberOfDays:L,tracksSearch:w||""}}),[e,h,g,k,b,L,w]),{reportContentLoaded:I}=ne(P),{reporter:G}=se(P),{loading:H,allowed:q}=K({permission:Z,resourceRef:e}),{data:T,isLoading:c}=ae({trackId:e??"",groupRef:o??"",skip:!e}),{data:N}=oe({}),s=f(()=>N?.edges.find(t=>t.node.id===e)?.node,[N?.edges,e]),{data:p,isLoading:v}=me(o||void 0,{enabled:!!o&&!!e&&!!s,ownedEntitiesFilter:s?.filter??void 0}),x=z(J),M=f(()=>{if(!o)return;const t=p?.[o];return t?ge(t,T||null,()=>"var(--bui-fg-primary)",x,void 0):void 0},[p,x,o,T]),A=G?.getLCPValue();_(()=>{if(!n&&!v&&!c){const t=o?de(p?.[o]):0,E=s?1:0;I({lcp:A,numberOfEntities:t,entitiesBucket:fe(t),numberOfTracks:E,tracksBucket:ue(E)})}},[n,I,v,c,p,o,s,A]);const U=y(pe),V=y(le);return n?r(d,{className:i.container,children:r(ke,{})}):!n&&!u?r(d,{className:i.container,children:r(F,{title:"Track not found",body:`There is no track with the requested id: ${e}.`})}):!H&&!q?r(d,{className:i.container,children:r(F,{title:"Cannot view track",body:`No permission to view track with the requested id: ${e}.`})}):l($,{children:[r(Q,{title:u?.name,customActions:r(be,{label:"Track Actions",disabled:!R.length,placement:"left top",menuActions:R}),breadcrumbs:[{label:"Tracks",href:D()}],tabs:[{id:"overview",label:"Track Overview",href:e?U({trackId:e}):""},{id:"explorer",label:"Tech Insights Explorer",href:e?V({trackId:e}):""}]}),l(d,{className:i.container,children:[r(S,{className:i.teams,children:r(we,{trackStatus:T??void 0,isLoading:c})}),l(S,{children:[l(W,{align:"center",gap:"3",className:i.filters,children:[r(Se,{}),r(X,{value:m,onChange:B,"aria-label":"Search",placeholder:"Search"})]}),r(S,{className:i.tableContent,children:r(ye,{tableData:M,isLoading:v||c,selectedGroup:o??void 0,trackId:s?.id})})]})]})]})};export{Le as TrackTechInsightsExplorerPage};
2
2
  //# sourceMappingURL=TrackTechInsightsExplorerPage.esm.js.map