balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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 }))