This commit is contained in:
hanif salafi 2025-06-24 13:52:28 +07:00
commit b14cc43bbe
17 changed files with 151 additions and 61 deletions

View File

@ -94,9 +94,7 @@ const ContentListBanner = () => {
const [selectedItems, setSelectedItems] = React.useState<number[]>([]);
const [page, setPage] = React.useState(1);
const [totalPage, setTotalPage] = React.useState(1);
let typingTimer: any;
const doneTypingInterval = 1500;
const [searchQuery, setSearchQuery] = React.useState("");
const handleKeyUp = () => {
clearTimeout(typingTimer);
@ -108,6 +106,21 @@ const ContentListBanner = () => {
typingTimer = setTimeout(doneTyping, doneTypingInterval);
};
let typingTimer: NodeJS.Timeout;
const doneTypingInterval = 1500;
const handleTyping = () => {
clearTimeout(typingTimer);
typingTimer = setTimeout(() => {
setPage(1);
fetchData();
}, doneTypingInterval);
};
React.useEffect(() => {
fetchData();
}, [categoryFilter, statusFilter]);
async function doneTyping() {
fetchData();
}
@ -133,10 +146,11 @@ const ContentListBanner = () => {
const res = await listDataMedia(
page - 1,
showData,
"",
searchQuery,
categoryFilter?.sort().join(","),
statusFilter?.sort().join(",")
);
const data = res?.data?.data;
const contentData = data?.content;
contentData.forEach((item: any, index: number) => {
@ -224,10 +238,19 @@ const ContentListBanner = () => {
<Input
type="text"
placeholder="Search"
onKeyUp={handleKeyUp}
onKeyDown={handleKeyDown}
value={searchQuery}
onChange={(e) => {
setSearchQuery(e.target.value);
handleTyping();
}}
className="max-w-[300px]"
onKeyDown={(e) => {
if (e.key === "Enter") {
fetchData();
}
}}
/>
{/* <div className="flex flex-row gap-2">
<DropdownMenu>
<DropdownMenuTrigger asChild>
@ -393,9 +416,12 @@ const ContentListBanner = () => {
alt={item.title}
className="w-full h-48 object-cover"
/>
<div className="p-3">
<h4 className="font-semibold text-sm truncate">{item.title}</h4>
</div>
<Link
href={`/contributor/content/image/detail/${item?.id}`}
className="p-3"
>
<h4 className="font-semibold text-sm">{item.title}</h4>
</Link>
</div>
))}
</div>

View File

@ -98,16 +98,21 @@ const PopUpListTable = () => {
loading();
let temp: any;
const response = await listDataPopUp(
page - 1,
showData,
"",
categoryFilter?.sort().join(","),
statusFilter?.sort().join(",")
);
const data = response?.data?.data?.content;
console.log("banner", data);
setGetData(data);
// const response = await listDataPopUp(
// page - 1,
// showData,
// "",
// categoryFilter?.sort().join(","),
// statusFilter?.sort().join(",")
// );
// const data = response?.data?.data?.content;
// console.log("banner", data);
// setGetData(data);
const response = await listBanner();
const data = response?.data?.data?.content;
console.log("banner", data);
setGetData(data);
close();
}

View File

@ -94,9 +94,10 @@ const ContentListPopUp = () => {
const [selectedItems, setSelectedItems] = React.useState<number[]>([]);
const [page, setPage] = React.useState(1);
const [totalPage, setTotalPage] = React.useState(1);
const [searchQuery, setSearchQuery] = React.useState("");
let typingTimer: any;
const doneTypingInterval = 1500;
let typingTimer: NodeJS.Timeout;
const doneTypingInterval = 2000;
const handleKeyUp = () => {
clearTimeout(typingTimer);
@ -105,9 +106,16 @@ const ContentListPopUp = () => {
const handleKeyDown = () => {
clearTimeout(typingTimer);
typingTimer = setTimeout(doneTyping, doneTypingInterval);
typingTimer = setTimeout(() => {
setPage(1);
fetchData();
}, doneTypingInterval);
};
React.useEffect(() => {
fetchData();
}, [categoryFilter, statusFilter]);
async function doneTyping() {
fetchData();
}
@ -127,13 +135,40 @@ const ContentListPopUp = () => {
});
}, [page, showData]);
// async function fetchData() {
// try {
// loading();
// const res = await listDataPopUp(
// page - 1,
// showData,
// "",
// categoryFilter?.sort().join(","),
// statusFilter?.sort().join(",")
// );
// const data = res?.data?.data;
// const contentData = data?.content;
// contentData.forEach((item: any, index: number) => {
// item.no = (page - 1) * Number(showData) + index + 1;
// });
// console.log("contentData : ", data);
// setData(contentData);
// setTotalData(data?.totalElements);
// setTotalPage(data?.totalPages);
// close();
// } catch (error) {
// console.error("Error fetching tasks:", error);
// }
// }
async function fetchData() {
try {
loading();
const res = await listDataPopUp(
const res = await listDataMedia(
page - 1,
showData,
"",
searchQuery, // <-- gunakan nilai pencarian
categoryFilter?.sort().join(","),
statusFilter?.sort().join(",")
);
@ -224,10 +259,19 @@ const ContentListPopUp = () => {
<Input
type="text"
placeholder="Search"
onKeyUp={handleKeyUp}
onKeyDown={handleKeyDown}
value={searchQuery}
onChange={(e) => {
setSearchQuery(e.target.value);
handleKeyDown();
}}
onKeyDown={(e) => {
if (e.key === "Enter") {
fetchData();
}
}}
className="max-w-[300px]"
/>
{/* <div className="flex flex-row gap-2">
<DropdownMenu>
<DropdownMenuTrigger asChild>
@ -393,9 +437,12 @@ const ContentListPopUp = () => {
alt={item.title}
className="w-full h-48 object-cover"
/>
<div className="p-3">
<h4 className="font-semibold text-sm truncate">{item.title}</h4>
</div>
<Link
href={`/contributor/content/image/detail/${item?.id}`}
className="p-3"
>
<h4 className="font-semibold text-sm">{item.title}</h4>
</Link>
</div>
))}
</div>

View File

@ -120,7 +120,7 @@ const FilterPage = () => {
return () => clearTimeout(timer);
}, []);
React.useEffect(() => {
const pageFromUrl = searchParams?.get("page");
if (pageFromUrl) {
@ -323,10 +323,11 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -320,10 +320,11 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -320,10 +320,11 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -314,10 +314,11 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -319,14 +319,15 @@ const FilterPage = () => {
}
}
const handleCategoryFilter = (e: boolean, id: string) => {
const handleCategoryFilter = (e: boolean, id: string) => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -311,10 +311,11 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -303,14 +303,15 @@ const FilterPage = () => {
}
}
const handleCategoryFilter = (e: boolean, id: string) => {
const handleCategoryFilter = (e: boolean, id: string) => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -303,10 +303,11 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -325,10 +325,11 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -326,10 +326,11 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -102,7 +102,7 @@ const FilterPage = () => {
const [isFilterOpen, setIsFilterOpen] = useState(true);
const poldaName = params?.polda_name;
const satkerName = params?.satker_name;
const [categoryPage, setCategoryPage] = useState(1);
const [categoryPage, setCategoryPage] = useState(1);
const [categoryTotalPages, setCategoryTotalPages] = useState(1);
// const [startDate, endDate] = dateRange;
@ -217,7 +217,7 @@ const FilterPage = () => {
"",
isInt,
pageNumber
);
);
const content = response?.data?.data?.content || [];
const total = response?.data?.data?.totalPages || 1;
@ -329,10 +329,11 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);

View File

@ -319,15 +319,16 @@ const FilterPage = () => {
let filter = [...categoryFilter];
if (e) {
filter = [...categoryFilter, String(id)];
filter = [...filter, String(id)];
} else {
filter.splice(categoryFilter.indexOf(id), 1);
filter = filter.filter((item) => item !== String(id));
}
console.log("checkbox filter", filter);
setCategoryFilter(filter);
router.push(`?category=${filter.join("&")}`);
};
const handleFormatFilter = (e: boolean, id: string) => {
let filter = [...formatFilter];

View File

@ -10,7 +10,7 @@ import Image from "next/image";
const regions = [
{ name: "ITWASUM POLRI", slug: "itwasum", logo: "/logo/satker/ITWASUM.png" },
{
name: "BAINTELKAM POLRI",
name: "BAINTELKAM POLRI ",
slug: "baintelkam",
logo: "/logo/satker/BAINTELKAM.png",
},

View File

@ -63,7 +63,7 @@ export async function getPublicCategoryData(
page: number = 1
) {
return await httpGetInterceptor(
`media/categories/list/publish?enablePage=1&size=12&page=${
`media/categories/list/publish?enablePage=1&size=12&sort=desc&sortBy=createdAt&page=${
page - 1
}&group=${group}&type=${type}&isInt=${isInt}`
);