182 lines
4.4 KiB
JavaScript
182 lines
4.4 KiB
JavaScript
'use client'
|
|
|
|
import { useState } from 'react'
|
|
import { useRouter } from 'next/navigation'
|
|
|
|
import {
|
|
BannerForm,
|
|
BigLoading,
|
|
ConfirmDeleteModal,
|
|
ConfirmUpdateModal,
|
|
HandleResponse,
|
|
PageContainer,
|
|
} from 'components'
|
|
|
|
import { useDisclosure } from 'hooks'
|
|
|
|
import {
|
|
useDeleteBannerMutation,
|
|
useGetSingleBannerQuery,
|
|
useUpdateBannerMutation,
|
|
} from '@/store/services'
|
|
|
|
import { SubmitHandler } from 'react-hook-form'
|
|
import { useTitle, useUrlQuery } from '@/hooks'
|
|
|
|
const EditBannerPage = ({ params: { id: bannerId } }) => {
|
|
//? Assets
|
|
const { back } = useRouter()
|
|
const query = useUrlQuery()
|
|
const bannerName = query?.banner_name
|
|
|
|
const initialUpdataInfo = {}
|
|
|
|
//? Modals
|
|
const [isShowConfirmUpdateModal, confirmUpdateModalHandlers] = useDisclosure()
|
|
const [isShowConfirmDeleteModal, confirmDeleteModalHandlers] = useDisclosure()
|
|
|
|
//? States
|
|
const [updateInfo, setUpdateInfo] = useState(initialUpdataInfo)
|
|
|
|
//? Queries
|
|
//* Get Banner
|
|
const { data: selectedBanner, isLoading: isLoadingGetSelectedBanner } = useGetSingleBannerQuery({
|
|
id: bannerId,
|
|
})
|
|
|
|
//* Update Banner
|
|
const [
|
|
updateBanner,
|
|
{
|
|
data: dataUpdate,
|
|
isSuccess: isSuccessUpdate,
|
|
isError: isErrorUpdate,
|
|
error: errorUpdate,
|
|
isLoading: isLoadingUpdate,
|
|
},
|
|
] = useUpdateBannerMutation()
|
|
|
|
//* Delete Banner
|
|
const [
|
|
deleteBanner,
|
|
{
|
|
isSuccess: isSuccessDelete,
|
|
isError: isErrorDelete,
|
|
error: errorDelete,
|
|
data: dataDelete,
|
|
isLoading: isLoadingDelete,
|
|
},
|
|
] = useDeleteBannerMutation()
|
|
|
|
//? Handlers
|
|
//* Update
|
|
const updateHandler = data => {
|
|
setUpdateInfo(prev => ({ ...prev, ...selectedBanner.data, ...data }))
|
|
confirmUpdateModalHandlers.open()
|
|
}
|
|
|
|
const onConfirmUpdate = () => {
|
|
updateBanner({
|
|
id: bannerId,
|
|
body: updateInfo,
|
|
})
|
|
}
|
|
|
|
const onCancelUpdate = () => {
|
|
setUpdateInfo(initialUpdataInfo)
|
|
confirmUpdateModalHandlers.close()
|
|
}
|
|
|
|
const onSuccessUpdate = () => {
|
|
setUpdateInfo(initialUpdataInfo)
|
|
confirmUpdateModalHandlers.close()
|
|
back()
|
|
}
|
|
|
|
const onErrorUpdate = () => {
|
|
setUpdateInfo(initialUpdataInfo)
|
|
confirmUpdateModalHandlers.close()
|
|
}
|
|
|
|
//* Delete
|
|
const deleteHandler = () => confirmDeleteModalHandlers.open()
|
|
|
|
const onConfirmDelete = () => deleteBanner({ id: bannerId })
|
|
|
|
const onCancelDelete = () => confirmDeleteModalHandlers.close()
|
|
|
|
const onSuccessDelete = () => {
|
|
confirmDeleteModalHandlers.close()
|
|
back()
|
|
}
|
|
|
|
const onErrorDelete = () => confirmDeleteModalHandlers.close()
|
|
|
|
useTitle('编辑banner' + ' ' + bannerName)
|
|
|
|
return (
|
|
<>
|
|
<ConfirmDeleteModal
|
|
title="banner"
|
|
isLoading={isLoadingDelete}
|
|
isShow={isShowConfirmDeleteModal}
|
|
onClose={confirmDeleteModalHandlers.close}
|
|
onCancel={onCancelDelete}
|
|
onConfirm={onConfirmDelete}
|
|
/>
|
|
|
|
{(isSuccessDelete || isErrorDelete) && (
|
|
<HandleResponse
|
|
isError={isErrorDelete}
|
|
isSuccess={isSuccessDelete}
|
|
error={errorDelete?.data?.message}
|
|
message={dataDelete?.message}
|
|
onSuccess={onSuccessDelete}
|
|
onError={onErrorDelete}
|
|
/>
|
|
)}
|
|
|
|
<ConfirmUpdateModal
|
|
title="banner"
|
|
isLoading={isLoadingUpdate}
|
|
isShow={isShowConfirmUpdateModal}
|
|
onClose={confirmUpdateModalHandlers.close}
|
|
onCancel={onCancelUpdate}
|
|
onConfirm={onConfirmUpdate}
|
|
/>
|
|
|
|
{(isSuccessUpdate || isErrorUpdate) && (
|
|
<HandleResponse
|
|
isError={isErrorUpdate}
|
|
isSuccess={isSuccessUpdate}
|
|
error={errorUpdate?.data?.message}
|
|
message={dataUpdate?.message}
|
|
onSuccess={onSuccessUpdate}
|
|
onError={onErrorUpdate}
|
|
/>
|
|
)}
|
|
|
|
<main>
|
|
<PageContainer title={'编辑banner' + ' ' + bannerName}>
|
|
{isLoadingGetSelectedBanner ? (
|
|
<div className="px-3 py-20">
|
|
<BigLoading />
|
|
</div>
|
|
) : selectedBanner.data ? (
|
|
<BannerForm
|
|
mode="edit"
|
|
selectedBanner={selectedBanner.data}
|
|
updateHandler={updateHandler}
|
|
isLoadingDelete={isLoadingDelete}
|
|
isLoadingUpdate={isLoadingUpdate}
|
|
deleteHandler={deleteHandler}
|
|
/>
|
|
) : null}
|
|
</PageContainer>
|
|
</main>
|
|
</>
|
|
)
|
|
}
|
|
|
|
export default EditBannerPage
|