import { AutoEncoder } from '@simonbackx/simple-encoding'; import { PropertyFilter } from '../../filters/PropertyFilter.js'; import type { StamhoofdFilter } from '../../filters/StamhoofdFilter.js'; import { PermissionLevel } from '../../PermissionLevel.js'; import { TranslatedString } from '../../TranslatedString.js'; import type { ObjectWithRecords } from '../ObjectWithRecords.js'; import type { RecordAnswer } from './RecordAnswer.js'; import type { RecordFilterOptions } from './RecordSettings.js'; import { RecordSettings } from './RecordSettings.js'; export interface Filterable { doesMatchFilter(filter: StamhoofdFilter): boolean; } export declare class RecordCategory extends AutoEncoder { id: string; name: TranslatedString; description: TranslatedString; /** * Sometimes a category needs to be in the list but not enabled. * E.g. when decendants can enable it optionally and share the data */ defaultEnabled: boolean; /** * A category can either have childCategories or records, but never both. Records are ignored as soon as the category has at least one child category. * Currently we only support 2 categories deep */ childCategories: RecordCategory[]; records: RecordSettings[]; filter: PropertyFilter | null; get containsSensitiveData(): boolean; getAllRecords(): RecordSettings[]; getAllFilteredRecords(filterValue: T, options?: RecordFilterOptions): RecordSettings[]; filterRecords(filterValue: T, options?: RecordFilterOptions): RecordSettings[]; validate(value: T): void; isComplete(value: T, outdatedTime?: number | null, options?: RecordFilterOptions): boolean; getTotalRecords(value: T): number; getTotalCompleteRecords(value: T): number; isEnabled(filterValue: T, ignoreFilter?: boolean, filterOptions?: RecordFilterOptions): boolean; get externalPermissionLevel(): PermissionLevel; checkPermissionForUserManager(level: PermissionLevel): boolean; isRequired(filterValue: T): boolean; static filterCategories(categories: RecordCategory[], filterValue: T, filterOptions?: RecordFilterOptions): RecordCategory[]; filterChildCategories(filterValue: T, filterOptions?: RecordFilterOptions): RecordCategory[]; /** * Flatten all categories and child categories into a single array */ static flattenCategories(categories: RecordCategory[], filterValue: T, options?: RecordFilterOptions): RecordCategory[]; /** * Get a flat array with record categories whose records match the filter */ static flattenCategoriesWith(categories: RecordCategory[], filter: (record: RecordSettings) => boolean): RecordCategory[]; /** * Remove (child) categories that don't have a record that matches the filter */ static filterRecordsWith(categories: RecordCategory[], filter: (record: RecordSettings) => boolean): RecordCategory[]; static validate(categories: RecordCategory[], filterValue: T): void; static sortAnswers(answers: Map, categories: RecordCategory[]): RecordAnswer[]; static removeOldAnswers(categories: RecordCategory[], filterValue: T, filterOptions?: RecordFilterOptions): T; duplicate(): this; } //# sourceMappingURL=RecordCategory.d.ts.map