diff --git a/app/(admin)/admin/master-user-level/page.tsx b/app/(admin)/admin/master-user-level/page.tsx
index cb67e53..864f469 100644
--- a/app/(admin)/admin/master-user-level/page.tsx
+++ b/app/(admin)/admin/master-user-level/page.tsx
@@ -1,13 +1,14 @@
-import MagazineTable from '@/components/table/magazine/magazine-table'
-import MenuDataTable from '@/components/table/master/master-menu/menu-data/menu-data-table'
-import MasterModuleTable from '@/components/table/master/master-module/master-module-table'
-import MasterUserLevelTable from '@/components/table/master/master-user-level/master-user-level-table'
-import React from 'react'
+import MappingUserLevel from "@/components/table/master/master-user-level/mapping-user-level";
+import MasterUserLevelTable from "@/components/table/master/master-user-level/master-user-level-table";
+import React from "react";
const AdminMasterUserLevel = () => {
- return (
-
- )
-}
+ return (
+ //
+
+
+
+ );
+};
-export default AdminMasterUserLevel
\ No newline at end of file
+export default AdminMasterUserLevel;
diff --git a/components/table/master/master-user-level/mapping-user-level.tsx b/components/table/master/master-user-level/mapping-user-level.tsx
new file mode 100644
index 0000000..244f61b
--- /dev/null
+++ b/components/table/master/master-user-level/mapping-user-level.tsx
@@ -0,0 +1,170 @@
+"use client";
+import {
+ createUserLevel,
+ editUserLevel,
+ getUserLevel,
+} from "@/service/master-user-level";
+import { Button } from "@nextui-org/button";
+import { RootRaws } from "postcss/lib/root";
+import React, { useEffect, useState } from "react";
+
+// Define the shape of the parsed data
+interface CSVRow {
+ id: string;
+ parent: string;
+ name: string;
+ level_number: string;
+ group: string;
+}
+
+export default function MappingUserLevel() {
+ const [parsedData, setParsedData] = useState(null);
+ const [level2, setLevel2] = useState();
+
+ // Function to parse the CSV data
+ function parseCSV(csvText: string): CSVRow[] {
+ const rows = csvText.split("\n");
+ const headers = rows[0].split("\t"); // Assuming tab-delimited CSV
+ const data: CSVRow[] = [];
+
+ for (let i = 1; i < rows.length; i++) {
+ const row = rows[i].split("\t");
+
+ // Skip empty rows or rows that don't have the correct number of columns
+ if (
+ row.length === headers.length &&
+ row.some((cell) => cell.trim() !== "")
+ ) {
+ const temp = row[0].split(";");
+
+ if (temp[0] !== "") {
+ temp[4].replace("/r", "");
+
+ const rowData: CSVRow = {
+ id: temp[0],
+ parent: temp[1],
+ name: temp[2],
+ level_number: temp[3],
+ group: temp[4].replace("\r", ""),
+ };
+ if (i <= 3) {
+ console.log("i", rowData);
+ }
+ data.push(rowData);
+ }
+ }
+ }
+ return data;
+ }
+
+ // Handle the file input change event
+ const handleFileChange = (event: React.ChangeEvent) => {
+ const file = event.target.files?.[0];
+ if (file) {
+ const reader = new FileReader();
+ reader.onload = function (e) {
+ const csvText = e.target?.result as string;
+ const data = parseCSV(csvText);
+ console.log("data", data);
+ setParsedData(data);
+ };
+ reader.readAsText(file);
+ }
+ };
+
+ const doPostData = async () => {
+ if (parsedData) {
+ let level2Now = undefined;
+
+ for (let i = 0; i < parsedData.length; i++) {
+ const temp = parsedData[i];
+ if (temp.level_number === "2") {
+ const request = {
+ aliasName: temp.group,
+ isActive: true,
+ levelNumber: 2,
+ name: temp.name,
+ parentLevelId: 79,
+ provinceId: 0,
+ };
+ const res = await createUserLevel(request);
+ if (res?.error) {
+ break;
+ }
+ setLevel2(res?.data?.data?.id);
+ console.log("res?.data?.data?.id", res?.data?.data?.id);
+ level2Now = res?.data?.data?.id;
+ } else if (temp.level_number === "3") {
+ const request = {
+ aliasName: temp.group,
+ isActive: true,
+ levelNumber: 3,
+ name: temp.name,
+ parentLevelId: level2 || level2Now,
+ provinceId: 0,
+ };
+ console.log("reqqq", request);
+ const res = await createUserLevel(request);
+ if (res?.error) {
+ break;
+ }
+ } else {
+ console.log("data", temp);
+ // const request = {
+ // aliasName: temp.group,
+ // isActive: true,
+ // levelNumber: 1,
+ // name: temp.name,
+ // parentLevelId: 1,
+ // provinceId: 0,
+ // };
+ // const res = await createUserLevel(request);
+ // console.log("ress", res?.data?.data?.id);
+ }
+ }
+ }
+ };
+
+ useEffect(() => {
+ initFecth();
+ }, []);
+
+ const initFecth = async () => {
+ const res = await getUserLevel();
+ const data = res?.data?.data;
+ console.log("dataa", data);
+ // for (const element of data) {
+ // if (element.aliasName === "satker") {
+ // console.log("namanya", element.id);
+ // const request = {
+ // aliasName: element.aliasName,
+ // levelNumber: 2,
+ // name: element.name,
+ // parentLevelId: 692,
+ // provinceId: 0,
+ // };
+ // console.log("reqq", request);
+ // const response = await editUserLevel(request, element.id);
+ // if (response?.error) {
+ // break;
+ // }
+ // }
+ // }
+ };
+ return (
+
+
Mapping User Level
+
+ {/* File input */}
+
+
+ {/* Display parsed data */}
+ {parsedData && (
+
+
Parsed Data:
+
{JSON.stringify(parsedData, null, 2)}
+
+ )}
+
+ );
+}
diff --git a/service/master-user-level.ts b/service/master-user-level.ts
new file mode 100644
index 0000000..dcf1013
--- /dev/null
+++ b/service/master-user-level.ts
@@ -0,0 +1,29 @@
+import {
+ httpDeleteInterceptor,
+ httpGet,
+ httpPost,
+ httpPut,
+} from "./http-config/axios-base-service";
+
+export async function createUserLevel(data: any) {
+ const headers = {
+ "content-type": "application/json",
+ };
+ const pathUrl = `/user-levels`;
+ return await httpPost(pathUrl, headers, data);
+}
+
+export async function getUserLevel() {
+ const headers = {
+ "content-type": "application/json",
+ };
+ return await httpGet(`/user-levels?levelNumber=2&parentLevelId=79`, headers);
+}
+
+export async function editUserLevel(data: any, id: number) {
+ const headers = {
+ "content-type": "application/json",
+ };
+ const pathUrl = `/user-levels/${id}`;
+ return await httpPut(pathUrl, headers, data);
+}