diff --git a/web/src/components/FilterPanel.tsx b/web/src/components/FilterPanel.tsx
index 7c6e2a2..502de94 100644
--- a/web/src/components/FilterPanel.tsx
+++ b/web/src/components/FilterPanel.tsx
@@ -176,6 +176,20 @@ export function FilterPanel(props: Props): JSX.Element {
+
+
;
/** Classification ids; empty means every classification. */
classificationIds: ReadonlySet;
+ /** Only opportunities suitable for SMEs; false means any. */
+ smeSuitable: boolean;
showHidden: boolean;
}
@@ -25,6 +27,7 @@ export const emptyFilters = (): OpportunityFilters => ({
statuses: new Set(),
marks: new Set(),
classificationIds: new Set(),
+ smeSuitable: false,
showHidden: false,
});
@@ -35,6 +38,7 @@ export const activeFilterCount = (filters: OpportunityFilters): number =>
filters.statuses.size > 0,
filters.marks.size > 0,
filters.classificationIds.size > 0,
+ filters.smeSuitable,
filters.showHidden,
].filter(Boolean).length;
@@ -56,6 +60,7 @@ export function filterOpportunities(
if (!filters.showHidden && annotation.hidden) return false;
if (query && !opportunity.title.toLocaleLowerCase().includes(query)) return false;
if (filters.statuses.size > 0 && !filters.statuses.has(opportunity.status)) return false;
+ if (filters.smeSuitable && !opportunity.sme_suitable) return false;
if (filters.marks.size > 0) {
const matches =
annotation.marks.length === 0