import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { CopyToClipboard } from 'react-copy-to-clipboard'; const Template = () => { const BASE_URL = process.env.REACT_APP_BASE_URL; const API_KEY = process.env.REACT_APP_API_KEY; const [ownership, setOwnership] = useState([]); const [buttonStates, setButtonStates] = useState([]); const [copiedIndex, setCopiedIndex] = useState(null); const [searchTerm, setSearchTerm] = useState(''); // state for search term const [debouncedSearchTerm, setDebouncedSearchTerm] = useState(''); // state for debounced search term const [errorMessage, setErrorMessage] = useState(null); // state for error message // Debounce search term input useEffect(() => { const timer = setTimeout(() => { setDebouncedSearchTerm(searchTerm); }, 500); // Delay of 500ms before search term is sent return () => clearTimeout(timer); // Clear timeout when searchTerm changes }, [searchTerm]); // Fetch applications based on the search term useEffect(() => { let isMounted = true; const fetchApplications = async () => { if (debouncedSearchTerm) { // Fetch by search term try { const response = await fetch(`${BASE_URL}/application/get-by-name/${debouncedSearchTerm}`, { method: 'GET', headers: { 'accept': 'application/json', 'x-api-key': API_KEY, }, }); const result = await response.json(); if (response.ok) { if (result.details && result.details.data) { if (isMounted) { setOwnership([result.details.data]); setButtonStates([{ isHovered: false, isActive: false }]); setErrorMessage(null); // Reset error if data found } } else { if (isMounted) { setOwnership([]); setErrorMessage('Data is not found.'); } } } else { if (isMounted) { setOwnership([]); setErrorMessage('Data is not found.'); } } } catch (error) { console.error('Error fetching applications:', error); if (isMounted) { setOwnership([]); setErrorMessage('Data is not found.'); } } } else { // Fetch all applications when there's no search term const fetchAllApplications = async () => { try { const response = await fetch(`${BASE_URL}/application/list`, { method: 'GET', headers: { 'x-api-key': API_KEY, }, }); const result = await response.json(); if (response.ok && result.status_code === 200) { if (isMounted) { setOwnership(result.details.data); setButtonStates(result.details.data.map(() => ({ isHovered: false, isActive: false }))); setErrorMessage(null); // Reset error if data found } } else { if (isMounted) { setOwnership([]); setErrorMessage('Error fetching data. Please try again.'); } } } catch (error) { console.error('Error fetching all applications:', error); if (isMounted) { setOwnership([]); setErrorMessage('Error fetching data. Please try again.'); } } }; fetchAllApplications(); } }; fetchApplications(); return () => { isMounted = false; // Set the flag to false on cleanup }; }, [debouncedSearchTerm]); // Trigger the effect when `debouncedSearchTerm` changes const handleMouseEnter = (index) => { setButtonStates((prevStates) => { const newStates = [...prevStates]; newStates[index].isHovered = true; return newStates; }); }; const handleMouseLeave = (index) => { setButtonStates((prevStates) => { const newStates = [...prevStates]; newStates[index].isHovered = false; return newStates; }); }; const handleChange = (event) => { setSearchTerm(event.target.value); }; return (
Design pre-approved message templates tailored for various business needs, such as customer support, appointment reminders, order updates, and more. Streamline communication and ensure consistency with ready-to-use templates.
Data is not found.
} {ownership.map((item, index) => (WABA Ownership:
{item.name}
{errorMessage}
}