@spotify/backstage-plugin-soundcheck 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/alpha/integrations.esm.js +1 -1
  3. package/dist/alpha/pages.esm.js +1 -1
  4. package/dist/alpha.d.ts +68 -23
  5. package/dist/api.esm.js +1 -1
  6. package/dist/blueprints/CampaignActionBlueprint.esm.js +2 -0
  7. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  8. package/dist/components/AccordionSection/AccordionSection.esm.js +2 -0
  9. package/dist/components/Alert/Alert.esm.js +2 -0
  10. package/dist/components/CampaignPage/CampaignActionsContext.esm.js +2 -0
  11. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  12. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  13. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  14. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  15. package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
  16. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
  17. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  18. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
  19. package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
  20. package/dist/components/CheckTemplatesPage/TemplateCategoryBUI.esm.js +1 -1
  21. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  22. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  23. package/dist/components/CollectorPage/CollectorFactTableBUI.esm.js +1 -1
  24. package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
  25. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
  26. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  27. package/dist/components/CollectorPage/Configurators/SonarQube/utils.esm.js +1 -1
  28. package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +1 -1
  29. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  30. package/dist/components/CreateNewTrackPage/CreateNewTrackPage.esm.js +2 -0
  31. package/dist/components/EmptyState/EmptyStateNoTracks.esm.js +1 -1
  32. package/dist/components/ExpandableSection/ExpandableSection.esm.js +1 -1
  33. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  34. package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
  35. package/dist/components/FilterSidebar/util.esm.js +1 -1
  36. package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +1 -1
  37. package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +1 -1
  38. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
  39. package/dist/components/Loading/Loading.esm.js +2 -0
  40. package/dist/components/Menus/useCampaignActions.esm.js +1 -1
  41. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
  42. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +1 -1
  43. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js +1 -1
  44. package/dist/components/Stepper/Stepper.esm.js +2 -0
  45. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  46. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  47. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
  48. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
  49. package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +1 -1
  50. package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
  51. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  52. package/dist/components/TrackBuilderPage/TrackBuilderPage.esm.js +2 -0
  53. package/dist/components/TrackBuilderPage/components/CheckItem/CheckItem.esm.js +2 -0
  54. package/dist/components/TrackBuilderPage/components/IntegrationTags/IntegrationTags.esm.js +2 -0
  55. package/dist/components/TrackBuilderPage/components/RunChecksStep/RunChecksStep.esm.js +2 -0
  56. package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js +2 -0
  57. package/dist/components/TrackBuilderPage/components/SelectTracksStep/SelectTracksStep.esm.js +2 -0
  58. package/dist/components/TrackBuilderPage/components/TrackAccordion/TrackAccordion.esm.js +2 -0
  59. package/dist/components/TrackBuilderPage/components/TrackBuilderStatus/TrackBuilderStatus.esm.js +2 -0
  60. package/dist/components/TrackBuilderPage/hooks/useTrackBuilderStatus.esm.js +2 -0
  61. package/dist/components/TrackBuilderPage/hooks/useTrackCheckExecutions.esm.js +2 -0
  62. package/dist/components/TrackBuilderPage/utils.esm.js +4 -0
  63. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
  64. package/dist/components/TrackPage/TrackHistoryChartBUI.esm.js +1 -1
  65. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  66. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
  67. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  68. package/dist/graphql/generated/index.esm.js +163 -84
  69. package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
  70. package/dist/hooks/filters/useFilters.esm.js +1 -1
  71. package/dist/hooks/graphqlKeys.esm.js +1 -1
  72. package/dist/hooks/tracks/useDeleteTrack.esm.js +1 -1
  73. package/dist/hooks/tracks/useOutOfBoxTracks.esm.js +2 -0
  74. package/dist/hooks/tracks/useSaveOutOfBoxTracks.esm.js +2 -0
  75. package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +1 -1
  76. package/dist/index.d.ts +30 -2
  77. package/dist/index.esm.js +1 -1
  78. package/dist/routes.esm.js +1 -1
  79. package/dist/utils/facetFilters/utils.esm.js +2 -0
  80. package/package.json +25 -25
  81. package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +0 -2
  82. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +0 -2
  83. package/dist/components/TechHealth/Filters/FilterProvider.esm.js +0 -2
  84. package/dist/components/TechHealth/Filters/Filters.esm.js +0 -2
  85. package/dist/components/TechHealth/Filters/FiltersHeader.esm.js +0 -2
  86. package/dist/components/TechHealth/Filters/FiltersSection.esm.js +0 -2
  87. package/dist/components/TechHealth/Filters/NumberOfDaysFilter.esm.js +0 -2
  88. package/dist/components/TechHealth/Filters/utils.esm.js +0 -2
  89. package/dist/components/TechHealth/Loading/Loading.esm.js +0 -2
  90. package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +0 -2
  91. /package/dist/{components/TechHealth/Filters → utils/facetFilters}/types.esm.js +0 -0
@@ -1,2 +1,2 @@
1
- import{jsxs as C,jsx as e,Fragment as N}from"react/jsx-runtime";import{stringifyEntityRef as p}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as E,Box as $,Typography as I,Tooltip as R,IconButton as S,CircularProgress as T}from"@material-ui/core";import z from"@material-ui/icons/Refresh";import A from"classnames";import{Link as L}from"react-router-dom";import{ResultState as h}from"../../graphql/generated/index.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as j}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useExecuteCheck as w}from"../../hooks/checks/useExecuteCheck.esm.js";import{CheckIcon as B}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as F}from"../RelativeTime/RelativeTime.esm.js";const d=E(t=>({root:{display:"flex",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}},checkIcon:{height:20}})),G=({className:t,href:r,name:o,children:c})=>r?e(L,{"aria-label":`select check ${o}`,to:r,className:t,children:c}):e("div",{className:t,children:c}),P=({result:t,name:r,id:o,timestamp:c,isExecutable:l=!1,selected:u=!1,href:f})=>{const m=d(),k=A(m.root,{selected:u}),{entity:a}=v(),{mutateAsync:y,isLoading:n}=w(),{data:s}=j(p(a),o),x=async()=>{if(!(!a||!o))try{await y({checkerId:o,entityRef:p(a),shouldRefreshFacts:!0})}catch{}},g=!a||!o||!l||n||!!s?.exemption||t===h.NotApplicable,b=()=>{const i="Cannot execute check";return a?o?l?n?`${i} - check is already executing.`:s?.exemption?`${i} - entity has been exempted from this check.`:t===h.NotApplicable?`${i} - check is not applicable to entity.`:"Execute Check":`${i} - check is not executable by Soundcheck`:`${i} - no check id.`:`${i} - no entity.`};return C(G,{href:f,className:k,name:r,children:[e(B,{className:m.checkIcon,result:t}),e($,{flex:1,children:e(I,{variant:"body2",children:r})}),c&&!n?e(F,{timestamp:c}):null,!n&&e(N,{children:e(R,{title:b(),children:e("span",{children:e(S,{size:"small",color:"inherit",onClick:x,disabled:g,"aria-label":"Execute Check",children:e(z,{fontSize:"small"})})})})}),n&&e(T,{color:"inherit",size:"1em"})]})};export{P as Check,d as useStyles};
1
+ import{jsxs as C,jsx as e,Fragment as N}from"react/jsx-runtime";import{stringifyEntityRef as p}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as E,Box as $,Typography as I,Tooltip as R,IconButton as S,CircularProgress as T}from"@material-ui/core";import z from"@material-ui/icons/Refresh";import A from"classnames";import{Link as L}from"react-router-dom";import{ResultState as h}from"../../graphql/generated/index.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as j}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useExecuteCheck as w}from"../../hooks/checks/useExecuteCheck.esm.js";import{CheckIcon as B}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as F}from"../RelativeTime/RelativeTime.esm.js";const d=E(t=>({root:{display:"flex",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}},checkIcon:{height:20}})),G=({className:t,href:r,name:o,children:c})=>r?e(L,{"aria-label":`select check ${o}`,to:r,className:t,children:c}):e("div",{className:t,children:c}),P=({result:t,name:r,id:o,timestamp:c,isExecutable:l=!0,selected:u=!1,href:f})=>{const m=d(),k=A(m.root,{selected:u}),{entity:a}=v(),{mutateAsync:y,isLoading:n}=w(),{data:s}=j(p(a),o),x=async()=>{if(!(!a||!o))try{await y({checkerId:o,entityRef:p(a),shouldRefreshFacts:!0})}catch{}},g=!a||!o||!l||n||!!s?.exemption||t===h.NotApplicable,b=()=>{const i="Cannot execute check";return a?o?l?n?`${i} - check is already executing.`:s?.exemption?`${i} - entity has been exempted from this check.`:t===h.NotApplicable?`${i} - check is not applicable to entity.`:"Execute Check":`${i} - check is not executable by Soundcheck`:`${i} - no check id.`:`${i} - no entity.`};return C(G,{href:f,className:k,name:r,children:[e(B,{className:m.checkIcon,result:t}),e($,{flex:1,children:e(I,{variant:"body2",children:r})}),c&&!n?e(F,{timestamp:c}):null,!n&&e(N,{children:e(R,{title:b(),children:e("span",{children:e(S,{size:"small",color:"inherit",onClick:x,disabled:g,"aria-label":"Execute Check",children:e(z,{fontSize:"small"})})})})}),n&&e(T,{color:"inherit",size:"1em"})]})};export{P as Check,d as useStyles};
2
2
  //# sourceMappingURL=Check.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as i,jsx as e}from"react/jsx-runtime";import{makeStyles as m,Box as a,ButtonGroup as g,Button as b,Menu as h,MenuItem as l}from"@material-ui/core";import x from"@material-ui/icons/ArrowDropDown";import{useState as A}from"react";const C=m(d=>({label:{padding:d.spacing(0,1.5,0,0)},icon:{borderLeft:`1px solid ${d.palette.divider}`,display:"flex",alignItems:"center",padding:0},menu:{margin:0,backgroundColor:d.palette.background.paper},button:{padding:d.spacing(.5,1.5),paddingRight:d.spacing(.5)}})),f=({onAddCondition:d,onAddExpression:p})=>{const n=C(),[r,s]=A(null),o=!!r,c=u=>{s(u.currentTarget)},t=()=>{s(null)};return i(a,{children:[e(g,{color:"primary",children:i(b,{className:n.button,"data-testid":"add-button",id:"add-button","aria-controls":o?"add-menu":void 0,"aria-haspopup":"true","aria-expanded":o?"true":void 0,onClick:c,size:"medium",children:[e(a,{className:n.label,children:"Add"}),e(a,{className:n.icon,children:e(x,{})})]})}),i(h,{id:"add-menu",anchorEl:r,open:o,onClose:t,classes:{paper:n.menu},MenuListProps:{"aria-labelledby":"add-button"},children:[e(l,{"data-testid":"add-condition",onClick:()=>{d(),t()},children:"Add Condition"}),e(l,{"data-testid":"add-expression",onClick:()=>{p(),t()},children:"Add Expression"})]})]})};export{f as AddMenuButton};
1
+ import{jsxs as i,jsx as e}from"react/jsx-runtime";import{makeStyles as m,Box as a,ButtonGroup as g,Button as b,Menu as h,MenuItem as l}from"@material-ui/core";import x from"@material-ui/icons/ArrowDropDown";import{useState as C}from"react";const A=m(d=>({label:{padding:d.spacing(0,1.5,0,0)},icon:{borderLeft:`1px solid ${d.palette.divider}`,display:"flex",alignItems:"center",padding:0},menu:{margin:0,backgroundColor:d.palette.background.paper},button:{padding:d.spacing(.5,1.5),paddingRight:d.spacing(.5)}})),f=({onAddCondition:d,onAddExpression:p})=>{const n=A(),[r,s]=C(null),o=!!r,c=u=>{s(u.currentTarget)},t=()=>{s(null)};return i(a,{children:[e(g,{color:"primary",children:i(b,{className:n.button,"data-testid":"add-button",id:"add-button","aria-controls":o?"add-menu":void 0,"aria-haspopup":"true","aria-expanded":o?"true":void 0,onClick:c,size:"medium",children:[e(a,{className:n.label,children:"Add"}),e(a,{className:n.icon,children:e(x,{})})]})}),i(h,{id:"add-menu",anchorEl:r,open:o,onClose:t,classes:{paper:n.menu},MenuListProps:{"aria-labelledby":"add-button"},children:[e(l,{"data-testid":"add-condition",onClick:()=>{d(),t()},children:"Add Condition"}),e(l,{"data-testid":"add-expression",onClick:()=>{p(),t()},children:"Add Expression"})]})]})};export{f as AddMenuButton};
2
2
  //# sourceMappingURL=AddMenuButton.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as y,Fragment as te}from"react/jsx-runtime";import{stringifyEntityRef as x,parseEntityRef as ie,RELATION_OWNED_BY as oe,RELATION_PART_OF as ne}from"@backstage/catalog-model";import{useRouteRef as re}from"@backstage/core-plugin-api";import{entityRouteRef as ae,getEntityRelations as F,humanizeEntityRef as S}from"@backstage/plugin-catalog-react";import{Table as se,TableHeader as ce,Column as d,TableBody as le,TablePagination as de,Row as pe,Flex as fe,CellText as u,CellProfile as ge}from"@backstage/ui";import{RiCheckLine as me,RiCloseLine as ye,RiAlertLine as ue,RiErrorWarningFill as he,RiProhibitedLine as Ie,RiIndeterminateCircleLine as Re,RiInformationOffLine as we}from"@remixicon/react";import{compact as ke,uniq as Ee,startCase as Se}from"lodash";import{useState as C,useEffect as j,useMemo as b,useCallback as L}from"react";import{useNavigate as Ce}from"react-router-dom";import{ResultState as l,CheckEntityField as p,Direction as s}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as be}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useProfileImages as Le}from"../../../hooks/catalog/useProfileImages.esm.js";import{useCheckEntities as Pe}from"../../../hooks/entities/useCheckEntities.esm.js";import{useSortSearchParams as Ne}from"../../../hooks/useSortSearchParams.esm.js";import{CustomCell as ve}from"../../CustomCell/CustomCell.esm.js";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Te}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../routes.esm.js";import{LoadingTableSkeleton as ze}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{toResultState as M}from"../utils.esm.js";import{toCheckEntityRow as Ae}from"./utils.esm.js";const W=10,Be=["kind","metadata.name","metadata.namespace","spec.profile.displayName","metadata.title","relations","spec.lifecycle","spec.type"],De={[l.Passed]:t(me,{style:{color:"var(--bui-fg-success)"}}),[l.Failed]:t(ye,{style:{color:"var(--bui-fg-danger)"}}),[l.Warning]:t(ue,{}),[l.Error]:t(he,{}),[l.Exempt]:t(Ie,{style:{color:"var(--bui-fg-disabled)"}}),[l.NotReported]:t(Re,{style:{color:"var(--bui-fg-disabled)"}}),[l.NotApplicable]:t(we,{style:{color:"var(--bui-fg-disabled)"}})},P={name:p.Name,owner:p.Owner,system:p.System,type:p.Type,lifecycle:p.Lifecycle},Oe=({checkId:_,trackId:H,filter:h,states:I})=>{const{updateSortParams:N,searchParams:f}=Ne(),[R,v]=C(()=>{const e=f.get("sortDirection");return e==="ascending"?s.Asc:e==="descending"?s.Desc:s.Asc}),[m,T]=C(()=>{const e=f.get("sort");return e&&P[e]?e:"name"}),K=R===s.Asc?"ascending":"descending",[i,z]=C({orderBy:void 0,filter:h,states:I?.map(M).filter(e=>e!==void 0),pageInfo:{page:0,pageSize:W,direction:"forward",cursor:null}});j(()=>{const e=f.get("sortDirection");(e==="ascending"||e==="descending")&&v(e==="ascending"?s.Asc:s.Desc);const o=f.get("sort");o&&P[o]&&T(o)},[f]),j(()=>{let e;m?e={field:P[m]??p.Name,direction:R}:e=void 0,z(o=>({...o,orderBy:e,pageInfo:{...o.pageInfo,page:0,cursor:null},filter:h,states:I?.map(M).filter(a=>a!==void 0)}))},[h,I,m,R]);const{data:r,isLoading:q}=Pe({checkId:_,trackId:H,orderBy:i.orderBy,filter:i.filter,states:i.states?.length?i.states:void 0,[i.pageInfo.direction==="forward"?"first":"last"]:i.pageInfo.pageSize,[i.pageInfo.direction==="forward"?"after":"before"]:i.pageInfo.cursor}),U=r?.checkEntities.edges.map(e=>e.node.entityRef)??[],{data:w,isLoading:Y}=be({entityRefs:U,fields:Be}),$=b(()=>r?.checkEntities.edges??[],[r]),G=b(()=>r?.checkEntities.totalCount??0,[r])>W,k=L((e,o)=>{const a=e>i.pageInfo.page?"forward":"backward",E=a==="forward"?r?.checkEntities.pageInfo.endCursor??null:r?.checkEntities.pageInfo.startCursor??null;z({...i,pageInfo:{page:e,pageSize:o,direction:a,cursor:E}})},[r,i]),J=L(({direction:e,column:o})=>{T(String(o)),v(e==="ascending"?s.Desc:s.Asc),N({sort:String(o),sortDirection:e})},[N]),A=b(()=>!r?.checkEntities.edges?.length||!w?.items?.length?[]:ke(r.checkEntities.edges.map(e=>{const o=w.items.find(a=>!!a&&x(a)===e.node.entityRef);return o?Ae({checkDetails:e.node,entity:o}):void 0})),[r?.checkEntities.edges,w?.items]),V=({row:e})=>{const o=Ce(),a=re(ae),E=L(n=>{const c=ie(x(n)),g=a(c);o(`${g}/soundcheck`)},[o,a]),X=F(e.entity,oe).map(n=>S(n,{defaultKind:n.kind})).join(", "),Z=F(e.entity,ne,{kind:"system"}).map(n=>S(n,{defaultKind:"system"})).join(", "),Q=Ee(A.flatMap(n=>n.entity.relations?.filter(({type:c,targetRef:g})=>c==="ownedBy"&&g).map(c=>c.targetRef)||[])),{profileImageMap:ee}=Le(Q),B=e.entity.relations?.find(({type:n})=>n==="ownedBy")?.targetRef;let D;B&&(D=ee?.[B]);const O=S(e.entity,{defaultKind:"Component"});return y(pe,{onAction:()=>E(e.entity),children:[t(ve,{children:t(fe,{children:(n=>{const c=De[n],g=Se(n.toLowerCase());return t("span",{title:g,children:c})})(e.state)})}),t(u,{title:O}),t(u,{title:Z}),t(ge,{name:X,src:D??O}),t(u,{title:e.entity.spec?.type}),t(u,{title:e.entity.spec?.lifecycle})]},e.id)};return q||Y?t(ze,{}):$.length?y(te,{children:[y(se,{onSortChange:J,sortDescriptor:{direction:K,column:m},children:[y(ce,{children:[t(d,{id:"state",style:{width:"5%"}}),t(d,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"35%"},children:"Name"}),t(d,{id:"system",allowsSorting:!0,style:{width:"20%"},children:"System"}),t(d,{id:"owner",allowsSorting:!0,style:{width:"20%"},children:"Owner"}),t(d,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),t(d,{id:"lifecycle",allowsSorting:!0,style:{width:"10%"},children:"Lifecycle"})]}),t(le,{children:A.map(e=>t(V,{row:e},e.id))})]}),G&&t(de,{showPageSizeOptions:!0,tabIndex:i.pageInfo.page,pageSize:i.pageInfo.pageSize,rowCount:r?.checkEntities.totalCount,offset:i.pageInfo.page*i.pageInfo.pageSize,onPreviousPage:()=>{const e=i.pageInfo.page-1;k(e,i.pageInfo.pageSize)},onNextPage:()=>{const e=i.pageInfo.page+1;k(e,i.pageInfo.pageSize)},onPageSizeChange:e=>{k(i.pageInfo.page,e)}})]}):t(Te,{title:"No check entities found",body:"There are no check entities found."})};export{Oe as CheckEntitiesTableBUI};
