feat(table): Add sorting support for Node and subscription columns

This commit is contained in:
web@ppanel
2024-12-21 16:30:43 +07:00
parent 5737331067
commit 27924b0fdb
4 changed files with 192 additions and 108 deletions
@@ -8,6 +8,7 @@ import {
deleteNode,
getNodeGroupList,
getNodeList,
nodeSort,
updateNode,
} from '@/services/admin/server';
import { ConfirmButton } from '@repo/ui/confirm-button';
@@ -230,6 +231,32 @@ export default function NodeTable() {
];
},
}}
onSort={async (source, target, items) => {
const sourceIndex = items.findIndex((item) => String(item.id) === source);
const targetIndex = items.findIndex((item) => String(item.id) === target);
const originalSorts = items.map((item) => ({ id: item.id, sort: item.sort || item.id }));
const [movedItem] = items.splice(sourceIndex, 1);
items.splice(targetIndex, 0, movedItem!);
const updatedItems = items.map((item) => {
const originalSort = originalSorts.find((sortItem) => sortItem.id === item.id)?.sort;
return {
...item,
sort: originalSort !== undefined ? originalSort : item.sort,
};
});
nodeSort({
sort: updatedItems.map((item) => {
return {
id: item.id,
sort: item.sort,
};
}),
});
return updatedItems;
}}
/>
);
}
@@ -8,6 +8,7 @@ import {
deleteSubscribe,
getSubscribeGroupList,
getSubscribeList,
subscribeSort,
updateSubscribe,
} from '@/services/admin/subscribe';
import { ConfirmButton } from '@repo/ui/confirm-button';
@@ -237,6 +238,32 @@ export default function SubscribeTable() {
/>,
],
}}
onSort={async (source, target, items) => {
const sourceIndex = items.findIndex((item) => String(item.id) === source);
const targetIndex = items.findIndex((item) => String(item.id) === target);
const originalSorts = items.map((item) => ({ id: item.id, sort: item.sort || item.id }));
const [movedItem] = items.splice(sourceIndex, 1);
items.splice(targetIndex, 0, movedItem!);
const updatedItems = items.map((item) => {
const originalSort = originalSorts.find((sortItem) => sortItem.id === item.id)?.sort;
return {
...item,
sort: originalSort !== undefined ? originalSort : item.sort,
};
});
subscribeSort({
sort: updatedItems.map((item) => {
return {
id: item.id,
sort: item.sort,
};
}),
});
return updatedItems;
}}
/>
);
}