'use client' import { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' import { showAlert } from 'store' import { useCreateDetailsMutation, useDeleteDetailsMutation, useGetDetailsQuery, useUpdateDetailsMutation, } from '@/store/services' import { BigLoading, Button, ConfirmDeleteModal, ConfirmUpdateModal, DetailsList, HandleResponse, PageContainer, } from 'components' import { Tab } from '@headlessui/react' import { useAppDispatch, useDisclosure } from 'hooks' import { SubmitHandler, useForm } from 'react-hook-form' import { useTitle, useUrlQuery } from '@/hooks' const tabListNames = [ { id: 0, name: '选择类型' }, { id: 1, name: '属性' }, { id: 2, name: '规格' }, ] const DetailsContentPage = ({ params: { id } }) => { //? Assets const { back } = useRouter() const query = useUrlQuery() const dispatch = useAppDispatch() const categoryId = id const categoryName = query.category_name const initialUpdataInfo = {} //? Modals const [isShowConfirmDeleteModal, confirmDeleteModalHandlers] = useDisclosure() const [isShowConfirmUpdateModal, confirmUpdateModalHandlers] = useDisclosure() //? States const [updateInfo, setUpdateInfo] = useState(initialUpdataInfo) const [mode, setMode] = useState('create') //? Queries //* Get Details const { data: details, isLoading: isLoadingGet } = useGetDetailsQuery({ id: categoryId, }) //* Update Details const [ updateDetails, { data: dataUpdate, isSuccess: isSuccessUpdate, isError: isErrorUpdate, error: errorUpdate, isLoading: isLoadingUpdate, }, ] = useUpdateDetailsMutation() //* Create Details const [ createDetails, { data: dataCreate, isSuccess: isSuccessCreate, isError: isErrorCreate, isLoading: isLoadingCreate, error: errorCreate, }, ] = useCreateDetailsMutation() //* Delete Details const [ deleteDetails, { isSuccess: isSuccessDelete, isError: isErrorDelete, error: errorDelete, data: dataDelete, isLoading: isLoadingDelete, }, ] = useDeleteDetailsMutation() //? Hook Form const { handleSubmit, register, reset, control } = useForm({ defaultValues: { optionsType: 'none', info: [], specification: [], }, }) //? Re-Renders useEffect(() => { if (details?.data) { setMode('edit') reset({ optionsType: details?.data?.optionsType, info: details?.data?.info, specification: details?.data?.specification, }) } }, [details]) //? Handlers //* Create const createHandler = async ({ info, specification, optionsType }) => { if (info.length !== 0 && specification.length !== 0) { await createDetails({ body: { category_id: categoryId, info, specification, optionsType, }, }) } else { dispatch( showAlert({ status: 'error', title: '请输入详细信息和属性', }) ) } } //* Update const updateHandler = ({ info, specification, optionsType }) => { setUpdateInfo(prev => ({ ...prev, ...details?.data, info, specification, optionsType, })) confirmUpdateModalHandlers.open() } const onConfirmUpdate = () => { updateDetails({ id: details?.data?._id, body: updateInfo, }) } const onCancelUpdate = () => { setUpdateInfo(initialUpdataInfo) confirmUpdateModalHandlers.close() } const onSuccessUpdate = () => { setUpdateInfo(initialUpdataInfo) confirmUpdateModalHandlers.close() } const onErrorUpdate = () => { setUpdateInfo(initialUpdataInfo) confirmUpdateModalHandlers.close() } //* Delete const deleteHandler = () => confirmDeleteModalHandlers.open() const onConfirmDelete = () => deleteDetails({ id: details?.data?._id }) const onCancelDelete = () => confirmDeleteModalHandlers.close() const onSuccessDelete = () => { confirmDeleteModalHandlers.close() reset({ optionsType: 'none', info: [], specification: [], }) back() } const onErrorDelete = () => confirmDeleteModalHandlers.close() useTitle(`品类规格及特点 - ${categoryName ? categoryName : ''}`) //? Render(s) return ( <> {/* Handle Delete Response */} {(isSuccessDelete || isErrorDelete) && ( )} {/* Handle Update Response */} {(isSuccessUpdate || isErrorUpdate) && ( )} {/* Handle Create Details Response */} {(isSuccessCreate || isErrorCreate) && ( )}
{isLoadingGet ? (
) : (
{tabListNames.map(item => ( `tab ${ selected ? 'bg-white shadow' : 'text-blue-400 hover:bg-white/[0.12] hover:text-blue-600' } ` } > {item.name} ))}

选择类型:

{mode === 'edit' ? ( <> ) : ( )}
)}
) } export default DetailsContentPage