1
+ import{jsx as t,jsxs as y,Fragment as ie}from"react/jsx-runtime";import{stringifyEntityRef as C,parseEntityRef as oe,RELATION_OWNED_BY as ne,RELATION_PART_OF as re}from"@backstage/catalog-model";import{useRouteRef as ae}from"@backstage/core-plugin-api";import{entityRouteRef as se,useEntityPresentation as ce,getEntityRelations as F,humanizeEntityRef as j}from"@backstage/plugin-catalog-react";import{TableRoot as le,TableHeader as de,Column as d,TableBody as pe,TablePagination as fe,Row as ge,Flex as me,CellText as u,CellProfile as ye}from"@backstage/ui";import{RiCheckLine as ue,RiCloseLine as he,RiAlertLine as Ie,RiErrorWarningFill as Re,RiProhibitedLine as we,RiIndeterminateCircleLine as ke,RiInformationOffLine as Ee}from"@remixicon/react";import{compact as Se,uniq as Ce,startCase as be}from"lodash";import{useState as b,useEffect as W,useMemo as P,useCallback as v}from"react";import{useNavigate as Pe}from"react-router-dom";import{ResultState as l,CheckEntityField as p,Direction as s}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as ve}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useProfileImages as Le}from"../../../hooks/catalog/useProfileImages.esm.js";import{useCheckEntities as ze}from"../../../hooks/entities/useCheckEntities.esm.js";import{useSortSearchParams as Ne}from"../../../hooks/useSortSearchParams.esm.js";import{CustomCell as Te}from"../../CustomCell/CustomCell.esm.js";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ae}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../routes.esm.js";import{LoadingTableSkeleton as Be}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{toResultState as _}from"../utils.esm.js";import{toCheckEntityRow as De}from"./utils.esm.js";const K=10,Oe=["kind","metadata.name","metadata.namespace","spec.profile.displayName","metadata.title","relations","spec.lifecycle","spec.type"],xe={[l.Passed]:t(ue,{style:{color:"var(--bui-fg-success)"}}),[l.Failed]:t(he,{style:{color:"var(--bui-fg-danger)"}}),[l.Warning]:t(Ie,{}),[l.Error]:t(Re,{}),[l.Exempt]:t(we,{style:{color:"var(--bui-fg-disabled)"}}),[l.NotReported]:t(ke,{style:{color:"var(--bui-fg-disabled)"}}),[l.NotApplicable]:t(Ee,{style:{color:"var(--bui-fg-disabled)"}})},L={name:p.Name,owner:p.Owner,system:p.System,type:p.Type,lifecycle:p.Lifecycle},Fe=({checkId:M,trackId:q,filter:h,states:I})=>{const{updateSortParams:z,searchParams:f}=Ne(),[R,N]=b(()=>{const e=f.get("sortDirection");return e==="ascending"?s.Asc:e==="descending"?s.Desc:s.Asc}),[m,T]=b(()=>{const e=f.get("sort");return e&&L[e]?e:"name"}),H=R===s.Asc?"ascending":"descending",[i,A]=b({orderBy:void 0,filter:h,states:I?.map(_).filter(e=>e!==void 0),pageInfo:{page:0,pageSize:K,direction:"forward",cursor:null}});W(()=>{const e=f.get("sortDirection");(e==="ascending"||e==="descending")&&N(e==="ascending"?s.Asc:s.Desc);const o=f.get("sort");o&&L[o]&&T(o)},[f]),W(()=>{let e;m?e={field:L[m]??p.Name,direction:R}:e=void 0,A(o=>({...o,orderBy:e,pageInfo:{...o.pageInfo,page:0,cursor:null},filter:h,states:I?.map(_).filter(a=>a!==void 0)}))},[h,I,m,R]);const{data:r,isLoading:U}=ze({checkId:M,trackId:q,orderBy:i.orderBy,filter:i.filter,states:i.states?.length?i.states:void 0,[i.pageInfo.direction==="forward"?"first":"last"]:i.pageInfo.pageSize,[i.pageInfo.direction==="forward"?"after":"before"]:i.pageInfo.cursor}),Y=r?.checkEntities.edges.map(e=>e.node.entityRef)??[],{data:w,isLoading:$}=ve({entityRefs:Y,fields:Oe}),G=P(()=>r?.checkEntities.edges??[],[r]),k=P(()=>r?.checkEntities.totalCount??0,[r]),J=k>K,E=v((e,o)=>{const a=e>i.pageInfo.page?"forward":"backward",S=a==="forward"?r?.checkEntities.pageInfo.endCursor??null:r?.checkEntities.pageInfo.startCursor??null;A({...i,pageInfo:{page:e,pageSize:o,direction:a,cursor:S}})},[r,i]),V=v(({direction:e,column:o})=>{T(String(o)),N(e==="ascending"?s.Desc:s.Asc),z({sort:String(o),sortDirection:e})},[z]),B=P(()=>!r?.checkEntities.edges?.length||!w?.items?.length?[]:Se(r.checkEntities.edges.map(e=>{const o=w.items.find(a=>!!a&&C(a)===e.node.entityRef);return o?De({checkDetails:e.node,entity:o}):void 0})),[r?.checkEntities.edges,w?.items]),X=({row:e})=>{const o=Pe(),a=ae(se),S=v(n=>{const c=oe(C(n)),g=a(c);o(`${g}/soundcheck`)},[o,a]),{primaryTitle:D}=ce(C(e.entity)),Z=F(e.entity,ne).map(n=>j(n,{defaultKind:n.kind})).join(", "),Q=F(e.entity,re,{kind:"system"}).map(n=>j(n,{defaultKind:"system"})).join(", "),ee=Ce(B.flatMap(n=>n.entity.relations?.filter(({type:c,targetRef:g})=>c==="ownedBy"&&g).map(c=>c.targetRef)||[])),{profileImageMap:te}=Le(ee),O=e.entity.relations?.find(({type:n})=>n==="ownedBy")?.targetRef;let x;return O&&(x=te?.[O]),y(ge,{onAction:()=>S(e.entity),children:[t(Te,{children:t(me,{children:(n=>{const c=xe[n],g=be(n.toLowerCase());return t("span",{title:g,children:c})})(e.state)})}),t(u,{title:D}),t(u,{title:Q}),t(ye,{name:Z,src:x??D}),t(u,{title:e.entity.spec?.type}),t(u,{title:e.entity.spec?.lifecycle})]},e.id)};return U||$?t(Be,{}):G.length?y(ie,{children:[y(le,{onSortChange:V,sortDescriptor:{direction:H,column:m},children:[y(de,{children:[t(d,{id:"state",style:{width:"5%"}}),t(d,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"35%"},children:"Name"}),t(d,{id:"system",allowsSorting:!0,style:{width:"20%"},children:"System"}),t(d,{id:"owner",allowsSorting:!0,style:{width:"20%"},children:"Owner"}),t(d,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),t(d,{id:"lifecycle",allowsSorting:!0,style:{width:"10%"},children:"Lifecycle"})]}),t(pe,{children:B.map(e=>t(X,{row:e},e.id))})]}),J&&t(fe,{showPageSizeOptions:!0,totalCount:k,pageSize:i.pageInfo.pageSize,offset:i.pageInfo.page*i.pageInfo.pageSize,onPreviousPage:()=>{const e=i.pageInfo.page-1;E(e,i.pageInfo.pageSize)},onNextPage:()=>{const e=i.pageInfo.page+1;E(e,i.pageInfo.pageSize)},onPageSizeChange:e=>{E(i.pageInfo.page,e)},hasNextPage:(i.pageInfo.page+1)*i.pageInfo.pageSize<k,hasPreviousPage:i.pageInfo.page>0})]}):t(Ae,{title:"No check entities found",body:"There are no check entities found."})};export{Fe as CheckEntitiesTableBUI};
2
2
  //# sourceMappingURL=CheckEntitiesTableBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as d,Fragment as le}from"react/jsx-runtime";import{parseEntityRef as ne}from"@backstage/catalog-model";import{useRouteRef as R}from"@backstage/core-plugin-api";import{usePermission as pe}from"@backstage/plugin-permission-react";import{Container as X,HeaderPage as de,Flex as $,Box as w}from"@backstage/ui";import{makeStyles as he}from"@material-ui/core";import{toEntityFilterQuery as N,combineEntityFilterQueries as fe,soundcheckCheckReadPermission as ue}from"@spotify/backstage-plugin-soundcheck-common";import{useState as P,useMemo as s,useEffect as ke}from"react";import{useSearchParams as ge,useParams as be}from"react-router-dom";import Ee from"react-use/lib/useDebounce";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCheck as Se}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Ie}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as ye}from"../../hooks/aggregations/useCheckStatus.esm.js";import"react-use/lib/useLocalStorage";import{useFilters as Te}from"../../hooks/filters/useFilters.esm.js";import{useLCPReporting as Ce}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ve}from"../../hooks/useLoadTimeReporting.esm.js";import{trackDetailsRouteRef as Re,checksPageRouteRef as we,tracksPageRouteRef as Ne}from"../../routes.esm.js";import{DescriptionCard as Pe}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{CheckStatusCard as Ae}from"../Cards/CheckStatusCard/CheckStatusCard.esm.js";import{HistoricalCheckStatusCard as Fe}from"../Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js";import{ChipSelector as Le}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as A}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import"lodash";import{toFilter as je}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as xe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Oe}from"../Menus/SimpleMenu.esm.js";import{useCheckActions as Be}from"../Menus/useCheckActions.esm.js";import{PageCustomActions as De}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 Me}from"../TechHealth/Filters/utils.esm.js";import{CheckEntitiesTableBUI as Ue}from"./CheckEntitiesTable/CheckEntitiesTableBUI.esm.js";import{ExemptionsTableBUI as Qe}from"./ExemptionsTableBUI.esm.js";const Ve=he(()=>({container:{marginBottom:"var(--bui-space-12)"},tables:{margin:"var(--bui-space-12) 0 0"},tableContent:{margin:"var(--bui-space-3) 0 0"}})),h={ENTITIES:"Entities",EXEMPTIONS:"Exemptions"},qe=(l,e)=>l.levels.flatMap(({checks:n})=>n).find(({id:n})=>n===e)||null,Xe=()=>{const l=Ve(),[e,n]=ge(),{trackId:o,checkId:t}=be(),{data:a,isLoading:u,isError:H}=Ie(o),{data:k,isLoading:f,isError:W}=Se(t),F=k?.ownerEntityRef,z=F?ne(F).name:void 0,L=Be(k??void 0),G=R(Re),J=R(we),K=R(Ne),[j,Y]=P(new Set([h.ENTITIES])),I=j.values().next().value??h.ENTITIES,[p,x]=P(e.get("search")||""),[O,Z]=P(""),_=i=>{Y(i),x(""),n({},{replace:!0})},c=s(()=>e.getAll("states"),[e]),g=s(()=>e.getAll("owners"),[e]),b=s(()=>e.getAll("lifecycles"),[e]),E=s(()=>e.getAll("types"),[e]),S=s(()=>e.getAll("systems"),[e]),y=s(()=>Me(e.get("numberOfDays")),[e]);Ee(()=>{Z(p);const i=new URLSearchParams(e.toString());p?i.set("search",p):i.delete("search"),n(i,{replace:!0})},300,[p]);const B=s(()=>({routeName:"soundcheck-check-insights",additionalAttributes:{checkId:t||"",trackId:o||"",filtersApplied:g.length+b.length+E.length+S.length+c.length,ownersFilter:g.join(",")||"",lifecyclesFilter:b.join(",")||"",typesFilter:E.join(",")||"",systemsFilter:S.join(",")||"",statesFilter:c.join(",")||"",numberOfDays:y,checkSearch:O}}),[t,o,g,b,E,S,c,y,O]),{reportContentLoaded:D}=ve(B),{reporter:ee}=Ce(B),m=s(()=>k??a?.levels.flatMap(i=>i.checks).find(i=>i.id===t),[k,t,a?.levels]),T=je({lifecycles:b,owners:g,types:E,systems:S}),{data:M,isLoading:C,isError:te}=ye({checkId:t,trackId:o,filter:T,states:c?.length?c:void 0},!!t);let v;if(t)if(a){const i=N(a.filter),me=N(qe(a,t)?.filter);v=fe(i,me)}else m?.filter&&(v=N(m.filter));const{loading:U,allowed:Q}=pe({permission:ue,resourceRef:t}),re=s(()=>!!m&&!U&&!Q,[Q,m,U]),{filters:ie,selected:oe,setSelected:se,onRemoveTag:ae,selectedTags:ce}=Te({entityFilterQuery:v,hasStatusFilters:!0}),V=H||W||te,q=ee?.getLCPValue();return ke(()=>{!f&&!C&&(!o||!u)&&D({lcp:q})},[f,C,u,o,D,q]),f||o&&u?r(xe,{}):!f&&!m?r(X,{className:l.container,children:r(A,{title:"Check not found",body:`There is no check with the requested id: ${t}.`})}):re?r(A,{title:"Cannot view check",body:`No permission to view check with the requested id: ${t}.`}):o&&!u&&!a?r(A,{title:"No track found",body:`There is no track with the requested id: ${o}.`}):d(le,{children:[r(de,{title:m?.name??"",breadcrumbs:o?[{label:"Tracks",href:K()},{label:a?.name??"Track",href:G({trackId:o})}]:[{label:"Checks",href:J()}],customActions:r(Oe,{label:"Check Actions",disabled:!L.length,placement:"left top",menuActions:L})}),d(X,{className:l.container,children:[d($,{children:[r(Pe,{description:m?.description??void 0,owner:z,isError:V,isLoading:f}),r(Ae,{states:c,status:M,isLoading:C,isError:V}),r(Fe,{checkId:t,trackId:o,filter:T,states:c,checkStatus:M,numberOfDays:y})]}),d(w,{className:l.tables,children:[d($,{justify:"between",children:[r(w,{minWidth:"12rem",children:r(Le,{options:Object.values(h),selected:j,ariaLabel:"Sections",onSelectionChange:_})}),r(De,{searchValue:p,setSearchValue:i=>x(i),filters:ie,selected:oe,setSelected:se,onRemoveTag:ae,selectedTags:ce,showSearch:I!==h.ENTITIES})]}),d(w,{className:l.tableContent,children:[I===h.ENTITIES&&r(Ue,{checkId:t,trackId:a?.id,filter:T,states:c}),I===h.EXEMPTIONS&&r(Qe,{checkId:t,searchValue:p})]})]})]})]})};export{Xe as CheckPageBUI};
