@spotify/backstage-plugin-soundcheck 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/alpha/package.json +1 -1
  3. package/dist/alpha/pages.esm.js +1 -1
  4. package/dist/alpha.d.ts +1 -1
  5. package/dist/api.esm.js +1 -1
  6. package/dist/components/Badges/BaseBadge.esm.js +1 -1
  7. package/dist/components/Badges/CampaignBadge.esm.js +1 -1
  8. package/dist/components/Badges/CertificationBadge.esm.js +1 -1
  9. package/dist/components/Badges/NoLevelBadge.esm.js +5 -1
  10. package/dist/components/Badges/PlaylistBadge.esm.js +1 -1
  11. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +2 -0
  12. package/dist/components/CampaignDetailsPage/CampaignChecks.esm.js +1 -1
  13. package/dist/components/CampaignDetailsPage/CampaignDetailRow.esm.js +1 -1
  14. package/dist/components/CampaignDetailsPage/CampaignDetails.esm.js +1 -1
  15. package/dist/components/CampaignDetailsPage/CampaignDetailsPage.esm.js +1 -1
  16. package/dist/components/CampaignDetailsPage/CampaignMilestones.esm.js +1 -1
  17. package/dist/components/CampaignDetailsPage/CampaignProgress.esm.js +1 -1
  18. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  19. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignDescriptionField.esm.js +1 -1
  20. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignNameField.esm.js +1 -1
  21. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
  22. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignScheduleField.esm.js +1 -1
  23. package/dist/components/CampaignForm/Steps/CampaignMilestonesStep.esm.js +1 -1
  24. package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +1 -1
  25. package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
  26. package/dist/components/CampaignsPage/CampaignEmptyState.esm.js +1 -1
  27. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
  28. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  29. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  30. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  31. package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
  32. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  33. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  34. package/dist/components/CheckCard/CheckCard.esm.js +1 -1
  35. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +2 -0
  36. package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
  37. package/dist/components/CheckDryRun/CheckDryRun.esm.js +2 -0
  38. package/dist/components/CheckDryRun/CheckDryRunContext.esm.js +2 -0
  39. package/dist/components/CheckDryRun/CheckDryRunDetails.esm.js +2 -0
  40. package/dist/components/CheckDryRun/CheckDryRunDialog.esm.js +2 -0
  41. package/dist/components/CheckDryRun/CheckDryRunDialogButton.esm.js +2 -0
  42. package/dist/components/CheckDryRun/checkDryRunUtils.esm.js +2 -0
  43. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  44. package/dist/components/CheckForm/FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js +1 -1
  45. package/dist/components/CheckForm/FormFields/CheckNameInput/CheckNameInput.esm.js +1 -1
  46. package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +2 -0
  47. package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
  48. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ConditionList.esm.js +1 -1
  49. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/FactValueDisplay.esm.js +2 -0
  50. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  51. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListContext.esm.js +2 -0
  52. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js +2 -0
  53. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/styles.esm.js +1 -1
  54. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  55. package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +1 -1
  56. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  57. package/dist/components/CheckForm/FormFields/RuleInput/useRuleInputHandlers.esm.js +1 -1
  58. package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
  59. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  60. package/dist/components/CheckForm/Steps/CheckReviewStep.esm.js +2 -0
  61. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  62. package/dist/components/CheckForm/types/ExpressionType.esm.js +1 -1
  63. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  64. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +1 -1
  65. package/dist/components/CheckForm/utils/validation.esm.js +1 -1
  66. package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
  67. package/dist/components/CheckPage/CheckDetailsView.esm.js +1 -1
  68. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  69. package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
  70. package/dist/components/CheckPage/CheckStatusBar.esm.js +1 -1
  71. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
  72. package/dist/components/CheckPage/FilterBar/FilterBar.esm.js +1 -1
  73. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +2 -0
  74. package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +2 -0
  75. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
  76. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  77. package/dist/components/ChecksTab/ChecksTab.esm.js +1 -1
  78. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  79. package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +2 -0
  80. package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +2 -0
  81. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +2 -0
  82. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
  83. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +2 -0
  84. package/dist/components/CollectorPage/Configurators/DataDog/utils.esm.js +2 -0
  85. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  86. package/dist/components/CollectorPage/Configurators/Github/utils.esm.js +1 -1
  87. package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js +2 -0
  88. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +2 -0
  89. package/dist/components/CollectorPage/Configurators/Jira/utils.esm.js +2 -0
  90. package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +2 -0
  91. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +2 -0
  92. package/dist/components/CollectorPage/Configurators/Kubernetes/utils.esm.js +2 -0
  93. package/dist/components/CollectorPage/Configurators/PagerDuty/IncidentsFactDetailsComponent.esm.js +2 -0
  94. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +2 -0
  95. package/dist/components/CollectorPage/Configurators/PagerDuty/StatusesComponent.esm.js +2 -0
  96. package/dist/components/CollectorPage/Configurators/PagerDuty/utils.esm.js +2 -0
  97. package/dist/components/CollectorPage/Configurators/PagerDuty/validation.esm.js +2 -0
  98. package/dist/components/CollectorPage/Configurators/SCM/ExistsFactDetailsComponent.esm.js +2 -0
  99. package/dist/components/CollectorPage/Configurators/SCM/FactCollectionConfig.esm.js +2 -0
  100. package/dist/components/CollectorPage/Configurators/SCM/FactDetailsComponent.esm.js +2 -0
  101. package/dist/components/CollectorPage/Configurators/SCM/JsonFactDetailsComponent.esm.js +2 -0
  102. package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +2 -0
  103. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +2 -0
  104. package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +2 -0
  105. package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +2 -0
  106. package/dist/components/CollectorPage/Configurators/SonarQube/MeasuresFactDetailsInput.esm.js +2 -0
  107. package/dist/components/CollectorPage/Configurators/SonarQube/MetricsInput.esm.js +2 -0
  108. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +2 -0
  109. package/dist/components/CollectorPage/Configurators/SonarQube/utils.esm.js +2 -0
  110. package/dist/components/CollectorPage/Configurators/SonarQube/validation.esm.js +2 -0
  111. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +1 -1
  112. package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +1 -1
  113. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  114. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  115. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  116. package/dist/components/ExpandableSection/ExpandableSection.esm.js +2 -0
  117. package/dist/components/FactExplorer/FactExplorer.esm.js +2 -0
  118. package/dist/components/FactExplorer/FactExplorerContext.esm.js +2 -0
  119. package/dist/components/FactExplorer/FactExplorerDialog.esm.js +2 -0
  120. package/dist/components/FactExplorer/useFactOptions.esm.js +2 -0
  121. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  122. package/dist/components/Filter/FilterPreviewTable/EntityTableToolbar.esm.js +1 -1
  123. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  124. package/dist/components/Filter/utils.esm.js +1 -1
  125. package/dist/components/FooterButtons/FooterButtons.esm.js +1 -1
  126. package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +2 -0
  127. package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +2 -0
  128. package/dist/components/FormControlledAutocomplete/useLabelOptions.esm.js +2 -0
  129. package/dist/components/FormFieldLabel/FormFieldLabel.esm.js +2 -0
  130. package/dist/components/FormStepper/FormStepper.esm.js +1 -1
  131. package/dist/components/FormattedPreview/FormattedPreview.esm.js +4 -0
  132. package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
  133. package/dist/components/LevelCard/LevelCard.esm.js +1 -1
  134. package/dist/components/ListboxVirtualized/ListboxVirtualized.esm.js +2 -0
  135. package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +1 -1
  136. package/dist/components/OverviewPage/CampaignBanner/CampaignBanner.esm.js +1 -1
  137. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  138. package/dist/components/OverviewTable/Cell/EntityRefCell.esm.js +1 -1
  139. package/dist/components/OverviewTable/Cell/HighestLevelBadge.esm.js +1 -1
  140. package/dist/components/OverviewTable/ResultsTableHeader.esm.js +1 -1
  141. package/dist/components/PassRateTable/PassRateTable.esm.js +3 -1
  142. package/dist/components/QuickstartPage/HowDoIListItem.esm.js +2 -0
  143. package/dist/components/QuickstartPage/QuickStartChecksCard.esm.js +2 -0
  144. package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +2 -0
  145. package/dist/components/QuickstartPage/QuickstartCollectorConfigurationsCard.esm.js +2 -0
  146. package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -0
  147. package/dist/components/QuickstartPage/QuickstartTracksCard.esm.js +2 -0
  148. package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +7 -0
  149. package/dist/components/QuickstartPage/WelcomeModal.esm.js +2 -0
  150. package/dist/components/QuickstartPage/styles.esm.js +2 -0
  151. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  152. package/dist/components/SearchBar/SearchBar.esm.js +1 -1
  153. package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
  154. package/dist/components/SoundcheckDialog/SoundcheckDialog.esm.js +2 -0
  155. package/dist/components/SoundcheckHeader/Breadcrumbs.esm.js +2 -0
  156. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +2 -0
  157. package/dist/components/SoundcheckHeader/SoundcheckHeaderContext.esm.js +2 -0
  158. package/dist/components/SoundcheckHeader/headerUtil.esm.js +2 -0
  159. package/dist/components/SoundcheckHeader/useHeader.esm.js +2 -0
  160. package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
  161. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  162. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  163. package/dist/components/TechHealthTabs/ActionColumn.esm.js +1 -1
  164. package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
  165. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +2 -0
  166. package/dist/components/{EditTrackPage/EditTrackPage.esm.js → TrackEditPage/TrackEditPage.esm.js} +2 -2
  167. package/dist/components/TrackEditPage/TrackEditView.esm.js +2 -0
  168. package/dist/components/TrackForm/Steps/LevelsStep/ChecksSection/ChecksSection.esm.js +1 -1
  169. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDescriptionInput/TrackDescriptionInput.esm.js +1 -1
  170. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDocumentationUrlInput/TrackDocumentationUrlInput.esm.js +1 -1
  171. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackNameInput/TrackNameInput.esm.js +1 -1
  172. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
  173. package/dist/components/TrackForm/TrackForm.esm.js +1 -1
  174. package/dist/components/TrackForm/utils/trackFormUtils.esm.js +1 -1
  175. package/dist/components/TrackForm/utils/validation.esm.js +1 -1
  176. package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +1 -1
  177. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  178. package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
  179. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  180. package/dist/components/TrackPage/TrackProgressCard.esm.js +1 -1
  181. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
  182. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  183. package/dist/components/TracksTab/TracksTab.esm.js +1 -1
  184. package/dist/contexts/GenericFormContext.esm.js +1 -1
  185. package/dist/graphql/generated/index.esm.js +99 -33
  186. package/dist/hooks/catalog/useGetEntityRefs.esm.js +2 -0
  187. package/dist/hooks/checks/useCheckTemplates.esm.js +2 -0
  188. package/dist/hooks/checks/useExecuteCheck.esm.js +1 -1
  189. package/dist/hooks/checks/useGetChecks.esm.js +1 -1
  190. package/dist/hooks/collectors/useGetFactSchema.esm.js +1 -1
  191. package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +1 -1
  192. package/dist/hooks/graphqlKeys.esm.js +1 -1
  193. package/dist/hooks/useGetFact.esm.js +2 -0
  194. package/dist/hooks/useGetPathResolvers.esm.js +2 -0
  195. package/dist/images/gitlab-rgb.svg +1 -0
  196. package/dist/images/gitlab-white.svg +1 -0
  197. package/dist/images/jira-rgb.svg +25 -0
  198. package/dist/images/jira-white.svg +25 -0
  199. package/dist/images/sonarqube-rgb.svg +14 -0
  200. package/dist/images/sonarqube-white.svg +14 -0
  201. package/dist/index.d.ts +1 -1
  202. package/dist/plugin.esm.js +1 -1
  203. package/dist/routes.esm.js +1 -1
  204. package/dist/utils/export.esm.js +3 -3
  205. package/dist/utils/formStyles.esm.js +1 -1
  206. package/dist/utils/validation.esm.js +1 -1
  207. package/package.json +20 -17
  208. package/dist/components/CampaignForm/CampaignFormDescription.esm.js +0 -2
  209. package/dist/components/CampaignsPage/AddCampaignView.esm.js +0 -2
  210. package/dist/components/CheckForm/CheckFormDescription.esm.js +0 -2
  211. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js +0 -2
  212. package/dist/components/ChecksPage/AddCheckView.esm.js +0 -2
  213. package/dist/components/CollectorPage/Configurators/Github/FactCollectionConfig.esm.js +0 -2
  214. package/dist/components/EditTrackPage/EditTrackView.esm.js +0 -2
  215. package/dist/components/FormControlledSelect/FormControlledSelect.esm.js +0 -2
  216. package/dist/components/FullScreenDialog/FullScreenDialog.esm.js +0 -2
  217. package/dist/components/RoutingPage/Breadcrumbs.esm.js +0 -2
  218. package/dist/components/RoutingPage/utils.esm.js +0 -2
  219. package/dist/components/TracksPage/AddTrackView.esm.js +0 -2
