11import { useAtomCallback } from "jotai/utils" ;
22import type { FC , ReactNode } from "react" ;
33import { useCallback } from "react" ;
4- import { mapKeys , assign } from "lodash-es" ;
4+ import { mapKeys } from "lodash-es" ;
55import { createEvaluationContext } from "../evaluate" ;
6- import type { EnsembleUser } from "../state" ;
76import { appAtom , screenAtom , themeAtom , userAtom } from "../state" ;
87import type { EnsembleContext , EnsembleLocation } from "../shared/ensemble" ;
98import { DateFormatter } from "../date" ;
@@ -32,6 +31,7 @@ import type {
3231} from "../shared" ;
3332import { deviceAtom } from "./useDeviceObserver" ;
3433import { createStorageApi , screenStorageAtom } from "./useEnsembleStorage" ;
34+ import { createUserApi } from "./useEnsembleUser" ;
3535import { useCustomScope } from "./useCustomScope" ;
3636import { useLanguageScope } from "./useLanguageScope" ;
3737
@@ -65,12 +65,16 @@ export const useCommandCallback = <
6565 const storage = get ( screenStorageAtom ) ;
6666 const device = get ( deviceAtom ) ;
6767 const theme = get ( themeAtom ) ;
68- const user = get ( userAtom ) ;
6968
7069 const storageApi = createStorageApi ( storage , ( next ) =>
7170 set ( screenStorageAtom , next ) ,
7271 ) ;
7372
73+ const userApi = createUserApi (
74+ ( ) => get ( userAtom ) ,
75+ ( nextUser ) => set ( userAtom , nextUser ) ,
76+ ) ;
77+
7478 const customWidgets =
7579 applicationContext . application ?. customWidgets . reduce (
7680 ( acc , widget ) => ( { ...acc , [ widget . name ] : widget } ) ,
@@ -82,12 +86,7 @@ export const useCommandCallback = <
8286 screenContext,
8387 ensemble : {
8488 setTheme : ( name : string ) => set ( themeAtom , name ) ,
85- user : {
86- ...user ,
87- set : ( userUpdate : EnsembleUser ) =>
88- set ( userAtom , assign ( { } , user , userUpdate ) ) ,
89- setUser : ( userUpdate : EnsembleUser ) => set ( userAtom , userUpdate ) ,
90- } ,
89+ user : userApi ,
9190 storage : storageApi ,
9291 formatter : DateFormatter ( ) ,
9392 env : applicationContext . env ,
0 commit comments