diff --git a/src/app/api/get-cookie/route.ts b/src/app/api/get-cookie/route.ts
new file mode 100644
index 00000000..8b4959b8
--- /dev/null
+++ b/src/app/api/get-cookie/route.ts
@@ -0,0 +1,15 @@
+import { cookies } from 'next/headers'
+import { NextResponse } from 'next/server';
+
+export const dynamic = "force-dynamic";
+export async function GET(request: Request) {
+ try {
+ const cookiesKey = process.env.NEXT_PUBLIC_BASE_SESSION_KEY!
+ const cookieStore = cookies();
+ const hipmiKey = cookieStore.get(cookiesKey)?.value || '';
+ return NextResponse.json({ token: hipmiKey });
+ } catch (error) {
+ console.error(error);
+ return NextResponse.json({ error }, { status: 500 });
+ }
+}
\ No newline at end of file
diff --git a/src/app/api/image/delete/route.ts b/src/app/api/image/delete/route.ts
index a38d0e37..dcf3f89b 100644
--- a/src/app/api/image/delete/route.ts
+++ b/src/app/api/image/delete/route.ts
@@ -4,6 +4,8 @@ import { NextResponse } from "next/server";
export async function DELETE(req: Request) {
const data = await req.json();
+
+ console.log("data request =>", data);
const id = data.fileId;
const dirId = data.dirId;
@@ -25,9 +27,7 @@ export async function DELETE(req: Request) {
backendLogger.info("Server status code: " + res.status);
const data = await res.json();
if (res.ok) {
- backendLogger.info(
- `Success delete ${keyOfDirectory}`
- );
+ backendLogger.info(`Success delete ${keyOfDirectory}`);
return NextResponse.json({ success: true });
} else {
const errorText = await res.json();
diff --git a/src/app/api/new/portofolio/[id]/route.ts b/src/app/api/new/portofolio/[id]/route.ts
index 747cabd0..24a7497f 100644
--- a/src/app/api/new/portofolio/[id]/route.ts
+++ b/src/app/api/new/portofolio/[id]/route.ts
@@ -1,173 +1,234 @@
-import { prisma } from "@/app/lib";
+import { DIRECTORY_ID, prisma } from "@/app/lib";
import { NextResponse } from "next/server";
import fs from "fs";
+import { funGlobal_DeleteFileById } from "@/app_modules/_global/fun";
+import { apiDeleteImageById } from "@/app_modules/_global/lib/api_image";
+import backendLogger from "@/util/backendLogger";
export const dynamic = "force-dynamic";
-
-
// GET ONE DATA PORTOFOLIO BY ID PORTOFOLIO
-export async function GET(request: Request, context: { params: { id: string } }) {
- try {
- let dataFix
- const { id } = context.params;
- const { searchParams } = new URL(request.url);
- const kategori = searchParams.get('cat');
+export async function GET(
+ request: Request,
+ context: { params: { id: string } }
+) {
+ try {
+ let dataFix;
+ const { id } = context.params;
+ const { searchParams } = new URL(request.url);
+ const kategori = searchParams.get("cat");
- if (kategori == "bisnis") {
- const data = await prisma.portofolio.findUnique({
- where: {
- id: id,
- },
+ if (kategori == "bisnis") {
+ const data = await prisma.portofolio.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ id_Portofolio: true,
+ namaBisnis: true,
+ alamatKantor: true,
+ tlpn: true,
+ deskripsi: true,
+ logoId: true,
+ MasterBidangBisnis: {
select: {
- id_Portofolio: true,
- namaBisnis: true,
- alamatKantor: true,
- tlpn: true,
- deskripsi: true,
- logoId: true,
- MasterBidangBisnis: {
- select: {
- name: true
- }
- },
- Profile: {
- select: {
- userId: true
- }
- }
- }
- });
-
- dataFix = {
- id_Portofolio: data?.id_Portofolio,
- namaBisnis: data?.namaBisnis,
- alamatKantor: data?.alamatKantor,
- tlpn: data?.tlpn,
- deskripsi: data?.deskripsi,
- logoId: data?.logoId,
- bidangBisnis: data?.MasterBidangBisnis?.name,
- authorId: data?.Profile?.userId
- }
-
- } else if (kategori == "lokasi") {
- const data = await prisma.portofolio.findUnique({
- where: {
- id: id,
+ name: true,
},
+ },
+ Profile: {
select: {
- logoId: true,
- BusinessMaps: {
- select: {
- id: true,
- namePin: true,
- latitude: true,
- longitude: true,
- imageId: true,
- pinId: true
- }
- }
- }
- });
-
- dataFix = {
- mapId: data?.BusinessMaps?.id,
- logoId: data?.logoId,
- namePin: data?.BusinessMaps?.namePin,
- latitude: data?.BusinessMaps?.latitude,
- longitude: data?.BusinessMaps?.longitude,
- imageId: data?.BusinessMaps?.imageId,
- pinId: data?.BusinessMaps?.pinId
- }
-
- } else if (kategori == "sosmed") {
- const data = await prisma.portofolio.findUnique({
- where: {
- id: id,
+ userId: true,
},
+ },
+ },
+ });
+
+ dataFix = {
+ id_Portofolio: data?.id_Portofolio,
+ namaBisnis: data?.namaBisnis,
+ alamatKantor: data?.alamatKantor,
+ tlpn: data?.tlpn,
+ deskripsi: data?.deskripsi,
+ logoId: data?.logoId,
+ bidangBisnis: data?.MasterBidangBisnis?.name,
+ authorId: data?.Profile?.userId,
+ };
+ } else if (kategori == "lokasi") {
+ const data = await prisma.portofolio.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ logoId: true,
+ BusinessMaps: {
select: {
- Portofolio_MediaSosial: {
- select: {
- facebook: true,
- twitter: true,
- instagram: true,
- tiktok: true,
- youtube: true
- }
- }
- }
- });
+ id: true,
+ namePin: true,
+ latitude: true,
+ longitude: true,
+ imageId: true,
+ pinId: true,
+ },
+ },
+ },
+ });
- dataFix = {
- facebook: data?.Portofolio_MediaSosial?.facebook,
- twitter: data?.Portofolio_MediaSosial?.twitter,
- instagram: data?.Portofolio_MediaSosial?.instagram,
- tiktok: data?.Portofolio_MediaSosial?.tiktok,
- youtube: data?.Portofolio_MediaSosial?.youtube
- }
- }
+ dataFix = {
+ mapId: data?.BusinessMaps?.id,
+ logoId: data?.logoId,
+ namePin: data?.BusinessMaps?.namePin,
+ latitude: data?.BusinessMaps?.latitude,
+ longitude: data?.BusinessMaps?.longitude,
+ imageId: data?.BusinessMaps?.imageId,
+ pinId: data?.BusinessMaps?.pinId,
+ };
+ } else if (kategori == "sosmed") {
+ const data = await prisma.portofolio.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ Portofolio_MediaSosial: {
+ select: {
+ facebook: true,
+ twitter: true,
+ instagram: true,
+ tiktok: true,
+ youtube: true,
+ },
+ },
+ },
+ });
- return NextResponse.json({ success: true, message: "Berhasil mendapatkan data", data: dataFix }, { status: 200 });
+ dataFix = {
+ facebook: data?.Portofolio_MediaSosial?.facebook,
+ twitter: data?.Portofolio_MediaSosial?.twitter,
+ instagram: data?.Portofolio_MediaSosial?.instagram,
+ tiktok: data?.Portofolio_MediaSosial?.tiktok,
+ youtube: data?.Portofolio_MediaSosial?.youtube,
+ };
+ }
- } catch (error) {
- console.error(error);
- return NextResponse.json({ success: false, message: "Gagal mendapatkan data, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 });
- }
+ return NextResponse.json(
+ { success: true, message: "Berhasil mendapatkan data", data: dataFix },
+ { status: 200 }
+ );
+ } catch (error) {
+ console.error(error);
+ return NextResponse.json(
+ {
+ success: false,
+ message: "Gagal mendapatkan data, coba lagi nanti (error: 500)",
+ reason: (error as Error).message,
+ },
+ { status: 500 }
+ );
+ }
}
// DELETE ONE DATA PORTOFOLIO
-export async function DELETE(request: Request, context: { params: { id: string } }) {
- try {
- const { id } = context.params
+export async function DELETE(
+ request: Request,
+ context: { params: { id: string } }
+) {
+ try {
+ const { id } = context.params;
- const data = await prisma.portofolio.findUnique({
- where: {
- id: id
- }
- })
+ const data = await prisma.portofolio.findUnique({
+ where: {
+ id: id,
+ },
+ include: {
+ BusinessMaps: {
+ select: {
+ pinId: true,
+ imageId: true,
+ },
+ },
+ },
+ });
- const findLogo = await prisma.images.findFirst({
- where: {
- id: String(data?.logoId),
- },
- select: {
- id: true,
- url: true,
- },
- });
+ try {
+ const id = data?.logoId;
+ const deleteLogo = await fetch(
+ `https://wibu-storage.wibudev.com/api/files/${id}/delete`,
+ {
+ method: "DELETE",
+ headers: {
+ Authorization: `Bearer ${process.env.WS_APIKEY}`,
+ },
+ }
+ );
- if (findLogo) {
- fs.unlinkSync(`./public/portofolio/logo/${findLogo.url}`)
- const deleteLogo = await prisma.images.delete({
- where: {
- id: String(findLogo?.id),
- },
- });
+ if (deleteLogo.ok) {
+ backendLogger.info(`Success delete logo`);
}
+ if (data?.BusinessMaps?.pinId != null) {
+ const pinId = data?.BusinessMaps?.pinId;
+ const deletePin = await fetch(
+ `https://wibu-storage.wibudev.com/api/files/${pinId}/delete`,
+ {
+ method: "DELETE",
+ headers: {
+ Authorization: `Bearer ${process.env.WS_APIKEY}`,
+ },
+ }
+ );
+ if (deletePin.ok) {
+ backendLogger.info(`Success delete pin`);
+ }
- const deletePortoMedsos = await prisma.portofolio_MediaSosial.delete({
- where: {
- portofolioId: id,
- },
- });
+ const imageId = data?.BusinessMaps?.imageId;
+ const deleteImage = await fetch(
+ `https://wibu-storage.wibudev.com/api/files/${imageId}/delete`,
+ {
+ method: "DELETE",
+ headers: {
+ Authorization: `Bearer ${process.env.WS_APIKEY}`,
+ },
+ }
+ );
- const deleteMap = await prisma.businessMaps.delete({
- where: {
- portofolioId: id
- }
- })
+ if (deleteImage.ok) {
+ backendLogger.info(`Success delete image`);
+ }
+ }
+ } catch (error) {
+ backendLogger.error("Error delete logo", error);
+ }
- const deletePortofolio = await prisma.portofolio.delete({
- where: {
- id: id,
- },
- });
+ const deletePortoMedsos = await prisma.portofolio_MediaSosial.delete({
+ where: {
+ portofolioId: id,
+ },
+ });
- return NextResponse.json({ success: true, message: "Berhasil menghapus data" }, { status: 200 });
+ const deleteMap = await prisma.businessMaps.delete({
+ where: {
+ portofolioId: id,
+ },
+ });
- } catch (error) {
- console.error(error);
- return NextResponse.json({ success: false, message: "Gagal menghapus data, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 });
- }
-}
\ No newline at end of file
+ const deletePortofolio = await prisma.portofolio.delete({
+ where: {
+ id: id,
+ },
+ });
+
+ return NextResponse.json(
+ { success: true, message: "Berhasil menghapus data" },
+ { status: 200 }
+ );
+ } catch (error) {
+ console.error(error);
+ return NextResponse.json(
+ {
+ success: false,
+ message: "Gagal menghapus data, coba lagi nanti (error: 500)",
+ reason: (error as Error).message,
+ },
+ { status: 500 }
+ );
+ }
+}
diff --git a/src/app/api/user-validate/route.ts b/src/app/api/user-validate/route.ts
new file mode 100644
index 00000000..8842f6f1
--- /dev/null
+++ b/src/app/api/user-validate/route.ts
@@ -0,0 +1,33 @@
+import { decrypt } from "@/app/auth/_lib/decrypt";
+import { prisma } from "@/app/lib";
+import { cookies } from 'next/headers'
+import { NextRequest, NextResponse } from "next/server";
+
+export const dynamic = "force-dynamic";
+
+export async function GET(req: NextRequest) {
+ const token = req.headers.get('Authorization')?.split(' ')[1];
+
+ const decripted = await decrypt({
+ token: token!,
+ encodedKey: process.env.NEXT_PUBLIC_BASE_TOKEN_KEY!
+ })
+
+ if (!decripted) {
+ return NextResponse.json({
+ success: false,
+ message: "Unauthorized"
+ }, { status: 401 })
+ }
+
+ const user = await prisma.user.findUnique({
+ where: {
+ id: decripted.id
+ }
+ })
+ return NextResponse.json({
+ success: true,
+ message: "Berhasil mendapatkan data",
+ data: user
+ })
+}
\ No newline at end of file
diff --git a/src/app/api/user/get/route.ts b/src/app/api/user/get-cookies/route.ts
similarity index 94%
rename from src/app/api/user/get/route.ts
rename to src/app/api/user/get-cookies/route.ts
index 258227c5..f59b5fe8 100644
--- a/src/app/api/user/get/route.ts
+++ b/src/app/api/user/get-cookies/route.ts
@@ -3,6 +3,8 @@ import _ from "lodash";
import { cookies } from "next/headers";
import { NextResponse } from "next/server";
+export const dynamic = "force-dynamic";
+
export async function GET() {
// const data = await req.text();
// console.log(data);
diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts
new file mode 100644
index 00000000..1ae5f208
--- /dev/null
+++ b/src/app/api/user/route.ts
@@ -0,0 +1,25 @@
+
+import { decrypt } from "@/app/auth/_lib/decrypt";
+import _ from "lodash";
+import { cookies } from "next/headers";
+import { NextResponse } from "next/server";
+
+export const dynamic = "force-dynamic";
+
+export async function GET() {
+ const c = cookies().get(process.env.NEXT_PUBLIC_BASE_SESSION_KEY!);
+
+ if (!c || !c?.value || _.isEmpty(c?.value) || _.isUndefined(c?.value)) {
+ return NextResponse.json({ status: 401, message: "Unauthorized" });
+ }
+
+ const token = c.value;
+ const dataUser = await decrypt({
+ token: token,
+ encodedKey: process.env.NEXT_PUBLIC_BASE_TOKEN_KEY!,
+ });
+
+ const id = dataUser?.id
+
+ return NextResponse.json({ status: 200, message: "OK", data: id });
+}
diff --git a/src/app/api/validation/route.ts b/src/app/api/validation/route.ts
index 6b420a9e..ba9c6587 100644
--- a/src/app/api/validation/route.ts
+++ b/src/app/api/validation/route.ts
@@ -5,12 +5,7 @@ import { NextResponse } from "next/server";
export async function GET(req: Request) {
const auth = req.headers.get("Authorization");
const token = auth?.split(" ")[1];
-
- console.log("validasi atas", token);
-
if (!token) return NextResponse.json({ success: false }, { status: 401 });
- console.log("validasi bawah", token);
-
return NextResponse.json({ success: true });
}
diff --git a/src/app/dev/katalog/[id]/page.tsx b/src/app/dev/katalog/[id]/page.tsx
index 98ab33e3..997d4b80 100644
--- a/src/app/dev/katalog/[id]/page.tsx
+++ b/src/app/dev/katalog/[id]/page.tsx
@@ -1,20 +1,8 @@
import { ViewKatalogNew } from "@/app_modules/katalog";
-export default async function Page({ params }: { params: { id: string } }) {
- // let profileId = params.id;
- // const userLoginId = await funGetUserIdByToken();
-
- // const listPorto = await funGetListPortofolio(profileId);
- // const dataProfile = await Profile_getOneProfileAndUserById(profileId);
-
+export default async function Page() {
return (
<>
- {/* */}
-
>
);
diff --git a/src/app/dev/portofolio/daftar-portofolio/[id]/page.tsx b/src/app/dev/portofolio/daftar-portofolio/[id]/page.tsx
index 2252757b..5b2146ad 100644
--- a/src/app/dev/portofolio/daftar-portofolio/[id]/page.tsx
+++ b/src/app/dev/portofolio/daftar-portofolio/[id]/page.tsx
@@ -1,16 +1,8 @@
import { ListDetailPortofolioNew } from "@/app_modules/katalog/portofolio";
-export default async function Page({ params }: { params: { id: string } }) {
- // const profileId = params.id;
- // const dataPortofolio = await portofolio_funGetAllDaftarByid({
- // profileId,
- // page: 1,
- // });
-
-
+export default async function Page() {
return (
<>
- {/* */}
>
);
diff --git a/src/app/dev/portofolio/main/[id]/page.tsx b/src/app/dev/portofolio/main/[id]/page.tsx
index ab45a811..741c8aff 100644
--- a/src/app/dev/portofolio/main/[id]/page.tsx
+++ b/src/app/dev/portofolio/main/[id]/page.tsx
@@ -1,19 +1,16 @@
+import { funGetUserIdByToken } from "@/app_modules/_global/fun/get";
import { Portofolio_UiDetailNew } from "@/app_modules/katalog/portofolio";
const mapboxToken = process.env.MAPBOX_TOKEN!;
-export default async function Page({ params }: { params: { id: string } }) {
- // const portofolioId = params.id;
- // const dataPortofolio = await portofolio_getOneById(portofolioId);
- // const userLoginId = await funGetUserIdByToken();
+export default async function Page() {
+ const userLoginId = await funGetUserIdByToken()
return (
<>
- {/* */}
-
+ userLoginId={userLoginId}
+ />
>
);
}
diff --git a/src/app_modules/_global/fun/get/fun_get_user_id_by_token.ts b/src/app_modules/_global/fun/get/fun_get_user_id_by_token.ts
index 799c46c4..cfbdb1e2 100644
--- a/src/app_modules/_global/fun/get/fun_get_user_id_by_token.ts
+++ b/src/app_modules/_global/fun/get/fun_get_user_id_by_token.ts
@@ -1,6 +1,5 @@
"use server";
-import { jwtVerify } from "jose";
import { cookies } from "next/headers";
import { decrypt } from "../../../../app/auth/_lib/decrypt";
@@ -16,21 +15,3 @@ export async function funGetUserIdByToken() {
return cekUser?.id;
}
-// async function decrypt({
-// token,
-// encodedKey,
-// }: {
-// token: string;
-// encodedKey: string;
-// }): Promise | null> {
-// try {
-// const enc = new TextEncoder().encode(encodedKey);
-// const { payload } = await jwtVerify(token, enc, {
-// algorithms: ["HS256"],
-// });
-// return (payload.user as Record) || null;
-// } catch (error) {
-// console.error("Gagal verifikasi session", error);
-// return null;
-// }
-// }
diff --git a/src/app_modules/_global/lib/api_image.ts b/src/app_modules/_global/lib/api_image.ts
new file mode 100644
index 00000000..23e35b78
--- /dev/null
+++ b/src/app_modules/_global/lib/api_image.ts
@@ -0,0 +1,16 @@
+export const apiDeleteImageById = async ({
+ fileId,
+ dirId,
+}: {
+ fileId: string;
+ dirId?: string;
+}) => {
+ const response = await fetch(`/api/image/delete`, {
+ method: "DELETE",
+ body: JSON.stringify({ fileId, dirId }),
+ });
+
+ console.log("delete api =>", await response.json());
+
+ return await response.json().catch(() => null);
+};
diff --git a/src/app_modules/_global/lib/api_user.ts b/src/app_modules/_global/lib/api_user.ts
index 7c868120..b21ad919 100644
--- a/src/app_modules/_global/lib/api_user.ts
+++ b/src/app_modules/_global/lib/api_user.ts
@@ -1,9 +1,39 @@
+export const apiGetUserId = async () => {
+ const { token } = await fetch("/api/get-cookie").then((res) => res.json());
+ if (!token) return await token.json().catch(() => null);
+
+ const response = await fetch(`/api/user`, {
+ headers: {
+ "Content-Type": "application/json",
+ Accept: "application/json",
+ "Access-Control-Allow-Origin": "*",
+ Authorization: `Bearer ${token}`,
+ },
+ });
+
+ console.log("Ini di pemanggilan API",await response.json());
+
+ if (!response.ok) return null;
+ const data: Record = await response.json();
+ return data;
+};
+
export const apiGetCookiesUser = async () => {
const response = await fetch(`/api/user/get`);
return await response.json().catch(() => null);
};
export const apiGetACtivationUser = async () => {
- const response = await fetch(`/api/user/activation`);
+ const { token } = await fetch("/api/get-cookie").then((res) => res.json());
+ if (!token) return await token.json().catch(() => null);
+
+ const response = await fetch(`/api/user/activation`, {
+ headers: {
+ "Content-Type": "application/json",
+ Accept: "application/json",
+ "Access-Control-Allow-Origin": "*",
+ Authorization: `Bearer ${token}`,
+ },
+ });
return await response.json().catch(() => null);
-};
\ No newline at end of file
+};
diff --git a/src/app_modules/home/component/body_home.tsx b/src/app_modules/home/component/body_home.tsx
index 456ee0b4..ebd7a75a 100644
--- a/src/app_modules/home/component/body_home.tsx
+++ b/src/app_modules/home/component/body_home.tsx
@@ -13,7 +13,7 @@ import {
Paper,
SimpleGrid,
Stack,
- Text
+ Text,
} from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
import { IconUserSearch } from "@tabler/icons-react";
@@ -22,6 +22,7 @@ import { useRouter } from "next/navigation";
import { useState } from "react";
import { apiGetDataHome } from "../fun/get/api_home";
import { listMenuHomeBody, menuHomeJob } from "./list_menu_home";
+import { clientLogger } from "@/util/clientLogger";
export default function BodyHome() {
const router = useRouter();
@@ -37,24 +38,31 @@ export default function BodyHome() {
async function cekUserLogin() {
try {
- const response = await apiGetDataHome("?cat=cek_profile");
- if (response.success) {
+ const response = await apiGetDataHome({
+ path: "?cat=cek_profile",
+ });
+
+ if (response) {
setDataUser(response.data);
}
} catch (error) {
- console.error(error);
+ clientLogger.error("Error get data user", error);
}
}
async function getHomeJob() {
try {
setLoadingJob(true);
- const response = await apiGetDataHome("?cat=job");
- if (response.success) {
+
+ const response = await apiGetDataHome({
+ path: "?cat=job",
+ });
+
+ if (response) {
setDataJob(response.data);
}
} catch (error) {
- console.error(error);
+ clientLogger.error("Error get data job", error);
} finally {
setLoadingJob(false);
}
@@ -197,12 +205,22 @@ export default function BodyHome() {
-
-
-
+
+
+
-
-
+
+
diff --git a/src/app_modules/home/component/footer_home.tsx b/src/app_modules/home/component/footer_home.tsx
index 7699a86e..de65b7db 100644
--- a/src/app_modules/home/component/footer_home.tsx
+++ b/src/app_modules/home/component/footer_home.tsx
@@ -17,6 +17,7 @@ import { apiGetDataHome } from "../fun/get/api_home";
import { Home_ComponentAvatarProfile } from "./comp_avatar_profile";
import { listMenuHomeFooter } from "./list_menu_home";
import { MainColor } from "@/app_modules/_global/color";
+import { clientLogger } from "@/util/clientLogger";
export default function FooterHome() {
const router = useRouter();
@@ -28,12 +29,14 @@ export default function FooterHome() {
async function cekUserLogin() {
try {
- const response = await apiGetDataHome("?cat=cek_profile");
- if (response.success) {
+ const response = await apiGetDataHome({
+ path: "?cat=cek_profile",
+ });
+ if (response) {
setDataUser(response.data);
}
} catch (error) {
- console.error(error);
+ clientLogger.error("Error get data profile",error);
}
}
@@ -104,7 +107,10 @@ export default function FooterHome() {
}
}}
>
-
+
{dataUser.profile === undefined || dataUser?.profile === null ? (
) : (
diff --git a/src/app_modules/home/fun/get/api_home.ts b/src/app_modules/home/fun/get/api_home.ts
index e55ec5eb..8600b3aa 100644
--- a/src/app_modules/home/fun/get/api_home.ts
+++ b/src/app_modules/home/fun/get/api_home.ts
@@ -1,4 +1,17 @@
-export const apiGetDataHome = async (path?: string) => {
- const response = await fetch(`/api/new/home${(path) ? path : ''}`)
- return await response.json().catch(() => null)
-}
\ No newline at end of file
+export const apiGetDataHome = async ({ path }: { path?: string }) => {
+ const { token } = await fetch("/api/get-cookie").then((res) => res.json());
+ if (!token) return await token.json().catch(() => null);
+
+ const response = await fetch(`/api/new/home${path ? path : ""}`, {
+ headers: {
+ "Content-Type": "application/json",
+ Accept: "application/json",
+ "Access-Control-Allow-Origin": "*",
+ Authorization: `Bearer ${token}`,
+ },
+ });
+
+ if (!response.ok) return null;
+ const data: Record = await response.json();
+ return data;
+};
diff --git a/src/app_modules/home/view_home_new.tsx b/src/app_modules/home/view_home_new.tsx
index 67980668..b2dd7fda 100644
--- a/src/app_modules/home/view_home_new.tsx
+++ b/src/app_modules/home/view_home_new.tsx
@@ -17,6 +17,7 @@ import { gs_notifikasi_kategori_app } from "../notifikasi/lib";
import BodyHome from "./component/body_home";
import FooterHome from "./component/footer_home";
import { apiGetDataHome } from "./fun/get/api_home";
+import { clientLogger } from "@/util/clientLogger";
export default function HomeViewNew() {
const [countNtf, setCountNtf] = useAtom(gs_count_ntf);
@@ -48,12 +49,14 @@ export default function HomeViewNew() {
async function cekUserLogin() {
try {
- const response = await apiGetDataHome("?cat=cek_profile");
- if (response.success) {
+ const response = await apiGetDataHome({
+ path: "?cat=cek_profile",
+ });
+ if (response) {
setDataUser(response.data);
}
} catch (error) {
- console.error(error);
+ clientLogger.error("Error get data home", error);
}
}
diff --git a/src/app_modules/katalog/main/layout_new.tsx b/src/app_modules/katalog/main/layout_new.tsx
index 56e24577..e96ae293 100644
--- a/src/app_modules/katalog/main/layout_new.tsx
+++ b/src/app_modules/katalog/main/layout_new.tsx
@@ -22,7 +22,7 @@ export default function LayoutKatalogNew({ children }: { children: any }) {
setLoading(true)
const response = await apiGetUserProfile(`?profile=${param.id}`)
const response2 = await funGetUserIdByToken()
- if (response.success) {
+ if (response) {
setAuthorId(response.data.id)
setUserRoleId(response.data.masterUserRoleId)
setUserLoginId(response2)
diff --git a/src/app_modules/katalog/portofolio/component/button_delete_new.tsx b/src/app_modules/katalog/portofolio/component/button_delete_new.tsx
index a1d5f399..384678dc 100644
--- a/src/app_modules/katalog/portofolio/component/button_delete_new.tsx
+++ b/src/app_modules/katalog/portofolio/component/button_delete_new.tsx
@@ -1,98 +1,103 @@
import { funGetUserIdByToken } from "@/app_modules/_global/fun/get";
-import { ComponentGlobal_NotifikasiBerhasil, ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global";
+import {
+ ComponentGlobal_NotifikasiBerhasil,
+ ComponentGlobal_NotifikasiGagal,
+} from "@/app_modules/_global/notif_global";
import { UIGlobal_Modal } from "@/app_modules/_global/ui";
import { Button } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
import { IconTrash } from "@tabler/icons-react";
import { useParams, useRouter } from "next/navigation";
import { useState } from "react";
-import { apiDeletePortofolio, apiGetOnePortofolioById } from "../lib/api_portofolio";
+import {
+ apiDeletePortofolio,
+ apiGetOnePortofolioById,
+} from "../lib/api_portofolio";
import { IDetailPortofolioBisnis } from "../lib/type_portofolio";
import { MainColor } from "@/app_modules/_global/color";
+import { apiGetUserId } from "@/app_modules/_global/lib/api_user";
+import { clientLogger } from "@/util/clientLogger";
-export default function ComponentPortofolio_ButtonDeleteNew() {
- const param = useParams<{ id: string }>()
- const [openModal, setModal] = useState(false)
- const [loadingDel, setLoadingDel] = useState(false)
- const [userLoginId, setUserLoginId] = useState("")
- const [dataPorto, setDataPorto] = useState()
- const router = useRouter()
+export default function ComponentPortofolio_ButtonDeleteNew({
+ userLoginId,
+}: {
+ userLoginId: string;
+}) {
+ const param = useParams<{ id: string }>();
+ const [openModal, setModal] = useState(false);
+ const [loadingDel, setLoadingDel] = useState(false);
+ const [dataPorto, setDataPorto] = useState();
+ const router = useRouter();
-
- async function onDelete() {
- try {
- setLoadingDel(true)
- const response = await apiDeletePortofolio(param.id)
- if (response.success) {
- ComponentGlobal_NotifikasiBerhasil(response.message)
- router.back()
- } else {
- ComponentGlobal_NotifikasiGagal(response.message);
- }
- } catch (error) {
- console.error(error)
- ComponentGlobal_NotifikasiGagal("Gagal menghapus portofolio");
- } finally {
- setLoadingDel(false)
+ async function onDelete() {
+ try {
+ setLoadingDel(true);
+ const response = await apiDeletePortofolio(param.id);
+ if (response) {
+ ComponentGlobal_NotifikasiBerhasil(response.message);
+ router.back();
+ } else {
+ ComponentGlobal_NotifikasiGagal(response?.message);
}
- }
+ } catch (error) {
+ clientLogger.error("Error delete portofolio", error);
+ ComponentGlobal_NotifikasiGagal("Gagal menghapus portofolio");
+ } finally {
+ setLoadingDel(false);
+ }
+ }
- async function funGetPortofolio() {
- try {
- const response = await apiGetOnePortofolioById(param.id, "bisnis")
- const response2 = await funGetUserIdByToken()
- if (response.success) {
- setDataPorto(response.data)
- setUserLoginId(response2)
- }
- } catch (error) {
- console.error(error);
+ async function funGetPortofolio() {
+ try {
+ const response = await apiGetOnePortofolioById(param.id, "bisnis");
+ if (response) {
+ setDataPorto(response.data);
}
- }
+ } catch (error) {
+ console.error("Error get data button delete:", error);
+ }
+ }
- useShallowEffect(() => {
- funGetPortofolio()
- }, []);
+ useShallowEffect(() => {
+ funGetPortofolio();
+ }, []);
+ return (
+ <>
+ {userLoginId === dataPorto?.authorId && (
+
+ )}
- return (
- <>
- {userLoginId === dataPorto?.authorId ? (
-
- ) : (
- ""
- )}
-
- setModal(false)}
- buttonKiri={
-
- }
- buttonKanan={
-
- }
- />
- >
- )
-}
\ No newline at end of file
+ setModal(false)}
+ buttonKiri={
+
+ }
+ buttonKanan={
+
+ }
+ />
+ >
+ );
+}
diff --git a/src/app_modules/katalog/portofolio/component/button_more_new.tsx b/src/app_modules/katalog/portofolio/component/button_more_new.tsx
index e9a92b5c..96655db3 100644
--- a/src/app_modules/katalog/portofolio/component/button_more_new.tsx
+++ b/src/app_modules/katalog/portofolio/component/button_more_new.tsx
@@ -89,9 +89,9 @@ export default function ComponentPortofolio_ButtonMoreNew() {
const response = await apiGetOnePortofolioById(param.id, "bisnis")
const response3 = await apiGetOnePortofolioById(param.id, "lokasi")
const response2 = await funGetUserIdByToken()
- if (response.success) {
+ if (response) {
setAuthorId(response.data.authorId)
- setMapId((response3.data?.mapId !== null && response3.data?.mapId !== undefined) ? true : false)
+ setMapId((response3 !== null && response3.data?.mapId !== undefined) ? true : false)
setUserLoginId(response2)
}
} catch (error) {
diff --git a/src/app_modules/katalog/portofolio/component/skeleton_view.tsx b/src/app_modules/katalog/portofolio/component/skeleton_view.tsx
new file mode 100644
index 00000000..293075fa
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/component/skeleton_view.tsx
@@ -0,0 +1,8 @@
+export {
+
+}
+
+function Portofolio_SkeletonListPorto() {
+
+
+}
\ No newline at end of file
diff --git a/src/app_modules/katalog/portofolio/create/view.tsx b/src/app_modules/katalog/portofolio/create/view.tsx
index bacf50dc..37e82b95 100644
--- a/src/app_modules/katalog/portofolio/create/view.tsx
+++ b/src/app_modules/katalog/portofolio/create/view.tsx
@@ -170,30 +170,6 @@ export default function CreatePortofolio({
/>
- {/* {
- setDataPortofolio({
- ...dataPortofolio,
- tlpn: val.target.value,
- });
- }}
- /> */}
-