{props.isAscOrder !== undefined ? (
) : null}
{renameColumn && (
)}
{!renameColumn && (
{column.render("Header")}
)}
{props.displayColumnActions && (
toggleRenameColumn(true)}
/>
)}
);
};
export const getAllTableColumnKeys = (tableData: object[]) => {
const columnKeys: string[] = [];
for (let i = 0, tableRowCount = tableData.length; i < tableRowCount; i++) {
const row = tableData[i];
for (const key in row) {
if (!columnKeys.includes(key)) {
columnKeys.push(key);
}
}
}
return columnKeys;
};
export const reorderColumns = (
columns: ReactTableColumnProps[],
columnOrder: string[],
) => {
const reorderedColumns = [];
const reorderedFlagMap: { [key: string]: boolean } = {};
for (let index = 0; index < columns.length; index++) {
const accessor = columnOrder[index];
if (accessor) {
const column = columns.filter((col: ReactTableColumnProps) => {
return col.accessor === accessor;
});
if (column.length && !reorderedFlagMap[column[0].accessor]) {
reorderedColumns.push(column[0]);
reorderedFlagMap[column[0].accessor] = true;
} else if (!reorderedFlagMap[columns[index].accessor]) {
reorderedColumns.push(columns[index]);
reorderedFlagMap[columns[index].accessor] = true;
}
} else if (!reorderedFlagMap[columns[index].accessor]) {
reorderedColumns.push(columns[index]);
reorderedFlagMap[columns[index].accessor] = true;
}
}
if (reorderedColumns.length < columns.length) {
for (let index = 0; index < columns.length; index++) {
if (!reorderedFlagMap[columns[index].accessor]) {
reorderedColumns.push(columns[index]);
reorderedFlagMap[columns[index].accessor] = true;
}
}
}
return reorderedColumns;
};
export function sortTableFunction(
tableData: object[],
columns: ReactTableColumnProps[],
sortedColumn: string,
sortOrder: boolean,
) {
const columnType =
columns.find(
(column: ReactTableColumnProps) => column.accessor === sortedColumn,
)?.metaProperties?.type || ColumnTypes.TEXT;
return tableData.sort(
(a: { [key: string]: any }, b: { [key: string]: any }) => {
if (a[sortedColumn] !== undefined && b[sortedColumn] !== undefined) {
switch (columnType) {
case ColumnTypes.CURRENCY:
case ColumnTypes.NUMBER:
return sortOrder
? Number(a[sortedColumn]) > Number(b[sortedColumn])
? 1
: -1
: Number(b[sortedColumn]) > Number(a[sortedColumn])
? 1
: -1;
case ColumnTypes.DATE:
return sortOrder
? moment(a[sortedColumn]).isAfter(b[sortedColumn])
? 1
: -1
: moment(b[sortedColumn]).isAfter(a[sortedColumn])
? 1
: -1;
default:
return sortOrder
? a[sortedColumn].toString().toUpperCase() >
b[sortedColumn].toString().toUpperCase()
? 1
: -1
: b[sortedColumn].toString().toUpperCase() >
a[sortedColumn].toString().toUpperCase()
? 1
: -1;
}
} else {
return sortOrder ? 1 : 0;
}
},
);
}
export const ConditionFunctions: {
[key: string]: (a: any, b: any) => boolean;
} = {
isExactly: (a: any, b: any) => {
return a === b;
},
empty: (a: any) => {
return a === "" || a === undefined || a === null;
},
notEmpty: (a: any) => {
return a !== "" && a !== undefined && a !== null;
},
notEqualTo: (a: any, b: any) => {
return a !== b;
},
lessThan: (a: any, b: any) => {
const numericB = Number(b);
const numericA = Number(a);
return numericA < numericB;
},
lessThanEqualTo: (a: any, b: any) => {
const numericB = Number(b);
const numericA = Number(a);
return numericA <= numericB;
},
greaterThan: (a: any, b: any) => {
const numericB = Number(b);
const numericA = Number(a);
return numericA > numericB;
},
greaterThanEqualTo: (a: any, b: any) => {
const numericB = Number(b);
const numericA = Number(a);
return numericA >= numericB;
},
contains: (a: any, b: any) => {
if (isString(a) && isString(b)) {
return a.includes(b);
}
return false;
},
doesNotContain: (a: any, b: any) => {
if (isString(a) && isString(b)) {
return !a.includes(b);
}
return false;
},
startsWith: (a: any, b: any) => {
if (isString(a) && isString(b)) {
return a.indexOf(b) === 0;
}
return false;
},
endsWith: (a: any, b: any) => {
if (isString(a) && isString(b)) {
return a.length === a.indexOf(b) + b.length;
}
return false;
},
is: (a: any, b: any) => {
return moment(a).isSame(moment(b), "d");
},
isNot: (a: any, b: any) => {
return !moment(a).isSame(moment(b), "d");
},
isAfter: (a: any, b: any) => {
return !moment(a).isAfter(moment(b), "d");
},
isBefore: (a: any, b: any) => {
return !moment(a).isBefore(moment(b), "d");
},
};
export function compare(a: any, b: any, condition: Condition) {
let result = true;
try {
const conditionFunction = ConditionFunctions[condition];
if (conditionFunction) {
result = conditionFunction(a, b);
}
} catch (e) {
console.error(e);
}
return result;
}