refactor: move graphql query to individual files (avoid abstract for single use query) (#954)

* refactor: mofve graphql query to individual files (avoid abstract for single use query)

* fix codegen

* fix
support-auth-token
Meng Zhang 2023-12-06 22:57:04 +08:00 committed by GitHub
parent c54091d4bc
commit d772e44c17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 139 additions and 58 deletions

View File

@ -17,8 +17,8 @@ import WorkerCard from './components/worker-card'
import { useWorkers } from '@/lib/hooks/use-workers'
import { WorkerKind } from '@/lib/gql/generates/graphql'
import { useGraphQL } from '@/lib/hooks/use-graphql'
import { getRegistrationTokenDocument } from '@/lib/gql/request-documents'
import { CopyButton } from '@/components/copy-button'
import { graphql } from '@/lib/gql/generates'
const COMMUNITY_DIALOG_SHOWN_KEY = 'community-dialog-shown'
@ -75,6 +75,12 @@ function toBadgeString(str: string) {
return encodeURIComponent(str.replaceAll('-', '--'))
}
const getRegistrationTokenDocument = graphql(/* GraphQL */ `
query GetRegistrationToken {
registrationToken
}
`)
function MainPanel() {
const { data: healthInfo } = useHealth()
const workers = useWorkers(healthInfo)

View File

@ -4,7 +4,7 @@ import type { CodegenConfig } from '@graphql-codegen/cli';
const config: CodegenConfig = {
overwrite: true,
schema: "../tabby-webserver/graphql/schema.graphql",
documents: "./**/*.tsx",
documents: "./**/*.(tsx|ts)",
ignoreNoDocuments: true,
generates: {
"lib/gql/generates/": {

View File

@ -13,10 +13,10 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/
* Therefore it is highly recommended to use the babel or swc plugin for production.
*/
const documents = {
'\n query GetWorkers {\n workers {\n kind\n name\n addr\n device\n arch\n cpuInfo\n cpuCount\n cudaDevices\n }\n }\n':
types.GetWorkersDocument,
'\n query GetRegistrationToken {\n registrationToken\n }\n':
types.GetRegistrationTokenDocument
types.GetRegistrationTokenDocument,
'\n query GetWorkers {\n workers {\n kind\n name\n addr\n device\n arch\n cpuInfo\n cpuCount\n cudaDevices\n }\n }\n':
types.GetWorkersDocument
}
/**
@ -37,14 +37,14 @@ export function graphql(source: string): unknown
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(
source: '\n query GetWorkers {\n workers {\n kind\n name\n addr\n device\n arch\n cpuInfo\n cpuCount\n cudaDevices\n }\n }\n'
): (typeof documents)['\n query GetWorkers {\n workers {\n kind\n name\n addr\n device\n arch\n cpuInfo\n cpuCount\n cudaDevices\n }\n }\n']
source: '\n query GetRegistrationToken {\n registrationToken\n }\n'
): (typeof documents)['\n query GetRegistrationToken {\n registrationToken\n }\n']
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(
source: '\n query GetRegistrationToken {\n registrationToken\n }\n'
): (typeof documents)['\n query GetRegistrationToken {\n registrationToken\n }\n']
source: '\n query GetWorkers {\n workers {\n kind\n name\n addr\n device\n arch\n cpuInfo\n cpuCount\n cudaDevices\n }\n }\n'
): (typeof documents)['\n query GetWorkers {\n workers {\n kind\n name\n addr\n device\n arch\n cpuInfo\n cpuCount\n cudaDevices\n }\n }\n']
export function graphql(source: string) {
return (documents as any)[source] ?? {}

View File

@ -29,17 +29,99 @@ export type Scalars = {
Float: { input: number; output: number }
}
export type Claims = {
__typename?: 'Claims'
exp: Scalars['Float']['output']
iat: Scalars['Float']['output']
user: UserInfo
}
export type Invitation = {
__typename?: 'Invitation'
code: Scalars['String']['output']
createdAt: Scalars['String']['output']
email: Scalars['String']['output']
id: Scalars['Int']['output']
}
export type Mutation = {
__typename?: 'Mutation'
createInvitation: Scalars['Int']['output']
deleteInvitation: Scalars['Int']['output']
refreshToken: RefreshTokenResponse
register: RegisterResponse
resetRegistrationToken: Scalars['String']['output']
tokenAuth: TokenAuthResponse
verifyToken: VerifyTokenResponse
}
export type MutationCreateInvitationArgs = {
email: Scalars['String']['input']
}
export type MutationDeleteInvitationArgs = {
id: Scalars['Int']['input']
}
export type MutationRefreshTokenArgs = {
refreshToken: Scalars['String']['input']
}
export type MutationRegisterArgs = {
email: Scalars['String']['input']
invitationCode?: InputMaybe<Scalars['String']['input']>
password1: Scalars['String']['input']
password2: Scalars['String']['input']
}
export type MutationTokenAuthArgs = {
email: Scalars['String']['input']
password: Scalars['String']['input']
}
export type MutationVerifyTokenArgs = {
token: Scalars['String']['input']
}
export type Query = {
__typename?: 'Query'
invitations: Array<Invitation>
isAdminInitialized: Scalars['Boolean']['output']
me: UserInfo
registrationToken: Scalars['String']['output']
workers: Array<Worker>
}
export type RefreshTokenResponse = {
__typename?: 'RefreshTokenResponse'
accessToken: Scalars['String']['output']
refreshExpiresAt: Scalars['Float']['output']
refreshToken: Scalars['String']['output']
}
export type RegisterResponse = {
__typename?: 'RegisterResponse'
accessToken: Scalars['String']['output']
refreshToken: Scalars['String']['output']
}
export type TokenAuthResponse = {
__typename?: 'TokenAuthResponse'
accessToken: Scalars['String']['output']
refreshToken: Scalars['String']['output']
}
export type UserInfo = {
__typename?: 'UserInfo'
email: Scalars['String']['output']
isAdmin: Scalars['Boolean']['output']
}
export type VerifyTokenResponse = {
__typename?: 'VerifyTokenResponse'
claims: Claims
}
export type Worker = {
__typename?: 'Worker'
addr: Scalars['String']['output']
@ -57,6 +139,13 @@ export enum WorkerKind {
Completion = 'COMPLETION'
}
export type GetRegistrationTokenQueryVariables = Exact<{ [key: string]: never }>
export type GetRegistrationTokenQuery = {
__typename?: 'Query'
registrationToken: string
}
export type GetWorkersQueryVariables = Exact<{ [key: string]: never }>
export type GetWorkersQuery = {
@ -74,13 +163,25 @@ export type GetWorkersQuery = {
}>
}
export type GetRegistrationTokenQueryVariables = Exact<{ [key: string]: never }>
export type GetRegistrationTokenQuery = {
__typename?: 'Query'
registrationToken: string
}
export const GetRegistrationTokenDocument = {
kind: 'Document',
definitions: [
{
kind: 'OperationDefinition',
operation: 'query',
name: { kind: 'Name', value: 'GetRegistrationToken' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'registrationToken' } }
]
}
}
]
} as unknown as DocumentNode<
GetRegistrationTokenQuery,
GetRegistrationTokenQueryVariables
>
export const GetWorkersDocument = {
kind: 'Document',
definitions: [
@ -113,22 +214,3 @@ export const GetWorkersDocument = {
}
]
} as unknown as DocumentNode<GetWorkersQuery, GetWorkersQueryVariables>
export const GetRegistrationTokenDocument = {
kind: 'Document',
definitions: [
{
kind: 'OperationDefinition',
operation: 'query',
name: { kind: 'Name', value: 'GetRegistrationToken' },
selectionSet: {
kind: 'SelectionSet',
selections: [
{ kind: 'Field', name: { kind: 'Name', value: 'registrationToken' } }
]
}
}
]
} as unknown as DocumentNode<
GetRegistrationTokenQuery,
GetRegistrationTokenQueryVariables
>

View File

@ -1,22 +0,0 @@
import { graphql } from './generates'
export const getAllWorkersDocument = graphql(/* GraphQL */ `
query GetWorkers {
workers {
kind
name
addr
device
arch
cpuInfo
cpuCount
cudaDevices
}
}
`)
export const getRegistrationTokenDocument = graphql(/* GraphQL */ `
query GetRegistrationToken {
registrationToken
}
`)

View File

@ -1,9 +1,9 @@
import React from 'react'
import { groupBy, findIndex, slice } from 'lodash-es'
import { Worker, WorkerKind } from '@/lib/gql/generates/graphql'
import { getAllWorkersDocument } from '@/lib/gql/request-documents'
import { useGraphQL } from './use-graphql'
import type { HealthInfo } from './use-health'
import { graphql } from '@/lib/gql/generates'
const modelNameMap: Record<WorkerKind, 'chat_model' | 'model'> = {
[WorkerKind.Chat]: 'chat_model',
@ -26,6 +26,21 @@ function transformHealthInfoToWorker(
}
}
export const getAllWorkersDocument = graphql(/* GraphQL */ `
query GetWorkers {
workers {
kind
name
addr
device
arch
cpuInfo
cpuCount
cudaDevices
}
}
`)
function useWorkers(healthInfo?: HealthInfo) {
const { data } = useGraphQL(getAllWorkersDocument)
let workers = data?.workers