configuration/constants/filter.constants.ts

configuration/constants/filter.constants.ts is a file in Bane's Lab Build Scripts. 70 lines of code and 5 definitions.

import { ALGO_FACE, ARCH_FACE, LEX_FACE } from "@govlab/constants";
import type { FacetField } from "#types/filter.types";

const TRUE = "true";
const FALSE = "false";

const idsOf = function idsOf(records: readonly { readonly id: string }[]): readonly string[] {
    return records.map((record) => record.id);
};

export const KIND_FIELD = "kind";

export const FACET_FIELDS: readonly FacetField[] = [
    {
        collection: ARCH_FACE,
        field: "type",
        members: (context, value) => idsOf(context.arch.query({ type: value })),
        values: (context) => context.arch.all().map((principle) => principle.type),
    },
    {
        collection: ARCH_FACE,
        field: "category",
        members: (context, value) => idsOf(context.arch.query({ category: value })),
        values: (context) => context.arch.all().map((principle) => principle.category),
    },
    {
        collection: ARCH_FACE,
        field: "severity",
        members: (context, value) => idsOf(context.arch.query({ severity: value })),
        values: (context) => context.arch.all().map((principle) => principle.severity),
    },
    {
        collection: ARCH_FACE,
        field: "scope",
        members: (context, value) => idsOf(context.arch.query({ scope: value })),
        values: (context) => context.arch.all().flatMap((principle) => principle.scope),
    },
    {
        collection: LEX_FACE,
        field: "kind",
        members: (context, value) => idsOf(context.lex.query({ kind: value })),
        values: (context) => context.lex.all().map((term) => term.kind),
    },
    {
        collection: LEX_FACE,
        field: "category",
        members: (context, value) => idsOf(context.lex.query({ category: value })),
        values: (context) => context.lex.all().map((term) => term.category),
    },
    {
        collection: LEX_FACE,
        field: "enforcedBy",
        members: (context, value) => idsOf(context.lex.query({ enforcedBy: value })),
        values: (context) => context.lex.all().flatMap((term) => term.enforcedBy),
    },
    {
        collection: ALGO_FACE,
        field: "domain",
        members: (context, value) => idsOf(context.algo.query({ domain: value })),
        values: (context) => context.algo.all().map((contract) => contract.domain),
    },
    {
        collection: ALGO_FACE,
        field: "force",
        members: (context, value) => idsOf(context.algo.query({ force: value })),
        values: (context) => context.algo.all().flatMap((contract) => contract.force),
    },
    {
        collection: ALGO_FACE,
        field: "meta",
        members: (context, value) => idsOf(context.algo.query({ meta: value === TRUE })),
        values: (context) => context.algo.all().map((contract) => (contract.meta === true ? TRUE : FALSE)),
    },
];