diff --git a/src/pages/master/products/blocks/AddDialog.tsx b/src/pages/master/products/blocks/AddDialog.tsx index 3cdcf3c..a854203 100644 --- a/src/pages/master/products/blocks/AddDialog.tsx +++ b/src/pages/master/products/blocks/AddDialog.tsx @@ -15,13 +15,25 @@ import { } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue +} from '@/components/ui/select'; + +interface ProviderProps { + id: number; + name: string; +} const API_URL = apiConfig.service_master_data; const AddDialog = () => { const parentRef = useRef(null); const parsedUser = getAuth()?.user; const { showAddDialog, handleAddDialog } = useManageProductsContext(); - const { PostData } = useCallApi(); + const { PostData, GetData } = useCallApi(); const { reload } = useDataGrid(); const [alert, setAlert] = useState({ show: false, @@ -29,17 +41,21 @@ const AddDialog = () => { }); const initialState = { name: '', + code: '', + type: '', description: '', price_point: 0, price_cash: 0, cashback_point: 0, cashback_cash: 0, status: '', - providerId: '', + provider: '', + process_on_third_party: '', created_by: '', created_at: '' }; const [formField, setFormField] = useState(initialState); + const [providers, setProviders] = useState([]); const created_time = new Date(); const formattedTime = created_time.toISOString().slice(0, 19).replace('T', ' '); @@ -67,11 +83,30 @@ const AddDialog = () => { [formField] ); + const doFetchProvider = useCallback(async (sorting: any) => { + try { + const response = await GetData(`${API_URL}/provider/list`, { + limit: 100, + page: 1, + with_deleted: false, + order_field: sorting[0].id, + order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' + }); + + // console.log('PROVIDER: ', response?.data); + setProviders(response?.data.list); + } catch (error) { + console.error('Error fetching provider', error); + } + }, []); + const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if ( formField.name.trim() === '' || + formField.type.trim() === '' || + formField.code.trim() === '' || formField.description.trim() === '' || formField.price_point === 0 || formField.price_cash === 0 || @@ -90,6 +125,10 @@ const AddDialog = () => { setAlert({ show: false, message: '' }); }; + useEffect(() => { + doFetchProvider([{ id: 'id', desc: false }]); + }, []); + useEffect(() => { if (showAddDialog) { setFormField({ @@ -113,7 +152,7 @@ const AddDialog = () => { Product - Create - +
{alert.show && ( @@ -137,6 +176,34 @@ const AddDialog = () => {
+
+
+ + setFormField({ ...formField, type: e.target.value })} + /> +
+
+ +
+
+ + setFormField({ ...formField, code: e.target.value })} + /> +
+
+
@@ -246,12 +319,45 @@ const AddDialog = () => { - setFormField({ ...formField, providerId: e.target.value })} - /> + + + + +
+
+ +
diff --git a/src/pages/master/products/blocks/EditDialog.tsx b/src/pages/master/products/blocks/EditDialog.tsx index 06eb7b6..72aa3bb 100644 --- a/src/pages/master/products/blocks/EditDialog.tsx +++ b/src/pages/master/products/blocks/EditDialog.tsx @@ -15,6 +15,18 @@ import { } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue +} from '@/components/ui/select'; + +interface ProviderProps { + id: string; + name: string; +} const API_URL = apiConfig.service_master_data; const EditDialog = () => { @@ -30,17 +42,21 @@ const EditDialog = () => { }); const initialState = { name: '', + code: '', + type: '', description: '', price_point: 0, price_cash: 0, cashback_point: 0, cashback_cash: 0, status: '', - providerId: '', + provider: '', + process_on_third_party: '', updated_by: '', updated_at: '' }; const [formField, setFormField] = useState(initialState); + const [providers, setProviders] = useState([]); const resetForm = () => { setFormField(initialState); @@ -66,19 +82,40 @@ const EditDialog = () => { [selectedProducts, formField] ); + const doFetchProvider = useCallback(async (sorting: any) => { + try { + const response = await GetData(`${API_URL}/provider/list`, { + limit: 100, + page: 1, + with_deleted: false, + order_field: sorting[0].id, + order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' + }); + // console.log('PROVIDER: ', response?.data); + setProviders(response?.data.list); + } catch (error) { + console.error('Error fetching provider', error); + } + }, []); + const doFetchData = useCallback(async (id: string) => { - const response = await GetData(`${API_URL}/product/getdata/${selectedProducts}`, { id }); + const response = await GetData(`${API_URL}/product/getdata/${id}`, { id }); + console.log(response); if (response?.status) { setFormField((prev) => ({ ...prev, name: response.data.name, + type: response.data.type, + code: response.data.code, description: response.data.description, price_point: response.data.price_point, price_cash: response.data.price_cash, cashback_point: response.data.cashback_point, cashback_cash: response.data.cashback_cash, - status: response.data.status + status: response.data.status, + provider: response.data.provider_id, + process_on_third_party: response.data.process_on_third_party })); } else { setFormField(initialState); @@ -90,6 +127,8 @@ const EditDialog = () => { if ( formField.name.trim() === '' || + formField.type.trim() === '' || + formField.code.trim() === '' || formField.description.trim() === '' || formField.price_point === 0 || formField.price_cash === 0 || @@ -130,6 +169,10 @@ const EditDialog = () => { } }, [formattedTime]); + useEffect(() => { + doFetchProvider([{ id: 'name', desc: false }]); + }, []); + return ( handleEditDialog(open, null)}> @@ -137,7 +180,7 @@ const EditDialog = () => { Product - Update - +
{alert.show && ( @@ -161,6 +204,34 @@ const EditDialog = () => {
+
+
+ + setFormField({ ...formField, type: e.target.value })} + /> +
+
+ +
+
+ + setFormField({ ...formField, code: e.target.value })} + /> +
+
+
@@ -270,12 +347,43 @@ const EditDialog = () => { - setFormField({ ...formField, providerId: e.target.value })} - /> + + + + +
+
+ +
diff --git a/src/pages/master/profession/blocks/EditDialog.tsx b/src/pages/master/profession/blocks/EditDialog.tsx index 7dfc06c..ffdc02a 100644 --- a/src/pages/master/profession/blocks/EditDialog.tsx +++ b/src/pages/master/profession/blocks/EditDialog.tsx @@ -20,7 +20,7 @@ const API_URL = apiConfig.service_master_data; const EditDialog = () => { const { showEditDialog, handleEditDialog, selectedProfession } = useManageProfessionContext(); const { reload } = useDataGrid(); - const { PutData } = useCallApi(); + const { PutData, GetData } = useCallApi(); const parsedUser = getAuth()?.user; const created_time = new Date(); const formattedTime = created_time.toISOString().slice(0, 19).replace('T', ' '); @@ -62,6 +62,19 @@ const EditDialog = () => { [selectedProfession, formField] ); + const doFetchData = useCallback(async (id: string) => { + const response = await GetData(`${API_URL}/profession/getdata/${id}`, { id }); + + if (response?.status) { + setFormField((prev) => ({ + ...prev, + name: response.data.name + })); + } else { + setFormField(initialState); + } + }, []); + const handleUpdate = (e: React.FormEvent) => { e.preventDefault(); @@ -75,6 +88,12 @@ const EditDialog = () => { setAlert({ show: false, message: '' }); }; + useEffect(() => { + if (selectedProfession) { + doFetchData(selectedProfession); + } + }, [selectedProfession]); + useEffect(() => { if (showEditDialog) { setFormField({ @@ -85,6 +104,12 @@ const EditDialog = () => { } }, [formattedTime]); + useEffect(() => { + if (showEditDialog === false) { + resetForm(); + } + }, [showEditDialog]); + return ( handleEditDialog(open, null)}> diff --git a/src/pages/master/provider/blocks/EditDialog.tsx b/src/pages/master/provider/blocks/EditDialog.tsx index 5fa37c2..e7c55d0 100644 --- a/src/pages/master/provider/blocks/EditDialog.tsx +++ b/src/pages/master/provider/blocks/EditDialog.tsx @@ -91,22 +91,54 @@ const EditDialog = () => { [selectedProvider, formField] ); - const doFetchData = useCallback(async () => { - if (selectedProvider) { - const data = provider.find((item) => item.id === selectedProvider); - if (data) { - setFormField((prev) => ({ - ...prev, - name: data.name, - description: data.description, - type: data.type, - status: data.status, - transactionTypeId: data.transactionTypeId, - agentId: data.agentId - })); - } - } else { - resetForm(); + const getCustomerList = async (sorting: any) => { + try { + sorting = sorting.length == 0 ? [{ id: 'name', desc: false }] : sorting; + const response = await GetData(`${API_URL_CUSTOMER}/customer/list`, { + limit: 100, + page: 1, + with_deleted: false, + order_field: sorting[0].id, + order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' + }); + + // console.log('CUSTOMER: ', response?.data); + setCustomers(response?.data.list); + } catch (error) { + console.error('Error fetching customer', error); + } + }; + + const getTransactionTypeList = async (sorting: any) => { + try { + const response = await GetData(`${API_URL_TRANSACTION}/transactiontype/list`, { + limit: 100, + page: 1, + with_deleted: false, + order_field: sorting[0].id, + order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' + }); + + // console.log('TRANSACTION TYPE: ', response?.data); + setTransactions(response?.data.list); + } catch (error) { + console.error('Error fetching transaction type', error); + } + }; + + const doFetchData = useCallback(async (id: string) => { + const response = await GetData(`${API_URL_MASTERDATA}/provider/getdata/${id}`, { id }); + + if (response?.status) { + setFormField((prev) => ({ + ...prev, + name: response?.data.name, + description: response?.data.description, + type: response?.data.type, + status: response?.data.status, + transactionTypeId: response?.data.transactionTypeId, + agentId: response?.data.agentId + })); } }, []); @@ -130,9 +162,15 @@ const EditDialog = () => { setAlert({ show: false, message: '' }); }; + useEffect(() => { + if (showEditDialog === false) { + resetForm(); + } + }, [showEditDialog]); + useEffect(() => { if (selectedProvider) { - doFetchData(); + doFetchData(selectedProvider); } }, [selectedProvider]); @@ -147,41 +185,6 @@ const EditDialog = () => { }, [formattedTime]); useEffect(() => { - const getCustomerList = async (sorting: any) => { - try { - sorting = sorting.length == 0 ? [{ id: 'name', desc: false }] : sorting; - const response = await GetData(`${API_URL_CUSTOMER}/customer/list`, { - limit: 100, - page: 1, - with_deleted: false, - order_field: sorting[0].id, - order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' - }); - - // console.log('CUSTOMER: ', response?.data); - setCustomers(response?.data.list); - } catch (error) { - console.error('Error fetching customer', error); - } - }; - - const getTransactionTypeList = async (sorting: any) => { - try { - const response = await GetData(`${API_URL_TRANSACTION}/transactiontype/list`, { - limit: 100, - page: 1, - with_deleted: false, - order_field: sorting[0].id, - order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' - }); - - // console.log('TRANSACTION TYPE: ', response?.data); - setTransactions(response?.data.list); - } catch (error) { - console.error('Error fetching transaction type', error); - } - }; - getCustomerList([{ id: 'msisdn', desc: false }]); getTransactionTypeList([{ id: 'name', desc: false }]); }, []); diff --git a/src/pages/settings/user/manage-position/blocks/AddDialog.tsx b/src/pages/settings/user/manage-position/blocks/AddDialog.tsx index 1c0dd94..6c32480 100644 --- a/src/pages/settings/user/manage-position/blocks/AddDialog.tsx +++ b/src/pages/settings/user/manage-position/blocks/AddDialog.tsx @@ -83,6 +83,12 @@ const AddDialog = () => { const doCreatePosition = useCallback( async (e: React.FormEvent) => { e.preventDefault(); + + if (formField.name.trim() === '') { + setAlert({ show: true, message: 'Please fill in all required fields.' }); + return; + } + const response = await PostData(`${API_URL}/user_role/create`, { name: formField.name, roles: selectMenus, diff --git a/src/pages/settings/user/manage-position/blocks/EditDialog.tsx b/src/pages/settings/user/manage-position/blocks/EditDialog.tsx index 4209f2e..d000fac 100644 --- a/src/pages/settings/user/manage-position/blocks/EditDialog.tsx +++ b/src/pages/settings/user/manage-position/blocks/EditDialog.tsx @@ -91,6 +91,12 @@ const EditDialog = () => { const doEditPosition = useCallback( async (e: React.FormEvent) => { e.preventDefault(); + + if (formField.name.trim() === '') { + setAlert((prev) => ({ ...prev, show: true, message: 'Please fill name field.' })); + return; + } + if (!selectedPosition) { toast.success('Please Select Position'); return;