/* eslint-disable no-unused-vars */ import * as React from 'react' import { ItemFormPopupProps } from "./Components/Map/Subcomponents/ItemFormPopup"; export interface UtopiaMapProps { height?: string, width?: string, center?: [number,number], zoom?: number, tags?: Tag[], children?: React.ReactNode, geo?: any, showFilterControl?: boolean, showLayerControl?: boolean, showGratitudeControl?: boolean, infoText? : string } export interface LayerProps { id?: string, data?: Item[], children?: React.ReactNode, name: string, menuIcon: any, menuColor: string, menuText: string, markerIcon: string, markerShape: string, markerDefaultColor: string, markerDefaultColor2?: string, api?: ItemsApi, itemType: ItemType, itemNameField?: string, itemSubnameField?: string, itemTextField?: string, itemAvatarField?: string, itemColorField?: string, itemOwnerField?: string, itemTagsField?: string, itemLatitudeField?: any, itemLongitudeField?: any, itemOffersField?: string, itemNeedsField?: string, onlyOnePerOwner?: boolean, customEditLink?: string, customEditParameter?: string, public_edit_items?: boolean, listed?: boolean, item_presets?: Record, setItemFormPopup?: React.Dispatch>, itemFormPopup?: ItemFormPopupProps | null, clusterRef?: any } export interface ItemType { name: string; [key: string]: any; } export class Item { id: string ; name: string; text: string; position?: Geometry; date_created?: string; date_updated?: string | null; start?: string; end?: string; api?: ItemsApi; tags?: string[]; layer?: LayerProps; relations?: Relation[]; parent?:string; subname?: string; public_edit?: boolean; // eslint-disable-next-line no-undef [key: string]: any; constructor(id:string,name:string,text:string,position:Geometry, layer?: LayerProps, api?: ItemsApi){ this.id = id; this.name = name; this.text = text; this.position = position; this.layer = layer; this.api = api; } } export class Geometry { type: string; coordinates: number[]; constructor(lng: number, lat: number) { this.coordinates = [lng,lat]; this.type = "Point"; } } export interface Tag { color: string; id: string; name: string; offer_or_need?: boolean } export interface ItemsApi { getItems(): Promise, getItem?(id: string): Promise, createItem?(item : T): Promise, updateItem?(item : T): Promise, deleteItem?(id : string): Promise, collectionName?: string } export interface AssetsApi { upload(file: Blob, title: string): any, url: string } export interface UserApi { register(email: string, password: string, userName: string): Promise, login(email: string, password: string): Promise, logout(): Promise, getUser(): Promise, getToken(): Promise, updateUser(user: UserItem): Promise, requestPasswordReset(email:string, reset_url?:string), passwordReset(token:string,new_password:string) } export type UserItem = { id?: string; role?: string; email?: string; password?: string; profile?: Profile; [key: string]: any; } export type Profile = { id?: string; avatar?: string; color?: string; name: string; text: string; geoposition?: Geometry } export type PermissionCondition = { user_created?: { _eq: string; // Erwartet den speziellen Wert "$CURRENT_USER" oder eine spezifische UUID }; public_edit?: { _eq: boolean; // Erwartet den speziellen Wert "$CURRENT_USER" oder eine spezifische UUID }; }; export type Permission = { id?: string; role: string; collection: string; action: PermissionAction; permissions?: { // Optional, für spezifische Bedingungen wie `user_created` _and: PermissionCondition[]; }; }; export type PermissionAction = "create"|"read"|"update"|"delete"; export type Relation = { related_items_id: string; [key: string]: any; }