UNPKG

leumas-universal-crud-react

Version:

Leumas Universal CRUD to a dynamic Endpoint, Setup your own Dynamic Endpoint and Use Leumas API to send to your MONGO clusters

98 lines (84 loc) 3.54 kB
import React, { useState, useEffect } from 'react'; import { getAllItems } from "./UniversalCrudHelpers"; // Assuming you have a function like this for getting all items import { AtomSpinner } from 'react-epic-spinners'; import { glassmorphic, neuromorphicInput2, glassButton } from "../../styles/tailwindStyles"; import { useAuthUser } from "react-auth-kit"; import { ItemRenderer } from './ItemRenderer'; // Import the ItemRenderer component import SchemaSelector from "../Schemas/SchemaSelector.jsx"; const GetAllItems = ({ model, endpoint, token, CardComponent, setMode, handleSchemaSelect }) => { const auth = useAuthUser(); const [formData, setFormData] = useState({ model: model || '', endpoint: endpoint || 'LeumasAPI' || '', token: token || auth()?.token || '', card: <div>model.id</div> }); const [itemData, setItemData] = useState([]); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const [modelIcon, setModelIcon] = useState(null); useEffect(() => { if (!token) { // Handle unauthenticated scenario here } }, [token]); useEffect(() => { if (formData.model && formData.endpoint) { handleGetAll(); } }, [formData , auth()?.id]); const handleChange = (e) => { setFormData(prevState => ({ ...prevState, [e.target.name]: e.target.value })); } const handleGetAll = async () => { setIsLoading(true); setError(null); try { const items = await getAllItems(model, "LeumasAPI", auth()?.token); // This assumes you have a function to get all items console.log(items); setItemData(items); setIsLoading(false); } catch (error) { setIsLoading(false); setError("Failed to fetch all items."); console.error("Failed to fetch all items:", error); } }; return ( <div className='flex flex-col gap-2'> <div className='flex p-2'> <SchemaSelector onSchemaSelect={handleSchemaSelect} /> <button className={glassButton} onClick={handleGetAll}> {modelIcon && <modelIcon className='mr-2' />} Fetch </button> </div> {(!formData.endpoint) && ( <div className={glassmorphic + " p-4 space-y-4 max-w-xs text-xs"}> <input className={neuromorphicInput2} name="endpoint" placeholder="Endpoint" value={formData.endpoint} onChange={handleChange} /> </div> )} {isLoading && ( <div className="mt-4 flex justify-center"> <AtomSpinner color="blue" /> </div> )} {error && ( <div className="mt-4 bg-red-200 text-red-700 p-3 rounded-md"> {error} <div className="mt-2 flex justify-center"> <AtomSpinner color="red" /> </div> </div> )} <ItemRenderer model={model} renderData={itemData} setMode={setMode} setIcon={setModelIcon} token={auth()?.token} /> </div> ) } export default GetAllItems;