fleet/frontend/interfaces/label.ts
Scott Gress d6eaa0913a
Add ability to target labels on policies (#27599)
For #27276 

# Details

This PR adds the ability to select labels when saving or editing a query
in the UI, so that the query will only target hosts with those labels.
It follows the API design from
https://github.com/fleetdm/fleet/pull/27196, utilizing the
labels_include_any and labels_exclude_any fields. The expectation is
that when creating or updating a query, labels_include_any and
labels_exclude_any are arrays of label names, and when fetching a single
query, they are arrays of objects with a name and an id key.

Other updates in this PR:

* Removed colons from various headings on the Save Policy Modal and Edit
Policy form
* Updated the "Delete label" text
* Removed "Policy runs on all hosts with these platforms." subheading
underneath the platform selector
* TargetLabelSelector component now has `suppressTitle` flag to turn off
the "Target" title.
2025-04-02 16:31:03 -05:00

71 lines
1.9 KiB
TypeScript

import PropTypes from "prop-types";
export default PropTypes.shape({
created_at: PropTypes.string,
updated_at: PropTypes.string,
id: PropTypes.oneOfType([PropTypes.number]),
name: PropTypes.string,
query: PropTypes.string,
label_type: PropTypes.oneOf(["regular", "builtin"]),
label_membership_type: PropTypes.oneOf(["dynamic", "manual"]),
hosts_count: PropTypes.number,
display_text: PropTypes.string,
count: PropTypes.number, // seems to be a repeat of hosts_count issue #1618
host_ids: PropTypes.arrayOf(PropTypes.number),
});
export type LabelType = "regular" | "builtin";
export type LabelMembershipType = "dynamic" | "manual";
export interface ILabelSummary {
id: number;
name: string;
description?: string;
label_type: LabelType;
}
export interface ILabelSoftwareTitle {
id: number;
name: string;
}
export interface ILabelQuery {
id: number;
name: string;
}
export interface ILabelPolicy {
id: number;
name: string;
}
export interface ILabel extends ILabelSummary {
created_at: string;
updated_at: string;
uuid?: string;
query: string;
label_membership_type: LabelMembershipType;
host_count?: number; // returned for built-in labels but not custom labels
display_text: string;
count: number; // seems to be a repeat of hosts_count issue #1618
host_ids: number[] | null;
type?: "custom" | "platform" | "status" | "all";
slug?: string; // e.g., "labels/13" | "online"
target_type?: string; // e.g., "labels"
platform: string;
author_id?: number;
}
// corresponding to fleet>server>fleet>labels.go>LabelSpec
export interface ILabelSpecResponse {
specs: {
id: number;
name: string;
description: string;
query: string;
platform?: string; // improve to only allow possible platforms from API
label_type?: LabelType;
label_membership_type: LabelMembershipType;
hosts?: string[];
};
}