import * as React from 'react' import { useItems, useUpdateItem } from '../Map/hooks/useItems' import { useEffect, useState } from 'react'; import { getValue } from '../../Utils/GetValue'; import { toast } from 'react-toastify'; import { useAuth } from '../Auth'; import { TextInput, TextAreaInput } from '../Input'; import { ColorPicker } from './ColorPicker'; import DialogModal from '../Templates/DialogModal'; import { hashTagRegex } from '../../Utils/HashTagRegex'; import { useAddTag, useTags } from '../Map/hooks/useTags'; import { randomColor } from '../../Utils/RandomColor'; import { useLocation, useNavigate } from 'react-router-dom'; import { Geometry, Item, Tag, UserItem } from '../../types'; import { MapOverlayPage } from '../Templates'; import { TagsWidget } from './TagsWidget'; import { decodeTag, encodeTag } from '../../Utils/FormatTags'; import { AvatarWidget } from './AvatarWidget'; export function OverlayItemProfileSettings() { const [id, setId] = useState(""); const [name, setName] = useState(""); const [text, setText] = useState(""); const [image, setImage] = useState(""); const [color, setColor] = useState(""); const [activeTab, setActiveTab] = useState(1); const [loading, setLoading] = useState(false); const updateItem = useUpdateItem(); const location = useLocation(); const items = useItems(); const [item, setItem] = useState({} as Item) const tags = useTags(); const addTag = useAddTag(); const navigate = useNavigate(); useEffect(() => { const itemId = location.pathname.split("/")[2]; const item = items.find(i => i.id === itemId); item && setItem(item); }, [location, items, activeTab]) React.useEffect(() => { if (item.layer?.itemColorField) setColor(getValue(item, item.layer?.itemColorField)); else setColor(item.layer?.markerDefaultColor || "#000") setId(item?.id ? item.id : ""); setName(item?.name ? item.name : ""); setText(item?.text ? item.text : ""); setImage(item?.image ? item?.image : ""); }, [item]) const onUpdateItem = async () => { let changedItem = {} as Item; console.log(item.position); changedItem = { id: id, name: name, text: text, color: color, position: item.position, ...image.length > 10 && { image: image }}; // update profile item in current state //const item = items.find(i => i.layer?.itemOwnerField && getValue(i, i.layer?.itemOwnerField).id === id); // if (item && item.layer && item.layer.itemOwnerField) item[item.layer.itemOwnerField] = {... changedUser, offers: offer_state, needs: needs_state}; // add new hashtags from profile text text.toLocaleLowerCase().match(hashTagRegex)?.map(tag => { if (!tags.find((t) => t.name.toLocaleLowerCase() === tag.slice(1).toLocaleLowerCase())) { addTag({ id: crypto.randomUUID(), name: encodeTag(tag.slice(1).toLocaleLowerCase()), color: randomColor()}) } }); setLoading(true); item?.layer?.api?.updateItem && toast.promise( item?.layer?.api?.updateItem(changedItem), { pending: 'updating Item ...', success: 'Item updated', error: { render({ data }) { return `${data}` }, }, }) .then(() => item && updateItem({...item, ...changedItem})) .then(() => { setLoading(false); navigate("/item/"+item.id)}); } return ( <>
setName(v)} containerStyle='tw-grow tw-ml-6 tw-my-auto ' />
setActiveTab(1)} />
{console.log(v);setText(v)}} containerStyle='tw-h-full' inputStyle='tw-h-full tw-border-t-0 tw-rounded-tl-none' />
setActiveTab(2)} />
setActiveTab(3)} />
setActiveTab(4)} />
) }