File "index.js"

Full Path: /home/fresvfqn/waterdamagerestorationandrepairsmithtown.com/wp-content/plugins/surerank/src/global/components/sortable-column/index.js
File size: 1.36 KB
MIME-type: text/x-java
Charset: utf-8

/**
 * Utility functions for admin dashboard
 */

import { Table, Container } from '@bsf/force-ui';
import { ChevronsUpDown, ArrowUp, ArrowDown } from 'lucide-react';
import { cn } from '@/functions/utils';

/**
 * Sortable table column component with sort indicators
 *
 * @param {Object}   props             - Component props
 * @param {*}        props.children    - Column content
 * @param {string}   props.className   - Additional CSS classes
 * @param {string}   props.sortKey     - Key used for sorting
 * @param {Function} props.onSort      - Sort handler function
 * @param {Object}   props.currentSort - Current sort configuration {key, direction}
 * @return {JSX.Element} Sortable column component
 */
export const SortableColumn = ( {
	children,
	className,
	sortKey,
	onSort,
	currentSort,
	...props
} ) => {
	const isActive = currentSort?.key === sortKey;
	let sortIcon = <ChevronsUpDown className="size-4 shrink-0" />;

	if ( isActive ) {
		sortIcon =
			currentSort.direction === 'asc' ? (
				<ArrowUp className="size-4 shrink-0" />
			) : (
				<ArrowDown className="size-4 shrink-0" />
			);
	}

	return (
		<Table.HeadCell
			className={ cn( className, 'cursor-pointer select-none' ) }
			onClick={ () => onSort( sortKey ) }
			{ ...props }
		>
			<Container align="center" className="gap-0.5">
				{ children }
				{ sortIcon }
			</Container>
		</Table.HeadCell>
	);
};