From 36643d321c303d2b71b20aa51535167a49a9269e Mon Sep 17 00:00:00 2001 From: Sven Verweij <37927107+SvenVw@users.noreply.github.com> Date: Mon, 5 Jan 2026 14:34:59 +0100 Subject: [PATCH 01/18] refactor: Use Better-Auth functions for organizations instead of fdm-core functions --- .changeset/twelve-chicken-poke.md | 5 + fdm-app/app/routes/organization.$slug.tsx | 260 +++++++++--------- fdm-app/app/routes/organization._index.tsx | 33 ++- ...ion.invitations.$invitation_id.respond.tsx | 72 ++--- .../organization.invitations._index.tsx | 62 ++--- fdm-app/app/routes/organization.new.tsx | 34 ++- fdm-app/app/routes/organization.tsx | 11 +- fdm-core/src/authentication.ts | 1 + 8 files changed, 239 insertions(+), 239 deletions(-) create mode 100644 .changeset/twelve-chicken-poke.md diff --git a/.changeset/twelve-chicken-poke.md b/.changeset/twelve-chicken-poke.md new file mode 100644 index 000000000..c9d0912da --- /dev/null +++ b/.changeset/twelve-chicken-poke.md @@ -0,0 +1,5 @@ +--- +"@svenvw/fdm-app": patch +--- + +Use Better-Auth functions for organizations instead of fdm-core functions diff --git a/fdm-app/app/routes/organization.$slug.tsx b/fdm-app/app/routes/organization.$slug.tsx index 968d3f000..13dad8c24 100644 --- a/fdm-app/app/routes/organization.$slug.tsx +++ b/fdm-app/app/routes/organization.$slug.tsx @@ -1,12 +1,3 @@ -import { - cancelPendingInvitation, - getOrganization, - getPendingInvitationsForOrganization, - getUsersInOrganization, - inviteUserToOrganization, - removeUserFromOrganization, - updateRoleOfUserAtOrganization, -} from "@svenvw/fdm-core" import { formatDistanceToNow } from "date-fns" import { nl } from "date-fns/locale" import type { ActionFunctionArgs, LoaderFunctionArgs } from "react-router" @@ -32,10 +23,9 @@ import { SelectValue, } from "~/components/ui/select" import { Separator } from "~/components/ui/separator" -import { getSession } from "~/lib/auth.server" +import { auth, getSession } from "~/lib/auth.server" import { renderInvitationEmail, sendEmail } from "~/lib/email.server" import { handleActionError, handleLoaderError } from "~/lib/error" -import { fdm } from "~/lib/fdm.server" import { extractFormValuesFromRequest } from "~/lib/form" export async function loader({ request, params }: LoaderFunctionArgs) { @@ -44,27 +34,59 @@ export async function loader({ request, params }: LoaderFunctionArgs) { } const session = await getSession(request) - const organization = await getOrganization( - fdm, - params.slug, - session.user.id, - ) + const organizations = await auth.api.listOrganizations({ + headers: request.headers, + }) + + const organization = organizations.find((org) => org.slug === params.slug) if (!organization) { throw handleLoaderError("not found: organization") } // Get members of organization - const members = await getUsersInOrganization(fdm, params.slug) + const membersListResponse = await auth.api.listMembers({ + headers: request.headers, + query: { + organizationId: organization.id, + }, + }) + const members = Array.isArray(membersListResponse) + ? membersListResponse + : (membersListResponse as any)?.members || [] // Get pending invitations of organization - const invitations = await getPendingInvitationsForOrganization( - fdm, - organization.id, + const invitationsListResponse = await auth.api.listInvitations({ + headers: request.headers, + query: { + organizationId: organization.id, + }, + }) + const invitations = ( + Array.isArray(invitationsListResponse) + ? invitationsListResponse + : (invitationsListResponse as any)?.invitations || [] + ).filter((inv: any) => inv.status === "pending") + + // Determine permissions + const currentUserMember = members.find( + (m: any) => m.userId === session.user.id, ) + const role = currentUserMember?.role || "viewer" + const permissions = { + canEdit: role === "owner" || role === "admin", + canDelete: role === "owner", + canInvite: role === "owner" || role === "admin", + canUpdateRoleUser: role === "owner" || role === "admin", + canRemoveUser: role === "owner" || role === "admin", + } return { - organization: organization, + organization: { + ...organization, + permissions, + description: organization.metadata?.description || "", + }, invitations: invitations, members: members, } @@ -101,12 +123,11 @@ export default function OrganizationIndex() { {/* People with access */}
- {member.firstname} {member.surname} + {member.user?.name}
{!permissions.canUpdateRoleUser ? (@@ -214,13 +227,7 @@ const MemberAction = ({ member, permissions, }: { - member: { - firstname: string - surname: string - username: string - role: string - image: string - } + member: any permissions: { canEdit: boolean canDelete: boolean @@ -231,15 +238,15 @@ const MemberAction = ({ }) => { return (