From be0483fbef45e37cc8e4f3eaa2fd5050efebbb1a Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 29 May 2025 15:37:57 +0300 Subject: [PATCH] feat: add confirmCurrent method to assemblyApi and enhance BarcodeScreen functionality --- src/api/assemblyApi.ts | 5 ++++- src/assets/icons/settings/check.png | Bin 0 -> 1845 bytes .../AssemblyScreen/AssemblyControls.tsx | 2 -- src/screens/AssemblyScreen/AssemblyView.tsx | 4 ++-- src/screens/BarcodeScreen/BarcodeScreen.tsx | 16 +++++++------- .../BarcodeScreen/useBarcodeOrders.tsx | 20 ++++++++++++------ src/screens/ProfileScreen/SettingsView.tsx | 14 +++++++++--- 7 files changed, 38 insertions(+), 23 deletions(-) create mode 100644 src/assets/icons/settings/check.png diff --git a/src/api/assemblyApi.ts b/src/api/assemblyApi.ts index 9999ba7..b765719 100644 --- a/src/api/assemblyApi.ts +++ b/src/api/assemblyApi.ts @@ -1,6 +1,5 @@ import apiClient from "./apiClient"; import {Assembly} from "../types/assembly"; -import {closeCancelAssemblyModal} from "../features/cancelAssemblyModal/cancelAssemblyModalSlice"; const router = '/assembly'; export type CreateAssemblyResponse = { @@ -39,6 +38,10 @@ const assemblyApi = { let response = await apiClient.post(`${router}/confirm`, {assemblyId}); return response.data; }, + confirmCurrent: async (): Promise<{ ok: boolean, message: string }> => { + let response = await apiClient.post(`${router}/confirmCurrent`); + return response.data; + }, cancelById: async (assemblyId: number): Promise<{ ok: boolean, message: string }> => { let response = await apiClient.post(`${router}/cancelById`, {assemblyId}); return response.data; diff --git a/src/assets/icons/settings/check.png b/src/assets/icons/settings/check.png new file mode 100644 index 0000000000000000000000000000000000000000..cc1cc5d7bc439eaa634b79109802cfa594d9b3f4 GIT binary patch literal 1845 zcmb7FYfw|y8a)IwMA6h#L8Sz5NkCd9P{2k5#s?@TYJ!MT9zyVi2qi!w2rUU%D%9NQ zaCl2FT$qZK0wNH@)S4Ja+Q=h5DH$+$G}uxBV?;_BJ-IW7iMT;|miU~=H@fFm8j_|oxMG01W0VbNR& z!X8=p?5Mfb!=Si^7y23R0OtfRJ2CS(l%1XJlbn{qJ(`$)+=r8yR5KN{7J?REheNhU zo)J$z-Pe3L%5AaUYuCxs;SSsT*EKB`2b7*IUM2jkZp(WQ3JR+}g(;X zS#`{n*ues~=-R8#Iz{d0H?GHdJ9o~EZIR7xqUa_^ewdBm>6b|3=C(IymC2^lP(V7kW5DqmZvEUnRPcmt%0r8IyKBM z)iuIaZK7+z*Li^|Av}{+m5rE#RE@M$%C&rd__8|fw*2r4^E%Z|(G551If_>|^5Sb- zPmZ_BW8W-9MV7+W$}y#Y8ifQ6rqlD?YFUOu6?hwZlSqbYIx!7N0klj%uob{Y$lrE0yu(_U7D5XT} zog99PJ#_J&9{WE3 z+}6U~NVI1sH6)lgAGm*rp;e*x1TTWxC(v%q{Gb`VKV%}&2i~!Muf6@9%{$D_S15!p z_r{?t1m9x1vkLO3N_4xc-!AG9{4Z^&c_X#$YI~=JhQ6zgpOilmAD%dQJLIE6+mpK& zocA7+-k6&TQ2U%#u$@=6nv32Vcl_jZCEVLg@!|EcmmEx+pG9uEO7M=an|NcR!X&{N zR+rx9r@}gK&h(X?Lgg#n9hbnTg5SO-n^F+ghKy%yo)RC5qpu{J!^`wL_y501WS3q} zK#NF9{PDkwr1lhb*h0^P%MrHX$*rqzDKIf!_j5*S5)xFatAwo;I(aw0Udu3CBvD8? zo~mxR;e4? zkR8!R%BdeG_H8#NPqj~Av&Kv3PasQ|%^u|`SzHMtGw@Zd?nddC%^K~$dt>tgW;LX? zBuiY60*j%c4In4i|LQ#CtK5c${s$@E0 z^`3G?ST?5BoT{vRD9G3ljqz9@b*vd>+7?ALITT9vnV54FB#^-tE|4^0&K28^=w=5g z&+FMewP)VHEH1qh!Yh3?CP#Fp8!Ur-)aki*CGti5lx(r3dbnRWMM2JUE? zBF@7+u@~3pr&O1C7qss-Zr()ped$OS?#CPz={u-o-yTPL^M1@Q5luSHVApt<0~#Ep zfuMN|wyTGk*8q;}d0D>xfEaB4`~lFY3}D)uiF2gi^#(nl0v{_I{{)SUKb|{u1TBgc ze*@r*zr$sJ@g4cG9Y96`l_FZzk6 z6oXOXm#%36NasxqVBq^>ufXqX*IO#`^*cRc7vy@R;280>(>@>`$Snu7U7ZWDDET0$ zyLM#(TIxs)p!pVm3$9?I@16xv-PX&x%nL+oFP3h<`f(FUuAV||J7?sBAFLkv3cgjT z6OGV}Hm2bz3D46+umj!q86puEB(DG6{e)m+N8@tqvT(&$So?qa9{hn* { dispatch(showReward({reward})); dispatch(fetchBalance()) dispatch(refreshTransactions()) - } - dispatch(endAssembly()); navigator.navigate('Barcode'); }) diff --git a/src/screens/AssemblyScreen/AssemblyView.tsx b/src/screens/AssemblyScreen/AssemblyView.tsx index 70407b6..d5113bc 100644 --- a/src/screens/AssemblyScreen/AssemblyView.tsx +++ b/src/screens/AssemblyScreen/AssemblyView.tsx @@ -11,7 +11,6 @@ import AssemblyControls from "./AssemblyControls"; import AcceptAssemblyModal from "./AcceptAssemblyModal"; import assemblyApi, {CreateAssemblyResponse} from "../../api/assemblyApi"; import {setAssembly, startAssembly} from "../../features/assembly/assemblySlice"; -import {ScanCrptContextProvider} from "./contexts/ScanCrptContext"; type Props = { order: Order; @@ -32,7 +31,8 @@ const AssemblyView = (props: Props) => { - + state.scanModal.isVisible); const navigator = useNavigation>(); const navigationState = useNavigationState((state) => state); useEffect(() => { - console.log("state changed") if (!navigationState.history) return; + if (productId < 0) return; + console.log('refreshing orders for productId:', productId); + refresh(); // @ts-ignore let currentTabKey: string = navigationState.history[navigationState.history.length - 1].key; if (currentTabKey.startsWith("Barcode")) if (!isScanModalVisible) dispatch(openScanModal({})); @@ -49,6 +48,7 @@ function BarcodeScreen() { {orders.length > 0 || isUpdating ? { + refresh() }} keyboardShouldPersistTaps={"never"} data={orders} diff --git a/src/screens/BarcodeScreen/useBarcodeOrders.tsx b/src/screens/BarcodeScreen/useBarcodeOrders.tsx index 0f35919..4d6bcf3 100644 --- a/src/screens/BarcodeScreen/useBarcodeOrders.tsx +++ b/src/screens/BarcodeScreen/useBarcodeOrders.tsx @@ -3,8 +3,6 @@ import {RootState} from "../../redux/store"; import {useEffect, useState} from "react"; import {Order} from "../../types/order"; import ordersApi from "../../api/ordersApi"; -import {setOrderBy} from "../../features/ordersFilter/ordersFilterSlice"; -import {setOrder} from "../../features/assembly/assemblySlice"; export type Props = { productId: number; @@ -23,16 +21,19 @@ const useBarcodeOrders = (props: Props) => { city } = useSelector((state: RootState) => state.ordersFilter); const fetchOrders = async (): Promise => { - return ordersApi.getOrdersByProduct({productId, orderBy, shipmentDate, status, shippingWarehouse,city, desc}); + return ordersApi.getOrdersByProduct({productId, orderBy, shipmentDate, status, shippingWarehouse, city, desc}); } - useEffect(() => { - if (isVisible || productId < 0) return; + const refresh = () => { setOrders([]); setIsUpdating(true); fetchOrders().then((fetchedOrders) => { setOrders(fetchedOrders); setIsUpdating(false); }); + } + useEffect(() => { + if (isVisible || productId < 0) return; + refresh() }, [ productId, isVisible, @@ -40,9 +41,14 @@ const useBarcodeOrders = (props: Props) => { orderBy, shipmentDate, status, - shippingWarehouse]); + shippingWarehouse, + ]); - return {orders, isUpdating} + return { + orders, + refresh, + isUpdating + } } export default useBarcodeOrders; \ No newline at end of file diff --git a/src/screens/ProfileScreen/SettingsView.tsx b/src/screens/ProfileScreen/SettingsView.tsx index 28fd0a6..258482e 100644 --- a/src/screens/ProfileScreen/SettingsView.tsx +++ b/src/screens/ProfileScreen/SettingsView.tsx @@ -37,9 +37,6 @@ const SettingsView: FC = () => { showsHorizontalScrollIndicator={false} contentContainerStyle={styles.actionsCarousel} > - - - { assemblyApi.cancel().then(response => { @@ -51,6 +48,17 @@ const SettingsView: FC = () => { dispatch(reset()); }) }} icon={require('assets/icons/settings/close.png')} title={'Отменить сборку'}/> + { + assemblyApi.confirmCurrent().then(response => { + + Toast.show({ + type: response.ok ? "success" : "error", + text1: "Закрытие сборки", + text2: response.message, + }); + dispatch(reset()); + }) + }} icon={require('assets/icons/settings/check.png')} title={'Закрыть сборку'}/> ) }