feat(Map): Revision of sorting from also adding ability to sort all columns

Fixes #2
This commit is contained in:
achichenkov
2024-10-07 09:08:54 +03:00
parent 02d97a009c
commit 3aaac91f07
3 changed files with 43 additions and 10 deletions

View File

@@ -4,3 +4,15 @@
font-size: 12px !important; font-size: 12px !important;
line-height: 8px; line-height: 8px;
} }
.Table {
:global {
.p-sortable-column > .p-column-header-content > span:last-child {
transform: scale(0.7);
& > svg {
margin-left: 4px;
}
}
}
}

View File

@@ -25,6 +25,7 @@ import {
renderName, renderName,
renderTimeLeft, renderTimeLeft,
} from '@/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/renders'; } from '@/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/renders';
// import { PrimeIcons } from 'primereact/api';
interface SystemSignaturesContentProps { interface SystemSignaturesContentProps {
systemId: string; systemId: string;
@@ -50,7 +51,7 @@ export const SystemSignaturesContent = ({ systemId, settings }: SystemSignatures
const handleResize = useCallback(() => { const handleResize = useCallback(() => {
if (tableRef.current) { if (tableRef.current) {
const tableWidth = tableRef.current.offsetWidth; const tableWidth = tableRef.current.offsetWidth;
const otherColumnsWidth = 265; const otherColumnsWidth = 276;
const availableWidth = tableWidth - otherColumnsWidth; const availableWidth = tableWidth - otherColumnsWidth;
setNameColumnWidth(`${availableWidth}px`); setNameColumnWidth(`${availableWidth}px`);
} }
@@ -159,6 +160,16 @@ export const SystemSignaturesContent = ({ systemId, settings }: SystemSignatures
setHoveredSig(null); setHoveredSig(null);
}, []); }, []);
// const renderToolbar = (/*row: SystemSignature*/) => {
// return (
// <div className="flex justify-end items-center gap-2">
// <span className={clsx(PrimeIcons.PENCIL, 'text-[10px]')}></span>
// </div>
// );
// };
const headerClasses = clsx(classes.HeaderRow, 'text-[12px] py-[3px]');
return ( return (
<div ref={tableRef} className="h-full"> <div ref={tableRef} className="h-full">
{filteredSignatures.length === 0 ? ( {filteredSignatures.length === 0 ? (
@@ -168,19 +179,21 @@ export const SystemSignaturesContent = ({ systemId, settings }: SystemSignatures
) : ( ) : (
<> <>
<DataTable <DataTable
className={classes.Table}
value={filteredSignatures} value={filteredSignatures}
size="small" size="small"
selectionMode="multiple" selectionMode="multiple"
selection={selectedSignatures} selection={selectedSignatures}
metaKeySelection
onSelectionChange={e => setSelectedSignatures(e.value)} onSelectionChange={e => setSelectedSignatures(e.value)}
dataKey="eve_id" dataKey="eve_id"
tableClassName="w-full select-none" tableClassName="w-full select-none"
resizableColumns resizableColumns={false}
rowHover rowHover
selectAll selectAll
sortField="eve_id" sortField="eve_id"
onRowMouseEnter={handleEnterRow} onRowMouseEnter={compact || medium ? handleEnterRow : undefined}
onRowMouseLeave={handleLeaveRow} onRowMouseLeave={compact || medium ? handleLeaveRow : undefined}
rowClassName={row => { rowClassName={row => {
if (selectedSignatures.some(x => x.eve_id === row.eve_id)) { if (selectedSignatures.some(x => x.eve_id === row.eve_id)) {
return clsx(classes.TableRowCompact, 'bg-amber-500/50 hover:bg-amber-500/70 transition duration-200'); return clsx(classes.TableRowCompact, 'bg-amber-500/50 hover:bg-amber-500/70 transition duration-200');
@@ -196,47 +209,55 @@ export const SystemSignaturesContent = ({ systemId, settings }: SystemSignatures
> >
<Column <Column
bodyClassName="p-0 px-1" bodyClassName="p-0 px-1"
headerClassName={headerClasses}
field="group" field="group"
body={renderIcon} body={renderIcon}
style={{ maxWidth: 26, minWidth: 26, width: 26 }} style={{ maxWidth: 26, minWidth: 26, width: 26 }}
headerStyle={{ fontSize: "14px", padding: "0.25rem" }}
></Column> ></Column>
<Column <Column
field="eve_id" field="eve_id"
header="Id" header="Id"
headerClassName={headerClasses}
bodyClassName="text-ellipsis overflow-hidden whitespace-nowrap" bodyClassName="text-ellipsis overflow-hidden whitespace-nowrap"
style={{ maxWidth: 72, minWidth: 72, width: 72 }} style={{ maxWidth: 72, minWidth: 72, width: 72 }}
headerStyle={{ fontSize: "14px", padding: "0.25rem" }}
sortable sortable
></Column> ></Column>
<Column <Column
field="group" field="group"
header="Group" header="Group"
headerClassName={headerClasses}
bodyClassName="text-ellipsis overflow-hidden whitespace-nowrap" bodyClassName="text-ellipsis overflow-hidden whitespace-nowrap"
hidden={compact} hidden={compact}
headerStyle={{ fontSize: "14px", padding: "0.25rem" }}
sortable sortable
></Column> ></Column>
<Column <Column
field="name" field="name"
header="Name" header="Name"
headerClassName={headerClasses}
bodyClassName="text-ellipsis overflow-hidden whitespace-nowrap" bodyClassName="text-ellipsis overflow-hidden whitespace-nowrap"
body={renderName} body={renderName}
style={{ maxWidth: nameColumnWidth }} style={{ maxWidth: nameColumnWidth }}
hidden={compact || medium} hidden={compact || medium}
headerStyle={{ fontSize: "14px", padding: "0.25rem" }}
sortable sortable
></Column> ></Column>
<Column <Column
field="updated_at" field="updated_at"
header="Updated" header="Updated"
dataType="date" dataType="date"
headerClassName={headerClasses}
bodyClassName="w-[80px] text-ellipsis overflow-hidden whitespace-nowrap" bodyClassName="w-[80px] text-ellipsis overflow-hidden whitespace-nowrap"
body={renderTimeLeft} body={renderTimeLeft}
headerStyle={{ fontSize: "14px", padding: "0.25rem" }}
sortable sortable
></Column> ></Column>
{/*<Column*/}
{/* bodyClassName="p-0 pl-1 pr-2"*/}
{/* field="group"*/}
{/* body={renderToolbar}*/}
{/* headerClassName={headerClasses}*/}
{/* style={{ maxWidth: 26, minWidth: 26, width: 26 }}*/}
{/*></Column>*/}
</DataTable> </DataTable>
</> </>
)} )}

View File

@@ -3,7 +3,7 @@ import { TimeLeft } from '@/hooks/Mapper/components/ui-kit';
export const renderTimeLeft = (row: SystemSignature) => { export const renderTimeLeft = (row: SystemSignature) => {
return ( return (
<div className="flex justify-end w-full items-center"> <div className="flex w-full items-center">
<TimeLeft cDate={row.updated_at ? new Date(row.updated_at) : undefined} /> <TimeLeft cDate={row.updated_at ? new Date(row.updated_at) : undefined} />
</div> </div>
); );