[bugfix] Plugins: Add error handling. when error occurred while rendering a plugin, set status disabled and an error.
This commit is contained in:
@@ -282,44 +282,57 @@ export const usePlugins = () => {
|
||||
});
|
||||
};
|
||||
|
||||
const toggleSavedPluginsStatus = (target_plugin_id) => {
|
||||
const successPluginNotification = (message) => showNotification_Success(message, {
|
||||
hide_duration: 1000,
|
||||
category_id: "to_enable_plugin"
|
||||
});
|
||||
const is_exists = currentSavedPluginsStatus.data.some(
|
||||
const setSavedPluginEnabled = (target_plugin_id, is_enabled) => {
|
||||
const notify = () => {
|
||||
const msg_key = is_enabled
|
||||
? "plugin_notifications.is_enabled"
|
||||
: "plugin_notifications.is_disabled";
|
||||
showNotification_Success(t(msg_key), {
|
||||
hide_duration: 1000,
|
||||
category_id: "switch_enable_plugin",
|
||||
});
|
||||
}
|
||||
|
||||
const exists = currentSavedPluginsStatus.data.some(
|
||||
(d) => d.plugin_id === target_plugin_id
|
||||
);
|
||||
|
||||
let new_value = [];
|
||||
if (is_exists) {
|
||||
|
||||
if (exists) {
|
||||
new_value = currentSavedPluginsStatus.data.map((d) => {
|
||||
if (d.plugin_id === target_plugin_id) {
|
||||
d.is_enabled = !d.is_enabled;
|
||||
(d.is_enabled)
|
||||
? successPluginNotification(t("plugin_notifications.is_enabled"))
|
||||
: successPluginNotification(t("plugin_notifications.is_disabled"));
|
||||
d.is_enabled = is_enabled;
|
||||
notify();
|
||||
}
|
||||
return d;
|
||||
});
|
||||
} else {
|
||||
new_value.push(...currentSavedPluginsStatus.data);
|
||||
new_value.push({
|
||||
plugin_id: target_plugin_id,
|
||||
is_enabled: true,
|
||||
});
|
||||
successPluginNotification(t("plugin_notifications.is_enabled"))
|
||||
// 存在しない場合は追加
|
||||
new_value = [
|
||||
...currentSavedPluginsStatus.data,
|
||||
{ plugin_id: target_plugin_id, is_enabled: is_enabled }
|
||||
];
|
||||
notify();
|
||||
}
|
||||
|
||||
// 「currentPluginsData.data」でis_downloadedがtrueのものだけ残す
|
||||
// ダウンロード済みプラグインのみ残す
|
||||
new_value = new_value.filter((item) =>
|
||||
currentPluginsData.data.some(
|
||||
(plugin) => plugin.plugin_id === item.plugin_id && plugin.is_downloaded
|
||||
(p) => p.plugin_id === item.plugin_id && p.is_downloaded
|
||||
)
|
||||
);
|
||||
|
||||
setSavedPluginsStatus(new_value);
|
||||
};
|
||||
|
||||
const toggleSavedPluginsStatus = (plugin_id) => {
|
||||
// 現在の状態を探す(未登録なら false とみなす)
|
||||
const current = currentSavedPluginsStatus.data.find(
|
||||
(d) => d.plugin_id === plugin_id
|
||||
)?.is_enabled ?? false;
|
||||
setSavedPluginEnabled(plugin_id, !current);
|
||||
};
|
||||
|
||||
// Init時の処理 非対応のものを無効化する際に、savedDPluginsStatusから不要なものを削除する処理が邪魔になるので該当コードを削除したバージョン。Init以外で使用する時にはリファクタが必要になる。
|
||||
const setTargetSavedPluginsStatus_Init = (target_plugin_id, is_enabled) => {
|
||||
@@ -380,6 +393,15 @@ export const usePlugins = () => {
|
||||
showNotification_SaveSuccess();
|
||||
};
|
||||
|
||||
const setErrorPlugin = (plugin_id, error_message_type) => {
|
||||
const error_message = t("plugin_notifications.disabled_due_to_an_error");
|
||||
|
||||
setSavedPluginEnabled(plugin_id, false);
|
||||
updateTargetPluginData(plugin_id, "is_error", true);
|
||||
updateTargetPluginData(plugin_id, "error_message_type", error_message_type);
|
||||
showNotification_Error(error_message);
|
||||
};
|
||||
|
||||
|
||||
return {
|
||||
asyncFetchPluginsInfo,
|
||||
@@ -406,11 +428,15 @@ export const usePlugins = () => {
|
||||
currentLoadedPlugins,
|
||||
updateLoadedPlugins,
|
||||
|
||||
setSavedPluginEnabled,
|
||||
toggleSavedPluginsStatus,
|
||||
setTargetSavedPluginsStatus_Init,
|
||||
setSavedPluginsStatus,
|
||||
|
||||
|
||||
handlePendingPlugin,
|
||||
|
||||
setErrorPlugin,
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user