add set description in sell item
This commit is contained in:
@ -1155,6 +1155,7 @@ export async function sellItem(
|
|||||||
amount: number,
|
amount: number,
|
||||||
price: number,
|
price: number,
|
||||||
server_ip: string,
|
server_ip: string,
|
||||||
|
description: string,
|
||||||
): Promise<{ status: string; operation_id: string }> {
|
): Promise<{ status: string; operation_id: string }> {
|
||||||
const response = await fetch(`${API_BASE_URL}/api/marketplace/items/sell`, {
|
const response = await fetch(`${API_BASE_URL}/api/marketplace/items/sell`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@ -1167,6 +1168,7 @@ export async function sellItem(
|
|||||||
amount,
|
amount,
|
||||||
price,
|
price,
|
||||||
server_ip,
|
server_ip,
|
||||||
|
description,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -161,6 +161,8 @@ const PlayerInventory = React.forwardRef<PlayerInventoryHandle, PlayerInventoryP
|
|||||||
const [sellLoading, setSellLoading] = useState<boolean>(false);
|
const [sellLoading, setSellLoading] = useState<boolean>(false);
|
||||||
const [sellError, setSellError] = useState<string | null>(null);
|
const [sellError, setSellError] = useState<string | null>(null);
|
||||||
|
|
||||||
|
const [description, setDescription] = useState('');
|
||||||
|
|
||||||
// Функция для запроса инвентаря игрока
|
// Функция для запроса инвентаря игрока
|
||||||
const fetchPlayerInventory = async () => {
|
const fetchPlayerInventory = async () => {
|
||||||
try {
|
try {
|
||||||
@ -256,6 +258,7 @@ const PlayerInventory = React.forwardRef<PlayerInventoryHandle, PlayerInventoryP
|
|||||||
amount,
|
amount,
|
||||||
price,
|
price,
|
||||||
serverIp,
|
serverIp,
|
||||||
|
description,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Проверяем статус операции
|
// Проверяем статус операции
|
||||||
@ -503,6 +506,15 @@ const PlayerInventory = React.forwardRef<PlayerInventoryHandle, PlayerInventoryP
|
|||||||
sx={INPUT_SX}
|
sx={INPUT_SX}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<TextField
|
||||||
|
label="Описание (необязательно)"
|
||||||
|
fullWidth
|
||||||
|
value={description}
|
||||||
|
onChange={(e) => setDescription(e.target.value)}
|
||||||
|
inputProps={{ min: 1 }}
|
||||||
|
sx={INPUT_SX}
|
||||||
|
/>
|
||||||
|
|
||||||
{sellError && (
|
{sellError && (
|
||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
|
|||||||
@ -635,7 +635,7 @@ export default function Marketplace() {
|
|||||||
|
|
||||||
const hasItemMeta = (item: MarketplaceItemResponse) => {
|
const hasItemMeta = (item: MarketplaceItemResponse) => {
|
||||||
const meta = item.item_data;
|
const meta = item.item_data;
|
||||||
if (!meta) return false;
|
// if (!meta) return false;
|
||||||
|
|
||||||
// базовые поля, которые НЕ считаем метой
|
// базовые поля, которые НЕ считаем метой
|
||||||
const baseKeys = ['slot', 'material', 'amount'];
|
const baseKeys = ['slot', 'material', 'amount'];
|
||||||
@ -643,6 +643,12 @@ export default function Marketplace() {
|
|||||||
return Object.keys(meta).some((key) => !baseKeys.includes(key));
|
return Object.keys(meta).some((key) => !baseKeys.includes(key));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const hasItemDetails = (item: MarketplaceItemResponse) => {
|
||||||
|
return Boolean(
|
||||||
|
hasItemMeta(item) || item.description
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const statusChip = useMemo(() => {
|
const statusChip = useMemo(() => {
|
||||||
if (statusLoading) {
|
if (statusLoading) {
|
||||||
@ -892,14 +898,15 @@ export default function Marketplace() {
|
|||||||
<DialogContent dividers sx={DIALOG_DIVIDERS_SX}>
|
<DialogContent dividers sx={DIALOG_DIVIDERS_SX}>
|
||||||
{metaItem && (() => {
|
{metaItem && (() => {
|
||||||
const meta = getItemMeta(metaItem);
|
const meta = getItemMeta(metaItem);
|
||||||
if (!meta) return null;
|
|
||||||
|
|
||||||
const enchants = formatEnchants(meta.enchants);
|
const enchants = meta ? formatEnchants(meta.enchants) : [];
|
||||||
|
|
||||||
const filteredMeta = Object.entries(meta).filter(([key]) =>
|
const filteredMeta = meta
|
||||||
key !== 'enchants' &&
|
? Object.entries(meta).filter(([key]) =>
|
||||||
metaKeyMatchesSearch(key, metaSearch)
|
key !== 'enchants' &&
|
||||||
);
|
metaKeyMatchesSearch(key, metaSearch)
|
||||||
|
)
|
||||||
|
: [];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: '1vw' }}>
|
<Box sx={{ display: 'flex', flexDirection: 'column', gap: '1vw' }}>
|
||||||
@ -961,15 +968,18 @@ export default function Marketplace() {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{/* SEARCH */}
|
{/* SEARCH */}
|
||||||
<TextField
|
{meta && Object.keys(meta).length > 0 && (
|
||||||
placeholder="Поиск по метаданным..."
|
<Box>
|
||||||
value={metaSearch}
|
<TextField
|
||||||
onChange={(e) => setMetaSearch(e.target.value)}
|
placeholder="Поиск по метаданным..."
|
||||||
fullWidth
|
value={metaSearch}
|
||||||
sx={PRICE_FIELD_SX}
|
onChange={(e) => setMetaSearch(e.target.value)}
|
||||||
/>
|
fullWidth
|
||||||
|
sx={PRICE_FIELD_SX}
|
||||||
<Divider sx={{mt: '0.7vw'}} />
|
/>
|
||||||
|
<Divider sx={{mt: '2vw'}} />
|
||||||
|
</Box>
|
||||||
|
)}
|
||||||
|
|
||||||
{/* ENCHANTS */}
|
{/* ENCHANTS */}
|
||||||
{enchants && (
|
{enchants && (
|
||||||
@ -1372,7 +1382,7 @@ export default function Marketplace() {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{/* INFO BUTTON */}
|
{/* INFO BUTTON */}
|
||||||
{hasItemMeta(item) && (
|
{hasItemDetails(item) && (
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={() => openMetaDialog(item)}
|
onClick={() => openMetaDialog(item)}
|
||||||
size="small"
|
size="small"
|
||||||
|
|||||||
Reference in New Issue
Block a user