InspectorRAGet / src /hooks /useStorage.ts
kpfadnis's picture
chore: Initial commit.
599f646
raw
history blame
2.22 kB
/**
*
* Copyright 2023-2024 InspectorRAGet Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**/
export default function useLocalStorage(): {
getItem: (key: string) => any;
setItem: (key: string, value: any) => boolean;
removeItem: (key: string) => void;
} {
const isBrowser: boolean = ((): boolean => typeof window !== 'undefined')();
const getItem = (key: string): any => {
if (isBrowser) {
const item = window.localStorage.getItem(key);
return item ? JSON.parse(item) : undefined;
}
return undefined;
};
const setItem = (key: string, value: any): boolean => {
if (isBrowser) {
try {
// Step 2: Check if item already exists
if (window.localStorage.getItem(key)) {
window.localStorage.removeItem(key);
}
window.localStorage.setItem(key, JSON.stringify(value));
} catch (err) {
console.log(err);
console.log(err instanceof DOMException);
if (err instanceof DOMException) console.log(err.name);
if (
err instanceof DOMException &&
// everything except Firefox
(err.name === 'QuotaExceededError' ||
// Firefox
err.name === 'NS_ERROR_DOM_QUOTA_REACHED')
) {
console.log('clearing local storage');
window.localStorage.clear();
console.log(window.localStorage);
}
// Re-try adding again
window.localStorage.setItem(key, JSON.stringify(value));
}
return true;
}
return false;
};
const removeItem = (key: string): void => {
window.localStorage.removeItem(key);
};
return {
getItem,
setItem,
removeItem,
};
}