@spotify/backstage-plugin-soundcheck 0.22.0 → 0.22.1

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 (95) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/alpha/apis.esm.js +1 -1
  3. package/dist/alpha/plugin.esm.js +1 -1
  4. package/dist/alpha.d.ts +10 -1
  5. package/dist/api.esm.js +1 -1
  6. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  7. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  8. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  9. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  10. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
  11. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  12. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  13. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  14. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  15. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  16. package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
  17. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  18. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  19. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  20. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
  21. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  22. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  23. package/dist/components/CheckDetails/CheckPullRequest.esm.js +2 -0
  24. package/dist/components/CheckDryRun/CheckDryRun.esm.js +1 -1
  25. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  26. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  27. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  28. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  29. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  30. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  31. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  32. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  33. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  34. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  35. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
  36. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  37. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  38. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  39. package/dist/components/ChecksTable/FixMeCell.esm.js +2 -0
  40. package/dist/components/ChecksTable/PullRequestsTable.esm.js +2 -0
  41. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
  42. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +1 -1
  43. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  44. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  45. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  46. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  47. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  48. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  49. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  50. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  51. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  52. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  53. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  54. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  55. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  56. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  57. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  58. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  59. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  60. package/dist/components/FixMeButton/FixMeButton.esm.js +2 -0
  61. package/dist/components/FixWithAiKAButton/FixWithAiKAButton.esm.js +2 -0
  62. package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +1 -1
  63. package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
  64. package/dist/components/LoadingIcon/LoadingIcon.esm.js +2 -0
  65. package/dist/components/Menus/useCampaignActions.esm.js +1 -1
  66. package/dist/components/Menus/useCheckActions.esm.js +1 -1
  67. package/dist/components/Menus/useTrackActions.esm.js +1 -1
  68. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  69. package/dist/components/ProgressBar/ProgressBar.esm.js +2 -0
  70. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
  71. package/dist/components/RelativeTime/RelativeTime.esm.js +1 -1
  72. package/dist/components/Router.esm.js +1 -1
  73. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +1 -1
  74. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  75. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  76. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
  77. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  78. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  79. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  80. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  81. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  82. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  83. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
  84. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  85. package/dist/components/ViewPullRequests/ViewPullRequests.esm.js +2 -0
  86. package/dist/contexts/UserProvider.esm.js +1 -1
  87. package/dist/hooks/fixMe/useFixMe.esm.js +2 -0
  88. package/dist/hooks/fixWithAika/useFixWithAika.esm.js +2 -0
  89. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  90. package/dist/hooks/remedy/useRemediesForCheck.esm.js +2 -0
  91. package/dist/hooks/remedy/useRemediesForEntity.esm.js +2 -0
  92. package/dist/index.d.ts +23 -2
  93. package/dist/index.esm.js +1 -1
  94. package/dist/plugin.esm.js +1 -1
  95. package/package.json +2 -2
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{Content as s}from"@backstage/core-components";import{FormProvider as d}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as h}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{formStyles as f}from"../../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as S}from"../FactExplorer/FactExplorerContext.esm.js";import{FormStepper as u}from"../FormStepper/FormStepper.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import"./utils/checkFormUtils.esm.js";import"./FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"./FormFields/RuleInput/AddMenuButton.esm.js";import"./FormFields/RuleInput/RuleInputBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"./FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"./FormFields/RuleInput/Conditions/ConditionList.esm.js";import{ScheduleSection as C}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"./FormFields/CheckPathResolverInput.esm.js";import{CheckDetailsStep as b}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as k}from"./Steps/CheckRulesStep.esm.js";import{CheckApplicabilityStep as g}from"./Steps/CheckApplicabilityStep.esm.js";import{CheckReviewStep as v}from"./Steps/CheckReviewStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as y}from"./types/CheckFormTypes.esm.js";import"../Frequency/types.esm.js";import"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";import"./types/Path.esm.js";import{useCheckForm as F}from"./useCheckForm.esm.js";const R=({onSave:p,onClose:r})=>{const{isLoading:n,isReadOnly:e,selectedItem:l}=h(),{formMethods:o,onSubmit:i}=F(p),c=f(),m=[{label:"Enter check details",content:()=>t(b,{})},{label:"Add rules",content:()=>t(k,{})},{label:"Choose the affected entities (Optional)",content:()=>t(g,{})},{label:"Review and test (Optional)",content:()=>t(v,{})},{label:"Set the check schedule (Not Recommended)",content:()=>t(C,{control:o.control,disabled:e})}],a=l?[...Array(m.length).keys()]:[0];return t(s,{className:c.formWrapper,children:t(d,{...o,children:t(S,{children:t("form",{onSubmit:o.handleSubmit(i),children:t(u,{onClose:()=>r?r():void 0,handleSubmit:o.handleSubmit,trigger:o.trigger,onSubmit:i,initialVisited:a,stepNameMap:y,steps:m,isLoading:n,isReadOnly:e,saveButtonText:"Save Check"})})})})})};export{R as CheckForm};
1
+ import{jsx as t}from"react/jsx-runtime";import{Content as s}from"@backstage/core-components";import{FormProvider as d}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as h}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{formStyles as f}from"../../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as S}from"../FactExplorer/FactExplorerContext.esm.js";import{FormStepper as u}from"../FormStepper/FormStepper.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import"./utils/checkFormUtils.esm.js";import"./FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"./FormFields/RuleInput/AddMenuButton.esm.js";import"./FormFields/RuleInput/RuleInputBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import"./FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"./FormFields/RuleInput/Conditions/ConditionList.esm.js";import{ScheduleSection as C}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"./FormFields/CheckPathResolverInput.esm.js";import{CheckDetailsStep as b}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as k}from"./Steps/CheckRulesStep.esm.js";import{CheckApplicabilityStep as g}from"./Steps/CheckApplicabilityStep.esm.js";import{CheckReviewStep as v}from"./Steps/CheckReviewStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as y}from"./types/CheckFormTypes.esm.js";import"../Frequency/types.esm.js";import"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";import"./types/Path.esm.js";import{useCheckForm as F}from"./useCheckForm.esm.js";const R=({onSave:p,onClose:r})=>{const{isLoading:n,isReadOnly:i,selectedItem:l}=h(),{formMethods:o,onSubmit:e}=F(p),c=f(),m=[{label:"Enter check details",content:()=>t(b,{})},{label:"Add rules",content:()=>t(k,{})},{label:"Choose the affected entities (Optional)",content:()=>t(g,{})},{label:"Review and test (Optional)",content:()=>t(v,{})},{label:"Set the check schedule (Not Recommended)",content:()=>t(C,{control:o.control,disabled:i})}],a=l?[...Array(m.length).keys()]:[0];return t(s,{className:c.formWrapper,children:t(d,{...o,children:t(S,{children:t("form",{onSubmit:o.handleSubmit(e),children:t(u,{onClose:()=>r?r():void 0,handleSubmit:o.handleSubmit,trigger:o.trigger,onSubmit:e,initialVisited:a,stepNameMap:y,steps:m,isLoading:n,isReadOnly:i,saveButtonText:"Save Check"})})})})})};export{R as CheckForm};
2
2
  //# sourceMappingURL=CheckForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseFactRef as p,stringifyFactRef as $}from"@spotify/backstage-plugin-soundcheck-common";import{useState as b,useEffect as y,useMemo as f}from"react";import{useWatch as C}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"../../../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as F}from"../../../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useGetCollectors as G}from"../../../../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as O}from"../../../../../hooks/collectors/useGetFactSchema.esm.js";import{generateJsonPaths as L}from"../../../utils/checkFormUtils.esm.js";const M=(o,d)=>{const{data:m,isLoading:h}=G(),{data:i}=F({}),r=C({control:d,name:`${o}.factRef`}),[s,g]=b(()=>l(r));y(()=>{g(l(r))},[r]);const{data:n}=O(s?.source,s?.name),k=f(()=>n?L(n.schema):[],[n]),R=f(()=>m?.flatMap(e=>e.factNames.map(a=>{const t=e.id==="soundcheck"?{source:e.id,scope:"default",name:a}:p(a,{defaultSource:e.id,defaultScope:"default"});let u=t.name;if(t.source==="soundcheck"){const c=i?.edges.find(S=>S.node.id===t.name.replace("track/",""))?.node;u=c?`${c.type==="campaign"?"Campaign: ":"Track: "}${c.name}`:t.name}return{label:`${t.source} - ${u}`,value:$(t)}}))?.sort((e,a)=>e.label.localeCompare(a.label))??[],[m,i]);return{isLoading:h,pathOptions:k,factRefOptions:R}};function l(o){if(o)try{return p(o,{defaultSource:"unknown",defaultScope:"default"})}catch{return null}return null}export{M as useRuleOptions};
1
+ import{parseFactRef as u,stringifyFactRef as $}from"@spotify/backstage-plugin-soundcheck-common";import{useState as b,useEffect as y,useMemo as f}from"react";import{useWatch as C}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"../../../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as F}from"../../../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useGetCollectors as G}from"../../../../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as O}from"../../../../../hooks/collectors/useGetFactSchema.esm.js";import{generateJsonPaths as L}from"../../../utils/checkFormUtils.esm.js";const M=(o,d)=>{const{data:c,isLoading:h}=G(),{data:i}=F({}),a=C({control:d,name:`${o}.factRef`}),[s,g]=b(()=>l(a));y(()=>{g(l(a))},[a]);const{data:m}=O(s?.source,s?.name),k=f(()=>m?L(m.schema):[],[m]),R=f(()=>c?.flatMap(t=>t.factNames.map(r=>{const e=t.id==="soundcheck"?{source:t.id,scope:"default",name:r}:u(r,{defaultSource:t.id,defaultScope:"default"});let p=e.name;if(e.source==="soundcheck"){const n=i?.edges.find(S=>S.node.id===e.name.replace("track/",""))?.node;p=n?`${n.type==="campaign"?"Campaign: ":"Track: "}${n.name}`:e.name}return{label:`${e.source} - ${p}`,value:$(e)}}))?.sort((t,r)=>t.label.localeCompare(r.label))??[],[c,i]);return{isLoading:h,pathOptions:k,factRefOptions:R}};function l(o){if(o)try{return u(o,{defaultSource:"unknown",defaultScope:"default"})}catch{return null}return null}export{M as useRuleOptions};
2
2
  //# sourceMappingURL=useRuleOptions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as o}from"react/jsx-runtime";import{Box as r,Grid as p,Button as y}from"@material-ui/core";import{makeStyles as B}from"@material-ui/core/styles";import{useFormContext as b,useFieldArray as x}from"react-hook-form";import{ExpressionType as N}from"../../types/ExpressionType.esm.js";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import"../../types/Path.esm.js";import{AddMenuButton as $}from"./AddMenuButton.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"@material-ui/icons/Search";import"../../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../../FactExplorer/FactExplorer.esm.js";import"../../../FactExplorer/FactExplorerContext.esm.js";import"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import"../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../utils/checkFormUtils.esm.js";import"./Conditions/ValueListInput.esm.js";import{ConditionList as A}from"./Conditions/ConditionList.esm.js";import{ExpressionBox as E}from"./Expressions/ExpressionBox.esm.js";import{ExpressionTypeToggle as P}from"./Expressions/ExpressionTypeToggle.esm.js";const L=B(e=>({root:{padding:0},inner:{marginLeft:e.spacing(2),paddingBottom:e.spacing(2),borderLeft:`1px solid ${e.palette.border}`,display:"flex",flexDirection:"row",gap:0},connector:{borderBottom:`1px solid ${e.palette.border}`,padding:e.spacing(0),width:"15px",height:"20px"},noPadding:{padding:0},marginBottom:{marginBottom:e.spacing(1)},empty:{border:`1px solid ${e.palette.error.main}`,padding:e.spacing(2),margin:e.spacing(2,0)},gap:{borderLeft:`1px solid ${e.palette.border}`,marginLeft:e.spacing(2)},removeButton:{padding:e.spacing(.5,1.5),color:e.palette.text.primary}})),T=({name:e,depth:m,disabled:t,removeExpression:s})=>{const i=L(),{control:l}=b(),{fields:a,append:f,remove:h}=x({control:l,name:`${e}.expressions`}),{fields:d,append:u,remove:v}=x({control:l,name:`${e}.conditions`});return n(r,{className:m>0?i.inner:i.root,children:[m>0&&o(r,{className:i.connector}),n(p,{container:!0,spacing:0,direction:"column",className:i.noPadding,children:[o(p,{item:!0,className:i.noPadding,children:o(P,{disabled:t,name:`${e}.expressionType`})}),n(p,{item:!0,container:!0,spacing:0,direction:"column",className:i.noPadding,children:[d.length===0&&!a.length&&o(r,{className:i.empty,children:"Add an expression or condition."}),d.length===0&&a.length>0&&o(r,{padding:1,className:i.gap}),o(A,{remove:v,conditions:d,disabled:t,name:e}),a.map((c,g)=>o(E,{exists:!!c,name:`${e}.expressions[${g}]`,depth:m,disabled:t,removeExpression:()=>h(g)},c.id))]}),!t&&o(p,{item:!0,className:i.noPadding,children:n(r,{display:"flex",gridGap:8,children:[o($,{onAddCondition:()=>u({factRef:"",path:"",operator:"",value:""}),onAddExpression:()=>f({expressionType:N.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:""}]})}),s&&o(y,{className:i.removeButton,variant:"text",onClick:s,children:"Remove"})]})})]})]})};export{T as RuleInputBox};
