mirror of
https://github.com/utopia-os/utopia-ui.git
synced 2025-12-13 07:46:10 +00:00
180 lines
3.9 KiB
TypeScript
180 lines
3.9 KiB
TypeScript
import * as React from 'react'
|
|
import { ItemFormPopupProps } from './Components/Map/Subcomponents/ItemFormPopup'
|
|
|
|
export interface Tag {
|
|
color: string
|
|
id: string
|
|
name: string
|
|
offer_or_need?: boolean
|
|
}
|
|
|
|
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 ItemType {
|
|
name: string
|
|
[key: string]: any
|
|
}
|
|
|
|
export interface ItemsApi<T> {
|
|
getItems(): Promise<any>
|
|
getItem?(id: string): Promise<any>
|
|
createItem?(item: T): Promise<any>
|
|
updateItem?(item: T): Promise<any>
|
|
deleteItem?(id: string): Promise<any>
|
|
collectionName?: string
|
|
}
|
|
|
|
export interface LayerProps {
|
|
id?: string
|
|
// eslint-disable-next-line no-use-before-define
|
|
data?: Item[]
|
|
children?: React.ReactNode
|
|
name: string
|
|
menuIcon: any
|
|
menuColor: string
|
|
menuText: string
|
|
markerIcon: string
|
|
markerShape: string
|
|
markerDefaultColor: string
|
|
markerDefaultColor2?: string
|
|
api?: ItemsApi<any>
|
|
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<string, unknown>
|
|
setItemFormPopup?: React.Dispatch<React.SetStateAction<ItemFormPopupProps | null>>
|
|
itemFormPopup?: ItemFormPopupProps | null
|
|
clusterRef?: any
|
|
}
|
|
|
|
export class Geometry {
|
|
type: string
|
|
coordinates: number[]
|
|
constructor(lng: number, lat: number) {
|
|
this.coordinates = [lng, lat]
|
|
this.type = 'Point'
|
|
}
|
|
}
|
|
|
|
export type Relation = {
|
|
related_items_id: 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<any>
|
|
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<any>,
|
|
) {
|
|
this.id = id
|
|
this.name = name
|
|
this.text = text
|
|
this.position = position
|
|
this.layer = layer
|
|
this.api = api
|
|
}
|
|
}
|
|
|
|
export interface AssetsApi {
|
|
upload(file: Blob, title: string): any
|
|
url: string
|
|
}
|
|
|
|
export type Profile = {
|
|
id?: string
|
|
avatar?: string
|
|
color?: string
|
|
name: string
|
|
text: string
|
|
geoposition?: Geometry
|
|
}
|
|
|
|
export type UserItem = {
|
|
id?: string
|
|
role?: any
|
|
email?: string
|
|
password?: string
|
|
profile?: Profile
|
|
[key: string]: any
|
|
}
|
|
|
|
export interface UserApi {
|
|
register(email: string, password: string, userName: string): Promise<void>
|
|
login(email: string, password: string): Promise<any>
|
|
logout(): Promise<void>
|
|
getUser(): Promise<UserItem>
|
|
getToken(): Promise<any>
|
|
updateUser(user: UserItem): Promise<void>
|
|
requestPasswordReset(email: string, reset_url?: string)
|
|
passwordReset(token: string, new_password: string)
|
|
}
|
|
|
|
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 PermissionAction = 'create' | 'read' | 'update' | 'delete'
|
|
|
|
export type Permission = {
|
|
id?: string
|
|
policy: any
|
|
collection: string
|
|
action: PermissionAction
|
|
permissions?: {
|
|
// Optional, für spezifische Bedingungen wie `user_created`
|
|
_and: PermissionCondition[]
|
|
}
|
|
}
|