From 12ca2c7b0f38d75f5e8e873c24b160cc185f6120 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Mon, 19 Feb 2024 18:01:58 +0100 Subject: [PATCH] [Back] Split OrderGetDetail - [Front] Merge OrderAppend | Split OrderComment & OrderDetail | useItems | useSWR --- TSystems.LoveOTC/Hub/Order/Get.cs | 23 ++-- .../History => Components/Order}/Append.tsx | 35 +++-- src/Components/Order/Comment.tsx | 60 +++++++++ src/Components/OrderInfo.tsx | 2 +- src/Pages/Admin/Order/Append.tsx | 95 ------------- src/Pages/Admin/Order/Detail.tsx | 8 +- src/Pages/History/Action.tsx | 15 +-- src/Pages/History/Comment.tsx | 34 ----- src/Pages/History/Detail.tsx | 100 +++++++------- src/ShopNet/Order/Entity.ts | 2 + src/ShopNet/Order/Get.ts | 127 +++++++++++------- src/ShopNet/Product/Get.ts | 2 +- src/ShopNet/SignalR.ts | 47 +++++-- src/ShopNet/Table.ts | 10 +- vite.config.ts | 4 +- 15 files changed, 273 insertions(+), 291 deletions(-) rename src/{Pages/History => Components/Order}/Append.tsx (72%) create mode 100644 src/Components/Order/Comment.tsx delete mode 100644 src/Pages/Admin/Order/Append.tsx delete mode 100644 src/Pages/History/Comment.tsx diff --git a/TSystems.LoveOTC/Hub/Order/Get.cs b/TSystems.LoveOTC/Hub/Order/Get.cs index b4804a5..3977936 100644 --- a/TSystems.LoveOTC/Hub/Order/Get.cs +++ b/TSystems.LoveOTC/Hub/Order/Get.cs @@ -26,12 +26,12 @@ await this.Db.Orders * * @author Aloento * @since 0.5.0 - * @version 1.0.0 + * @version 1.1.0 * */ [Authorize] - public async Task OrderGetDetail(uint orderId) { - var items = await this.Db.OrderCombos + public async Task OrderGetItems(uint orderId) => + await this.Db.OrderCombos .Where(x => x.OrderId == orderId && x.Order.UserId == this.UserId) .Select(x => new { x.Quantity, @@ -39,14 +39,17 @@ public async Task OrderGetDetail(uint orderId) { }) .ToArrayAsync(); - var cmts = await this.Db.Comments + /** + * + * @author Aloento + * @since 1.3.0 + * @version 0.1.0 + * + */ + [Authorize] + public Task OrderGetCmts(uint orderId) => + this.Db.Comments .Where(x => x.OrderId == orderId && x.Order.UserId == this.UserId) .Select(x => x.CommentId) .ToArrayAsync(); - - return new { - Items = items, - Comments = cmts - }; - } } diff --git a/src/Pages/History/Append.tsx b/src/Components/Order/Append.tsx similarity index 72% rename from src/Pages/History/Append.tsx rename to src/Components/Order/Append.tsx index 4484cb6..cfad073 100644 --- a/src/Pages/History/Append.tsx +++ b/src/Components/Order/Append.tsx @@ -1,10 +1,11 @@ import { Button, Field, Textarea, Toast, ToastTitle, makeStyles } from "@fluentui/react-components"; import { useConst } from "@fluentui/react-hooks"; import { useState } from "react"; -import { Logger } from "~/Helpers/Logger"; import { Flex } from "~/Helpers/Styles"; import { useErrorToast } from "~/Helpers/useToast"; import { Hub } from "~/ShopNet"; +import { AdminHub } from "~/ShopNet/Admin"; +import { IOrderComp } from "./Comment"; /** * @author Aloento @@ -21,21 +22,9 @@ const useStyles = makeStyles({ /** * @author Aloento * @since 0.5.0 - * @version 0.1.1 + * @version 1.0.0 */ -interface IOrderAppend { - OrderId: number; - Status?: string; - Refresh: () => void; - ParentLog: Logger; -} - -/** - * @author Aloento - * @since 0.5.0 - * @version 0.4.2 - */ -export function OrderAppend({ OrderId, Status, Refresh, ParentLog }: IOrderAppend) { +export function CommentAppend({ OrderId, Refresh, ParentLog, Status, Admin }: IOrderComp) { const log = useConst(() => ParentLog.With("Append")); const style = useStyles(); @@ -43,7 +32,9 @@ export function OrderAppend({ OrderId, Status, Refresh, ParentLog }: IOrderAppen const { dispatch, dispatchToast } = useErrorToast(log); - const { run: append } = Hub.Order.Post.useAppend({ + const hub = (Admin ? AdminHub : Hub).Order.Post as typeof AdminHub.Order.Post & typeof Hub.Order.Post; + + const { run: append } = hub.useAppend({ manual: true, onError(e, req) { dispatch({ @@ -64,11 +55,11 @@ export function OrderAppend({ OrderId, Status, Refresh, ParentLog }: IOrderAppen } }); - const { run: cancel } = Hub.Order.Post.useCancel({ + const { run: cancel } = (Admin ? hub.useClose : hub.useCancel)({ manual: true, onError(e, params) { dispatch({ - Message: "Failed Cancel Order", + Message: `Failed ${Admin ? "Close" : "Cancel"} Order`, Request: params, Error: e }); @@ -76,7 +67,7 @@ export function OrderAppend({ OrderId, Status, Refresh, ParentLog }: IOrderAppen onSuccess() { dispatchToast( - Order Canceled + Order {Admin ? "Closed" : "Cancelled"} , { intent: "success" } ); @@ -100,7 +91,11 @@ export function OrderAppend({ OrderId, Status, Refresh, ParentLog }: IOrderAppen { !(Status === "Finished" || Status === "Returning") && } diff --git a/src/Components/Order/Comment.tsx b/src/Components/Order/Comment.tsx new file mode 100644 index 0000000..ddbcd88 --- /dev/null +++ b/src/Components/Order/Comment.tsx @@ -0,0 +1,60 @@ +import { Body1, Caption1Stronger, Field, Label } from "@fluentui/react-components"; +import { useConst } from "@fluentui/react-hooks"; +import { useRequest } from "ahooks"; +import { ICompLog } from "~/Helpers/Logger"; +import { Hub } from "~/ShopNet"; +import { CommentAppend } from "./Append"; + +/** + * @author Aloento + * @since 1.0.0 + * @version 0.1.0 + */ +export interface IComment { + Content: string; + Time: Date; + User: string; +} + +/** + * @author Aloento + * @since 0.5.0 + * @version 0.2.0 + */ +export interface IOrderComp extends ICompLog { + OrderId: number; + Refresh: () => void; + Status?: string; + Admin?: true; +} + +/** + * @author Aloento + * @since 1.0.0 + * @version 0.1.0 + */ +export function OrderComment({ OrderId, Refresh, ParentLog, Status, Admin }: IOrderComp) { + const log = useConst(() => ParentLog.With("Comment")); + + const { data, run } = useRequest(() => Hub.Order.Get.Cmts(OrderId, log), { + manual: true, + onError: log.error + }); + + return <> + + {data?.length === 0 + ? + + : + data?.map((v, i) =>
+ {v.User} {v.Time.toLocaleString()} +
+ {v.Content} +
+ )} +
+ + + ; +} diff --git a/src/Components/OrderInfo.tsx b/src/Components/OrderInfo.tsx index 726c017..8be239b 100644 --- a/src/Components/OrderInfo.tsx +++ b/src/Components/OrderInfo.tsx @@ -27,7 +27,7 @@ const useStyles = makeStyles({ */ interface IOrderInfo { OrderId: number; - Order: OrderEntity.Order; + Order?: OrderEntity.Order; Admin?: true; } diff --git a/src/Pages/Admin/Order/Append.tsx b/src/Pages/Admin/Order/Append.tsx deleted file mode 100644 index 74dead5..0000000 --- a/src/Pages/Admin/Order/Append.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { Button, Field, Textarea, Toast, ToastTitle, makeStyles } from "@fluentui/react-components"; -import { useState } from "react"; -import { Logger } from "~/Helpers/Logger"; -import { Flex } from "~/Helpers/Styles"; -import { useErrorToast } from "~/Helpers/useToast"; -import { AdminHub } from "~/ShopNet/Admin"; - -/** - * @author Aloento - * @since 0.5.0 - * @version 0.1.0 - */ -const useStyles = makeStyles({ - body: { - ...Flex, - justifyContent: "space-between" - }, -}); - -interface IAdminOrderAppend { - OrderId: number; - Refresh: () => void; -} - -const log = new Logger("Admin", "Order", "Detail", "Append"); - -/** - * @author Aloento - * @since 0.5.0 - * @version 0.2.2 - */ -export function AdminOrderAppend({ OrderId, Refresh }: IAdminOrderAppend) { - const style = useStyles(); - const [cmt, setCmt] = useState(); - - const { dispatch, dispatchToast } = useErrorToast(log); - - const { run: append } = AdminHub.Order.Post.useAppend({ - manual: true, - onError(e, params) { - dispatch({ - Message: "Failed Append Comment", - Request: params, - Error: e - }); - }, - onSuccess() { - dispatchToast( - - Comment Appended - , - { intent: "success" } - ); - - Refresh(); - } - }); - - const { run: close } = AdminHub.Order.Post.useClose({ - manual: true, - onError(e, params) { - dispatch({ - Message: "Failed Close Order", - Request: params, - Error: e - }); - }, - onSuccess() { - dispatchToast( - - Order Closed - , - { intent: "success" } - ); - - Refresh(); - } - }); - - return <> - -