fix: preserve custom canvas skill tags on upgrade

This commit is contained in:
134 2026-06-29 17:30:50 +08:00
parent 164d9f97e7
commit 02772bc343

View File

@ -224,18 +224,11 @@ export function normalizeCanvasSkillTags(value: unknown): CanvasSkillTag[] {
function mergeCanvasSkillTagsWithDefaultUpdates(value: unknown): CanvasSkillTag[] { function mergeCanvasSkillTagsWithDefaultUpdates(value: unknown): CanvasSkillTag[] {
const currentTags = normalizeCanvasSkillTags(value); const currentTags = normalizeCanvasSkillTags(value);
const currentById = new Map(currentTags.map((tag) => [tag.id, tag])); const currentIds = new Set(currentTags.map((tag) => tag.id));
const defaultIds = new Set(DEFAULT_CANVAS_SKILL_TAGS.map((tag) => tag.id)); const missingDefaultTags = DEFAULT_CANVAS_SKILL_TAGS.filter(
const merged: CanvasSkillTag[] = DEFAULT_CANVAS_SKILL_TAGS.map((defaultTag) => { (defaultTag) => !currentIds.has(defaultTag.id)
const currentTag = currentById.get(defaultTag.id); );
return currentTag?.iconUrl ? { ...defaultTag, iconUrl: currentTag.iconUrl } : defaultTag; const merged: CanvasSkillTag[] = [...currentTags, ...missingDefaultTags];
});
currentTags.forEach((tag) => {
if (!defaultIds.has(tag.id)) {
merged.push(tag);
}
});
return normalizeCanvasSkillTags(merged); return normalizeCanvasSkillTags(merged);
} }