import * as React from 'react'; import dayjs from 'dayjs'; import { QueryRecord } from '../../types/QueryTypes'; import Expand, { ExpandButton } from '../../uikit/Expand'; import OverflowTooltip from '../../uikit/OverflowTooltip'; import Text, { TextSizes, TextColors } from '../../uikit/Text'; import { localizeAndFormatTimestamp } from '../../utils/DateUtils'; import QueryFilter from './QueryFilter'; import { DATE_FORMAT } from '../../Constants'; import styles from './QueryCards.module.css'; interface QueryCardActionDataProps { user: string; action: string; timestamp: number; } export const QueryCardActionData = ({ user, action, timestamp }: QueryCardActionDataProps) => { return ( {user} {action} {dayjs.unix(timestamp).format(DATE_FORMAT)} ); }; interface QueryCardHeaderProps { children: React.ReactNode; isCompact?: boolean; } export const QueryCardHeader = ({ children, isCompact = false }: QueryCardHeaderProps) => { return
{children}
; }; interface QueryCardBodyProps { query: QueryRecord; queryFilterPlaceholder?: React.ReactNode; intervalCopy: string; isCompact?: boolean; } export const QueryCardBody = ({ query, queryFilterPlaceholder = null, intervalCopy, isCompact = false, }: QueryCardBodyProps) => { const getOverflowTooltipContent = (content: React.ReactNode) => { const topNTables = query.top_n.length === 0 ? null : ( <>
Top N Tables:
); return ( <> {content} {topNTables} ); }; const renderQueryFilter = () => { if (query.query_filter === '') { return queryFilterPlaceholder; } return ( <> {isCompact ? null :
} ); }; const renderQueryInfo = () => { const delimiter = ' • '; const dateRange = `${localizeAndFormatTimestamp(query.date_range.start)} - ${localizeAndFormatTimestamp( query.date_range.end )}`; const additionalQueryInfo = [ `${localizeAndFormatTimestamp(query.date_range.start)} - ${localizeAndFormatTimestamp(query.date_range.end)}`, ]; if (intervalCopy !== '') { additionalQueryInfo.unshift(intervalCopy); } if (query.top_n.length > 0) { additionalQueryInfo.push(`Top N: ${query.top_n.join(', ')}`); } return ( {additionalQueryInfo.join(delimiter)} ); }; return (
{renderQueryFilter()} {renderQueryInfo()}
); };