fix(ui): guard JSON.parse(localStorage) calls with try/catch to prevent UI crashes (#25481)
This commit is contained in:
@@ -59,6 +59,14 @@
|
||||
|
||||
let closedBannerIds = [];
|
||||
|
||||
const getDismissedBannerIds = (): string[] => {
|
||||
try {
|
||||
return JSON.parse(localStorage.getItem('dismissedBannerIds') ?? '[]');
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
let showShareChatModal = false;
|
||||
let showDownloadChatModal = false;
|
||||
</script>
|
||||
@@ -299,7 +307,7 @@
|
||||
/>
|
||||
{/if}
|
||||
|
||||
{#each $banners.filter((b) => ![...JSON.parse(localStorage.getItem('dismissedBannerIds') ?? '[]'), ...closedBannerIds].includes(b.id)) as banner (banner.id)}
|
||||
{#each $banners.filter((b) => ![...getDismissedBannerIds(), ...closedBannerIds].includes(b.id)) as banner (banner.id)}
|
||||
<Banner
|
||||
{banner}
|
||||
on:dismiss={(e) => {
|
||||
@@ -309,10 +317,9 @@
|
||||
localStorage.setItem(
|
||||
'dismissedBannerIds',
|
||||
JSON.stringify(
|
||||
[
|
||||
bannerId,
|
||||
...JSON.parse(localStorage.getItem('dismissedBannerIds') ?? '[]')
|
||||
].filter((id) => $banners.find((b) => b.id === id))
|
||||
[bannerId, ...getDismissedBannerIds()].filter((id) =>
|
||||
$banners.find((b) => b.id === id)
|
||||
)
|
||||
)
|
||||
);
|
||||
} else {
|
||||
|
||||
@@ -973,7 +973,11 @@
|
||||
if (userSettings) {
|
||||
settings.set(userSettings.ui);
|
||||
} else {
|
||||
settings.set(JSON.parse(localStorage.getItem('settings') ?? '{}'));
|
||||
try {
|
||||
settings.set(JSON.parse(localStorage.getItem('settings') ?? '{}'));
|
||||
} catch {
|
||||
settings.set({});
|
||||
}
|
||||
}
|
||||
setTextScale($settings?.textScale ?? 1);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user