From 3794521c5628f94846f39f3e4cfa549b1ee3bf37 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Tue, 26 Nov 2024 15:07:20 -0800 Subject: [PATCH 1/3] improvement: project select filterable on audit logs with minor UI revisions --- .../components/v2/DatePicker/DatePicker.tsx | 4 +- .../v2/FilterableSelect/FilterableSelect.tsx | 2 +- .../AuditLogsPage/components/LogsFilter.tsx | 104 +++++++++--------- .../AuditLogsPage/components/LogsSection.tsx | 4 +- .../Org/AuditLogsPage/components/types.tsx | 2 +- 5 files changed, 56 insertions(+), 60 deletions(-) diff --git a/frontend/src/components/v2/DatePicker/DatePicker.tsx b/frontend/src/components/v2/DatePicker/DatePicker.tsx index 291a22206..4e4b1d1ec 100644 --- a/frontend/src/components/v2/DatePicker/DatePicker.tsx +++ b/frontend/src/components/v2/DatePicker/DatePicker.tsx @@ -14,6 +14,7 @@ export type DatePickerProps = Omit & { onChange: (date?: Date) => void; popUpProps: PopoverProps; popUpContentProps: PopoverContentProps; + dateFormat?: string; }; // Doc: https://react-day-picker.js.org/ @@ -22,6 +23,7 @@ export const DatePicker = ({ onChange, popUpProps, popUpContentProps, + dateFormat = "PPP", ...props }: DatePickerProps) => { const [timeValue, setTimeValue] = useState(value ? format(value, "HH:mm") : "00:00"); @@ -53,7 +55,7 @@ export const DatePicker = ({ diff --git a/frontend/src/components/v2/FilterableSelect/FilterableSelect.tsx b/frontend/src/components/v2/FilterableSelect/FilterableSelect.tsx index a673b7cf8..f27322c9d 100644 --- a/frontend/src/components/v2/FilterableSelect/FilterableSelect.tsx +++ b/frontend/src/components/v2/FilterableSelect/FilterableSelect.tsx @@ -47,7 +47,7 @@ export const FilterableSelect = ({ isMulti, closeMenuOnSelect, ...props }: P indicatorSeparator: () => "bg-bunker-400", dropdownIndicator: () => "text-bunker-200 p-1", menu: () => - "mt-2 border text-sm text-mineshaft-200 bg-mineshaft-900 border-mineshaft-600 rounded-md", + "mt-2 border text-sm text-mineshaft-200 thin-scrollbar bg-mineshaft-900 border-mineshaft-600 rounded-md", groupHeading: () => "ml-3 mt-2 mb-1 text-mineshaft-400 text-sm", option: ({ isFocused, isSelected }) => twMerge( diff --git a/frontend/src/views/Org/AuditLogsPage/components/LogsFilter.tsx b/frontend/src/views/Org/AuditLogsPage/components/LogsFilter.tsx index 2447acbeb..d3809e72c 100644 --- a/frontend/src/views/Org/AuditLogsPage/components/LogsFilter.tsx +++ b/frontend/src/views/Org/AuditLogsPage/components/LogsFilter.tsx @@ -12,6 +12,7 @@ import { DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, + FilterableSelect, FormControl, Select, SelectItem @@ -64,7 +65,7 @@ export const LogsFilter = ({ useEffect(() => { if (workspacesInOrg.length) { - setValue("projectId", workspacesInOrg[0].id); + setValue("project", workspacesInOrg[0]); } }, [workspaces]); @@ -111,11 +112,33 @@ export const LogsFilter = ({ return (
-
+ {isOrgAuditLogs && workspacesInOrg.length > 0 && ( + ( + + ({ name, id }))} + getOptionValue={(option) => option.id} + getOptionLabel={(option) => option.name} + /> + + )} + /> + )} +
-
+
{selectedEventTypes?.length === 1 ? eventTypes.find((eventType) => eventType.value === selectedEventTypes[0]) ?.label @@ -235,37 +258,6 @@ export const LogsFilter = ({ )} /> - - {isOrgAuditLogs && workspacesInOrg.length > 0 && ( - ( - - - - )} - /> - )} +
-
); }; diff --git a/frontend/src/views/Org/AuditLogsPage/components/LogsSection.tsx b/frontend/src/views/Org/AuditLogsPage/components/LogsSection.tsx index 968841f3b..f121ddbb8 100644 --- a/frontend/src/views/Org/AuditLogsPage/components/LogsSection.tsx +++ b/frontend/src/views/Org/AuditLogsPage/components/LogsSection.tsx @@ -47,7 +47,7 @@ export const LogsSection = ({ const { control, reset, watch, setValue } = useForm({ resolver: yupResolver(auditLogFilterFormSchema), defaultValues: { - projectId: undefined, + project: null, actor: presets?.actorId, eventType: presets?.eventType || [], page: 1, @@ -66,7 +66,7 @@ export const LogsSection = ({ const eventType = watch("eventType") as EventType[] | undefined; const userAgentType = watch("userAgentType") as UserAgentType | undefined; const actor = watch("actor"); - const projectId = watch("projectId"); + const projectId = watch("project")?.id; const startDate = watch("startDate"); const endDate = watch("endDate"); diff --git a/frontend/src/views/Org/AuditLogsPage/components/types.tsx b/frontend/src/views/Org/AuditLogsPage/components/types.tsx index 12afd0779..49cbb74fe 100644 --- a/frontend/src/views/Org/AuditLogsPage/components/types.tsx +++ b/frontend/src/views/Org/AuditLogsPage/components/types.tsx @@ -5,7 +5,7 @@ import { EventType, UserAgentType } from "@app/hooks/api/auditLogs/enums"; export const auditLogFilterFormSchema = yup .object({ eventMetadata: yup.object({}).optional(), - projectId: yup.string().optional(), + project: yup.object({ id: yup.string().required(), name: yup.string().required() }).nullable(), eventType: yup.array(yup.string().oneOf(Object.values(EventType), "Invalid event type")), actor: yup.string(), userAgentType: yup.string().oneOf(Object.values(UserAgentType), "Invalid user agent type"), From ca55f19926fd26d93f941bd1a6e78d3db7085707 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Tue, 26 Nov 2024 15:10:05 -0800 Subject: [PATCH 2/3] improvement: add placeholder --- frontend/src/views/Org/AuditLogsPage/components/LogsFilter.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/views/Org/AuditLogsPage/components/LogsFilter.tsx b/frontend/src/views/Org/AuditLogsPage/components/LogsFilter.tsx index d3809e72c..3ac1cf8a3 100644 --- a/frontend/src/views/Org/AuditLogsPage/components/LogsFilter.tsx +++ b/frontend/src/views/Org/AuditLogsPage/components/LogsFilter.tsx @@ -130,6 +130,7 @@ export const LogsFilter = ({ ({ name, id }))} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} From 48fb77be49a45fc20b7c97553f95ba7226e60ea0 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Wed, 27 Nov 2024 12:17:30 -0800 Subject: [PATCH 3/3] improvement: typed date format --- frontend/src/components/v2/DatePicker/DatePicker.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/v2/DatePicker/DatePicker.tsx b/frontend/src/components/v2/DatePicker/DatePicker.tsx index 4e4b1d1ec..528e25ca8 100644 --- a/frontend/src/components/v2/DatePicker/DatePicker.tsx +++ b/frontend/src/components/v2/DatePicker/DatePicker.tsx @@ -14,7 +14,7 @@ export type DatePickerProps = Omit & { onChange: (date?: Date) => void; popUpProps: PopoverProps; popUpContentProps: PopoverContentProps; - dateFormat?: string; + dateFormat?: "PPP" | "PP" | "P"; // extend as needed }; // Doc: https://react-day-picker.js.org/