mirror of
https://github.com/utopia-os/utopia-ui.git
synced 2025-12-13 07:46:10 +00:00
* Add component to show invite link (WIP) * Show invite link with copy functionality and QR-Code, add tests * Query secrets * Update directus collections * Add config and invite api * Let vite resolve paths using tsconfig * Redeem invite link when logged in or after logging in * Redirect to inviting profile when redeeming * Fix some logic with login and redeeming * Use correct redeem flow * Hide missing form error * Add basic relations view * Pass profile to redeem Api and adapt to changed redeem flow * Remove unnecessary aliases in vite config * Remove dead import * gitignore mac specific file * Remove lazy loading * Fix linting * add InviteApi import * Change case of file name (tbd) * Don't toast error if user profile was not loaded yet * Fix casing * avoid app crash when profile of a new item is opened --------- Co-authored-by: Anton Tranelis <mail@antontranelis.de>
123 lines
3.5 KiB
TypeScript
123 lines
3.5 KiB
TypeScript
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
/* eslint-disable no-console */
|
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
import { createItem, deleteItem, readItem, readItems, updateItem } from '@directus/sdk'
|
|
|
|
import { directusClient } from './directus'
|
|
|
|
import type { MyCollections } from './directus'
|
|
import type { ItemsApi } from 'utopia-ui'
|
|
|
|
export class itemsApi<T> implements ItemsApi<T> {
|
|
collectionName: keyof MyCollections
|
|
filter: any
|
|
layerId: string | undefined
|
|
mapId: string | undefined
|
|
customParameter: any
|
|
|
|
constructor(
|
|
collectionName: keyof MyCollections,
|
|
layerId?: string | undefined,
|
|
mapId?: string | undefined,
|
|
filter?: any,
|
|
customParameter?: any,
|
|
) {
|
|
this.collectionName = collectionName
|
|
if (filter) this.filter = filter
|
|
else this.filter = {}
|
|
this.layerId = layerId
|
|
if (layerId) {
|
|
this.filter = { ...filter, ...{ layer: { id: { _eq: layerId } } } }
|
|
}
|
|
this.mapId = mapId
|
|
if (mapId) {
|
|
this.filter = { ...filter, ...{ map: { id: { _eq: mapId } } } }
|
|
}
|
|
if (customParameter) this.customParameter = customParameter
|
|
}
|
|
|
|
async getItems(): Promise<T[]> {
|
|
try {
|
|
const result = await directusClient.request<T[]>(
|
|
readItems(this.collectionName as never, {
|
|
fields: [
|
|
'*',
|
|
'secrets.*',
|
|
'to.*',
|
|
'relations.*',
|
|
'user_created.*',
|
|
'markerIcon.*',
|
|
{ offers: ['*'], needs: ['*'], gallery: ['*.*'] } as any,
|
|
],
|
|
filter: this.filter,
|
|
limit: -1,
|
|
}),
|
|
)
|
|
|
|
return result
|
|
} catch (error: any) {
|
|
console.error(error)
|
|
if (error.errors?.[0]?.message) {
|
|
throw new Error(error.errors[0].message)
|
|
} else {
|
|
throw error
|
|
}
|
|
}
|
|
}
|
|
|
|
async getItem(id: string): Promise<T> {
|
|
try {
|
|
const result = await directusClient.request(readItem(this.collectionName as never, id))
|
|
return result as T
|
|
} catch (error: any) {
|
|
console.log(error)
|
|
if (error.errors[0]?.message) throw error.errors[0].message
|
|
else throw error
|
|
}
|
|
}
|
|
|
|
async createItem(item: T & { id?: string }): Promise<T> {
|
|
try {
|
|
const result = await directusClient.request(
|
|
createItem(this.collectionName, {
|
|
...item,
|
|
...(this.customParameter && this.customParameter),
|
|
...(this.layerId && { layer: this.layerId }),
|
|
...(this.layerId && { layer: this.layerId }),
|
|
...(this.mapId && { map: this.mapId }),
|
|
}),
|
|
)
|
|
return result as T
|
|
} catch (error: any) {
|
|
console.log(error)
|
|
if (error.errors[0]?.message) throw error.errors[0].message
|
|
else throw error
|
|
}
|
|
}
|
|
|
|
async updateItem(item: T & { id?: string }): Promise<T> {
|
|
try {
|
|
const result = await directusClient.request(updateItem(this.collectionName, item.id!, item))
|
|
return result as T
|
|
} catch (error: any) {
|
|
console.log(error)
|
|
if (error.errors[0].message) throw error.errors[0].message
|
|
else throw error
|
|
}
|
|
}
|
|
|
|
async deleteItem(id: string): Promise<boolean> {
|
|
try {
|
|
const result = await directusClient.request(deleteItem(this.collectionName, id))
|
|
return result as unknown as boolean
|
|
} catch (error: any) {
|
|
console.log(error)
|
|
if (error.errors[0].message) throw error.errors[0].message
|
|
else throw error
|
|
}
|
|
}
|
|
}
|