1
+ import{jsx as i,jsxs as h,Fragment as me}from"react/jsx-runtime";import{parseEntityRef as pe}from"@backstage/catalog-model";import{useRouteRef as R}from"@backstage/core-plugin-api";import{usePermission as de}from"@backstage/plugin-permission-react";import{Container as H,HeaderPage as fe,Flex as W,Box as P}from"@backstage/ui";import{makeStyles as he}from"@material-ui/core";import{toEntityFilterQuery as w,combineEntityFilterQueries as ue,soundcheckCheckReadPermission as ke}from"@spotify/backstage-plugin-soundcheck-common";import{useState as F,useMemo as a,useEffect as ge}from"react";import{useSearchParams as Ee,useParams as Ie}from"react-router-dom";import Se from"react-use/lib/useDebounce";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCheck as Te}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as be}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as ye}from"../../hooks/aggregations/useCheckStatus.esm.js";import"react-use/lib/useLocalStorage";import{useFilters as Ce}from"../../hooks/filters/useFilters.esm.js";import{useLCPReporting as ve}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ne}from"../../hooks/useLoadTimeReporting.esm.js";import{trackDetailsRouteRef as Re,checksPageRouteRef as Pe,tracksPageRouteRef as we}from"../../routes.esm.js";import"../../utils/facetFilters/types.esm.js";import{parseNumberOfDays as Fe}from"../../utils/facetFilters/utils.esm.js";import{DescriptionCard as Le}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{CheckStatusCard as xe}from"../Cards/CheckStatusCard/CheckStatusCard.esm.js";import{HistoricalCheckStatusCard as Ae}from"../Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js";import{ChipSelector as je}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as L}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import"lodash";import{toFilter as Me}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as Oe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Be}from"../Menus/SimpleMenu.esm.js";import{useCheckActions as De}from"../Menus/useCheckActions.esm.js";import{PageCustomActions as Ue}from"../PageCustomActions/PageCustomActions.esm.js";import{CheckEntitiesTableBUI as Xe}from"./CheckEntitiesTable/CheckEntitiesTableBUI.esm.js";import{ExemptionsTableBUI as qe}from"./ExemptionsTableBUI.esm.js";const Ve=he(()=>({container:{marginBottom:"var(--bui-space-12)"},tables:{margin:"var(--bui-space-12) 0 0"},tableContent:{margin:"var(--bui-space-3) 0 0"}})),s={ENTITIES:"Entities",EXEMPTIONS:"Exemptions"},Qe={entities:s.ENTITIES,exemptions:s.EXEMPTIONS},$e={[s.ENTITIES]:"entities",[s.EXEMPTIONS]:"exemptions"},He=(p,e)=>p.levels.flatMap(({checks:l})=>l).find(({id:l})=>l===e)||null,We=()=>{const p=Ve(),[e,l]=Ee(),{trackId:o,checkId:r}=Ie(),{data:c,isLoading:k,isError:_}=be(o),{data:g,isLoading:u,isError:z}=Te(r),x=g?.ownerEntityRef,G=x?pe(x).name:void 0,A=De(g??void 0),J=R(Re),K=R(Pe),Y=R(we),[j,Z]=F(()=>{const t=e.get("section"),f=t?Qe[t]:null;return new Set([f??s.ENTITIES])}),b=j.values().next().value??s.ENTITIES,[d,M]=F(e.get("search")||""),[O,ee]=F(""),te=t=>{Z(t),M("");const f=t.values().next().value,$=f?$e[f]:void 0;$?l({section:$},{replace:!0}):l({},{replace:!0})},n=a(()=>e.getAll("states"),[e]),E=a(()=>e.getAll("owners"),[e]),I=a(()=>e.getAll("lifecycles"),[e]),S=a(()=>e.getAll("types"),[e]),T=a(()=>e.getAll("systems"),[e]),y=a(()=>Fe(e.get("numberOfDays")),[e]);Se(()=>{ee(d);const t=new URLSearchParams(e.toString());d?t.set("search",d):t.delete("search"),l(t,{replace:!0})},300,[d]);const B=a(()=>({routeName:"soundcheck-check-insights",additionalAttributes:{checkId:r||"",trackId:o||"",filtersApplied:E.length+I.length+S.length+T.length+n.length,ownersFilter:E.join(",")||"",lifecyclesFilter:I.join(",")||"",typesFilter:S.join(",")||"",systemsFilter:T.join(",")||"",statesFilter:n.join(",")||"",numberOfDays:y,checkSearch:O}}),[r,o,E,I,S,T,n,y,O]),{reportContentLoaded:D}=Ne(B),{reporter:re}=ve(B),m=a(()=>g??c?.levels.flatMap(t=>t.checks).find(t=>t.id===r),[g,r,c?.levels]),C=Me({lifecycles:I,owners:E,types:S,systems:T}),{data:U,isLoading:v,isError:ie}=ye({checkId:r,trackId:o,filter:C,states:n?.length?n:void 0},!!r);let N;if(r)if(c){const t=w(c.filter),f=w(He(c,r)?.filter);N=ue(t,f)}else m?.filter&&(N=w(m.filter));const{loading:X,allowed:q}=de({permission:ke,resourceRef:r}),oe=a(()=>!!m&&!X&&!q,[q,m,X]),{filters:se,selected:ae,setSelected:ce,onRemoveTag:ne,selectedTags:le}=Ce({entityFilterQuery:N,hasStatusFilters:!0}),V=_||z||ie,Q=re?.getLCPValue();return ge(()=>{!u&&!v&&(!o||!k)&&D({lcp:Q})},[u,v,k,o,D,Q]),u||o&&k?i(Oe,{}):!u&&!m?i(H,{className:p.container,children:i(L,{title:"Check not found",body:`There is no check with the requested id: ${r}.`})}):oe?i(L,{title:"Cannot view check",body:`No permission to view check with the requested id: ${r}.`}):o&&!k&&!c?i(L,{title:"No track found",body:`There is no track with the requested id: ${o}.`}):h(me,{children:[i(fe,{title:m?.name??"",breadcrumbs:o?[{label:"Tracks",href:Y()},{label:c?.name??"Track",href:J({trackId:o})}]:[{label:"Checks",href:K()}],customActions:i(Be,{label:"Check Actions",disabled:!A.length,placement:"left top",menuActions:A})}),h(H,{className:p.container,children:[h(W,{children:[i(Le,{description:m?.description??void 0,owner:G,isError:V,isLoading:u}),i(xe,{states:n,status:U,isLoading:v,isError:V}),i(Ae,{checkId:r,trackId:o,filter:C,states:n,checkStatus:U,numberOfDays:y})]}),h(P,{className:p.tables,children:[h(W,{justify:"between",children:[i(P,{minWidth:"12rem",children:i(je,{options:Object.values(s),selected:j,ariaLabel:"Sections",onSelectionChange:te})}),i(Ue,{searchValue:d,setSearchValue:t=>M(t),filters:se,selected:ae,setSelected:ce,onRemoveTag:ne,selectedTags:le,showSearch:b!==s.ENTITIES})]}),h(P,{className:p.tableContent,children:[b===s.ENTITIES&&i(Xe,{checkId:r,trackId:c?.id,filter:C,states:n}),b===s.EXEMPTIONS&&i(qe,{checkId:r,searchValue:d})]})]})]})]})};export{We as CheckPageBUI};
2
2
  //# sourceMappingURL=CheckPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as m,Fragment as D}from"react/jsx-runtime";import{parseEntityRef as o}from"@backstage/catalog-model";import{useRouteRef as N,useApi as U}from"@backstage/core-plugin-api";import{entityRouteRef as $,entityPresentationApiRef as F}from"@backstage/plugin-catalog-react";import{Table as H,TableHeader as M,Column as d,TableBody as O,Row as z,CellText as y,TooltipTrigger as J,Button as V,Tooltip as q,TablePagination as G}from"@backstage/ui";import{makeStyles as K}from"@material-ui/core";import{useState as _,useMemo as l,useCallback as Q}from"react";import{useNavigate as X}from"react-router-dom";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{usePagination as Y}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useExemptions as Z}from"../../hooks/exemptions/useExemptions.esm.js";import{formatTimestamp as ee}from"../../utils/time.esm.js";import{CustomCell as te}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as C}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import{LoadingTableSkeleton as ie}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const S=10,re=K(f=>({justificationCell:{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",whiteSpace:"pre-line",wordBreak:"break-word",fontWeight:"normal",textAlign:"left",background:"none !important",padding:0},emptyStateWrapper:{padding:f.spacing(2)}})),oe=({checkId:f,searchValue:u})=>{const j=re(),w=X(),b=N($),[c,R]=_("ascending"),[h,E]=_("entity"),{data:p,isLoading:P,error:B}=Z(f),v=l(()=>p?.totalCount??0,[p]),g=l(()=>p?.edges??[],[p]),L=Q(t=>{const e=o(t),r=b(e);w(`${r}/soundcheck`)},[w,b]),s=l(()=>{const t=(e,r)=>e<r?c==="ascending"?-1:1:e>r?c==="ascending"?1:-1:0;return[...g].sort((e,r)=>{const n=e.node,a=r.node;switch(h){case"entity":return t(o(n.entity_ref).name,o(a.entity_ref).name);case"justification":return t(n.justification??"",a.justification??"");case"user":return t(o(n.user_ref).name,o(a.user_ref).name);case"date":return t(n.timestamp,a.timestamp);default:return 0}})},[g,h,c]),k=U(F),x=l(()=>{const t=new Map;for(const{node:e}of s){const r=k.forEntity(e.entity_ref)?.snapshot?.primaryTitle;r&&t.set(e.entity_ref,r)}return t},[s,k]),T=l(()=>{if(!u?.length)return s;const t=u.toLowerCase().trim();return s.filter(({node:e})=>x.get(e.entity_ref)?.toLowerCase().includes(t))},[s,u,x]),A=v>S,{paginatedItems:I,paginationProps:W}=Y({pageParam:"perPage",defaultPageSize:S,items:T});return P?i(ie,{}):B?i(C,{title:"Exemptions failed",body:"Failed to load exemptions."}):!g.length||!T.length?i(C,{title:"No check exemptions found",body:"There are no check exemptions found."}):m(D,{children:[m(H,{onSortChange:({direction:t,column:e})=>{E(e),R(t)},sortDescriptor:{direction:c,column:h},children:[m(M,{children:[i(d,{id:"entity",allowsSorting:!0,isRowHeader:!0,style:{width:"35%"},children:"Entity"}),i(d,{id:"justification",style:{width:"40%"},children:"Justification"}),i(d,{id:"user",allowsSorting:!0,style:{width:"15%"},children:"User"}),i(d,{id:"date",allowsSorting:!0,style:{width:"10%"},children:"Date"})]}),i(O,{children:I.map(t=>{const e=t.node,r=ee(e.timestamp),n=o(e.user_ref),a=o(e.entity_ref);return m(z,{onAction:()=>L(e.entity_ref),children:[i(y,{title:a.name}),i(te,{children:m(J,{children:[i(V,{variant:"tertiary",className:j.justificationCell,children:e.justification}),i(q,{children:e.justification})]})}),i(y,{title:n.name}),i(y,{title:r})]},`${e.entity_ref}-${e.check_id}`)})})]}),A&&i(G,{...W})]})};export{oe as ExemptionsTableBUI};
