Skip to content
Snippets Groups Projects

Resolve "Add UI for viewing and managing Resources"

Merged Daniel Göbel requested to merge feature/88-add-ui-for-viewing-and-managing-resources into main
Files
2
+ 69
8
@@ -5,9 +5,12 @@ import type {
ResourceVersionIn,
ResourceVersionOut,
} from "@/client/resource";
import { ResourceService, ResourceVersionService } from "@/client/resource";
import {
ResourceService,
ResourceVersionService,
Status,
} from "@/client/resource";
import { useAuthStore } from "@/stores/users";
import { Status } from "@/client/resource";
import { useNameStore } from "@/stores/names";
export const useResourceStore = defineStore({
@@ -16,9 +19,11 @@ export const useResourceStore = defineStore({
({
resourceMapping: {},
ownResourceMapping: {},
reviewableResourceMapping: {},
}) as {
resourceMapping: Record<string, ResourceOut>;
ownResourceMapping: Record<string, ResourceOut>;
reviewableResourceMapping: Record<string, ResourceOut>;
},
getters: {
resources(): ResourceOut[] {
@@ -27,20 +32,45 @@ export const useResourceStore = defineStore({
ownResources(): ResourceOut[] {
return Object.values(this.ownResourceMapping);
},
reviewableResources(): ResourceOut[] {
return Object.values(this.reviewableResourceMapping);
},
},
actions: {
__addNameToMapping(key: string, value: string) {
const nameStore = useNameStore();
nameStore.addNameToMapping(key, value);
},
fetchResources(
maintainerId?: string,
versionStatus?: Status[],
): Promise<ResourceOut[]> {
return ResourceService.resourceListResources(maintainerId, versionStatus);
},
fetchReviewableResources(onFinally?: () => void): Promise<ResourceOut[]> {
if (Object.keys(this.reviewableResourceMapping).length > 0) {
onFinally?.();
}
return this.fetchResources(undefined, [
Status.SYNC_REQUESTED,
Status.SYNCHRONIZING,
])
.then((resources) => {
const newMapping: Record<string, ResourceOut> = {};
const nameStore = useNameStore();
for (const resource of resources) {
newMapping[resource.resource_id] = resource;
nameStore.addNameToMapping(resource.resource_id, resource.name);
for (const version of resource.versions) {
nameStore.addNameToMapping(
version.resource_version_id,
version.release,
);
}
}
this.reviewableResourceMapping = newMapping;
return resources;
})
.finally(onFinally);
},
fetchPublicResources(onFinally?: () => void): Promise<ResourceOut[]> {
if (Object.keys(this.resourceMapping).length > 0) {
if (this.resources.length > 0) {
onFinally?.();
}
return this.fetchResources()
@@ -89,7 +119,7 @@ export const useResourceStore = defineStore({
},
fetchOwnResources(onFinally?: () => void): Promise<ResourceOut[]> {
const authStore = useAuthStore();
if (Object.keys(this.ownResourceMapping).length > 0) {
if (this.ownResources.length > 0) {
onFinally?.();
}
return this.fetchResources(authStore.currentUID, Object.values(Status))
@@ -182,5 +212,36 @@ export const useResourceStore = defineStore({
return versionOut;
});
},
syncResource(
resourceVersion: ResourceVersionOut,
): Promise<ResourceVersionOut> {
return ResourceVersionService.resourceVersionResourceVersionSync(
resourceVersion.resource_id,
resourceVersion.resource_version_id,
).then((changedVersion) => {
if (
this.reviewableResourceMapping[changedVersion.resource_id] ==
undefined
) {
return changedVersion;
}
const versionIndex = this.reviewableResourceMapping[
changedVersion.resource_id
].versions.findIndex(
(version) =>
version.resource_version_id == changedVersion.resource_version_id,
);
if (versionIndex > -1) {
this.reviewableResourceMapping[changedVersion.resource_id].versions[
versionIndex
] = changedVersion;
} else {
this.reviewableResourceMapping[
changedVersion.resource_id
].versions.push(changedVersion);
}
return changedVersion;
});
},
},
});
Loading