diff --git a/auto-bid-admin/src/components/bid/delete-row-action.tsx b/auto-bid-admin/src/components/bid/delete-row-action.tsx
index 29c4b04..11f8788 100644
--- a/auto-bid-admin/src/components/bid/delete-row-action.tsx
+++ b/auto-bid-admin/src/components/bid/delete-row-action.tsx
@@ -1,22 +1,38 @@
-import { ActionIcon } from "@mantine/core";
+import { Button } from "@mantine/core";
import { IconTrash } from "@tabler/icons-react";
import { useChoosesStore } from "../../lib/zustand/use-chooses-store";
-import { IBid } from "../../system/type";
+import { useConfirmStore } from "../../lib/zustand/use-confirm";
+import { deletesBid } from "../../apis/bid";
-export interface IDeleteRowActionProps {
- onClick?: () => void;
- data: IBid
-}
+export default function DeleteRowAction({
+ onDeleted,
+}: {
+ onDeleted?: () => void;
+}) {
+ const { chooses } = useChoosesStore();
-export default function DeleteRowAction({ data,onClick }: IDeleteRowActionProps) {
-
-
- const {chooses} = useChoosesStore()
+ const { setConfirm } = useConfirmStore();
+ const handleDelete = () => {
+ setConfirm({
+ handleOk: async () => {
+ const result = await deletesBid(chooses);
+ if (!result) return;
+ onDeleted?.();
+ },
+ title: 'Delete',
+ message: `This action will remove ${chooses.length} products.`
+ });
+ };
return (
- item.id === data.id)} onClick={onClick} size={"sm"} color="red">
-
-
+
);
}
diff --git a/auto-bid-admin/src/lib/table/action.tsx b/auto-bid-admin/src/lib/table/action.tsx
index c91d526..b1402b3 100644
--- a/auto-bid-admin/src/lib/table/action.tsx
+++ b/auto-bid-admin/src/lib/table/action.tsx
@@ -35,6 +35,7 @@ export interface ITableActionsProps> {
props?: TextInputProps;
render?: () => ReactNode;
};
+ showMainAction?: boolean;
refAction?: TRefTableActionFn;
selectProps?: SelectProps;
leftActionSession?: ReactNode;
@@ -55,9 +56,10 @@ export default function TableActions<
actions,
chooses,
refAction,
+ leftActionSession,
+ showMainAction = true,
onSearch,
renderComfirm,
- leftActionSession,
onCloseComfirm,
}: ITableActionsProps) {
const [opened, { toggle, close }] = useDisclosure(false);
@@ -259,16 +261,18 @@ export default function TableActions<
{leftActionSession}
-
+ {showMainAction && (
+
+ )}
)}
diff --git a/auto-bid-admin/src/pages/bids.tsx b/auto-bid-admin/src/pages/bids.tsx
index 9fd816c..6998d02 100644
--- a/auto-bid-admin/src/pages/bids.tsx
+++ b/auto-bid-admin/src/pages/bids.tsx
@@ -16,7 +16,8 @@ import {
IconHammer,
IconHistory,
IconMenu,
- IconPlus
+ IconPlus,
+ IconTrash,
} from "@tabler/icons-react";
import _ from "lodash";
import { useMemo, useRef, useState } from "react";
@@ -27,25 +28,25 @@ import {
ShowHistoriesBidPicklesApiModal,
ShowHistoriesModal,
} from "../components/bid";
-import DeleteRowAction from "../components/bid/delete-row-action";
import constants, { haveHistories } from "../constant";
import Table from "../lib/table/table";
import { IColumn, TRefTableFn } from "../lib/table/type";
-import { useChoosesStore } from "../lib/zustand/use-chooses-store";
import { useConfirmStore } from "../lib/zustand/use-confirm";
import { mappingStatusColors } from "../system/constants";
import { IBid } from "../system/type";
import { extractDomainSmart, formatTime } from "../utils";
+import DeleteRowAction from "../components/bid/delete-row-action";
+import { useChoosesStore } from "../lib/zustand/use-chooses-store";
export default function Bids() {
const refTableFn: TRefTableFn = useRef({});
const [clickData, setClickData] = useState(null);
- const {setChooses} = useChoosesStore()
-
const { setConfirm } = useConfirmStore();
+ const { setChooses } = useChoosesStore();
+
const [openedHistories, historiesModel] = useDisclosure(false);
const [openedHistoriesGraysApi, historiesGraysApiModel] =
useDisclosure(false);
@@ -67,6 +68,7 @@ export default function Bids() {
renderRow(row) {
return (
{extractDomainSmart(row.web_bid.origin_url)};
},
@@ -88,7 +90,7 @@ export default function Bids() {
{
key: "lot_id",
title: "Lot ID",
- typeFilter: "text",
+ typeFilter: "none",
},
{
key: "model",
@@ -99,22 +101,22 @@ export default function Bids() {
{
key: "plus_price",
title: "Plus price",
- typeFilter: "number",
+ typeFilter: "none",
},
{
key: "max_price",
title: "Max price",
- typeFilter: "number",
+ typeFilter: "none",
},
{
key: "current_price",
title: "Current price",
- typeFilter: "number",
+ typeFilter: "none",
},
{
key: "reserve_price",
title: "Reserve price",
- typeFilter: "number",
+ typeFilter: "none",
},
{
key: "histories",
@@ -129,7 +131,7 @@ export default function Bids() {
{
key: "start_bid_time",
title: "Start bid",
- typeFilter: "text",
+ typeFilter: "none",
renderRow(row) {
return (
@@ -145,7 +147,7 @@ export default function Bids() {
{
key: "close_time",
title: "Close time",
- typeFilter: "text",
+ typeFilter: "date",
renderRow(row) {
return (
@@ -161,7 +163,23 @@ export default function Bids() {
{
key: "status",
title: "Status",
- typeFilter: "text",
+ typeFilter: {
+ type: "select",
+ data: [
+ {
+ label: "Biding",
+ value: "biding",
+ },
+ {
+ label: "Win bid",
+ value: "win-bid",
+ },
+ {
+ label: "Out bid",
+ value: "out-bid",
+ },
+ ],
+ },
renderRow(row) {
return (
@@ -219,14 +237,8 @@ export default function Bids() {
},
}}
actionsOptions={{
+ showMainAction: false,
actions: [
- // {
- // key: "add",
- // title: "Add",
- // callback: () => {
- // bidModal.open();
- // },
- // },
{
key: "delete",
title: "Delete",
@@ -249,8 +261,18 @@ export default function Bids() {
},
],
leftActionSession: (
-
- )
+
+ }
+ >
+ Add
+
+
+
+
+ ),
}}
refTableFn={refTableFn}
striped
@@ -360,7 +382,13 @@ export default function Bids() {
- handleDelete(row)} />
+ handleDelete(row)}
+ size={"sm"}
+ color="red"
+ >
+
+
);
},
diff --git a/auto-bid-server/src/modules/bids/services/bids.service.ts b/auto-bid-server/src/modules/bids/services/bids.service.ts
index a738ae4..38226f6 100644
--- a/auto-bid-server/src/modules/bids/services/bids.service.ts
+++ b/auto-bid-server/src/modules/bids/services/bids.service.ts
@@ -53,10 +53,11 @@ export class BidsService {
| true;
} = {
id: true,
- model: true,
+ model: [FilterOperator.ILIKE],
lot_id: true,
close_time: true,
- name: true,
+ name: [FilterOperator.ILIKE],
+ status: true
};
query.filter = AppResponse.processFilters(query.filter, filterableColumns);