diff --git a/frontend/admin-panel/src/pages/Users.tsx b/frontend/admin-panel/src/pages/Users.tsx
index 9a45285..afab8cb 100644
--- a/frontend/admin-panel/src/pages/Users.tsx
+++ b/frontend/admin-panel/src/pages/Users.tsx
@@ -103,50 +103,6 @@ export default function Users() {
const [isDeleting, setIsDeleting] = useState(false);
const [isAdjustingWallet, setIsAdjustingWallet] = useState(false);
- const fetchUsers = useCallback(async () => {
- try {
- setIsLoading(true);
- const params = new URLSearchParams();
- params.append('page', page.toString());
- params.append('limit', '10');
- if (search) params.append('search', search);
- if (role) params.append('role', role);
-
- const response = await api.get(`/admin/users?${params.toString()}`);
- if (response.data?.success) {
- const userList = response.data.data || [];
- setUsers(userList);
- setTotalPages(response.data.meta?.lastPage || 1);
- setTotalCount(response.data.meta?.total || 0);
-
- const modalParam = searchParams.get('modal');
- const userId = searchParams.get('userId');
- if (modalParam === 'create') {
- handleOpenCreate();
- } else if (userId && userList.length > 0) {
- const found = userList.find((u: UserRecord) => u.id === userId);
- if (found) {
- if (modalParam === 'view') handleOpenView(found);
- else if (modalParam === 'edit') handleOpenEdit(found);
- else if (modalParam === 'wallet') handleOpenWallet(found);
- }
- }
- }
- } catch (err) {
- console.error('Failed to fetch users', err);
- } finally {
- setIsLoading(false);
- }
- }, [page, search, role, searchParams]);
-
- useEffect(() => {
- const delayDebounceFn = setTimeout(() => {
- fetchUsers();
- }, 400);
-
- return () => clearTimeout(delayDebounceFn);
- }, [fetchUsers]);
-
// Open View Modal
const handleOpenView = (user: UserRecord) => {
setViewUser(user);
@@ -209,7 +165,49 @@ export default function Users() {
setUserToDelete(null);
};
+ const fetchUsers = useCallback(async () => {
+ try {
+ setIsLoading(true);
+ const params = new URLSearchParams();
+ params.append('page', page.toString());
+ params.append('limit', '10');
+ if (search) params.append('search', search);
+ if (role) params.append('role', role);
+ const response = await api.get(`/admin/users?${params.toString()}`);
+ if (response.data?.success) {
+ const userList = response.data.data || [];
+ setUsers(userList);
+ setTotalPages(response.data.meta?.lastPage || 1);
+ setTotalCount(response.data.meta?.total || 0);
+
+ const modalParam = searchParams.get('modal');
+ const userId = searchParams.get('userId');
+ if (modalParam === 'create') {
+ handleOpenCreate();
+ } else if (userId && userList.length > 0) {
+ const found = userList.find((u: UserRecord) => u.id === userId);
+ if (found) {
+ if (modalParam === 'view') handleOpenView(found);
+ else if (modalParam === 'edit') handleOpenEdit(found);
+ else if (modalParam === 'wallet') handleOpenWallet(found);
+ }
+ }
+ }
+ } catch (err) {
+ console.error('Failed to fetch users', err);
+ } finally {
+ setIsLoading(false);
+ }
+ }, [page, search, role, searchParams]);
+
+ useEffect(() => {
+ const delayDebounceFn = setTimeout(() => {
+ fetchUsers();
+ }, 400);
+
+ return () => clearTimeout(delayDebounceFn);
+ }, [fetchUsers]);
// Create User
const handleCreateUser = async (e: React.FormEvent) => {
diff --git a/frontend/admin-panel/src/pages/Wiki.tsx b/frontend/admin-panel/src/pages/Wiki.tsx
index 4d71456..13c1186 100644
--- a/frontend/admin-panel/src/pages/Wiki.tsx
+++ b/frontend/admin-panel/src/pages/Wiki.tsx
@@ -62,6 +62,35 @@ export default function Wiki() {
keywords: ''
});
+ const openModal = (term: WikiTerm | null = null) => {
+ if (term) {
+ setEditingTerm(term);
+ updateUrlParams({ modal: 'edit', termKey: term.key });
+ setFormData({
+ key: term.key,
+ term: term.term,
+ definition: term.definition,
+ relatedProducts: Array.isArray(term.relatedProducts) ? term.relatedProducts : [],
+ wikiId: term.wikiId || 'general',
+ metaTitle: term.metaTitle || '',
+ metaDescription: term.metaDescription || '',
+ keywords: term.keywords || ''
+ });
+ } else {
+ setEditingTerm(null);
+ updateUrlParams({ modal: 'create', termKey: undefined });
+ setFormData({
+ key: '', term: '', definition: '', relatedProducts: [], wikiId: 'general', metaTitle: '', metaDescription: '', keywords: ''
+ });
+ }
+ setIsModalOpen(true);
+ };
+
+ const closeModal = () => {
+ setIsModalOpen(false);
+ updateUrlParams({ modal: undefined, termKey: undefined });
+ };
+
const fetchTerms = useCallback(async () => {
try {
setIsLoading(true);
@@ -132,34 +161,6 @@ export default function Wiki() {
.catch(err => console.error(err));
}, []);
- const openModal = (term: WikiTerm | null = null) => {
- if (term) {
- setEditingTerm(term);
- updateUrlParams({ modal: 'edit', termKey: term.key });
- setFormData({
- key: term.key,
- term: term.term,
- definition: term.definition,
- relatedProducts: Array.isArray(term.relatedProducts) ? term.relatedProducts : [],
- wikiId: term.wikiId || 'general',
- metaTitle: term.metaTitle || '',
- metaDescription: term.metaDescription || '',
- keywords: term.keywords || ''
- });
- } else {
- setEditingTerm(null);
- updateUrlParams({ modal: 'create', termKey: undefined });
- setFormData({
- key: '', term: '', definition: '', relatedProducts: [], wikiId: 'general', metaTitle: '', metaDescription: '', keywords: ''
- });
- }
- setIsModalOpen(true);
- };
-
- const closeModal = () => {
- setIsModalOpen(false);
- updateUrlParams({ modal: undefined, termKey: undefined });
- };
return (