'use client' import { useEffect, useState } from 'react' import { SubmitHandler, useForm } from 'react-hook-form' import { useGetDetailsQuery } from '@/store/services' import { Tab } from '@headlessui/react' import { AddColors, SelectCategories, AddSizes, Button, TextField, ImageList, TextArea, } from 'components' const tabListNames = [ { id: 0, name: '标题|介绍' }, { id: 1, name: '图片' }, { id: 2, name: '价格' }, { id: 3, name: '分组' }, { id: 4, name: '子产品' }, { id: 5, name: '属性' }, { id: 6, name: '规格' }, ] const initialSelectedCategories = { levelOne: {}, levelTwo: {}, levelThree: {}, } const ProductsForm = props => { //? Props const { mode, createHandler, isLoadingCreate, isLoadingUpdate, updateHandler, selectedProduct } = props //? States const [isDetailsSkip, setIsDetailsSkip] = useState(true) const [selectedCategories, setSelectedCategories] = useState(initialSelectedCategories) //? Form Hook const { handleSubmit, register, reset, control, getValues, watch, setValue } = useForm() //? Queries //* Get Details const { data: details } = useGetDetailsQuery( { id: selectedCategories?.levelTwo?._id, }, { skip: isDetailsSkip } ) //? Re-Renders //* Select Category To Fetch Details useEffect(() => { if (selectedCategories?.levelThree?._id) { setIsDetailsSkip(false) } }, [selectedCategories?.levelThree?._id]) //* Set Details useEffect(() => { if (details) { setValue('info', details.data.info) setValue('specification', details.data.specification) setValue('optionsType', details.data.optionsType) } }, [details]) //* Set Product Details On Edit Mode useEffect(() => { if (selectedProduct && mode === 'edit') { reset({ ...selectedProduct }) } }, [selectedProduct]) //? Handlers const editedCreateHandler = data => { if (mode === 'create') createHandler({ ...data, category: [ selectedCategories.levelOne?._id, selectedCategories.levelTwo?._id, selectedCategories.levelThree?._id, ], category_levels: { level_one: selectedCategories.levelOne?._id, level_two: selectedCategories.levelTwo?._id, Level_three: selectedCategories.levelThree?._id, }, }) } return (
{tabListNames.map(item => ( `tab ${ selected ? 'bg-white shadow' : 'text-blue-400 hover:bg-white/[0.12] hover:text-blue-600' } ` } > {item.name} ))}