Added an SME suitable filter

This commit is contained in:
bwilliams committed 2026-10-16 16:26:32 +01:00
1 parent 49dd11be56
commit 67e2c96ca7
2 files changed
+19

No files matched your search

+14
View File
@@ -176,6 +176,20 @@ export function FilterPanel(props: Props): JSX.Element {
</For>
</div>
</fieldset>
<fieldset class="m-0 min-w-0 border-0 p-0">
<legend class={fieldLabel}>Suitability</legend>
<div class="flex flex-wrap gap-1.5">
<button
type="button"
class={toggleChip}
aria-pressed={props.filters.smeSuitable}
onClick={() => update({ smeSuitable: !props.filters.smeSuitable })}
>
SME suitable
</button>
</div>
</fieldset>
</div>
<ClassificationPicker
+5
View File
@@ -16,6 +16,8 @@ export interface OpportunityFilters {
marks: ReadonlySet<MarkFilter>;
/** Classification ids; empty means every classification. */
classificationIds: ReadonlySet<number>;
/** 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