From 8becbc2a6b701c338e3a83ddf89b1c25413d1c95 Mon Sep 17 00:00:00 2001 From: bragaz_rexita Date: Tue, 31 Mar 2026 10:37:44 +0700 Subject: [PATCH] Repair WhatsApp Control --- package.json | 2 +- src/pages/webControl/IndexWebControl.jsx | 2 +- src/pages/webControl/WebControlBackup.jsx | 168 ++++++++++++++++++++++ 3 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 src/pages/webControl/WebControlBackup.jsx diff --git a/package.json b/package.json index e942371..f1f39f0 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "antd-vite-react-sypiu", + "name": "antd-vite-react-call-of-duty", "homepage": "/dashboard/home", "private": true, "version": "1.0.0", diff --git a/src/pages/webControl/IndexWebControl.jsx b/src/pages/webControl/IndexWebControl.jsx index baeec2f..f48d3ab 100644 --- a/src/pages/webControl/IndexWebControl.jsx +++ b/src/pages/webControl/IndexWebControl.jsx @@ -13,7 +13,7 @@ const IndexWebControl = memo(function IndexWebControl() { const [isPlaying, setIsPlaying] = useState(true); - const url = "https://117.102.231.130:9531/qrview"; + const url = "http://localhost:9531/qrview"; const handleReset = async() => { setIsPlaying(false); diff --git a/src/pages/webControl/WebControlBackup.jsx b/src/pages/webControl/WebControlBackup.jsx new file mode 100644 index 0000000..7d057f5 --- /dev/null +++ b/src/pages/webControl/WebControlBackup.jsx @@ -0,0 +1,168 @@ +import React, { useState, useEffect, useRef, memo } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { Button, Typography, message } from 'antd'; +import { resetWA } from '../../api/web-control'; +import { useBreadcrumb } from '../../layout/LayoutBreadcrumb'; +import { ReloadOutlined } from '@ant-design/icons'; + +const { Text } = Typography; + +const IndexWebControl = memo(function IndexWebControl() { + const navigate = useNavigate(); + const { setBreadcrumbItems } = useBreadcrumb(); + + const [isPlaying, setIsPlaying] = useState(true); + const [currentUrl, setCurrentUrl] = useState("http://localhost:9531"); + const iframeRef = useRef(null); + + const handleReset = async() => { + setIsPlaying(false); + await resetWA(); + setIsPlaying(true); + // Kembali ke halaman login setelah reset + setCurrentUrl("https://localhost:9531"); + message.success('WhatsApp berhasil di-restart'); + }; + + // Fungsi untuk redirect ke QR View + const redirectToQRView = () => { + setCurrentUrl("https://localhost:9531/qrview"); + message.info('Redirecting to QR View...'); + }; + + // Fungsi untuk kembali ke login + const backToLogin = () => { + setCurrentUrl("https://localhost:9531"); + message.info('Back to login page'); + }; + + useEffect(() => { + const token = localStorage.getItem('token'); + if (token) { + setBreadcrumbItems([ + { + title: ( + + • Web Control Panel + + ), + }, + ]); + } else { + navigate('/signin'); + } + }, [navigate, setBreadcrumbItems]); + + // Mendengarkan pesan dari iframe + useEffect(() => { + const handleMessage = (event) => { + // Terima pesan dari domain manapun untuk testing + console.log('Message received from:', event.origin); + console.log('Message data:', event.data); + + // Cek apakah ini pesan login success + if (event.data) { + // Jika pesan adalah string + if (typeof event.data === 'string') { + const lowerData = event.data.toLowerCase(); + if (lowerData.includes('login') || + lowerData.includes('success') || + lowerData.includes('authenticated') || + lowerData.includes('qrview')) { + console.log('Login detected via string message'); + redirectToQRView(); + } + } + + // Jika pesan adalah object + if (typeof event.data === 'object') { + if (event.data.type === 'LOGIN_SUCCESS' || + event.data.status === 'success' || + event.data.logged_in === true || + event.data.redirect === true) { + console.log('Login detected via object message'); + redirectToQRView(); + } + } + } + }; + + window.addEventListener('message', handleMessage); + + return () => { + window.removeEventListener('message', handleMessage); + }; + }, []); + + // Alternative: Coba dengan timer (jika postMessage tidak berfungsi) + useEffect(() => { + // Jika tidak ada pesan dari iframe, coba redirect otomatis setelah 10 detik + // Asumsi: login biasanya selesai dalam 10 detik + const timer = setTimeout(() => { + if (currentUrl === "https://localhost:9531") { + console.log('Auto redirect after 10 seconds (fallback)'); + redirectToQRView(); + } + }, 10000); + + return () => clearTimeout(timer); + }, [currentUrl]); + + return ( +
+
+ + {/* + */} +
+ +
+ {isPlaying ? ( +