1
+ import{jsxs as n,jsx as o}from"react/jsx-runtime";import{Box as r,Grid as p,Button as y}from"@material-ui/core";import{makeStyles as B}from"@material-ui/core/styles";import{useFormContext as b,useFieldArray as x}from"react-hook-form";import{ExpressionType as N}from"../../types/ExpressionType.esm.js";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import"../../types/Path.esm.js";import{AddMenuButton as $}from"./AddMenuButton.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"@material-ui/icons/Search";import"../../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../../FactExplorer/FactExplorer.esm.js";import"../../../FactExplorer/FactExplorerContext.esm.js";import"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import"../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import"../../utils/checkFormUtils.esm.js";import"./Conditions/ValueListInput.esm.js";import{ConditionList as A}from"./Conditions/ConditionList.esm.js";import{ExpressionBox as E}from"./Expressions/ExpressionBox.esm.js";import{ExpressionTypeToggle as P}from"./Expressions/ExpressionTypeToggle.esm.js";const L=B(e=>({root:{padding:0},inner:{marginLeft:e.spacing(2),paddingBottom:e.spacing(2),borderLeft:`1px solid ${e.palette.border}`,display:"flex",flexDirection:"row",gap:0},connector:{borderBottom:`1px solid ${e.palette.border}`,padding:e.spacing(0),width:"15px",height:"20px"},noPadding:{padding:0},marginBottom:{marginBottom:e.spacing(1)},empty:{border:`1px solid ${e.palette.error.main}`,padding:e.spacing(2),margin:e.spacing(2,0)},gap:{borderLeft:`1px solid ${e.palette.border}`,marginLeft:e.spacing(2)},removeButton:{padding:e.spacing(.5,1.5),color:e.palette.text.primary}})),T=({name:e,depth:m,disabled:t,removeExpression:s})=>{const i=L(),{control:l}=b(),{fields:a,append:f,remove:h}=x({control:l,name:`${e}.expressions`}),{fields:d,append:u,remove:v}=x({control:l,name:`${e}.conditions`});return n(r,{className:m>0?i.inner:i.root,children:[m>0&&o(r,{className:i.connector}),n(p,{container:!0,spacing:0,direction:"column",className:i.noPadding,children:[o(p,{item:!0,className:i.noPadding,children:o(P,{disabled:t,name:`${e}.expressionType`})}),n(p,{item:!0,container:!0,spacing:0,direction:"column",className:i.noPadding,children:[d.length===0&&!a.length&&o(r,{className:i.empty,children:"Add an expression or condition."}),d.length===0&&a.length>0&&o(r,{padding:1,className:i.gap}),o(A,{remove:v,conditions:d,disabled:t,name:e}),a.map((c,g)=>o(E,{exists:!!c,name:`${e}.expressions[${g}]`,depth:m,disabled:t,removeExpression:()=>h(g)},c.id))]}),!t&&o(p,{item:!0,className:i.noPadding,children:n(r,{display:"flex",gridGap:8,children:[o($,{onAddCondition:()=>u({factRef:"",path:"",operator:"",value:""}),onAddExpression:()=>f({expressionType:N.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:""}]})}),s&&o(y,{className:i.removeButton,variant:"text",onClick:s,children:"Remove"})]})})]})]})};export{T as RuleInputBox};
2
2
  //# sourceMappingURL=RuleInputBox.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as i,jsx as e}from"react/jsx-runtime";import{FormControlLabel as b,Switch as y,Typography as m}from"@material-ui/core";import{makeStyles as x}from"@material-ui/core/styles";import{useFormContext as g}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as k}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{FormFieldLabel as s}from"../../FormFieldLabel/FormFieldLabel.esm.js";import{FormFilterSection as v}from"../../FormFilterSection/FormFilterSection.esm.js";import{FormMarkdownInput as C}from"../../FormMarkdownInput/FormMarkdownInput.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CHECK_FIELDS as F}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as N}from"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../FormFields/CheckPathResolverInput.esm.js";import{ExpressionType as S}from"../types/ExpressionType.esm.js";import"../../Frequency/types.esm.js";import"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import"../types/Path.esm.js";const w=x(t=>({container:{display:"flex",flexDirection:"column",gap:t.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),A=()=>{const t=w(),{isLoading:o,isReadOnly:r}=k(),{control:d,watch:c,setValue:a}=g(),p="filtersStep.applicabilityExpressions",n="filtersStep.notApplicableMessage",h=c("detailsStep.type"),l=c(p),f=u=>{u.target.checked?(a(p,{expressionType:S.AllOf,conditions:[{factRef:"",path:"",operator:"",operatorPrefix:"",value:""}]}),a(n,"")):(a(p,void 0),a(n,void 0))};return i("div",{className:t.container,children:[e(v,{includeFilterName:"filtersStep.include",excludeFilterName:"filtersStep.exclude",disabled:o||r,description:F.filter.description}),h!=="manual"&&i("div",{className:t.container,children:[i("div",{className:t.innerContainer,children:[e(b,{label:e(s,{title:"Applicability rule (Optional)",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/#applicability-rule"}),disabled:o||r,control:e(y,{checked:!!l?.conditions||!!l?.expressions,onChange:f})}),e(m,{variant:"caption",children:"The check applies to all entities that match the catalog filters above. If you want to add an extra fact-based applicability rule, turn on the toggle and define the fact-based rule. With this rule enabled, the check will only apply to entities that match both the catalog filters and the fact-based rule. The fact-based rule is re-checked every time the check runs."})]}),(!!l?.conditions||!!l?.expressions)&&i("div",{className:t.container,children:[e("div",{className:t.innerContainer,children:e(N,{disabled:o||r,name:p,depth:0})}),i("div",{className:t.innerContainer,children:[e(s,{title:"Not applicable message (Optional)"}),e(m,{variant:"caption",children:"Add a message explaining why the check doesn't apply if an entity fails the fact-based rule."}),e(C,{name:n,control:d,placeholder:"Enter not applicable message...",disabled:o||r})]})]})]})]})};export{A as CheckApplicabilityStep};
