بازگشت

🎨 راهنمای ایجاد کامپوننت

مراحل ساختن کامپوننت‌های جدید برای Site Builder

📋 خطوط کلی

هر کامپوننت جدید برای سایت‌بیلدر شامل 4 مرحله اساسی است. این برنامه‌ریزی‌شده تا بتوانید بدون مشکل کامپوننت‌های جدید اضافه کنید.

محل قرار گرفتن:

src/components/websitecomp/

نام‌گذاری:

نام فایل باید به صورت PascalCase باشد:

MyNewComponent.js

ساختار کد:

'use client'

import React, { useState, useEffect } from 'react'
import { apiRequest } from '@/utils/functions'

const MyNewComponent = ({ 
  title = 'عنوان پیش‌فرض',
  subtitle = 'زیرعنوان پیش‌فرض',
  data = null,
  dataSourceType = 'manual',
  categoryIds = null
}) => {

  const [componentData, setComponentData] = useState([])

  useEffect(() => {
    if (dataSourceType === 'category' && categoryIds?.length > 0) {
      fetchCategoryData(categoryIds)
    }
  }, [dataSourceType, categoryIds])

  const fetchCategoryData = async (ids) => {
    try {
      const results = await Promise.all(
        ids.map(catId => 
          apiRequest(`/products?category=${catId}`, 'GET').catch(() => null)
        )
      )
      
      const allData = results
        .filter(result => result?.success && result?.data)
        .flatMap(result => {
          const data = result.data.data || result.data
          return Array.isArray(data) ? data : []
        })
      
      setComponentData(allData)
    } catch (error) {
      console.warn('خطا در دریافت داده:', error)
    }
  }

  return (
    <div className="w-full bg-white">
      <div className="max-w-7xl mx-auto px-6 py-12">
        <h2 className="text-3xl danaBold text-gray-900 mb-4">{title}</h2>
        <p className="text-gray-600 mb-8">{subtitle}</p>
      </div>
    </div>
  )
}

export default MyNewComponent

💡 نکته:

باید از apiRequest برای دریافت داده‌های دسته‌بندی استفاده کنید.

✅ نکات مهم

  • Import کنید: کامپوننت را در NewSitebuilder.js import کنید
  • Schema کامل: تمام props را تعریف کنید
  • Default Values: برای هر فیلد مقدار پیش‌فرض تعریف کنید
  • Responsive: از Tailwind برای responsive طراحی کنید
  • Error Handling: برای API calls خطا‌گیری اضافه کنید
  • Naming: ID کامپوننت = schema key

🔧 حل مشکلات

❌ کامپوننت نمایش داده نمی‌شود

  • • آیا import شده است؟
  • • ID مطابق schema key است؟
  • • export default دارد؟

⚠️ داده‌ها درست نمایش داده نمی‌شوند

  • • dataSourceType درست است؟
  • • categoryIds صحیح منتقل شده؟
  • • API response صحیح parse شد؟

🤔 تنظیمات ظاهر نمی‌شوند

  • • Schema field default دارد؟
  • • Field type صحیح است؟
  • • Component prop دریافت می‌کند؟

📁 فایل‌های مرتبط

src/components/websitecomp/

کامپوننت‌های وبسایت

src/config/newComponentSchema.js

تنظیمات و فیلدها

NewSitebuilder.js

مدیر اصلی

src/utils/functions.js

توابع کمکی

🎯 حالا آماده‌اید کامپوننت‌های جدید بسازید!