1
+ import{jsx as i,jsxs as l,Fragment as I}from"react/jsx-runtime";import{parseEntityRef as n}from"@backstage/catalog-model";import{useRouteRef as W,useApi as U}from"@backstage/core-plugin-api";import{entityRouteRef as $,entityPresentationApiRef as D}from"@backstage/plugin-catalog-react";import{TableRoot as F,TableHeader as H,Column as f,TableBody as M,Row as O,CellText as P,TooltipTrigger as J,Button as V,Tooltip as q,TablePagination as G}from"@backstage/ui";import{makeStyles as K}from"@material-ui/core";import{useState as T,useMemo as p,useCallback as Q}from"react";import{useNavigate as X}from"react-router-dom";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{usePagination as Y}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useExemptions as Z}from"../../hooks/exemptions/useExemptions.esm.js";import{formatTimestamp as ee}from"../../utils/time.esm.js";import{CustomCell as te}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as _}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import{LoadingTableSkeleton as ie}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const j=10,oe=K(u=>({justificationCell:{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",whiteSpace:"pre-line",wordBreak:"break-word",fontWeight:"normal",textAlign:"left",background:"none !important",padding:0},emptyStateWrapper:{padding:u.spacing(2)}})),re=({checkId:u,searchValue:g})=>{const v=oe(),x=X(),S=W($),[c,R]=T("ascending"),[h,E]=T("entity"),{data:d,isLoading:z,error:B}=Z(u),y=p(()=>d?.totalCount??0,[d]),w=p(()=>d?.edges??[],[d]),N=Q(t=>{const e=n(t),o=S(e);x(`${o}/soundcheck`)},[x,S]),m=p(()=>{const t=(e,o)=>e<o?c==="ascending"?-1:1:e>o?c==="ascending"?1:-1:0;return[...w].sort((e,o)=>{const a=e.node,s=o.node;switch(h){case"entity":return t(n(a.entity_ref).name,n(s.entity_ref).name);case"justification":return t(a.justification??"",s.justification??"");case"user":return t(n(a.user_ref).name,n(s.user_ref).name);case"date":return t(a.timestamp,s.timestamp);default:return 0}})},[w,h,c]),b=U(D),C=p(()=>{const t=new Map;for(const{node:e}of m){const o=b.forEntity(e.entity_ref)?.snapshot?.primaryTitle;o&&t.set(e.entity_ref,o)}return t},[m,b]),k=p(()=>{if(!g?.length)return m;const t=g.toLowerCase().trim();return m.filter(({node:e})=>C.get(e.entity_ref)?.toLowerCase().includes(t))},[m,g,C]),L=y>j,{paginatedItems:A,paginationProps:r}=Y({pageParam:"perPage",defaultPageSize:j,items:k});return z?i(ie,{}):B?i(_,{title:"Exemptions failed",body:"Failed to load exemptions."}):!w.length||!k.length?i(_,{title:"No check exemptions found",body:"There are no check exemptions found."}):l(I,{children:[l(F,{onSortChange:({direction:t,column:e})=>{E(e),R(t)},sortDescriptor:{direction:c,column:h},children:[l(H,{children:[i(f,{id:"entity",allowsSorting:!0,isRowHeader:!0,style:{width:"35%"},children:"Entity"}),i(f,{id:"justification",style:{width:"40%"},children:"Justification"}),i(f,{id:"user",allowsSorting:!0,style:{width:"15%"},children:"User"}),i(f,{id:"date",allowsSorting:!0,style:{width:"10%"},children:"Date"})]}),i(M,{children:A.map(t=>{const e=t.node,o=ee(e.timestamp),a=n(e.user_ref),s=n(e.entity_ref);return l(O,{onAction:()=>N(e.entity_ref),children:[i(P,{title:s.name}),i(te,{children:l(J,{children:[i(V,{variant:"tertiary",className:v.justificationCell,children:e.justification}),i(q,{children:e.justification})]})}),i(P,{title:a.name}),i(P,{title:o})]},`${e.entity_ref}-${e.check_id}`)})})]}),L&&i(G,{totalCount:y,offset:r.offset,hasNextPage:r.offset+r.pageSize<y,hasPreviousPage:r.offset>0,onNextPage:r.onNextPage,onPreviousPage:r.onPreviousPage,onPageSizeChange:r.onPageSizeChange,pageSize:r.pageSize})]})};export{re as ExemptionsTableBUI};
2
2
  //# sourceMappingURL=ExemptionsTableBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as o,Fragment as m}from"react/jsx-runtime";import{useRouteRef as h}from"@backstage/core-plugin-api";import{Grid as u,Link as b,Card as y,CardHeader as R,Text as n,CardBody as x,Box as B,HeaderPage as L,Container as N}from"@backstage/ui";import{makeStyles as T}from"@material-ui/core/styles";import{groupBy as P}from"lodash";import{useMemo as f,useEffect as v}from"react";import{useCheckTemplates as H}from"../../hooks/checks/useCheckTemplates.esm.js";import{useLCPReporting as I}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as j}from"../../hooks/useLoadTimeReporting.esm.js";import{checkCreateRouteRef as D,checksPageRouteRef as U}from"../../routes.esm.js";import{DocLinkButton as A}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as E}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import{LoadingIndicator as M}from"../LoadingIndicator/LoadingIndicator.esm.js";import{TemplateCategoryBUI as S}from"./TemplateCategoryBUI.esm.js";const F=T(()=>({container:{marginBottom:"var(--bui-space-12)"},link:{"&:hover":{textDecoration:"none"}},fullHeightCard:{height:"100%",display:"flex",flexDirection:"column"}})),G=()=>{const r=F(),l=f(()=>({routeName:"soundcheck-check-templates"}),[]),{reportContentLoaded:s}=j(l),{reporter:g}=I(l),k=h(D),{data:c,isLoading:i}=H(),p=f(()=>P(c??[],"category"),[c]),d=g?.getLCPValue();v(()=>{i||s({lcp:d})},[i,s,d]);const C=h(U);let t;return i?t=e(M,{}):c?.length?t=o(m,{children:[e(u.Root,{columns:"5",gap:"3",mb:"6",children:e(b,{href:k(),className:r.link,children:o(y,{className:r.fullHeightCard,children:[e(R,{children:e(n,{variant:"body-large",style:{fontWeight:"bold"},children:"Custom Check"})}),e(x,{children:e(n,{children:"Create a custom check using the facts collected about your entities."})})]})})}),Object.keys(p).sort().map(a=>o(m,{children:[e(B,{mb:"3",children:e(n,{variant:"title-x-small",children:a})}),e(u.Root,{columns:"5",gap:"3",mb:"6",children:e(S,{templates:p[a]},a)})]}))]}):t=e(E,{title:"No check templates",body:"No check templates found."}),o(m,{children:[e(L,{title:"Check Templates",breadcrumbs:[{label:"All Checks",href:C()}],customActions:e(A,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),e(N,{className:r.container,children:t})]})};export{G as CheckTemplatesPageBUI};
1
+ import{jsx as e,jsxs as o,Fragment as m}from"react/jsx-runtime";import{useRouteRef as h}from"@backstage/core-plugin-api";import{Grid as u,Link as b,Card as y,CardHeader as R,Text as n,CardBody as x,Box as B,HeaderPage as L,Container as N}from"@backstage/ui";import{makeStyles as T}from"@material-ui/core/styles";import{groupBy as P}from"lodash";import{useMemo as f,useEffect as H}from"react";import{useCheckTemplates as I}from"../../hooks/checks/useCheckTemplates.esm.js";import{useLCPReporting as j}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as v}from"../../hooks/useLoadTimeReporting.esm.js";import{checkCreateRouteRef as D,checksPageRouteRef as U}from"../../routes.esm.js";import{DocLinkButton as A}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as E}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import{LoadingIndicator as M}from"../LoadingIndicator/LoadingIndicator.esm.js";import{TemplateCategoryBUI as S}from"./TemplateCategoryBUI.esm.js";const F=T(()=>({container:{marginBottom:"var(--bui-space-12)"},link:{textDecoration:"none"},fullHeightCard:{height:"100%",display:"flex",flexDirection:"column"}})),G=()=>{const r=F(),l=f(()=>({routeName:"soundcheck-check-templates"}),[]),{reportContentLoaded:s}=v(l),{reporter:g}=j(l),k=h(D),{data:c,isLoading:i}=I(),p=f(()=>P(c??[],"category"),[c]),d=g?.getLCPValue();H(()=>{i||s({lcp:d})},[i,s,d]);const C=h(U);let t;return i?t=e(M,{}):c?.length?t=o(m,{children:[e(u.Root,{columns:"5",gap:"3",mb:"6",children:e(b,{href:k(),className:r.link,children:o(y,{className:r.fullHeightCard,children:[e(R,{children:e(n,{variant:"body-large",style:{fontWeight:"bold"},children:"Custom Check"})}),e(x,{children:e(n,{children:"Create a custom check using the facts collected about your entities."})})]})})}),Object.keys(p).sort().map(a=>o(m,{children:[e(B,{mb:"3",children:e(n,{variant:"title-x-small",children:a})}),e(u.Root,{columns:"5",gap:"3",mb:"6",children:e(S,{templates:p[a]},a)})]}))]}):t=e(E,{title:"No check templates",body:"No check templates found."}),o(m,{children:[e(L,{title:"Check Templates",breadcrumbs:[{label:"All Checks",href:C()}],customActions:e(A,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),e(N,{className:r.container,children:t})]})};export{G as CheckTemplatesPageBUI};
2
2
  //# sourceMappingURL=CheckTemplatesPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,Fragment as a,jsxs as m}from"react/jsx-runtime";import{useRouteRef as n}from"@backstage/core-plugin-api";import{Link as d,Card as c,CardHeader as s,Text as i,CardBody as h}from"@backstage/ui";import{makeStyles as f}from"@material-ui/core/styles";import{sortBy as p}from"lodash";import{checkCreateRouteRef as u}from"../../routes.esm.js";const y=f(()=>({link:{"&:hover":{textDecoration:"none"}},fullHeightCard:{height:"100%",display:"flex",flexDirection:"column"}})),g=({templates:o})=>{const t=y(),l=n(u);return e(a,{children:p(o,"title").map(r=>e(d,{href:`${l()}?template=${r.id}`,className:t.link,children:m(c,{className:t.fullHeightCard,children:[e(s,{children:e(i,{variant:"body-large",style:{fontWeight:"bold"},children:r.title})}),e(h,{children:e(i,{children:r.summary})})]})},r.id))})};export{g as TemplateCategoryBUI};
1
+ import{jsx as e,Fragment as a,jsxs as m}from"react/jsx-runtime";import{useRouteRef as n}from"@backstage/core-plugin-api";import{Link as d,Card as c,CardHeader as s,Text as i,CardBody as f}from"@backstage/ui";import{makeStyles as h}from"@material-ui/core/styles";import{sortBy as p}from"lodash";import{checkCreateRouteRef as u}from"../../routes.esm.js";const y=h(()=>({link:{textDecoration:"none"},fullHeightCard:{height:"100%",display:"flex",flexDirection:"column"}})),g=({templates:o})=>{const t=y(),l=n(u);return e(a,{children:p(o,"title").map(r=>e(d,{href:`${l()}?template=${r.id}`,className:t.link,children:m(c,{className:t.fullHeightCard,children:[e(s,{children:e(i,{variant:"body-large",style:{fontWeight:"bold"},children:r.title})}),e(f,{children:e(i,{children:r.summary})})]})},r.id))})};export{g as TemplateCategoryBUI};
2
2
  //# sourceMappingURL=TemplateCategoryBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as m,Fragment as K}from"react/jsx-runtime";import{useRouteRef as x,useApi as A}from"@backstage/core-plugin-api";import{entityPresentationApiRef as W}from"@backstage/plugin-catalog-react";import{usePermission as Y}from"@backstage/plugin-permission-react";import{HeaderPage as _,Flex as q,Container as Q,Table as X,TableHeader as Z,Column as g,TableBody as $,TablePagination as ee}from"@backstage/ui";import{makeStyles as te}from"@material-ui/core";import{soundcheckCheckCreatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as oe,isEmpty as y}from"lodash";import{useState as w,useMemo as T}from"react";import{useSearchParams as ie}from"react-router-dom";import ne from"react-use/lib/useDebounce";import{soundcheckApiRef as ae}from"../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as me}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as se}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useProfileImages as ce}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportChecks as pe}from"../../hooks/checks/useImportChecks.esm.js";import{useSearchNameOwner as le}from"../../hooks/useSearchNameOwner.esm.js";import{checkTemplatesRouteRef as de,checkDetailsRouteRef as fe}from"../../routes.esm.js";import{exportChecks as he}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ue}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{EmptyStateNoChecks as ge}from"../EmptyState/EmptyStateNoChecks.esm.js";import{ImportExportPanelBUI as ye}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import"../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{ListPageCustomActions as we}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as ke}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useCheckActions as Re}from"../Menus/useCheckActions.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as Pe}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const L=10,Ce=["name","owner"],Se=({check:o,profileImageMap:n})=>{const s=x(fe),i=Re(o);return t(Pe,{ownerEntityRef:o.ownerEntityRef??"",href:s({checkId:o.id}),profileImageSrc:n[o.ownerEntityRef??""],menuActions:i,name:o.name??o.id,description:o.description??"",cells:[]})},Ee=te(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Ie=()=>{const o=Ee(),[n,s]=ie(),[i,B]=w(()=>n.get("search")??""),[l,N]=w(()=>n.get("sortDirection")==="descending"?"descending":"ascending"),[a,U]=w(()=>{const e=n.get("sort");return e&&Ce.includes(e)?e:""}),{isLoading:c,data:k}=me({}),d=T(()=>k?.edges?.map(e=>e.node)??[],[k?.edges]),{loading:R,allowed:P}=Y({permission:re}),D=x(de),{profileImageMap:H}=ce(d.filter(e=>e.ownerEntityRef).map(e=>e.ownerEntityRef)),C=A(W),f=le(d,i),S=T(()=>{if(!a)return f;const e=oe(f,r=>a==="owner"?r.ownerEntityRef?C.forEntity(r.ownerEntityRef).snapshot.primaryTitle:-1:a==="type"?r.type?r.type:"default":r?.name?.toLowerCase()??r.id.toLowerCase());return l==="descending"&&e.reverse(),e},[a,f,l,C]),{mutateAsync:M}=pe(),O=async e=>M(e),v=A(ae),F=async()=>{const e=await v.getChecks({orderAlphabetical:"asc"});return he(e.edges.map(r=>r.node))},{paginatedItems:h,reset:E,paginationProps:V}=se({pageParam:"perPage",defaultPageSize:L,items:S});ne(()=>{E();const e=new URLSearchParams(n.toString());i?e.set("search",i):e.delete("search"),s(e,{replace:!0})},300,[i]);const j=({direction:e,column:r})=>{const u=String(r);U(u),N(e),E();const p=new URLSearchParams(n);u?p.set("sort",u):p.delete("sort"),p.set("sortDirection",e),s(p,{replace:!0})},G=c,I=!c&&y(h),z=!c&&!y(h),J=S.length>L;let b=null;return I&&(b=i?t(ue,{title:"No checks found",body:"Your current search term did not return any checks. Please try a different search term."}):t(ge,{})),m(K,{children:[t(_,{customActions:m(q,{gap:"2",align:"center",children:[t(ye,{resourceType:"check",disableImport:!R&&!P,disableExport:c||y(d),onImport:O,onExport:F}),t(we,{searchValue:i,setSearchValue:B,canCreate:!R&&P,createHref:D()})]}),title:"Checks"}),m(Q,{className:o.container,children:[G&&t(ke,{rowCount:10}),I&&b,z&&m(X,{onSortChange:j,sortDescriptor:{direction:l,column:a},children:[m(Z,{children:[t(g,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"82%"},children:"Name"}),t(g,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Check Owner"}),t(g,{id:"actions",style:{width:"3%"}})]}),t($,{children:h.map(e=>t(Se,{check:e,profileImageMap:H??{}},e.id))})]}),J&&t(ee,{...V})]})]})};export{Ie as ChecksListPageBUI};
1
+ import{jsx as t,jsxs as m,Fragment as W}from"react/jsx-runtime";import{useRouteRef as T,useApi as A}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Y}from"@backstage/plugin-catalog-react";import{usePermission as _}from"@backstage/plugin-permission-react";import{HeaderPage as q,Flex as K,Container as Q,TableRoot as X,TableHeader as Z,Column as y,TableBody as $,TablePagination as ee}from"@backstage/ui";import{makeStyles as te}from"@material-ui/core";import{soundcheckCheckCreatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as oe,isEmpty as P}from"lodash";import{useState as k,useMemo as N}from"react";import{useSearchParams as ie}from"react-router-dom";import ne from"react-use/lib/useDebounce";import{soundcheckApiRef as ae}from"../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as se}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as me}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useProfileImages as ce}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportChecks as pe}from"../../hooks/checks/useImportChecks.esm.js";import{useSearchNameOwner as le}from"../../hooks/useSearchNameOwner.esm.js";import{checkTemplatesRouteRef as fe,checkDetailsRouteRef as de}from"../../routes.esm.js";import{exportChecks as ge}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as he}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{EmptyStateNoChecks as ue}from"../EmptyState/EmptyStateNoChecks.esm.js";import{ImportExportPanelBUI as we}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import"../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{ListPageCustomActions as ye}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as Pe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useCheckActions as ke}from"../Menus/useCheckActions.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignPage/CampaignActionsContext.esm.js";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as Ce}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const L=10,Re=["name","owner"],Se=({check:o,profileImageMap:a})=>{const c=T(de),i=ke(o);return t(Ce,{ownerEntityRef:o.ownerEntityRef??"",href:c({checkId:o.id}),profileImageSrc:a[o.ownerEntityRef??""],menuActions:i,name:o.name??o.id,description:o.description??"",cells:[]})},Ee=te(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Ie=()=>{const o=Ee(),[a,c]=ie(),[i,z]=k(()=>a.get("search")??""),[d,B]=k(()=>a.get("sortDirection")==="descending"?"descending":"ascending"),[s,v]=k(()=>{const e=a.get("sort");return e&&Re.includes(e)?e:""}),{isLoading:p,data:C}=se({}),g=N(()=>C?.edges?.map(e=>e.node)??[],[C?.edges]),{loading:R,allowed:S}=_({permission:re}),U=T(fe),{profileImageMap:D}=ce(g.filter(e=>e.ownerEntityRef).map(e=>e.ownerEntityRef)),E=A(Y),h=le(g,i),l=N(()=>{if(!s)return h;const e=oe(h,r=>s==="owner"?r.ownerEntityRef?E.forEntity(r.ownerEntityRef).snapshot.primaryTitle:-1:s==="type"?r.type?r.type:"default":r?.name?.toLowerCase()??r.id.toLowerCase());return d==="descending"&&e.reverse(),e},[s,h,d,E]),{mutateAsync:H}=pe(),M=async e=>H(e),O=A(ae),F=async()=>{const e=await O.getChecks({orderAlphabetical:"asc"});return ge(e.edges.map(r=>r.node))},{paginatedItems:u,reset:I,paginationProps:n}=me({pageParam:"perPage",defaultPageSize:L,items:l});ne(()=>{I();const e=new URLSearchParams(a.toString());i?e.set("search",i):e.delete("search"),c(e,{replace:!0})},300,[i]);const V=({direction:e,column:r})=>{const w=String(r);v(w),B(e),I();const f=new URLSearchParams(a);w?f.set("sort",w):f.delete("sort"),f.set("sortDirection",e),c(f,{replace:!0})},j=p,b=!p&&P(u),G=!p&&!P(u),J=l.length>L;let x=null;return b&&(x=i?t(he,{title:"No checks found",body:"Your current search term did not return any checks. Please try a different search term."}):t(ue,{})),m(W,{children:[t(q,{customActions:m(K,{gap:"2",align:"center",children:[t(we,{resourceType:"check",disableImport:!R&&!S,disableExport:p||P(g),onImport:M,onExport:F}),t(ye,{searchValue:i,setSearchValue:z,canCreate:!R&&S,createHref:U()})]}),title:"Checks"}),m(Q,{className:o.container,children:[j&&t(Pe,{rowCount:10}),b&&x,G&&m(X,{onSortChange:V,sortDescriptor:{direction:d,column:s},children:[m(Z,{children:[t(y,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"82%"},children:"Name"}),t(y,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Check Owner"}),t(y,{id:"actions",style:{width:"3%"}})]}),t($,{children:u.map(e=>t(Se,{check:e,profileImageMap:D??{}},e.id))})]}),J&&t(ee,{totalCount:l.length,offset:n.offset,hasNextPage:n.offset+n.pageSize<(l.length??0),hasPreviousPage:n.offset>0,onNextPage:n.onNextPage,onPreviousPage:n.onPreviousPage,onPageSizeChange:n.onPageSizeChange,pageSize:n.pageSize})]})]})};export{Ie as ChecksListPageBUI};
2
2
  //# sourceMappingURL=ChecksListPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as m,Fragment as j}from"react/jsx-runtime";import{useRouteRef as A}from"@backstage/core-plugin-api";import{Row as F,CellText as v,Flex as H,Box as w,Text as O,Table as z,TableHeader as M,Column as C,TableBody as V,TablePagination as W}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{sortBy as J}from"lodash";import{memo as x,useMemo as k,useState as I,useEffect as K,useCallback as Q}from"react";import{CircularProgressbar as X}from"react-circular-progressbar";import{useNavigate as Y}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{usePagination as Z}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as _}from"../../hooks/useSortSearchParams.esm.js";import{trackCheckDetailsRouteRef as ee}from"../../routes.esm.js";import{getPercentage as B}from"../../utils/formatters.esm.js";import"../CheckStatusBar/CheckStatusBar.esm.js";import{CheckStatusBarBUI as re}from"../CheckStatusBar/CheckStatusBarBUI.esm.js";import{CustomCell as te}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ie}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";const oe=q(()=>({statusBar:{width:"45%"},customCell:{padding:"0 var(--bui-space-3)"},circularProgressbar:{width:"var(--bui-space-7)"}})),T=10,se=["compliance","name","checks"],b=i=>se.includes(i),ce=x(()=>r("svg",{width:"0",height:"0",style:{position:"absolute",visibility:"hidden"},children:r("defs",{children:m("linearGradient",{id:"progressGradient",x1:"1",y1:"0",x2:"0",y2:"1",children:[r("stop",{offset:"0%",stopColor:"var(--bui-fg-warning)"}),r("stop",{offset:"100%",stopColor:"var(--bui-fg-success)"})]})})})),D=(i,o)=>o?.find(p=>p.id===i),R=i=>i?i.numberOfEntities-i.notApplicable-i.exempt:0,ne=x(({trackId:i,check:o,checkStatuses:p,searchParams:h})=>{const s=oe(),f=A(ee),c=Y(),n=D(o.id,p),{passPercent:a,applicableChecks:u}=k(()=>{const l=R(n);return{passPercent:B(n?.passed,l),applicableChecks:l}},[n]);return m(F,{onAction:()=>{const l=f({trackId:i,checkId:o.id});c(h?`${l}${h}`:l)},children:[r(v,{leadingIcon:m("div",{className:s.circularProgressbar,title:`${a}%`,children:[r(ce,{}),r(X,{value:a,strokeWidth:12,styles:{path:{stroke:"url(#progressGradient)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})]}),title:`${a}%`}),r(v,{title:o.name}),r(te,{children:m(H,{align:"center",gap:"3",justify:"between",children:[r(w,{children:m(O,{color:"secondary",children:[n?.passed??0," of ",u," checks passing"]})}),r(w,{className:s.statusBar,children:r(re,{status:n})})]})})]},o.id)}),ae=({trackId:i,checks:o,checkStatuses:p,searchValue:h,levelOrdinal:s})=>{const{updateSortParams:f,searchParams:c}=_(),n=c.get("level"),a=s===void 0||n!==null&&String(s)===n,[u,l]=I(()=>{if(a){const e=c.get("sortDirection");if(e==="ascending"||e==="descending")return e}return"descending"}),[g,y]=I(()=>{if(a){const e=c.get("sort");if(e&&b(e))return e}return"compliance"}),N=k(()=>{const e=new URLSearchParams(c.toString());e.set("sort",g),e.set("sortDirection",u),typeof s=="number"?e.set("level",String(s)):e.delete("level");const t=e.toString();return t?`?${t}`:""},[s,c,g,u]);K(()=>{if(!a)return;const e=c.get("sortDirection");(e==="ascending"||e==="descending")&&l(e);const t=c.get("sort");t&&b(t)&&y(t)},[a,c]);const L=Q(({direction:e,column:t})=>{const d=String(t);b(d)&&y(d),l(e),f({sort:b(d)?d:"compliance",sortDirection:e,level:s})},[s,f]),P=k(()=>{if(!h?.length)return o??[];const e=h.toLowerCase();return o?.filter(({name:t})=>t.toLowerCase().includes(e))??[]},[o,h]),S=k(()=>{const e=J([...P],t=>{const d=D(t.id,p);if(g==="compliance"){const U=R(d);return B(d?.passed,U)}return g==="checks"?d?.passed:t.name.toLowerCase()});return u==="descending"&&e.reverse(),e},[P,p,g,u]),{paginatedItems:$,paginationProps:E}=Z({pageParam:"perPage",defaultPageSize:T,items:S}),G=S.length>T;return S?.length?m(j,{children:[m(z,{onSortChange:L,sortDescriptor:{direction:u,column:g},children:[m(M,{children:[r(C,{id:"compliance",allowsSorting:!0,style:{width:"8%"},children:"Compliance"}),r(C,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"67%"},children:"Name"}),r(C,{id:"checks",allowsSorting:!0,style:{width:"25%"},children:"Checks"})]}),r(V,{children:$.map(e=>r(ne,{trackId:i,check:e,checkStatuses:p,searchParams:N},e.id))})]}),G&&r(W,{...E})]}):r(ie,{title:"No checks",body:"There are no checks found."})};export{ae as ChecksTable};
1
+ import{jsx as t,jsxs as p,Fragment as j}from"react/jsx-runtime";import{useRouteRef as A}from"@backstage/core-plugin-api";import{Row as U,CellText as y,Flex as F,Box as x,Text as H,TableRoot as O,TableHeader as M,Column as C,TableBody as V,TablePagination as W}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{sortBy as J}from"lodash";import{memo as I,useMemo as S,useState as N,useEffect as K,useCallback as Q}from"react";import{CircularProgressbar as X}from"react-circular-progressbar";import{useNavigate as Y}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{usePagination as Z}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as _}from"../../hooks/useSortSearchParams.esm.js";import{trackCheckDetailsRouteRef as ee}from"../../routes.esm.js";import{getPercentage as B}from"../../utils/formatters.esm.js";import"../CheckStatusBar/CheckStatusBar.esm.js";import{CheckStatusBarBUI as te}from"../CheckStatusBar/CheckStatusBarBUI.esm.js";import{CustomCell as re}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as oe}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";const ie=q(()=>({statusBar:{width:"45%"},customCell:{padding:"0 var(--bui-space-3)"},circularProgressbar:{width:"var(--bui-space-7)"}})),R=10,se=["compliance","name","checks"],b=o=>se.includes(o),ae=I(()=>t("svg",{width:"0",height:"0",style:{position:"absolute",visibility:"hidden"},children:t("defs",{children:p("linearGradient",{id:"progressGradient",x1:"1",y1:"0",x2:"0",y2:"1",children:[t("stop",{offset:"0%",stopColor:"var(--bui-fg-warning)"}),t("stop",{offset:"100%",stopColor:"var(--bui-fg-success)"})]})})})),T=(o,i)=>i?.find(g=>g.id===o),z=o=>o?o.numberOfEntities-o.notApplicable-o.exempt:0,ne=I(({trackId:o,check:i,checkStatuses:g,searchParams:u})=>{const s=ie(),P=A(ee),a=Y(),n=T(i.id,g),{passPercent:c,applicableChecks:h}=S(()=>{const l=z(n);return{passPercent:B(n?.passed,l),applicableChecks:l}},[n]);return p(U,{onAction:()=>{const l=P({trackId:o,checkId:i.id});a(u?`${l}${u}`:l)},children:[t(y,{leadingIcon:p("div",{className:s.circularProgressbar,title:`${c}%`,children:[t(ae,{}),t(X,{value:c,strokeWidth:12,styles:{path:{stroke:"url(#progressGradient)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})]}),title:`${c}%`}),t(y,{title:i.name}),t(re,{children:p(F,{align:"center",gap:"3",justify:"between",children:[t(x,{children:p(H,{color:"secondary",children:[n?.passed??0," of ",h," checks passing"]})}),t(x,{className:s.statusBar,children:t(te,{status:n})})]})})]},i.id)}),ce=({trackId:o,checks:i,checkStatuses:g,searchValue:u,levelOrdinal:s})=>{const{updateSortParams:P,searchParams:a}=_(),n=a.get("level"),c=s===void 0||n!==null&&String(s)===n,[h,l]=N(()=>{if(c){const e=a.get("sortDirection");if(e==="ascending"||e==="descending")return e}return"descending"}),[f,v]=N(()=>{if(c){const e=a.get("sort");if(e&&b(e))return e}return"compliance"}),D=S(()=>{const e=new URLSearchParams(a.toString());e.set("sort",f),e.set("sortDirection",h),typeof s=="number"?e.set("level",String(s)):e.delete("level");const r=e.toString();return r?`?${r}`:""},[s,a,f,h]);K(()=>{if(!c)return;const e=a.get("sortDirection");(e==="ascending"||e==="descending")&&l(e);const r=a.get("sort");r&&b(r)&&v(r)},[c,a]);const L=Q(({direction:e,column:r})=>{const m=String(r);b(m)&&v(m),l(e),P({sort:b(m)?m:"compliance",sortDirection:e,level:s})},[s,P]),w=S(()=>{if(!u?.length)return i??[];const e=u.toLowerCase();return i?.filter(({name:r})=>r.toLowerCase().includes(e))??[]},[i,u]),k=S(()=>{const e=J([...w],r=>{const m=T(r.id,g);if(f==="compliance"){const G=z(m);return B(m?.passed,G)}return f==="checks"?m?.passed:r.name.toLowerCase()});return h==="descending"&&e.reverse(),e},[w,g,f,h]),{paginatedItems:$,paginationProps:d}=Z({pageParam:"perPage",defaultPageSize:R,items:k}),E=k.length>R;return k?.length?p(j,{children:[p(O,{onSortChange:L,sortDescriptor:{direction:h,column:f},children:[p(M,{children:[t(C,{id:"compliance",allowsSorting:!0,style:{width:"8%"},children:"Compliance"}),t(C,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"67%"},children:"Name"}),t(C,{id:"checks",allowsSorting:!0,style:{width:"25%"},children:"Checks"})]}),t(V,{children:$.map(e=>t(ne,{trackId:o,check:e,checkStatuses:g,searchParams:D},e.id))})]}),E&&t(W,{totalCount:k.length,offset:d.offset,hasNextPage:d.offset+d.pageSize<(k.length??0),hasPreviousPage:d.offset>0,onNextPage:d.onNextPage,onPreviousPage:d.onPreviousPage,onPageSizeChange:d.onPageSizeChange,pageSize:d.pageSize})]}):t(oe,{title:"No checks",body:"There are no checks found."})};export{ce as ChecksTable};
2
2
  //# sourceMappingURL=ChecksTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as i}from"react/jsx-runtime";import{Table as b,TableHeader as C,Row as s,Column as n,TableBody as g,CellText as f,Box as a,Text as d}from"@backstage/ui";import{makeStyles as v}from"@material-ui/core";import{isEmpty as x}from"lodash";import{getCronDescription as N}from"../../utils/cron.esm.js";import{CustomCell as p}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as T}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{FactExplorerDialogButtonBUI as F}from"../FactExplorer/FactExplorerDialogBUI.esm.js";const B=v(()=>({noConfig:{color:"var(--bui-fg-disabled)"}})),S=({frequency:e})=>{if(e){let o;return e.cron?o=r(a,{children:i(d,{variant:"body-small",children:["cron(",e.cron,") ",N(e.cron)]})}):o=r(a,{children:i(d,{variant:"body-small",color:"secondary",children:["Every ",Object.values(e)[0]," ",Object.keys(e)[0]]})}),r(a,{pt:"1",pb:"1",children:o})}return r(d,{color:"secondary",children:"No Schedule Configured"})},q=({facts:e})=>{const o=B(),u=(l,t)=>l?t?"UI":"YAML":"No Config";return x(e)?r(T,{title:"No Available Facts Found",body:"No Available Facts Found for Integration."}):i(b,{children:[r(C,{children:i(s,{children:[r(n,{id:"fact-name",allowsSorting:!0,isRowHeader:!0,style:{width:"35%"},children:"Fact Name"}),r(n,{children:"Source"}),r(n,{children:"Schedule"}),r(n,{children:"Test"})]})}),r(g,{children:e.map(({factName:l,config:t,uiConfig:h,factRef:m,parentConfig:c})=>{const y=t?.frequency??(Array.isArray(c)?c[0]?.frequency:c?.frequency);return i(s,{children:[r(f,{title:l}),r(f,{className:t?void 0:o.noConfig,title:u(t,h)}),r(p,{children:r(S,{frequency:y})}),r(p,{children:r(F,{factRef:m,size:"small",text:"Test",variant:"secondary"})})]},m)})})]})};export{q as CollectorFactTableBUI};
1
+ import{jsx as r,jsxs as i}from"react/jsx-runtime";import{TableRoot as b,TableHeader as C,Row as s,Column as n,TableBody as g,CellText as f,Box as a,Text as d}from"@backstage/ui";import{makeStyles as v}from"@material-ui/core";import{isEmpty as x}from"lodash";import{getCronDescription as N}from"../../utils/cron.esm.js";import{CustomCell as p}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as T}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{FactExplorerDialogButtonBUI as F}from"../FactExplorer/FactExplorerDialogBUI.esm.js";const S=v(()=>({noConfig:{color:"var(--bui-fg-disabled)"}})),B=({frequency:o})=>{if(o){let e;return o.cron?e=r(a,{children:i(d,{variant:"body-small",children:["cron(",o.cron,") ",N(o.cron)]})}):e=r(a,{children:i(d,{variant:"body-small",color:"secondary",children:["Every ",Object.values(o)[0]," ",Object.keys(o)[0]]})}),r(a,{pt:"1",pb:"1",children:e})}return r(d,{color:"secondary",children:"No Schedule Configured"})},q=({facts:o})=>{const e=S(),u=(l,t)=>l?t?"UI":"YAML":"No Config";return x(o)?r(T,{title:"No Available Facts Found",body:"No Available Facts Found for Integration."}):i(b,{children:[r(C,{children:i(s,{children:[r(n,{id:"fact-name",allowsSorting:!0,isRowHeader:!0,style:{width:"35%"},children:"Fact Name"}),r(n,{children:"Source"}),r(n,{children:"Schedule"}),r(n,{children:"Test"})]})}),r(g,{children:o.map(({factName:l,config:t,uiConfig:h,factRef:m,parentConfig:c})=>{const y=t?.frequency??(Array.isArray(c)?c[0]?.frequency:c?.frequency);return i(s,{children:[r(f,{title:l}),r(f,{className:t?void 0:e.noConfig,title:u(t,h)}),r(p,{children:r(B,{frequency:y})}),r(p,{children:r(F,{factRef:m,size:"small",text:"Test",variant:"secondary"})})]},m)})})]})};export{q as CollectorFactTableBUI};
2
2
  //# sourceMappingURL=CollectorFactTableBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as c,jsx as l,Fragment as G}from"react/jsx-runtime";import{makeStyles as P,FormControlLabel as L,Checkbox as O,Box as W,Typography as x,Divider as q,Tabs as E,Tab as p,Grid as g,Button as F}from"@material-ui/core";import H from"@material-ui/icons/Add";import J from"@material-ui/icons/Remove";import{useState as K}from"react";import{useFormContext as M,useFieldArray as Q,useWatch as U,Controller as N}from"react-hook-form";import{validateCacheConfig as V}from"../../../../utils/collectors.esm.js";import"lodash";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{CacheConfigComponent as X}from"../../../CacheConfig/CacheConfigComponent.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import{FilterComponent as Y}from"../../../Filter/FilterComponent.esm.js";import{CollectorSchedulingOptions as Z}from"./CollectorSchedulingOptions.esm.js";const _=P(e=>({root:{padding:e.spacing(1.5,6)},tabsContainer:{marginRight:16},tab:{height:"64px",textAlign:"left"},contentContainer:{width:"100%",padding:e.spacing(1)},divider:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},checkBox:{marginRight:e.spacing(1)},buttonsContainer:{marginTop:e.spacing(1),marginBottom:e.spacing(2)}})),f="FactDetails",C="Schedule",y="Filters",S="Caching",ee=({name:e,label:u,description:k,disabled:s,FactDetailsComponent:d,multipleCollectors:r})=>{const{control:m,formState:D}=M(),v=D.errors?.[e],{fields:B,insert:T,remove:A}=Q({control:m,name:r?.enable?`${e}.collectors`:e}),h=r?.enable?B:[{id:e}],$=d?f:C,[o,b]=K(Array(h.length).fill($)),z=(t,i,a)=>{b([...o.slice(0,a),i,...o.slice(a+1)])},R=t=>{T(t+1,r?.defaultConfig),b([...o.slice(0,t+1),$,...o.slice(t+1)])},j=t=>{A(t),b([...o.slice(0,t),...o.slice(t+1)])},I=U({control:m,name:`${e}.enabled`}),n=_();return c("div",{className:n.root,children:[l(N,{name:`${e}.enabled`,control:m,render:({field:t})=>l(L,{control:l(O,{...t,checked:t.value,"data-testid":`${e}-switch`,disabled:s,className:n.checkBox}),label:c(W,{display:"flex",flexDirection:"column",children:[l(x,{variant:"body1",component:"span",children:l("b",{children:`${u}`})}),l(x,{variant:"caption",color:"textSecondary",component:"p",children:`${k}`})]})})}),I&&l("div",{children:h.map((t,i)=>c("div",{children:[i!==0&&l(q,{className:n.divider}),c(E,{orientation:"horizontal",variant:"scrollable",value:o[i],onChange:(a,w)=>z(a,w,i),className:n.tabsContainer,children:[d&&l(p,{label:"Fact Details",value:f,className:n.tab}),l(p,{label:"Schedule",value:C,className:n.tab}),l(p,{label:"Filters",value:y,className:n.tab}),l(p,{label:"Caching",value:S,className:n.tab})]}),c("div",{className:n.contentContainer,children:[o[i]===f&&d&&l(d,{name:r?.enable?`${e}.collectors.${i}.factDetails`:`${e}.factDetails`,disabled:s}),o[i]===C&&l(G,{children:l(Z,{name:r?.enable?`${e}.collectors.${i}`:e})}),o[i]===y&&l(Y,{disabled:s,includeFilterName:r?.enable?`${e}.collectors.${i}.filters.include`:`${e}.filters.include`,excludeFilterName:r?.enable?`${e}.collectors.${i}.filters.exclude`:`${e}.filters.exclude`,errorPath:r?.enable?`${e}.collectors.${i}.filters`:`${e}.filters`}),o[i]===S&&l(N,{name:r?.enable?`${e}.collectors.${i}.cacheConfig`:`${e}.cacheConfig`,control:m,rules:{validate:V},render:({field:a})=>l(X,{disabled:s,value:a.value,onChange:a.onChange,errors:r?.enable?v?.collectors?.[i]?.cacheConfig:v?.cacheConfig})})]}),r?.enable&&c(g,{container:!0,spacing:1,className:n.buttonsContainer,children:[h.length>1&&l(g,{item:!0,children:l(F,{startIcon:l(J,{}),onClick:()=>j(i),disabled:s,variant:"outlined",size:"small",color:"secondary",children:"Remove"})}),l(g,{item:!0,children:c(F,{startIcon:l(H,{}),onClick:()=>R(i),disabled:s,variant:"outlined",size:"small",color:"primary",children:["Add ",u]})})]})]},t.id))})]})};export{ee as FactCollectionConfig};
1
+ import{jsxs as r,jsx as t,Fragment as ie}from"react/jsx-runtime";import{makeStyles as re,FormControlLabel as ce,Checkbox as se,Box as de,Typography as j,IconButton as w,Collapse as E,Divider as me,Tabs as pe,Tab as $,Grid as F,Button as L}from"@material-ui/core";import fe from"@material-ui/icons/Add";import ge from"@material-ui/icons/ChevronRight";import he from"@material-ui/icons/ExpandLess";import ue from"@material-ui/icons/ExpandMore";import be from"@material-ui/icons/KeyboardArrowDown";import Ce from"@material-ui/icons/Remove";import{useState as B,useRef as G,useEffect as H}from"react";import{useFormContext as ve,useFieldArray as $e,useWatch as O,Controller as P}from"react-hook-form";import{validateCacheConfig as xe}from"../../../../utils/collectors.esm.js";import"lodash";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{CacheConfigComponent as Ne}from"../../../CacheConfig/CacheConfigComponent.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import{FilterComponent as ye}from"../../../Filter/FilterComponent.esm.js";import{CollectorSchedulingOptions as Fe}from"./CollectorSchedulingOptions.esm.js";const Be=re(e=>({root:{padding:e.spacing(1.5,6)},headerContainer:{display:"flex",alignItems:"center",justifyContent:"space-between"},collapseButton:{marginLeft:e.spacing(1),padding:e.spacing(.5),backgroundColor:e.palette.grey[200],"&:hover":{backgroundColor:e.palette.grey[300]}},factCollapseButton:{marginLeft:e.spacing(1),padding:e.spacing(.25),border:`1px solid ${e.palette.grey[400]}`,borderRadius:4,"&:hover":{backgroundColor:e.palette.grey[100]}},factHeader:{display:"flex",alignItems:"center",justifyContent:"space-between"},tabsContainer:{marginRight:16},tab:{height:"64px",textAlign:"left"},contentContainer:{width:"100%",padding:e.spacing(1)},divider:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},checkBox:{marginRight:e.spacing(1)},buttonsContainer:{marginTop:e.spacing(1),marginBottom:e.spacing(2)}})),k="FactDetails",D="Schedule",W="Filters",q="Caching",J=(e,i,p)=>[...e.slice(0,i),p,...e.slice(i+1)],K=(e,i,p)=>[...e.slice(0,i),p,...e.slice(i)],M=(e,i)=>[...e.slice(0,i),...e.slice(i+1)],ke=({name:e,label:i,description:p,disabled:s,FactDetailsComponent:b,multipleCollectors:n,collapsed:S,onCollapsedChange:x,allFactsCollapsed:f})=>{const{control:g,formState:Q}=ve(),A=Q.errors?.[e],{fields:U,insert:X,remove:Y}=$e({control:g,name:n?.enable?`${e}.collectors`:e}),h=n?.enable?U:[{id:e}],R=b?k:D,[c,N]=B(Array(h.length).fill(R)),[y,u]=B(Array(h.length).fill(!0)),Z=a=>{u(l=>J(l,a,!l[a]))},T=G(void 0);H(()=>{f!==void 0&&f!==T.current&&u(a=>a.map(()=>f)),T.current=f},[f]);const[V,z]=B(!1),C=S!==void 0,v=C?S:V,_=()=>{const a=!v;C||z(a),x?.(a)},ee=(a,l,m)=>{N(J(c,m,l))},le=a=>{X(a+1,n?.defaultConfig),N(K(c,a+1,R)),u(l=>K(l,a+1,!1))},te=a=>{Y(a),N(M(c,a)),u(l=>M(l,a))},d=O({control:g,name:`${e}.enabled`}),ae=O({control:g,name:n?.enable?h.map((a,l)=>`${e}.collectors.${l}.factDetails.factName`):[`${e}.factDetails.factName`]}),oe=a=>ae?.[a]||"Fact Details",I=G(d);H(()=>{!I.current&&d&&(C?x?.(!1):z(!1),u(a=>a.map(()=>!1))),I.current=d},[d,C,x]);const o=Be();return r("div",{className:o.root,children:[r("div",{className:o.headerContainer,children:[t(P,{name:`${e}.enabled`,control:g,render:({field:a})=>t(ce,{control:t(se,{...a,checked:a.value,"data-testid":`${e}-switch`,disabled:s,className:o.checkBox}),label:r(de,{display:"flex",flexDirection:"column",children:[t(j,{variant:"body1",component:"span",children:t("b",{children:`${i}`})}),t(j,{variant:"caption",color:"textSecondary",component:"p",children:`${p}`})]})})}),d&&t(w,{className:o.collapseButton,onClick:_,"aria-label":v?"Expand":"Collapse","data-testid":`${e}-collapse-button`,size:"small",children:v?t(ue,{}):t(he,{})})]}),d&&t(E,{in:!v,children:t("div",{children:h.map((a,l)=>r("div",{children:[l!==0&&t(me,{className:o.divider}),r("div",{className:o.factHeader,children:[r(pe,{orientation:"horizontal",variant:"scrollable",value:c[l],onChange:(m,ne)=>ee(m,ne,l),className:o.tabsContainer,children:[b&&t($,{label:oe(l),value:k,className:o.tab}),t($,{label:"Schedule",value:D,className:o.tab}),t($,{label:"Filters",value:W,className:o.tab}),t($,{label:"Caching",value:q,className:o.tab})]}),t(w,{className:o.factCollapseButton,onClick:()=>Z(l),"aria-label":y[l]?"Expand fact":"Collapse fact","data-testid":`${e}-fact-${l}-collapse-button`,size:"small",children:y[l]?t(ge,{}):t(be,{})})]}),r(E,{in:!y[l],children:[r("div",{className:o.contentContainer,children:[c[l]===k&&b&&t(b,{name:n?.enable?`${e}.collectors.${l}.factDetails`:`${e}.factDetails`,disabled:s}),c[l]===D&&t(ie,{children:t(Fe,{name:n?.enable?`${e}.collectors.${l}`:e})}),c[l]===W&&t(ye,{disabled:s,includeFilterName:n?.enable?`${e}.collectors.${l}.filters.include`:`${e}.filters.include`,excludeFilterName:n?.enable?`${e}.collectors.${l}.filters.exclude`:`${e}.filters.exclude`,errorPath:n?.enable?`${e}.collectors.${l}.filters`:`${e}.filters`}),c[l]===q&&t(P,{name:n?.enable?`${e}.collectors.${l}.cacheConfig`:`${e}.cacheConfig`,control:g,rules:{validate:xe},render:({field:m})=>t(Ne,{disabled:s,value:m.value,onChange:m.onChange,errors:n?.enable?A?.collectors?.[l]?.cacheConfig:A?.cacheConfig})})]}),n?.enable&&r(F,{container:!0,spacing:1,className:o.buttonsContainer,children:[h.length>1&&t(F,{item:!0,children:t(L,{startIcon:t(Ce,{}),onClick:()=>te(l),disabled:s,variant:"outlined",size:"small",color:"secondary",children:"Remove"})}),t(F,{item:!0,children:r(L,{startIcon:t(fe,{}),onClick:()=>le(l),disabled:s,variant:"outlined",size:"small",color:"primary",children:["Add ",i]})})]})]})]},a.id))})})]})};export{ke as FactCollectionConfig};
2
2
  //# sourceMappingURL=FactCollectionConfig.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{AzureDevOpsConfigurator as i}from"./AzureDevOps/AzureDevOpsConfigurator.esm.js";import{BigQueryConfigurator as a}from"./BigQuery/BigQueryConfigurator.esm.js";import{CatalogConfigurator as m}from"./Catalog/CatalogConfigurator.esm.js";import{DataDogConfigurator as e}from"./DataDog/DataDogConfigurator.esm.js";import{DataRegistryConfigurator as f}from"./DataRegistry/DataRegistryConfigurator.esm.js";import{GithubConfigurator as u}from"./Github/GithubConfigurator.esm.js";import{GitlabConfigurator as g}from"./Gitlab/GitlabConfigurator.esm.js";import{HttpConfigurator as n}from"./HTTP/HttpConfigurator.esm.js";import{JiraConfigurator as p}from"./Jira/JiraConfigurator.esm.js";import{KubernetesConfigurator as C}from"./Kubernetes/KubernetesConfigurator.esm.js";import{NewRelicConfigurator as s}from"./NewRelic/NewRelicConfigurator.esm.js";import{PagerDutyConfigurator as c}from"./PagerDuty/PagerDutyConfigurator.esm.js";import{ScmConfigurator as l}from"./SCM/ScmConfigurator.esm.js";import{SonarQubeConfigurator as b}from"./SonarQube/SonarQubeConfigurator.esm.js";const d={github:u,gitlab:g,scm:l,pagerduty:c,datadog:e,kubernetes:C,jira:p,sonarqube:b,newrelic:s,bigquery:a,catalog:m,azure:i,http:n,"data-registry":f},y=({selectedCollector:r})=>{const o=d[r?.id];return t(o,{selectedCollector:r})};export{y as Configurator};
1
+ import{jsx as t}from"react/jsx-runtime";import{PageWarningMessage as i}from"../../PageWarningMessage/PageWarningMessage.esm.js";import{AzureDevOpsConfigurator as a}from"./AzureDevOps/AzureDevOpsConfigurator.esm.js";import{BigQueryConfigurator as e}from"./BigQuery/BigQueryConfigurator.esm.js";import{CatalogConfigurator as m}from"./Catalog/CatalogConfigurator.esm.js";import{DataDogConfigurator as n}from"./DataDog/DataDogConfigurator.esm.js";import{DataRegistryConfigurator as f}from"./DataRegistry/DataRegistryConfigurator.esm.js";import{GithubConfigurator as g}from"./Github/GithubConfigurator.esm.js";import{GitlabConfigurator as u}from"./Gitlab/GitlabConfigurator.esm.js";import{HttpConfigurator as p}from"./HTTP/HttpConfigurator.esm.js";import{JiraConfigurator as C}from"./Jira/JiraConfigurator.esm.js";import{KubernetesConfigurator as s}from"./Kubernetes/KubernetesConfigurator.esm.js";import{NewRelicConfigurator as c}from"./NewRelic/NewRelicConfigurator.esm.js";import{PagerDutyConfigurator as l}from"./PagerDuty/PagerDutyConfigurator.esm.js";import{ScmConfigurator as d}from"./SCM/ScmConfigurator.esm.js";import{SonarQubeConfigurator as b}from"./SonarQube/SonarQubeConfigurator.esm.js";const y={github:g,gitlab:u,scm:d,pagerduty:l,datadog:n,kubernetes:s,jira:C,sonarqube:b,newrelic:c,bigquery:e,catalog:m,azure:a,http:p,"data-registry":f},D=({selectedCollector:r})=>{const o=y[r?.id];return o?t(o,{selectedCollector:r}):t(i,{entityName:"Integration",entityId:r.id,showCannotEdit:!0})};export{D as Configurator};
2
2
  //# sourceMappingURL=Configurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as f,Fragment as v,jsx as o}from"react/jsx-runtime";import{zodResolver as y}from"@hookform/resolvers/zod";import{makeStyles as O,Paper as T,Divider as d}from"@material-ui/core";import{useCallback as L,useMemo as R}from"react";import{useForm as N,FormProvider as D}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as M}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as j}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as P}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as _}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as J}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as s}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as Y,confirmationModalContent as B}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as k}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as A}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as z}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as H,defaultScmCollectorConfig as C,EXISTS_COLLECTOR_TYPE as I,REGEX_COLLECTOR_TYPE as V,JSON_COLLECTOR_TYPE as X,mapScmCollectorConfigToConfig as G}from"./utils.esm.js";import{scmCollectorFormSchema as U}from"./validation.esm.js";const q=O(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),K=({disabled:i,selectedCollector:t})=>{const g=L(async(e,...n)=>{const a={enabled:!1,collectors:[]},F={exists:e.exists.enabled?e.exists:a,json:e.json.enabled?e.json:a,regex:e.regex.enabled?e.regex:a};return y(U)(F,...n)},[]),l=N({defaultValues:t?H(t.config):C(),mode:"onChange",resolver:g}),r=R(()=>C(t.config),[t]),{formState:{isValid:u},handleSubmit:m}=l,c=q(),x=!u,{mutateAsync:b}=P(),[S,h]=j(_),{showModal:E}=M(),p=async e=>{if(!await E(B(t)))return;const n=G(e);await b({collectorId:t.id,config:n})&&h()};return J(Y(t)),f(v,{children:[o(T,{className:c.section,children:o(D,{...l,children:f("form",{onSubmit:m(p),children:[o(s,{name:I,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.exists.collectors[0]},FactDetailsComponent:k}),o(d,{}),o(s,{name:V,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.regex.collectors[0]},FactDetailsComponent:z}),o(d,{}),o(s,{name:X,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.json.collectors[0]},FactDetailsComponent:A})]})})}),o("div",{className:c.section,children:o(w,{onCancel:S,saveButtonText:"Save",isLoading:!1,onSave:m(p),disableSave:x,noMargin:!0})})]})};export{K as ScmConfigurator};
1
+ import{jsxs as C,Fragment as j,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as w,Paper as _,Box as J,Button as Y,Divider as y}from"@material-ui/core";import k from"@material-ui/icons/UnfoldLess";import I from"@material-ui/icons/UnfoldMore";import{useCallback as z,useMemo as H,useState as l}from"react";import{useForm as V,FormProvider as X}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as G}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as U}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as $}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as q}from"../../../../routes.esm.js";import{FooterButtons as K}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Q}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as g}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as W,confirmationModalContent as Z}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as oo}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as eo}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as to}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as io,defaultScmCollectorConfig as v,EXISTS_COLLECTOR_TYPE as lo,REGEX_COLLECTOR_TYPE as ao,JSON_COLLECTOR_TYPE as ro,mapScmCollectorConfigToConfig as no}from"./utils.esm.js";import{scmCollectorFormSchema as so}from"./validation.esm.js";const mo=w(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},collapseAllContainer:{display:"flex",justifyContent:"flex-end",padding:e.spacing(1.5,6),borderBottom:`1px solid ${e.palette.divider}`}})),co=({disabled:e,selectedCollector:i})=>{const O=z(async(t,...d)=>{const f={enabled:!1,collectors:[]},M={exists:t.exists.enabled?t.exists:f,json:t.json.enabled?t.json:f,regex:t.regex.enabled?t.regex:f};return P(so)(M,...d)},[]),u=V({defaultValues:i?io(i.config):v(),mode:"onChange",resolver:O}),a=H(()=>v(i.config),[i]),{formState:{isValid:T},handleSubmit:x}=u,r=mo(),L=!T,{mutateAsync:N}=$(),[R,A]=U(q),{showModal:B}=G(),b=async t=>{if(!await B(Z(i)))return;const d=no(t);await N({collectorId:i.id,config:d})&&A()};Q(W(i));const[h,n]=l(!0),[S,s]=l(!0),[F,m]=l(!0),[c,E]=l(!0),p=h&&S&&F,D=()=>{p?(n(!1),s(!1),m(!1),E(!1)):(n(!0),s(!0),m(!0),E(!0))};return C(j,{children:[C(_,{className:r.section,children:[o(J,{className:r.collapseAllContainer,children:o(Y,{startIcon:p?o(I,{}):o(k,{}),onClick:D,variant:"outlined",size:"small",children:p?"Expand All":"Collapse All"})}),o(X,{...u,children:C("form",{onSubmit:x(b),children:[o(g,{name:lo,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:a.exists.collectors[0]},FactDetailsComponent:oo,collapsed:h,onCollapsedChange:n,allFactsCollapsed:c}),o(y,{}),o(g,{name:ao,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:a.regex.collectors[0]},FactDetailsComponent:to,collapsed:S,onCollapsedChange:s,allFactsCollapsed:c}),o(y,{}),o(g,{name:ro,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:e,multipleCollectors:{enable:!0,defaultConfig:a.json.collectors[0]},FactDetailsComponent:eo,collapsed:F,onCollapsedChange:m,allFactsCollapsed:c})]})})]}),o("div",{className:r.section,children:o(K,{onCancel:R,saveButtonText:"Save",isLoading:!1,onSave:x(b),disableSave:L,noMargin:!0})})]})};export{co as ScmConfigurator};
2
2
  //# sourceMappingURL=ScmConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{asArray as d}from"@spotify/backstage-plugin-soundcheck-common";import{defaultBaseCollectorOption as u,defaultCollectorOption as O}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as p,mapFormIntegrationConfigToBackendConfig as m}from"../Common/utils.esm.js";const C="projects",E="project-tags",r="issues",f="measures",D=["OPEN","CONFIRMED","REOPENED","RESOLVED","CLOSED"],y=["BLOCKER","CRITICAL","MAJOR","MINOR","INFO"],L=["VULNERABILITY","BUG","CODE_SMELL"],T=["OPEN"],g=["ncloc","complexity","violations","open_issues"],I={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},metrics:{name:"Metrics",helperText:"Add more metrics to collect",placeholder:"Example: code_smells"}}},S=(t,s,c,o,i)=>({...u(t),factDetails:{factName:s??"",statuses:c??T,severities:o,types:i}}),N=(t,s,c)=>({...u(t),factDetails:{factName:s??"",metrics:c??g}}),_=t=>({projects:O(t),projectTags:O(t),issues:{enabled:!1,collectors:[S(t,r,T)]},measures:{enabled:!1,collectors:[N(t,f,g)]}});function R(t){const{projects:s,projectTags:c,issues:o,measures:i}=t;if(s.enabled||c.enabled||o.enabled||i.enabled){const l={},n=[];return l.collects=n,s.enabled&&n.push(m({factType:C,configOption:s})),c.enabled&&n.push(m({factType:E,configOption:c})),o.enabled&&o.collectors.forEach(a=>{n.push(m({factType:r,configOption:a,additionalParams:{factName:a.factDetails.factName,statuses:a.factDetails.statuses?.length?a.factDetails.statuses:void 0,severities:a.factDetails.severities?.length?a.factDetails.severities:void 0,types:a.factDetails.types?.length?a.factDetails.types:void 0}}))}),i.enabled&&i.collectors.forEach(a=>{n.push(m({factType:f,configOption:a,additionalParams:{factName:a.factDetails.factName,metrics:a.factDetails.metrics}}))}),l}return{collects:[]}}function b(t){const s=_(t);if(t){const c=d(t).flatMap(o=>o.collects);if(c){const o=d(c),i=o.find(e=>e.type===C);i&&(s.projects={...p({parentConfig:t,factTypeConfig:i}),enabled:!0});const l=o.find(e=>e.type===E);l&&(s.projectTags={...p({parentConfig:t,factTypeConfig:l}),enabled:!0});const n=o.filter(e=>e.type===r);n.length&&(s.issues={enabled:!0,collectors:n.map(e=>({...p({parentConfig:t,factTypeConfig:e}),factDetails:{factName:e.factName??r,statuses:e.statuses?.length?e.statuses:void 0,severities:e.severities?.length?e.severities:void 0,types:e.types?.length?e.types:void 0}}))});const a=o.filter(e=>e.type===f);a.length&&(s.measures={enabled:!0,collectors:a.map(e=>({...p({parentConfig:t,factTypeConfig:e}),factDetails:{factName:e.factName??f,metrics:e.metrics}}))})}}return s}export{T as DEFAULT_ISSUE_STATUSES,g as DEFAULT_METRICS,r as ISSUES_COLLECTOR_TYPE,y as ISSUE_SEVERITY_OPTIONS,D as ISSUE_STATUS_OPTIONS,L as ISSUE_TYPE_OPTIONS,f as MEASURES_COLLECTOR_TYPE,C as PROJECTS_COLLECTOR_TYPE,E as PROJECT_TAGS_COLLECTOR_TYPE,I as SONARQUBE_COLLECTOR_FIELDS,_ as defaultSonarQubeConfig,S as issuesCollectorConfig,b as mapConfigToSonarQubeCollectorConfig,R as mapSonarQubeCollectorConfigToConfig,N as measuresCollectorConfig};
