@causalfoundry/js-sdk
Version:
Causal Foundry WEB SDK (JS/TS)
50 lines (37 loc) • 1.64 kB
text/typescript
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
}
}