@@ -1,2 +1,2 @@
1
- import{makeStyles as o}from"@material-ui/core/styles";const e=o(t=>({root:{overflow:"hidden",display:"flex",marginBottom:"53px"},card:{padding:t.spacing(3),display:"flex",gap:t.spacing(2.5)},buttonChoices:{margin:"20px 0","& button":{marginRight:"10px"}},backButton:{color:t.palette.text.primary},filters:{display:"flex",gap:t.spacing(1),flexDirection:"column"},stepLabel:{cursor:"pointer !important"},stepper:{width:"100%"}}));export{e as formStyles};
1
+ import{makeStyles as i}from"@material-ui/core/styles";const a=i(t=>({root:{overflow:"hidden",display:"flex"},card:{padding:t.spacing(3),display:"flex",gap:t.spacing(2.5)},buttonChoices:{margin:"20px 0","& button":{marginRight:"10px"}},backButton:{color:t.palette.text.primary},filters:{display:"flex",gap:t.spacing(1),flexDirection:"column"},stepLabel:{cursor:"pointer !important"},stepper:{width:"100%"},formWrapper:{paddingTop:t.spacing(2),maxWidth:1920}}));export{a as formStyles};
2
2
  //# sourceMappingURL=formStyles.esm.js.map
@@ -1,2 +1,2 @@
1
- const e="At least one check is required",i="This field is required";export{e as CHECK_IS_REQUIRED_MSG,i as FIELD_IS_REQUIRED_MSG};
1
+ import{z as e}from"zod";import{TimeUnit as n}from"../components/Frequency/types.esm.js";import"../components/Frequency/util.esm.js";import"../components/Frequency/FrequencyComponent.esm.js";import{validateCacheConfig as r}from"./collectors.esm.js";import{validateFrequency as a}from"./frequency.esm.js";const s="At least one check is required",o="This field is required",i=e.nativeEnum(n),c=e.strictObject({enabled:e.boolean(),hasDuration:e.boolean(),unit:i.optional(),value:e.number().min(1,"Value must be greater than 0.").optional()}).refine(t=>r(t)===!0,t=>({message:r(t)})),m=e.strictObject({type:e.enum(["HumanDuration","cron"]),unit:i.optional(),value:e.number().min(1,"Value must be greater than 0.").optional(),cron:e.string().optional()}).refine(t=>a(t)===!0,t=>({message:a(t)})),l=e.strictObject({selectedKinds:e.string().array(),selectedTypes:e.string().array(),selectedLifecycles:e.string().array(),selectedOwners:e.string().array(),selectedSystems:e.string().array(),selectedTags:e.string().array()});export{s as CHECK_IS_REQUIRED_MSG,c as CacheConfigSchema,o as FIELD_IS_REQUIRED_MSG,l as FiltersSchema,m as FrequencySchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spotify/backstage-plugin-soundcheck",
3
3
  "description": "Ensure quality, reliability and alignment of software development with codified checks and guidance.",
4
- "version": "0.13.0",
4
+ "version": "0.14.0",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://backstage.spotify.com",
7
7
  "main": "./dist/index.esm.js",
@@ -44,14 +44,14 @@
44
44
  "prepare": "yarn generate"
45
45
  },
