feat: complete deal
This commit is contained in:
@@ -71,6 +71,8 @@ export type { DealAddServicesResponse } from './models/DealAddServicesResponse';
|
||||
export type { DealBillRequestSchema } from './models/DealBillRequestSchema';
|
||||
export type { DealChangeStatusRequest } from './models/DealChangeStatusRequest';
|
||||
export type { DealChangeStatusResponse } from './models/DealChangeStatusResponse';
|
||||
export type { DealCompleteRequest } from './models/DealCompleteRequest';
|
||||
export type { DealCompleteResponse } from './models/DealCompleteResponse';
|
||||
export type { DealCreateGuestUrlRequest } from './models/DealCreateGuestUrlRequest';
|
||||
export type { DealCreateGuestUrlResponse } from './models/DealCreateGuestUrlResponse';
|
||||
export type { DealCreateRequest } from './models/DealCreateRequest';
|
||||
|
||||
8
src/client/models/DealCompleteRequest.ts
Normal file
8
src/client/models/DealCompleteRequest.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
/* generated using openapi-typescript-codegen -- do not edit */
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export type DealCompleteRequest = {
|
||||
dealId: number;
|
||||
};
|
||||
|
||||
9
src/client/models/DealCompleteResponse.ts
Normal file
9
src/client/models/DealCompleteResponse.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/* generated using openapi-typescript-codegen -- do not edit */
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export type DealCompleteResponse = {
|
||||
ok: boolean;
|
||||
message: string;
|
||||
};
|
||||
|
||||
@@ -12,6 +12,8 @@ import type { DealAddServicesRequest } from '../models/DealAddServicesRequest';
|
||||
import type { DealAddServicesResponse } from '../models/DealAddServicesResponse';
|
||||
import type { DealChangeStatusRequest } from '../models/DealChangeStatusRequest';
|
||||
import type { DealChangeStatusResponse } from '../models/DealChangeStatusResponse';
|
||||
import type { DealCompleteRequest } from '../models/DealCompleteRequest';
|
||||
import type { DealCompleteResponse } from '../models/DealCompleteResponse';
|
||||
import type { DealCreateGuestUrlRequest } from '../models/DealCreateGuestUrlRequest';
|
||||
import type { DealCreateGuestUrlResponse } from '../models/DealCreateGuestUrlResponse';
|
||||
import type { DealCreateRequest } from '../models/DealCreateRequest';
|
||||
@@ -89,6 +91,26 @@ export class DealService {
|
||||
},
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Complete
|
||||
* @returns DealCompleteResponse Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static completeDeal({
|
||||
requestBody,
|
||||
}: {
|
||||
requestBody: DealCompleteRequest,
|
||||
}): CancelablePromise<DealCompleteResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'POST',
|
||||
url: '/deal/complete',
|
||||
body: requestBody,
|
||||
mediaType: 'application/json',
|
||||
errors: {
|
||||
422: `Validation Error`,
|
||||
},
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Quick Create
|
||||
* @returns DealQuickCreateResponse Successful Response
|
||||
|
||||
@@ -59,6 +59,29 @@ export const LeadsPage: FC = () => {
|
||||
}
|
||||
});
|
||||
}
|
||||
const onSuccess = (dealId: number) => {
|
||||
const summary = summaries.find(summary => summary.id == dealId);
|
||||
if (!summary) return;
|
||||
modals.openConfirmModal({
|
||||
title: "Завершение сделки",
|
||||
children:
|
||||
<Flex>
|
||||
Вы действительно хотите завершить сделку {summary.name}?
|
||||
</Flex>,
|
||||
onConfirm: () => {
|
||||
DealService.completeDeal({requestBody: {dealId: dealId}})
|
||||
.then(async ({ok, message}) => {
|
||||
notifications.guess(ok, {message});
|
||||
if (!ok) return;
|
||||
await refetch();
|
||||
})
|
||||
},
|
||||
labels: {
|
||||
confirm: "Завершить",
|
||||
cancel: "Отмена"
|
||||
}
|
||||
});
|
||||
}
|
||||
const onDragEnd = async (result: DropResult) => {
|
||||
setIsDragEnded(true);
|
||||
// If there is no changes
|
||||
@@ -78,6 +101,10 @@ export const LeadsPage: FC = () => {
|
||||
onDelete(dealId);
|
||||
return;
|
||||
}
|
||||
if (droppableId === 'SUCCESS') {
|
||||
onSuccess(dealId);
|
||||
return;
|
||||
}
|
||||
const status = getDealStatusByName(droppableId);
|
||||
const request: Partial<DealSummaryReorderRequest> = {
|
||||
dealId: dealId,
|
||||
@@ -122,7 +149,13 @@ export const LeadsPage: FC = () => {
|
||||
}
|
||||
const getBoardBody = () => {
|
||||
return (
|
||||
|
||||
<motion.div
|
||||
style={{
|
||||
display: "flex",
|
||||
height: "100%",
|
||||
flex: 1
|
||||
}}
|
||||
key={displayMode}
|
||||
initial={{opacity: 0}}
|
||||
animate={{opacity: 1}}
|
||||
@@ -134,6 +167,12 @@ export const LeadsPage: FC = () => {
|
||||
setIsDragEnded(false);
|
||||
}}
|
||||
onDragEnd={onDragEnd}>
|
||||
<Flex
|
||||
justify={"space-between"}
|
||||
direction={"column"}
|
||||
style={{flex: 1}}
|
||||
>
|
||||
|
||||
<div className={styles['boards']}>
|
||||
<Board
|
||||
withCreateButton
|
||||
@@ -175,7 +214,7 @@ export const LeadsPage: FC = () => {
|
||||
color={'#417505'}
|
||||
/>
|
||||
</div>
|
||||
<Flex justify={"flex-end"}>
|
||||
<Flex justify={"space-between"} gap={rem(10)}>
|
||||
<div
|
||||
className={
|
||||
classNames(
|
||||
@@ -185,13 +224,16 @@ export const LeadsPage: FC = () => {
|
||||
}
|
||||
>
|
||||
<Droppable droppableId={"DELETE"}>
|
||||
{(provided) => (
|
||||
{(provided, snapshot) => (
|
||||
<>
|
||||
<div
|
||||
{...provided.droppableProps}
|
||||
ref={provided.innerRef}
|
||||
>
|
||||
{!isDragEnded &&
|
||||
{
|
||||
!isDragEnded
|
||||
&&
|
||||
!snapshot.isDraggingOver &&
|
||||
<span>
|
||||
Удалить
|
||||
</span>
|
||||
@@ -205,7 +247,40 @@ export const LeadsPage: FC = () => {
|
||||
)}
|
||||
</Droppable>
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
classNames(
|
||||
styles['delete'],
|
||||
isDragEnded && styles['delete-hidden']
|
||||
)
|
||||
}
|
||||
>
|
||||
<Droppable droppableId={"SUCCESS"}>
|
||||
{(provided, snapshot) => (
|
||||
<>
|
||||
<div
|
||||
{...provided.droppableProps}
|
||||
ref={provided.innerRef}
|
||||
>
|
||||
{
|
||||
!isDragEnded
|
||||
&&
|
||||
!snapshot.isDraggingOver &&
|
||||
<span>
|
||||
Успешно завершена
|
||||
</span>
|
||||
|
||||
}
|
||||
</div>
|
||||
{provided.placeholder}
|
||||
</>
|
||||
|
||||
)}
|
||||
</Droppable>
|
||||
</div>
|
||||
</Flex>
|
||||
</Flex>
|
||||
|
||||
</DragDropContext>
|
||||
</motion.div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user