Skip to content

Commit 76d7efd

Browse files
committed
feat(market): Remove unused MultiSelect component and refactor query logic
1 parent 48b5576 commit 76d7efd

File tree

3 files changed

+53
-59
lines changed

3 files changed

+53
-59
lines changed
+33-36
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,54 @@
11
'use client'
22

33
import {MarketTitle} from "@/component/market/marketTitle";
4-
import {useEffect, useState} from "react";
4+
import {useState} from "react";
55
import {MarketItem} from "@/component/market/marketItem";
66
import {ProductList, ProductListParam} from "@/server/types";
77
import {ProductApi} from "@/server/ProductApi";
88
import {AppWrite} from "@/server/Client";
99

10-
export default function MarketPlacePage(){
11-
const [ItemData,setItemData] = useState<ProductList[]>([])
12-
const [Query,setQuery] = useState<ProductListParam>({
10+
export default function MarketPlacePage() {
11+
const [ItemData, setItemData] = useState<ProductList[]>([]);
12+
const [Query, setQuery] = useState<ProductListParam>({
1313
limit: 50,
1414
page: 1,
1515
order: "created_at",
1616
search: ""
17-
} as ProductListParam
18-
)
17+
});
1918
const [Tags, setTags] = useState<string[]>([]);
2019
const api = new ProductApi();
21-
useEffect(() => {
22-
api
23-
.List(
24-
Query.limit,
25-
Query.page,
26-
Query.order,
27-
Query.search
28-
)
29-
.then((data) => {
30-
if (data.status === 200 && data.data) {
31-
const json: AppWrite<ProductList[]> = JSON.parse(data.data);
32-
if (json.code === 200 && json.data) {
33-
setItemData(json.data)
34-
setTags(json.data.map((item) => {
35-
return item.data.type.split(",").map((tag) => {
36-
return tag
37-
})
38-
}).flat())
39-
}
20+
21+
22+
23+
const InitData = async (query: ProductListParam) => {
24+
try {
25+
const response = await api.List(query.limit, query.page, query.order, query.search);
26+
if (response.status === 200 && response.data) {
27+
const json: AppWrite<ProductList[]> = JSON.parse(response.data);
28+
if (json.code === 200 && json.data) {
29+
setItemData(json.data);
30+
setTags(json.data.flatMap(item => item.data.type.split(",")));
4031
}
41-
})
42-
}, [Query]);
32+
}
33+
} catch (error) {
34+
console.error("Failed to fetch data", error);
35+
}
36+
};
37+
38+
const setQuerys = (newQuery: ProductListParam) => {
39+
setQuery(newQuery);
40+
InitData(newQuery);
41+
};
42+
InitData(Query);
43+
4344
return (
4445
<div className="market">
45-
<MarketTitle tags={Tags} query={setQuery}/>
46+
<MarketTitle tags={Tags} query={setQuerys} value={Query} />
4647
<div className="market-display">
47-
{
48-
ItemData.map((item,index) => {
49-
return (
50-
<MarketItem key={index} data={item}/>
51-
)
52-
})
53-
}
48+
{ItemData.map((item, index) => (
49+
<MarketItem key={index + item.data.uid} data={item} />
50+
))}
5451
</div>
5552
</div>
56-
)
53+
);
5754
}

src/component/market/marketItem.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ export interface MarketItemProps {
88
export const MarketItem = ({data}: MarketItemProps) => {
99
const product = data.data;
1010
const owner = data.owner;
11-
// const repo = data.repo;
1211
return (
1312
<div className="market-item">
1413

src/component/market/marketTitle.tsx

+20-22
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
import {Button, Input, MultiSelect, Select} from "@mantine/core";
1+
import {Button, Input, Select} from "@mantine/core";
22
import {ProductListParam} from "@/server/types";
33

44
interface MarketTitleProps {
55
tags: string[],
6-
query: (value: (((prevState: ProductListParam) => ProductListParam) | ProductListParam)) => void
6+
query: (query: ProductListParam) => void,
7+
value: ProductListParam
78
}
89

9-
export const MarketTitle = ({tags, query}: MarketTitleProps) => {
10+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
11+
export const MarketTitle = (props: MarketTitleProps) => {
12+
// const handleMultiSelectChange = debounce((selected: string[]) => {
13+
// query({ ...value, search: selected.join(","), });
14+
// }, 300);
1015
return (
1116
<div className="market-title">
1217
<div className="market-image">
@@ -34,25 +39,18 @@ export const MarketTitle = ({tags, query}: MarketTitleProps) => {
3439
data={['Most popular', 'Recently Updated', 'Most relevant', 'Most expensive', 'Most Cheapest']}
3540
/>
3641
</div>
37-
<div style={{
38-
display: "flex",
39-
alignItems: "center",
40-
gap: ".5rem"
41-
}}>
42-
<a>Type</a>
43-
<MultiSelect
44-
defaultValue={['All']}
45-
data={['All',...tags]}
46-
onChange={(value) => {
47-
query((prev) => {
48-
return {
49-
...prev,
50-
search: value.join(',')
51-
}
52-
})
53-
}}
54-
/>
55-
</div>
42+
{/*<div style={{*/}
43+
{/* display: "flex",*/}
44+
{/* alignItems: "center",*/}
45+
{/* gap: ".5rem"*/}
46+
{/*}}>*/}
47+
{/* <a>Type</a>*/}
48+
{/* <MultiSelect */}
49+
{/* defaultValue={['All']} */}
50+
{/* data={['All', ...tags]} */}
51+
{/* onChange={(x) => handleMultiSelectChange(x)}*/}
52+
{/* />*/}
53+
{/*</div>*/}
5654
</div>
5755
</div>
5856
)

0 commit comments

Comments
 (0)