Added an SME suitable filter
This commit is contained in:
1 parent
49dd11be56
commit
67e2c96ca7
2 files changed
+19
No files matched your search
@@ -176,6 +176,20 @@ export function FilterPanel(props: Props): JSX.Element {
|
|||||||
</For>
|
</For>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</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>
|
</div>
|
||||||
|
|
||||||
<ClassificationPicker
|
<ClassificationPicker
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ export interface OpportunityFilters {
|
|||||||
marks: ReadonlySet<MarkFilter>;
|
marks: ReadonlySet<MarkFilter>;
|
||||||
/** Classification ids; empty means every classification. */
|
/** Classification ids; empty means every classification. */
|
||||||
classificationIds: ReadonlySet<number>;
|
classificationIds: ReadonlySet<number>;
|
||||||
|
/** Only opportunities suitable for SMEs; false means any. */
|
||||||
|
smeSuitable: boolean;
|
||||||
showHidden: boolean;
|
showHidden: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,6 +27,7 @@ export const emptyFilters = (): OpportunityFilters => ({
|
|||||||
statuses: new Set(),
|
statuses: new Set(),
|
||||||
marks: new Set(),
|
marks: new Set(),
|
||||||
classificationIds: new Set(),
|
classificationIds: new Set(),
|
||||||
|
smeSuitable: false,
|
||||||
showHidden: false,
|
showHidden: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -35,6 +38,7 @@ export const activeFilterCount = (filters: OpportunityFilters): number =>
|
|||||||
filters.statuses.size > 0,
|
filters.statuses.size > 0,
|
||||||
filters.marks.size > 0,
|
filters.marks.size > 0,
|
||||||
filters.classificationIds.size > 0,
|
filters.classificationIds.size > 0,
|
||||||
|
filters.smeSuitable,
|
||||||
filters.showHidden,
|
filters.showHidden,
|
||||||
].filter(Boolean).length;
|
].filter(Boolean).length;
|
||||||
|
|
||||||
@@ -56,6 +60,7 @@ export function filterOpportunities(
|
|||||||
if (!filters.showHidden && annotation.hidden) return false;
|
if (!filters.showHidden && annotation.hidden) return false;
|
||||||
if (query && !opportunity.title.toLocaleLowerCase().includes(query)) 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.statuses.size > 0 && !filters.statuses.has(opportunity.status)) return false;
|
||||||
|
if (filters.smeSuitable && !opportunity.sme_suitable) return false;
|
||||||
if (filters.marks.size > 0) {
|
if (filters.marks.size > 0) {
|
||||||
const matches =
|
const matches =
|
||||||
annotation.marks.length === 0
|
annotation.marks.length === 0
|
||||||
|
|||||||
Reference in new issue
Block a user