1
+ import{jsxs as i,jsx as e}from"react/jsx-runtime";import{FormControlLabel as b,Switch as y,Typography as m}from"@material-ui/core";import{makeStyles as x}from"@material-ui/core/styles";import{useFormContext as g}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as k}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{FormFieldLabel as s}from"../../FormFieldLabel/FormFieldLabel.esm.js";import{FormFilterSection as v}from"../../FormFilterSection/FormFilterSection.esm.js";import{FormMarkdownInput as C}from"../../FormMarkdownInput/FormMarkdownInput.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CHECK_FIELDS as F}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as N}from"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../FormFields/CheckPathResolverInput.esm.js";import{ExpressionType as S}from"../types/ExpressionType.esm.js";import"../../Frequency/types.esm.js";import"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import"../types/Path.esm.js";const w=x(t=>({container:{display:"flex",flexDirection:"column",gap:t.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),A=()=>{const t=w(),{isLoading:o,isReadOnly:r}=k(),{control:d,watch:c,setValue:a}=g(),p="filtersStep.applicabilityExpressions",n="filtersStep.notApplicableMessage",h=c("detailsStep.type"),l=c(p),f=u=>{u.target.checked?(a(p,{expressionType:S.AllOf,conditions:[{factRef:"",path:"",operator:"",operatorPrefix:"",value:""}]}),a(n,"")):(a(p,void 0),a(n,void 0))};return i("div",{className:t.container,children:[e(v,{includeFilterName:"filtersStep.include",excludeFilterName:"filtersStep.exclude",disabled:o||r,description:F.filter.description}),h!=="manual"&&i("div",{className:t.container,children:[i("div",{className:t.innerContainer,children:[e(b,{label:e(s,{title:"Applicability rule (Optional)",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/#applicability-rule"}),disabled:o||r,control:e(y,{checked:!!l?.conditions||!!l?.expressions,onChange:f})}),e(m,{variant:"caption",children:"The check applies to all entities that match the catalog filters above. If you want to add an extra fact-based applicability rule, turn on the toggle and define the fact-based rule. With this rule enabled, the check will only apply to entities that match both the catalog filters and the fact-based rule. The fact-based rule is re-checked every time the check runs."})]}),(!!l?.conditions||!!l?.expressions)&&i("div",{className:t.container,children:[e("div",{className:t.innerContainer,children:e(N,{disabled:o||r,name:p,depth:0})}),i("div",{className:t.innerContainer,children:[e(s,{title:"Not applicable message (Optional)"}),e(m,{variant:"caption",children:"Add a message explaining why the check doesn't apply if an entity fails the fact-based rule."}),e(C,{name:n,control:d,placeholder:"Enter not applicable message...",disabled:o||r})]})]})]})]})};export{A as CheckApplicabilityStep};
2
2
  //# sourceMappingURL=CheckApplicabilityStep.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as e,jsx as t}from"react/jsx-runtime";import{makeStyles as n}from"@material-ui/core/styles";import{useFormContext as s}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as a}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{CheckNameInput as c}from"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CheckDescriptionInput as l}from"../FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js";import{TeamDetailsInput as d}from"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/core";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../utils/checkFormUtils.esm.js";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../FormFields/CheckPathResolverInput.esm.js";import{CheckTypeInput as f}from"../FormFields/CheckTypeInput/CheckTypeInput.esm.js";const u=n(i=>({container:{display:"flex",flexDirection:"column",gap:i.spacing(1)}})),x=()=>{const i=u(),{isLoading:m,isReadOnly:o}=a(),{control:r,formState:{errors:p}}=s();return e("div",{className:i.container,children:[t(c,{control:r,error:p?.detailsStep?.name,isLoading:m,disabled:o}),t(l,{control:r,error:p?.detailsStep?.description,isLoading:m,disabled:o}),t(d,{control:r,disabled:o,error:p?.detailsStep?.ownerEntityRef}),t(f,{control:r,disabled:o,isLoading:m})]})};export{x as CheckDetailsStep};
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{makeStyles as n}from"@material-ui/core/styles";import{useFormContext as s}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as a}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{CheckNameInput as c}from"../FormFields/CheckNameInput/CheckNameInput.esm.js";import"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import{CheckDescriptionInput as l}from"../FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js";import{TeamDetailsInput as d}from"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/core";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import"../utils/checkFormUtils.esm.js";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../FormFields/CheckPathResolverInput.esm.js";import{CheckTypeInput as f}from"../FormFields/CheckTypeInput/CheckTypeInput.esm.js";const u=n(i=>({container:{display:"flex",flexDirection:"column",gap:i.spacing(1)}})),x=()=>{const i=u(),{isLoading:m,isReadOnly:o}=a(),{control:r,formState:{errors:p}}=s();return e("div",{className:i.container,children:[t(c,{control:r,error:p?.detailsStep?.name,isLoading:m,disabled:o}),t(l,{control:r,error:p?.detailsStep?.description,isLoading:m,disabled:o}),t(d,{control:r,disabled:o,error:p?.detailsStep?.ownerEntityRef}),t(f,{control:r,disabled:o,isLoading:m})]})};export{x as CheckDetailsStep};
2
2
  //# sourceMappingURL=CheckDetailsStep.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,Fragment as h,jsx as e}from"react/jsx-runtime";import{Typography as t,FormControlLabel as u,Checkbox as f}from"@material-ui/core";import{makeStyles as C}from"@material-ui/core/styles";import{useFormContext as s,Controller as v}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as g}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{FormFieldLabel as k}from"../../FormFieldLabel/FormFieldLabel.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import{PassFailMessageInput as x}from"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as y}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as b}from"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import{CheckPathResolverInput as F}from"../FormFields/CheckPathResolverInput.esm.js";const S=C(o=>({container:{display:"flex",flexDirection:"column",gap:o.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),L=()=>{const o=S(),{isLoading:c,isReadOnly:n}=g(),{control:m}=s(),{rules:p,warnings:a}=y.rulesStep,{watch:d}=s(),i=d("detailsStep.type");return r(h,{children:[i==="manual"&&e("div",{className:o.container,children:e("div",{className:o.innerContainer,children:e(t,{children:"Rules do not apply to manual checks. These types of checks are meant to have their state manually set by users, not executed by Soundcheck."})})}),(i==="default"||i===void 0||i===null)&&r("div",{className:o.container,children:[r("div",{className:o.innerContainer,children:[e(F,{control:m}),r("div",{children:[e(k,{title:p.name,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks#rules"}),e(t,{variant:"caption",children:p.description})]}),e(b,{disabled:n,name:"rulesStep.expressions",depth:0})]}),e(x,{control:m,isLoading:c,disabled:n}),e("div",{className:o.container,children:r("div",{className:o.innerContainer,children:[r("div",{children:[e(t,{variant:"subtitle2",children:a.name}),e(t,{variant:"caption",children:a.description})]}),e(v,{name:"rulesStep.warning",control:m,render:({field:l})=>e(u,{disabled:n,control:e(f,{checked:l.value,onChange:l.onChange}),label:a.label})})]})})]})]})};export{L as CheckRulesStep};
1
+ import{jsxs as r,Fragment as h,jsx as e}from"react/jsx-runtime";import{Typography as t,FormControlLabel as u,Checkbox as f}from"@material-ui/core";import{makeStyles as C}from"@material-ui/core/styles";import{useFormContext as s,Controller as v}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as g}from"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react";import"../../../contexts/UserProvider.esm.js";import{FormFieldLabel as k}from"../../FormFieldLabel/FormFieldLabel.esm.js";import"../FormFields/CheckNameInput/CheckNameInput.esm.js";import{PassFailMessageInput as x}from"../FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as y}from"../utils/checkFormUtils.esm.js";import"../FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../FormFields/RuleInput/AddMenuButton.esm.js";import{RuleInputBox as b}from"../FormFields/RuleInput/RuleInputBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"@material-ui/icons/Search";import"../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../FactExplorer/FactExplorer.esm.js";import"../../FactExplorer/FactExplorerContext.esm.js";import"../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import"../FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../FormFields/CheckScheduleSection/ScheduleSection.esm.js";import{CheckPathResolverInput as F}from"../FormFields/CheckPathResolverInput.esm.js";const S=C(o=>({container:{display:"flex",flexDirection:"column",gap:o.spacing(2)},innerContainer:{display:"flex",flexDirection:"column"}})),L=()=>{const o=S(),{isLoading:c,isReadOnly:n}=g(),{control:m}=s(),{rules:p,warnings:a}=y.rulesStep,{watch:d}=s(),i=d("detailsStep.type");return r(h,{children:[i==="manual"&&e("div",{className:o.container,children:e("div",{className:o.innerContainer,children:e(t,{children:"Rules do not apply to manual checks. These types of checks are meant to have their state manually set by users, not executed by Soundcheck."})})}),(i==="default"||i===void 0||i===null)&&r("div",{className:o.container,children:[r("div",{className:o.innerContainer,children:[e(F,{control:m}),r("div",{children:[e(k,{title:p.name,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks#rules"}),e(t,{variant:"caption",children:p.description})]}),e(b,{disabled:n,name:"rulesStep.expressions",depth:0})]}),e(x,{control:m,isLoading:c,disabled:n}),e("div",{className:o.container,children:r("div",{className:o.innerContainer,children:[r("div",{children:[e(t,{variant:"subtitle2",children:a.name}),e(t,{variant:"caption",children:a.description})]}),e(v,{name:"rulesStep.warning",control:m,render:({field:l})=>e(u,{disabled:n,control:e(f,{checked:l.value,onChange:l.onChange}),label:a.label})})]})})]})]})};export{L as CheckRulesStep};
2
2
  //# sourceMappingURL=CheckRulesStep.esm.js.map
@@ -1,2 +1,2 @@
1
- import{zodResolver as p}from"@hookform/resolvers/zod";import{useForm as u}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import"react";import{useLoggedInUser as l}from"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as f}from"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{mapCheckerToFormValues as d,mapToCheckerInput as h,DEFAULT_FORM_VALUES as C}from"./utils/checkFormUtils.esm.js";import{manualCheckFormSchema as S,defaultCheckFormSchema as k}from"./utils/validation.esm.js";const F=a=>{const{selectedItem:r}=c(),{userEntityRef:m}=l();let e=C;r&&(e=d(r)),m&&!e.detailsStep.ownerEntityRef&&(e.detailsStep.ownerEntityRef=m);const s=u({defaultValues:e,mode:"onChange",resolver:(o,t,i)=>o.detailsStep.type==="manual"?p(S)(o,t,i):p(k)(o,t,i)}),{showModal:n}=f();return{formMethods:s,onSubmit:async o=>{if(!await n({title:"Save Check",message:`Are you sure you want to save check: ${o.detailsStep.name}?`,error:!1}))return;const t=h(o,r);a(t)}}};export{F as useCheckForm};
1
+ import{zodResolver as p}from"@hookform/resolvers/zod";import{useForm as u}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import"react";import{useLoggedInUser as l}from"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as f}from"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{mapCheckerToFormValues as d,mapToCheckerInput as h,DEFAULT_FORM_VALUES as C}from"./utils/checkFormUtils.esm.js";import{manualCheckFormSchema as S,defaultCheckFormSchema as k}from"./utils/validation.esm.js";const F=a=>{const{selectedItem:r}=c(),{userEntityRef:m}=l();let t=C;r&&(t=d(r)),m&&!t.detailsStep.ownerEntityRef&&(t.detailsStep.ownerEntityRef=m);const s=u({defaultValues:t,mode:"onChange",resolver:(o,e,i)=>o.detailsStep.type==="manual"?p(S)(o,e,i):p(k)(o,e,i)}),{showModal:n}=f();return{formMethods:s,onSubmit:async o=>{if(!await n({title:"Save Check",message:`Are you sure you want to save check: ${o.detailsStep.name}?`,error:!1}))return;const e=h(o,r);a(e)}}};export{F as useCheckForm};
2
2
  //# sourceMappingURL=useCheckForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as d,Fragment as h,jsx as o}from"react/jsx-runtime";import{useRouteRef as m}from"@backstage/core-plugin-api";import{usePermission as f}from"@backstage/plugin-permission-react";import{HeaderPage as k}from"@backstage/ui";import{soundcheckCheckUpdatePermission as l}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as u}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as g}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCheck as C}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{checkDetailsRouteRef as P,checksPageRouteRef as R}from"../../routes.esm.js";import{DocLinkButton as b}from"../DocLinkButton/DocLinkButton.esm.js";import{LoadingIndicator as E}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as w}from"../PageWarningMessage/PageWarningMessage.esm.js";import{CheckEditView as I}from"./CheckEditView.esm.js";const x=()=>{const{checkId:e}=u(),{data:r,isLoading:c}=C(e),{loading:s,allowed:p}=f({permission:l,resourceRef:e}),t=s||c,i=p&&r?.isEditable,a=m(P),n=m(R);return d(h,{children:[o(k,{title:`Edit ${r?.name??e??"Check"}`,breadcrumbs:[{label:"All Checks",href:n()},{label:"Details",href:a({checkId:e??""})}],customActions:o(b,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),o(w,{entityName:"check",entityId:e,showCannotEdit:!t&&!i,showNotFound:!t&&!r}),t&&o(E,{}),o(g,{children:!t&&!!r&&i&&o(I,{check:r})})]})};export{x as CheckEditPage};
