Skip to content

Commit 9603831

Browse files
refactor: update BookingHistory component to use date-fns for timestamp formatting (calcom#27851)
Replaced dayjs with date-fns for better performance and consistency in date handling. Added Tooltip for displaying formatted timestamps and improved search functionality by translating field labels and values. Cleaned up code for better readability.
1 parent 2bc1731 commit 9603831

1 file changed

Lines changed: 23 additions & 13 deletions

File tree

apps/web/modules/booking-audit/components/BookingHistory.tsx

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"use client";
22

3-
import dayjs from "@calcom/dayjs";
43
import type { AuditActorType } from "@calcom/features/booking-audit/lib/repository/IAuditActorRepository";
54
import ServerTrans from "@calcom/lib/components/ServerTrans";
65
import { useLocale } from "@calcom/lib/hooks/useLocale";
@@ -10,6 +9,8 @@ import { Button } from "@calcom/ui/components/button";
109
import { FilterSearchField, Select } from "@calcom/ui/components/form";
1110
import { Icon, type IconName } from "@calcom/ui/components/icon";
1211
import { SkeletonText } from "@calcom/ui/components/skeleton";
12+
import { Tooltip } from "@calcom/ui/components/tooltip";
13+
import { format, formatDistanceToNow } from "date-fns";
1314
import Link from "next/link";
1415
import { useState } from "react";
1516

@@ -286,7 +287,9 @@ function BookingLogsTimeline({ logs }: BookingLogsTimelineProps) {
286287
{actorRole && <span>{` (${t(actorRole)})`}</span>}
287288
</span>
288289
<span></span>
289-
<span>{dayjs(log.timestamp).fromNow()}</span>
290+
<Tooltip content={format(new Date(log.timestamp), "yyyy-MM-dd HH:mm:ss")}>
291+
<span>{formatDistanceToNow(new Date(log.timestamp), { addSuffix: true })}</span>
292+
</Tooltip>
290293
</div>
291294
</div>
292295
</div>
@@ -343,7 +346,7 @@ function BookingLogsTimeline({ logs }: BookingLogsTimelineProps) {
343346
<div className="flex items-start gap-2 py-2 px-3 border-b border-subtle">
344347
<span className="font-medium text-emphasis w-[140px]">{t("timestamp")}</span>
345348
<span className="text-default">
346-
{dayjs(log.timestamp).format("YYYY-MM-DD HH:mm:ss")}
349+
{format(new Date(log.timestamp), "yyyy-MM-dd HH:mm:ss")}
347350
</span>
348351
</div>
349352
{log.displayJson && Object.keys(log.displayJson).length > 0 && (
@@ -374,28 +377,35 @@ function BookingLogsTimeline({ logs }: BookingLogsTimelineProps) {
374377
}
375378

376379
function useBookingLogsFilters(auditLogs: AuditLog[], searchTerm: string, actorFilter: string | null) {
380+
const { t } = useLocale();
381+
377382
const filteredLogs = auditLogs.filter((log) => {
378383
const doesMatchDisplayFields = (): boolean => {
379384
return (
380385
log.displayFields?.some((field) => {
381386
const searchLower = searchTerm.toLowerCase();
387+
388+
const translatedLabel = field.labelKey ? t(field.labelKey) : "";
389+
const translatedValue = field.valueKey ? t(field.valueKey) : "";
390+
const displayValue = field.value ?? "";
391+
const displayValues = field.values ?? [];
392+
382393
return (
383-
field.valueKey?.toLowerCase().includes(searchLower) ||
384-
field.labelKey?.toLowerCase().includes(searchLower) ||
385-
field.value?.toLowerCase().includes(searchLower) ||
386-
field.values?.some((v) => v.toLowerCase().includes(searchLower))
394+
translatedLabel.toLowerCase().includes(searchLower) ||
395+
translatedValue.toLowerCase().includes(searchLower) ||
396+
displayValue.toLowerCase().includes(searchLower) ||
397+
displayValues.some((v) => v.toLowerCase().includes(searchLower))
387398
);
388399
}) ?? false
389400
);
390401
};
391402

392403
const doesMatchActionDisplayTitle = (): boolean => {
393-
return (
394-
log.actionDisplayTitle.key?.toLowerCase().includes(searchTerm.toLowerCase()) ||
395-
Object.values(log.actionDisplayTitle.params ?? {}).some((param) =>
396-
param?.toString().toLowerCase().includes(searchTerm.toLowerCase())
397-
)
398-
);
404+
const translatedTitle = log.actionDisplayTitle.key
405+
? t(log.actionDisplayTitle.key, log.actionDisplayTitle.params ?? {})
406+
: "";
407+
408+
return translatedTitle.toLowerCase().includes(searchTerm.toLowerCase());
399409
};
400410

401411
const matchesSearch =

0 commit comments

Comments
 (0)