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

117 lines (91 loc) 3.87 kB
import React, { useState, useEffect } from 'react'; import { getItemsByOwner } from "./UniversalCrudHelpers"; import { AtomSpinner } from 'react-epic-spinners'; import { glassmorphic, neuromorphicInput2 } from "../../styles/tailwindStyles"; import useAuthUser from 'react-auth-kit/hooks/useAuthUser'; import { ItemRenderer } from './ItemRenderer'; // Import the ItemRenderer component const GetAllByOwner = ({ model, id, endpoint, token, CardComponent, setMode , handleSchemaSelect }) => { const auth = useAuthUser(); // console.log("Getting all for the owner " , model , id) const [formData, setFormData] = useState({ model: model || '', id: auth?.id || auth?.user?._id || id || 'Please Login', endpoint: endpoint || 'LeumasAPI' || '', token: token || auth?.token || '', card: <div>model.id</div> }); // console.log("Default data to send " , formData , ) 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.id && formData.endpoint) { handleGetById(); } }, [formData]); const handleChange = (e) => { setFormData(prevState => ({ ...prevState, [e.target.name]: e.target.value })); } const handleGetById = async () => { setIsLoading(true); setError(null); try { const item = await getItemsByOwner(model, auth?.id || auth?.user?._id, "LeumasAPI", auth?.token); console.log(item); setItemData(item); setIsLoading(false); } catch (error) { setIsLoading(false); setError("Failed to fetch the item by ID."); console.error("Failed to fetch the item by ID:", error); } }; return ( <div className='flex flex-col gap-2'> {/* Ignore this , this is meant for LeumasAI and Admin Applications only */} {/* {handleSchemaSelect ? <div className='flex p-2'> <SchemaSelector onSchemaSelect={handleSchemaSelect} /> <button className={glassButton} onClick={handleGetById}> {modelIcon && <modelIcon className='mr-2' />} Fetch </button> </div> : <div> </div>} */} {(!formData.id || !formData.endpoint) && ( <div className={glassmorphic + " p-4 space-y-4 max-w-xs text-xs"}> {/* Use SchemaSelector instead of an input for model */} <input className={neuromorphicInput2} name="id" placeholder="ID" value={formData.id} onChange={handleChange} /> <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 GetAllByOwner;