f1181e8510
Reviewed-on: #413 Co-authored-by: miteruzo <miteruzo@naver.com> Co-committed-by: miteruzo <miteruzo@naver.com>
95 行
1.8 KiB
TypeScript
95 行
1.8 KiB
TypeScript
import type { StorageErrorHandler } from '@/lib/postImportTypes'
|
|
|
|
const SOURCE_DRAFT_KEY = 'post-import-source-draft'
|
|
|
|
|
|
const readStorage = (
|
|
key: string,
|
|
onError?: StorageErrorHandler,
|
|
): string | null => {
|
|
if (typeof window === 'undefined')
|
|
return null
|
|
|
|
try
|
|
{
|
|
return sessionStorage.getItem (key)
|
|
}
|
|
catch
|
|
{
|
|
onError?.('保存済みデータを読み込めませんでした.')
|
|
return null
|
|
}
|
|
}
|
|
|
|
|
|
const writeStorage = (
|
|
key: string,
|
|
value: string,
|
|
onError?: StorageErrorHandler,
|
|
): boolean => {
|
|
if (typeof window === 'undefined')
|
|
return false
|
|
|
|
try
|
|
{
|
|
sessionStorage.setItem (key, value)
|
|
return true
|
|
}
|
|
catch
|
|
{
|
|
onError?.('ブラウザへ保存できませんでした.')
|
|
return false
|
|
}
|
|
}
|
|
|
|
|
|
const removeStorage = (
|
|
key: string,
|
|
onError?: StorageErrorHandler,
|
|
) => {
|
|
if (typeof window === 'undefined')
|
|
return
|
|
|
|
try
|
|
{
|
|
sessionStorage.removeItem (key)
|
|
}
|
|
catch
|
|
{
|
|
onError?.('保存済みデータを削除できませんでした.')
|
|
}
|
|
}
|
|
|
|
|
|
export const loadPostImportSourceDraft = (
|
|
onError?: StorageErrorHandler,
|
|
): { source: string } => {
|
|
const raw = readStorage (SOURCE_DRAFT_KEY, onError)
|
|
if (raw == null)
|
|
return { source: '' }
|
|
|
|
try
|
|
{
|
|
const value = JSON.parse (raw) as { source?: string }
|
|
return { source: typeof value.source === 'string' ? value.source : '' }
|
|
}
|
|
catch
|
|
{
|
|
return { source: '' }
|
|
}
|
|
}
|
|
|
|
|
|
export const savePostImportSourceDraft = (
|
|
source: string,
|
|
onError?: StorageErrorHandler,
|
|
): boolean =>
|
|
writeStorage (SOURCE_DRAFT_KEY, JSON.stringify ({ source }), onError)
|
|
|
|
|
|
export const clearPostImportSourceDraft = (
|
|
onError?: StorageErrorHandler,
|
|
) => {
|
|
removeStorage (SOURCE_DRAFT_KEY, onError)
|
|
}
|