[Refactor/bugfix/TMP] TMP:

Separate plugins controller.
Add ui pattern for outdated plugins and the plugin that is not supported current vrct version but supported in newest vrct version.
This commit is contained in:
Sakamoto Shiina
2025-04-15 16:48:50 +09:00
parent ddc6408828
commit 379ca86b45
10 changed files with 251 additions and 150 deletions

View File

@@ -0,0 +1,35 @@
import { useEffect } from "react";
import { usePlugins } from "@logics_configs";
export const MergeSavedPluginsStatusController = () => {
const {
updatePluginsData,
currentSavedPluginsStatus,
} = usePlugins();
useEffect(() => {
updatePluginsData(prev => {
// currentSavedPluginsStatus.data の各要素を Map 化して plugin_id で参照
const saved_map = new Map(currentSavedPluginsStatus.data.map(saved => [saved.plugin_id, saved]));
const prev_map = new Map(prev.data.map(item => [item.plugin_id, item]));
// prev.data にある各アイテムについて、保存済みの状態情報があればマージ
const merged = prev.data.map(item => {
if (saved_map.has(item.plugin_id)) {
return { ...item, is_enabled: saved_map.get(item.plugin_id).is_enabled };
}
return item;
});
// currentSavedPluginsStatus.data にのみ存在する項目があれば追加
currentSavedPluginsStatus.data.forEach(saved => {
if (!prev_map.has(saved.plugin_id)) {
merged.push({ plugin_id: saved.plugin_id, is_enabled: saved.is_enabled });
}
});
return merged;
});
}, [currentSavedPluginsStatus]);
return null;
};