diff --git a/packages/bbui/src/ActionMenu/ActionMenu.svelte b/packages/bbui/src/ActionMenu/ActionMenu.svelte index f27854bc04..c7427e12d1 100644 --- a/packages/bbui/src/ActionMenu/ActionMenu.svelte +++ b/packages/bbui/src/ActionMenu/ActionMenu.svelte @@ -5,10 +5,10 @@ export let disabled = false export let align = "left" - export let portalTarget + export let portalTarget = undefined export let openOnHover = false - export let animate - export let offset + export let animate = true + export let offset = undefined const actionMenuContext = getContext("actionMenu") diff --git a/packages/bbui/src/Avatar/Avatar.svelte b/packages/bbui/src/Avatar/Avatar.svelte index e1d912ffa4..1ac65c9b9b 100644 --- a/packages/bbui/src/Avatar/Avatar.svelte +++ b/packages/bbui/src/Avatar/Avatar.svelte @@ -14,7 +14,7 @@ export let url = "" export let disabled = false export let initials = "JD" - export let color = null + export let color = "" const DefaultColor = "#3aab87" diff --git a/packages/builder/src/pages/builder/apps/index.svelte b/packages/builder/src/pages/builder/apps/index.svelte index eaf0f108d8..484ced9ae7 100644 --- a/packages/builder/src/pages/builder/apps/index.svelte +++ b/packages/builder/src/pages/builder/apps/index.svelte @@ -105,8 +105,8 @@
- - + +
userInfoModal.show()}> My profile @@ -239,6 +239,7 @@ grid-template-columns: auto auto; place-items: center; grid-gap: var(--spacing-xs); + transition: filter 130ms ease-out; } .avatar:hover { cursor: pointer; diff --git a/packages/builder/src/pages/builder/portal/_components/UserDropdown.svelte b/packages/builder/src/pages/builder/portal/_components/UserDropdown.svelte index 6e4f69688f..8c4e61f011 100644 --- a/packages/builder/src/pages/builder/portal/_components/UserDropdown.svelte +++ b/packages/builder/src/pages/builder/portal/_components/UserDropdown.svelte @@ -26,8 +26,8 @@
- - + +
profileModal.show()}> My profile @@ -75,7 +75,8 @@ flex-direction: row; justify-content: flex-end; align-items: center; - gap: var(--spacing-s); + gap: var(--spacing-xs); + transition: filter 130ms ease-out; } .user-dropdown:hover { cursor: pointer; diff --git a/packages/client/src/components/app/Layout.svelte b/packages/client/src/components/app/Layout.svelte index d040436c63..cfdfe86c65 100644 --- a/packages/client/src/components/app/Layout.svelte +++ b/packages/client/src/components/app/Layout.svelte @@ -1,10 +1,10 @@ + +{#if $authStore} + + +
+ + {#if !compact} +
+
+ {$authStore.firstName} + {$authStore.lastName} +
+
+ {/if} + +
+
+ + My profile + + + Update password + + Go to portal + + Log out + +
+{/if} + + diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index f055e7fc15..0bdd46afd9 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -1,6 +1,7 @@ import ClientApp from "./components/ClientApp.svelte" import UpdatingApp from "./components/UpdatingApp.svelte" import { + authStore, builderStore, appStore, blockStore, @@ -80,6 +81,7 @@ export interface SDK { ActionTypes: typeof ActionTypes fetchDatasourceSchema: any generateGoldenSample: any + authStore: typeof authStore builderStore: Readable<{ inBuilder: boolean }> & { diff --git a/packages/client/src/stores/auth.ts b/packages/client/src/stores/auth.ts index d9450780c6..f29ff3a124 100644 --- a/packages/client/src/stores/auth.ts +++ b/packages/client/src/stores/auth.ts @@ -1,10 +1,21 @@ import { API } from "@/api" import { writable } from "svelte/store" +import { + AppSelfResponse, + ContextUserMetadata, + GetGlobalSelfResponse, +} from "@budibase/types" + +type AuthState = ContextUserMetadata | GetGlobalSelfResponse | null const createAuthStore = () => { - const store = writable<{ - csrfToken?: string - } | null>(null) + const store = writable(null) + + const hasAppSelfUser = ( + user: AppSelfResponse | null + ): user is ContextUserMetadata => { + return user != null && "_id" in user + } // Fetches the user object if someone is logged in and has reloaded the page const fetchUser = async () => { @@ -21,7 +32,10 @@ const createAuthStore = () => { // Then try and get the user for this app to provide via context try { - appSelf = await API.fetchSelf() + const res = await API.fetchSelf() + if (hasAppSelfUser(res)) { + appSelf = res + } } catch (error) { // Swallow }