1
+ import{jsxs as d,Fragment as h,jsx as o}from"react/jsx-runtime";import{useRouteRef as m}from"@backstage/core-plugin-api";import{usePermission as f}from"@backstage/plugin-permission-react";import{HeaderPage as k}from"@backstage/ui";import{soundcheckCheckUpdatePermission as l}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as u}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as g}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCheck as C}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{checkDetailsRouteRef as P,checksPageRouteRef as R}from"../../routes.esm.js";import{DocLinkButton as b}from"../DocLinkButton/DocLinkButton.esm.js";import{LoadingIndicator as E}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as w}from"../PageWarningMessage/PageWarningMessage.esm.js";import{CheckEditView as I}from"./CheckEditView.esm.js";const x=()=>{const{checkId:e}=u(),{data:r,isLoading:c}=C(e),{loading:s,allowed:p}=f({permission:l,resourceRef:e}),t=s||c,i=p&&r?.isEditable,a=m(P),n=m(R);return d(h,{children:[o(k,{title:`Edit ${r?.name??e??"Check"}`,breadcrumbs:[{label:"All Checks",href:n()},{label:"Details",href:a({checkId:e??""})}],customActions:o(b,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),o(w,{entityName:"check",entityId:e,showCannotEdit:!t&&!i,showNotFound:!t&&!r}),t&&o(E,{}),o(g,{children:!t&&!!r&&i&&o(I,{check:r})})]})};export{x as CheckEditPage};
2
2
  //# sourceMappingURL=CheckEditPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as d}from"react/jsx-runtime";import{useEffect as i}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as m}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCheck as f}from"../../hooks/checks/useUpdateCheck.esm.js";import{checksPageRouteRef as h}from"../../routes.esm.js";import{CheckForm as g}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as l}from"../SoundcheckHeader/useHeader.esm.js";const C=({check:t})=>{const{selectedItem:c,setSelectedItem:o}=m(),{setIsLoading:e}=m(),{mutateAsync:s,isLoading:r}=f();i(()=>{e(r)},[e,r]),i(()=>{o(t)},[t,o]);const[p,a]=u(h),n=async k=>{await s(k,{onSuccess:a})};return l({title:"Edit a Check",description:"Make changes to your check\u2019s facts, rules and other details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),c&&d(g,{onClose:p,onSave:n})};export{C as CheckEditView};
1
+ import{jsx as d}from"react/jsx-runtime";import{useEffect as i}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as m}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useUpdateCheck as f}from"../../hooks/checks/useUpdateCheck.esm.js";import{checksPageRouteRef as h}from"../../routes.esm.js";import{CheckForm as g}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as l}from"../SoundcheckHeader/useHeader.esm.js";const C=({check:t})=>{const{selectedItem:c,setSelectedItem:o}=m(),{setIsLoading:e}=m(),{mutateAsync:p,isLoading:r}=f();i(()=>{e(r)},[e,r]),i(()=>{o(t)},[t,o]);const[s,a]=u(h),n=async k=>{await p(k,{onSuccess:a})};return l({title:"Edit a Check",description:"Make changes to your check\u2019s facts, rules and other details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),c&&d(g,{onClose:s,onSave:n})};export{C as CheckEditView};
2
2
  //# sourceMappingURL=CheckEditView.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as r,jsxs as m,Fragment as W}from"react/jsx-runtime";import{parseEntityRef as ue}from"@backstage/catalog-model";import{useRouteRef as P}from"@backstage/core-plugin-api";import{usePermission as ke}from"@backstage/plugin-permission-react";import{Container as Y,HeaderPage as ge,Flex as w,Box as F}from"@backstage/ui";import{makeStyles as Ee}from"@material-ui/core";import{toEntityFilterQuery as x,combineEntityFilterQueries as Se,soundcheckCheckReadPermission as Ie}from"@spotify/backstage-plugin-soundcheck-common";import{useState as L,useMemo as a,useEffect as Te}from"react";import{useSearchParams as be,useParams as ye}from"react-router-dom";import Ce 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 Re}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as ve}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as Ne}from"../../hooks/aggregations/useCheckStatus.esm.js";import"react-use/lib/useLocalStorage";import{useFixMe as Pe}from"../../hooks/fixMe/useFixMe.esm.js";import{useFilters as we}from"../../hooks/filters/useFilters.esm.js";import{useLCPReporting as Fe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as xe}from"../../hooks/useLoadTimeReporting.esm.js";import{trackDetailsRouteRef as Le,checksPageRouteRef as Me,tracksPageRouteRef as Ae}from"../../routes.esm.js";import"../../utils/facetFilters/types.esm.js";import{parseNumberOfDays as je}from"../../utils/facetFilters/utils.esm.js";import{DescriptionCard as Be}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{CheckStatusCard as Oe}from"../Cards/CheckStatusCard/CheckStatusCard.esm.js";import{HistoricalCheckStatusCard as De}from"../Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js";import{checkPullRequestsMockData as qe}from"../ChecksTable/PullRequestsTable.esm.js";import{ChipSelector as Ue}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as M}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import"lodash";import{toFilter as Ve}from"../FilterSidebar/util.esm.js";import{FixMeButton as Xe}from"../FixMeButton/FixMeButton.esm.js";import{LoadingTableSkeleton as $e}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Qe}from"../Menus/SimpleMenu.esm.js";import{useCheckActions as He}from"../Menus/useCheckActions.esm.js";import{PageCustomActions as Je}from"../PageCustomActions/PageCustomActions.esm.js";import{ViewPullRequests as Ke}from"../ViewPullRequests/ViewPullRequests.esm.js";import{CheckEntitiesTableBUI as We}from"./CheckEntitiesTable/CheckEntitiesTableBUI.esm.js";import{ExemptionsTableBUI as Ye}from"./ExemptionsTableBUI.esm.js";const Ze=Ee(()=>({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"},_e={entities:s.ENTITIES,exemptions:s.EXEMPTIONS},ze={[s.ENTITIES]:"entities",[s.EXEMPTIONS]:"exemptions"},Ge=(h,e)=>h.levels.flatMap(({checks:p})=>p).find(({id:p})=>p===e)||null,et=()=>{const h=Ze(),[e,p]=be(),{trackId:o,checkId:i}=ye(),{data:c,isLoading:g,isError:Z}=ve(o),{data:d,isLoading:k,isError:_}=Re(i),A=d?.ownerEntityRef,z=A?ue(A).name:void 0,j=He(d??void 0),G=P(Le),ee=P(Me),te=P(Ae),[B,re]=L(()=>{const t=e.get("section"),u=t?_e[t]:null;return new Set([u??s.ENTITIES])}),b=B.values().next().value??s.ENTITIES,[f,O]=L(e.get("search")||""),[D,ie]=L(""),oe=t=>{re(t),O("");const u=t.values().next().value,K=u?ze[u]:void 0;K?p({section:K},{replace:!0}):p({},{replace:!0})},n=a(()=>e.getAll("states"),[e]),E=a(()=>e.getAll("owners"),[e]),S=a(()=>e.getAll("lifecycles"),[e]),I=a(()=>e.getAll("types"),[e]),T=a(()=>e.getAll("systems"),[e]),y=a(()=>je(e.get("numberOfDays")),[e]);Ce(()=>{ie(f);const t=new URLSearchParams(e.toString());f?t.set("search",f):t.delete("search"),p(t,{replace:!0})},300,[f]);const q=a(()=>({routeName:"soundcheck-check-insights",additionalAttributes:{checkId:i||"",trackId:o||"",filtersApplied:E.length+S.length+I.length+T.length+n.length,ownersFilter:E.join(",")||"",lifecyclesFilter:S.join(",")||"",typesFilter:I.join(",")||"",systemsFilter:T.join(",")||"",statesFilter:n.join(",")||"",numberOfDays:y,checkSearch:D}}),[i,o,E,S,I,T,n,y,D]),{reportContentLoaded:U}=xe(q),{reporter:se}=Fe(q),l=a(()=>d??c?.levels.flatMap(t=>t.checks).find(t=>t.id===i),[d,i,c?.levels]),C=Ve({lifecycles:S,owners:E,types:I,systems:T}),{data:R,isLoading:v,isError:ae}=Ne({checkId:i,trackId:o,filter:C,states:n?.length?n:void 0},!!i),{showFixMeButton:ce,hasShift:V,isRunning:X,href:ne}=Pe({type:d?.type,rule:d?.rule,checkStatus:R,checkId:i??""});let N;if(i)if(c){const t=x(c.filter),u=x(Ge(c,i)?.filter);N=Se(t,u)}else l?.filter&&(N=x(l.filter));const{loading:$,allowed:Q}=ke({permission:Ie,resourceRef:i}),le=a(()=>!!l&&!$&&!Q,[Q,l,$]),{filters:me,selected:pe,setSelected:he,onRemoveTag:de,selectedTags:fe}=we({entityFilterQuery:N,hasStatusFilters:!0}),H=Z||_||ae,J=se?.getLCPValue();return Te(()=>{!k&&!v&&(!o||!g)&&U({lcp:J})},[k,v,g,o,U,J]),k||o&&g?r($e,{}):!k&&!l?r(Y,{className:h.container,children:r(M,{title:"Check not found",body:`There is no check with the requested id: ${i}.`})}):le?r(M,{title:"Cannot view check",body:`No permission to view check with the requested id: ${i}.`}):o&&!g&&!c?r(M,{title:"No track found",body:`There is no track with the requested id: ${o}.`}):m(W,{children:[r(ge,{title:l?.name??"",breadcrumbs:o?[{label:"Tracks",href:te()},{label:c?.name??"Track",href:G({trackId:o})}]:[{label:"Checks",href:ee()}],customActions:r(Qe,{label:"Check Actions",disabled:!j.length,placement:"left top",menuActions:j})}),m(Y,{className:h.container,children:[m(w,{children:[r(Be,{description:l?.description??void 0,owner:z,isError:H,isLoading:k}),r(Oe,{states:n,status:R,isLoading:v,isError:H}),r(De,{checkId:i,trackId:o,filter:C,states:n,checkStatus:R,numberOfDays:y})]}),m(F,{className:h.tables,children:[m(w,{justify:"between",children:[r(F,{minWidth:"12rem",children:r(Ue,{options:Object.values(s),selected:B,ariaLabel:"Sections",onSelectionChange:oe})}),m(w,{align:"center",gap:"4",children:[ce&&m(W,{children:[(V||X)&&r(Ke,{checkName:l?.name,pullRequests:qe}),r(Xe,{hasShift:V,href:ne,isRunning:X})]}),r(Je,{searchValue:f,setSearchValue:t=>O(t),filters:me,selected:pe,setSelected:he,onRemoveTag:de,selectedTags:fe,showSearch:b!==s.ENTITIES})]})]}),m(F,{className:h.tableContent,children:[b===s.ENTITIES&&r(We,{checkId:i,trackId:c?.id,filter:C,states:n}),b===s.EXEMPTIONS&&r(Ye,{checkId:i,searchValue:f})]})]})]})]})};export{et as CheckPageBUI};
2
2
  //# sourceMappingURL=CheckPageBUI.esm.js.map
@@ -1,2 +1,2 @@
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};
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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";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{jsxs as n,Fragment as B,jsx as o}from"react/jsx-runtime";import{makeStyles as E,Box as i,Checkbox as N,Typography as O,FormHelperText as A,Tooltip as L,Button as z}from"@material-ui/core";import R from"@material-ui/icons/CheckCircleOutlined";import P from"@material-ui/icons/InfoOutlined";import{isEmpty as j,last as D,difference as F}from"lodash";import{useContext as v,useMemo as g}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useGetChecks as G}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as M}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{CheckPreviewContext as S}from"./CheckPreviewContext.esm.js";const y=E(e=>({checkSelectCard:{padding:e.spacing(1,2),border:`1px solid ${e.palette.divider}`,borderRadius:e.spacing(.25),"&:hover":{cursor:"pointer"},display:"flex",alignItems:"center",background:e.palette.background.default,minWidth:200},selectedCard:{border:`1px solid ${e.palette.border}`},selectedIcon:{color:e.palette.text.secondary},checkCardInfo:{textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},selectArea:{display:"flex",flexDirection:"column",gap:e.spacing(.75)},removeButton:{margin:0,marginLeft:e.spacing(1),padding:0,color:e.palette.text.primary},wrapper:{padding:e.spacing(1),border:`1px solid ${e.palette.divider}`,borderRadius:e.spacing(1)},wrapperError:{border:`1px solid ${e.palette.error.main}`},checkSearch:{background:e.palette.background.paper}})),H=({check:e,removeCheck:f,isExternal:p})=>{const c=y(),{updateCheck:k,check:x}=v(S),d=e&&x?.id===e.id;return e?n(i,{className:`${c.checkSelectCard} ${d?c.selectedCard:""}`,onClick:()=>k(e),children:[o(R,{className:d?c.selectedIcon:"",fontSize:"small"}),o(i,{className:c.checkCardInfo,flex:1,marginLeft:2,children:e.name}),p&&o(i,{display:"flex",alignItems:"center",marginRight:1,children:o(L,{title:"Externally submitted check",placement:"top",arrow:!0,children:o(P,{fontSize:"small",color:"action",style:{cursor:"help"}})})}),!p&&o(z,{onClick:l=>{l.stopPropagation(),f(e.id)},className:c.removeButton,variant:"text",size:"small","aria-label":`remove check ${e.id}`,children:"Remove"})]}):null},V=({currentSectionCheckIds:e,addCheckToSelection:f,removeCheck:p,error:c,helperText:k,blankText:x,selectedChecks:d})=>{const l=y(),{data:b,isLoading:w}=G({ids:void 0}),{updateCheck:I}=v(S),u=g(()=>b?.edges.map(r=>r.node)??[],[b]),s=g(()=>new Set(u.map(r=>r.id)),[u]),m=g(()=>{const r=(d??[]).filter(t=>!s.has(t.id)).map(t=>({...t,description:t.description??""}));return[...u,...r]},[u,s,d]),C=g(()=>new Map(m.map(r=>[r.id,r])),[m]),$=g(()=>m.map(r=>r.id)??[],[m]),T=r=>{if(r.length>e.length){const t=D(r),a=m.find(h=>h.id===t);f(a),a&&I(a)}if(r.length<e.length){const t=F(e,r)?.[0];t&&p(t)}};return n(B,{children:[n(i,{className:`${l.wrapper} ${c?l.wrapperError:""}`,children:[o(i,{className:l.checkSearch,marginBottom:1,children:o(M,{multiple:!0,disableCloseOnSelect:!0,options:$,getOptionDisabled:r=>!s.has(r),renderOption:(r,{selected:t})=>{const a=C.get(r),h=!s.has(r);return n(i,{display:"flex",alignItems:"center",gridGap:4,style:{opacity:h?.5:1},children:[o(N,{checked:t,size:"small",color:"primary",disabled:h}),n(i,{children:[a?a.name:r,h&&" (External)"]})]})},getOptionLabel:r=>C.get(r)?.name??r,multipleValue:e,onChange:T,isLoading:w,placeholder:"Check Search",autoSelect:!1,testId:"check-search",getOptionSelected:(r,t)=>t.includes(r)})}),n(i,{className:l.selectArea,children:[j(e)&&o(i,{marginTop:1,marginBottom:1,textAlign:"center",children:o(O,{children:x??"Select checks from the dropdown above."})}),e.map(r=>{const t=C.get(r),a=t?!s.has(t.id):!1;return o(H,{removeCheck:p,check:t,isExternal:a},r)})]})]}),k&&o(A,{error:c,children:k})]})};export{V as CheckSelection};
1
+ import{jsxs as n,Fragment as B,jsx as o}from"react/jsx-runtime";import{makeStyles as E,Box as i,Checkbox as N,Typography as O,FormHelperText as A,Tooltip as L,Button as z}from"@material-ui/core";import R from"@material-ui/icons/CheckCircleOutlined";import P from"@material-ui/icons/InfoOutlined";import{isEmpty as j,last as D,difference as F}from"lodash";import{useContext as v,useMemo as g}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useGetChecks as G}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as M}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{CheckPreviewContext as S}from"./CheckPreviewContext.esm.js";const y=E(e=>({checkSelectCard:{padding:e.spacing(1,2),border:`1px solid ${e.palette.divider}`,borderRadius:e.spacing(.25),"&:hover":{cursor:"pointer"},display:"flex",alignItems:"center",background:e.palette.background.default,minWidth:200},selectedCard:{border:`1px solid ${e.palette.border}`},selectedIcon:{color:e.palette.text.secondary},checkCardInfo:{textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},selectArea:{display:"flex",flexDirection:"column",gap:e.spacing(.75)},removeButton:{margin:0,marginLeft:e.spacing(1),padding:0,color:e.palette.text.primary},wrapper:{padding:e.spacing(1),border:`1px solid ${e.palette.divider}`,borderRadius:e.spacing(1)},wrapperError:{border:`1px solid ${e.palette.error.main}`},checkSearch:{background:e.palette.background.paper}})),H=({check:e,removeCheck:f,isExternal:p})=>{const c=y(),{updateCheck:k,check:x}=v(S),d=e&&x?.id===e.id;return e?n(i,{className:`${c.checkSelectCard} ${d?c.selectedCard:""}`,onClick:()=>k(e),children:[o(R,{className:d?c.selectedIcon:"",fontSize:"small"}),o(i,{className:c.checkCardInfo,flex:1,marginLeft:2,children:e.name}),p&&o(i,{display:"flex",alignItems:"center",marginRight:1,children:o(L,{title:"Externally submitted check",placement:"top",arrow:!0,children:o(P,{fontSize:"small",color:"action",style:{cursor:"help"}})})}),!p&&o(z,{onClick:l=>{l.stopPropagation(),f(e.id)},className:c.removeButton,variant:"text",size:"small","aria-label":`remove check ${e.id}`,children:"Remove"})]}):null},V=({currentSectionCheckIds:e,addCheckToSelection:f,removeCheck:p,error:c,helperText:k,blankText:x,selectedChecks:d})=>{const l=y(),{data:b,isLoading:w}=G({ids:void 0}),{updateCheck:I}=v(S),u=g(()=>b?.edges.map(r=>r.node)??[],[b]),s=g(()=>new Set(u.map(r=>r.id)),[u]),m=g(()=>{const r=(d??[]).filter(t=>!s.has(t.id)).map(t=>({...t,description:t.description??""}));return[...u,...r]},[u,s,d]),C=g(()=>new Map(m.map(r=>[r.id,r])),[m]),$=g(()=>m.map(r=>r.id)??[],[m]),T=r=>{if(r.length>e.length){const t=D(r),a=m.find(h=>h.id===t);f(a),a&&I(a)}if(r.length<e.length){const t=F(e,r)?.[0];t&&p(t)}};return n(B,{children:[n(i,{className:`${l.wrapper} ${c?l.wrapperError:""}`,children:[o(i,{className:l.checkSearch,marginBottom:1,children:o(M,{multiple:!0,disableCloseOnSelect:!0,options:$,getOptionDisabled:r=>!s.has(r),renderOption:(r,{selected:t})=>{const a=C.get(r),h=!s.has(r);return n(i,{display:"flex",alignItems:"center",gridGap:4,style:{opacity:h?.5:1},children:[o(N,{checked:t,size:"small",color:"primary",disabled:h}),n(i,{children:[a?a.name:r,h&&" (External)"]})]})},getOptionLabel:r=>C.get(r)?.name??r,multipleValue:e,onChange:T,isLoading:w,placeholder:"Check Search",autoSelect:!1,testId:"check-search",getOptionSelected:(r,t)=>t.includes(r)})}),n(i,{className:l.selectArea,children:[j(e)&&o(i,{marginTop:1,marginBottom:1,textAlign:"center",children:o(O,{children:x??"Select checks from the dropdown above."})}),e.map(r=>{const t=C.get(r),a=t?!s.has(t.id):!1;return o(H,{removeCheck:p,check:t,isExternal:a},r)})]})]}),k&&o(A,{error:c,children:k})]})};export{V as CheckSelection};
2
2
  //# sourceMappingURL=CheckSelection.esm.js.map
