Files
digital-data-react-mui-temp…/src/sections/user/utils.ts
2025-07-21 14:55:22 +02:00

80 lines
1.9 KiB
TypeScript

import type { UserProps } from './user-table-row';
// ----------------------------------------------------------------------
export const visuallyHidden = {
border: 0,
margin: -1,
padding: 0,
width: '1px',
height: '1px',
overflow: 'hidden',
position: 'absolute',
whiteSpace: 'nowrap',
clip: 'rect(0 0 0 0)',
} as const;
// ----------------------------------------------------------------------
export function emptyRows(page: number, rowsPerPage: number, arrayLength: number) {
return page ? Math.max(0, (1 + page) * rowsPerPage - arrayLength) : 0;
}
// ----------------------------------------------------------------------
function descendingComparator<T>(a: T, b: T, orderBy: keyof T) {
if (b[orderBy] < a[orderBy]) {
return -1;
}
if (b[orderBy] > a[orderBy]) {
return 1;
}
return 0;
}
// ----------------------------------------------------------------------
export function getComparator<Key extends keyof any>(
order: 'asc' | 'desc',
orderBy: Key
): (
a: {
[key in Key]: number | string;
},
b: {
[key in Key]: number | string;
}
) => number {
return order === 'desc'
? (a, b) => descendingComparator(a, b, orderBy)
: (a, b) => -descendingComparator(a, b, orderBy);
}
// ----------------------------------------------------------------------
type ApplyFilterProps = {
inputData: UserProps[];
filterName: string;
comparator: (a: any, b: any) => number;
};
export function applyFilter({ inputData, comparator, filterName }: ApplyFilterProps) {
const stabilizedThis = inputData.map((el, index) => [el, index] as const);
stabilizedThis.sort((a, b) => {
const order = comparator(a[0], b[0]);
if (order !== 0) return order;
return a[1] - b[1];
});
inputData = stabilizedThis.map((el) => el[0]);
if (filterName) {
inputData = inputData.filter(
(user) => user.name.toLowerCase().indexOf(filterName.toLowerCase()) !== -1
);
}
return inputData;
}