import { SKELETON_LOADER_HEIGHT_SIZES } from '@/activities/components/SkeletonLoader'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { Trans } from '@lingui/react/macro'; import { ChangeEvent, ReactNode, useRef } from 'react'; import Skeleton, { SkeletonTheme } from 'react-loading-skeleton'; import { AppTooltip, Avatar, AvatarType, IconComponent } from 'twenty-ui'; import { v4 as uuidV4 } from 'uuid'; import { beautifyExactDateTime, beautifyPastDateRelativeToNow, } from '~/utils/date-utils'; import { isDefined } from 'twenty-shared/utils'; type ShowPageSummaryCardProps = { avatarPlaceholder: string; avatarType: AvatarType; date: string; id?: string; logoOrAvatar?: string; icon?: IconComponent; iconColor?: string; onUploadPicture?: (file: File) => void; title: ReactNode; loading: boolean; isMobile?: boolean; }; export const StyledShowPageSummaryCard = styled.div<{ isMobile: boolean; }>` align-items: center; display: flex; flex-direction: ${({ isMobile }) => (isMobile ? 'row' : 'column')}; gap: ${({ theme, isMobile }) => isMobile ? theme.spacing(2) : theme.spacing(3)}; justify-content: ${({ isMobile }) => (isMobile ? 'flex-start' : 'center')}; padding: ${({ theme }) => theme.spacing(4)}; border-bottom: 1px solid ${({ theme }) => theme.border.color.light}; height: ${({ isMobile }) => (isMobile ? '77px' : '127px')}; box-sizing: border-box; `; const StyledInfoContainer = styled.div<{ isMobile: boolean }>` align-items: ${({ isMobile }) => (isMobile ? 'flex-start' : 'center')}; display: flex; flex-direction: column; gap: ${({ theme }) => theme.spacing(1)}; width: 100%; `; const StyledDate = styled.div<{ isMobile: boolean }>` color: ${({ theme }) => theme.font.color.tertiary}; cursor: pointer; padding-left: ${({ theme, isMobile }) => (isMobile ? theme.spacing(2) : 0)}; `; const StyledTitle = styled.div<{ isMobile: boolean }>` color: ${({ theme }) => theme.font.color.primary}; display: flex; font-size: ${({ theme }) => theme.font.size.xl}; font-weight: ${({ theme }) => theme.font.weight.semiBold}; justify-content: ${({ isMobile }) => (isMobile ? 'flex-start' : 'center')}; padding-left: ${({ theme, isMobile }) => (isMobile ? theme.spacing(2) : 0)}; width: 90%; `; const StyledAvatarWrapper = styled.div<{ isAvatarEditable: boolean; hasIcon: boolean; }>` background-color: ${({ theme, hasIcon }) => hasIcon ? theme.background.transparent.light : 'unset'}; border-radius: ${({ theme }) => theme.border.radius.sm}; cursor: ${({ isAvatarEditable }) => isAvatarEditable ? 'pointer' : 'default'}; `; const StyledFileInput = styled.input` display: none; `; const StyledSubSkeleton = styled.div` align-items: center; display: flex; height: 37px; justify-content: center; width: 108px; `; const StyledShowPageSummaryCardSkeletonLoader = () => { const theme = useTheme(); return ( ); }; export const ShowPageSummaryCard = ({ avatarPlaceholder, avatarType, date, id, logoOrAvatar, icon, iconColor, onUploadPicture, title, loading, isMobile = false, }: ShowPageSummaryCardProps) => { const beautifiedCreatedAt = date !== '' ? beautifyPastDateRelativeToNow(date) : ''; const exactCreatedAt = date !== '' ? beautifyExactDateTime(date) : ''; const dateElementId = `date-id-${uuidV4()}`; const inputFileRef = useRef(null); const onFileChange = (e: ChangeEvent) => { if (isDefined(e.target.files)) onUploadPicture?.(e.target.files[0]); }; const handleAvatarClick = () => { inputFileRef?.current?.click?.(); }; if (loading) return ( ); return ( {title} {beautifiedCreatedAt && ( Added {beautifiedCreatedAt} )} ); };