1
+ import{asArray as g}from"@spotify/backstage-plugin-soundcheck-common";import{defaultBaseCollectorOption as u,defaultCollectorOption as O}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as p,mapFormIntegrationConfigToBackendConfig as m}from"../Common/utils.esm.js";const C="projects",E="project-tags",r="issues",f="measures",D=["OPEN","CONFIRMED","REOPENED","RESOLVED","CLOSED"],y=["BLOCKER","CRITICAL","MAJOR","MINOR","INFO"],L=["VULNERABILITY","BUG","CODE_SMELL"],T=["OPEN"],d=["ncloc","complexity","violations","open_issues"],I={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},metrics:{name:"Metrics",helperText:"Add more metrics to collect",placeholder:"Example: code_smells"}}},S=(t,o,c,s,i)=>({...u(t),factDetails:{factName:o??"",statuses:c??T,severities:s,types:i}}),N=(t,o,c)=>({...u(t),factDetails:{factName:o??"",metrics:c??d}}),_=t=>({projects:O(t),projectTags:O(t),issues:{enabled:!1,collectors:[S(t,r,T)]},measures:{enabled:!1,collectors:[N(t,f,d)]}});function R(t){const{projects:o,projectTags:c,issues:s,measures:i}=t;if(o.enabled||c.enabled||s.enabled||i.enabled){const l={},n=[];return l.collects=n,o.enabled&&n.push(m({factType:C,configOption:o})),c.enabled&&n.push(m({factType:E,configOption:c})),s.enabled&&s.collectors.forEach(a=>{n.push(m({factType:r,configOption:a,additionalParams:{factName:a.factDetails.factName,statuses:a.factDetails.statuses?.length?a.factDetails.statuses:void 0,severities:a.factDetails.severities?.length?a.factDetails.severities:void 0,types:a.factDetails.types?.length?a.factDetails.types:void 0}}))}),i.enabled&&i.collectors.forEach(a=>{n.push(m({factType:f,configOption:a,additionalParams:{factName:a.factDetails.factName,metrics:a.factDetails.metrics}}))}),l}return{collects:[]}}function b(t){const o=_(t);if(t){const c=g(t).flatMap(s=>s.collects).filter(s=>s!==void 0);if(c){const s=g(c),i=s.find(e=>e.type===C);i&&(o.projects={...p({parentConfig:t,factTypeConfig:i}),enabled:!0});const l=s.find(e=>e.type===E);l&&(o.projectTags={...p({parentConfig:t,factTypeConfig:l}),enabled:!0});const n=s.filter(e=>e.type===r);n.length&&(o.issues={enabled:!0,collectors:n.map(e=>({...p({parentConfig:t,factTypeConfig:e}),factDetails:{factName:e.factName??r,statuses:e.statuses?.length?e.statuses:void 0,severities:e.severities?.length?e.severities:void 0,types:e.types?.length?e.types:void 0}}))});const a=s.filter(e=>e.type===f);a.length&&(o.measures={enabled:!0,collectors:a.map(e=>({...p({parentConfig:t,factTypeConfig:e}),factDetails:{factName:e.factName??f,metrics:e.metrics}}))})}}return o}export{T as DEFAULT_ISSUE_STATUSES,d as DEFAULT_METRICS,r as ISSUES_COLLECTOR_TYPE,y as ISSUE_SEVERITY_OPTIONS,D as ISSUE_STATUS_OPTIONS,L as ISSUE_TYPE_OPTIONS,f as MEASURES_COLLECTOR_TYPE,C as PROJECTS_COLLECTOR_TYPE,E as PROJECT_TAGS_COLLECTOR_TYPE,I as SONARQUBE_COLLECTOR_FIELDS,_ as defaultSonarQubeConfig,S as issuesCollectorConfig,b as mapConfigToSonarQubeCollectorConfig,R as mapSonarQubeCollectorConfigToConfig,N as measuresCollectorConfig};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as p}from"react/jsx-runtime";import{makeStyles as a,useTheme as f}from"@material-ui/core";import s from"../../images/integrations-bui/azure-rgb.svg";import g from"../../images/integrations-bui/azure-wht.svg";import n from"../../images/integrations-bui/bigquery-rgb.svg";import c from"../../images/integrations-bui/bigquery-wht.svg";import u from"../../images/integrations-bui/catalog-rgb.svg";import h from"../../images/integrations-bui/catalog-wht.svg";import b from"../../images/integrations-bui/data-registry-rgb.svg";import d from"../../images/integrations-bui/data-registry-wht.svg";import l from"../../images/integrations-bui/datadog-rgb.svg";import y from"../../images/integrations-bui/datadog-wht.svg";import k from"../../images/integrations-bui/default-logo-rgb.svg";import j from"../../images/integrations-bui/default-logo-wht.svg";import q from"../../images/integrations-bui/github-rgb.svg";import w from"../../images/integrations-bui/github-wht.svg";import x from"../../images/integrations-bui/gitlab-rgb.svg";import I from"../../images/integrations-bui/gitlab-wht.svg";import z from"../../images/integrations-bui/http-rgb.svg";import B from"../../images/integrations-bui/http-wht.svg";import T from"../../images/integrations-bui/jira-rgb.svg";import v from"../../images/integrations-bui/jira-wht.svg";import D from"../../images/integrations-bui/kubernetes-rgb.svg";import F from"../../images/integrations-bui/kubernetes-wht.svg";import L from"../../images/integrations-bui/newrelic-rgb.svg";import M from"../../images/integrations-bui/newrelic-wht.svg";import N from"../../images/integrations-bui/pagerduty-rgb.svg";import S from"../../images/integrations-bui/pagerduty-wht.svg";import U from"../../images/integrations-bui/scm-rgb.svg";import W from"../../images/integrations-bui/scm-wht.svg";import A from"../../images/integrations-bui/sonarqube-rgb.svg";import E from"../../images/integrations-bui/sonarqube-wht.svg";import G from"../../images/integrations-bui/soundcheck-rgb.svg";import H from"../../images/integrations-bui/soundcheck-wht.svg";import O from"../../images/integrations-bui/techinsights-rgb.svg";import Q from"../../images/integrations-bui/techinsights-wht.svg";import{isDarkTheme as R}from"../Charts/chartUtils.esm.js";const _={github:q,gitlab:x,datadog:l,scm:U,pagerduty:N,catalog:u,soundcheck:G,techinsights:O,kubernetes:D,jira:T,sonarqube:A,newrelic:L,bigquery:n,azure:s,http:z,"data-registry":b},C={github:w,gitlab:I,datadog:y,scm:W,pagerduty:S,catalog:h,soundcheck:H,techinsights:Q,kubernetes:F,jira:v,sonarqube:E,newrelic:M,bigquery:c,azure:g,http:B,"data-registry":d},J=a(()=>({image:{objectFit:"contain",color:"white",height:"var(--bui-space-4)",maxWidth:"100%"}})),K=({integrationId:r,noMargin:t})=>{const i=J(),e=f(),m=R(e);let o=m?C[r]:_[r];return o||(o=m?j:k),p("img",{src:o,alt:r,style:t?{marginBottom:0}:{},className:i.image})};export{K as IntegrationLogoBUI};
1
+ import{jsx as p}from"react/jsx-runtime";import{makeStyles as f,useTheme as s}from"@material-ui/core";import g from"../../images/integrations-bui/azure-rgb.svg";import c from"../../images/integrations-bui/azure-wht.svg";import n from"../../images/integrations-bui/bigquery-rgb.svg";import u from"../../images/integrations-bui/bigquery-wht.svg";import h from"../../images/integrations-bui/catalog-rgb.svg";import l from"../../images/integrations-bui/catalog-wht.svg";import b from"../../images/integrations-bui/data-registry-rgb.svg";import d from"../../images/integrations-bui/data-registry-wht.svg";import y from"../../images/integrations-bui/datadog-rgb.svg";import k from"../../images/integrations-bui/datadog-wht.svg";import v from"../../images/integrations-bui/default-logo-rgb.svg";import j from"../../images/integrations-bui/default-logo-wht.svg";import q from"../../images/integrations-bui/github-rgb.svg";import w from"../../images/integrations-bui/github-wht.svg";import x from"../../images/integrations-bui/gitlab-rgb.svg";import z from"../../images/integrations-bui/gitlab-wht.svg";import I from"../../images/integrations-bui/http-rgb.svg";import B from"../../images/integrations-bui/http-wht.svg";import T from"../../images/integrations-bui/jira-rgb.svg";import D from"../../images/integrations-bui/jira-wht.svg";import F from"../../images/integrations-bui/kubernetes-rgb.svg";import L from"../../images/integrations-bui/kubernetes-wht.svg";import M from"../../images/integrations-bui/newrelic-rgb.svg";import S from"../../images/integrations-bui/newrelic-wht.svg";import U from"../../images/integrations-bui/pagerduty-rgb.svg";import W from"../../images/integrations-bui/pagerduty-wht.svg";import A from"../../images/integrations-bui/scm-rgb.svg";import C from"../../images/integrations-bui/scm-wht.svg";import E from"../../images/integrations-bui/sonarqube-rgb.svg";import G from"../../images/integrations-bui/sonarqube-wht.svg";import H from"../../images/integrations-bui/soundcheck-rgb.svg";import K from"../../images/integrations-bui/soundcheck-wht.svg";import N from"../../images/integrations-bui/techinsights-rgb.svg";import O from"../../images/integrations-bui/techinsights-wht.svg";import{isDarkTheme as Q}from"../Charts/chartUtils.esm.js";const R={github:q,gitlab:x,datadog:y,scm:A,pagerduty:U,catalog:h,soundcheck:H,techinsights:N,kubernetes:F,jira:T,sonarqube:E,newrelic:M,bigquery:n,azure:g,http:I,"data-registry":b},Z={github:w,gitlab:z,datadog:k,scm:C,pagerduty:W,catalog:l,soundcheck:K,techinsights:O,kubernetes:L,jira:D,sonarqube:G,newrelic:S,bigquery:u,azure:c,http:B,"data-registry":d},_={small:"var(--bui-space-4)",medium:"var(--bui-space-6)",large:"var(--bui-space-8)"},J=f(()=>({image:{objectFit:"contain",color:"white",height:"var(--bui-space-4)",maxWidth:"100%"}})),P=({integrationId:r,noMargin:t,size:i="small"})=>{const e=J(),a=s(),m=Q(a);let o=m?Z[r]:R[r];return o||(o=m?j:v),p("img",{src:o,alt:r,style:{height:_[i],marginBottom:t?0:void 0},className:e.image})};export{P as IntegrationLogoBUI};
2
2
  //# sourceMappingURL=IntegrationLogoBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as r,Fragment as Y}from"react/jsx-runtime";import{useRouteRef as w}from"@backstage/core-plugin-api";import{usePermission as $}from"@backstage/plugin-permission-react";import{HeaderPage as z,SearchField as O,Container as V,Table as W,TableHeader as J,Column as g,TableBody as K,Row as Q,Flex as X,Text as Z,TooltipTrigger as _,ButtonIcon as ee,Tooltip as te,Box as ie,CellText as P,Button as oe}from"@backstage/ui";import{makeStyles as re}from"@material-ui/core";import{RiInformationLine as ne}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as ae}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as se,isEmpty as p}from"lodash";import{useState as C,useMemo as x,useEffect as ce,useCallback as de}from"react";import{useNavigate as le}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as me}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as ge}from"../../hooks/useSortSearchParams.esm.js";import{useGetCollectors as pe}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as ue}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as he}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationDetailsRouteRef as fe,integrationEditRouteRef as Ce}from"../../routes.esm.js";import{CustomCell as B}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as be}from"../EmptyState/EmptyStateBUI.esm.js";import{LoadingTableSkeleton as Se}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{IntegrationLogoBUI as Ie}from"./IntegrationLogoBUI.esm.js";const N=["github","gitlab","scm","pagerduty","datadog","kubernetes","jira","sonarqube","newrelic","bigquery","catalog","azure","http","data-registry"],R=t=>{const s=t.hasUIConfig?"UI":"YAML";return p(t.config)&&p(t.collectionConfigs)?"None":s},L=re(()=>({container:{marginBottom:"var(--bui-space-12)"},button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),T=({integration:t,hasConfigPage:s})=>{const n=L(),c=w(fe),a=le(),u=w(Ce);return r(Q,{onAction:()=>a(c({integrationId:t.id})),children:[e(B,{children:r(X,{gap:"2",align:"center",children:[e(Ie,{integrationId:t.id}),e(Z,{children:t.name??t.id}),t.description&&r(_,{children:[e(ee,{className:n.button,variant:"secondary",icon:e(ne,{}),onClick:()=>a(c({integrationId:t.id}))}),e(te,{className:n.tooltip,children:e(ie,{className:n.scrollBox,children:e("p",{children:t.description})})})]})]})}),e(P,{title:`${String(t.dependentChecks?.length??0)} checks`}),e(P,{title:R(t)}),e(B,{onClick:d=>d.stopPropagation(),children:e(oe,{onClick:()=>a(u({integrationId:t.id})),isDisabled:!s,variant:"tertiary","aria-label":`${t.id} configure`,children:"Configure"})})]})},ye=["name","dependent-checks","config-source"],ke=({integrations:t})=>{const s=L(),{updateSortParams:n,searchParams:c}=ge(),[a,u]=C(""),[d,v]=C(()=>c.get("sortDirection")==="descending"?"descending":"ascending"),[l,D]=C(()=>{const i=c.get("sort");return i&&ye.includes(i)?i:""}),b=x(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:t?.length}}),[t?.length]),{reportContentLoaded:S}=he(b),{reporter:U}=ue(b),{loading:H,allowed:A}=$({permission:ae}),{data:E,isLoading:m}=pe(),h=t?.map(i=>i.integrationId)??N,I=me({items:E??[],searchTerm:a}),f=x(()=>{const i=se(I,o=>l==="name"?o.name??o.id:l==="dependent-checks"?o.dependentChecks?.length??0:l==="config-source"?R(o):h.includes(o.id)?1:2);return d==="descending"&&i.reverse(),i},[I,h,l,d]),y=U?.getLCPValue();ce(()=>{m||S({lcp:y})},[m,S,y]);const j=de(({direction:i,column:o})=>{const k=String(o);D(k),v(i),n({sort:k,sortDirection:i})},[n]),F=!m&&!p(f),M=m,q=!m&&p(f),G=e(be,{title:"No integrations found",body:"Your current search term did not return any integrations. Please try a different search term."});return r(Y,{children:[e(z,{customActions:e(O,{value:a,onChange:u,"aria-label":"Search Name"}),title:"Integrations"}),r(V,{className:s.container,children:[M&&e(Se,{rowCount:10,rowHeight:36}),q&&G,F&&r(W,{onSortChange:j,sortDescriptor:{direction:d,column:l},children:[r(J,{children:[e(g,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"63%"},children:"Name"}),e(g,{id:"dependent-checks",allowsSorting:!0,style:{width:"15%"},children:"Dependent Checks"}),e(g,{id:"config-source",allowsSorting:!0,style:{width:"15%"},children:"Config Source"}),e(g,{style:{width:"7%"}})]}),e(K,{children:f.map(i=>e(T,{integration:i,hasConfigPage:!H&&A&&h.includes(i.id)},i.id))})]})]})]})};export{N as ConfigurableIntegrationIds,T as IntegrationRow,ke as IntegrationsListPageBUI};
