UNPKG

@causalfoundry/js-sdk

Version:

Causal Foundry WEB SDK (JS/TS)

50 lines (37 loc) 1.64 kB
import {NetworkProxy} from "../../../drivers/network/typings" import {IStorage} from "../../../drivers/storage/typings" import {INudgesRepository, Nudge} from "./typings" import {NudgeScreenType} from "../../commonTypes"; import {getLocalStorageUserId} from "../../../drivers/CfSystem"; const SHOWN_NUDGES = 'cfLog-shown-nudges' export default class NudgesRepository implements INudgesRepository{ private apiURL private networkDriver private storageDriver public constructor(url: string, bsNetwork: NetworkProxy, storageDriver: IStorage) { this.apiURL = url this.networkDriver = bsNetwork this.storageDriver = storageDriver } public markNudgeAsShown = (nudgeId: string): void => { const shownNudges = JSON.parse(this.storageDriver.get(SHOWN_NUDGES)) || [] shownNudges.push(nudgeId) this.storageDriver.save(SHOWN_NUDGES, JSON.stringify(shownNudges)) } public haveBeenAlreadyShown = (nudgeId: string): boolean => { const shownNudges = JSON.parse(this.storageDriver.get(SHOWN_NUDGES)) || [] return shownNudges.includes(nudgeId) } public getNudges = async (userId: string, nudgeScreenType : NudgeScreenType): Promise<Nudge[]> => { const userIdValue = userId || getLocalStorageUserId() if(!userIdValue){ return [] } let url = `${this.apiURL}/${userIdValue}` if(nudgeScreenType !== NudgeScreenType.None){ url += `?render_page=${nudgeScreenType}` } const listOfNudges = (await this.networkDriver.get(`${url}`)) || [] return listOfNudges } }