user-menu.tsx 907 B

1234567891011121314151617181920212223242526272829303132
  1. import { action } from "@solidjs/router"
  2. import { getRequestEvent } from "solid-js/web"
  3. import { useAuthSession } from "~/context/auth"
  4. import { Dropdown } from "~/component/dropdown"
  5. import "./user-menu.css"
  6. const logout = action(async () => {
  7. "use server"
  8. const auth = await useAuthSession()
  9. const event = getRequestEvent()
  10. const current = auth.data.current
  11. if (current)
  12. await auth.update((val) => {
  13. delete val.account?.[current]
  14. const first = Object.keys(val.account ?? {})[0]
  15. val.current = first
  16. event!.locals.actor = undefined
  17. return val
  18. })
  19. }, "auth.logout")
  20. export function UserMenu(props: { email: string | null | undefined }) {
  21. return (
  22. <div data-component="user-menu">
  23. <Dropdown trigger={props.email ?? ""} align="right">
  24. <a href="/auth/logout" data-slot="item">
  25. Logout
  26. </a>
  27. </Dropdown>
  28. </div>
  29. )
  30. }