| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import customLocalStorage from '@/infrastructure/local-storage'
- import getMeta from '@/utils/meta'
- import {
- RefProviderSettings,
- UserSettings,
- } from '../../../../types/user-settings'
- type RefProvider = 'mendeley' | 'zotero' | 'papers'
- const providers: RefProvider[] = ['mendeley', 'zotero', 'papers']
- const buildLegacyKey = (userId: string, provider: RefProvider, key: string) =>
- `user.${userId}.write-and-cite.${provider}.${key}`
- const isBoolean = (value: unknown): value is boolean =>
- typeof value === 'boolean'
- const parseGroups = (value: unknown): { id: string }[] | undefined => {
- return Array.isArray(value)
- ? (value as { id: string | number }[]).map(group => ({
- id: typeof group.id === 'number' ? String(group.id) : group.id,
- }))
- : undefined
- }
- export type LegacyWriteAndCiteMigration = {
- patch: Partial<Pick<UserSettings, 'mendeley' | 'zotero' | 'papers'>>
- keysToRemove: string[]
- }
- export const getLegacyWriteAndCiteMigration = (
- userSettings: UserSettings
- ): LegacyWriteAndCiteMigration => {
- const userId = getMeta('ol-user_id')
- if (!userId) {
- return {
- patch: {},
- keysToRemove: [],
- }
- }
- const patch: LegacyWriteAndCiteMigration['patch'] = {}
- const keysToRemove: string[] = []
- for (const provider of providers) {
- const currentProviderSettings = userSettings[provider]
- if (currentProviderSettings.migrated) {
- continue
- }
- const enabledKey = buildLegacyKey(userId, provider, 'enabled')
- const groupsKey = buildLegacyKey(userId, provider, 'groups')
- const disablePersonalLibraryKey = buildLegacyKey(
- userId,
- provider,
- 'disablePersonalLibrary'
- )
- const enabledValue = customLocalStorage.getItem(enabledKey)
- const groupsValue = customLocalStorage.getItem(groupsKey)
- const disablePersonalLibraryValue = customLocalStorage.getItem(
- disablePersonalLibraryKey
- )
- // Storage.getItem returns null if the key does not exist
- const hasEnabledValue = enabledValue !== null
- const hasGroupsValue = groupsValue !== null
- const hasDisablePersonalLibraryValue = disablePersonalLibraryValue !== null
- if (
- !hasEnabledValue &&
- !hasGroupsValue &&
- !hasDisablePersonalLibraryValue
- ) {
- continue
- }
- const nextProviderSettings: RefProviderSettings = {
- enabled: isBoolean(enabledValue)
- ? enabledValue
- : currentProviderSettings.enabled,
- groups: parseGroups(groupsValue) ?? currentProviderSettings.groups,
- disablePersonalLibrary: isBoolean(disablePersonalLibraryValue)
- ? disablePersonalLibraryValue
- : currentProviderSettings.disablePersonalLibrary,
- migrated: true,
- }
- patch[provider] = nextProviderSettings
- keysToRemove.push(enabledKey, groupsKey, disablePersonalLibraryKey)
- }
- return {
- patch,
- keysToRemove: [],
- }
- }
|