• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

atlp-rwanda / e-commerce-mavericks-fn / 10057347606

23 Jul 2024 10:34AM UTC coverage: 0.0%. Remained the same
10057347606

Pull #47

github

web-flow
Merge 62e4cdafa into a6ea4c698
Pull Request #47: [Finishes #187874853]Seller order Dashboard

0 of 117 branches covered (0.0%)

Branch coverage included in aggregate %.

0 of 324 new or added lines in 7 files covered. (0.0%)

1 existing line in 1 file now uncovered.

0 of 7609 relevant lines covered (0.0%)

0.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/components/OrderTables.tsx
NEW
1
import React, { useState } from 'react';
×
NEW
2
import { Button } from './ui/button';
×
NEW
3
import { useGetOrdersQuery } from "../services/ordersApi";
×
NEW
4
import { Order } from "../types/Types";
×
NEW
5
import { CiSearch } from 'react-icons/ci';
×
NEW
6

×
NEW
7
const statusColors: { [key: string]: string } = {
×
NEW
8
  'delivered': 'bg-[#d1fae5] text-[#065f46]',
×
NEW
9
  'cancelled': 'bg-[#fee2e2] text-[#991b1b]',
×
NEW
10
  'pending': 'bg-[#e9d5ff] text-[#6b21a8]',
×
NEW
11
  'paid': 'bg-[#fef3c7] text-[#854d0e]',
×
NEW
12
};
×
NEW
13

×
NEW
14
const itemsPerPage = 15;
×
NEW
15

×
NEW
16
const TransactionTable: React.FC = () => {
×
NEW
17
  const [selectedStatus, setSelectedStatus] = useState<string>('all');
×
NEW
18
  const [currentPage, setCurrentPage] = useState<number>(1);
×
NEW
19
  const [searchQuery, setSearchQuery] = useState<string>('');
×
NEW
20
  const { data: ordersData, isLoading, isError } = useGetOrdersQuery();
×
NEW
21
  const orders = ordersData?.data || [];
×
NEW
22
  console.log(orders);
×
NEW
23

×
NEW
24
  const handleStatusChange = (status: string) => {
×
NEW
25
    setSelectedStatus(status);
×
NEW
26
    setCurrentPage(1);
×
NEW
27
  };
×
NEW
28

×
NEW
29
  const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {
×
NEW
30
    setSearchQuery(event.target.value);
×
NEW
31
    setCurrentPage(1);
×
NEW
32
  };
×
NEW
33

×
NEW
34
  const filteredTransactions = selectedStatus === 'all'
×
NEW
35
    ? orders
×
NEW
36
    : orders.filter((transaction: Order) => transaction.status.toLowerCase() === selectedStatus);
×
NEW
37

×
NEW
38
  const searchedTransactions = searchQuery
×
NEW
39
    ? filteredTransactions.filter((transaction: Order) =>
×
NEW
40
        transaction.orderItems.some((item) =>
×
NEW
41
          item.products.name.toLowerCase().includes(searchQuery.toLowerCase())
×
NEW
42
        )
×
NEW
43
      )
×
NEW
44
    : filteredTransactions;
×
NEW
45

×
NEW
46
  const totalPages = Math.ceil(searchedTransactions.length / itemsPerPage);
×
NEW
47

×
NEW
48
  const currentTransactions = searchedTransactions.slice(
×
NEW
49
    (currentPage - 1) * itemsPerPage,
×
NEW
50
    currentPage * itemsPerPage
×
NEW
51
  );
×
NEW
52

×
NEW
53
  const handlePageChange = (page: number) => {
×
NEW
54
    if (page >= 1 && page <= totalPages) {
×
NEW
55
      setCurrentPage(page);
×
NEW
56
    }
×
NEW
57
  };
×
NEW
58

×
NEW
59
  if (isLoading) {
×
NEW
60
    return <div>Loading...</div>;
×
NEW
61
  }
×
NEW
62

×
NEW
63
  if (isError) {
×
NEW
64
    return <div>Error loading orders.</div>;
×
NEW
65
  }
×
NEW
66

×
NEW
67
  return (
×
NEW
68
    <div className='md:ml-64 p-4'>
×
NEW
69
      <div className='bg-[#ffffff] shadow-md rounded-lg p-6 border border-gray-300'>
×
NEW
70
        <div className='mb-4 flex justify-between items-center'>
×
NEW
71
          <div>
×
NEW
72
            <h2 className='text-lg font-semibold'>Orders Details</h2>
×
NEW
73
            <p className='text-sm text-[#8F88f]'>Manage orders</p>
×
NEW
74
          </div>
×
NEW
75
          <div className='flex items-center rounded bg-whiteColor p-2 border border-grayColor'>
×
NEW
76
            <CiSearch className='mr-1.5 text-[#A08D8D]' size={20} />
×
NEW
77
            <input
×
NEW
78
              type='text'
×
NEW
79
              placeholder='Search products'
×
NEW
80
              className='border-none outline-none'
×
NEW
81
              value={searchQuery}
×
NEW
82
              onChange={handleSearchChange}
×
NEW
83
            />
×
NEW
84
          </div>
×
NEW
85
        </div>
×
NEW
86
        <nav className="flex gap-4 sm:gap-6 text-sm font-medium">
×
NEW
87
          {["all", "paid", "pending", "delivered", "canceled"].map(status => (
×
NEW
88
            <Button
×
NEW
89
              key={status}
×
NEW
90
              variant={selectedStatus === status ? 'primary' : 'outline'}
×
NEW
91
              onClick={() => handleStatusChange(status)}
×
NEW
92
              className="px-4 py-2 rounded-md"
×
NEW
93
            >
×
NEW
94
              {status.charAt(0).toUpperCase() + status.slice(1)}
×
NEW
95
            </Button>
×
NEW
96
          ))}
×
NEW
97
        </nav>
×
NEW
98
        <div className='overflow-x-auto'>
×
NEW
99
          <table className='min-w-full bg-[#ffffff]'>
×
NEW
100
            <thead>
×
NEW
101
              <tr>
×
NEW
102
                <th className='px-4 py-2 border-b border-[#e5e7eb] text-start'>Order ID</th>
×
NEW
103
                <th className='px-4 py-2 border-b border-[#e5e7eb] text-start'>CUSTOMER</th>
×
NEW
104
                <th className='px-4 py-2 border-b border-[#e5e7eb] text-start'>PRODUCT</th>
×
NEW
105
                <th className='px-4 py-2 border-b border-[#e5e7eb] text-start'>DATE</th>
×
NEW
106
                <th className='px-4 py-2 border-b border-[#e5e7eb] text-start'>STATUS</th>
×
NEW
107
                <th className='px-4 py-2 border-b border-[#e5e7eb] text-start'>PRICE</th>
×
NEW
108
              </tr>
×
NEW
109
            </thead>
×
NEW
110
            <tbody>
×
NEW
111
              {currentTransactions.map((transaction: Order) => (
×
NEW
112
                <React.Fragment key={transaction.id}>
×
NEW
113
                  {transaction.orderItems.map((orderItem, itemIndex) => (
×
NEW
114
                    <tr key={`${transaction.id}-${itemIndex}`}>
×
NEW
115
                      <td className='px-4 py-2 border-b border-[#e5e7eb] font-light'>#{(transaction.id).slice(0, 3)}</td>
×
NEW
116
                      <td className='px-4 py-2 border-b border-[#e5e7eb] font-light'>{transaction.user?.firstName} {transaction.user?.lastName}</td>
×
NEW
117
                      <td className='px-4 py-2 border-b border-[#e5e7eb] font-light'>{orderItem.products.name}</td>
×
NEW
118
                      <td className='px-4 py-2 border-b border-[#e5e7eb] font-light'>
×
NEW
119
                        {new Date(transaction.createdAt).toLocaleDateString('en-US', {
×
NEW
120
                          year: 'numeric',
×
NEW
121
                          month: 'short',
×
NEW
122
                          day: '2-digit',
×
NEW
123
                        })}
×
NEW
124
                      </td>
×
NEW
125
                      <td className='px-4 py-2 border-b border-[#e5e7eb] font-light'>
×
NEW
126
                        <span className={`px-2 py-1 rounded-full text-xs font-medium ${statusColors[transaction.status]}`}>
×
NEW
127
                          {transaction.status}
×
NEW
128
                        </span>
×
NEW
129
                      </td>
×
NEW
130
                      <td className='px-4 py-2 border-b border-[#e5e7eb] font-light'>{orderItem.price.toFixed(1)}</td>
×
NEW
131
                    </tr>
×
NEW
132
                  ))}
×
NEW
133
                </React.Fragment>
×
NEW
134
              ))}
×
NEW
135
            </tbody>
×
NEW
136
          </table>
×
NEW
137
        </div>
×
NEW
138
        <div className="flex justify-between items-center mt-4">
×
NEW
139
          <div>{`${searchedTransactions.length} out of ${orders.length} orders`}</div>
×
NEW
140
          <div className="flex space-x-2">
×
NEW
141
            <Button
×
NEW
142
              variant="outline"
×
NEW
143
              disabled={currentPage === 1}
×
NEW
144
              onClick={() => handlePageChange(currentPage - 1)}
×
NEW
145
            >
×
NEW
146
              Previous
×
NEW
147
            </Button>
×
NEW
148
            <span>Page {currentPage} of {totalPages}</span>
×
NEW
149
            <Button
×
NEW
150
              variant="outline"
×
NEW
151
              disabled={currentPage === totalPages}
×
NEW
152
              onClick={() => handlePageChange(currentPage + 1)}
×
NEW
153
            >
×
NEW
154
              Next
×
NEW
155
            </Button>
×
NEW
156
          </div>
×
NEW
157
        </div>
×
NEW
158
      </div>
×
NEW
159
    </div>
×
NEW
160
  );
×
NEW
161
};
×
NEW
162

×
NEW
163
export default TransactionTable;
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc