add set description in sell item

This commit is contained in:
aurinex
2025-12-29 22:31:20 +05:00
parent 614f6d0a25
commit 5dc1744cfd
3 changed files with 41 additions and 17 deletions

View File

@ -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,
}), }),
}); });

View File

@ -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={{

View File

@ -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"