/* eslint-disable no-constant-condition */ import { useItems, useUpdateItem, useAddItem } from '../Map/hooks/useItems' import { useEffect, useState } from 'react'; import { getValue } from '../../Utils/GetValue'; import { useAuth } from '../Auth'; import { useAddTag, useGetItemTags, useTags } from '../Map/hooks/useTags'; import { useLocation, useNavigate } from 'react-router-dom'; import { Item, Tag } from '../../types'; import { MapOverlayPage } from '../Templates'; import { useLayers } from '../Map/hooks/useLayers'; import { useHasUserPermission } from '../Map/hooks/usePermissions'; import { OnepagerForm } from './Templates/OnepagerForm'; import { linkItem, onUpdateItem, unlinkItem } from './itemFunctions'; import { SimpleForm } from './Templates/SimpleForm'; import { TabsForm } from './Templates/TabsForm'; import { FormHeader } from './Subcomponents/FormHeader'; export function ProfileForm({ userType }: { userType: string }) { const [state, setState] = useState({ color: "", id: "", groupType: "wuerdekompass", status: "active", name: "", subname: "", text: "", contact: "", telephone: "", nextAppointment: "", image: "", markerIcon: "", offers: [] as Tag[], needs: [] as Tag[], relations: [] as Item[], start: "", end: "" }); const [updatePermission, setUpdatePermission] = useState(false); const [loading, setLoading] = useState(false); const [item, setItem] = useState({} as Item) 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 hasUserPermission = useHasUserPermission(); const getItemTags = useGetItemTags(); const items = useItems(); const [urlParams, setUrlParams] = useState(new URLSearchParams(location.search)); useEffect(() => { item && hasUserPermission("items", "update", item) && setUpdatePermission(true); // eslint-disable-next-line react-hooks/exhaustive-deps }, [item]) useEffect(() => { const itemId = location.pathname.split("/")[2]; const item = items.find(i => i.id === itemId); item && setItem(item); const layer = layers.find(l => l.itemType.name == userType) !item && setItem({ id: crypto.randomUUID(), name: user ? user.first_name : "", text: "", layer: layer, new: true }) // eslint-disable-next-line react-hooks/exhaustive-deps }, [items]) useEffect(() => { const newColor = item.layer?.itemColorField && getValue(item, item.layer?.itemColorField) ? getValue(item, item.layer?.itemColorField) : (getItemTags(item) && getItemTags(item)[0]?.color) ? getItemTags(item)[0].color : item?.layer?.markerDefaultColor; const offers = (item?.offers ?? []).reduce((acc: Tag[], o) => { const offer = tags.find(t => t.id === o.tags_id); if (offer) acc.push(offer); return acc; }, []); const needs = (item?.needs ?? []).reduce((acc: Tag[], o) => { const need = tags.find(t => t.id === o.tags_id); if (need) acc.push(need); return acc; }, []); const relations = (item?.relations ?? []).reduce((acc: Item[], r) => { const relatedItem = items.find(i => i.id === r.related_items_id); if (relatedItem) acc.push(relatedItem); return acc; }, []); setState({ color: newColor, id: item?.id ?? "", groupType: item?.group_type ?? "wuerdekompass", status: item?.status ?? "active", name: item?.name ?? "", subname: item?.subname ?? "", text: item?.text ?? "", contact: item?.contact ?? "", telephone: item?.telephone ?? "", nextAppointment: item?.next_appointment ?? "", image: item?.image ?? "", markerIcon: item?.marker_icon ?? "", offers: offers, needs: needs, relations: relations, start: item?.start ?? "", end: item?.end ?? "" }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [item, tags, items]); const [template, setTemplate] = useState("") useEffect(() => { setTemplate(item.layer?.itemType.template || userType); }, [userType, item]) return ( <>
{template == "onepager" && ( )} {template == "simple" && } {template == "tabs" && linkItem(id, item, updateItem)} unlinkItem={(id) => unlinkItem(id, item, updateItem)} setUrlParams={setUrlParams}> }
) }