Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions public/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,16 @@
"message": "The order has been successfully deleted."
}
},
"blacklist_order": {
"error": {
"title": "Blacklist Error",
"message": "An error occurred while trying to blacklist the item."
},
"success": {
"title": "Blacklist Success",
"message": "The item has been blacklisted and its listing removed."
}
},
"delete_all_orders": {
"error": {
"title": "Delete All Orders Error",
Expand Down Expand Up @@ -473,6 +483,12 @@
"cancel": "Cancel",
"confirm": "Confirm"
},
"blacklist_item": {
"title": "Blacklist item?",
"message": "This will remove your listing from Warframe Market and add the item to your blacklist. This action cannot be undone.",
"cancel": "Cancel",
"confirm": "Blacklist"
},
"delete_multiple_items": {
"title": "Are you sure?",
"message": "Are you sure you want to delete these {{count}} items? This action cannot be undone.",
Expand Down Expand Up @@ -2101,6 +2117,7 @@
"refresh_tooltip": "Refresh the order list",
"delete_all_tooltip": "Delete all orders",
"delete_tooltip": "Delete this order",
"blacklist_tooltip": "Blacklist item and remove listing",
"info_tooltip": "View order details",
"sell_manual": {
"buy_tooltip": "Bought manually",
Expand Down
36 changes: 30 additions & 6 deletions src/pages/warframe_market/Tabs/Orders/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,17 @@ import { Loading } from "@components/Shared/Loading";
import { PaginationFooter } from "@components/Shared/PaginationFooter";
import { PreviewCard } from "@components/Shared/PreviewCard/PreviewCard";
import { TextTranslate } from "@components/Shared/TextTranslate";
import { faArrowDown, faArrowUp, faCartShopping, faInfoCircle, faPen, faRefresh, faSackDollar, faTrashCan } from "@fortawesome/free-solid-svg-icons";
import {
faArrowDown,
faArrowUp,
faBan,
faCartShopping,
faInfoCircle,
faPen,
faRefresh,
faSackDollar,
faTrashCan,
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { useHasAlert } from "@hooks/useHasAlert.hook";
import { useTauriEvent } from "@hooks/useTauriEvent.hook";
Expand Down Expand Up @@ -51,18 +61,20 @@ export const OrderPanel = ({ isActive }: OrderPanelProps) => {
const { refetchQueries, paginationQuery, statusCountsQuery } = useStockQueries({ queryData, isActive });

// Mutations
const { refreshOrdersMutation, deleteAllOrdersMutation, deleteStockMutation, createStockMutation, sellStockMutation } = useStockMutations({
refetchQueries,
setLoadingRows,
});
const { refreshOrdersMutation, deleteAllOrdersMutation, deleteStockMutation, createStockMutation, sellStockMutation, blacklistOrderMutation } =
useStockMutations({
refetchQueries,
setLoadingRows,
});

// Modals
const { OpenDeleteAllModal, OpenInfoModal, OpenDeleteModal, HandleModalOrder } = useStockModals({
const { OpenDeleteAllModal, OpenInfoModal, OpenDeleteModal, OpenBlacklistModal, HandleModalOrder } = useStockModals({
createStockMutation,
sellStockMutation,
useTranslateBasePrompt,
deleteStockMutation,
deleteAllOrdersMutation,
blacklistOrderMutation,
});
const handleRefresh = (_data: any) => {
refetchQueries(true);
Expand Down Expand Up @@ -304,6 +316,18 @@ export const OrderPanel = ({ isActive }: OrderPanelProps) => {
OpenInfoModal(order);
}}
/>
<ActionWithTooltip
tooltip={useTranslateButtons("blacklist_tooltip")}
icon={faBan}
loading={loadingRows.includes(`${order.id}`)}
color={"orange.7"}
actionProps={{ size: "sm" }}
iconProps={{ size: "xs" }}
onClick={(e) => {
e.stopPropagation();
OpenBlacklistModal(order);
}}
/>
<ActionWithTooltip
tooltip={useTranslateButtons("delete_tooltip")}
icon={faTrashCan}
Expand Down
32 changes: 27 additions & 5 deletions src/pages/warframe_market/Tabs/Orders/modals.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
import { modals } from "@mantine/modals";
import { Text } from "@mantine/core";
import { WFMarketTypes } from "$types";
import { useTranslateCommon, useTranslateEnums } from "@hooks/useTranslate.hook";
import { TauriTypes, WFMarketTypes } from "$types";
import { SendTauriEvent } from "@api/index";
import { ItemDetailsModal, Operations } from "@components/Modals/ItemDetails";
import { useTranslateCommon, useTranslateEnums } from "@hooks/useTranslate.hook";
import { Text } from "@mantine/core";
import { modals } from "@mantine/modals";

interface ModalHooks {
useTranslateBasePrompt: (key: string, context?: { [key: string]: any }) => string;
deleteStockMutation: {
mutateAsync: (id: string) => Promise<any>;
};
blacklistOrderMutation: {
mutateAsync: (order: WFMarketTypes.Order) => Promise<any>;
};
deleteAllOrdersMutation: {
mutateAsync: (order_type?: WFMarketTypes.OrderType) => Promise<any>;
};
Expand All @@ -20,7 +24,13 @@ interface ModalHooks {
};
}

export const useStockModals = ({ deleteStockMutation, deleteAllOrdersMutation, createStockMutation, sellStockMutation }: ModalHooks) => {
export const useStockModals = ({
deleteStockMutation,
deleteAllOrdersMutation,
createStockMutation,
sellStockMutation,
blacklistOrderMutation,
}: ModalHooks) => {
const OpenSellModal = (order: WFMarketTypes.Order) => {
modals.openContextModal({
modal: "prompt",
Expand Down Expand Up @@ -111,6 +121,17 @@ export const useStockModals = ({ deleteStockMutation, deleteAllOrdersMutation, c
onConfirm: async () => await deleteStockMutation.mutateAsync(id),
});
};
const OpenBlacklistModal = (order: WFMarketTypes.Order) => {
modals.openConfirmModal({
title: useTranslateCommon("prompts.blacklist_item.title"),
children: <Text size="sm">{useTranslateCommon("prompts.blacklist_item.message")}</Text>,
labels: { confirm: useTranslateCommon("prompts.blacklist_item.confirm"), cancel: useTranslateCommon("prompts.blacklist_item.cancel") },
onConfirm: async () => {
await blacklistOrderMutation.mutateAsync(order);
SendTauriEvent(TauriTypes.Events.RefreshSettings);
},
});
};
const OpenDeleteAllModal = () => {
modals.openContextModal({
modal: "prompt",
Expand Down Expand Up @@ -145,6 +166,7 @@ export const useStockModals = ({ deleteStockMutation, deleteAllOrdersMutation, c
return {
HandleModalOrder,
OpenDeleteModal,
OpenBlacklistModal,
OpenDeleteAllModal,
OpenInfoModal,
};
Expand Down
29 changes: 28 additions & 1 deletion src/pages/warframe_market/Tabs/Orders/mutations.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { WFMarketTypes } from "$types";
import { TauriTypes, WFMarketTypes } from "$types";
import api from "@api/index";
import { useAppContext } from "@contexts/app.context";
import { createGenericMutation, MutationHooks } from "@utils/genericMutation.helper";

export const useStockMutations = ({ refetchQueries, setLoadingRows }: MutationHooks) => {
const hooks = { refetchQueries, setLoadingRows };
const { settings } = useAppContext();

const refreshOrdersMutation = createGenericMutation(
{
Expand Down Expand Up @@ -73,11 +75,36 @@ export const useStockMutations = ({ refetchQueries, setLoadingRows }: MutationHo
hooks,
);

const blacklistOrderMutation = createGenericMutation(
{
mutationFn: async (order: WFMarketTypes.Order) => {
if (!settings) throw new Error("Settings are not loaded");
const wfm_id = order.properties?.wfm_id || order.itemId;
const allModes = [TauriTypes.TradeMode.Buy, TauriTypes.TradeMode.Sell, TauriTypes.TradeMode.Wishlist];
const blacklist = settings.live_scraper.stock_item.blacklist || [];
const updatedBlacklist = [...blacklist.filter((b) => b.wfmId !== wfm_id), { wfmId: wfm_id, disabled_for: allModes }];
await api.app.updateSettings({
...settings,
live_scraper: {
...settings.live_scraper,
stock_item: { ...settings.live_scraper.stock_item, blacklist: updatedBlacklist },
},
});
return api.order.deleteById(order.id);
},
successKey: "blacklist_order",
errorKey: "blacklist_order",
getLoadingId: (order: WFMarketTypes.Order) => `${order.id}`,
},
hooks,
);

return {
refreshOrdersMutation,
deleteAllOrdersMutation,
createStockMutation,
sellStockMutation,
deleteStockMutation,
blacklistOrderMutation,
};
};
Loading