diff --git a/.changeset/rare-melons-battle.md b/.changeset/rare-melons-battle.md
new file mode 100644
index 0000000000..85fd72c763
--- /dev/null
+++ b/.changeset/rare-melons-battle.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-react': minor
+---
+
+Add `initialFilter` prop to EntityLifecyclePicker. This allows you to set an initial lifecycle for the catalog.
diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md
index 9528c55326..095b6832a4 100644
--- a/plugins/catalog-react/api-report.md
+++ b/plugins/catalog-react/api-report.md
@@ -194,7 +194,9 @@ export class EntityLifecycleFilter implements EntityFilter {
}
// @public (undocumented)
-export const EntityLifecyclePicker: () => JSX.Element | null;
+export const EntityLifecyclePicker: (props: {
+ initialFilter?: string[];
+}) => JSX.Element | null;
// @public
export const EntityListContext: React_2.Context<
diff --git a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx
index ef77f7615f..3ee610ddaf 100644
--- a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx
+++ b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx
@@ -210,4 +210,21 @@ describe('', () => {
lifecycles: undefined,
});
});
+ it('responds to initialFilter prop', () => {
+ const updateFilters = jest.fn();
+ render(
+
+
+ ,
+ );
+ expect(updateFilters).toHaveBeenLastCalledWith({
+ lifecycles: new EntityLifecycleFilter(['production']),
+ });
+ });
});
diff --git a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx
index b941f94531..77925598e1 100644
--- a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx
+++ b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx
@@ -47,7 +47,8 @@ const icon = ;
const checkedIcon = ;
/** @public */
-export const EntityLifecyclePicker = () => {
+export const EntityLifecyclePicker = (props: { initialFilter?: string[] }) => {
+ const { initialFilter = [] } = props;
const classes = useStyles();
const {
updateFilters,
@@ -64,7 +65,7 @@ export const EntityLifecyclePicker = () => {
const [selectedLifecycles, setSelectedLifecycles] = useState(
queryParamLifecycles.length
? queryParamLifecycles
- : filters.lifecycles?.values ?? [],
+ : filters.lifecycles?.values ?? initialFilter,
);
// Set selected lifecycles on query parameter updates; this happens at initial page load and from