fix(sources): hide unavailable update and management entries

This commit is contained in:
2026-04-16 13:04:54 +08:00
parent e1ec526cb9
commit 0b784af3d7
16 changed files with 667 additions and 58 deletions
+83
View File
@@ -0,0 +1,83 @@
import type { StoreFilter } from "@/global/typedefinition";
export interface SourceAvailability {
spark: boolean;
apm: boolean;
}
export const isOriginEnabled = (
storeFilter: StoreFilter,
origin: "spark" | "apm",
): boolean => {
return storeFilter === "both" || storeFilter === origin;
};
export const getDefaultInstalledOrigin = (
storeFilter: StoreFilter,
availability: SourceAvailability,
): "spark" | "apm" | null => {
if (storeFilter === "spark") {
return availability.spark ? "spark" : null;
}
if (storeFilter === "apm") {
return availability.apm ? "apm" : null;
}
if (availability.apm) {
return "apm";
}
if (availability.spark) {
return "spark";
}
return null;
};
export const getEffectiveStoreFilter = (
storeFilter: StoreFilter,
availability: SourceAvailability,
): StoreFilter | null => {
if (storeFilter === "spark") {
return availability.spark ? "spark" : null;
}
if (storeFilter === "apm") {
return availability.apm ? "apm" : null;
}
if (availability.spark && availability.apm) {
return "both";
}
if (availability.spark) {
return "spark";
}
if (availability.apm) {
return "apm";
}
return null;
};
export const isOriginUsable = (
storeFilter: StoreFilter,
origin: "spark" | "apm",
availability: SourceAvailability,
): boolean => {
return isOriginEnabled(storeFilter, origin) && availability[origin];
};
export const getAllowedInstalledOrigin = (
storeFilter: StoreFilter,
requestedOrigin: "spark" | "apm",
availability: SourceAvailability,
): "spark" | "apm" | null => {
if (isOriginUsable(storeFilter, requestedOrigin, availability)) {
return requestedOrigin;
}
return getDefaultInstalledOrigin(storeFilter, availability);
};
+7 -6
View File
@@ -5,6 +5,7 @@ import type {
UpdateCenterSnapshot,
DownloadItem,
UpdateCenterStartTask,
StoreFilter,
} from "@/global/typedefinition";
import { downloads, getNextUpdateDownloadId } from "@/global/downloadStatus";
import { APM_STORE_BASE_URL } from "@/global/storeConfig";
@@ -28,8 +29,8 @@ export interface UpdateCenterStore {
someSelected: ComputedRef<boolean>;
bind: () => void;
unbind: () => void;
open: () => Promise<void>;
refresh: () => Promise<void>;
open: (storeFilter?: StoreFilter) => Promise<void>;
refresh: (storeFilter?: StoreFilter) => Promise<void>;
ignoreItem: (packageName: string, newVersion: string) => Promise<void>;
unignoreItem: (packageName: string, newVersion: string) => Promise<void>;
toggleSelection: (taskKey: string) => void;
@@ -129,15 +130,15 @@ export const createUpdateCenterStore = (): UpdateCenterStore => {
isBound = false;
};
const open = async (): Promise<void> => {
const open = async (storeFilter: StoreFilter = "both"): Promise<void> => {
resetSessionState();
const nextSnapshot = await window.updateCenter.open();
const nextSnapshot = await window.updateCenter.open(storeFilter);
applySnapshot(nextSnapshot);
isOpen.value = true;
};
const refresh = async (): Promise<void> => {
const nextSnapshot = await window.updateCenter.refresh();
const refresh = async (storeFilter: StoreFilter = "both"): Promise<void> => {
const nextSnapshot = await window.updateCenter.refresh(storeFilter);
applySnapshot(nextSnapshot);
};