mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-18 09:20:15 +01:00
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
|
|
import debounce from 'lodash/debounce';
|
||
|
|
import { LocalStorageKeys } from 'librechat-data-provider';
|
||
|
|
|
||
|
|
export const clearDraft = debounce((id?: string | null) => {
|
||
|
|
localStorage.removeItem(`${LocalStorageKeys.TEXT_DRAFT}${id ?? ''}`);
|
||
|
|
}, 2500);
|
||
|
|
|
||
|
|
export const encodeBase64 = (plainText: string): string => {
|
||
|
|
try {
|
||
|
|
const textBytes = new TextEncoder().encode(plainText);
|
||
|
|
return btoa(String.fromCharCode(...textBytes));
|
||
|
|
} catch {
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
export const decodeBase64 = (base64String: string): string => {
|
||
|
|
try {
|
||
|
|
const bytes = atob(base64String);
|
||
|
|
const uint8Array = new Uint8Array(bytes.length);
|
||
|
|
for (let i = 0; i < bytes.length; i++) {
|
||
|
|
uint8Array[i] = bytes.charCodeAt(i);
|
||
|
|
}
|
||
|
|
return new TextDecoder().decode(uint8Array);
|
||
|
|
} catch {
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
export const setDraft = ({ id, value }: { id: string; value?: string }) => {
|
||
|
|
if (value && value.length > 1) {
|
||
|
|
localStorage.setItem(`${LocalStorageKeys.TEXT_DRAFT}${id}`, encodeBase64(value));
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
localStorage.removeItem(`${LocalStorageKeys.TEXT_DRAFT}${id}`);
|
||
|
|
};
|
||
|
|
|
||
|
|
export const getDraft = (id?: string): string | null =>
|
||
|
|
decodeBase64((localStorage.getItem(`${LocalStorageKeys.TEXT_DRAFT}${id ?? ''}`) ?? '') || '');
|