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>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { fb } from "~/helpers/fb"
|
|
||||||
import { setupLocalPersistence } from "~/newstore/localpersistence"
|
import { setupLocalPersistence } from "~/newstore/localpersistence"
|
||||||
import { performMigrations } from "~/helpers/migrations"
|
import { performMigrations } from "~/helpers/migrations"
|
||||||
|
import { initUserInfo } from "~/helpers/teams/BackendUserInfo"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
@@ -62,6 +62,8 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setupLocalPersistence()
|
setupLocalPersistence()
|
||||||
|
|
||||||
|
initUserInfo()
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
document.removeEventListener("keydown", this._keyListener)
|
document.removeEventListener("keydown", this._keyListener)
|
||||||
|
|||||||
Reference in New Issue
Block a user