import * as React from 'react' import { useItems, useUpdateItem, useAddItem } 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 { hashTagRegex } from '../../Utils/HashTagRegex'; import { useAddTag, useTags } from '../Map/hooks/useTags'; import { randomColor } from '../../Utils/RandomColor'; import { useLocation, useNavigate } from 'react-router-dom'; import { Item } from '../../types'; import { MapOverlayPage } from '../Templates'; import { AvatarWidget } from './AvatarWidget'; import { encodeTag } from '../../Utils/FormatTags'; import { useLayers } from '../Map/hooks/useLayers'; export function OverlayItemProfileSettings() { const [id, setId] = useState(""); const [name, setName] = useState(""); const [subname, setSubname] = useState(""); const [text, setText] = useState(""); const [image, setImage] = useState(""); const [color, setColor] = useState(""); const [activeTab, setActiveTab] = useState(1); const [loading, setLoading] = useState(false); const { user } = useAuth(); const updateItem = useUpdateItem(); const addItem = useAddItem(); const layers = useLayers(); const location = useLocation(); const tags = useTags(); const addTag = useAddTag(); const navigate = useNavigate(); const items = useItems(); const [item, setItem] = useState({} as Item) useEffect(() => { const itemId = location.pathname.split("/")[2]; const item = items.find(i => i.id === itemId); item && setItem(item); !item && setItem({id: crypto.randomUUID(), name: user ? user.first_name : "", text: ""}) }, [location, items, activeTab]) React.useEffect(() => { if (item.layer?.itemColorField) setColor(getValue(item, item.layer?.itemColorField)); else setColor(item.layer?.markerDefaultColor || "#3D3846") setId(item?.id ? item.id : ""); setName(item?.name ? item.name : ""); setSubname(item?.subname ? item.subname : ""); setText(item?.text ? item.text : ""); setImage(item?.image ? item?.image : ""); }, [item]) const onUpdateItem = async () => { let changedItem = {} as Item; changedItem = { id: id, name: name, subname: subname, 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); console.log(item.layer); if(item.layer) {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)}); } else { const layer = layers.find(l => l.name == "People") layer?.api?.createItem && toast.promise( layer?.api?.createItem(changedItem), { pending: 'updating Item ...', success: 'Item updated', error: { render({ data }) { return `${data}` }, }, }) .then(() => item && addItem({...item, ...changedItem, layer: layer, user_created: user, type: layer.itemType})) .then(() => { setLoading(false); navigate("/")}); console.log({...item, ...changedItem, layer: layer, user_created: user, type: "User"}); } } return ( <>
setName(v)} containerStyle='tw-grow tw-input-md' /> setSubname(v)} containerStyle='tw-grow tw-input-sm tw-px-4 tw-mt-1' />
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)} />
) }