سلام دوست عزیز😃👋

به مسابقه «ورودی بوت‌کمپ کداستار - Frontend» خوش آمدی!

لینک‌های مفید برای شرکت در مسابقه

هرگونه ارتباط با سایر شرکت‌کنندگان و یا استفاده از ابزارهای تولید کد، مثل chatGPT و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکت‌کنندگان مسابقه حذف می‌شوید.

در طول مسابقه، می‌توانید سؤالات خود را از قسمت «سوال بپرسید» مطرح کنید.

موفق باشید 😉✌

کارت محصول


کارت محصول🔗

توضیح تصویر

پروژه‌ٔ اولیه🔗

فایل پروژه را می‌توانید از طریق این این لینک دانلود کنید.

ساختار پروژه به شکل زیر است:

initial-project/
├─ api/
│  └─ getProduct.js
├─ assets/
│  ├─ spinner.svg
│  └─ watch.png
├─ js/
│  └─ cardAnimation.js
├─ index.html
├─ main.js
└─ style.css
Plain text

جزئیات پیاده‌سازی🔗

  1. در فایل getProduct.js، تابعی با همین نام وجود دارد که یک Promise برمی‌گرداند، که شامل مشخصات محصولات است.
  2. تابع showToast را باید با هدف نمایش toaster به کاربر کامل کنید. تگ مورد نظر که دارای آیدی toast است را از فایل HTML به‌دست بیاورید.
  • توجه داشته باشید ۳ ثانیه پس از نمایش toaster، باید از بین برود.
  1. تابع renderProduct باید اطلاعات محصول را در فرمت زیر و در تگی که دارای آیدی product-card است قرار دهد:
<div class="card-header">
  <img class="product-image" src="<!-- آدرس عکس -->" alt="<!-- آدرس عکس -->" />
  <div class="badge <!-- کلاس بر اساس وضعیت موجودی -->">
    <!-- وضعیت موجودی محصول -->
  </div>
</div>
<div class="card-body">
  <h2 class="product-title"><!-- عنوان محصول --></h2>
  <p class="product-brand">
    برند:
    <!-- برند محصول -->
  </p>
  <p class="product-category">
    دسته‌بندی:
    <!-- دسته‌بندی محصول -->
  </p>
  <p class="product-price"><!-- قیمت محصول --></p>
  <p class="product-description"><!-- توضیحات محصول --></p>
  <div class="product-rating">
    <span><!-- امتیاز محصول -->
    </span>
    |
    <span>
      فروش:
      <!-- فروش محصول -->
      عدد
    </span>
  </div>
</div>
HTML

تصویر محصول کامل به شکل زیر است :

توضیح تصویر

  1. در تابع renderEror در صورتی که دریافت اطلاعات محصول با مشکل مواجه شد، محتوای داخلی product-card به این شکل خواهد بود:
    <p style="color: var(--error-color); font-weight: bold;">خطا در بارگذاری اطلاعات</p>
    <button id="retry-btn" class="retry-btn">تلاش مجدد</button>
    HTML
  • همچنین دکمه‌ای با آیدی retry-btn وجود دارد که باید برای آن یک event کلیک تعریف کنید تا با کلیک روی آن، سعی دوباره برای دریافت اطلاعات انجام شود (تابع نوشته‌شده برای این کار را call کنید).
  1. تابع loadProduct را باید طوری کامل کنید، که هنگام لودینگ، محتوای زیر در product-card نمایش داده شود:
    <img src="assets/spinner.svg" alt="در حال بارگذاری..." class="spinner">
    Plain text

همچنین در این تابع باید تلاش برای دریافت اطلاعات انجام شود. در صورت موفقیت، باید renderProduct را call کنید و در صورت شکست، showToast را نمایش دهید و همچنین renderError را فراخوانی کنید.

  1. در پایان، هم تابع اصلی که تمام فرایند ها را به درستی اجرا می‌کند فراخوانی

نکات🔗

  1. در صورت نیاز برای نمایش {کارت، toaster , ... } از کلاس show و برای محو کردن آن‌ها از کلاس hidden که در فایل CSS از قبل نوشته شده‌اند استفاده بکنید.
  2. در بخش جزئیات پیاده‌سازی، یک‌سری <!-- --> کامنت HTML را مشاهده می‌کنید که باید در آن قسمت‌ها اطلاعات مربوط به محصول را قرار دهید.
  3. متن ارور باید در toaster نمایش داده شود.
  4. برای استفاده از getProduct.js از import استفاده کنید.
  • اگر با خطا رو به رو شویم :

توضیح تصویر

  • اگر محصول موجود یا ناموجود باشد :

توضیح تصویر

آنچه باید آپلود کنید🔗

فایلی که آپلود خواهید کرد باید دارای فرمت .zip باشد و دارای ساختار زیر باشد:

answer/
├─ main.js
Plain text

موفق باشید 🌟

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.