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

View File

@@ -4,19 +4,19 @@ import { graphql } from "relay-runtime";
import { Suspense, useEffect } from "react";
import { Skeleton } from "@probo/ui";
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`
query OrganizationLayoutQuery($organizationId: ID!) {
export const membershipLayoutQuery = graphql`
query MembershipLayoutQuery($organizationId: ID!) {
organization: node(id: $organizationId) @required(action: THROW) {
... on Organization {
...OrganizationDropdown_organizationFragment
...MembershipsDropdown_organizationFragment
}
}
viewer @required(action: THROW) {
...OrganizationDropdown_viewerFragment
...MembershipsDropdown_viewerFragment
pendingInvitations @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 [queryRef, loadQuery] = useQueryLoader<OrganizationLayoutQuery>(
organizationLayoutQuery,
const [queryRef, loadQuery] = useQueryLoader<MembershipLayoutQuery>(
membershipLayoutQuery,
);
useEffect(() => {

View File

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

View File

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

View File

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

View File

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

View File

@@ -3,12 +3,12 @@ import { useQueryLoader } from "react-relay";
import { graphql } from "relay-runtime";
import { Suspense, useEffect } from "react";
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`
query OrganizationsPageQuery {
export const membershipsPageQuery = graphql`
query MembershipsPageQuery {
viewer @required(action: THROW) {
memberships(first: 1000, orderBy: { direction: DESC, field: CREATED_AT })
@required(action: THROW) {
@@ -37,10 +37,9 @@ export const organizationsPageQuery = graphql`
}
`;
export function OrganizationsPageQuery() {
const [queryRef, loadQuery] = useQueryLoader<OrganizationsPageQuery>(
organizationsPageQuery,
);
export function MembershipsPageQuery() {
const [queryRef, loadQuery] =
useQueryLoader<MembershipsPageQuery>(membershipsPageQuery);
useEffect(() => {
loadQuery({});

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<09fbc762db2d00eb944a0ef9afe3756d>>
* @generated SignedSource<<4b0d5d271f19e23939fc2b392aa79fbc>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -10,23 +10,23 @@
import { ConcreteRequest } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime";
export type OrganizationLayoutQuery$variables = {
export type MembershipLayoutQuery$variables = {
organizationId: string;
};
export type OrganizationLayoutQuery$data = {
export type MembershipLayoutQuery$data = {
readonly organization: {
readonly " $fragmentSpreads": FragmentRefs<"OrganizationDropdown_organizationFragment">;
readonly " $fragmentSpreads": FragmentRefs<"MembershipsDropdown_organizationFragment">;
};
readonly viewer: {
readonly pendingInvitations: {
readonly totalCount: number;
};
readonly " $fragmentSpreads": FragmentRefs<"OrganizationDropdown_viewerFragment" | "SessionDropdownFragment">;
readonly " $fragmentSpreads": FragmentRefs<"MembershipsDropdown_viewerFragment" | "SessionDropdownFragment">;
};
};
export type OrganizationLayoutQuery = {
response: OrganizationLayoutQuery$data;
variables: OrganizationLayoutQuery$variables;
export type MembershipLayoutQuery = {
response: MembershipLayoutQuery$data;
variables: MembershipLayoutQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -70,7 +70,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "OrganizationLayoutQuery",
"name": "MembershipLayoutQuery",
"selections": [
{
"kind": "RequiredField",
@@ -88,7 +88,7 @@ return {
{
"args": null,
"kind": "FragmentSpread",
"name": "OrganizationDropdown_organizationFragment"
"name": "MembershipsDropdown_organizationFragment"
}
],
"type": "Organization",
@@ -112,7 +112,7 @@ return {
{
"args": null,
"kind": "FragmentSpread",
"name": "OrganizationDropdown_viewerFragment"
"name": "MembershipsDropdown_viewerFragment"
},
{
"kind": "RequiredField",
@@ -152,7 +152,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "OrganizationLayoutQuery",
"name": "MembershipLayoutQuery",
"selections": [
{
"alias": "organization",
@@ -247,16 +247,16 @@ return {
]
},
"params": {
"cacheID": "ca7f41668eb74024237351d0e076819e",
"cacheID": "a849dd96b5088ddc9a3bbab50273c411",
"id": null,
"metadata": {},
"name": "OrganizationLayoutQuery",
"name": "MembershipLayoutQuery",
"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;

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<034b9a96de4b1efda9529e8165779342>>
* @generated SignedSource<<b51fba8f2d50c85b2eeb51c658d82e17>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -10,8 +10,8 @@
import { ConcreteRequest } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime";
export type OrganizationDropdownMenuQuery$variables = Record<PropertyKey, never>;
export type OrganizationDropdownMenuQuery$data = {
export type MembershipsDropdownMenuQuery$variables = Record<PropertyKey, never>;
export type MembershipsDropdownMenuQuery$data = {
readonly viewer: {
readonly memberships: {
readonly edges: ReadonlyArray<{
@@ -20,15 +20,15 @@ export type OrganizationDropdownMenuQuery$data = {
readonly organization: {
readonly name: string;
};
readonly " $fragmentSpreads": FragmentRefs<"OrganizationDropdownMenuItemFragment">;
readonly " $fragmentSpreads": FragmentRefs<"MembershipsDropdownMenuItemFragment">;
};
}>;
};
};
};
export type OrganizationDropdownMenuQuery = {
response: OrganizationDropdownMenuQuery$data;
variables: OrganizationDropdownMenuQuery$variables;
export type MembershipsDropdownMenuQuery = {
response: MembershipsDropdownMenuQuery$data;
variables: MembershipsDropdownMenuQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -66,7 +66,7 @@ return {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "OrganizationDropdownMenuQuery",
"name": "MembershipsDropdownMenuQuery",
"selections": [
{
"kind": "RequiredField",
@@ -128,7 +128,7 @@ return {
{
"args": null,
"kind": "FragmentSpread",
"name": "OrganizationDropdownMenuItemFragment"
"name": "MembershipsDropdownMenuItemFragment"
}
],
"storageKey": null
@@ -158,7 +158,7 @@ return {
"operation": {
"argumentDefinitions": [],
"kind": "Operation",
"name": "OrganizationDropdownMenuQuery",
"name": "MembershipsDropdownMenuQuery",
"selections": [
{
"alias": null,
@@ -248,16 +248,16 @@ return {
]
},
"params": {
"cacheID": "b880e24e59e2bb500bbb2b9026423c20",
"cacheID": "edb71632c35f1f8aefa1bb426c81a985",
"id": null,
"metadata": {},
"name": "OrganizationDropdownMenuQuery",
"name": "MembershipsDropdownMenuQuery",
"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;

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<6ac0b24d615666de1a5ea1c751095e6d>>
* @generated SignedSource<<ab48c4d454e4f9fa4472a103b8144b7c>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -10,8 +10,8 @@
import { ConcreteRequest } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime";
export type OrganizationsPageQuery$variables = Record<PropertyKey, never>;
export type OrganizationsPageQuery$data = {
export type MembershipsPageQuery$variables = Record<PropertyKey, never>;
export type MembershipsPageQuery$data = {
readonly viewer: {
readonly memberships: {
readonly edges: ReadonlyArray<{
@@ -34,9 +34,9 @@ export type OrganizationsPageQuery$data = {
};
};
};
export type OrganizationsPageQuery = {
response: OrganizationsPageQuery$data;
variables: OrganizationsPageQuery$variables;
export type MembershipsPageQuery = {
response: MembershipsPageQuery$data;
variables: MembershipsPageQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -74,7 +74,7 @@ return {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "OrganizationsPageQuery",
"name": "MembershipsPageQuery",
"selections": [
{
"kind": "RequiredField",
@@ -217,7 +217,7 @@ return {
"operation": {
"argumentDefinitions": [],
"kind": "Operation",
"name": "OrganizationsPageQuery",
"name": "MembershipsPageQuery",
"selections": [
{
"alias": null,
@@ -368,16 +368,16 @@ return {
]
},
"params": {
"cacheID": "146deb87c5d32960212f323b4f5c792c",
"cacheID": "70ba2b8cec46ba8154cf7a6a51e03932",
"id": null,
"metadata": {},
"name": "OrganizationsPageQuery",
"name": "MembershipsPageQuery",
"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;

View File

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