+
+
+
handleRetypeChange(e.target.value)}
disabled={isSubmitting}
- type={showPassword.retype ? 'text' : 'password'}
+ maxLength={6}
/>
+
+ {/* Error message */}
+ {errorRetype && (
+
+
+ {errorRetype}
+
+ )}
- {/* Error message under Retype */}
- {errorRetype && (
-
{errorRetype}
- )}
-
- {/* Submit button */}
-
+ {/* Submit Button */}
+
diff --git a/src/pages/menu/manage-menu/hooks/ManageMenusContext.tsx b/src/pages/menu/manage-menu/hooks/ManageMenusContext.tsx
index b9bf885..58200ad 100644
--- a/src/pages/menu/manage-menu/hooks/ManageMenusContext.tsx
+++ b/src/pages/menu/manage-menu/hooks/ManageMenusContext.tsx
@@ -188,44 +188,50 @@ const ManageMenusContextProvider = ({ children }: { children: React.ReactNode })
[handleEditDialog, handleDeleteDialog]
);
+ // Fungsi helper untuk mengumpulkan semua parent nodes
+ const collectParents = (data: any[]) => {
+ const parentsList: any[] = [];
+
+ const traverse = (items: any[]) => {
+ items.forEach((item) => {
+ // Jika item memiliki children, maka dia adalah parent
+ if (item.children && item.children.length > 0) {
+ if (!parentsList.find((p) => p.id === item.id)) {
+ parentsList.push({ id: item.id, name: item.name });
+ }
+ // Rekursi untuk children
+ traverse(item.children);
+ }
+ });
+ };
+
+ traverse(data);
+ return parentsList;
+ };
+
const flattenChildren = (parent: any, parentIdx: number, depth = 0, parentName = '') => {
let result: any[] = [];
- if (parent.id_parent === null) {
- if (!parents.find((el: any) => el.id === parent.id))
- setParents((el: any) => [...el, { id: parent.id, name: parent.name }]);
-
- result.push({
- id: parent.id,
- module: parent.module,
- parentName: parentName || parent.name,
- name: parent.name,
- link: parent.link,
- id_parent: parent.id_parent,
- status: parent.status,
- order_number: parent.order_number
- });
- }
+ // Selalu tambahkan item saat ini ke result (baik parent maupun child)
+ result.push({
+ id: parent.id,
+ module: parent.module,
+ parentName: parentName,
+ name: parent.name,
+ link: parent.link,
+ id_parent: parent.id_parent,
+ status: parent.status,
+ order_number: parent.order_number
+ });
+ // Jika tidak ada children, return result
if (!parent.children || parent.children.length === 0) {
return result;
}
+ // Proses children secara rekursif
const childrenFlattened = parent.children.flatMap((child: any, childIdx: number) => {
- if (child.children && child.children.length > 0) {
- return flattenChildren(child, parentIdx * 100 + childIdx, depth + 1, child.name);
- }
-
- return {
- id: child.id,
- module: parent.module,
- parentName: parentName || parent.name,
- name: child.name,
- link: child.link,
- id_parent: child.id_parent,
- status: child.status,
- order_number: parent.order_number
- };
+ return flattenChildren(child, parentIdx * 100 + childIdx, depth + 1, parent.name);
});
return [...result, ...childrenFlattened];
@@ -237,7 +243,7 @@ const ManageMenusContextProvider = ({ children }: { children: React.ReactNode })
filter = filter.length === 0 ? {} : { name: { like: `%${filter[0].value?.toLowerCase()}%` } };
const query: any = {
- limit:100,
+ limit: 100,
page: 1,
with_deleted: false,
order_field: sorting[0].id,
@@ -254,15 +260,22 @@ const ManageMenusContextProvider = ({ children }: { children: React.ReactNode })
if (query.filter && query.filter.length > 0) {
return { data: response?.data.list, totalCount: response?.data.total_count };
} else {
+ // Reset parents array
+ setParents([]);
+
+ // Kumpulkan semua parents terlebih dahulu
+ const allParents = collectParents(response?.data.list || []);
+ setParents(allParents);
+
+ // Transform data dengan flatten
const transformedData = response?.data.list.flatMap((row: any, parentIdx: number) =>
flattenChildren(row, parentIdx)
);
const total_count = transformedData.length;
- // **Pagination di frontend saja (tanpa hit API ulang)**
+ // Pagination di frontend
const paginatedData = transformedData.slice(page * limit, (page + 1) * limit);
- const totalPages = Math.ceil(total_count / limit);
return { data: paginatedData, totalCount: total_count };
}