From 6034a2255b5d5d2acc202f23c44c5d24094f93f0 Mon Sep 17 00:00:00 2001 From: zzzzzisu Date: Thu, 19 Jun 2025 16:07:35 +0900 Subject: [PATCH 1/2] =?UTF-8?q?KW-697/hotfix:=20DID=20=EC=97=B0=EA=B2=B0?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EC=B6=9C=EC=9E=85=EC=A6=9D=20=EC=A0=95=EB=A0=AC=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/credo/hospitalConnectService.js | 5 ++--- src/pages/AccessRequestRolePage.js | 28 +++++++++++------------- src/pages/MyAccessListPage.js | 34 +++++++++++++++++++++++++++-- 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/credo/hospitalConnectService.js b/src/credo/hospitalConnectService.js index 1b23322..a0d3164 100644 --- a/src/credo/hospitalConnectService.js +++ b/src/credo/hospitalConnectService.js @@ -13,7 +13,7 @@ import Config from 'react-native-config'; //const HOSPITAL_INVITATION_URL = //'http://192.168.0.115:8020?oob=eyJAdHlwZSI6ICJodHRwczovL2RpZGNvbW0ub3JnL291dC1vZi1iYW5kLzEuMS9pbnZpdGF0aW9uIiwgIkBpZCI6ICIxZTE4YjUzMi1lM2QxLTQxMDEtODU3ZC05NzljY2ViZjM3NjMiLCAibGFiZWwiOiAiXHVhYzE1XHViZDgxXHVjMGJjXHVjMTMxXHViY2QxXHVjNmQwIiwgImhhbmRzaGFrZV9wcm90b2NvbHMiOiBbImh0dHBzOi8vZGlkY29tbS5vcmcvZGlkZXhjaGFuZ2UvMS4wIl0sICJhY2NlcHQiOiBbImRpZGNvbW0vYWlwMjtlbnY9cmZjMTkiXSwgInNlcnZpY2VzIjogWyJkaWQ6cGVlcjoyLlZ6Nk1rZzNzVFY0VVZjUXV6Y1ZWMlZwMlBTTVZWSFl6VzNBZWZLU0xIVXNVVEFuTVkuRXo2TFNjdVo2eUJGNDFyNWJtU2s0cDVuN2NBQ1RwSEdYVXFxMVRlMkRLS21EcmI1Vy5TZXlKcFpDSTZJaU5rYVdSamIyMXRMVEFpTENKMElqb2laR2xrTFdOdmJXMTFibWxqWVhScGIyNGlMQ0p3Y21sdmNtbDBlU0k2TUN3aWNtVmphWEJwWlc1MFMyVjVjeUk2V3lJamEyVjVMVEVpWFN3aWNpSTZXMTBzSW5NaU9pSm9kSFJ3T2k4dk1Ua3lMakUyT0M0d0xqRXhOVG80TURJd0luMCJdfQ'; -const POLL_INTERVAL = 3000; +const POLL_INTERVAL = 2000; // 병원 초대 URL 가져오는 함수 (API 호출) export async function getHospitalInvitation(passId, hospitalId) { @@ -62,7 +62,7 @@ export async function connectToHospital(agent, invitationUrl) { let globalTimer = null; // Hospital Polling 함수 (타이머 반환) -export function startHospitalPolling({ agent, passId, hospitalId, onSuccess }) { +export function startHospitalPolling({ agent, passId, hospitalId }) { if (globalTimer) { clearInterval(globalTimer); globalTimer = null; @@ -79,7 +79,6 @@ export function startHospitalPolling({ agent, passId, hospitalId, onSuccess }) { console.log('✅ 병원 연결 완료'); const vcList = await getAllVCs(agent); console.log('📄 내 VC 목록:', vcList); - onSuccess?.(); } else { console.log('⏳ 초대 정보 없음. 계속 대기 중...'); } diff --git a/src/pages/AccessRequestRolePage.js b/src/pages/AccessRequestRolePage.js index fe0828a..4463c64 100644 --- a/src/pages/AccessRequestRolePage.js +++ b/src/pages/AccessRequestRolePage.js @@ -123,6 +123,12 @@ const AccessRequestRolePage = ({ route }) => { let res; try { res = await createAccessPass(form); + showNormalAlert({ + title: '방문증 신청 완료', + message: `방문증 신청이 완료되었습니다.\n메인 페이지로 이동합니다.`, + showCancel: false, + onConfirmHandler: navigateToHome, + }); console.log('방문증 신청 결과:', res?.data); } catch (error) { console.log('방문증 신청 중 오류 발생:', error); @@ -146,14 +152,6 @@ const AccessRequestRolePage = ({ route }) => { agent, passId: res.data.passId, hospitalId, - onSuccess: () => { - showNormalAlert({ - title: '방문증 신청 완료', - message: `방문증 신청이 완료되었습니다.\n메인 페이지로 이동합니다.`, - showCancel: false, - onConfirmHandler: navigateToHome, - }); - }, }); console.log('startHospitalPolling 호출 후 pollStopRef:', pollStopRef.current); } catch (error) { @@ -168,13 +166,13 @@ const AccessRequestRolePage = ({ route }) => { }; // 🔁 컴포넌트 언마운트 시 polling 중단 - useEffect(() => { - return () => { - if (pollStopRef.current) { - pollStopRef.current(); // clearInterval 호출 - } - }; - }, []); + // useEffect(() => { + // return () => { + // if (pollStopRef.current) { + // pollStopRef.current(); // clearInterval 호출 + // } + // }; + // }, []); return ( <> diff --git a/src/pages/MyAccessListPage.js b/src/pages/MyAccessListPage.js index 17a6d66..3dbdb9e 100644 --- a/src/pages/MyAccessListPage.js +++ b/src/pages/MyAccessListPage.js @@ -176,12 +176,42 @@ const MyAccessListPage = () => { const getHospitalName = (hospitalId) => getHospitalNameByList(hospitalId, hospitalNameList); // 만료/거절 제외 & 시작일 오름차순 정렬 + // 상태 우선순위 함수 추가 + const getStatusPriority = (startedAt, expiredAt, issuanceStatus) => { + const status = getApprovalStatus(startedAt, expiredAt, issuanceStatus); + switch (status) { + case '출입\n가능': + return 0; + case '출입\n대기': + return 1; + case '발급중': + return 2; + case '승인\n대기': + return 3; + default: + return 99; + } + }; + + // 정렬 및 필터링 const filteredAndSortedList = (myAccessList || []) .filter((item) => { const status = getApprovalStatus(item.startedAt, item.expiredAt, item.issuanceStatus); - return status !== '만료' && status !== '거절'; + return ( + status === '출입\n가능' || + status === '출입\n대기' || + status === '발급중' || + status === '승인\n대기' + ); }) - .sort((a, b) => new Date(a.startedAt) - new Date(b.startedAt)); + .sort((a, b) => { + const aPriority = getStatusPriority(a.startedAt, a.expiredAt, a.issuanceStatus); + const bPriority = getStatusPriority(b.startedAt, b.expiredAt, b.issuanceStatus); + if (aPriority !== bPriority) { + return aPriority - bPriority; + } + return new Date(a.startedAt) - new Date(b.startedAt); + }); // NormalListDeep에 넘길 데이터 가공 const sections = filteredAndSortedList.reduce((acc, cur) => { From 31bc72a6cf8a0a778c09afcd1d1cb3150460b099 Mon Sep 17 00:00:00 2001 From: zzzzzisu Date: Thu, 19 Jun 2025 17:50:38 +0900 Subject: [PATCH 2/2] =?UTF-8?q?KW-697/fix:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=ED=9B=84=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=9C?= =?UTF-8?q?,=20=EB=AC=B4=ED=95=9C=20=EB=A1=9C=EB=94=A9=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/MainPage.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/MainPage.js b/src/pages/MainPage.js index d6d0517..01939da 100644 --- a/src/pages/MainPage.js +++ b/src/pages/MainPage.js @@ -91,7 +91,7 @@ function isQrAvailable(item) { } const MainPage = () => { - const { setLoading, userInfo } = useAuthStore(); + const { loading, setLoading, userInfo } = useAuthStore(); const showNormalAlert = useNormalAlertStore.getState().showNormalAlert; // 임시: 상태변수로 출입 권한 제어 @@ -148,7 +148,7 @@ const MainPage = () => { } }; fetchData(); - }, [setLoading, myAccessList]), + }, [setLoading]), ); // hospitalNameList, myAccessList 준비되면 userVC 생성