Skip to content

Commit

Permalink
Use graphql-codegen for adminapi
Browse files Browse the repository at this point in the history
  • Loading branch information
andychow326 committed Jun 10, 2022
1 parent 718fd04 commit b758d7c
Show file tree
Hide file tree
Showing 23 changed files with 167 additions and 513 deletions.
13 changes: 5 additions & 8 deletions portal/src/graphql/adminapi/AddIdentityForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@ import { Context, FormattedMessage } from "@oursky/react-messageformat";
import PasswordField from "../../PasswordField";
import { useCreateLoginIDIdentityMutation } from "./mutations/createIdentityMutation";
import { LoginIDKeyType, PortalAPIAppConfig } from "../../types";
import {
AuthenticatorKind,
AuthenticatorType,
} from "./__generated__/globalTypes";
import { AuthenticatorKind, AuthenticatorType } from "./globalTypes.generated";

import styles from "./AddIdentityForm.module.scss";
import { useSimpleForm } from "../../hook/useSimpleForm";
Expand All @@ -16,7 +13,7 @@ import ScreenContent from "../../ScreenContent";
import { ErrorParseRule } from "../../error/parse";
import { canCreateLoginIDIdentity } from "../../util/loginID";
import { Text } from "@fluentui/react";
import { UserQuery_node_User } from "./query/__generated__/UserQuery";
import { UserQueryNodeFragment } from "./query/userQuery.generated";
import { validatePassword } from "../../error/password";

interface FormState {
Expand Down Expand Up @@ -78,7 +75,7 @@ function isPasswordRequired(
break;
}
const hasPrimaryPassword =
user?.primaryAuthenticators.includes(AuthenticatorType.PASSWORD) ?? false;
user?.primaryAuthenticators.includes(AuthenticatorType.Password) ?? false;
return needPrimaryPassword && !hasPrimaryPassword;
}

Expand All @@ -89,7 +86,7 @@ export interface LoginIDFieldProps {

interface AddIdentityFormProps {
appConfig: PortalAPIAppConfig | null;
rawUser: UserQuery_node_User | null;
rawUser: UserQueryNodeFragment | null;
loginIDType: LoginIDKeyType;
title: React.ReactNode;
loginIDField: React.ComponentType<LoginIDFieldProps>;
Expand Down Expand Up @@ -120,7 +117,7 @@ const AddIdentityForm: React.FC<AddIdentityFormProps> =
return {
id: rawUser.id,
primaryAuthenticators: authenticators
.filter((a) => a?.kind === AuthenticatorKind.PRIMARY)
.filter((a) => a?.kind === AuthenticatorKind.Primary)
.map((a) => a!.type),
};
}, [rawUser]);
Expand Down
41 changes: 11 additions & 30 deletions portal/src/graphql/adminapi/AuditLogEntryScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React, { useMemo, useContext } from "react";
import { useParams } from "react-router-dom";
import { Text, Label } from "@fluentui/react";
import { FormattedMessage, Context } from "@oursky/react-messageformat";
import { gql, useQuery } from "@apollo/client";
import { useQuery } from "@apollo/client";
import { CopyBlock, dracula } from "react-code-blocks";
import NavBreadcrumb from "../../NavBreadcrumb";
import CommandBarContainer from "../../CommandBarContainer";
Expand All @@ -13,43 +13,24 @@ import { formatDatetime } from "../../util/formatDatetime";
import { extractRawID } from "../../util/graphql";
import { useSystemConfig } from "../../context/SystemConfigContext";
import {
AuditLogEntryQuery,
AuditLogEntryQueryVariables,
AuditLogEntryQuery_node_AuditLog,
} from "./__generated__/AuditLogEntryQuery";
AuditLogEntryQueryQuery,
AuditLogEntryQueryQueryVariables,
AuditLogEntryQueryDocument,
AuditLogEntryFragment,
} from "./query/auditLogEntryQuery.generated";

import styles from "./AuditLogEntryScreen.module.scss";

const QUERY = gql`
query AuditLogEntryQuery($logID: ID!) {
node(id: $logID) {
__typename
... on AuditLog {
id
createdAt
activityType
user {
id
}
ipAddress
userAgent
clientID
data
}
}
}
`;

