import { json, redirect, type LoaderFunctionArgs } from "@remix-run/node"; import { useLoaderData, Link } from "@remix-run/react"; import { useState, useEffect } from "react"; import { Card, CardContent, CardHeader } from "~/components/ui/card"; import { Button } from "~/components/ui/button"; import { Progress } from "~/components/ui/progress"; import { Clock, CheckCircle, Phone, Mail, MessageSquare, RefreshCw, FileText, Shield, AlertCircle, Users } from "lucide-react"; // Progress Indicator Component const ProgressIndicator = ({ currentStep = 4, totalSteps = 5 }) => { return (
{Array.from({ length: totalSteps }, (_, index) => { const stepNumber = index + 1; const isActive = stepNumber === currentStep; const isCompleted = stepNumber < currentStep; return (
{isCompleted ? : stepNumber}
{stepNumber < totalSteps && (
)}
); })}
); }; // Interface interface LoaderData { phone: string; submittedAt: string; estimatedApprovalTime: string; // "1-3 hari kerja" applicationId: string; } export const loader = async ({ request }: LoaderFunctionArgs): Promise => { const url = new URL(request.url); const phone = url.searchParams.get("phone"); if (!phone) { return redirect("/authpengelola/requestotpforregister"); } // Simulasi data - dalam implementasi nyata, ambil dari database return json({ phone, submittedAt: new Date().toISOString(), estimatedApprovalTime: "1-3 hari kerja", applicationId: "WF" + Date.now().toString().slice(-6) }); }; export default function WaitingApprovalFromAdministrator() { const { phone, submittedAt, estimatedApprovalTime, applicationId } = useLoaderData(); const [timeElapsed, setTimeElapsed] = useState(0); // Timer untuk menunjukkan berapa lama sudah menunggu useEffect(() => { const interval = setInterval(() => { const now = new Date().getTime(); const submitted = new Date(submittedAt).getTime(); const elapsed = Math.floor((now - submitted) / 1000 / 60); // minutes setTimeElapsed(elapsed); }, 60000); // Update setiap menit return () => clearInterval(interval); }, [submittedAt]); // Format phone display const formatPhone = (phoneNumber: string) => { if (phoneNumber.length <= 2) return phoneNumber; if (phoneNumber.length <= 5) return `${phoneNumber.substring(0, 2)} ${phoneNumber.substring(2)}`; if (phoneNumber.length <= 9) return `${phoneNumber.substring(0, 2)} ${phoneNumber.substring( 2, 5 )} ${phoneNumber.substring(5)}`; return `${phoneNumber.substring(0, 2)} ${phoneNumber.substring( 2, 5 )} ${phoneNumber.substring(5, 9)} ${phoneNumber.substring(9)}`; }; // Format elapsed time const formatElapsedTime = (minutes: number) => { if (minutes < 60) return `${minutes} menit yang lalu`; const hours = Math.floor(minutes / 60); if (hours < 24) return `${hours} jam yang lalu`; const days = Math.floor(hours / 24); return `${days} hari yang lalu`; }; // Simulasi status checker - dalam implementasi nyata, polling ke server const checkStatus = () => { // Untuk demo, redirect ke step berikutnya setelah beberapa detik setTimeout(() => { window.location.href = `/authpengelola/createanewpin?phone=${encodeURIComponent( phone )}`; }, 2000); }; return (
{/* Progress Indicator */} {/* Main Card */}

Menunggu Persetujuan Administrator

Aplikasi Anda sedang dalam proses verifikasi

{/* Status Info */}
Status: Dalam Review

ID Aplikasi:{" "} {applicationId}

{/* Progress Bar */}
Progress Verifikasi 75%

Estimasi waktu: {estimatedApprovalTime}

{/* Submitted Info */}
Aplikasi Berhasil Dikirim

Nomor WhatsApp: {formatPhone(phone)}

Waktu Kirim: {formatElapsedTime(timeElapsed)}

{/* Next Steps */}

Proses Selanjutnya

1

Verifikasi Data Perusahaan

Administrator akan memverifikasi informasi yang Anda berikan

2

Pengecekan Dokumen

Validasi legalitas dan kredibilitas perusahaan

3

Persetujuan & Aktivasi

Akun akan diaktivasi dan Anda bisa membuat PIN

{/* Contact Info */} {/* Action Buttons */}
{/* Important Note */}

Penting untuk Diingat

  • • Jangan tutup aplikasi ini, bookmark halaman untuk akses mudah
  • • Anda akan mendapat notifikasi WhatsApp saat disetujui
  • • Proses verifikasi dilakukan pada hari kerja (Senin-Jumat)
  • • Pastikan nomor WhatsApp aktif untuk menerima notifikasi
{/* Demo Card */}

Demo Mode:

Klik "Cek Status Persetujuan" untuk simulasi approval dan lanjut ke step terakhir

); }