Introducing BackendUserInfo
This commit is contained in:
86
helpers/teams/BackendUserInfo.ts
Normal file
86
helpers/teams/BackendUserInfo.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
import { fb } from "../fb"
|
||||
import { BehaviorSubject } from "rxjs"
|
||||
import { apolloClient } from "../apollo"
|
||||
import gql from "graphql-tag"
|
||||
|
||||
/*
|
||||
* This file deals with interfacing data provided by the
|
||||
* Hoppscotch Backend server
|
||||
*/
|
||||
|
||||
/**
|
||||
* Defines the information provided about a user
|
||||
*/
|
||||
interface UserInfo {
|
||||
/**
|
||||
* UID of the user
|
||||
*/
|
||||
uid: string
|
||||
/**
|
||||
* Displayable name of the user (or null if none available)
|
||||
*/
|
||||
displayName: string | null
|
||||
/**
|
||||
* Email of the user (or null if none available)
|
||||
*/
|
||||
email: string | null
|
||||
/**
|
||||
* URL to the profile photo of the user (or null if none available)
|
||||
*/
|
||||
photoURL: string | null
|
||||
/**
|
||||
* Whether the user has access to Early Access features
|
||||
*/
|
||||
eaInvited: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* An observable subject onto the currently logged in user info (is null if not logged in)
|
||||
*/
|
||||
export const currentUserInfo$ = new BehaviorSubject<UserInfo | null>(null)
|
||||
|
||||
/**
|
||||
* Initializes the currenUserInfo$ view and sets up its update mechanism
|
||||
*/
|
||||
export function initUserInfo() {
|
||||
updateUserInfo()
|
||||
|
||||
fb.idToken$.subscribe(token => {
|
||||
if (token) {
|
||||
updateUserInfo()
|
||||
} else {
|
||||
currentUserInfo$.next(null)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the actual user info fetching
|
||||
*/
|
||||
async function updateUserInfo() {
|
||||
try {
|
||||
const { data } = await apolloClient.query({
|
||||
query: gql`
|
||||
query GetUserInfo {
|
||||
me {
|
||||
uid,
|
||||
displayName,
|
||||
email,
|
||||
photoURL,
|
||||
eaInvited
|
||||
}
|
||||
}
|
||||
`
|
||||
})
|
||||
|
||||
currentUserInfo$.next({
|
||||
uid: data.me.uid,
|
||||
displayName: data.me.displayName,
|
||||
email: data.me.email,
|
||||
photoURL : data.me.photoURL,
|
||||
eaInvited: data.me.eaInvited
|
||||
})
|
||||
} catch (e) {
|
||||
currentUserInfo$.next(null)
|
||||
}
|
||||
}
|
||||
@@ -14,9 +14,9 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { fb } from "~/helpers/fb"
|
||||
import { setupLocalPersistence } from "~/newstore/localpersistence"
|
||||
import { performMigrations } from "~/helpers/migrations"
|
||||
import { initUserInfo } from "~/helpers/teams/BackendUserInfo"
|
||||
|
||||
export default {
|
||||
beforeMount() {
|
||||
@@ -62,6 +62,8 @@ export default {
|
||||
}
|
||||
|
||||
setupLocalPersistence()
|
||||
|
||||
initUserInfo()
|
||||
},
|
||||
beforeDestroy() {
|
||||
document.removeEventListener("keydown", this._keyListener)
|
||||
|
||||
Reference in New Issue
Block a user