import {defineStore} from 'pinia' import {createClient} from '@supabase/supabase-js' const supabase = createClient('https://uwppvcxflrcsibuzsbil.supabase.co','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InV3cHB2Y3hmbHJjc2lidXpzYmlsIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDA5MzgxOTQsImV4cCI6MjAxNjUxNDE5NH0.CkxYSQH0uLfwx9GVUlO6AYMU2FMLAxGMrwEKvyPv7Oo') // @ts-ignore export const useDataStore = defineStore('data', { state: () => ({ loaded: false, ownTenant: { calendarConfig: { eventTypes: [] as any[] }, timeConfig: { timeTypes: [] as any[] } }, profiles: [] as any[], events: [] as any[], customers: [] as any[], tasks: [] as any[], projects: [] as any[], documents: [] as any[], spaces: [] as any[], units: [] as any[], times: [] as any[], products: [] as any[], movements: [] as any[], forms: [] as any[], formSubmits: [] as any[], contacts: [] as any[], vehicles: [] as any[], }), actions: { async fetchData() { await this.fetchOwnTenant() await this.fetchProfiles() await this.fetchEvents() await this.fetchCustomers() await this.fetchTasks() await this.fetchForms() await this.fetchFormSubmits() await this.fetchProducts() await this.fetchUnits() await this.fetchProjects() await this.fetchDocuments() await this.fetchMovements() await this.fetchTimes() await this.fetchSpaces() await this.fetchVehicles() this.loaded = true }, async fetchOwnTenant() { //TODO: Tenant ID Dynamisch machen // @ts-ignore this.ownTenant = (await supabase.from("tenants").select().eq('id', 1)).data[0] }, async fetchProfiles() { // @ts-ignore this.profiles = (await supabase.from("profiles").select()).data }, async fetchEvents() { // @ts-ignore this.events = (await supabase.from("events").select()).data }, async fetchCustomers() { // @ts-ignore this.customers = (await supabase.from("customers").select().order('customerNumber', {ascending: true})).data }, async fetchTasks() { // @ts-ignore this.tasks = (await supabase.from("tasks").select()).data }, async fetchForms() { // @ts-ignore this.forms = (await supabase.from("forms").select()).data }, async fetchFormSubmits() { // @ts-ignore this.formSubmits = (await supabase.from("formSubmits").select()).data }, async fetchProducts() { // @ts-ignore this.products = (await supabase.from("products").select()).data }, async fetchUnits() { // @ts-ignore this.units = (await supabase.from("units").select()).data }, async fetchProjects() { // @ts-ignore this.projects = (await supabase.from("projects").select()).data }, async fetchSpaces() { // @ts-ignore this.spaces = (await supabase.from("spaces").select().order('spaceNumber', {ascending: true})).data }, async fetchMovements() { // @ts-ignore this.movements = (await supabase.from("movements").select()).data }, async fetchVehicles() { // @ts-ignore this.vehicles = (await supabase.from("vehicles").select()).data }, async fetchTimes() { // @ts-ignore this.times = (await supabase.from("times").select()).data }, async fetchDocuments() { // @ts-ignore this.documents = (await supabase.from("documents").select()).data for(const [index,doc] of this.documents.entries()){ // @ts-ignore this.documents[index].url = (await supabase.storage.from('documents').createSignedUrl(doc.path, 60 * 60)).data.signedUrl } } }, getters: { getOpenTasksCount: (state) => state.tasks.filter(task => task.categorie != "Erledigt").length, movementsBySpace: (state) => (spaceId:number) => state.movements.filter(move => move.spaceId === spaceId), getProductById: (state) => (productId:number) => state.products.find(product => product.id === productId), getProjectById: (state) => (projectId:number) => state.projects.find(project => project.id === projectId), getCustomerById: (state) => (customerId:number) => state.customers.find(customer => customer.id === customerId), getFormSubmitsWithLabelProp: (state) => (state.formSubmits.map(submit => {return{...submit, label: submit.id}})), getResources: (state) => { return [ ...state.profiles.map(profile => { return { type: 'person', title: profile.firstName + ' ' + profile.lastName, id: profile.id } }), ...state.vehicles.map(vehicle => { return { type: 'vehicle', title: vehicle.licensePlate, id: vehicle.licensePlate } }) ] }, getEvents: (state) => { return [ ...state.events.map(event => { return { ...event, backgroundColor: state.ownTenant.calendarConfig.eventTypes.find(type => type.label === event.type).color } }), ] }, getEventTypes: (state) => state.ownTenant.calendarConfig.eventTypes, getTimeTypes: (state) => state.ownTenant.timeConfig.timeTypes } })