feat: board creation and actions dropdown

This commit is contained in:
2025-08-07 09:19:30 +04:00
parent 4b843d8e5d
commit 335fbfe81c
12 changed files with 341 additions and 61 deletions

View File

@ -1,8 +1,8 @@
// This file is auto-generated by @hey-api/openapi-ts
import { type Options, getBoards, updateBoard, getDeals, updateDeal, getProjects, getStatuses, updateStatus } from '../sdk.gen';
import { type Options, getBoards, createBoard, updateBoard, getDeals, updateDeal, getProjects, getStatuses, updateStatus } from '../sdk.gen';
import { queryOptions, type UseMutationOptions } from '@tanstack/react-query';
import type { GetBoardsData, UpdateBoardData, UpdateBoardError, UpdateBoardResponse2, GetDealsData, UpdateDealData, UpdateDealError, UpdateDealResponse2, GetProjectsData, GetStatusesData, UpdateStatusData, UpdateStatusError, UpdateStatusResponse2 } from '../types.gen';
import type { GetBoardsData, CreateBoardData, CreateBoardError, CreateBoardResponse2, UpdateBoardData, UpdateBoardError, UpdateBoardResponse2, GetDealsData, UpdateDealData, UpdateDealError, UpdateDealResponse2, GetProjectsData, GetStatusesData, UpdateStatusData, UpdateStatusError, UpdateStatusResponse2 } from '../types.gen';
import type { AxiosError } from 'axios';
import { client as _heyApiClient } from '../client.gen';
@ -57,6 +57,43 @@ export const getBoardsOptions = (options: Options<GetBoardsData>) => {
});
};
export const createBoardQueryKey = (options: Options<CreateBoardData>) => createQueryKey('createBoard', options);
/**
* Create Board
*/
export const createBoardOptions = (options: Options<CreateBoardData>) => {
return queryOptions({
queryFn: async ({ queryKey, signal }) => {
const { data } = await createBoard({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: createBoardQueryKey(options)
});
};
/**
* Create Board
*/
export const createBoardMutation = (options?: Partial<Options<CreateBoardData>>): UseMutationOptions<CreateBoardResponse2, AxiosError<CreateBoardError>, Options<CreateBoardData>> => {
const mutationOptions: UseMutationOptions<CreateBoardResponse2, AxiosError<CreateBoardError>, Options<CreateBoardData>> = {
mutationFn: async (localOptions) => {
const { data } = await createBoard({
...options,
...localOptions,
throwOnError: true
});
return data;
}
};
return mutationOptions;
};
/**
* Update Board
*/

View File

@ -1,8 +1,8 @@
// This file is auto-generated by @hey-api/openapi-ts
import type { Options as ClientOptions, TDataShape, Client } from './client';
import type { GetBoardsData, GetBoardsResponses, GetBoardsErrors, UpdateBoardData, UpdateBoardResponses, UpdateBoardErrors, GetDealsData, GetDealsResponses, GetDealsErrors, UpdateDealData, UpdateDealResponses, UpdateDealErrors, GetProjectsData, GetProjectsResponses, GetStatusesData, GetStatusesResponses, GetStatusesErrors, UpdateStatusData, UpdateStatusResponses, UpdateStatusErrors } from './types.gen';
import { zGetBoardsData, zGetBoardsResponse2, zUpdateBoardData, zUpdateBoardResponse2, zGetDealsData, zGetDealsResponse2, zUpdateDealData, zUpdateDealResponse2, zGetProjectsData, zGetProjectsResponse2, zGetStatusesData, zGetStatusesResponse2, zUpdateStatusData, zUpdateStatusResponse2 } from './zod.gen';
import type { GetBoardsData, GetBoardsResponses, GetBoardsErrors, CreateBoardData, CreateBoardResponses, CreateBoardErrors, UpdateBoardData, UpdateBoardResponses, UpdateBoardErrors, GetDealsData, GetDealsResponses, GetDealsErrors, UpdateDealData, UpdateDealResponses, UpdateDealErrors, GetProjectsData, GetProjectsResponses, GetStatusesData, GetStatusesResponses, GetStatusesErrors, UpdateStatusData, UpdateStatusResponses, UpdateStatusErrors } from './types.gen';
import { zGetBoardsData, zGetBoardsResponse2, zCreateBoardData, zCreateBoardResponse2, zUpdateBoardData, zUpdateBoardResponse2, zGetDealsData, zGetDealsResponse2, zUpdateDealData, zUpdateDealResponse2, zGetProjectsData, zGetProjectsResponse2, zGetStatusesData, zGetStatusesResponse2, zUpdateStatusData, zUpdateStatusResponse2 } from './zod.gen';
import { client as _heyApiClient } from './client.gen';
export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = ClientOptions<TData, ThrowOnError> & {
@ -36,6 +36,27 @@ export const getBoards = <ThrowOnError extends boolean = false>(options: Options
});
};
/**
* Create Board
*/
export const createBoard = <ThrowOnError extends boolean = false>(options: Options<CreateBoardData, ThrowOnError>) => {
return (options.client ?? _heyApiClient).post<CreateBoardResponses, CreateBoardErrors, ThrowOnError>({
requestValidator: async (data) => {
return await zCreateBoardData.parseAsync(data);
},
responseType: 'json',
responseValidator: async (data) => {
return await zCreateBoardResponse2.parseAsync(data);
},
url: '/board/',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
/**
* Update Board
*/

View File

@ -4,14 +4,50 @@
* BoardSchema
*/
export type BoardSchema = {
/**
* Id
*/
id: number;
/**
* Name
*/
name: string;
/**
* Id
* Lexorank
*/
id: number;
lexorank: string;
};
/**
* CreateBoardRequest
*/
export type CreateBoardRequest = {
board: CreateBoardSchema;
};
/**
* CreateBoardResponse
*/
export type CreateBoardResponse = {
/**
* Message
*/
message: string;
board: BoardSchema;
};
/**
* CreateBoardSchema
*/
export type CreateBoardSchema = {
/**
* Name
*/
name: string;
/**
* Projectid
*/
projectId: number;
/**
* Lexorank
*/
@ -267,6 +303,31 @@ export type GetBoardsResponses = {
export type GetBoardsResponse2 = GetBoardsResponses[keyof GetBoardsResponses];
export type CreateBoardData = {
body: CreateBoardRequest;
path?: never;
query?: never;
url: '/board/';
};
export type CreateBoardErrors = {
/**
* Validation Error
*/
422: HttpValidationError;
};
export type CreateBoardError = CreateBoardErrors[keyof CreateBoardErrors];
export type CreateBoardResponses = {
/**
* Successful Response
*/
200: CreateBoardResponse;
};
export type CreateBoardResponse2 = CreateBoardResponses[keyof CreateBoardResponses];
export type UpdateBoardData = {
body: UpdateBoardRequest;
path: {

View File

@ -6,11 +6,35 @@ import { z } from 'zod';
* BoardSchema
*/
export const zBoardSchema = z.object({
name: z.string(),
id: z.int(),
name: z.string(),
lexorank: z.string()
});
/**
* CreateBoardSchema
*/
export const zCreateBoardSchema = z.object({
name: z.string(),
projectId: z.int(),
lexorank: z.string()
});
/**
* CreateBoardRequest
*/
export const zCreateBoardRequest = z.object({
board: zCreateBoardSchema
});
/**
* CreateBoardResponse
*/
export const zCreateBoardResponse = z.object({
message: z.string(),
board: zBoardSchema
});
/**
* DealSchema
*/
@ -186,6 +210,17 @@ export const zGetBoardsData = z.object({
*/
export const zGetBoardsResponse2 = zGetBoardsResponse;
export const zCreateBoardData = z.object({
body: zCreateBoardRequest,
path: z.optional(z.never()),
query: z.optional(z.never())
});
/**
* Successful Response
*/
export const zCreateBoardResponse2 = zCreateBoardResponse;
export const zUpdateBoardData = z.object({
body: zUpdateBoardRequest,
path: z.object({