2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2025-11-17 18:52:06 +00:00

chore: move cached zone assets in modman ui to store

This commit is contained in:
Jan Laupetin
2025-10-27 20:59:10 +01:00
parent afbdfdf2e5
commit b299269949
2 changed files with 36 additions and 16 deletions

View File

@@ -0,0 +1,26 @@
import { computed, ref } from "vue";
import { defineStore } from "pinia";
import type { ZoneAssetsDto } from "@/native/AssetBinds";
import { webviewBinds } from "@/native";
export const useAssetStore = defineStore("asset", () => {
const zoneName = ref<string | null>(null);
const assetsOfZone = ref<ZoneAssetsDto | null>(null);
const isLoading = computed(() => Boolean(assetsOfZone.value));
const assetCount = computed(() => assetsOfZone.value?.assets.length ?? 0);
const referenceCount = computed(() => assetsOfZone.value?.references.length ?? 0);
function loadAssetsForZone(newZoneName: string | null) {
zoneName.value = newZoneName;
assetsOfZone.value = null;
if (!newZoneName) return;
webviewBinds.getAssetsForZone(newZoneName).then((res) => {
if (zoneName.value === newZoneName) {
assetsOfZone.value = res;
}
});
}
return { zoneName, isLoading, assetsOfZone, assetCount, referenceCount, loadAssetsForZone };
});

View File

@@ -6,23 +6,23 @@ import Skeleton from "primevue/skeleton";
import { dt } from "@primeuix/themes"; import { dt } from "@primeuix/themes";
import type { ZoneDto } from "@/native/ZoneBinds"; import type { ZoneDto } from "@/native/ZoneBinds";
import { useZoneStore } from "@/stores/ZoneStore"; import { useZoneStore } from "@/stores/ZoneStore";
import { computed, ref, watch } from "vue"; import { computed, watch } from "vue";
import type { CommonAssetType, ZoneAssetsDto } from "@/native/AssetBinds"; import type { CommonAssetType } from "@/native/AssetBinds";
import { webviewBinds } from "@/native";
import { getAssetTypeNameCapitalized } from "@/utils/AssetTypeName"; import { getAssetTypeNameCapitalized } from "@/utils/AssetTypeName";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { PAGE } from "@/router/Page"; import { PAGE } from "@/router/Page";
import { useAssetStore } from "@/stores/AssetStore";
import { storeToRefs } from "pinia";
const assetStore = useAssetStore();
const zoneStore = useZoneStore(); const zoneStore = useZoneStore();
const { assetsOfZone, assetCount, referenceCount } = storeToRefs(assetStore);
const props = defineProps<{ const props = defineProps<{
selectedZone: string | null; selectedZone: string | null;
}>(); }>();
const assets = ref<ZoneAssetsDto | null>(null);
const assetCount = computed(() => assets.value?.assets.length ?? 0);
const referenceCount = computed(() => assets.value?.references.length ?? 0);
const METER_COLORS = [ const METER_COLORS = [
dt("blue.600"), dt("blue.600"),
dt("red.600"), dt("red.600"),
@@ -37,7 +37,7 @@ const METER_COLORS = [
const meterItems = computed<MeterItem[]>(() => { const meterItems = computed<MeterItem[]>(() => {
const assetTypeCounts: Partial<Record<CommonAssetType, number>> = {}; const assetTypeCounts: Partial<Record<CommonAssetType, number>> = {};
for (const asset of assets.value?.assets ?? []) { for (const asset of assetsOfZone.value?.assets ?? []) {
if (!assetTypeCounts[asset.type]) { if (!assetTypeCounts[asset.type]) {
assetTypeCounts[asset.type] = 1; assetTypeCounts[asset.type] = 1;
} else { } else {
@@ -94,13 +94,7 @@ function onClickShowAssets() {
watch( watch(
() => props.selectedZone, () => props.selectedZone,
(newValue) => { (newValue) => {
assets.value = null; assetStore.loadAssetsForZone(newValue);
if (!newValue) return;
webviewBinds.getAssetsForZone(newValue).then((res) => {
if (props.selectedZone === newValue) {
assets.value = res;
}
});
}, },
{ immediate: true }, { immediate: true },
); );
@@ -115,7 +109,7 @@ watch(
<Tag :value="selectedZoneDetails.platform" /> <Tag :value="selectedZoneDetails.platform" />
</div> </div>
<div class="zone-assets"> <div class="zone-assets">
<template v-if="assets"> <template v-if="assetsOfZone">
<div>{{ assetCount }} assets</div> <div>{{ assetCount }} assets</div>
<div>{{ referenceCount }} references</div> <div>{{ referenceCount }} references</div>
<MeterGroup class="asset-meter" :value="meterItems" /> <MeterGroup class="asset-meter" :value="meterItems" />