Improve pagination controls for order and delivery pages

Extract pagination logic into a reusable hook (usePagination) and update components (CustomerOrders, Dashboard, Deliveries, Orders) to utilize it, enhancing UI layout for better overflow handling.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: cc8ba926-557c-4bf1-a2ea-ceabbcf38824
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/cc8ba926-557c-4bf1-a2ea-ceabbcf38824/0XBiHIk
This commit is contained in:
michaelschal committed 2025-08-12 20:31:10 +00:00
1 parent 20bb740735
commit ba2789dffe
5 files changed
+40 -8

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
import { useState, useMemo, useEffect } from 'react';
export function usePagination<T>(data: T[], initialItemsPerPage: number = 10) {
const [currentPage, setCurrentPage] = useState(1);
const [itemsPerPage, setItemsPerPage] = useState(initialItemsPerPage);
const totalItems = data.length;
const totalPages = Math.ceil(totalItems / itemsPerPage);
// Reset to first page when data changes
useEffect(() => {
setCurrentPage(1);
}, [data.length, itemsPerPage]);
const paginatedData = useMemo(() => {
const startIndex = (currentPage - 1) * itemsPerPage;
const endIndex = startIndex + itemsPerPage;
return data.slice(startIndex, endIndex);
}, [data, currentPage, itemsPerPage]);
return {
currentPage,
setCurrentPage,
itemsPerPage,
setItemsPerPage,
totalPages,
totalItems,
paginatedData,
};
}
+2 -2
View File
@@ -674,8 +674,8 @@ export default function CustomerOrders() {
} = usePagination(sortedOrders, 10);
return (
<div className="flex-1 overflow-y-auto">
<div className="p-6 space-y-6">
<div className="flex-1 min-h-0 flex flex-col">
<div className="flex-1 overflow-y-auto p-6 space-y-6">
{/* Header */}
<div className="bg-white border-b border-gray-200 p-6 shadow-sm -m-6 mb-6">
<div className="flex items-center justify-between">
+2 -2
View File
@@ -218,8 +218,8 @@ export default function Dashboard() {
};
return (
<div className="flex-1 overflow-y-auto">
<div className="p-6 space-y-6">
<div className="flex-1 min-h-0 flex flex-col">
<div className="flex-1 overflow-y-auto p-6 space-y-6">
{/* Header */}
<div className="flex items-center justify-between">
<div>
+4 -3
View File
@@ -4,7 +4,8 @@ import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Badge } from "@/components/ui/badge";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Pagination, usePagination } from "@/components/ui/pagination";
import { Pagination } from "@/components/ui/pagination";
import { usePagination } from "@/hooks/usePagination";
import { useAuthUnified } from "@/hooks/useAuthUnified";
import { useStore } from "@/components/Layout";
import { useToast } from "@/hooks/use-toast";
@@ -255,8 +256,8 @@ export default function Deliveries() {
const canValidate = permissions.canValidate('deliveries');
return (
<div className="flex-1 overflow-y-auto">
<div className="p-6 space-y-6">
<div className="flex-1 min-h-0 flex flex-col">
<div className="flex-1 overflow-y-auto p-6 space-y-6">
{/* Header */}
<div className="bg-white border-b border-gray-200 p-6 shadow-sm -m-6 mb-6">
<div className="flex items-center justify-between">
+2 -1
View File
@@ -4,7 +4,8 @@ import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Badge } from "@/components/ui/badge";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Pagination, usePagination } from "@/components/ui/pagination";
import { Pagination } from "@/components/ui/pagination";
import { usePagination } from "@/hooks/usePagination";
import { useAuthUnified } from "@/hooks/useAuthUnified";
import { useStore } from "@/components/Layout";
import { useToast } from "@/hooks/use-toast";