Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vcci-news-frontend
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Văn Hoàng
vcci-news-frontend
Commits
e614971d
Commit
e614971d
authored
Oct 20, 2026
by
Phạm Quang Bảo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: search param for pagination
parent
f2aa38ec
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
37 additions
and
39 deletions
+37
-39
DynamicPageClient.tsx
src/app/(main)/[...slug]/DynamicPageClient.tsx
+1
-0
AnPham.tsx
src/app/(main)/[...slug]/static-pages/AnPham.tsx
+12
-13
ThuVienTaiLieu.tsx
src/app/(main)/[...slug]/static-pages/ThuVienTaiLieu.tsx
+12
-13
index.tsx
src/app/(main)/[...slug]/templates/news-page/index.tsx
+12
-13
No files found.
src/app/(main)/[...slug]/DynamicPageClient.tsx
View file @
e614971d
...
@@ -321,6 +321,7 @@ export default function DynamicPageClient() {
...
@@ -321,6 +321,7 @@ export default function DynamicPageClient() {
if
(
resolvedCategory
?.
type
===
"news"
)
{
if
(
resolvedCategory
?.
type
===
"news"
)
{
return
(
return
(
<
NewsPage
<
NewsPage
key=
{
resolvedCategory
.
id
}
category=
{
resolvedCategory
}
category=
{
resolvedCategory
}
allCategories=
{
allCategories
}
allCategories=
{
allCategories
}
/>
/>
...
...
src/app/(main)/[...slug]/static-pages/AnPham.tsx
View file @
e614971d
...
@@ -32,22 +32,15 @@ export default function AnPham({ category, allCategories }: AnPhamProps) {
...
@@ -32,22 +32,15 @@ export default function AnPham({ category, allCategories }: AnPhamProps) {
const
pathname
=
usePathname
();
const
pathname
=
usePathname
();
const
searchParamsString
=
searchParams
.
toString
();
const
searchParamsString
=
searchParams
.
toString
();
const
initialPage
=
Number
(
searchParams
.
get
(
"page"
)
??
"1"
);
const
pageParam
=
Number
(
searchParams
.
get
(
"page"
)
??
"1"
);
const
[
searchInput
,
setSearchInput
]
=
useState
(
""
);
const
initialPage
=
Number
.
isFinite
(
pageParam
)
&&
pageParam
>
0
?
Math
.
floor
(
pageParam
)
:
1
;
const
[
submitSearch
,
setSubmitSearch
]
=
useState
(
""
);
const
initialQuery
=
searchParams
.
get
(
"q"
)
??
""
;
const
[
searchInput
,
setSearchInput
]
=
useState
(
initialQuery
);
const
[
submitSearch
,
setSubmitSearch
]
=
useState
(
initialQuery
);
const
[
page
,
setPage
]
=
useState
(
initialPage
);
const
[
page
,
setPage
]
=
useState
(
initialPage
);
const
pageSize
=
8
;
const
pageSize
=
8
;
const
keyword
=
submitSearch
.
trim
();
const
keyword
=
submitSearch
.
trim
();
// Auto-search with debounce
useEffect
(()
=>
{
const
timer
=
setTimeout
(()
=>
{
setSubmitSearch
(
searchInput
);
setPage
(
1
);
},
500
);
return
()
=>
clearTimeout
(
timer
);
},
[
searchInput
]);
useEffect
(()
=>
{
useEffect
(()
=>
{
const
params
=
new
URLSearchParams
(
searchParamsString
);
const
params
=
new
URLSearchParams
(
searchParamsString
);
if
(
page
>
1
)
{
if
(
page
>
1
)
{
...
@@ -56,6 +49,12 @@ export default function AnPham({ category, allCategories }: AnPhamProps) {
...
@@ -56,6 +49,12 @@ export default function AnPham({ category, allCategories }: AnPhamProps) {
params
.
delete
(
"page"
);
params
.
delete
(
"page"
);
}
}
if
(
keyword
)
{
params
.
set
(
"q"
,
keyword
);
}
else
{
params
.
delete
(
"q"
);
}
const
qs
=
params
.
toString
();
const
qs
=
params
.
toString
();
const
nextUrl
=
qs
?
`
${
pathname
}
?
${
qs
}
`
:
pathname
;
const
nextUrl
=
qs
?
`
${
pathname
}
?
${
qs
}
`
:
pathname
;
const
currentUrl
=
searchParamsString
?
`
${
pathname
}
?
${
searchParamsString
}
`
:
pathname
;
const
currentUrl
=
searchParamsString
?
`
${
pathname
}
?
${
searchParamsString
}
`
:
pathname
;
...
@@ -63,7 +62,7 @@ export default function AnPham({ category, allCategories }: AnPhamProps) {
...
@@ -63,7 +62,7 @@ export default function AnPham({ category, allCategories }: AnPhamProps) {
if
(
nextUrl
!==
currentUrl
)
{
if
(
nextUrl
!==
currentUrl
)
{
router
.
replace
(
nextUrl
,
{
scroll
:
false
});
router
.
replace
(
nextUrl
,
{
scroll
:
false
});
}
}
},
[
page
,
pathname
,
router
,
searchParamsString
]);
},
[
page
,
keyword
,
pathname
,
router
,
searchParamsString
]);
const
filters
=
[
const
filters
=
[
category
?.
id
?
`category.id==
${
category
.
id
}
`
:
null
,
category
?.
id
?
`category.id==
${
category
.
id
}
`
:
null
,
...
...
src/app/(main)/[...slug]/static-pages/ThuVienTaiLieu.tsx
View file @
e614971d
...
@@ -32,22 +32,15 @@ export default function ThuVienTaiLieu({ category, allCategories }: ThuVienTaiLi
...
@@ -32,22 +32,15 @@ export default function ThuVienTaiLieu({ category, allCategories }: ThuVienTaiLi
const
pathname
=
usePathname
();
const
pathname
=
usePathname
();
const
searchParamsString
=
searchParams
.
toString
();
const
searchParamsString
=
searchParams
.
toString
();
const
initialPage
=
Number
(
searchParams
.
get
(
"page"
)
??
"1"
);
const
pageParam
=
Number
(
searchParams
.
get
(
"page"
)
??
"1"
);
const
[
searchInput
,
setSearchInput
]
=
useState
(
""
);
const
initialPage
=
Number
.
isFinite
(
pageParam
)
&&
pageParam
>
0
?
Math
.
floor
(
pageParam
)
:
1
;
const
[
submitSearch
,
setSubmitSearch
]
=
useState
(
""
);
const
initialQuery
=
searchParams
.
get
(
"q"
)
??
""
;
const
[
searchInput
,
setSearchInput
]
=
useState
(
initialQuery
);
const
[
submitSearch
,
setSubmitSearch
]
=
useState
(
initialQuery
);
const
[
page
,
setPage
]
=
useState
(
initialPage
);
const
[
page
,
setPage
]
=
useState
(
initialPage
);
const
pageSize
=
8
;
const
pageSize
=
8
;
const
keyword
=
submitSearch
.
trim
();
const
keyword
=
submitSearch
.
trim
();
// Auto-search with debounce
useEffect
(()
=>
{
const
timer
=
setTimeout
(()
=>
{
setSubmitSearch
(
searchInput
);
setPage
(
1
);
},
500
);
return
()
=>
clearTimeout
(
timer
);
},
[
searchInput
]);
useEffect
(()
=>
{
useEffect
(()
=>
{
const
params
=
new
URLSearchParams
(
searchParamsString
);
const
params
=
new
URLSearchParams
(
searchParamsString
);
if
(
page
>
1
)
{
if
(
page
>
1
)
{
...
@@ -56,6 +49,12 @@ export default function ThuVienTaiLieu({ category, allCategories }: ThuVienTaiLi
...
@@ -56,6 +49,12 @@ export default function ThuVienTaiLieu({ category, allCategories }: ThuVienTaiLi
params
.
delete
(
"page"
);
params
.
delete
(
"page"
);
}
}
if
(
keyword
)
{
params
.
set
(
"q"
,
keyword
);
}
else
{
params
.
delete
(
"q"
);
}
const
qs
=
params
.
toString
();
const
qs
=
params
.
toString
();
const
nextUrl
=
qs
?
`
${
pathname
}
?
${
qs
}
`
:
pathname
;
const
nextUrl
=
qs
?
`
${
pathname
}
?
${
qs
}
`
:
pathname
;
const
currentUrl
=
searchParamsString
?
`
${
pathname
}
?
${
searchParamsString
}
`
:
pathname
;
const
currentUrl
=
searchParamsString
?
`
${
pathname
}
?
${
searchParamsString
}
`
:
pathname
;
...
@@ -63,7 +62,7 @@ export default function ThuVienTaiLieu({ category, allCategories }: ThuVienTaiLi
...
@@ -63,7 +62,7 @@ export default function ThuVienTaiLieu({ category, allCategories }: ThuVienTaiLi
if
(
nextUrl
!==
currentUrl
)
{
if
(
nextUrl
!==
currentUrl
)
{
router
.
replace
(
nextUrl
,
{
scroll
:
false
});
router
.
replace
(
nextUrl
,
{
scroll
:
false
});
}
}
},
[
page
,
pathname
,
router
,
searchParamsString
]);
},
[
page
,
keyword
,
pathname
,
router
,
searchParamsString
]);
const
filters
=
[
const
filters
=
[
category
?.
id
?
`category.id==
${
category
.
id
}
`
:
null
,
category
?.
id
?
`category.id==
${
category
.
id
}
`
:
null
,
...
...
src/app/(main)/[...slug]/templates/news-page/index.tsx
View file @
e614971d
...
@@ -57,22 +57,15 @@ export default function NewsPage({ category, allCategories }: NewsPageProps) {
...
@@ -57,22 +57,15 @@ export default function NewsPage({ category, allCategories }: NewsPageProps) {
const
pathname
=
usePathname
();
const
pathname
=
usePathname
();
const
searchParamsString
=
searchParams
.
toString
();
const
searchParamsString
=
searchParams
.
toString
();
const
initialPage
=
Number
(
searchParams
.
get
(
"page"
)
??
"1"
);
const
pageParam
=
Number
(
searchParams
.
get
(
"page"
)
??
"1"
);
const
[
searchInput
,
setSearchInput
]
=
useState
(
""
);
const
initialPage
=
Number
.
isFinite
(
pageParam
)
&&
pageParam
>
0
?
Math
.
floor
(
pageParam
)
:
1
;
const
[
submitSearch
,
setSubmitSearch
]
=
useState
(
""
);
const
initialQuery
=
searchParams
.
get
(
"q"
)
??
""
;
const
[
searchInput
,
setSearchInput
]
=
useState
(
initialQuery
);
const
[
submitSearch
,
setSubmitSearch
]
=
useState
(
initialQuery
);
const
[
page
,
setPage
]
=
useState
(
initialPage
);
const
[
page
,
setPage
]
=
useState
(
initialPage
);
const
pageSize
=
10
;
const
pageSize
=
10
;
const
keyword
=
submitSearch
.
trim
();
const
keyword
=
submitSearch
.
trim
();
// Auto-search with debounce
useEffect
(()
=>
{
const
timer
=
setTimeout
(()
=>
{
setSubmitSearch
(
searchInput
);
setPage
(
1
);
},
500
);
return
()
=>
clearTimeout
(
timer
);
},
[
searchInput
]);
useEffect
(()
=>
{
useEffect
(()
=>
{
const
params
=
new
URLSearchParams
(
searchParamsString
);
const
params
=
new
URLSearchParams
(
searchParamsString
);
if
(
page
>
1
)
{
if
(
page
>
1
)
{
...
@@ -81,6 +74,12 @@ export default function NewsPage({ category, allCategories }: NewsPageProps) {
...
@@ -81,6 +74,12 @@ export default function NewsPage({ category, allCategories }: NewsPageProps) {
params
.
delete
(
"page"
);
params
.
delete
(
"page"
);
}
}
if
(
keyword
)
{
params
.
set
(
"q"
,
keyword
);
}
else
{
params
.
delete
(
"q"
);
}
const
qs
=
params
.
toString
();
const
qs
=
params
.
toString
();
const
nextUrl
=
qs
?
`
${
pathname
}
?
${
qs
}
`
:
pathname
;
const
nextUrl
=
qs
?
`
${
pathname
}
?
${
qs
}
`
:
pathname
;
const
currentUrl
=
searchParamsString
?
`
${
pathname
}
?
${
searchParamsString
}
`
:
pathname
;
const
currentUrl
=
searchParamsString
?
`
${
pathname
}
?
${
searchParamsString
}
`
:
pathname
;
...
@@ -88,7 +87,7 @@ export default function NewsPage({ category, allCategories }: NewsPageProps) {
...
@@ -88,7 +87,7 @@ export default function NewsPage({ category, allCategories }: NewsPageProps) {
if
(
nextUrl
!==
currentUrl
)
{
if
(
nextUrl
!==
currentUrl
)
{
router
.
replace
(
nextUrl
,
{
scroll
:
false
});
router
.
replace
(
nextUrl
,
{
scroll
:
false
});
}
}
},
[
page
,
pathname
,
router
,
searchParamsString
]);
},
[
page
,
keyword
,
pathname
,
router
,
searchParamsString
]);
const
filters
=
`category.id==
${
category
.
id
}${
keyword
?
`,title@=
${
keyword
}
`
:
""
}
,is_hidden==false,is_active==true,type==news`
;
const
filters
=
`category.id==
${
category
.
id
}${
keyword
?
`,title@=
${
keyword
}
`
:
""
}
,is_hidden==false,is_active==true,type==news`
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment