User.js (2015B)
1 import create from 'zustand' 2 import { persist } from 'zustand/middleware' 3 import { User } from '../api/User' 4 5 const storage = { 6 getItem: async () => await User.getData(), 7 setItem: async (_name, value) => await User.setData(value), 8 } 9 10 export const useUserStore = create(persist((set, get) => ({ 11 email: '', 12 apiKey: '', 13 imports: 0, 14 uuid: '', 15 registration: { 16 email: '', 17 }, 18 allowedImports: 0, 19 entryPoint: 'not-set', 20 enabled: true, 21 hasClickedThroughWelcomePage: false, 22 canInstallPlugins: false, 23 canActivatePlugins: false, 24 preferredOptions: { 25 taxonomies: {}, 26 type: '', 27 search: '', 28 }, 29 incrementImports: () => set({ imports: get().imports + 1 }), 30 canImport: () => get().apiKey 31 ? true 32 : (Number(get().imports) < Number(get().allowedImports)), 33 remainingImports: () => { 34 if (get().apiKey) { 35 return 'unlimited' 36 } 37 const remaining = Number(get().allowedImports) - Number(get().imports) 38 return remaining > 0 ? remaining : 0 39 }, 40 updatePreferredOption: (option, value) => { 41 // If the option doesn't exist, assume it's a taxonomy 42 if (!Object.prototype.hasOwnProperty.call(get().preferredOptions, option)) { 43 value = Object.assign( 44 {}, 45 get().preferredOptions?.taxonomies ?? {}, 46 { [option]: value }, 47 ) 48 option = 'taxonomies' 49 } 50 // Reset if the type changes from template/pattern/etc 51 const resetTaxonomies = (option == 'type' && value !== get().preferredOptions?.type) 52 set({ 53 preferredOptions: { 54 ...Object.assign( 55 {}, 56 get().preferredOptions, 57 { [option]: value }, 58 resetTaxonomies ? { taxonomies: {}} : {}, 59 ), 60 }, 61 }) 62 }, 63 }), { 64 name: 'extendify-user', 65 getStorage: () => storage, 66 }))