function getRawUserIDFromAuditLog(
node: AuditLogEntryQuery_node_AuditLog
node: AuditLogEntryFragment
): string | undefined {
// The simple case is just use the user.id.
const userID = node.user?.id ?? null;
if (userID != null) {
return extractRawID(userID);
}
// Otherwise use the user ID in the payload.
const rawUserID = (node.data as any)?.payload?.user?.id;
const rawUserID = node.data?.payload?.user?.id;
return rawUserID ?? undefined;
}

Expand Down Expand Up @@ -84,9 +65,9 @@ const AuditLogEntryScreen: React.FC = function AuditLogEntryScreen() {
}, []);

const { data, loading, error, refetch } = useQuery<
AuditLogEntryQuery,
AuditLogEntryQueryVariables
>(QUERY, {
AuditLogEntryQueryQuery,
AuditLogEntryQueryQueryVariables
>(AuditLogEntryQueryDocument, {
variables: {
logID,
},
Expand Down
12 changes: 6 additions & 6 deletions portal/src/graphql/adminapi/AuditLogList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ import { Context, Values } from "@oursky/react-messageformat";
import ReactRouterLink from "../../ReactRouterLink";
import PaginationWidget from "../../PaginationWidget";
import {
AuditLogListQuery_auditLogs,
AuditLogListQuery_auditLogs_edges_node,
} from "./__generated__/AuditLogListQuery";
AuditLogListFragment,
AuditLogEdgesNodeFragment,
} from "./query/auditLogListQuery.generated";
import { formatDatetime } from "../../util/formatDatetime";
import { extractRawID } from "../../util/graphql";
import useDelayedValue from "../../hook/useDelayedValue";
Expand All @@ -26,7 +26,7 @@ const PLACEHOLDER = "-";
export interface AuditLogListProps {
className?: string;
loading: boolean;
auditLogs: AuditLogListQuery_auditLogs | null;
auditLogs: AuditLogListFragment | null;
offset: number;
pageSize: number;
totalCount?: number;
Expand All @@ -43,7 +43,7 @@ interface AuditLogListItem {

function getRawUserIDFromAuditLog(
renderToString: (id: string, values: Values | undefined) => string,
node: AuditLogListQuery_auditLogs_edges_node
node: AuditLogEdgesNodeFragment
): string | null {
// The simple case is just use the user.id.
const userID = node.user?.id ?? null;
Expand All @@ -52,7 +52,7 @@ function getRawUserIDFromAuditLog(
}

// Otherwise use the user ID in the payload.
const rawUserID = (node.data as any)?.payload?.user?.id;
const rawUserID = node.data?.payload?.user?.id;
if (rawUserID != null) {
return renderToString("AuditLogList.label.user-id", {
id: rawUserID,
Expand Down
48 changes: 9 additions & 39 deletions portal/src/graphql/adminapi/AuditLogScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from "@fluentui/react";
import { useConst } from "@fluentui/react-hooks";
import { FormattedMessage, Context } from "@oursky/react-messageformat";
import { gql, useQuery } from "@apollo/client";
import { useQuery } from "@apollo/client";
import { DateTime } from "luxon";
import NavBreadcrumb from "../../NavBreadcrumb";
import AuditLogList from "./AuditLogList";
Expand All @@ -22,47 +22,17 @@ import DateRangeDialog from "../portal/DateRangeDialog";
import { encodeOffsetToCursor } from "../../util/pagination";
import useTransactionalState from "../../hook/useTransactionalState";
import {
AuditLogListQuery,
AuditLogListQueryVariables,
} from "./__generated__/AuditLogListQuery";
import { AuditLogActivityType } from "./__generated__/globalTypes";
AuditLogListQueryQuery,
AuditLogListQueryQueryVariables,
AuditLogListQueryDocument,
} from "./query/auditLogListQuery.generated";
import { AuditLogActivityType } from "./globalTypes.generated";

import styles from "./AuditLogScreen.module.scss";
import { useAppFeatureConfigQuery } from "../portal/query/appFeatureConfigQuery";

const pageSize = 10;

const QUERY = gql`
query AuditLogListQuery(
$pageSize: Int!
$cursor: String
$activityTypes: [AuditLogActivityType!]
$rangeFrom: DateTime
$rangeTo: DateTime
) {
auditLogs(
first: $pageSize
after: $cursor
activityTypes: $activityTypes
rangeFrom: $rangeFrom
rangeTo: $rangeTo
) {
edges {
node {
id
createdAt
activityType
user {
id
}
data
}
}
totalCount
}
}
`;

function CommandBarDropdownWrapper(props: ICommandBarItemProps) {
const { dropdownProps } = props;
return <CommandBarDropdown {...dropdownProps} />;
Expand Down Expand Up @@ -180,9 +150,9 @@ const AuditLogScreen: React.FC = function AuditLogScreen() {
}, []);

const { data, error, loading, refetch } = useQuery<
AuditLogListQuery,
AuditLogListQueryVariables
>(QUERY, {
AuditLogListQueryQuery,
AuditLogListQueryQueryVariables
>(AuditLogListQueryDocument, {
variables: {
pageSize,
cursor,
Expand Down
4 changes: 2 additions & 2 deletions portal/src/graphql/adminapi/EditPictureScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import ScreenContent from "../../ScreenContent";
import ShowLoading from "../../ShowLoading";
import ShowError from "../../ShowError";
import ReactCropperjs from "../../ReactCropperjs";
import { UserQuery_node_User } from "./query/__generated__/UserQuery";
import { UserQueryNodeFragment } from "./query/userQuery.generated";
import { useSystemConfig } from "../../context/SystemConfigContext";
import { useUserQuery } from "./query/userQuery";
import { useSimpleForm } from "../../hook/useSimpleForm";
Expand Down Expand Up @@ -96,7 +96,7 @@ function RemoveDialog(props: RemoveDialogProps) {
}

interface EditPictureScreenContentProps {
user: UserQuery_node_User;
user: UserQueryNodeFragment;
appID: string;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { useDeleteIdentityMutation } from "./mutations/deleteIdentityMutation";
import { useSetVerifiedStatusMutation } from "./mutations/setVerifiedStatusMutation";
import { formatDatetime } from "../../util/formatDatetime";
import { OAuthSSOProviderType } from "../../types";
import { UserQuery_node_User_verifiedClaims } from "./query/__generated__/UserQuery";
import { UserQueryNodeFragment } from "./query/userQuery.generated";
import { makeInvariantViolatedErrorParseRule } from "../../error/parse";

import styles from "./UserDetailsConnectedIdentities.module.scss";
Expand All @@ -49,10 +49,10 @@ interface Identity {
updatedAt: string;
}

type VerifiedClaim = UserQuery_node_User_verifiedClaims;
type VerifiedClaims = UserQueryNodeFragment["verifiedClaims"];
interface UserDetailsConnectedIdentitiesProps {
identities: Identity[];
verifiedClaims: VerifiedClaim[];
verifiedClaims: VerifiedClaims;
availableLoginIdIdentities: string[];
}

Expand Down Expand Up @@ -223,7 +223,7 @@ function getIdentityName(
}

function checkIsClaimVerified(
verifiedClaims: VerifiedClaim[],
verifiedClaims: VerifiedClaims,
claimName: string,
claimValue: string
) {
Expand Down
10 changes: 5 additions & 5 deletions portal/src/graphql/adminapi/UserDetailsScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import { useSystemConfig } from "../../context/SystemConfigContext";
import { useUpdateUserMutation } from "./mutations/updateUserMutation";
import { SimpleFormModel, useSimpleForm } from "../../hook/useSimpleForm";
import { useUserQuery } from "./query/userQuery";
import { UserQuery_node_User } from "./query/__generated__/UserQuery";
import { UserQueryNodeFragment } from "./query/userQuery.generated";
import { usePivotNavigation } from "../../hook/usePivot";
import { nonNullable } from "../../util/types";
import {
Expand All @@ -51,7 +51,7 @@ import styles from "./UserDetailsScreen.module.scss";

interface UserDetailsProps {
form: SimpleFormModel<FormState>;
data: UserQuery_node_User | null;
data: UserQueryNodeFragment | null;
appConfig: PortalAPIAppConfig | null;
}

Expand Down Expand Up @@ -364,7 +364,7 @@ function useDeleteUserCommandBarItem(
}

function useSetUserDisabledCommandBarItem(
user: UserQuery_node_User,
user: UserQueryNodeFragment,
onClick: IButtonProps["onClick"]
): ICommandBarItemProps {
const { renderToString } = useContext(Context);
Expand Down Expand Up @@ -392,7 +392,7 @@ function useSetUserDisabledCommandBarItem(
}

interface WarnScheduledDeletionProps {
user: UserQuery_node_User;
user: UserQueryNodeFragment;
}

function WarnScheduledDeletion(props: WarnScheduledDeletionProps) {
Expand All @@ -416,7 +416,7 @@ function WarnScheduledDeletion(props: WarnScheduledDeletionProps) {
}

interface UserDetailsScreenContentProps {
user: UserQuery_node_User;
user: UserQueryNodeFragment;
refreshUser?: () => void;
effectiveAppConfig: PortalAPIAppConfig;
}
Expand Down
16 changes: 8 additions & 8 deletions portal/src/graphql/adminapi/UsersList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import {
} from "@fluentui/react";
import { Context, FormattedMessage } from "@oursky/react-messageformat";
import { Link } from "react-router-dom";
import { UsersListQuery_users } from "./__generated__/UsersListQuery";
import { UserSortBy, SortDirection } from "./__generated__/globalTypes";
import { UsersListFragment } from "./query/usersListQuery.generated";
import { UserSortBy, SortDirection } from "./globalTypes.generated";

import PaginationWidget from "../../PaginationWidget";
import SetUserDisabledDialog from "./SetUserDisabledDialog";
Expand All @@ -31,7 +31,7 @@ import useDelayedValue from "../../hook/useDelayedValue";
interface UsersListProps {
className?: string;
loading: boolean;
users: UsersListQuery_users | null;
users: UsersListFragment | null;
offset: number;
pageSize: number;
totalCount?: number;
Expand Down Expand Up @@ -167,7 +167,7 @@ const UsersList: React.FC<UsersListProps> = function UsersList(props) {
name: renderToString("UsersList.column.signed-up"),
minWidth: 150,
isSorted: sortBy === "CREATED_AT",
isSortedDescending: sortDirection === SortDirection.DESC,
isSortedDescending: sortDirection === SortDirection.Desc,
iconName: "SortLines",
iconClassName: styles.sortIcon,
},
Expand All @@ -177,7 +177,7 @@ const UsersList: React.FC<UsersListProps> = function UsersList(props) {
name: renderToString("UsersList.column.last-login-at"),
minWidth: 150,
isSorted: sortBy === "LAST_LOGIN_AT",
isSortedDescending: sortDirection === SortDirection.DESC,
isSortedDescending: sortDirection === SortDirection.Desc,
iconName: "SortLines",
iconClassName: styles.sortIcon,
},
Expand Down Expand Up @@ -211,7 +211,7 @@ const UsersList: React.FC<UsersListProps> = function UsersList(props) {
createdAt: formatDatetime(locale, node.createdAt),
lastLoginAt: formatDatetime(locale, node.lastLoginAt),
profilePictureURL: node.standardAttributes.picture ?? null,
formattedName: node.formattedName,
formattedName: node.formattedName ?? null,
endUserAccountIdentitifer: node.endUserAccountID ?? null,
username: node.standardAttributes.preferred_username ?? null,
phone: node.standardAttributes.phone_number ?? null,
Expand Down Expand Up @@ -306,10 +306,10 @@ const UsersList: React.FC<UsersListProps> = function UsersList(props) {
(_e, column) => {
if (column != null) {
if (column.key === "createdAt") {
onColumnClick?.(UserSortBy.CREATED_AT);
onColumnClick?.(UserSortBy.CreatedAt);
}
if (column.key === "lastLoginAt") {
onColumnClick?.(UserSortBy.LAST_LOGIN_AT);
onColumnClick?.(UserSortBy.LastLoginAt);
}
}
},
Expand Down
Loading

0 comments on commit b758d7c

Please sign in to comment.