From bd5de8e894c22e6812dda3d8104cf5efd036d626 Mon Sep 17 00:00:00 2001 From: Christopher Lo <46541035+topher-lo@users.noreply.github.com> Date: Fri, 8 Mar 2024 05:52:32 +0000 Subject: [PATCH] feat(ui): Implement malice / context badges and filter --- frontend/src/components/cases/columns.tsx | 41 ++++++++--- .../cases/data-table-row-actions.tsx | 69 ------------------- .../components/cases/data-table-toolbar.tsx | 16 ++++- .../cases/data/{data.tsx => categories.tsx} | 15 ++++ frontend/src/components/cases/data/schema.ts | 2 +- 5 files changed, 61 insertions(+), 82 deletions(-) delete mode 100644 frontend/src/components/cases/data-table-row-actions.tsx rename frontend/src/components/cases/data/{data.tsx => categories.tsx} (81%) diff --git a/frontend/src/components/cases/columns.tsx b/frontend/src/components/cases/columns.tsx index 5ba9da3b..55ea5a63 100644 --- a/frontend/src/components/cases/columns.tsx +++ b/frontend/src/components/cases/columns.tsx @@ -2,13 +2,18 @@ import { ColumnDef } from "@tanstack/react-table" +import { Badge } from "@/components/ui/badge" import { Checkbox } from "@/components/ui/checkbox" +import { DataTableColumnHeader } from "@/components/cases/data-table-column-header" +import { + indicators, + priorities, + statuses, +} from "@/components/cases/data/categories" -import { DataTableColumnHeader } from "./data-table-column-header" -import { priorities, statuses } from "./data/data" -import { Task } from "./data/schema" +import { Case } from "./data/schema" -export const columns: ColumnDef[] = [ +export const columns: ColumnDef[] = [ { id: "select", header: ({ table }) => ( @@ -134,14 +139,29 @@ export const columns: ColumnDef[] = [ ), cell: ({ row }) => { + const label = row.getValue("malice") as string + const bg_color = label === "malicious" ? "bg-red-100" : "bg-gray-100" + const border_color = + label === "malicious" ? "border-red-400" : "border-gray-400" + const text_color = + label === "malicious" ? "text-red-700" : "text-gray-700" + return (
- - {row.getValue("malice")} + + + {label} +
) }, + filterFn: (row, id, value) => { + return value.includes(row.getValue(id)) + }, }, { accessorKey: "action", @@ -151,7 +171,7 @@ export const columns: ColumnDef[] = [ cell: ({ row }) => { return (
- + {row.getValue("action")}
@@ -164,10 +184,13 @@ export const columns: ColumnDef[] = [ ), cell: ({ row }) => { + const context = row.getValue("context") as string[] return (
- - {row.getValue("context")} + + {context.map((label) => ( + {label} + ))}
) diff --git a/frontend/src/components/cases/data-table-row-actions.tsx b/frontend/src/components/cases/data-table-row-actions.tsx deleted file mode 100644 index 16eac5e7..00000000 --- a/frontend/src/components/cases/data-table-row-actions.tsx +++ /dev/null @@ -1,69 +0,0 @@ -"use client" - -import { DotsHorizontalIcon } from "@radix-ui/react-icons" -import { Row } from "@tanstack/react-table" - -import { Button } from "@/components/ui/button" -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuRadioGroup, - DropdownMenuRadioItem, - DropdownMenuSeparator, - DropdownMenuShortcut, - DropdownMenuSub, - DropdownMenuSubContent, - DropdownMenuSubTrigger, - DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu" - -import { labels } from "./data/data" -import { caseSchema } from "./data/schema" - -interface DataTableRowActionsProps { - row: Row -} - -export function DataTableRowActions({ - row, -}: DataTableRowActionsProps) { - const task = caseSchema.parse(row.original) - - return ( - - - - - - Edit - Make a copy - Favorite - - - Labels - - - {labels.map((label) => ( - - {label.label} - - ))} - - - - - - Delete - ⌘⌫ - - - - ) -} diff --git a/frontend/src/components/cases/data-table-toolbar.tsx b/frontend/src/components/cases/data-table-toolbar.tsx index 2da7a3da..2f290b91 100644 --- a/frontend/src/components/cases/data-table-toolbar.tsx +++ b/frontend/src/components/cases/data-table-toolbar.tsx @@ -12,10 +12,13 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select" +import { DataTableFacetedFilter } from "@/components/cases/data-table-faceted-filter" import { DataTableViewOptions } from "@/components/cases/data-table-view-options" - -import { DataTableFacetedFilter } from "./data-table-faceted-filter" -import { priorities, statuses } from "./data/data" +import { + indicators, + priorities, + statuses, +} from "@/components/cases/data/categories" interface DataTableToolbarProps { table: Table @@ -51,6 +54,13 @@ export function DataTableToolbar({ options={priorities} /> )} + {table.getColumn("malice") && ( + + )} {isFiltered && (