1
+ import{jsx as e,jsxs as r,Fragment as M}from"react/jsx-runtime";import{useRouteRef as w}from"@backstage/core-plugin-api";import{usePermission as Y}from"@backstage/plugin-permission-react";import{HeaderPage as $,SearchField as O,Container as V,TableRoot as W,TableHeader as q,Column as g,TableBody as z,Row as J,Flex as K,Text as Q,TooltipTrigger as X,ButtonIcon as Z,Tooltip as _,Box as ee,CellText as y,Button as te}from"@backstage/ui";import{makeStyles as oe}from"@material-ui/core";import{RiInformationLine as ie}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as ne,isEmpty as p}from"lodash";import{useState as f,useMemo as P,useEffect as ae,useCallback as se}from"react";import{useNavigate as ce}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as de}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as le}from"../../hooks/useSortSearchParams.esm.js";import{useGetCollectors as me}from"../../hooks/collectors/useGetCollectors.esm.js";import{useLCPReporting as ge}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as pe}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationDetailsRouteRef as he,integrationEditRouteRef as ue}from"../../routes.esm.js";import{CustomCell as x}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as fe}from"../EmptyState/EmptyStateBUI.esm.js";import{LoadingTableSkeleton as Ce}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{IntegrationLogoBUI as Se}from"./IntegrationLogoBUI.esm.js";const R=t=>{const s=t.hasUIConfig?"UI":"YAML";return p(t.config)&&p(t.collectionConfigs)?"None":s},B=oe(()=>({container:{marginBottom:"var(--bui-space-12)"},button:{boxShadow:"none !important",backgroundColor:"inherit !important"},tooltip:{maxWidth:"50rem",padding:0},scrollBox:{maxHeight:"30rem",overflow:"auto",padding:"0 var(--bui-space-3)"}})),N=({integration:t,hasConfigPage:s})=>{const n=B(),c=w(he),a=ce(),h=w(ue);return r(J,{onAction:()=>a(c({integrationId:t.id})),children:[e(x,{children:r(K,{gap:"2",align:"center",children:[e(Se,{integrationId:t.id}),e(Q,{children:t.name??t.id}),t.description&&r(X,{children:[e(Z,{className:n.button,variant:"secondary",icon:e(ie,{}),onClick:()=>a(c({integrationId:t.id}))}),e(_,{className:n.tooltip,children:e(ee,{className:n.scrollBox,children:e("p",{children:t.description})})})]})]})}),e(y,{title:`${String(t.dependentChecks?.length??0)} checks`}),e(y,{title:R(t)}),e(x,{onClick:d=>d.stopPropagation(),children:e(te,{onClick:()=>a(h({integrationId:t.id})),isDisabled:!s,variant:"tertiary","aria-label":`${t.id} configure`,children:"Configure"})})]})},be=["name","dependent-checks","config-source"],ke=({integrations:t})=>{const s=B(),{updateSortParams:n,searchParams:c}=le(),[a,h]=f(""),[d,T]=f(()=>c.get("sortDirection")==="descending"?"descending":"ascending"),[l,L]=f(()=>{const o=c.get("sort");return o&&be.includes(o)?o:""}),C=P(()=>({routeName:"soundcheck-integrations",additionalAttributes:{integrationsPerPage:t?.length}}),[t?.length]),{reportContentLoaded:S}=pe(C),{reporter:v}=ge(C),{loading:D,allowed:E}=Y({permission:re}),{data:U,isLoading:m}=me(),b=de({items:U??[],searchTerm:a}),u=P(()=>{const o=ne(b,i=>l==="name"?i.name??i.id:l==="dependent-checks"?i.dependentChecks?.length??0:l==="config-source"?R(i):i.isEditable?1:2);return d==="descending"&&o.reverse(),o},[b,l,d]),k=v?.getLCPValue();ae(()=>{m||S({lcp:k})},[m,S,k]);const H=se(({direction:o,column:i})=>{const I=String(i);L(I),T(o),n({sort:I,sortDirection:o})},[n]),A=!m&&!p(u),F=m,j=!m&&p(u),G=e(fe,{title:"No integrations found",body:"Your current search term did not return any integrations. Please try a different search term."});return r(M,{children:[e($,{customActions:e(O,{value:a,onChange:h,"aria-label":"Search Name"}),title:"Integrations"}),r(V,{className:s.container,children:[F&&e(Ce,{rowCount:10,rowHeight:36}),j&&G,A&&r(W,{onSortChange:H,sortDescriptor:{direction:d,column:l},children:[r(q,{children:[e(g,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"63%"},children:"Name"}),e(g,{id:"dependent-checks",allowsSorting:!0,style:{width:"15%"},children:"Dependent Checks"}),e(g,{id:"config-source",allowsSorting:!0,style:{width:"15%"},children:"Config Source"}),e(g,{style:{width:"7%"}})]}),e(z,{children:u.map(o=>e(N,{integration:o,hasConfigPage:!D&&E&&o.isEditable},o.id))})]})]})]})};export{N as IntegrationRow,ke as IntegrationsListPageBUI};
2
2
  //# sourceMappingURL=IntegrationsListPageBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as t,Fragment as y,jsx as e}from"react/jsx-runtime";import{useRouteRef as n}from"@backstage/core-plugin-api";import{HeaderPage as b,Container as C,Box as a,Text as o,Flex as i,Card as d,CardBody as m,Link as u}from"@backstage/ui";import{makeStyles as R}from"@material-ui/core/styles";import{RiAddLine as v,RiLayoutGridFill as N}from"@remixicon/react";import{useNavigate as x}from"react-router-dom";import B from"react-use/lib/useLocalStorage";import{trackCreateRouteRef as T,tracksPageRouteRef as w,trackBuilderRouteRef as P}from"../../routes.esm.js";import{PROVIDER_STORAGE_KEY as S}from"../TrackBuilderPage/utils.esm.js";const E=R(()=>({container:{marginBottom:"var(--bui-space-12)"},icon:{width:"64px",height:"64px",background:"var(--bui-bg-neutral-2)",borderRadius:"var(--bui-radius-full)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--bui-fg-success)"},cardBody:{padding:"var(--bui-space-10)"},card:{width:"30%",cursor:"pointer"}})),_=()=>{const r=E(),p=n(T),h=n(w),f=n(P),s=x(),g="Create a custom track or use Spotify templates.",[l]=B(S,null),k=()=>{const c=f();return l?`${c}?step=2&provider=${l}`:c};return t(y,{children:[e(b,{title:"Create New Track",breadcrumbs:[{label:"All Tracks",href:h()}]}),t(C,{className:r.container,children:[e(a,{mb:"8",children:e(o,{color:"secondary",variant:"body-large",children:g})}),t(i,{children:[e(d,{className:r.card,onClick:()=>s(p()),children:t(m,{className:r.cardBody,children:[e(i,{direction:"column",align:"center",mb:"2",children:e(a,{className:r.icon,children:e(v,{size:64})})}),t(i,{direction:"column",align:"center",gap:"1",children:[e(o,{variant:"title-small",children:"Create Custom Track"}),e(o,{color:"secondary",children:"Create a custom track with your own checks. Ensure that checks are created first."}),e(a,{mt:"4",children:e(u,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#creating-a-custom-track",target:"_blank",rel:"noopener noreferrer",onClick:c=>c.stopPropagation(),children:"Documentation"})})]})]})}),e(d,{className:r.card,onClick:()=>s(k()),children:t(m,{className:r.cardBody,children:[e(i,{direction:"column",align:"center",mb:"2",children:e(a,{className:r.icon,children:e(N,{size:36})})}),t(i,{direction:"column",align:"center",gap:"1",children:[e(o,{variant:"title-small",children:"Use Spotify Templates"}),e(o,{color:"secondary",children:"Ready-to-use tracks and checks recommended by Spotify. You can modify this configuration at any time."}),e(a,{mt:"4",children:e(u,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#creating-tracks-using-spotify-templates",target:"_blank",rel:"noopener noreferrer",onClick:c=>c.stopPropagation(),children:"Documentation"})})]})]})})]})]})]})};export{_ as CreateNewTrackPage};
