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 * fixsupport-auth-token
parent
c54091d4bc
commit
d772e44c17
|
|
@ -17,8 +17,8 @@ import WorkerCard from './components/worker-card'
|
||||||
import { useWorkers } from '@/lib/hooks/use-workers'
|
import { useWorkers } from '@/lib/hooks/use-workers'
|
||||||
import { WorkerKind } from '@/lib/gql/generates/graphql'
|
import { WorkerKind } from '@/lib/gql/generates/graphql'
|
||||||
import { useGraphQL } from '@/lib/hooks/use-graphql'
|
import { useGraphQL } from '@/lib/hooks/use-graphql'
|
||||||
import { getRegistrationTokenDocument } from '@/lib/gql/request-documents'
|
|
||||||
import { CopyButton } from '@/components/copy-button'
|
import { CopyButton } from '@/components/copy-button'
|
||||||
|
import { graphql } from '@/lib/gql/generates'
|
||||||
|
|
||||||
const COMMUNITY_DIALOG_SHOWN_KEY = 'community-dialog-shown'
|
const COMMUNITY_DIALOG_SHOWN_KEY = 'community-dialog-shown'
|
||||||
|
|
||||||
|
|
@ -75,6 +75,12 @@ function toBadgeString(str: string) {
|
||||||
return encodeURIComponent(str.replaceAll('-', '--'))
|
return encodeURIComponent(str.replaceAll('-', '--'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getRegistrationTokenDocument = graphql(/* GraphQL */ `
|
||||||
|
query GetRegistrationToken {
|
||||||
|
registrationToken
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
function MainPanel() {
|
function MainPanel() {
|
||||||
const { data: healthInfo } = useHealth()
|
const { data: healthInfo } = useHealth()
|
||||||
const workers = useWorkers(healthInfo)
|
const workers = useWorkers(healthInfo)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import type { CodegenConfig } from '@graphql-codegen/cli';
|
||||||
const config: CodegenConfig = {
|
const config: CodegenConfig = {
|
||||||
overwrite: true,
|
overwrite: true,
|
||||||
schema: "../tabby-webserver/graphql/schema.graphql",
|
schema: "../tabby-webserver/graphql/schema.graphql",
|
||||||
documents: "./**/*.tsx",
|
documents: "./**/*.(tsx|ts)",
|
||||||
ignoreNoDocuments: true,
|
ignoreNoDocuments: true,
|
||||||
generates: {
|
generates: {
|
||||||
"lib/gql/generates/": {
|
"lib/gql/generates/": {
|
||||||
|
|
|
||||||
|
|
@ -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.
|
* Therefore it is highly recommended to use the babel or swc plugin for production.
|
||||||
*/
|
*/
|
||||||
const documents = {
|
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':
|
'\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.
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||||
*/
|
*/
|
||||||
export function graphql(
|
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'
|
source: '\n query GetRegistrationToken {\n registrationToken\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']
|
): (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.
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||||
*/
|
*/
|
||||||
export function graphql(
|
export function graphql(
|
||||||
source: '\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 GetRegistrationToken {\n registrationToken\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) {
|
export function graphql(source: string) {
|
||||||
return (documents as any)[source] ?? {}
|
return (documents as any)[source] ?? {}
|
||||||
|
|
|
||||||
|
|
@ -29,17 +29,99 @@ export type Scalars = {
|
||||||
Float: { input: number; output: number }
|
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 = {
|
export type Mutation = {
|
||||||
__typename?: 'Mutation'
|
__typename?: 'Mutation'
|
||||||
|
createInvitation: Scalars['Int']['output']
|
||||||
|
deleteInvitation: Scalars['Int']['output']
|
||||||
|
refreshToken: RefreshTokenResponse
|
||||||
|
register: RegisterResponse
|
||||||
resetRegistrationToken: Scalars['String']['output']
|
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 = {
|
export type Query = {
|
||||||
__typename?: 'Query'
|
__typename?: 'Query'
|
||||||
|
invitations: Array<Invitation>
|
||||||
|
isAdminInitialized: Scalars['Boolean']['output']
|
||||||
|
me: UserInfo
|
||||||
registrationToken: Scalars['String']['output']
|
registrationToken: Scalars['String']['output']
|
||||||
workers: Array<Worker>
|
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 = {
|
export type Worker = {
|
||||||
__typename?: 'Worker'
|
__typename?: 'Worker'
|
||||||
addr: Scalars['String']['output']
|
addr: Scalars['String']['output']
|
||||||
|
|
@ -57,6 +139,13 @@ export enum WorkerKind {
|
||||||
Completion = 'COMPLETION'
|
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 GetWorkersQueryVariables = Exact<{ [key: string]: never }>
|
||||||
|
|
||||||
export type GetWorkersQuery = {
|
export type GetWorkersQuery = {
|
||||||
|
|
@ -74,13 +163,25 @@ export type GetWorkersQuery = {
|
||||||
}>
|
}>
|
||||||
}
|
}
|
||||||
|
|
||||||
export type GetRegistrationTokenQueryVariables = Exact<{ [key: string]: never }>
|
export const GetRegistrationTokenDocument = {
|
||||||
|
kind: 'Document',
|
||||||
export type GetRegistrationTokenQuery = {
|
definitions: [
|
||||||
__typename?: 'Query'
|
{
|
||||||
registrationToken: string
|
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 = {
|
export const GetWorkersDocument = {
|
||||||
kind: 'Document',
|
kind: 'Document',
|
||||||
definitions: [
|
definitions: [
|
||||||
|
|
@ -113,22 +214,3 @@ export const GetWorkersDocument = {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
} as unknown as DocumentNode<GetWorkersQuery, GetWorkersQueryVariables>
|
} 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
|
|
||||||
>
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
|
||||||
`)
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { groupBy, findIndex, slice } from 'lodash-es'
|
import { groupBy, findIndex, slice } from 'lodash-es'
|
||||||
import { Worker, WorkerKind } from '@/lib/gql/generates/graphql'
|
import { Worker, WorkerKind } from '@/lib/gql/generates/graphql'
|
||||||
import { getAllWorkersDocument } from '@/lib/gql/request-documents'
|
|
||||||
import { useGraphQL } from './use-graphql'
|
import { useGraphQL } from './use-graphql'
|
||||||
import type { HealthInfo } from './use-health'
|
import type { HealthInfo } from './use-health'
|
||||||
|
import { graphql } from '@/lib/gql/generates'
|
||||||
|
|
||||||
const modelNameMap: Record<WorkerKind, 'chat_model' | 'model'> = {
|
const modelNameMap: Record<WorkerKind, 'chat_model' | 'model'> = {
|
||||||
[WorkerKind.Chat]: 'chat_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) {
|
function useWorkers(healthInfo?: HealthInfo) {
|
||||||
const { data } = useGraphQL(getAllWorkersDocument)
|
const { data } = useGraphQL(getAllWorkersDocument)
|
||||||
let workers = data?.workers
|
let workers = data?.workers
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue