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

atlp-rwanda / champs-ec-fe / 13ba735d-90f9-49d3-9acb-f5a6c957f324

18 Jun 2024 10:20PM UTC coverage: 58.852% (-28.3%) from 87.175%
13ba735d-90f9-49d3-9acb-f5a6c957f324

Pull #13

circleci

k3lly003
Merge pull request #26 from atlp-rwanda/ft-disable-users-#187300202

Ft disable users #187300202
Pull Request #13: feat(ProductView): ProductView (all/one) according to there user's role #187300196

70 of 95 branches covered (73.68%)

Branch coverage included in aggregate %.

84 of 626 new or added lines in 24 files covered. (13.42%)

219 existing lines in 7 files now uncovered.

1366 of 2345 relevant lines covered (58.25%)

2.27 hits per line

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

0.0
/src/app/sellers/products_/[id]/page.tsx
NEW
1
// BuyerProductView
×
NEW
2
'use client';
×
NEW
3

×
NEW
4
import React from "react";
×
NEW
5
import Image from 'next/image';
×
NEW
6
import { MdOutlineShoppingCart } from 'react-icons/md';
×
NEW
7
import { FaRegHeart } from 'react-icons/fa6';
×
NEW
8
import { useParams } from 'next/navigation';
×
NEW
9
import { Product } from '@/utils/requests';
×
NEW
10
import { useQuery } from '@tanstack/react-query';
×
NEW
11
import { ProductType, ReviewType, Cards, imageType } from '@/types/Product';
×
NEW
12
import produ from "../../../../../public/product.png"
×
NEW
13
import Review from '@/components/ReviewProduct';
×
NEW
14
import Header from '@/components/Header';
×
NEW
15
import Footer from '@/components/Footer';
×
NEW
16
import { Key } from 'react';
×
NEW
17
import {
×
NEW
18
  BackButton,
×
NEW
19
  Button,
×
NEW
20
  GreenButton,
×
NEW
21
  BlueBorderButton,
×
NEW
22
  DeleteButton,
×
NEW
23
} from '@/components/Button';
×
NEW
24

×
NEW
25
function Page() {
×
NEW
26
  const { id } = useParams();
×
NEW
27
  const _id: string = id.toLocaleString();
×
NEW
28
  const { data, isLoading, error } = useQuery<any>({
×
NEW
29
    queryKey: ['product', id],
×
NEW
30
    queryFn: async () => {
×
NEW
31
      try {
×
NEW
32
        const response = (await Product.single(_id)) as ProductType;
×
NEW
33
        return response;
×
NEW
34
      } catch (error) {
×
NEW
35
        throw new Error('Error fetching product data');
×
NEW
36
      }
×
NEW
37
    },
×
NEW
38
  });
×
NEW
39
  if (isLoading) return <span>Loading...</span>;
×
NEW
40

×
NEW
41
  if (error) return <span>Error: {error.message}</span>;
×
NEW
42

×
NEW
43
  const {
×
NEW
44
    productThumbnail,
×
NEW
45
    productPictures,
×
NEW
46
    productName,
×
NEW
47
    productPrice,
×
NEW
48
    productDescription,
×
NEW
49
    reviews,
×
NEW
50
  } = data.product;
×
NEW
51

×
NEW
52
  const { relatedProducts } = data;
×
NEW
53
  return (
×
NEW
54
    <>
×
NEW
55
      <Header />
×
NEW
56
      <div className="w-full mb-5 mt-5 flex flex-col justify-center items-center">
×
NEW
57
        <div className="w-1/2 flex flex-col justify-center items-center gap-5">
×
NEW
58
          <div className="w-full flex">
×
NEW
59
            <div className="w-1/2">
×
NEW
60
              {productThumbnail && productThumbnail.length > 0 ? (
×
NEW
61
                <img
×
NEW
62
                  src={productThumbnail}
×
NEW
63
                  alt="Product Image"
×
NEW
64
                  width={200}
×
NEW
65
                  height={100}
×
NEW
66
                />
×
NEW
67
              ) : (
×
NEW
68
                <img src={produ} alt={'no image found'} />
×
NEW
69
              )}
×
NEW
70
              <div>
×
NEW
71
                {productPictures && productPictures.length > 0 ? (
×
NEW
72
                  productPictures.map((picture: imageType) => (
×
NEW
73
                    <li key={picture.imgId}>
×
NEW
74
                      <img
×
NEW
75
                        src={picture.URL}
×
NEW
76
                        alt="Product Image"
×
NEW
77
                        width={90}
×
NEW
78
                        height={90}
×
NEW
79
                      />
×
NEW
80
                    </li>
×
NEW
81
                  ))
×
NEW
82
                ) : (
×
NEW
83
                  <p className="text-red-500">no image found!</p>
×
NEW
84
                )}
×
NEW
85
              </div>
×
NEW
86
            </div>
×
NEW
87
            <div className="w-1/2 flex flex-col gap-5">
×
NEW
88
              <div>
×
NEW
89
                <h1 className="font-medium text-2xl">{productName}</h1>
×
NEW
90
              </div>
×
NEW
91
              <div className="flex flex-col gap-2">
×
NEW
92
                <div className="flex gap-2">
×
NEW
93
                  <div className="p-3 rounded-full bg-gray-200 hover:bg-green-500 hover:text-white cursor-pointer">
×
NEW
94
                    <FaRegHeart />
×
NEW
95
                  </div>
×
NEW
96
                  <div className="p-3 rounded-full bg-gray-200 hover:bg-green-500 hover:text-white cursor-pointer">
×
NEW
97
                    <MdOutlineShoppingCart />
×
NEW
98
                  </div>
×
NEW
99
                </div>
×
NEW
100
                <span className="font-medium text-2xl text-blue-300">
×
NEW
101
                  ${productPrice}
×
NEW
102
                </span>
×
NEW
103
              </div>
×
NEW
104
              <div className="flex flex-col gap-2">
×
NEW
105
                <h2 className="font-medium text-2xl">Description:</h2>
×
NEW
106
                <p className="w-full text-1xl">{productDescription}</p>
×
NEW
107
              </div>
×
NEW
108
              <div className="flex space-x-5">
×
NEW
109
                <GreenButton name="status" />
×
NEW
110
                <BlueBorderButton name="Edit" />
×
NEW
111
                <DeleteButton name="Delete" />
×
NEW
112
              </div>
×
NEW
113
            </div>
×
NEW
114
          </div>
×
NEW
115
          <div className="w-full flex flex-col">
×
NEW
116
            <h2 className="font-medium text-2xl">Reviews:</h2>
×
NEW
117
            <div>
×
NEW
118
              {reviews && reviews.length > 0 ? (
×
NEW
119
                reviews.map((review: ReviewType) => (
×
NEW
120
                  <Review
×
NEW
121
                    // key={review.id}
×
NEW
122
                    rating={review.rating}
×
NEW
123
                    feedback={review.feedback}
×
NEW
124
                  />
×
NEW
125
                ))
×
NEW
126
              ) : (
×
NEW
127
                <p className="text-red-500">No ratings yet.</p>
×
NEW
128
              )}
×
NEW
129
            </div>
×
NEW
130
          </div>
×
NEW
131
        </div>
×
NEW
132
      </div>
×
NEW
133
      <Footer />
×
NEW
134
    </>
×
NEW
135
  );
×
NEW
136
}
×
NEW
137

×
NEW
138
export default Page;
×
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