From 9ee852f139aed0f1034798b6a22b76eb9bd03aa4 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 12 Aug 2024 16:35:23 +0700 Subject: update tracking order --- src/lib/tracking-order/api/trackingOrder.js | 8 + src/lib/tracking-order/component/TrackingOrder.jsx | 164 +++++++++++++-------- 2 files changed, 107 insertions(+), 65 deletions(-) create mode 100644 src/lib/tracking-order/api/trackingOrder.js (limited to 'src') diff --git a/src/lib/tracking-order/api/trackingOrder.js b/src/lib/tracking-order/api/trackingOrder.js new file mode 100644 index 00000000..cc48c40c --- /dev/null +++ b/src/lib/tracking-order/api/trackingOrder.js @@ -0,0 +1,8 @@ +import odooApi from "@/core/api/odooApi"; + +export const trackingOrder = async ({query}) => { + const params = new URLSearchParams(query).toString(); + const list = await odooApi('GET', `/api/v1/tracking_order?${params}`) + + return list; +} diff --git a/src/lib/tracking-order/component/TrackingOrder.jsx b/src/lib/tracking-order/component/TrackingOrder.jsx index 476e6507..c9f739b3 100644 --- a/src/lib/tracking-order/component/TrackingOrder.jsx +++ b/src/lib/tracking-order/component/TrackingOrder.jsx @@ -1,94 +1,128 @@ -import odooApi from '@/core/api/odooApi' -import HookFormSelect from '@/core/components/elements/Select/HookFormSelect' -import cityApi from '@/lib/address/api/cityApi' import { yupResolver } from '@hookform/resolvers/yup' -import React, { useEffect, useRef, useState } from 'react' -import ReCAPTCHA from 'react-google-recaptcha' -import { Controller, useForm } from 'react-hook-form' -import { toast } from 'react-hot-toast' +import React, { useEffect, useState } from 'react' +import { useForm } from 'react-hook-form' import * as Yup from 'yup' -import { useRouter } from 'next/router' import Manifest from '@/lib/treckingAwb/component/Manifest' +import { trackingOrder } from '../api/trackingOrder' +import { useQuery } from 'react-query' +import { Spinner } from '@chakra-ui/react'; +import { Search } from 'lucide-react'; +import odooApi from '@/core/api/odooApi' + const TrackingOrder = () => { const [idAWB, setIdAWB] = useState(null) + const [inputQuery, setInputQuery] = useState(null) + const [buttonClick, setButtonClick] = useState(false) + const [apiError, setApiError] = useState(null) // State to store API error message + const closePopup = () => { setIdAWB(null) - } + setButtonClick(false) + setInputQuery(null) + setApiError(null) // Reset error message on close + } + const { register, handleSubmit, formState: { errors }, control, reset - } = useForm({ + } = useForm({ resolver: yupResolver(validationSchema), defaultValues - }) + }) + + const query = { + email: inputQuery?.email, + so: inputQuery?.id + } + + const { data: tracking, isLoading, isError, error } = useQuery( + ['tracking', query], + () => trackingOrder({ query: query }), + { + enabled: !!query.email && !!query.so, + onSuccess: (data) => { + if (buttonClick) { + if (data?.code === 403 || data?.code === 400 || data?.code === 404) { + setApiError(data?.description); + } else if (data?.pickings?.length > 0) { + setIdAWB(data.pickings[0]?.id); + } else { + setApiError('No pickings data available'); + } + setButtonClick(false); + setInputQuery(null); + } + }, + } + ); const onSubmitHandler = async (values) => { - console.log('values',values) - // setIdAWB(shipment.id) - // setIdAWB(20623) - setIdAWB(25085) - } - return ( -
-

Tracking Order

-
- Untuk melacak pesanan Anda, masukkan ID Pesanan Anda di kotak di bawah ini dan tekan tombol "Lacak". ID ini diberikan kepada Anda pada tanda terima dan dalam email konfirmasi yang seharusnya Anda terima. -
-
-
-
-
- - +

Tracking Order

+
+ Untuk melacak pesanan Anda, masukkan ID Pesanan Anda di kotak di bawah ini dan tekan tombol "Lacak". ID ini diberikan kepada Anda pada tanda terima dan dalam email konfirmasi yang seharusnya Anda terima. +
+
+ +
+
+ + - {console.log("errors",errors)} -
{errors.id?.message}
+
{errors.id?.message}
+
+
+ + +
{errors.email?.message}
+
-
- - -
{errors.email?.message}
+
+
-
-
- - -
- - + + {/* Display the API error message */} + {apiError &&
{apiError}
} + +
-
- ) + ) } const validationSchema = Yup.object().shape({ - email: Yup.string().email('Format harus seperti contoh@email.com'), + email: Yup.string().email('Format harus seperti contoh@email.com').required('Harus di-isi'), id: Yup.string().required('Harus di-isi'), - }) - - const defaultValues = { +}) + +const defaultValues = { email: '', id: '' - } - +} export default TrackingOrder -- cgit v1.2.3