import { Tooltip } from '@planview/pv-uikit'
import {
theme,
overflow,
spacingPx,
sizePx,
text,
} from '@planview/pv-utilities'
import React from 'react'
import styled, { css } from 'styled-components'
import { ArrowDown, ArrowUp } from '@planview/pv-icons'
const CCell = styled.div<{ $rightAlign: boolean }>`
${text.semibold};
height: 100%;
min-height: ${sizePx.small};
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
min-width: 0;
padding: 0 ${spacingPx.small};
${(props) =>
props.$rightAlign &&
css`
justify-content: flex-end;
`}
`
const Ellipsed = styled.div`
${overflow.ellipsis};
`
const SortIconContainer = styled.div`
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: top;
position: relative;
`
const SortNumber = styled.div`
${text.small};
line-height: 18px;
font-variant-numeric: tabular-nums;
font-weight: bold;
color: ${theme.textPrimary};
position: absolute;
text-align: center;
width: ${sizePx.xsmall};
right: 0;
top: ${spacingPx.xsmall};
`
const SortWithNumber = ({
direction,
number,
}: {
direction: 'asc' | 'desc'
number?: number
}) => {
const icon =
direction === 'asc' ? (
) : (
)
return (
{icon}
{number ? {number} : undefined}
)
}
export type GridHeaderCellDefault = {
/**
* Id of the column
*/
columnId: string
/**
* Does the column contain left aligned cells
* or right aligned cells
*/
align?: 'left' | 'right'
/**
* Text content of the header cell
*/
label: string
/**
* Accessible tab index. You should generally pass through the tabIndex
* provided to the Renderer component.
*/
tabIndex: number
/**
* Does this column support sorting
*/
sortable?: boolean
/**
* Is this column sorted and if so, which direction is it sorted.
*/
sortDirection?: 'asc' | 'desc'
/**
* If this column is part of a multi-column sort, which position
* is this column in the combination.
*/
sortNumber?: number
}
/**
* This is the default header cell renderer for the pv-table.
*/
const GridHeaderCellDefaultImpl = ({
align,
label,
tabIndex,
sortable,
sortDirection,
sortNumber,
}: GridHeaderCellDefault) => {
const sortDetails =
sortable && sortDirection ? (
) : null
return (
{align === 'right' && sortDetails}
{label}
{align !== 'right' && sortDetails}
)
}
export const GridHeaderCellDefault = React.memo(
GridHeaderCellDefaultImpl
) as typeof GridHeaderCellDefaultImpl