mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-07-27 14:19:01 +03:00
Add attributes to UI filters list (#23250)
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
* preserve user-set min_score on attribute filters instead of bumping any 0.5 value use model_fields_set to distinguish "user explicitly set min_score" from "Pydantic applied the generic FilterConfig default of 0.5" * add config test for attributes * fix attributes frontend type * add expanded hidden field context * extend schema modification * special case for attributes * i18n for attributes * handle dedicated lpr mode * strip unrendered FilterConfig fields from attribute filter form data to fix validation errors
This commit is contained in:
@@ -1,12 +1,60 @@
|
||||
import type { FrigateConfig } from "@/types/frigateConfig";
|
||||
import type { HiddenFieldContext } from "@/types/configForm";
|
||||
import { getEffectiveAttributeLabels } from "@/utils/configUtil";
|
||||
import type { SectionConfigOverrides } from "./types";
|
||||
|
||||
// Attribute labels (face, license_plate, Frigate+ couriers like DHL/Amazon,
|
||||
// etc.) are populated into objects.filters by the backend even when the
|
||||
// model can't actually detect them. They aren't user-settable, so hide any
|
||||
// `filters.<attr>` patterns from forms and override comparisons.
|
||||
const hideAttributeFilters = (config: FrigateConfig): string[] =>
|
||||
(config.model?.all_attributes ?? []).map((attr) => `filters.${attr}`);
|
||||
// etc.) are populated into objects.filters by the backend for every
|
||||
// attribute the model knows about.
|
||||
//
|
||||
// - Untracked attributes: hide the whole `filters.<attr>` collapsible.
|
||||
// - Tracked attributes: strip the FilterConfig fields we don't expose
|
||||
// (`threshold`, `min_ratio`, `max_ratio`) from the form data so RJSF
|
||||
// doesn't surface them as ad-hoc additionalProperties entries under the
|
||||
// restricted AttributeFilter schema (see modifySchemaForSection objects
|
||||
// branch). The data is sanitized out symmetrically from the baseline
|
||||
// too, so power-user YAML values for those fields are preserved on save
|
||||
// (buildOverrides only emits diffs of fields the form has seen).
|
||||
const ATTRIBUTE_FILTER_HIDDEN_SUBFIELDS = [
|
||||
"threshold",
|
||||
"min_ratio",
|
||||
"max_ratio",
|
||||
];
|
||||
|
||||
const hideAttributeFilters = ({
|
||||
fullConfig,
|
||||
fullCameraConfig,
|
||||
level,
|
||||
formData,
|
||||
}: HiddenFieldContext): string[] => {
|
||||
const trackFromForm = Array.isArray(
|
||||
(formData as { track?: unknown } | undefined)?.track,
|
||||
)
|
||||
? (formData as { track: string[] }).track
|
||||
: undefined;
|
||||
|
||||
const track =
|
||||
trackFromForm ??
|
||||
(level !== "global" ? fullCameraConfig?.objects?.track : undefined) ??
|
||||
fullConfig.objects?.track ??
|
||||
[];
|
||||
|
||||
const attrs = getEffectiveAttributeLabels(
|
||||
fullConfig,
|
||||
fullCameraConfig,
|
||||
level,
|
||||
);
|
||||
const hidden: string[] = [];
|
||||
for (const attr of attrs) {
|
||||
if (!track.includes(attr)) {
|
||||
hidden.push(`filters.${attr}`);
|
||||
} else {
|
||||
for (const field of ATTRIBUTE_FILTER_HIDDEN_SUBFIELDS) {
|
||||
hidden.push(`filters.${attr}.${field}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
return hidden;
|
||||
};
|
||||
|
||||
const objects: SectionConfigOverrides = {
|
||||
base: {
|
||||
|
||||
Reference in New Issue
Block a user