11"use client" ;
22
3- import dayjs from "@calcom/dayjs" ;
43import type { AuditActorType } from "@calcom/features/booking-audit/lib/repository/IAuditActorRepository" ;
54import ServerTrans from "@calcom/lib/components/ServerTrans" ;
65import { useLocale } from "@calcom/lib/hooks/useLocale" ;
@@ -10,6 +9,8 @@ import { Button } from "@calcom/ui/components/button";
109import { FilterSearchField , Select } from "@calcom/ui/components/form" ;
1110import { Icon , type IconName } from "@calcom/ui/components/icon" ;
1211import { SkeletonText } from "@calcom/ui/components/skeleton" ;
12+ import { Tooltip } from "@calcom/ui/components/tooltip" ;
13+ import { format , formatDistanceToNow } from "date-fns" ;
1314import Link from "next/link" ;
1415import { 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
376379function 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