2
+ //# sourceMappingURL=CreateNewTrackPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiAddLine as m}from"@remixicon/react";import{soundcheckTrackCreatePermission as p}from"@spotify/backstage-plugin-soundcheck-common";import{useNavigate as d}from"react-router-dom";import{trackCreateRouteRef as u}from"../../routes.esm.js";import{EmptyStateBUI as f}from"./EmptyStateBUI.esm.js";const k=({title:r})=>{const e=s(u),a=d(),{loading:i,allowed:c}=n({permission:p}),t=!i&&c;return o(f,{title:r??(t?"Create your first track":"No tracks found"),body:"Tracks encourage alignment to architectural best practices and standards.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks/",actionButtonIcon:o(m,{}),actionOnClick:t?()=>a(e()):()=>{},actionText:"Create a track",actionDisabled:!t})};export{k as EmptyStateNoTracks};
1
+ import{jsx as o}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiAddLine as m}from"@remixicon/react";import{soundcheckTrackCreatePermission as p}from"@spotify/backstage-plugin-soundcheck-common";import{useNavigate as d}from"react-router-dom";import{newTrackRouteRef as u}from"../../routes.esm.js";import{EmptyStateBUI as f}from"./EmptyStateBUI.esm.js";const k=({title:r})=>{const e=s(u),a=d(),{loading:i,allowed:c}=n({permission:p}),t=!i&&c;return o(f,{title:r??(t?"Create your first track":"No tracks found"),body:"Tracks encourage alignment to architectural best practices and standards.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks/",actionButtonIcon:o(m,{}),actionOnClick:t?()=>a(e()):()=>{},actionText:"Create a track",actionDisabled:!t})};export{k as EmptyStateNoTracks};
2
2
  //# sourceMappingURL=EmptyStateNoTracks.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as a,jsx as e}from"react/jsx-runtime";import{Paper as d,Grid as n,IconButton as f,Typography as h,Collapse as g}from"@material-ui/core";import{makeStyles as x}from"@material-ui/core/styles";import u from"@material-ui/icons/ArrowDropDown";import y from"@material-ui/icons/ArrowRight";import{useState as S}from"react";const N=x(t=>({root:{display:"flex",flexDirection:"column",gap:0},button:{marginLeft:-t.spacing(1)},title:{fontWeight:700,color:t.palette.text.primary,cursor:"pointer"}})),b=({title:t,alwaysExpanded:o=!1,children:c,className:m,elevation:s=1})=>{const[r,p]=S(o),i=N(),l=()=>{o||p(!r)};return a(d,{elevation:s,className:`${i.root} ${m??""}`,children:[a(n,{container:!0,alignItems:"center",spacing:0,children:[e(n,{item:!0,children:!o&&e(f,{onClick:l,className:i.button,children:r?e(u,{fontSize:"large"}):e(y,{fontSize:"large"})})}),e(n,{item:!0,children:e(h,{onClick:l,className:i.title,children:t})})]}),e(g,{in:r,children:c})]})};export{b as ExpandableSection};