46
46
  "dependencies": {
47
- "@backstage/catalog-client": "^1.6.5",
48
- "@backstage/catalog-model": "^1.5.0",
49
- "@backstage/core-compat-api": "^0.2.7",
50
- "@backstage/core-components": "^0.14.9",
47
+ "@backstage/catalog-client": "^1.6.6",
48
+ "@backstage/catalog-model": "^1.6.0",
49
+ "@backstage/core-compat-api": "^0.2.8",
50
+ "@backstage/core-components": "^0.14.10",
51
51
  "@backstage/core-plugin-api": "^1.9.3",
52
- "@backstage/frontend-plugin-api": "^0.6.7",
53
- "@backstage/plugin-catalog-react": "^1.12.2",
54
- "@backstage/plugin-permission-react": "^0.4.24",
52
+ "@backstage/frontend-plugin-api": "^0.7.0",
53
+ "@backstage/plugin-catalog-react": "^1.12.3",
54
+ "@backstage/plugin-permission-react": "^0.4.25",
55
55
  "@backstage/types": "^1.1.1",
56
56
  "@date-io/luxon": "^1.0.0",
57
57
  "@hookform/resolvers": "^3.3.2",
@@ -59,8 +59,9 @@
59
59
  "@material-ui/icons": "^4.9.1",
60
60
  "@material-ui/lab": "4.0.0-alpha.61",
61
61
  "@material-ui/pickers": "3.3.11",
62
- "@spotify/backstage-plugin-core": "^0.7.3",
63
- "@spotify/backstage-plugin-soundcheck-common": "^0.13.4",
62
+ "@mui/icons-material": "^5.11.16",
63
+ "@spotify/backstage-plugin-core": "^0.8.0",
64
+ "@spotify/backstage-plugin-soundcheck-common": "^0.14.0",
64
65
  "@tanstack/react-query": "^4.6.1",
65
66
  "@types/react-csv": "^1.1.6",
66
67
  "@uiw/react-md-editor": "3.20.10",
@@ -88,22 +89,24 @@
88
89
  },
