1import * as React from 'react';
2
3import {
4  EXUpdatesConfig,
5  updatesConfig as initialUpdatesConfig,
6} from '../native-modules/DevLauncherInternal';
7
8const defaultUpdatesConfig: EXUpdatesConfig = {
9  runtimeVersion: '',
10  sdkVersion: '',
11  appId: '',
12  usesEASUpdates: false,
13  projectUrl: '',
14};
15
16const Context = React.createContext<EXUpdatesConfig>(defaultUpdatesConfig);
17export const useUpdatesConfig = () => React.useContext(Context);
18
19type UpdatesConfigProviderProps = {
20  children: React.ReactNode;
21  initialUpdatesConfig?: EXUpdatesConfig;
22};
23
24type SetUpdatesConfigContext = (config: Partial<EXUpdatesConfig>) => void;
25const SetConfigContext = React.createContext<SetUpdatesConfigContext>(() => {});
26
27export const useSetUpdatesConfig = () => React.useContext(SetConfigContext);
28
29export function UpdatesConfigProvider({ children }: UpdatesConfigProviderProps) {
30  const [updatesConfig, setUpdatesConfig] = React.useState(initialUpdatesConfig);
31
32  function onSetUpdatesConfig(updates: Partial<EXUpdatesConfig>) {
33    setUpdatesConfig((previousConfig) => {
34      return {
35        ...previousConfig,
36        ...updates,
37      };
38    });
39  }
40
41  return (
42    <SetConfigContext.Provider value={onSetUpdatesConfig}>
43      <Context.Provider value={updatesConfig}>{children}</Context.Provider>
44    </SetConfigContext.Provider>
45  );
46}
47