/* eslint-disable @typescript-eslint/no-unnecessary-condition */ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ /* eslint-disable @typescript-eslint/no-misused-promises */ /* eslint-disable @typescript-eslint/require-await */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ /* eslint-disable @typescript-eslint/restrict-plus-operands */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import EllipsisVerticalIcon from '@heroicons/react/16/solid/EllipsisVerticalIcon' import PencilIcon from '@heroicons/react/24/solid/PencilIcon' import TrashIcon from '@heroicons/react/24/solid/TrashIcon' import { useState } from 'react' import SVG from 'react-inlinesvg' import { useNavigate } from 'react-router-dom' import TargetDotSVG from '#assets/targetDot.svg' import { useAppState } from '#components/AppShell/hooks/useAppState' import { useHasUserPermission } from '#components/Map/hooks/usePermissions' import DialogModal from '#components/Templates/DialogModal' import type { Item } from '#types/Item' import type { ItemsApi } from '#types/ItemsApi' export function HeaderView({ item, api, editCallback, deleteCallback, setPositionCallback, loading, hideMenu = false, big = false, truncateSubname = true, hideSubname = false, showAddress = false, }: { item?: Item api?: ItemsApi editCallback?: any deleteCallback?: any setPositionCallback?: any loading?: boolean hideMenu?: boolean big?: boolean hideSubname?: boolean truncateSubname?: boolean showAddress?: boolean }) { const [modalOpen, setModalOpen] = useState(false) const hasUserPermission = useHasUserPermission() const navigate = useNavigate() const appState = useAppState() const [imageLoaded, setImageLoaded] = useState(false) const avatar = (item?.image && appState.assetsApi.url + item.image + '?width=160&heigth=160') || item?.image_external const title = item?.name ?? item?.layer?.item_default_name const subtitle = item?.subname const [address] = useState('') const params = new URLSearchParams(window.location.search) const openDeleteModal = async (event: React.MouseEvent) => { setModalOpen(true) event.stopPropagation() } if (!item) return null return ( <>
{avatar && (
{item.name setImageLoaded(true)} onError={() => setImageLoaded(false)} style={{ display: imageLoaded ? 'block' : 'none' }} /> {!imageLoaded && (
)}
)}
{title}
{showAddress && address && !hideSubname && (
{address}
)} {subtitle && !hideSubname && (
{subtitle}
)}
e.stopPropagation()} className={`${big ? 'tw:mt-5' : 'tw:mt-1'}`}> {(api?.deleteItem || item.layer?.api?.updateItem) && (hasUserPermission(api?.collectionName!, 'delete', item) || hasUserPermission(api?.collectionName!, 'update', item)) && !hideMenu && (
)}
setModalOpen(false)} >
e.stopPropagation()}> Do you want to delete {item.name}?
) }