From 45eccc1be19aa5d9fdecd060b5906db13a611b2f Mon Sep 17 00:00:00 2001 From: jacobshandling <61553566+jacobshandling@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:05:43 -0700 Subject: [PATCH] Map raw label membership type to copy meant for render (#34387) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Related issue:** Resolves #34239 Screenshot 2025-10-16 at 12 11
39 PM - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually --- frontend/interfaces/label.ts | 9 +++++++++ .../LabelsTable/LabelsTable.tests.tsx | 18 +++++++++++++++++- .../LabelsTable/LabelsTableConfig.tsx | 11 +++++------ 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/frontend/interfaces/label.ts b/frontend/interfaces/label.ts index 4672978144..fbce8d852d 100644 --- a/frontend/interfaces/label.ts +++ b/frontend/interfaces/label.ts @@ -16,6 +16,15 @@ export default PropTypes.shape({ export type LabelType = "regular" | "builtin"; export type LabelMembershipType = "dynamic" | "manual" | "host_vitals"; +export const LabelMembershipTypeToDisplayCopy: Record< + LabelMembershipType, + string +> = { + dynamic: "Dynamic", + manual: "Manual", + host_vitals: "Host vitals", +}; + export type LabelHostVitalsCriterion = | "end_user_idp_group" | "end_user_idp_department"; // for now, may expand to be configurable diff --git a/frontend/pages/labels/ManageLabelsPage/LabelsTable/LabelsTable.tests.tsx b/frontend/pages/labels/ManageLabelsPage/LabelsTable/LabelsTable.tests.tsx index 53dfc26c61..b73aef2cb3 100644 --- a/frontend/pages/labels/ManageLabelsPage/LabelsTable/LabelsTable.tests.tsx +++ b/frontend/pages/labels/ManageLabelsPage/LabelsTable/LabelsTable.tests.tsx @@ -48,6 +48,7 @@ describe("LabelsTable", () => { name: "Custom label 1", label_type: "regular", description: "First custom label", + label_membership_type: "dynamic", }), createMockLabel({ id: 3, @@ -59,6 +60,14 @@ describe("LabelsTable", () => { name: "Custom label 2", label_type: "regular", description: "Second custom label", + label_membership_type: "manual", + }), + createMockLabel({ + id: 5, + name: "Custom label 3", + label_type: "regular", + description: "Third custom label", + label_membership_type: "host_vitals", }), ]; @@ -75,9 +84,16 @@ describe("LabelsTable", () => { // Custom labels should be visible, each with the regular copy and the full name in a tooltip expect(screen.queryAllByText("Custom label 1")).toHaveLength(2); - expect(screen.queryAllByText("Custom label 2")).toHaveLength(2); expect(screen.queryAllByText("First custom label")).toHaveLength(2); + expect(screen.queryAllByText("Dynamic")).toHaveLength(1); + + expect(screen.queryAllByText("Custom label 2")).toHaveLength(2); expect(screen.queryAllByText("Second custom label")).toHaveLength(2); + expect(screen.queryAllByText("Manual")).toHaveLength(1); + + expect(screen.queryAllByText("Custom label 3")).toHaveLength(2); + expect(screen.queryAllByText("Third custom label")).toHaveLength(2); + expect(screen.queryAllByText("Host vitals")).toHaveLength(1); // Builtin labels should not be visible expect(screen.queryByText("All hosts")).not.toBeInTheDocument(); diff --git a/frontend/pages/labels/ManageLabelsPage/LabelsTable/LabelsTableConfig.tsx b/frontend/pages/labels/ManageLabelsPage/LabelsTable/LabelsTableConfig.tsx index 64a81cdadc..3149dfae6c 100644 --- a/frontend/pages/labels/ManageLabelsPage/LabelsTable/LabelsTableConfig.tsx +++ b/frontend/pages/labels/ManageLabelsPage/LabelsTable/LabelsTableConfig.tsx @@ -1,16 +1,14 @@ import React from "react"; -import { ILabel } from "interfaces/label"; +import { ILabel, LabelMembershipTypeToDisplayCopy } from "interfaces/label"; import { IDropdownOption } from "interfaces/dropdownOption"; import TextCell from "components/TableContainer/DataTable/TextCell"; -import ActionsDropdown from "components/ActionsDropdown"; import { isGlobalAdmin, isGlobalMaintainer, isAnyTeamMaintainerOrTeamAdmin, } from "utilities/permissions/permissions"; import { IUser } from "interfaces/user"; -import { capitalize } from "lodash"; import HeaderCell from "components/TableContainer/DataTable/HeaderCell"; import ViewAllHostsLink from "components/ViewAllHostsLink"; import TooltipTruncatedTextCell from "components/TableContainer/DataTable/TooltipTruncatedTextCell"; @@ -131,9 +129,10 @@ const generateTableHeaders = ( /> ), accessor: "label_membership_type", - Cell: (cellProps: ICellProps) => ( - - ), + Cell: (cellProps: ICellProps) => { + const type = cellProps.row.original.label_membership_type; + return ; + }, }, { title: "Actions",