//DeviceStateService.ts -- shared implementation
export interface DeviceStateService {
_tag: "DeviceStateService"
isOnline: ObservableSubscriptionRef<boolean>
isUpdateAvailable: ObservableSubscriptionRef<boolean>
platform: PlatformType
isOnReactNative(): boolean
appStateRef: ObservableSubscriptionRef<AppStateStatus>
}
export const DeviceStateService = Context.Tag<DeviceStateService>()
export interface DeviceStateConfig {
platform: PlatformType
}
export const make = ({ platform }: DeviceStateConfig) =>
Effect.gen(function* (_) {
const isOnline = yield* _(observableSubscriptionRef(`isOnline`, () => true))
const isUpdateAvailable = yield* _(observableSubscriptionRef(`isUpdateAvailable`, () => false))
const appStateRef = yield* _(observableSubscriptionRef<AppStateStatus>(`appStateRef`, () => "active"))
const isOnReactNative = () => platform !== "web" && platform !== "server"
return {
_tag: "DeviceStateService" as const,
isOnline,
isUpdateAvailable,
platform,
isOnReactNative,
appStateRef,
}
})
export const makeLayer = (config: Config.Config.Wrap<DeviceStateConfig>) =>
Layer.effect(DeviceStateService, Effect.flatMap(Effect.config(Config.unwrap(config)), make))
//DeviceStateService.ts -- shared implementation
export interface DeviceStateService {
_tag: "DeviceStateService"
isOnline: ObservableSubscriptionRef<boolean>
isUpdateAvailable: ObservableSubscriptionRef<boolean>
platform: PlatformType
isOnReactNative(): boolean
appStateRef: ObservableSubscriptionRef<AppStateStatus>
}
export const DeviceStateService = Context.Tag<DeviceStateService>()
export interface DeviceStateConfig {
platform: PlatformType
}
export const make = ({ platform }: DeviceStateConfig) =>
Effect.gen(function* (_) {
const isOnline = yield* _(observableSubscriptionRef(`isOnline`, () => true))
const isUpdateAvailable = yield* _(observableSubscriptionRef(`isUpdateAvailable`, () => false))
const appStateRef = yield* _(observableSubscriptionRef<AppStateStatus>(`appStateRef`, () => "active"))
const isOnReactNative = () => platform !== "web" && platform !== "server"
return {
_tag: "DeviceStateService" as const,
isOnline,
isUpdateAvailable,
platform,
isOnReactNative,
appStateRef,
}
})
export const makeLayer = (config: Config.Config.Wrap<DeviceStateConfig>) =>
Layer.effect(DeviceStateService, Effect.flatMap(Effect.config(Config.unwrap(config)), make))