Move some pages under memberships namespace

Signed-off-by: Émile Ré <nemile.re@gmail.com>
This commit is contained in:
Émile Ré
2025-12-21 12:11:04 +01:00
committed by Bryan Frimin
parent 86bdb14289
commit e092d4cd6c
24 changed files with 147 additions and 153 deletions

View File

@@ -1,27 +1,25 @@
import { usePreloadedQuery, type PreloadedQuery } from "react-relay"; import { usePreloadedQuery, type PreloadedQuery } from "react-relay";
import { organizationLayoutQuery } from "./OrganizationLayoutQuery"; import { membershipLayoutQuery } from "./MembershipLayoutQuery";
import { Link, Outlet } from "react-router"; import { Link, Outlet } from "react-router";
import { Badge, Button, IconPeopleAdd, Layout, Skeleton } from "@probo/ui"; import { Badge, Button, IconPeopleAdd, Layout, Skeleton } from "@probo/ui";
import { Sidebar } from "./_components/Sidebar"; import { Sidebar } from "./_components/Sidebar";
import { OrganizationDropdown } from "./_components/OrganizationDropdown"; import { MembershipsDropdown } from "./MembershipsDropdown";
import type { OrganizationLayoutQuery } from "./__generated__/OrganizationLayoutQuery.graphql"; import type { MembershipLayoutQuery } from "./__generated__/MembershipLayoutQuery.graphql";
import { PermissionsProvider } from "/providers/PermissionsProvider"; import { PermissionsProvider } from "/providers/PermissionsProvider";
import { SessionDropdown } from "./_components/SessionDropdown"; import { SessionDropdown } from "./_components/SessionDropdown";
import { Suspense } from "react"; import { Suspense } from "react";
import { useTranslate } from "@probo/i18n"; import { useTranslate } from "@probo/i18n";
import { CoreRelayProvider } from "/providers/CoreRelayProvider"; import { CoreRelayProvider } from "/providers/CoreRelayProvider";
interface OrganizationLayoutProps { export default function MembershipLayout(props: {
queryRef: PreloadedQuery<OrganizationLayoutQuery>; queryRef: PreloadedQuery<MembershipLayoutQuery>;
} }) {
export default function OrganizationLayout(props: OrganizationLayoutProps) {
const { queryRef } = props; const { queryRef } = props;
const { __ } = useTranslate(); const { __ } = useTranslate();
const { organization, viewer } = usePreloadedQuery<OrganizationLayoutQuery>( const { organization, viewer } = usePreloadedQuery<MembershipLayoutQuery>(
organizationLayoutQuery, membershipLayoutQuery,
queryRef, queryRef,
); );
@@ -31,7 +29,7 @@ export default function OrganizationLayout(props: OrganizationLayoutProps) {
header={ header={
<> <>
<div className="mr-auto"> <div className="mr-auto">
<OrganizationDropdown <MembershipsDropdown
organizationFKey={organization} organizationFKey={organization}
viewerFKey={viewer} viewerFKey={viewer}
/> />

View File

@@ -4,19 +4,19 @@ import { graphql } from "relay-runtime";
import { Suspense, useEffect } from "react"; import { Suspense, useEffect } from "react";
import { Skeleton } from "@probo/ui"; import { Skeleton } from "@probo/ui";
import { useOrganizationId } from "/hooks/useOrganizationId"; import { useOrganizationId } from "/hooks/useOrganizationId";
import type { OrganizationLayoutQuery } from "./__generated__/OrganizationLayoutQuery.graphql"; import type { MembershipLayoutQuery } from "./__generated__/MembershipLayoutQuery.graphql";
const Layout = lazy(() => import("./OrganizationLayout")); const Layout = lazy(() => import("./MembershipLayout"));
export const organizationLayoutQuery = graphql` export const membershipLayoutQuery = graphql`
query OrganizationLayoutQuery($organizationId: ID!) { query MembershipLayoutQuery($organizationId: ID!) {
organization: node(id: $organizationId) @required(action: THROW) { organization: node(id: $organizationId) @required(action: THROW) {
... on Organization { ... on Organization {
...OrganizationDropdown_organizationFragment ...MembershipsDropdown_organizationFragment
} }
} }
viewer @required(action: THROW) { viewer @required(action: THROW) {
...OrganizationDropdown_viewerFragment ...MembershipsDropdown_viewerFragment
pendingInvitations @required(action: THROW) { pendingInvitations @required(action: THROW) {
totalCount @required(action: THROW) totalCount @required(action: THROW)
} }
@@ -25,10 +25,10 @@ export const organizationLayoutQuery = graphql`
} }
`; `;
export function OrganizationLayoutQuery() { export function MembershipLayoutQuery() {
const organizationId = useOrganizationId(); const organizationId = useOrganizationId();
const [queryRef, loadQuery] = useQueryLoader<OrganizationLayoutQuery>( const [queryRef, loadQuery] = useQueryLoader<MembershipLayoutQuery>(
organizationLayoutQuery, membershipLayoutQuery,
); );
useEffect(() => { useEffect(() => {

View File

@@ -15,30 +15,30 @@ import {
import { Suspense, useCallback, useState } from "react"; import { Suspense, useCallback, useState } from "react";
import { useTranslate } from "@probo/i18n"; import { useTranslate } from "@probo/i18n";
import { import {
OrganizationDropdownMenu, MembershipsDropdownMenu,
organizationDropdownMenuQuery, membershipsDropdownMenuQuery,
} from "./OrganizationDropdownMenu"; } from "./MembershipsDropdownMenu";
import type { OrganizationDropdownMenuQuery } from "./__generated__/OrganizationDropdownMenuQuery.graphql"; import type { MembershipsDropdownMenuQuery } from "./__generated__/MembershipsDropdownMenuQuery.graphql";
import { Link } from "react-router"; import { Link } from "react-router";
import type { OrganizationDropdown_organizationFragment$key } from "./__generated__/OrganizationDropdown_organizationFragment.graphql"; import type { MembershipsDropdown_organizationFragment$key } from "./__generated__/MembershipsDropdown_organizationFragment.graphql";
import type { OrganizationDropdown_viewerFragment$key } from "./__generated__/OrganizationDropdown_viewerFragment.graphql"; import type { MembershipsDropdown_viewerFragment$key } from "./__generated__/MembershipsDropdown_viewerFragment.graphql";
const organizationFragment = graphql` const organizationFragment = graphql`
fragment OrganizationDropdown_organizationFragment on Organization { fragment MembershipsDropdown_organizationFragment on Organization {
name name
} }
`; `;
const viewerFragment = graphql` const viewerFragment = graphql`
fragment OrganizationDropdown_viewerFragment on Identity { fragment MembershipsDropdown_viewerFragment on Identity {
pendingInvitations @required(action: THROW) { pendingInvitations @required(action: THROW) {
totalCount @required(action: THROW) totalCount @required(action: THROW)
} }
} }
`; `;
export function OrganizationDropdown(props: { export function MembershipsDropdown(props: {
organizationFKey: OrganizationDropdown_organizationFragment$key; organizationFKey: MembershipsDropdown_organizationFragment$key;
viewerFKey: OrganizationDropdown_viewerFragment$key; viewerFKey: MembershipsDropdown_viewerFragment$key;
}) { }) {
const { organizationFKey, viewerFKey } = props; const { organizationFKey, viewerFKey } = props;
@@ -46,18 +46,18 @@ export function OrganizationDropdown(props: {
const [search, setSearch] = useState(""); const [search, setSearch] = useState("");
const currentOrganization = const currentOrganization =
useFragment<OrganizationDropdown_organizationFragment$key>( useFragment<MembershipsDropdown_organizationFragment$key>(
organizationFragment, organizationFragment,
organizationFKey, organizationFKey,
); );
const { const {
pendingInvitations: { totalCount: pendingInvitationCount }, pendingInvitations: { totalCount: pendingInvitationCount },
} = useFragment<OrganizationDropdown_viewerFragment$key>( } = useFragment<MembershipsDropdown_viewerFragment$key>(
viewerFragment, viewerFragment,
viewerFKey, viewerFKey,
); );
const [queryRef, loadQuery] = useQueryLoader<OrganizationDropdownMenuQuery>( const [queryRef, loadQuery] = useQueryLoader<MembershipsDropdownMenuQuery>(
organizationDropdownMenuQuery, membershipsDropdownMenuQuery,
); );
const handleOpenMenu = useCallback( const handleOpenMenu = useCallback(
@@ -102,7 +102,7 @@ export function OrganizationDropdown(props: {
</div> </div>
} }
> >
<OrganizationDropdownMenu search={search} queryRef={queryRef} /> <MembershipsDropdownMenu search={search} queryRef={queryRef} />
</Suspense> </Suspense>
)} )}
</div> </div>

View File

@@ -1,10 +1,10 @@
import { graphql, usePreloadedQuery, type PreloadedQuery } from "react-relay"; import { graphql, usePreloadedQuery, type PreloadedQuery } from "react-relay";
import type { OrganizationDropdownMenuQuery } from "./__generated__/OrganizationDropdownMenuQuery.graphql"; import type { MembershipsDropdownMenuQuery } from "./__generated__/MembershipsDropdownMenuQuery.graphql";
import { useMemo } from "react"; import { useMemo } from "react";
import { OrganizationDropdownMenuItem } from "./OrganizationDropdownMenuItem"; import { MembershipsDropdownMenuItem } from "./MembershipsDropdownMenuItem";
export const organizationDropdownMenuQuery = graphql` export const membershipsDropdownMenuQuery = graphql`
query OrganizationDropdownMenuQuery { query MembershipsDropdownMenuQuery {
viewer @required(action: THROW) { viewer @required(action: THROW) {
memberships(first: 1000, orderBy: { direction: DESC, field: CREATED_AT }) memberships(first: 1000, orderBy: { direction: DESC, field: CREATED_AT })
@required(action: THROW) { @required(action: THROW) {
@@ -14,7 +14,7 @@ export const organizationDropdownMenuQuery = graphql`
organization @required(action: THROW) { organization @required(action: THROW) {
name name
} }
...OrganizationDropdownMenuItemFragment ...MembershipsDropdownMenuItemFragment
} }
} }
} }
@@ -22,20 +22,20 @@ export const organizationDropdownMenuQuery = graphql`
} }
`; `;
interface OrganizationDropdownMenuProps { interface MembershipsDropdownMenuProps {
queryRef: PreloadedQuery<OrganizationDropdownMenuQuery>; queryRef: PreloadedQuery<MembershipsDropdownMenuQuery>;
search: string; search: string;
} }
export function OrganizationDropdownMenu(props: OrganizationDropdownMenuProps) { export function MembershipsDropdownMenu(props: MembershipsDropdownMenuProps) {
const { queryRef, search } = props; const { queryRef, search } = props;
const { const {
viewer: { viewer: {
memberships: { edges: initialMemberships }, memberships: { edges: initialMemberships },
}, },
} = usePreloadedQuery<OrganizationDropdownMenuQuery>( } = usePreloadedQuery<MembershipsDropdownMenuQuery>(
organizationDropdownMenuQuery, membershipsDropdownMenuQuery,
queryRef, queryRef,
); );
@@ -52,7 +52,7 @@ export function OrganizationDropdownMenu(props: OrganizationDropdownMenuProps) {
return ( return (
<> <>
{memberships.map(({ node }) => ( {memberships.map(({ node }) => (
<OrganizationDropdownMenuItem fKey={node} key={node.id} /> <MembershipsDropdownMenuItem fKey={node} key={node.id} />
))} ))}
</> </>
); );

View File

@@ -6,15 +6,15 @@ import {
IconLock, IconLock,
} from "@probo/ui"; } from "@probo/ui";
import { graphql } from "relay-runtime"; import { graphql } from "relay-runtime";
import type { OrganizationDropdownMenuItemFragment$key } from "./__generated__/OrganizationDropdownMenuItemFragment.graphql"; import type { MembershipsDropdownMenuItemFragment$key } from "./__generated__/MembershipsDropdownMenuItemFragment.graphql";
import { useFragment, useMutation } from "react-relay"; import { useFragment, useMutation } from "react-relay";
import { parseDate } from "@probo/helpers"; import { parseDate } from "@probo/helpers";
import { useCallback } from "react"; import { useCallback } from "react";
import { useNavigate } from "react-router"; import { useNavigate } from "react-router";
import type { OrganizationDropdownMenuItem_assumeMutation } from "./__generated__/OrganizationDropdownMenuItem_assumeMutation.graphql"; import type { MembershipsDropdownMenuItem_assumeMutation } from "./__generated__/MembershipsDropdownMenuItem_assumeMutation.graphql";
const fragment = graphql` const fragment = graphql`
fragment OrganizationDropdownMenuItemFragment on Membership { fragment MembershipsDropdownMenuItemFragment on Membership {
id id
lastSession { lastSession {
id id
@@ -29,7 +29,7 @@ const fragment = graphql`
`; `;
const assumeOrganizationSessionMutation = graphql` const assumeOrganizationSessionMutation = graphql`
mutation OrganizationDropdownMenuItem_assumeMutation( mutation MembershipsDropdownMenuItem_assumeMutation(
$input: AssumeOrganizationSessionInput! $input: AssumeOrganizationSessionInput!
) { ) {
assumeOrganizationSession(input: $input) { assumeOrganizationSession(input: $input) {
@@ -47,22 +47,22 @@ const assumeOrganizationSessionMutation = graphql`
} }
`; `;
export function OrganizationDropdownMenuItem(props: { export function MembershipsDropdownMenuItem(props: {
fKey: OrganizationDropdownMenuItemFragment$key; fKey: MembershipsDropdownMenuItemFragment$key;
}) { }) {
const { fKey } = props; const { fKey } = props;
const navigate = useNavigate(); const navigate = useNavigate();
const { id, lastSession, organization } = const { id, lastSession, organization } =
useFragment<OrganizationDropdownMenuItemFragment$key>(fragment, fKey); useFragment<MembershipsDropdownMenuItemFragment$key>(fragment, fKey);
const isAuthenticated = !!lastSession; const isAuthenticated = !!lastSession;
const isExpired = const isExpired =
lastSession && parseDate(lastSession.expiresAt) < new Date(); lastSession && parseDate(lastSession.expiresAt) < new Date();
const [assumeOrganizationSession] = const [assumeOrganizationSession] =
useMutation<OrganizationDropdownMenuItem_assumeMutation>( useMutation<MembershipsDropdownMenuItem_assumeMutation>(
assumeOrganizationSessionMutation, assumeOrganizationSessionMutation,
); );

View File

@@ -9,15 +9,15 @@ import {
} from "@probo/ui"; } from "@probo/ui";
import { useMemo, useState } from "react"; import { useMemo, useState } from "react";
import { InvitationCard } from "./_components/InvitationCard"; import { InvitationCard } from "./_components/InvitationCard";
import { organizationsPageQuery } from "./OrganizationsPageQuery"; import { membershipsPageQuery } from "./MembershipsPageQuery";
import { MembershipCard } from "./_components/MembershipCard"; import { MembershipCard } from "./_components/MembershipCard";
import type { OrganizationsPageQuery } from "./__generated__/OrganizationsPageQuery.graphql"; import type { MembershipsPageQuery } from "./__generated__/MembershipsPageQuery.graphql";
interface PageProps { interface PageProps {
queryRef: PreloadedQuery<OrganizationsPageQuery>; queryRef: PreloadedQuery<MembershipsPageQuery>;
} }
export default function Page(props: PageProps) { export default function MembershipsPage(props: PageProps) {
const { __ } = useTranslate(); const { __ } = useTranslate();
const [search, setSearch] = useState(""); const [search, setSearch] = useState("");
@@ -27,10 +27,7 @@ export default function Page(props: PageProps) {
memberships: { edges: initialMemberships }, memberships: { edges: initialMemberships },
pendingInvitations: { edges: invitations }, pendingInvitations: { edges: invitations },
}, },
} = usePreloadedQuery<OrganizationsPageQuery>( } = usePreloadedQuery<MembershipsPageQuery>(membershipsPageQuery, queryRef);
organizationsPageQuery,
queryRef,
);
const memberships = useMemo(() => { const memberships = useMemo(() => {
if (!search.trim()) { if (!search.trim()) {

View File

@@ -3,12 +3,12 @@ import { useQueryLoader } from "react-relay";
import { graphql } from "relay-runtime"; import { graphql } from "relay-runtime";
import { Suspense, useEffect } from "react"; import { Suspense, useEffect } from "react";
import { CenteredLayoutSkeleton } from "@probo/ui"; import { CenteredLayoutSkeleton } from "@probo/ui";
import type { OrganizationsPageQuery } from "./__generated__/OrganizationsPageQuery.graphql"; import type { MembershipsPageQuery } from "./__generated__/MembershipsPageQuery.graphql";
const Page = lazy(() => import("./OrganizationsPage")); const Page = lazy(() => import("./MembershipsPage"));
export const organizationsPageQuery = graphql` export const membershipsPageQuery = graphql`
query OrganizationsPageQuery { query MembershipsPageQuery {
viewer @required(action: THROW) { viewer @required(action: THROW) {
memberships(first: 1000, orderBy: { direction: DESC, field: CREATED_AT }) memberships(first: 1000, orderBy: { direction: DESC, field: CREATED_AT })
@required(action: THROW) { @required(action: THROW) {
@@ -37,10 +37,9 @@ export const organizationsPageQuery = graphql`
} }
`; `;
export function OrganizationsPageQuery() { export function MembershipsPageQuery() {
const [queryRef, loadQuery] = useQueryLoader<OrganizationsPageQuery>( const [queryRef, loadQuery] =
organizationsPageQuery, useQueryLoader<MembershipsPageQuery>(membershipsPageQuery);
);
useEffect(() => { useEffect(() => {
loadQuery({}); loadQuery({});

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<09fbc762db2d00eb944a0ef9afe3756d>> * @generated SignedSource<<4b0d5d271f19e23939fc2b392aa79fbc>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -10,23 +10,23 @@
import { ConcreteRequest } from 'relay-runtime'; import { ConcreteRequest } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime"; import { FragmentRefs } from "relay-runtime";
export type OrganizationLayoutQuery$variables = { export type MembershipLayoutQuery$variables = {
organizationId: string; organizationId: string;
}; };
export type OrganizationLayoutQuery$data = { export type MembershipLayoutQuery$data = {
readonly organization: { readonly organization: {
readonly " $fragmentSpreads": FragmentRefs<"OrganizationDropdown_organizationFragment">; readonly " $fragmentSpreads": FragmentRefs<"MembershipsDropdown_organizationFragment">;
}; };
readonly viewer: { readonly viewer: {
readonly pendingInvitations: { readonly pendingInvitations: {
readonly totalCount: number; readonly totalCount: number;
}; };
readonly " $fragmentSpreads": FragmentRefs<"OrganizationDropdown_viewerFragment" | "SessionDropdownFragment">; readonly " $fragmentSpreads": FragmentRefs<"MembershipsDropdown_viewerFragment" | "SessionDropdownFragment">;
}; };
}; };
export type OrganizationLayoutQuery = { export type MembershipLayoutQuery = {
response: OrganizationLayoutQuery$data; response: MembershipLayoutQuery$data;
variables: OrganizationLayoutQuery$variables; variables: MembershipLayoutQuery$variables;
}; };
const node: ConcreteRequest = (function(){ const node: ConcreteRequest = (function(){
@@ -70,7 +70,7 @@ return {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Fragment", "kind": "Fragment",
"metadata": null, "metadata": null,
"name": "OrganizationLayoutQuery", "name": "MembershipLayoutQuery",
"selections": [ "selections": [
{ {
"kind": "RequiredField", "kind": "RequiredField",
@@ -88,7 +88,7 @@ return {
{ {
"args": null, "args": null,
"kind": "FragmentSpread", "kind": "FragmentSpread",
"name": "OrganizationDropdown_organizationFragment" "name": "MembershipsDropdown_organizationFragment"
} }
], ],
"type": "Organization", "type": "Organization",
@@ -112,7 +112,7 @@ return {
{ {
"args": null, "args": null,
"kind": "FragmentSpread", "kind": "FragmentSpread",
"name": "OrganizationDropdown_viewerFragment" "name": "MembershipsDropdown_viewerFragment"
}, },
{ {
"kind": "RequiredField", "kind": "RequiredField",
@@ -152,7 +152,7 @@ return {
"operation": { "operation": {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Operation", "kind": "Operation",
"name": "OrganizationLayoutQuery", "name": "MembershipLayoutQuery",
"selections": [ "selections": [
{ {
"alias": "organization", "alias": "organization",
@@ -247,16 +247,16 @@ return {
] ]
}, },
"params": { "params": {
"cacheID": "ca7f41668eb74024237351d0e076819e", "cacheID": "a849dd96b5088ddc9a3bbab50273c411",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "OrganizationLayoutQuery", "name": "MembershipLayoutQuery",
"operationKind": "query", "operationKind": "query",
"text": "query OrganizationLayoutQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n ... on Organization {\n ...OrganizationDropdown_organizationFragment\n }\n id\n }\n viewer {\n ...OrganizationDropdown_viewerFragment\n pendingInvitations {\n totalCount\n }\n ...SessionDropdownFragment_4xMPKw\n id\n }\n}\n\nfragment OrganizationDropdown_organizationFragment on Organization {\n name\n}\n\nfragment OrganizationDropdown_viewerFragment on Identity {\n pendingInvitations {\n totalCount\n }\n}\n\nfragment SessionDropdownFragment_4xMPKw on Identity {\n email\n profileFor(organizationId: $organizationId) {\n firstName\n lastName\n id\n }\n}\n" "text": "query MembershipLayoutQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n ... on Organization {\n ...MembershipsDropdown_organizationFragment\n }\n id\n }\n viewer {\n ...MembershipsDropdown_viewerFragment\n pendingInvitations {\n totalCount\n }\n ...SessionDropdownFragment_4xMPKw\n id\n }\n}\n\nfragment MembershipsDropdown_organizationFragment on Organization {\n name\n}\n\nfragment MembershipsDropdown_viewerFragment on Identity {\n pendingInvitations {\n totalCount\n }\n}\n\nfragment SessionDropdownFragment_4xMPKw on Identity {\n email\n profileFor(organizationId: $organizationId) {\n firstName\n lastName\n id\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "81b8eb0af21d649268e30c80d16226de"; (node as any).hash = "e28f1f5e510386718b39cd547d4ce59f";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<e917cb1af13350772d46c02bd6b37da5>> * @generated SignedSource<<353905ded51be0954c17254a66a133d5>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -10,7 +10,7 @@
import { ReaderFragment } from 'relay-runtime'; import { ReaderFragment } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime"; import { FragmentRefs } from "relay-runtime";
export type OrganizationDropdownMenuItemFragment$data = { export type MembershipsDropdownMenuItemFragment$data = {
readonly id: string; readonly id: string;
readonly lastSession: { readonly lastSession: {
readonly expiresAt: any; readonly expiresAt: any;
@@ -21,11 +21,11 @@ export type OrganizationDropdownMenuItemFragment$data = {
readonly logoUrl: string | null | undefined; readonly logoUrl: string | null | undefined;
readonly name: string; readonly name: string;
}; };
readonly " $fragmentType": "OrganizationDropdownMenuItemFragment"; readonly " $fragmentType": "MembershipsDropdownMenuItemFragment";
}; };
export type OrganizationDropdownMenuItemFragment$key = { export type MembershipsDropdownMenuItemFragment$key = {
readonly " $data"?: OrganizationDropdownMenuItemFragment$data; readonly " $data"?: MembershipsDropdownMenuItemFragment$data;
readonly " $fragmentSpreads": FragmentRefs<"OrganizationDropdownMenuItemFragment">; readonly " $fragmentSpreads": FragmentRefs<"MembershipsDropdownMenuItemFragment">;
}; };
const node: ReaderFragment = (function(){ const node: ReaderFragment = (function(){
@@ -40,7 +40,7 @@ return {
"argumentDefinitions": [], "argumentDefinitions": [],
"kind": "Fragment", "kind": "Fragment",
"metadata": null, "metadata": null,
"name": "OrganizationDropdownMenuItemFragment", "name": "MembershipsDropdownMenuItemFragment",
"selections": [ "selections": [
(v0/*: any*/), (v0/*: any*/),
{ {
@@ -98,6 +98,6 @@ return {
}; };
})(); })();
(node as any).hash = "22fea7c8463774a5fa9ea5f56d1e876c"; (node as any).hash = "915a6fb0071b4890010401a56f3affa6";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<469707d0eca0a0378fa589809db964bc>> * @generated SignedSource<<a3cc5c262b8a01f267eb2b549ab95a27>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -13,10 +13,10 @@ export type ReauthenticationReason = "POLICY_REQUIREMENT" | "SENSITIVE_ACTION" |
export type AssumeOrganizationSessionInput = { export type AssumeOrganizationSessionInput = {
organizationId: string; organizationId: string;
}; };
export type OrganizationDropdownMenuItem_assumeMutation$variables = { export type MembershipsDropdownMenuItem_assumeMutation$variables = {
input: AssumeOrganizationSessionInput; input: AssumeOrganizationSessionInput;
}; };
export type OrganizationDropdownMenuItem_assumeMutation$data = { export type MembershipsDropdownMenuItem_assumeMutation$data = {
readonly assumeOrganizationSession: { readonly assumeOrganizationSession: {
readonly result: { readonly result: {
readonly __typename: "PasswordRequired"; readonly __typename: "PasswordRequired";
@@ -32,9 +32,9 @@ export type OrganizationDropdownMenuItem_assumeMutation$data = {
}; };
} | null | undefined; } | null | undefined;
}; };
export type OrganizationDropdownMenuItem_assumeMutation = { export type MembershipsDropdownMenuItem_assumeMutation = {
response: OrganizationDropdownMenuItem_assumeMutation$data; response: MembershipsDropdownMenuItem_assumeMutation$data;
variables: OrganizationDropdownMenuItem_assumeMutation$variables; variables: MembershipsDropdownMenuItem_assumeMutation$variables;
}; };
const node: ConcreteRequest = (function(){ const node: ConcreteRequest = (function(){
@@ -117,7 +117,7 @@ return {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Fragment", "kind": "Fragment",
"metadata": null, "metadata": null,
"name": "OrganizationDropdownMenuItem_assumeMutation", "name": "MembershipsDropdownMenuItem_assumeMutation",
"selections": (v2/*: any*/), "selections": (v2/*: any*/),
"type": "Mutation", "type": "Mutation",
"abstractKey": null "abstractKey": null
@@ -126,20 +126,20 @@ return {
"operation": { "operation": {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Operation", "kind": "Operation",
"name": "OrganizationDropdownMenuItem_assumeMutation", "name": "MembershipsDropdownMenuItem_assumeMutation",
"selections": (v2/*: any*/) "selections": (v2/*: any*/)
}, },
"params": { "params": {
"cacheID": "024d06c3bba88bb18eb1aa7e2888edd0", "cacheID": "21ebf9c598bd39f2abcb0ace0d9c0c4b",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "OrganizationDropdownMenuItem_assumeMutation", "name": "MembershipsDropdownMenuItem_assumeMutation",
"operationKind": "mutation", "operationKind": "mutation",
"text": "mutation OrganizationDropdownMenuItem_assumeMutation(\n $input: AssumeOrganizationSessionInput!\n) {\n assumeOrganizationSession(input: $input) {\n result {\n __typename\n ... on PasswordRequired {\n reason\n }\n ... on SAMLAuthenticationRequired {\n reason\n redirectUrl\n }\n }\n }\n}\n" "text": "mutation MembershipsDropdownMenuItem_assumeMutation(\n $input: AssumeOrganizationSessionInput!\n) {\n assumeOrganizationSession(input: $input) {\n result {\n __typename\n ... on PasswordRequired {\n reason\n }\n ... on SAMLAuthenticationRequired {\n reason\n redirectUrl\n }\n }\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "bbc8443e4a756b37f8b46ee98972bdcb"; (node as any).hash = "416f824d526d3f92797fec0eb9c2e590";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<034b9a96de4b1efda9529e8165779342>> * @generated SignedSource<<b51fba8f2d50c85b2eeb51c658d82e17>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -10,8 +10,8 @@
import { ConcreteRequest } from 'relay-runtime'; import { ConcreteRequest } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime"; import { FragmentRefs } from "relay-runtime";
export type OrganizationDropdownMenuQuery$variables = Record<PropertyKey, never>; export type MembershipsDropdownMenuQuery$variables = Record<PropertyKey, never>;
export type OrganizationDropdownMenuQuery$data = { export type MembershipsDropdownMenuQuery$data = {
readonly viewer: { readonly viewer: {
readonly memberships: { readonly memberships: {
readonly edges: ReadonlyArray<{ readonly edges: ReadonlyArray<{
@@ -20,15 +20,15 @@ export type OrganizationDropdownMenuQuery$data = {
readonly organization: { readonly organization: {
readonly name: string; readonly name: string;
}; };
readonly " $fragmentSpreads": FragmentRefs<"OrganizationDropdownMenuItemFragment">; readonly " $fragmentSpreads": FragmentRefs<"MembershipsDropdownMenuItemFragment">;
}; };
}>; }>;
}; };
}; };
}; };
export type OrganizationDropdownMenuQuery = { export type MembershipsDropdownMenuQuery = {
response: OrganizationDropdownMenuQuery$data; response: MembershipsDropdownMenuQuery$data;
variables: OrganizationDropdownMenuQuery$variables; variables: MembershipsDropdownMenuQuery$variables;
}; };
const node: ConcreteRequest = (function(){ const node: ConcreteRequest = (function(){
@@ -66,7 +66,7 @@ return {
"argumentDefinitions": [], "argumentDefinitions": [],
"kind": "Fragment", "kind": "Fragment",
"metadata": null, "metadata": null,
"name": "OrganizationDropdownMenuQuery", "name": "MembershipsDropdownMenuQuery",
"selections": [ "selections": [
{ {
"kind": "RequiredField", "kind": "RequiredField",
@@ -128,7 +128,7 @@ return {
{ {
"args": null, "args": null,
"kind": "FragmentSpread", "kind": "FragmentSpread",
"name": "OrganizationDropdownMenuItemFragment" "name": "MembershipsDropdownMenuItemFragment"
} }
], ],
"storageKey": null "storageKey": null
@@ -158,7 +158,7 @@ return {
"operation": { "operation": {
"argumentDefinitions": [], "argumentDefinitions": [],
"kind": "Operation", "kind": "Operation",
"name": "OrganizationDropdownMenuQuery", "name": "MembershipsDropdownMenuQuery",
"selections": [ "selections": [
{ {
"alias": null, "alias": null,
@@ -248,16 +248,16 @@ return {
] ]
}, },
"params": { "params": {
"cacheID": "b880e24e59e2bb500bbb2b9026423c20", "cacheID": "edb71632c35f1f8aefa1bb426c81a985",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "OrganizationDropdownMenuQuery", "name": "MembershipsDropdownMenuQuery",
"operationKind": "query", "operationKind": "query",
"text": "query OrganizationDropdownMenuQuery {\n viewer {\n memberships(first: 1000, orderBy: {direction: DESC, field: CREATED_AT}) {\n edges {\n node {\n id\n organization {\n name\n id\n }\n ...OrganizationDropdownMenuItemFragment\n }\n }\n }\n id\n }\n}\n\nfragment OrganizationDropdownMenuItemFragment on Membership {\n id\n lastSession {\n id\n expiresAt\n }\n organization {\n id\n logoUrl\n name\n }\n}\n" "text": "query MembershipsDropdownMenuQuery {\n viewer {\n memberships(first: 1000, orderBy: {direction: DESC, field: CREATED_AT}) {\n edges {\n node {\n id\n organization {\n name\n id\n }\n ...MembershipsDropdownMenuItemFragment\n }\n }\n }\n id\n }\n}\n\nfragment MembershipsDropdownMenuItemFragment on Membership {\n id\n lastSession {\n id\n expiresAt\n }\n organization {\n id\n logoUrl\n name\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "27c82735b5dcef01422d87312c127519"; (node as any).hash = "aa787b33a7cb3046d30fd638f4850621";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<1d2465517ea2dcfa99fb3dd8757fe980>> * @generated SignedSource<<84862118e94833cec2ce241e7329ba04>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -10,20 +10,20 @@
import { ReaderFragment } from 'relay-runtime'; import { ReaderFragment } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime"; import { FragmentRefs } from "relay-runtime";
export type OrganizationDropdown_organizationFragment$data = { export type MembershipsDropdown_organizationFragment$data = {
readonly name: string; readonly name: string;
readonly " $fragmentType": "OrganizationDropdown_organizationFragment"; readonly " $fragmentType": "MembershipsDropdown_organizationFragment";
}; };
export type OrganizationDropdown_organizationFragment$key = { export type MembershipsDropdown_organizationFragment$key = {
readonly " $data"?: OrganizationDropdown_organizationFragment$data; readonly " $data"?: MembershipsDropdown_organizationFragment$data;
readonly " $fragmentSpreads": FragmentRefs<"OrganizationDropdown_organizationFragment">; readonly " $fragmentSpreads": FragmentRefs<"MembershipsDropdown_organizationFragment">;
}; };
const node: ReaderFragment = { const node: ReaderFragment = {
"argumentDefinitions": [], "argumentDefinitions": [],
"kind": "Fragment", "kind": "Fragment",
"metadata": null, "metadata": null,
"name": "OrganizationDropdown_organizationFragment", "name": "MembershipsDropdown_organizationFragment",
"selections": [ "selections": [
{ {
"alias": null, "alias": null,
@@ -37,6 +37,6 @@ const node: ReaderFragment = {
"abstractKey": null "abstractKey": null
}; };
(node as any).hash = "8e6d0c702f821670315b5bde55e2556a"; (node as any).hash = "89ef8f037f10c51776df8e5add87cc29";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<d4b9efa7b9092ceb3f995507108a68e3>> * @generated SignedSource<<842fffc896db6311ff3c5901eae70176>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -10,22 +10,22 @@
import { ReaderFragment } from 'relay-runtime'; import { ReaderFragment } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime"; import { FragmentRefs } from "relay-runtime";
export type OrganizationDropdown_viewerFragment$data = { export type MembershipsDropdown_viewerFragment$data = {
readonly pendingInvitations: { readonly pendingInvitations: {
readonly totalCount: number; readonly totalCount: number;
}; };
readonly " $fragmentType": "OrganizationDropdown_viewerFragment"; readonly " $fragmentType": "MembershipsDropdown_viewerFragment";
}; };
export type OrganizationDropdown_viewerFragment$key = { export type MembershipsDropdown_viewerFragment$key = {
readonly " $data"?: OrganizationDropdown_viewerFragment$data; readonly " $data"?: MembershipsDropdown_viewerFragment$data;
readonly " $fragmentSpreads": FragmentRefs<"OrganizationDropdown_viewerFragment">; readonly " $fragmentSpreads": FragmentRefs<"MembershipsDropdown_viewerFragment">;
}; };
const node: ReaderFragment = { const node: ReaderFragment = {
"argumentDefinitions": [], "argumentDefinitions": [],
"kind": "Fragment", "kind": "Fragment",
"metadata": null, "metadata": null,
"name": "OrganizationDropdown_viewerFragment", "name": "MembershipsDropdown_viewerFragment",
"selections": [ "selections": [
{ {
"kind": "RequiredField", "kind": "RequiredField",
@@ -58,6 +58,6 @@ const node: ReaderFragment = {
"abstractKey": null "abstractKey": null
}; };
(node as any).hash = "ce947f812c95b74e9f250b8d5821ebb0"; (node as any).hash = "96b64fbc2481273728051e42d74bc8b5";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<6ac0b24d615666de1a5ea1c751095e6d>> * @generated SignedSource<<ab48c4d454e4f9fa4472a103b8144b7c>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -10,8 +10,8 @@
import { ConcreteRequest } from 'relay-runtime'; import { ConcreteRequest } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime"; import { FragmentRefs } from "relay-runtime";
export type OrganizationsPageQuery$variables = Record<PropertyKey, never>; export type MembershipsPageQuery$variables = Record<PropertyKey, never>;
export type OrganizationsPageQuery$data = { export type MembershipsPageQuery$data = {
readonly viewer: { readonly viewer: {
readonly memberships: { readonly memberships: {
readonly edges: ReadonlyArray<{ readonly edges: ReadonlyArray<{
@@ -34,9 +34,9 @@ export type OrganizationsPageQuery$data = {
}; };
}; };
}; };
export type OrganizationsPageQuery = { export type MembershipsPageQuery = {
response: OrganizationsPageQuery$data; response: MembershipsPageQuery$data;
variables: OrganizationsPageQuery$variables; variables: MembershipsPageQuery$variables;
}; };
const node: ConcreteRequest = (function(){ const node: ConcreteRequest = (function(){
@@ -74,7 +74,7 @@ return {
"argumentDefinitions": [], "argumentDefinitions": [],
"kind": "Fragment", "kind": "Fragment",
"metadata": null, "metadata": null,
"name": "OrganizationsPageQuery", "name": "MembershipsPageQuery",
"selections": [ "selections": [
{ {
"kind": "RequiredField", "kind": "RequiredField",
@@ -217,7 +217,7 @@ return {
"operation": { "operation": {
"argumentDefinitions": [], "argumentDefinitions": [],
"kind": "Operation", "kind": "Operation",
"name": "OrganizationsPageQuery", "name": "MembershipsPageQuery",
"selections": [ "selections": [
{ {
"alias": null, "alias": null,
@@ -368,16 +368,16 @@ return {
] ]
}, },
"params": { "params": {
"cacheID": "146deb87c5d32960212f323b4f5c792c", "cacheID": "70ba2b8cec46ba8154cf7a6a51e03932",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "OrganizationsPageQuery", "name": "MembershipsPageQuery",
"operationKind": "query", "operationKind": "query",
"text": "query OrganizationsPageQuery {\n viewer {\n memberships(first: 1000, orderBy: {direction: DESC, field: CREATED_AT}) {\n edges {\n node {\n id\n ...MembershipCardFragment\n organization {\n name\n id\n }\n }\n }\n }\n pendingInvitations(first: 1000, orderBy: {direction: DESC, field: CREATED_AT}) {\n edges {\n node {\n id\n ...InvitationCardFragment\n }\n }\n }\n id\n }\n}\n\nfragment InvitationCardFragment on Invitation {\n id\n role\n createdAt\n organization {\n id\n name\n }\n}\n\nfragment MembershipCardFragment on Membership {\n lastSession {\n id\n expiresAt\n }\n organization {\n id\n name\n logoUrl\n }\n}\n" "text": "query MembershipsPageQuery {\n viewer {\n memberships(first: 1000, orderBy: {direction: DESC, field: CREATED_AT}) {\n edges {\n node {\n id\n ...MembershipCardFragment\n organization {\n name\n id\n }\n }\n }\n }\n pendingInvitations(first: 1000, orderBy: {direction: DESC, field: CREATED_AT}) {\n edges {\n node {\n id\n ...InvitationCardFragment\n }\n }\n }\n id\n }\n}\n\nfragment InvitationCardFragment on Invitation {\n id\n role\n createdAt\n organization {\n id\n name\n }\n}\n\nfragment MembershipCardFragment on Membership {\n lastSession {\n id\n expiresAt\n }\n organization {\n id\n name\n logoUrl\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "7c03287e592920408306cac9bfa7fc81"; (node as any).hash = "4148521eb3eaba1670a2d181b6d2468f";
export default node; export default node;

View File

@@ -46,8 +46,8 @@ import {
UnAuthenticatedError, UnAuthenticatedError,
UnauthorizedError, UnauthorizedError,
} from "@probo/relay"; } from "@probo/relay";
import { OrganizationsPageQuery } from "./pages/iam/organizations/OrganizationsPageQuery.tsx"; import { MembershipsPageQuery } from "./pages/iam/memberships/MembershipsPageQuery.tsx";
import { OrganizationLayoutQuery } from "./pages/iam/organizations/OrganizationLayoutQuery.tsx"; import { MembershipLayoutQuery } from "./pages/iam/memberships/MembershipLayoutQuery.tsx";
import { IAMRelayProvider } from "./providers/IAMRelayProvider.tsx"; import { IAMRelayProvider } from "./providers/IAMRelayProvider.tsx";
const NewOrganizationPage = lazy( const NewOrganizationPage = lazy(
@@ -120,7 +120,7 @@ const routes = [
index: true, index: true,
Component: () => ( Component: () => (
<IAMRelayProvider> <IAMRelayProvider>
<OrganizationsPageQuery /> <MembershipsPageQuery />
</IAMRelayProvider> </IAMRelayProvider>
), ),
}, },
@@ -186,7 +186,7 @@ const routes = [
path: "/organizations/:organizationId", path: "/organizations/:organizationId",
Component: () => ( Component: () => (
<IAMRelayProvider> <IAMRelayProvider>
<OrganizationLayoutQuery /> <MembershipLayoutQuery />
</IAMRelayProvider> </IAMRelayProvider>
), ),
ErrorBoundary: ErrorBoundary, ErrorBoundary: ErrorBoundary,