89
90
  "peerDependencies": {
90
91
  "react": "^16.13.1 || ^17.0.0 || ^18.0.0",
92
+ "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
91
93
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
92
94
  },
93
95
  "devDependencies": {
94
- "@backstage/cli": "^0.26.11",
95
- "@backstage/core-app-api": "^1.14.0",
96
- "@backstage/dev-utils": "^1.0.35",
96
+ "@backstage/cli": "^0.27.0",
97
+ "@backstage/core-app-api": "^1.14.2",
98
+ "@backstage/dev-utils": "^1.0.37",
97
99
  "@backstage/e2e-test-utils": "^0.1.1",
98
- "@backstage/frontend-test-utils": "^0.1.10",
99
- "@backstage/test-utils": "^1.5.8",
100
+ "@backstage/frontend-test-utils": "^0.1.12",
101
+ "@backstage/test-utils": "^1.5.10",
100
102
  "@graphql-codegen/cli": "^5.0.0",
101
103
  "@graphql-codegen/typescript": "^4.0.0",
102
104
  "@graphql-codegen/typescript-graphql-request": "^6.0.0",
103
105
  "@graphql-codegen/typescript-operations": "^4.0.0",
104
106
  "@playwright/test": "^1.32.3",
105
- "@sp4b-dev/test-utils": "^0.0.5",
106
- "@spotify/backstage-plugin-core-common": "^0.5.14",
107
+ "@sp4b-dev/test-utils": "^0.0.6",
108
+ "@spotify/backstage-plugin-core-common": "^0.6.0",
109
+ "@spotify/backstage-plugin-soundcheck-node": "^0.8.0",
107
110
  "@testing-library/jest-dom": "^6.0.0",
108
111
  "@testing-library/react": "^14.0.0",
109
112
  "@testing-library/user-event": "^14.0.0",
@@ -1,2 +0,0 @@
1
- import{useRouteRef as i}from"@backstage/core-plugin-api";import{makeStyles as r,Typography as a,Button as m}from"@material-ui/core";import e from"react";import{useNavigate as s}from"react-router-dom";import{techHealthRouteRef as l}from"../../routes.esm.js";const c=r(t=>({container:{display:"flex",gap:t.spacing(1),flexDirection:"column"},link:{fontWeight:"bold",padding:0,color:t.palette.text.primary,"&:hover":{textDecoration:"underline",transform:"none"}},list:{marginTop:0},listItem:{marginBottom:t.spacing(1)}})),p=()=>{const t=c(),n=i(l),o=s();return e.createElement("div",{className:t.container},e.createElement(a,{variant:"h6"},"Creating campaigns"),e.createElement(a,{variant:"body1"},"A Campaign is a focused short term initiative."),e.createElement(a,{variant:"body1"},"You can create campaigns, assign them to teams that own software components, and track them towards a completion milestone via the"," ",e.createElement(m,{variant:"text",color:"primary",onClick:()=>o(n()),className:t.link},"Tech Health")," ","page."),e.createElement(a,{variant:"body1"},"Some use cases for campaigns include:"),e.createElement("div",null,e.createElement("ul",{className:t.list},e.createElement("li",{className:t.listItem},e.createElement(a,{variant:"body1"},"When your organization wants to upgrade Spring libraries to use a specific version of Spring Boot.")),e.createElement("li",null,e.createElement(a,{variant:"body1"},"When your organization wants to remove unneeded data endpoints to save costs.")))))};export{p as CampaignFormDescription};
2
- //# sourceMappingURL=CampaignFormDescription.esm.js.map
@@ -1,2 +0,0 @@
1
- import m,{useEffect as p}from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as n}from"../../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{useCreateCampaign as s}from"../../hooks/campaigns/useCreateCampaign.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{CampaignForm as c}from"../CampaignForm/CampaignForm.esm.js";import{FullScreenDialog as l}from"../FullScreenDialog/FullScreenDialog.esm.js";const d=()=>{const{hideModal:o,showAddModal:r,setIsLoading:t}=n(),{mutateAsync:i,isLoading:e}=s();return p(()=>{t(e)},[t,e]),m.createElement(l,{title:"Create a Campaign",open:r,handleClose:o},m.createElement(c,{onSave:async a=>{await i(a,{onSuccess:()=>o()})},onCancel:o}))};export{d as AddCampaignView};
2
- //# sourceMappingURL=AddCampaignView.esm.js.map
@@ -1,2 +0,0 @@
1
- import{Typography as t,Link as a}from"@material-ui/core";import e from"react";const n=()=>e.createElement("div",{style:{display:"flex",gap:"10px",flexDirection:"column"}},e.createElement(t,{variant:"h6"},"Creating and managing checks"),e.createElement(t,{variant:"body1"},"Checks are entities created from four components: facts, paths, operators and values. These components are then organized via a boolean calculator in the UI."),e.createElement(t,{variant:"body1"},"To create a check, select the components that you want to use, organize them into rules and give your check a meaningful name and a description."),e.createElement(t,{variant:"body1"},"Once created, you will be able to manage and edit your track on its detail page. See our"," ",e.createElement(a,{target:"_blank",href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks#check-fields"},"check documentation")," ","for more details."));export{n as CheckFormDescription};
2
- //# sourceMappingURL=CheckFormDescription.esm.js.map
@@ -1,2 +0,0 @@
1
- import{makeStyles as x,TextField as C}from"@material-ui/core";import{Autocomplete as I}from"@material-ui/lab";import i from"react";import{Controller as S}from"react-hook-form";const c=x(t=>({clearIndicator:{marginRight:t.spacing(1)},helperText:{marginLeft:0},noMargin:{margin:0}})),T=({name:t,rules:p,label:d,control:g,options:u,getOptionLabel:h,getOptionValue:o,onChange:s,disabled:f,placeholder:b})=>{const n=c();return i.createElement(S,{name:t,control:g,rules:p,render:({field:m,fieldState:l})=>i.createElement(I,{...m,freeSolo:!0,autoSelect:!0,"data-testid":`${t}-autocomplete`,style:{minWidth:250},disabled:f,options:u,getOptionLabel:h,classes:{clearIndicator:n.clearIndicator},renderInput:a=>i.createElement(C,{...a,variant:"outlined",label:d,error:l.invalid,placeholder:b,FormHelperTextProps:{className:n.helperText},margin:"dense",className:n.noMargin,helperText:l.error?l.error.message:null}),onChange:(a,e)=>{const r=o?o(e):e;s?.(r),m.onChange(r)},onInputChange:(a,e)=>{const r=o?o(e):e;s?.(r)}})})};export{T as ControlledAutocomplete,c as useStyles};
2
- //# sourceMappingURL=ControlledAutocomplete.esm.js.map
@@ -1,2 +0,0 @@
1
- import c,{useEffect as s}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as a}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{useCreateCheck as n}from"../../hooks/checks/useCreateCheck.esm.js";import{CheckForm as p}from"../CheckForm/CheckForm.esm.js";import"@material-ui/core";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";const d=()=>{const{hideModal:e,showAddModal:r,setIsLoading:o}=a(),{mutateAsync:m,isLoading:t}=n();return s(()=>{o(t)},[o,t]),c.createElement(p,{title:"Create a Check",open:r,onSave:async i=>{await m(i,{onSuccess:()=>e()})},onClose:()=>e()})};export{d as AddCheckView};
2
- //# sourceMappingURL=AddCheckView.esm.js.map
@@ -1,2 +0,0 @@
1
- import{makeStyles as b,FormControlLabel as h,Switch as f,Box as E,Typography as s,Tabs as y,Tab as i}from"@material-ui/core";import e,{useState as x}from"react";import{useWatch as F,Controller as o}from"react-hook-form";import{validateCacheConfig as k}from"../../../../utils/collectors.esm.js";import{validateFrequency as N}from"../../../../utils/frequency.esm.js";import"lodash";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import{FrequencyComponent as T}from"../../../Frequency/FrequencyComponent.esm.js";import{CacheConfigComponent as q}from"../../../CacheConfig/CacheConfigComponent.esm.js";import{FilterComponent as w}from"../../../Filter/FilterComponent.esm.js";const S=b(a=>({root:{padding:a.spacing(1)},tabsContainer:{marginRight:16},tab:{height:"64px",textAlign:"left"},contentContainer:{width:"100%",padding:a.spacing(1)},divider:{marginTop:a.spacing(8),marginBottom:a.spacing(8)},switchTrack:{backgroundColor:`${a.palette.primary.main} !important`}})),$=({name:a,label:d,description:p,control:l,disabled:c,errors:m})=>{const[r,g]=x(0),C=F({control:l,name:`${a}.enabled`}),u=(t,v)=>{g(v)},n=S();return e.createElement("div",{className:n.root},e.createElement(o,{name:`${a}.enabled`,control:l,render:({field:t})=>e.createElement(h,{control:e.createElement(f,{...t,checked:t.value,"data-testid":`${a}-switch`,classes:{track:t.value?n.switchTrack:void 0}}),label:e.createElement(E,{display:"flex",flexDirection:"column"},e.createElement(s,{variant:"body1",component:"span"},e.createElement("b",null,`${d}`)),e.createElement(s,{variant:"caption",color:"textSecondary",component:"p"},`${p}`))})}),C&&e.createElement("div",null,e.createElement(y,{orientation:"horizontal",variant:"scrollable",value:r,onChange:u,className:n.tabsContainer},e.createElement(i,{label:"Frequency",className:n.tab}),e.createElement(i,{label:"Filters",className:n.tab}),e.createElement(i,{label:"Caching",className:n.tab})),e.createElement("div",{className:n.contentContainer},r===0&&e.createElement("div",null,e.createElement(o,{name:`${a}.frequency`,control:l,rules:{validate:N},render:({field:t})=>e.createElement(T,{disabled:c,value:t.value,onChange:t.onChange,errors:m?.frequency})})),r===1&&e.createElement("div",null,e.createElement(o,{name:`${a}.filters`,control:l,render:({field:t})=>e.createElement(w,{disabled:c,value:t.value,onChange:t.onChange})})),r===2&&e.createElement("div",null,e.createElement(o,{name:`${a}.cacheConfig`,control:l,rules:{validate:k},render:({field:t})=>e.createElement(q,{disabled:c,value:t.value,onChange:t.onChange,errors:m?.cacheConfig})})))))};export{$ as FactCollectionConfig};
2
- //# sourceMappingURL=FactCollectionConfig.esm.js.map
@@ -1,2 +0,0 @@
1
- import u,{useEffect as i,useCallback as f}from"react";import{useTrackFormContext as k}from"../../contexts/TrackFormContext.esm.js";import"../../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"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}from"../../hooks/useNavigateBack.esm.js";import{useUpdateTrack as T}from"../../hooks/tracks/useUpdateTrack.esm.js";import{tracksPageRouteRef as g}from"../../routes.esm.js";import{TrackForm as w}from"../TrackForm/TrackForm.esm.js";const S=({track:t,canEdit:p})=>{const{setSelectedItem:m,setIsLoading:a,selectedItem:n,showReadOnlyModal:e}=k(),{mutateAsync:c,isLoading:s}=T();i(()=>a(s),[a,s]);const o=!p||!t.isEditable;i(()=>{o?e(t):m(t)},[t,m,o,e]);const[y,r]=E(g),l=f(async d=>{await c(d,{onSuccess:r})},[r,c]);return i(()=>{},[t,e,o]),n?u.createElement(w,{handleClose:r,title:`${o?"View":"Edit"} Track`,open:!0,onSave:l}):null};export{S as EditTrackView};
2
- //# sourceMappingURL=EditTrackView.esm.js.map
@@ -1,2 +0,0 @@
1
- import{makeStyles as v,FormControl as E,InputLabel as f,Select as k,MenuItem as c,FormHelperText as y}from"@material-ui/core";import e from"react";import{Controller as h}from"react-hook-form";const x=v(l=>({helperText:{marginLeft:0},selectField:{width:"100%",display:"flex",alignItems:"center"},menuBackground:{backgroundColor:l.palette.background.paper}})),F=({name:l,control:d,selectLabel:r,options:i,disabled:p,rules:u,style:b,helperText:n,placeholder:o})=>{const a=x();return e.createElement(h,{name:l,control:d,rules:u,render:({field:s,fieldState:t})=>e.createElement(E,{variant:"outlined",style:b??{minWidth:200},error:t.invalid},r&&e.createElement(f,{id:`${l}-select-label`},r),e.createElement(k,{...s,className:a.selectField,disabled:p,error:t.invalid,"data-testid":`${l}-select`,labelId:`${l}-select-label`,label:r,displayEmpty:!0,value:s.value??"",MenuProps:{classes:{paper:a.menuBackground}},margin:"dense"},o&&e.createElement(c,{value:"",disabled:!0},o),i?.map(({value:m,label:g})=>e.createElement(c,{key:m,value:m},g))),(n||t.error)&&e.createElement(y,{className:a.helperText},t.error?t.error.message:n))})};export{F as FormControlledSelect};
2
- //# sourceMappingURL=FormControlledSelect.esm.js.map
@@ -1,2 +0,0 @@
1
- import{withStyles as n,Dialog as c,Slide as i,AppBar as p,Toolbar as d,Typography as m,IconButton as s,Box as f}from"@material-ui/core";import{makeStyles as u}from"@material-ui/core/styles";import g from"@material-ui/icons/Close";import t from"react";const h=u(e=>({appBar:{position:"relative",color:`${e.palette.text.primary} !important`,backgroundColor:`${e.palette.background.default} !important`},title:{flex:1,fontSize:e.typography.h6.fontSize},closeIcon:{marginRight:e.spacing(2)},content:{flex:"1 0 auto",padding:e.spacing(2),margin:"0 0 5rem",overflowX:"hidden",overflowY:"hidden","& .wmde-markdown-var":{"--color-canvas-default":e.palette.background.paper,"--color-border-default":e.palette.border},"& .wmde-markdown":{"--color-canvas-default":e.palette.background.paper}}})),b=n({paperFullScreen:{padding:0}})(c),S=t.forwardRef(function(e,r){return t.createElement(i,{direction:"up",ref:r,...e})}),k=({open:e,handleClose:r,title:o,children:l})=>{const a=h();return t.createElement(b,{fullScreen:!0,open:e,onClose:r,TransitionComponent:S,className:a.title},t.createElement(p,{className:a.appBar},t.createElement(d,null,t.createElement(m,{className:a.title,"data-testid":`dialog-${o}`},o),t.createElement(s,{"data-testid":"close-dialog",edge:"end",color:"inherit",onClick:r,"aria-label":"close",className:a.closeIcon},t.createElement(g,null)))),t.createElement(f,{className:a.content},l))};export{k as FullScreenDialog};
2
- //# sourceMappingURL=FullScreenDialog.esm.js.map
@@ -1,2 +0,0 @@
1
- import{Breadcrumbs as s,Link as n}from"@backstage/core-components";import{useRouteRef as i}from"@backstage/core-plugin-api";import{makeStyles as p,Typography as f}from"@material-ui/core";import o from"react";import{useLocation as u}from"react-router-dom";import{rootRouteRef as b}from"../../routes.esm.js";const g=p(e=>({breadcrumbs:{marginTop:e.spacing(2),color:e.page.fontColor},link:{color:e.page.fontColor,textDecoration:"none",fontStyle:"normal",fontWeight:"bold"},text:{fontStyle:"normal",fontWeight:"normal"}})),y=({pages:e})=>{const a=i(b),t=g(),l=u().pathname===a();return o.createElement(s,{className:t.breadcrumbs},!l&&o.createElement(n,{className:t.link,to:a()},"Home"),e.map(({title:m,path:r},c)=>r?o.createElement(n,{className:t.link,to:r,key:r,relative:"path"},m):o.createElement(f,{className:t.text,key:`${c}`},m)))};export{y as Breadcrumbs};
2
- //# sourceMappingURL=Breadcrumbs.esm.js.map
@@ -1,2 +0,0 @@
1
- const a=e=>{const c={"^/soundcheck/campaigns$":"Campaigns","^/soundcheck/tracks$":"Tracks","^/soundcheck/tracks/[^/]+$":"Track Details","^/soundcheck/checks$":"Checks","^/soundcheck/collectors$":"Collectors","^/soundcheck/tech-health$":"Tech Health","^/soundcheck/tech-health/campaigns":"Campaigns","^/soundcheck/tech-health/checks":"Checks","^/soundcheck/tech-health/tracks":"Tracks","^/soundcheck/tech-health/entities":"Entities","^/soundcheck/tech-health/teams":"Teams"};for(const[t,s]of Object.entries(c))if(new RegExp(t).test(e))return s;return null},o=e=>e.split("/").filter(c=>c).map((c,t,s)=>{const h=`/${s.slice(0,t+1).join("/")}`,n=a(h);if(n)return h===e?{title:n}:{path:h,title:n}}).filter(c=>!!c);export{o as generateBreadcrumbs};
2
- //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +0,0 @@
1
- import a,{useEffect as p}from"react";import{useTrackFormContext as s}from"../../contexts/TrackFormContext.esm.js";import"../../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"../../hooks/useSoundcheckAlert.esm.js";import{useCreateTrack as c}from"../../hooks/tracks/useCreateTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{TrackForm as n}from"../TrackForm/TrackForm.esm.js";const d=()=>{const{setIsLoading:o,setShowAddModal:t,showAddModal:e}=s(),{mutateAsync:m,isLoading:r}=c();return p(()=>{o(r)},[o,r]),a.createElement(n,{handleClose:()=>t(!1),title:"Create Track",open:e,onSave:async i=>{await m(i,{onSuccess:()=>t(!1)})}})};export{d as AddTrackView};
2
- //# sourceMappingURL=AddTrackView.esm.js.map