1
+ import{jsxs as a,jsx as e}from"react/jsx-runtime";import{Paper as d,Grid as n,IconButton as f,Typography as h,Collapse as g}from"@material-ui/core";import{makeStyles as x}from"@material-ui/core/styles";import u from"@material-ui/icons/ArrowDropDown";import y from"@material-ui/icons/ArrowRight";import{useState as S}from"react";const C=x(t=>({root:{display:"flex",flexDirection:"column",gap:0},button:{marginLeft:-t.spacing(1)},title:{fontWeight:700,color:t.palette.text.primary,cursor:"pointer"}})),N=({title:t,alwaysExpanded:o=!1,children:c,className:m,elevation:s=1})=>{const[r,p]=S(o),i=C(),l=()=>{o||p(!r)};return a(d,{elevation:s,className:`${i.root} ${m??""}`,children:[a(n,{container:!0,alignItems:"center",spacing:0,children:[e(n,{item:!0,children:!o&&e(f,{onClick:l,className:i.button,children:r?e(u,{fontSize:"large"}):e(y,{fontSize:"large"})})}),e(n,{item:!0,children:e(h,{onClick:l,className:i.title,children:t})})]}),e(g,{in:r,children:c})]})};export{N as ExpandableSection};
2
2
  //# sourceMappingURL=ExpandableSection.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{stringifyEntityRef as ee}from"@backstage/catalog-model";import{makeStyles as te,Box as o,Typography as n,TextField as ae,Button as W}from"@material-ui/core";import{Alert as ie}from"@material-ui/lab";import{parseFactRef as oe}from"@spotify/backstage-plugin-soundcheck-common";import ne from"lodash";import{useMemo as g,useState as F,useEffect as re,useCallback as le}from"react";import{useGetEntityRefs as ce}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetLimitedEntityRefs as se}from"../../hooks/catalog/useGetLimitedEntityRefs.esm.js";import{useGetCollectors as de}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as he}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as pe}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as me}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as fe}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as ue,CollectorLogo as ve}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as G}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as ge}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as ye}from"../Filter/types.esm.js";import{FormattedPreview as w}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as be}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as Se}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as Fe}from"./useFactOptions.esm.js";const Ne=800,Re=te(t=>({content:{padding:t.spacing(2,3),width:Ne},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),xe=t=>{const p=!t?.length||t.every(h=>Object.values(h).every(N=>!N?.length))?[{...ye(),selectedKinds:["Component","System"]}]:t;return ge(p)},Ee=({factRef:t,updateFactRef:p,path:h,updatePath:N,entityRef:m,updateEntityRef:k,pathResolver:s,filters:R,onSave:P,hidePath:O})=>{const i=Re(),d=g(()=>{if(t)try{return oe(t)}catch{return}},[t]),[x,j]=F(d?.source??null);re(()=>{d?.source&&j(d.source)},[d?.source]);const[b,V]=F("jsonpath"),[E,B]=F(),[C,M]=F(),{data:I}=me(),A=g(()=>I?.map(r=>r.id)??[],[I]),{data:f}=he(d?.source,d?.name,!0),D=g(()=>f?fe(f.schema):[],[f]),{data:L,isLoading:J}=de(),$=L?.map(r=>r.id)?.sort()??[],S=!R?.length||R.every(r=>Object.values(r).every(Z=>!Z?.length)),{data:z,isLoading:H}=ce(xe(R),1e3,!S),K=z?.items.map(r=>ee(r)),{entityRefs:U,allLoading:q}=se(500,S),l=g(()=>L?.find(r=>r.id===x),[L,x]),{factOptions:Q}=Fe({selectedCollector:l}),{options:X,getOptionLabel:T}=be(Q),{data:c,isLoading:u}=pe({factRef:t||"",entityRef:C||"",path:E,pathResolver:s??b??void 0},!!t&&!!C),Y=le(()=>{B(h),M(m)},[m,h]),_=g(()=>!!l?.config?.cache,[l]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(n,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:$,onChange:r=>{j(r),p("")},value:x,placeholder:"Integration",disabled:J,fullWidth:!0,freeSolo:!0})]}),!l&&e(v,{children:a(o,{children:[e(n,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(ae,{value:t,onChange:r=>p(r.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!l&&e(v,{children:a(o,{className:i.section,children:[ue(l.id)?e(ve,{noMargin:!0,collectorId:l.id}):a(n,{variant:"h5",className:i.collectorName,component:"div",children:[l.name??l.id," "]}),!!l.description&&e(n,{variant:"body2",children:l.description}),e(y,{options:X,onChange:p,value:t??null,placeholder:"Select Fact",getOptionLabel:T,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(G,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(w,{data:f.schema})})})}),!O&&a(v,{children:[a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(n,{variant:"caption",children:"Defaults to jsonpath"}),s?e(n,{variant:"body1",children:s}):e(y,{options:A,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:T,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?D:[],onChange:r=>{E&&B(void 0),N(r)},value:h??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!P&&e(W,{className:i.testPathButton,variant:"contained",onClick:()=>P({factRef:t,path:h??"",pathResolver:b??s??""}),disabled:!h,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(G,{alwaysExpanded:O,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(n,{variant:"subtitle1",children:"Select an Entity"}),a(n,{variant:"caption",children:["Fact will be sampled from this entity.",e("br",{}),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."]}),e(y,{options:S?U??[]:K??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:S?q:H,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(W,{className:i.testPathButton,variant:"contained",onClick:Y,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!E&&!u&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Resolved Value"}),c?.resolvedValue!==null&&c?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(w,{data:c?.resolvedValue})}):e(n,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!C&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Fact Data"}),_&&e(n,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(Se,{})}),!u&&!!c?.fact&&e(o,{className:i.preview,children:c?.fact?.sensitive&&ne.isEmpty(c?.fact?.data)?e(o,{children:e(ie,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(w,{data:c?.fact?.data})}),!u&&!!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",c?.collectionError?.errorMessage]}),!u&&!c?.fact&&!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{Ee as FactExplorer};
1
+ import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{stringifyEntityRef as ee}from"@backstage/catalog-model";import{makeStyles as te,Box as o,Typography as r,TextField as ae,Button as W}from"@material-ui/core";import{Alert as ie}from"@material-ui/lab";import{parseFactRef as oe}from"@spotify/backstage-plugin-soundcheck-common";import re from"lodash";import{useMemo as g,useState as F,useEffect as ne,useCallback as le}from"react";import{useGetEntityRefs as ce}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetLimitedEntityRefs as se}from"../../hooks/catalog/useGetLimitedEntityRefs.esm.js";import{useGetCollectors as de}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as he}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as pe}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as me}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as fe}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as ue,CollectorLogo as ve}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as G}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as ge}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as ye}from"../Filter/types.esm.js";import{FormattedPreview as w}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as be}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as Se}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as Fe}from"./useFactOptions.esm.js";const Ne=800,Re=te(t=>({content:{padding:t.spacing(2,3),width:Ne},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),xe=t=>{const p=!t?.length||t.every(h=>Object.values(h).every(N=>!N?.length))?[{...ye(),selectedKinds:["Component","System"]}]:t;return ge(p)},Ee=({factRef:t,updateFactRef:p,path:h,updatePath:N,entityRef:m,updateEntityRef:k,pathResolver:s,filters:R,onSave:P,hidePath:O})=>{const i=Re(),d=g(()=>{if(t)try{return oe(t)}catch{return}},[t]),[x,j]=F(d?.source??null);ne(()=>{d?.source&&j(d.source)},[d?.source]);const[b,V]=F("jsonpath"),[E,B]=F(),[C,M]=F(),{data:I}=me(),A=g(()=>I?.map(n=>n.id)??[],[I]),{data:f}=he(d?.source,d?.name,!0),D=g(()=>f?fe(f.schema):[],[f]),{data:L,isLoading:J}=de(),$=L?.map(n=>n.id)?.sort()??[],S=!R?.length||R.every(n=>Object.values(n).every(Z=>!Z?.length)),{data:z,isLoading:H}=ce(xe(R),1e3,!S),K=z?.items.map(n=>ee(n)),{entityRefs:U,allLoading:q}=se(500,S),l=g(()=>L?.find(n=>n.id===x),[L,x]),{factOptions:Q}=Fe({selectedCollector:l}),{options:X,getOptionLabel:T}=be(Q),{data:c,isLoading:u}=pe({factRef:t||"",entityRef:C||"",path:E,pathResolver:s??b??void 0,refresh:!0},!!t&&!!C),Y=le(()=>{B(h),M(m)},[m,h]),_=g(()=>!!l?.config?.cache,[l]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(r,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:$,onChange:n=>{j(n),p("")},value:x,placeholder:"Integration",disabled:J,fullWidth:!0,freeSolo:!0})]}),!l&&e(v,{children:a(o,{children:[e(r,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(ae,{value:t,onChange:n=>p(n.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!l&&e(v,{children:a(o,{className:i.section,children:[ue(l.id)?e(ve,{noMargin:!0,collectorId:l.id}):a(r,{variant:"h5",className:i.collectorName,component:"div",children:[l.name??l.id," "]}),!!l.description&&e(r,{variant:"body2",children:l.description}),e(y,{options:X,onChange:p,value:t??null,placeholder:"Select Fact",getOptionLabel:T,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(G,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(w,{data:f.schema})})})}),!O&&a(v,{children:[a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(r,{variant:"caption",children:"Defaults to jsonpath"}),s?e(r,{variant:"body1",children:s}):e(y,{options:A,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:T,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?D:[],onChange:n=>{E&&B(void 0),N(n)},value:h??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!P&&e(W,{className:i.testPathButton,variant:"contained",onClick:()=>P({factRef:t,path:h??"",pathResolver:b??s??""}),disabled:!h,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(G,{alwaysExpanded:O,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(r,{variant:"subtitle1",children:"Select an Entity"}),a(r,{variant:"caption",children:["Fact will be sampled from this entity.",e("br",{}),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."]}),e(y,{options:S?U??[]:K??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:S?q:H,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(W,{className:i.testPathButton,variant:"contained",onClick:Y,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!E&&!u&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Resolved Value"}),c?.resolvedValue!==null&&c?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(w,{data:c?.resolvedValue})}):e(r,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!C&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Fact Data"}),_&&e(r,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(Se,{})}),!u&&!!c?.fact&&e(o,{className:i.preview,children:c?.fact?.sensitive&&re.isEmpty(c?.fact?.data)?e(o,{children:e(ie,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(w,{data:c?.fact?.data})}),!u&&!!c?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",c?.collectionError?.errorMessage]}),!u&&!c?.fact&&!c?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{Ee as FactExplorer};
2
2
  //# sourceMappingURL=FactExplorer.esm.js.map
@@ -1,2 +1,2 @@
1
- import{isEqual as g}from"lodash";import{useMemo as y,useCallback as F,useState as u,useEffect as O}from"react";import{useSearchParams as P}from"react-router-dom";const v=()=>{const[t,S]=P(),a=y(()=>t.getAll("owners"),[t]),l=y(()=>t.getAll("lifecycles"),[t]),c=y(()=>t.getAll("types"),[t]),r=y(()=>t.getAll("systems"),[t]),i=y(()=>t.getAll("certificationStatuses"),[t]),m=F(()=>a.map(e=>({label:e,value:e})),[a]),[n,h]=u(l),[o,w]=u(m()),[d,E]=u(c),[f,A]=u(r),[p,C]=u(i);O(()=>{w(m()),h(l??[]),E(c??[]),A(r??[]),C(i??[])},[a,l,c,r,m,i]);const b=y(()=>{const e={owners:!g(o,a??[]),lifecycles:!g(n,l??[]),types:!g(d,c??[]),systems:!g(f,r??[]),certificationStatus:!g(p,i??[])};return Object.values(e).some(Boolean)},[o,a,n,l,d,c,f,r,p,i]),L=F(()=>{const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),n.length>0&&n.forEach(s=>e.append("lifecycles",s)),o.length>0&&o.forEach(({value:s})=>e.append("owners",s)),d.length>0&&d.forEach(s=>e.append("types",s)),f.length>0&&f.forEach(s=>e.append("systems",s)),p.length>0&&p.forEach(s=>e.append("certificationStatuses",s)),S(e)},[t,n,o,d,f,p,S]);return{handleClearFilters:F(()=>{h([]),w([]),E([]),A([]),C([]);const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),S(e)},[t,S]),handleApplyFilters:L,hasFilterChanges:b,stagedTypes:d,stagedLifecycles:n,stagedSystems:f,stagedOwners:o,stagedCertificationStatuses:p,setStagedTypes:E,setStagedLifecycles:h,setStagedOwners:w,setStagedSystems:A,setStagedCertificationStatuses:C,owners:a,lifecycles:l,types:c,systems:r,certificationStatuses:i}};export{v as useTrackFilterSidebar};
1
+ import{isEqual as m}from"lodash";import{useMemo as y,useCallback as P,useState as S,useEffect as v}from"react";import{useSearchParams as T}from"react-router-dom";import{getSearchParamValues as u}from"./util.esm.js";const k=()=>{const[t,h]=T(),a=y(()=>u(t,"owners"),[t]),c=y(()=>u(t,"lifecycles"),[t]),r=y(()=>u(t,"types"),[t]),l=y(()=>u(t,"systems"),[t]),i=y(()=>u(t,"certificationStatuses"),[t]),g=P(()=>a.map(e=>({label:e,value:e})),[a]),[n,w]=S(c),[o,E]=S(g()),[d,C]=S(r),[f,b]=S(l),[p,L]=S(i);v(()=>{E(g()),w(c??[]),C(r??[]),b(l??[]),L(i??[])},[a,c,r,l,g,i]);const F=y(()=>{const e={owners:!m(o,a??[]),lifecycles:!m(n,c??[]),types:!m(d,r??[]),systems:!m(f,l??[]),certificationStatus:!m(p,i??[])};return Object.values(e).some(Boolean)},[o,a,n,c,d,r,f,l,p,i]),O=P(()=>{const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),n.length>0&&n.forEach(s=>e.append("lifecycles",s)),o.length>0&&o.forEach(({value:s})=>e.append("owners",s)),d.length>0&&d.forEach(s=>e.append("types",s)),f.length>0&&f.forEach(s=>e.append("systems",s)),p.length>0&&p.forEach(s=>e.append("certificationStatuses",s)),h(e)},[t,n,o,d,f,p,h]);return{handleClearFilters:P(()=>{w([]),E([]),C([]),b([]),L([]);const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),h(e)},[t,h]),handleApplyFilters:O,hasFilterChanges:F,stagedTypes:d,stagedLifecycles:n,stagedSystems:f,stagedOwners:o,stagedCertificationStatuses:p,setStagedTypes:C,setStagedLifecycles:w,setStagedOwners:E,setStagedSystems:b,setStagedCertificationStatuses:L,owners:a,lifecycles:c,types:r,systems:l,certificationStatuses:i}};export{k as useTrackFilterSidebar};
2
2
  //# sourceMappingURL=useTrackFilterSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{TrackCertificationState as e}from"../../graphql/generated/index.esm.js";const a=d=>{const{lifecycles:t,owners:o,types:i,systems:s}=d,r=t?.length?{"spec.lifecycle":t}:void 0,l=o?.length?{"relations.ownedBy":o}:void 0,n=i?.length?{"spec.type":i}:void 0,c=s?.length?{"relations.partOf":s}:void 0;if(r||l||n||c)return{...r,...l,...n,...c}},p={Passed:e.Passed,Failed:e.Failed,"Not Reported":e.NotReported};export{p as CERTIFICATION_STATUS_MAP,a as toFilter};
1
+ import{TrackCertificationState as l}from"../../graphql/generated/index.esm.js";const p=o=>{const{lifecycles:t,owners:e,types:i,systems:a}=o,s=t?.length?{"spec.lifecycle":t}:void 0,r=e?.length?{"relations.ownedBy":e}:void 0,n=i?.length?{"spec.type":i}:void 0,c=a?.length?{"relations.partOf":a}:void 0;if(s||r||n||c)return{...s,...r,...n,...c}},d={Passed:l.Passed,Failed:l.Failed,"Not Reported":l.NotReported},f=(o,t)=>o.getAll(t).flatMap(e=>e.split(",")).map(e=>e.trim()).filter(Boolean);export{d as CERTIFICATION_STATUS_MAP,f as getSearchParamValues,p as toFilter};
2
2
  //# sourceMappingURL=util.esm.js.map