@@ -1,2 +1,2 @@
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};
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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";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 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};
1
+ import{jsx as t,jsxs as p,Fragment as H}from"react/jsx-runtime";import{useRouteRef as O}from"@backstage/core-plugin-api";import{Row as V,CellText as T,Flex as W,Box as F,Text as _,TableRoot as q,TableHeader as J,Column as S,TableBody as K,TablePagination as Q}from"@backstage/ui";import{makeStyles as X}from"@material-ui/core";import{sortBy as Y}from"lodash";import{memo as N,useMemo as k,useState as z,useEffect as Z,useCallback as ee}from"react";import{CircularProgressbar as te}from"react-circular-progressbar";import{useNavigate as re}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as oe}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as ie}from"../../hooks/useSortSearchParams.esm.js";import{isCheckFailed as se}from"../../hooks/fixMe/useFixMe.esm.js";import{useFeatureFlag as D}from"../../hooks/useFeatureFlag.esm.js";import{trackCheckDetailsRouteRef as ne}from"../../routes.esm.js";import{getPercentage as M}from"../../utils/formatters.esm.js";import"../CheckStatusBar/CheckStatusBar.esm.js";import{CheckStatusBarBUI as ae}from"../CheckStatusBar/CheckStatusBarBUI.esm.js";import{CustomCell as ce}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as le}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{FixMeCell as me}from"./FixMeCell.esm.js";const de=X(()=>({statusBar:{width:"45%"},customCell:{padding:"0 var(--bui-space-3)"},circularProgressbar:{width:"var(--bui-space-7)"}})),$=10,pe=["compliance","name","checks"],v=o=>pe.includes(o),ue=N(()=>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)"})]})})})),E=(o,i)=>i?.find(a=>a.id===o),G=o=>o?o.numberOfEntities-o.notApplicable-o.exempt:0,ge=N(({trackId:o,check:i,checkStatuses:a,searchParams:u,showFixMeColumn:c})=>{const P=de(),n=O(ne),b=re(),l=E(i.id,a),{passPercent:g,applicableChecks:h}=k(()=>{const s=G(l);return{passPercent:M(l?.passed,s),applicableChecks:s}},[l]);return p(V,{onAction:()=>{const s=n({trackId:o,checkId:i.id});b(u?`${s}${u}`:s)},children:[t(T,{leadingIcon:p("div",{className:P.circularProgressbar,title:`${g}%`,children:[t(ue,{}),t(te,{value:g,strokeWidth:12,styles:{path:{stroke:"url(#progressGradient)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})]}),title:`${g}%`}),t(T,{title:i.name}),t(ce,{children:p(W,{align:"center",gap:"3",justify:"between",children:[t(F,{children:p(_,{color:"secondary",children:[l?.passed??0," of ",h," checks passing"]})}),t(F,{className:P.statusBar,children:t(ae,{status:l})})]})}),t(me,{status:l,check:i,isColumnVisible:c})]},i.id)}),he=({trackId:o,checks:i,checkStatuses:a,searchValue:u,levelOrdinal:c})=>{const{updateSortParams:P,searchParams:n}=ie(),b=D("portal"),l=D("portal-ai-fm"),g=n.get("level"),h=c===void 0||g!==null&&String(c)===g,[s,y]=z(()=>{if(h){const e=n.get("sortDirection");if(e==="ascending"||e==="descending")return e}return"descending"}),[f,B]=z(()=>{if(h){const e=n.get("sort");if(e&&v(e))return e}return"compliance"}),L=k(()=>{const e=new URLSearchParams(n.toString());e.set("sort",f),e.set("sortDirection",s),typeof c=="number"?e.set("level",String(c)):e.delete("level");const r=e.toString();return r?`?${r}`:""},[c,n,f,s]);Z(()=>{if(!h)return;const e=n.get("sortDirection");(e==="ascending"||e==="descending")&&y(e);const r=n.get("sort");r&&v(r)&&B(r)},[h,n]);const U=ee(({direction:e,column:r})=>{const d=String(r);v(d)&&B(d),y(e),P({sort:v(d)?d:"compliance",sortDirection:e,level:c})},[c,P]),I=k(()=>{if(!u?.length)return i??[];const e=u.toLowerCase();return i?.filter(({name:r})=>r.toLowerCase().includes(e))??[]},[i,u]),C=k(()=>{const e=Y([...I],r=>{const d=E(r.id,a);if(f==="compliance"){const A=G(d);return M(d?.passed,A)}return f==="checks"?d?.passed:r.name.toLowerCase()});return s==="descending"&&e.reverse(),e},[I,a,f,s]),{paginatedItems:w,paginationProps:m}=oe({pageParam:"perPage",defaultPageSize:$,items:C}),j=C.length>$,R=k(()=>{const e=new Map;return(a??[]).forEach(r=>e.set(r.id,r)),e},[a]),x=k(()=>!b||!l?!1:w.some(e=>{const r=R.get(e.id);return se(r)}),[b,l,w,R]);return C?.length?p(H,{children:[p(q,{onSortChange:U,sortDescriptor:{direction:s,column:f},children:[p(J,{children:[t(S,{id:"compliance",allowsSorting:!0,style:{width:"10%"},children:"Compliance"}),t(S,{id:"name",allowsSorting:!0,isRowHeader:!0,children:"Name"}),t(S,{id:"checks",allowsSorting:!0,style:{width:"25%"},children:"Checks"}),t(S,{id:"fix-me",style:{width:x?"20%":0,padding:x?void 0:0}})]}),t(K,{children:w.map(e=>t(ge,{trackId:o,check:e,checkStatuses:a,searchParams:L,showFixMeColumn:x},e.id))})]}),j&&t(Q,{totalCount:C.length,offset:m.offset,hasNextPage:m.offset+m.pageSize<(C.length??0),hasPreviousPage:m.offset>0,onNextPage:m.onNextPage,onPreviousPage:m.onPreviousPage,onPageSizeChange:m.onPageSizeChange,pageSize:m.pageSize})]}):t(le,{title:"No checks",body:"There are no checks found."})};export{he as ChecksTable};
2
2
  //# sourceMappingURL=ChecksTable.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as i}from"react/jsx-runtime";import{Flex as r,Card as y,CardBody as x,Text as o,Cell as b}from"@backstage/ui";import{RiShiningFill as F,RiGitMergeFill as R,RiGitPullRequestFill as k,RiErrorWarningFill as C}from"@remixicon/react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useCheck as v}from"../../hooks/checks/useCheck.esm.js";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useFixMe as M}from"../../hooks/fixMe/useFixMe.esm.js";import{CustomCell as w}from"../CustomCell/CustomCell.esm.js";import{FixMeButton as h}from"../FixMeButton/FixMeButton.esm.js";import{ProgressBar as S}from"../ProgressBar/ProgressBar.esm.js";import{ViewPullRequests as j}from"../ViewPullRequests/ViewPullRequests.esm.js";import{checkPullRequestsMockData as q}from"./PullRequestsTable.esm.js";const l={merged:"#c054deff",opened:"var(--bui-fg-success)",failed:"var(--bui-fg-danger)"},z=({check:t,status:u,isColumnVisible:f=!0})=>{const{data:c}=v(t.id),{showFixMeButton:a,hasShift:d,isRunning:n,href:s}=M({type:c?.type,rule:c?.rule,checkStatus:u,checkId:t.id}),m=18,p=34,g=2;return f?e(w,{children:i(r,{align:"center",justify:"end",children:[a&&!n&&e(h,{hasShift:d,href:s,isRunning:n}),a&&n&&e(y,{style:{margin:"var(--bui-space-2) 0 var(--bui-space-2)"},children:e(x,{children:i(r,{direction:"column",children:[i(r,{align:"center",gap:"2",children:[e(F,{size:12}),e(o,{weight:"bold",children:"Fixes in progress"})]}),i(r,{align:"center",gap:"2",children:[e(S,{segments:[{key:"merged",value:m,label:"Merged",color:l.merged},{key:"opened",value:p,label:"Opened",color:l.opened},{key:"failed",value:g,label:"Failed",color:l.failed}]}),i(o,{weight:"bold",children:[54,"/",140]})]}),i(r,{gap:"6",children:[i(r,{align:"center",gap:"1",children:[e(R,{size:16,color:l.merged}),i(o,{color:"secondary",children:[m," merged"]})]}),i(r,{align:"center",gap:"1",children:[e(k,{size:16,color:l.opened}),i(o,{color:"secondary",children:[p," open"]})]}),i(r,{align:"center",gap:"1",children:[e(C,{size:16,color:l.failed}),i(o,{color:"secondary",children:[g," failed"]})]})]}),i(r,{align:"center",gap:"1",justify:"between",children:[e(j,{checkName:t.name,pullRequests:q}),e(h,{hasShift:d,href:s,isRunning:n})]})]})})})]})}):e(b,{style:{padding:0}})};export{z as FixMeCell};
2
+ //# sourceMappingURL=FixMeCell.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{useTable as l,Table as c,CellText as n,Cell as s,Button as d}from"@backstage/ui";const u=[{id:"fire-monitor",component:"fire-monitor",owner:"Fire Safety",status:"Merged",branch:"aika/fix-fire-check"},{id:"incident-tracker",component:"incident-tracker",owner:"Incident Response",status:"Open",branch:"aika/fix-fire-check"},{id:"alert-service",component:"alert-service",owner:"Alerting",status:"Open",branch:"aika/fix-fire-check"},{id:"runbook-engine",component:"runbook-engine",owner:"SRE Platform",status:"Merged",branch:"aika/fix-fire-check"},{id:"status-page",component:"status-page",owner:"Reliability",status:"Failed",branch:"aika/fix-fire-check"},{id:"deploy-guard",component:"deploy-guard",owner:"Deploy Infra",status:"Open",branch:"aika/fix-fire-check"}],i=[{id:"component",label:"Component",width:"29%",isRowHeader:!0,cell:e=>t(n,{title:e.component})},{id:"owner",label:"Owner",width:"25%",cell:e=>t(n,{title:e.owner})},{id:"status",label:"Status",width:"10%",cell:e=>t(n,{title:e.status})},{id:"branch",label:"Branch",width:"30%",cell:e=>t(n,{title:e.branch})},{id:"action",label:"Action",width:"5%",cell:()=>t(s,{children:t(d,{children:"View"})})}],p=({pullRequests:e})=>{const a=e.map(r=>({...r,action:null})),{tableProps:o}=l({mode:"complete",data:a});return t(c,{columnConfig:i,...o})};export{p as PullRequestsTable,u as checkPullRequestsMockData,i as columns};
2
+ //# sourceMappingURL=PullRequestsTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as r,Fragment as k}from"react/jsx-runtime";import{useRouteRef as v}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{Box as n,Text as c,Grid as O,Flex as P,Button as w,HeaderPage as Y,Container as J}from"@backstage/ui";import{makeStyles as K}from"@material-ui/core";import{soundcheckCollectorReadPermission as Q,soundcheckCollectorUpdatePermission as X,parseFactRef as Z,asArray as _}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as ee}from"lodash";import{useMemo as te,useCallback as oe,useEffect as ie}from"react";import{useParams as re,useNavigate as ne}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as ae}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useGetCollectors as se}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as le}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{useLCPReporting as ce}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as de}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationEditRouteRef as me,integrationsPageRouteRef as fe}from"../../routes.esm.js";import{mapRuleToExpression as pe}from"../CheckForm/utils/checkFormUtils.esm.js";import{ConfigurableCollectorIds as ge}from"../CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js";import{DocLinkButton as he}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as p}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as ue}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as Ce}from"../LoadingIndicator/LoadingIndicator.esm.js";import{CollectorFactTableBUI as be}from"./CollectorFactTableBUI.esm.js";import{DependantCheckCard as ye}from"./DependantCheckCard.esm.js";const Ie=K(()=>({container:{marginBottom:"var(--bui-space-12)"}})),ke=({id:A,integrations:N})=>{const U=Ie(),L=re(),o=A??L.integrationId,g=te(()=>({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:o||""}}),[o]),{reportContentLoaded:h}=de(g),{reporter:x}=ce(g),{data:E,isLoading:B}=se([o??""]),{loading:D,allowed:F}=R({permission:Q}),{loading:u,allowed:C}=R({permission:X}),{showModal:b}=ae(),{mutate:y,isPending:d}=le(o??""),T=oe(async()=>{!await b({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||d||y()},[y,d,b]),t=E?.[0],m=B||u||D,$=N?.map(f=>f.integrationId)??ge,M=!u&&C&&t?.isEditable&&t?.isConfigurable&&$.includes(o??""),S=ne(),W=v(me),G=v(fe),j=t?.hasUIConfig;let a;if(m)a=e(Ce,{});else if(!F)a=e(p,{title:"Cannot view Integration",body:`User does not have permission to view Integration id: ${o}`});else if(!t)a=e(p,{title:"Integration not found",body:`There is no integration with the requested id: ${o}.`});else{const f=r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Facts"})}),e(n,{children:e(be,{facts:t.factNames.map(i=>{const l=(s=>{try{return Z(s).name}catch{return s}})(i),H=Array.isArray(t.config)?t.config[0]?.collects:t.config?.collects,V=_(H).find(s=>s?.type===l||s?.factName===l);return{factRef:`${o}:default/${l}`,factName:l,config:V,uiConfig:!!t.hasUIConfig,parentConfig:t.config}})})})]}),q=r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Dependant Checks"})}),ee(t.dependentChecks)?e(p,{title:"No dependent checks",body:"No dependent checks found."}):e(O.Root,{columns:"5",gap:"3",children:t.dependentChecks.map(i=>e(ye,{id:i.id,title:i.name??i.id,description:i.description??void 0,rules:pe(i.rule),integrationId:o,hasSchedule:i.schedule},i.id))})]}),z=C&&j&&r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Admin Actions"})}),t.hasUIConfig&&r(P,{align:"center",gap:"2",children:[e(w,{isDisabled:d,size:"small",variant:"secondary",onClick:T,children:"Remove Config"}),e(c,{color:"secondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]});a=r(k,{children:[f,q,z]})}const I=x?.getLCPValue();return ie(()=>{m||h({lcp:I})},[m,h,I]),r(k,{children:[e(Y,{title:t?.name??t?.id??"Integration",breadcrumbs:[{label:"Integrations",href:G()}],customActions:r(P,{align:"center",children:[M?e(w,{onClick:()=>S(W({integrationId:o??""})),children:"Configure"}):void 0,e(he,{href:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t?.id}`})]})}),e(J,{className:U.container,children:e(ue,{hidePath:!0,children:a})})]})};export{ke as CollectorDetailsPageBUI};
1
+ import{jsx as e,jsxs as r,Fragment as k}from"react/jsx-runtime";import{useRouteRef as v}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{Box as n,Text as c,Grid as O,Flex as P,Button as w,HeaderPage as Y,Container as J}from"@backstage/ui";import{makeStyles as K}from"@material-ui/core";import{soundcheckCollectorReadPermission as Q,soundcheckCollectorUpdatePermission as X,parseFactRef as Z,asArray as _}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as ee}from"lodash";import{useMemo as te,useCallback as oe,useEffect as ie}from"react";import{useParams as re,useNavigate as ne}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as ae}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useGetCollectors as se}from"../../hooks/collectors/useGetCollectors.esm.js";import{useDeleteCollectorConfig as le}from"../../hooks/collectors/useDeleteCollectorConfig.esm.js";import{useLCPReporting as ce}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as me}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationEditRouteRef as de,integrationsPageRouteRef as pe}from"../../routes.esm.js";import{mapRuleToExpression as fe}from"../CheckForm/utils/checkFormUtils.esm.js";import{ConfigurableCollectorIds as ge}from"../CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js";import{DocLinkButton as he}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as f}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as ue}from"../FactExplorer/FactExplorerContext.esm.js";import{LoadingIndicator as Ce}from"../LoadingIndicator/LoadingIndicator.esm.js";import{CollectorFactTableBUI as be}from"./CollectorFactTableBUI.esm.js";import{DependantCheckCard as ye}from"./DependantCheckCard.esm.js";const Ie=K(()=>({container:{marginBottom:"var(--bui-space-12)"}})),ke=({id:A,integrations:N})=>{const U=Ie(),L=re(),o=A??L.integrationId,g=te(()=>({routeName:"soundcheck-integration-details",additionalAttributes:{integrationId:o||""}}),[o]),{reportContentLoaded:h}=me(g),{reporter:x}=ce(g),{data:E,isLoading:B}=se([o??""]),{loading:D,allowed:F}=R({permission:Q}),{loading:u,allowed:C}=R({permission:X}),{showModal:b}=ae(),{mutate:y,isPending:m}=le(o??""),T=oe(async()=>{!await b({title:"Are you sure you want to delete stored UI config?",message:"This action cannot be undone and will remove any stored configs for this integration from the database."})||m||y()},[y,m,b]),t=E?.[0],d=B||u||D,$=N?.map(p=>p.integrationId)??ge,M=!u&&C&&t?.isEditable&&t?.isConfigurable&&$.includes(o??""),S=ne(),W=v(de),G=v(pe),j=t?.hasUIConfig;let a;if(d)a=e(Ce,{});else if(!F)a=e(f,{title:"Cannot view Integration",body:`User does not have permission to view Integration id: ${o}`});else if(!t)a=e(f,{title:"Integration not found",body:`There is no integration with the requested id: ${o}.`});else{const p=r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Facts"})}),e(n,{children:e(be,{facts:t.factNames.map(i=>{const l=(s=>{try{return Z(s).name}catch{return s}})(i),H=Array.isArray(t.config)?t.config[0]?.collects:t.config?.collects,V=_(H).find(s=>s?.type===l||s?.factName===l);return{factRef:`${o}:default/${l}`,factName:l,config:V,uiConfig:!!t.hasUIConfig,parentConfig:t.config}})})})]}),q=r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Dependant Checks"})}),ee(t.dependentChecks)?e(f,{title:"No dependent checks",body:"No dependent checks found."}):e(O.Root,{columns:"5",gap:"3",children:t.dependentChecks.map(i=>e(ye,{id:i.id,title:i.name??i.id,description:i.description??void 0,rules:fe(i.rule),integrationId:o,hasSchedule:i.schedule},i.id))})]}),z=C&&j&&r(n,{mb:"6",children:[e(n,{mb:"3",children:e(c,{variant:"title-small",style:{fontWeight:"bold"},children:"Admin Actions"})}),t.hasUIConfig&&r(P,{align:"center",gap:"2",children:[e(w,{isDisabled:m,size:"small",variant:"secondary",onClick:T,children:"Remove Config"}),e(c,{color:"secondary",children:"Revert to using YAML to config this integration by deleting the stored UI config from the database."})]})]});a=r(k,{children:[p,q,z]})}const I=x?.getLCPValue();return ie(()=>{d||h({lcp:I})},[d,h,I]),r(k,{children:[e(Y,{title:t?.name??t?.id??"Integration",breadcrumbs:[{label:"Integrations",href:G()}],customActions:r(P,{align:"center",children:[M?e(w,{onClick:()=>S(W({integrationId:o??""})),children:"Configure"}):void 0,e(he,{href:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t?.id}`})]})}),e(J,{className:U.container,children:e(ue,{hidePath:!0,children:a})})]})};export{ke as CollectorDetailsPageBUI};
2
2
  //# sourceMappingURL=CollectorDetailsPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import"react/jsx-runtime";import"@backstage/core-components";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import{makeStyles as i}from"@material-ui/core";import"@material-ui/lab";import"@spotify/backstage-plugin-soundcheck-common";import"lodash";import"react";import"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"react-use/lib/useLocalStorage";import"../../routes.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";import"../CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import"../FactExplorer/FactExplorerContext.esm.js";import"../LoadingIndicator/LoadingIndicator.esm.js";import"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import"./CollectorFactTable.esm.js";i(r=>({card:{width:360},cardDescription:{"& p":{marginTop:r.spacing(.5),marginBottom:r.spacing(.5)}},cardContent:{flexGrow:1}}));
1
+ import"react/jsx-runtime";import"@backstage/core-components";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import{makeStyles as i}from"@material-ui/core";import"@material-ui/lab";import"@spotify/backstage-plugin-soundcheck-common";import"lodash";import"react";import"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"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import"../../routes.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";import"../CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import"../FactExplorer/FactExplorerContext.esm.js";import"../LoadingIndicator/LoadingIndicator.esm.js";import"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import"./CollectorFactTable.esm.js";i(r=>({card:{width:360},cardDescription:{"& p":{marginTop:r.spacing(.5),marginBottom:r.spacing(.5)}},cardContent:{flexGrow:1}}));
2
2
  //# sourceMappingURL=CollectorDetailsPageDeprecated.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as u,Fragment as S,jsx as e}from"react/jsx-runtime";import{zodResolver as k}from"@hookform/resolvers/zod";import{makeStyles as B,Paper as A,Divider as n}from"@material-ui/core";import{useCallback as F}from"react";import{useForm as N,FormProvider as R}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 I}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as W}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as q}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as z}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 x}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as l}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as j,confirmationModalContent as M}from"../Common/utils.esm.js";import{NumberOfDaysComponent as b}from"./NumberOfDaysComponent.esm.js";import{NumberOfWorkItemsComponent as T}from"./NumberOfWorkItemsComponent.esm.js";import{mapConfigToAzureDevOpsCollectorConfig as H,defaultAzureDevOpsConfig as U,numberOfDaysCollectorConfig as d,numberOfWorkItemsCollectorConfig as V,mapAzureDevOpsCollectorConfigToConfig as L}from"./utils.esm.js";import{azureDevOpsCollectorFormSchema as E}from"./validation.esm.js";const G=B(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),J=({disabled:t,selectedCollector:i})=>{const C=F(async(o,...s)=>{const a={enabled:!1,collectors:[]},P={repositoryDetails:o.repositoryDetails.enabled?o.repositoryDetails:l(),branchPolicies:o.branchPolicies.enabled?o.branchPolicies:l(),branchStatus:o.branchStatus.enabled?o.branchStatus:l(),numberOfBranches:o.numberOfBranches.enabled?o.numberOfBranches:a,numberOfActivePullRequests:o.numberOfActivePullRequests.enabled?o.numberOfActivePullRequests:a,numberOfWorkItems:o.numberOfWorkItems.enabled?o.numberOfWorkItems:a};return k(E)(P,...s)},[]),m=N({defaultValues:i?H(i.config):U(),mode:"onChange",resolver:C}),{formState:{isValid:h},handleSubmit:c}=m,f=G(),g=!h,{mutateAsync:O}=q(),[y,v]=W(z),{showModal:D}=I(),p=async o=>{if(!await D(M(i)))return;const s=L(o);await O({collectorId:i.id,config:s})&&v()};return x(j(i)),u(S,{children:[e(A,{className:f.section,children:e(R,{...m,children:u("form",{onSubmit:c(p),children:[e(r,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchPolicies",label:"Branch Policies",description:"Collects branch policies information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchStatus",label:"Branch Status",description:"Collects the latest branch status information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"numberOfBranches",label:"Number Of Branches",description:"Collects the number of branches from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfActivePullRequests",label:"Number Of Active Pull Requests",description:"Collects the number of active pull requests from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfWorkItems",label:"Number Of Work Items",description:"Collects the number of work items from an entity's project.",disabled:t,FactDetailsComponent:T,multipleCollectors:{enable:!0,defaultConfig:V()}})]})})}),e("div",{className:f.section,children:e(w,{onCancel:y,saveButtonText:"Save",isLoading:!1,onSave:c(p),disableSave:g})})]})};export{J as AzureDevOpsConfigurator};
1
+ import{jsxs as u,Fragment as S,jsx as e}from"react/jsx-runtime";import{zodResolver as k}from"@hookform/resolvers/zod";import{makeStyles as B,Paper as A,Divider as n}from"@material-ui/core";import{useCallback as F}from"react";import{useForm as N,FormProvider as R}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 I}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as W}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useUpdateCollectorConfig as q}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as z}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 x}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as l}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as j,confirmationModalContent as M}from"../Common/utils.esm.js";import{NumberOfDaysComponent as b}from"./NumberOfDaysComponent.esm.js";import{NumberOfWorkItemsComponent as T}from"./NumberOfWorkItemsComponent.esm.js";import{mapConfigToAzureDevOpsCollectorConfig as H,defaultAzureDevOpsConfig as U,numberOfDaysCollectorConfig as d,numberOfWorkItemsCollectorConfig as V,mapAzureDevOpsCollectorConfigToConfig as L}from"./utils.esm.js";import{azureDevOpsCollectorFormSchema as E}from"./validation.esm.js";const G=B(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),J=({disabled:t,selectedCollector:i})=>{const C=F(async(o,...s)=>{const a={enabled:!1,collectors:[]},P={repositoryDetails:o.repositoryDetails.enabled?o.repositoryDetails:l(),branchPolicies:o.branchPolicies.enabled?o.branchPolicies:l(),branchStatus:o.branchStatus.enabled?o.branchStatus:l(),numberOfBranches:o.numberOfBranches.enabled?o.numberOfBranches:a,numberOfActivePullRequests:o.numberOfActivePullRequests.enabled?o.numberOfActivePullRequests:a,numberOfWorkItems:o.numberOfWorkItems.enabled?o.numberOfWorkItems:a};return k(E)(P,...s)},[]),m=N({defaultValues:i?H(i.config):U(),mode:"onChange",resolver:C}),{formState:{isValid:h},handleSubmit:c}=m,f=G(),g=!h,{mutateAsync:O}=q(),[y,v]=W(z),{showModal:D}=I(),p=async o=>{if(!await D(M(i)))return;const s=L(o);await O({collectorId:i.id,config:s})&&v()};return x(j(i)),u(S,{children:[e(A,{className:f.section,children:e(R,{...m,children:u("form",{onSubmit:c(p),children:[e(r,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchPolicies",label:"Branch Policies",description:"Collects branch policies information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchStatus",label:"Branch Status",description:"Collects the latest branch status information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"numberOfBranches",label:"Number Of Branches",description:"Collects the number of branches from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfActivePullRequests",label:"Number Of Active Pull Requests",description:"Collects the number of active pull requests from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfWorkItems",label:"Number Of Work Items",description:"Collects the number of work items from an entity's project.",disabled:t,FactDetailsComponent:T,multipleCollectors:{enable:!0,defaultConfig:V()}})]})})}),e("div",{className:f.section,children:e(w,{onCancel:y,saveButtonText:"Save",isLoading:!1,onSave:c(p),disableSave:g})})]})};export{J as AzureDevOpsConfigurator};
2
2
  //# sourceMappingURL=AzureDevOpsConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as h,Fragment as b,jsx as o}from"react/jsx-runtime";import{zodResolver as B}from"@hookform/resolvers/zod";import{makeStyles as v,Paper as F}from"@material-ui/core";import{useCallback as Q}from"react";import{useForm as S,FormProvider as q}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 N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as w}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as x}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as k}from"../../../../routes.esm.js";import{FooterButtons as I}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as M}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as P}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as T,confirmationModalContent as U}from"../Common/utils.esm.js";import{QueryFactDetailsComponent as j}from"./QueryFactDetailsComponent.esm.js";import{mapConfigToBigQueryCollectorConfig as A,defaultBigQueryConfig as D,queryCollectorConfig as H,mapBigQueryCollectorConfigToConfig as V}from"./utils.esm.js";import{bigQueryCollectorFormSchema as z}from"./validation.esm.js";const L=v(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)}})),O=({disabled:e,selectedCollector:r})=>{const c=Q(async(t,...i)=>{const C={enabled:!1,collectors:[]},y={query:t.query.enabled?t.query:C};return B(z)(y,...i)},[]),m=S({defaultValues:r?A(r.config):D(),mode:"onChange",resolver:c}),{formState:{isValid:s},handleSubmit:a}=m,n=L(),p=!s,{mutateAsync:f}=x(),[d,u]=w(k),{showModal:g}=N(),l=async t=>{if(!await g(U(r)))return;const i=V(t);await f({collectorId:r.id,config:i})&&u()};return M(T(r)),h(b,{children:[o(R,{collectorName:"Bigquery",collectorId:r.id,hasNonUIOptions:!0}),o(F,{className:n.section,children:o(q,{...m,children:o("form",{onSubmit:a(l),children:o(P,{name:"query",label:"Query",description:"Collects data from BigQuery.",disabled:e,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:H()}})})})}),o("div",{className:n.section,children:o(I,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(l),disableSave:p})})]})};export{O as BigQueryConfigurator};
1
+ import{jsxs as h,Fragment as b,jsx as o}from"react/jsx-runtime";import{zodResolver as B}from"@hookform/resolvers/zod";import{makeStyles as v,Paper as F}from"@material-ui/core";import{useCallback as Q}from"react";import{useForm as S,FormProvider as q}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 N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as w}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useUpdateCollectorConfig as x}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as k}from"../../../../routes.esm.js";import{FooterButtons as I}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as M}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as P}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as T,confirmationModalContent as U}from"../Common/utils.esm.js";import{QueryFactDetailsComponent as j}from"./QueryFactDetailsComponent.esm.js";import{mapConfigToBigQueryCollectorConfig as A,defaultBigQueryConfig as D,queryCollectorConfig as H,mapBigQueryCollectorConfigToConfig as V}from"./utils.esm.js";import{bigQueryCollectorFormSchema as z}from"./validation.esm.js";const L=v(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)}})),O=({disabled:e,selectedCollector:r})=>{const c=Q(async(t,...i)=>{const C={enabled:!1,collectors:[]},y={query:t.query.enabled?t.query:C};return B(z)(y,...i)},[]),m=S({defaultValues:r?A(r.config):D(),mode:"onChange",resolver:c}),{formState:{isValid:s},handleSubmit:a}=m,n=L(),p=!s,{mutateAsync:f}=x(),[d,u]=w(k),{showModal:g}=N(),l=async t=>{if(!await g(U(r)))return;const i=V(t);await f({collectorId:r.id,config:i})&&u()};return M(T(r)),h(b,{children:[o(R,{collectorName:"Bigquery",collectorId:r.id,hasNonUIOptions:!0}),o(F,{className:n.section,children:o(q,{...m,children:o("form",{onSubmit:a(l),children:o(P,{name:"query",label:"Query",description:"Collects data from BigQuery.",disabled:e,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:H()}})})})}),o("div",{className:n.section,children:o(I,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(l),disableSave:p})})]})};export{O as BigQueryConfigurator};
2
2
  //# sourceMappingURL=BigQueryConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as v,FormProvider as b}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as w}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as N}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as k}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as D,confirmationModalContent as M}from"../Common/utils.esm.js";import{mapConfigToCatalogCollectorConfig as P,defaultCatalogConfig as T,mapCatalogCollectorConfigToConfig as j}from"./utils.esm.js";const H=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),R=({disabled:t,selectedCollector:r})=>{const i=v({defaultValues:r?P(r.config):T(),mode:"onChange"}),{formState:{errors:n},handleSubmit:e}=i,a=H(),s=!!n.entityDescriptor,{mutateAsync:l}=w(),[c,p]=B(x),{showModal:f}=y(),m=async g=>{if(!await f(M(r)))return;const d=j(g);await l({collectorId:r.id,config:d})&&p()};return N(D(r)),C(u,{children:[o(S,{className:a.form,children:o(b,{...i,children:o("form",{onSubmit:e(m),children:o(k,{name:"entityDescriptor",label:"Entity Descriptor",description:"Collects entities from Backstage's Software Catalog.",disabled:t})})})}),o("div",{className:a.section,children:o(F,{onCancel:c,saveButtonText:"Save",isLoading:!1,onSave:e(m),disableSave:s})})]})};export{R as CatalogConfigurator};
1
+ import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as v,FormProvider as b}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useUpdateCollectorConfig as w}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as N}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as k}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as D,confirmationModalContent as M}from"../Common/utils.esm.js";import{mapConfigToCatalogCollectorConfig as P,defaultCatalogConfig as T,mapCatalogCollectorConfigToConfig as j}from"./utils.esm.js";const H=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),R=({disabled:t,selectedCollector:r})=>{const i=v({defaultValues:r?P(r.config):T(),mode:"onChange"}),{formState:{errors:n},handleSubmit:e}=i,m=H(),s=!!n.entityDescriptor,{mutateAsync:l}=w(),[c,p]=B(x),{showModal:f}=y(),a=async g=>{if(!await f(M(r)))return;const d=j(g);await l({collectorId:r.id,config:d})&&p()};return N(D(r)),C(u,{children:[o(S,{className:m.form,children:o(b,{...i,children:o("form",{onSubmit:e(a),children:o(k,{name:"entityDescriptor",label:"Entity Descriptor",description:"Collects entities from Backstage's Software Catalog.",disabled:t})})})}),o("div",{className:m.section,children:o(F,{onCancel:c,saveButtonText:"Save",isLoading:!1,onSave:e(a),disableSave:s})})]})};export{R as CatalogConfigurator};
2
2
  //# sourceMappingURL=CatalogConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as c,Fragment as D,jsx as e}from"react/jsx-runtime";import{makeStyles as b,Paper as h,Divider as S}from"@material-ui/core";import{useForm as y,FormProvider as j}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as F}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as L}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as O}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 w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as l}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as x}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as B,confirmationModalContent as I}from"../Common/utils.esm.js";import{mapConfigToDataDogCollectorConfig as M,defaultDataDogConfig as P,mapDataDogCollectorConfigToConfig as T}from"./utils.esm.js";const A=b(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),H=({disabled:i,selectedCollector:o})=>{const t=y({defaultValues:o?M(o.config):P(),mode:"onChange"}),{formState:{errors:r},handleSubmit:a}=t,n=A(),s=!!r.serviceDefinition||!!r.serviceLevelObjective,{mutateAsync:d}=L(),[p,f]=F(O),{showModal:g}=N(),m=async C=>{if(!await g(I(o)))return;const u=T(C);await d({collectorId:o.id,config:u})&&f()};w(B(o));const v=!o.config?.apiKey||!o.config?.appKey;return c(D,{children:[e(x,{collectorName:"Datadog",collectorId:o.id,invalidConfig:v,hasNonUIOptions:!0}),e(h,{className:n.section,children:e(j,{...t,children:c("form",{onSubmit:a(m),children:[e(l,{name:"serviceDefinition",label:"Service Definition",description:"Collects details about Datadog service linked to an entity.",disabled:i}),e(S,{}),e(l,{name:"serviceLevelObjective",label:"Service Level Objective",description:"Collects details about SLOs configured for a Datadog service linked to an entity.",disabled:i})]})})}),e("div",{className:n.section,children:e(k,{onCancel:p,saveButtonText:"Save",isLoading:!1,onSave:a(m),disableSave:s})})]})};export{H as DataDogConfigurator};
1
+ import{jsxs as c,Fragment as D,jsx as e}from"react/jsx-runtime";import{makeStyles as b,Paper as h,Divider as S}from"@material-ui/core";import{useForm as y,FormProvider as j}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as F}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useUpdateCollectorConfig as L}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as O}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 w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as l}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as x}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as B,confirmationModalContent as I}from"../Common/utils.esm.js";import{mapConfigToDataDogCollectorConfig as M,defaultDataDogConfig as P,mapDataDogCollectorConfigToConfig as T}from"./utils.esm.js";const A=b(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),H=({disabled:i,selectedCollector:o})=>{const t=y({defaultValues:o?M(o.config):P(),mode:"onChange"}),{formState:{errors:r},handleSubmit:a}=t,n=A(),s=!!r.serviceDefinition||!!r.serviceLevelObjective,{mutateAsync:d}=L(),[p,f]=F(O),{showModal:g}=N(),m=async C=>{if(!await g(I(o)))return;const u=T(C);await d({collectorId:o.id,config:u})&&f()};w(B(o));const v=!o.config?.apiKey||!o.config?.appKey;return c(D,{children:[e(x,{collectorName:"Datadog",collectorId:o.id,invalidConfig:v,hasNonUIOptions:!0}),e(h,{className:n.section,children:e(j,{...t,children:c("form",{onSubmit:a(m),children:[e(l,{name:"serviceDefinition",label:"Service Definition",description:"Collects details about Datadog service linked to an entity.",disabled:i}),e(S,{}),e(l,{name:"serviceLevelObjective",label:"Service Level Objective",description:"Collects details about SLOs configured for a Datadog service linked to an entity.",disabled:i})]})})}),e("div",{className:n.section,children:e(k,{onCancel:p,saveButtonText:"Save",isLoading:!1,onSave:a(m),disableSave:s})})]})};export{H as DataDogConfigurator};
2
2
  //# sourceMappingURL=DataDogConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as y,FormProvider as v}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as R}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as b}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateCollectorConfig as D}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as x}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as N,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToDataRegistryCollectorConfig as M,defaultDataRegistryConfig as P,mapDataRegistryCollectorConfigToConfig as j}from"./utils.esm.js";const k=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:r})=>{const e=y({defaultValues:r?M(r.config):P(),mode:"onChange"}),{formState:{errors:n},handleSubmit:i}=e,a=k(),s=!!n.datasetSchema,{mutateAsync:c}=D(),[l,p]=b(B),{showModal:f}=R(),m=async d=>{if(!await f(T(r)))return;const g=j(d);await c({collectorId:r.id,config:g})&&p()};return w(N(r)),C(u,{children:[o(S,{className:a.form,children:o(v,{...e,children:o("form",{onSubmit:i(m),children:o(x,{name:"datasetSchema",label:"Dataset Schema",description:"Collects fields (name, type, description) from a dataset in Data Registry.",disabled:t})})})}),o("div",{className:a.section,children:o(F,{onCancel:l,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:s})})]})};export{H as DataRegistryConfigurator};
1
+ import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as y,FormProvider as v}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"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as R}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as b}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useUpdateCollectorConfig as D}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as x}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as N,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToDataRegistryCollectorConfig as M,defaultDataRegistryConfig as P,mapDataRegistryCollectorConfigToConfig as j}from"./utils.esm.js";const k=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:r})=>{const e=y({defaultValues:r?M(r.config):P(),mode:"onChange"}),{formState:{errors:n},handleSubmit:i}=e,a=k(),s=!!n.datasetSchema,{mutateAsync:c}=D(),[p,l]=b(B),{showModal:f}=R(),m=async d=>{if(!await f(T(r)))return;const g=j(d);await c({collectorId:r.id,config:g})&&l()};return w(N(r)),C(u,{children:[o(S,{className:a.form,children:o(v,{...e,children:o("form",{onSubmit:i(m),children:o(x,{name:"datasetSchema",label:"Dataset Schema",description:"Collects fields (name, type, description) from a dataset in Data Registry.",disabled:t})})})}),o("div",{className:a.section,children:o(F,{onCancel:p,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:s})})]})};export{H as DataRegistryConfigurator};
2
2
  //# sourceMappingURL=DataRegistryConfigurator.esm.js.map