110 lines
2.9 KiB
TypeScript
110 lines
2.9 KiB
TypeScript
|
import { defineStore } from 'pinia';
|
||
|
|
||
|
export const useStorageStore = defineStore('storage', {
|
||
|
state: () => ({
|
||
|
storageSpaces: [] as any[],
|
||
|
objects: [] as any[],
|
||
|
loading: false,
|
||
|
error: null as string | null,
|
||
|
}),
|
||
|
|
||
|
getters: {
|
||
|
getStorageById: (state) => (id: number) => {
|
||
|
return state.storageSpaces.find(storage => storage.id === id);
|
||
|
},
|
||
|
|
||
|
getObjectsInStorage: (state) => (storageId: number) => {
|
||
|
return state.objects.filter(obj => obj.storagespaceId === storageId);
|
||
|
},
|
||
|
|
||
|
getChildStorages: (state) => (parentId: number) => {
|
||
|
return state.storageSpaces.filter(storage =>
|
||
|
storage.parent && storage.parent === parentId
|
||
|
);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
actions: {
|
||
|
async fetchStorageSpaces() {
|
||
|
this.loading = true;
|
||
|
this.error = null;
|
||
|
|
||
|
try {
|
||
|
const response = await fetch('/api/v1/storageSpaces', {
|
||
|
headers: {
|
||
|
'Authorization': `Bearer ${localStorage.getItem('auth_token')}`,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
if (!response.ok) {
|
||
|
throw new Error('Failed to fetch storage spaces');
|
||
|
}
|
||
|
|
||
|
const data = await response.json();
|
||
|
this.storageSpaces = data;
|
||
|
} catch (error: any) {
|
||
|
this.error = error.message;
|
||
|
throw error;
|
||
|
} finally {
|
||
|
this.loading = false;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
async fetchObjectsInStorage(storageId: number) {
|
||
|
this.loading = true;
|
||
|
this.error = null;
|
||
|
|
||
|
try {
|
||
|
const response = await fetch(`/api/v1/storageSpaces/${storageId}/objects`, {
|
||
|
headers: {
|
||
|
'Authorization': `Bearer ${localStorage.getItem('auth_token')}`,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
if (!response.ok) {
|
||
|
throw new Error('Failed to fetch objects');
|
||
|
}
|
||
|
|
||
|
const data = await response.json();
|
||
|
this.objects = data;
|
||
|
} catch (error: any) {
|
||
|
this.error = error.message;
|
||
|
throw error;
|
||
|
} finally {
|
||
|
this.loading = false;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
async fetchStorageHierarchy(rootStorageId: number) {
|
||
|
this.loading = true;
|
||
|
this.error = null;
|
||
|
|
||
|
try {
|
||
|
// First, ensure we have all storage spaces
|
||
|
if (this.storageSpaces.length === 0) {
|
||
|
await this.fetchStorageSpaces();
|
||
|
}
|
||
|
|
||
|
// Then fetch all objects in the hierarchy
|
||
|
const response = await fetch(`/api/v1/storageSpaces/${rootStorageId}/hierarchy/objects`, {
|
||
|
headers: {
|
||
|
'Authorization': `Bearer ${localStorage.getItem('auth_token')}`,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
if (!response.ok) {
|
||
|
throw new Error('Failed to fetch storage hierarchy');
|
||
|
}
|
||
|
|
||
|
const data = await response.json();
|
||
|
this.objects = data;
|
||
|
} catch (error: any) {
|
||
|
this.error = error.message;
|
||
|
throw error;
|
||
|
} finally {
|
||
|
this.loading = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|