UNPKG

leumas-private-shared

Version:

Private React JSX Package For Leumas Shared Components, Headers, Footers, Asides, Login Pages, API Key Manager and much more. Styles and everything reusable to avoid DRY code across all of our subdomains

95 lines (80 loc) 3.83 kB
import React, { useEffect, useState } from 'react'; import { getAllItems } from './UniversalCrudHelpers'; import ToggleStatus from './ToggleStatus'; import DeleteItem from "./DeleteItem" import {LeumasBaseStyle} from "../../../styles/baseStyles" import { useAuthUser } from "react-auth-kit"; const CustomDropdown = ({ model, modelArray, endpoint, token, onSelectedChange , color = "blue"}) => { const [isOpen, setIsOpen] = useState(false); const [selected, setSelected] = useState("--Select a boilerplate--"); const [models, setModels] = useState([]); const auth = useAuthUser(); console.log("Model array : ",modelArray , model) useEffect(() => { const fetchItems = async () => { try { const items = await getAllItems(model, endpoint, token); setModels(items); } catch (error) { console.error("Error fetching boilerplates:", error); } }; if (!modelArray) { fetchItems(); } else { setModels(modelArray); } }, [model, endpoint, token, modelArray]); const handleSelect = (item) => { setSelected(item?.title || item?.name); setIsOpen(false); onSelectedChange(item); }; return ( <div className={`relative w-full `}> <fieldset className={`w-full border p-2 cursor-pointer rounded-lg px-4 `} onClick={() => setIsOpen(!isOpen)} > <legend className='text-xl font-bold'>{model}(s)</legend> {selected} </fieldset> {isOpen && ( <div className={`absolute top-full left-0 w-full border mt-2 z-50 bg-white text-black rounded-lg max-h-[150px] overflow-y-scroll ${LeumasBaseStyle}`}> {models.map((modelItem, index) => ( <div key={index} className="p-2 border-2 rounded-lg hover:border-electric-blue text-black flex justify-between cursor-pointer" onClick={() => handleSelect(modelItem)} > <div className='flex flex-col gap-2'> {modelItem?.title || modelItem?.name || modelItem?.collectionName || modelItem?.gptPrompt?.substring(0,10)}... {modelItem?.owner?._id === auth()?.id && ( <ToggleStatus model={model} isPublished={modelItem?.isPublished || modelItem?.public} endpoint={endpoint} itemId={modelItem._id} token={token} onToggleChange={() => {}} /> )} </div> {modelItem?.owner?._id === auth()?.id && ( <DeleteItem model={model} isPublished={modelItem?.isPublished || modelItem?.public} endpoint={endpoint} id={modelItem._id} token={token} onToggleChange={() => {}} /> )} </div> ))} </div> )} </div> ); }; export default CustomDropdown;