feat: desktop app

Co-authored-by: Vivek R <123vivekr@gmail.com>
Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
This commit is contained in:
Andrew Bastin
2023-11-07 14:01:00 +05:30
parent 4ebf850cb6
commit 16044b5840
134 changed files with 11814 additions and 206 deletions

View File

@@ -0,0 +1,88 @@
import { SettingsPlatformDef } from "@hoppscotch/common/platform/settings"
import { settingsSyncer } from "./settings.sync"
import { authEvents$, def as platformAuth } from "@platform/auth"
import {
createUserSettings,
getUserSettings,
runUserSettingsUpdatedSubscription,
} from "./settings.api"
import * as E from "fp-ts/Either"
import { runGQLSubscription } from "@hoppscotch/common/helpers/backend/GQLClient"
import {
bulkApplySettings,
getDefaultSettings,
} from "@hoppscotch/common/newstore/settings"
import { runDispatchWithOutSyncing } from "@lib/sync"
function initSettingsSync() {
const currentUser$ = platformAuth.getCurrentUserStream()
settingsSyncer.startStoreSync()
settingsSyncer.setupSubscriptions(setupSubscriptions)
// load the settings
loadUserSettings()
currentUser$.subscribe(async (user) => {
if (user) {
// load the settings
loadUserSettings()
}
})
authEvents$.subscribe((event) => {
if (event.event == "login" || event.event == "token_refresh") {
settingsSyncer.startListeningToSubscriptions()
}
if (event.event == "logout") {
settingsSyncer.stopListeningToSubscriptions()
}
})
}
async function loadUserSettings() {
const res = await getUserSettings()
// create user settings if it doesn't exist
E.isLeft(res) &&
res.left.error == "user_settings/not_found" &&
(await createUserSettings(JSON.stringify(getDefaultSettings())))
if (E.isRight(res)) {
runDispatchWithOutSyncing(() => {
bulkApplySettings(JSON.parse(res.right.me.settings.properties))
})
}
}
function setupSubscriptions() {
let subs: ReturnType<typeof runGQLSubscription>[1][] = []
const userSettingsUpdatedSub = setupUserSettingsUpdatedSubscription()
subs = [userSettingsUpdatedSub]
return () => {
subs.forEach((sub) => sub.unsubscribe())
}
}
function setupUserSettingsUpdatedSubscription() {
const [userSettingsUpdated$, userSettingsUpdatedSub] =
runUserSettingsUpdatedSubscription()
userSettingsUpdated$.subscribe((res) => {
if (E.isRight(res)) {
runDispatchWithOutSyncing(() => {
bulkApplySettings(JSON.parse(res.right.userSettingsUpdated.properties))
})
}
})
return userSettingsUpdatedSub
}
export const def: SettingsPlatformDef = {
initSettingsSync,
}