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); +}