fix portofolio
deskripsiL: - fix server acton create to API
This commit is contained in:
@@ -1,3 +0,0 @@
|
|||||||
git add -A
|
|
||||||
git commit -m "data auto"
|
|
||||||
git push origin bagas/10-feb-25
|
|
||||||
74
src/app/api/map/[id]/route.ts
Normal file
74
src/app/api/map/[id]/route.ts
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
import { prisma } from "@/app/lib";
|
||||||
|
import { funGetUserIdByToken } from "@/app_modules/_global/fun/get";
|
||||||
|
import backendLogger from "@/util/backendLogger";
|
||||||
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export { POST };
|
||||||
|
|
||||||
|
async function POST(request: Request, { params }: { params: { id: string } }) {
|
||||||
|
if (request.method !== "POST") {
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: false,
|
||||||
|
message: "Method not allowed",
|
||||||
|
},
|
||||||
|
{ status: 405 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const userLoginId = await funGetUserIdByToken();
|
||||||
|
if (!userLoginId) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: false,
|
||||||
|
message: "User tidak ditemukan",
|
||||||
|
},
|
||||||
|
{ status: 401 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const { id } = params;
|
||||||
|
const { data } = await request.json();
|
||||||
|
|
||||||
|
const created = await prisma.businessMaps.create({
|
||||||
|
data: {
|
||||||
|
latitude: data.latitude,
|
||||||
|
longitude: data.longitude,
|
||||||
|
namePin: data.namePin,
|
||||||
|
imageId: data.imageId,
|
||||||
|
portofolioId: id,
|
||||||
|
authorId: userLoginId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!created) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: false,
|
||||||
|
message: "Gagal membuat pin map",
|
||||||
|
},
|
||||||
|
{ status: 400 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: true,
|
||||||
|
message: "Berhasil membuat portofolio",
|
||||||
|
data: created,
|
||||||
|
},
|
||||||
|
{ status: 201 }
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
backendLogger.error("Error create pin map", error);
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: false,
|
||||||
|
message: "Gagal membuat pin map",
|
||||||
|
reason: (error as Error).message,
|
||||||
|
},
|
||||||
|
{ status: 500 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,15 +1,8 @@
|
|||||||
import { prisma } from "@/app/lib";
|
import { prisma } from "@/app/lib";
|
||||||
import backendLogger from "@/util/backendLogger";
|
import backendLogger from "@/util/backendLogger";
|
||||||
import { clientLogger } from "@/util/clientLogger";
|
|
||||||
import { NextResponse } from "next/server";
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
export async function GET(request: Request) {
|
export async function GET(request: Request) {
|
||||||
if (request.method !== "GET") {
|
|
||||||
return NextResponse.json(
|
|
||||||
{ success: false, message: "Method not allowed" },
|
|
||||||
{ status: 405 }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let fixData;
|
let fixData;
|
||||||
|
|||||||
@@ -18,25 +18,53 @@ async function POST(request: Request, { params }: { params: { id: string } }) {
|
|||||||
const { id } = params;
|
const { id } = params;
|
||||||
const { data } = await request.json();
|
const { data } = await request.json();
|
||||||
|
|
||||||
// const createPortofolio = await prisma.portofolio.create({
|
const createPortofolio = await prisma.portofolio.create({
|
||||||
// data: {
|
data: {
|
||||||
// profileId: id,
|
profileId: id,
|
||||||
// id_Portofolio: "Porto" + Date.now().toString(),
|
id_Portofolio: "Porto" + Date.now().toString(),
|
||||||
// namaBisnis: data.namaBisnis,
|
namaBisnis: data.namaBisnis,
|
||||||
// deskripsi: data.deskripsi,
|
deskripsi: data.deskripsi,
|
||||||
// tlpn: data.tlpn,
|
tlpn: data.tlpn,
|
||||||
// alamatKantor: data.alamatKantor,
|
alamatKantor: data.alamatKantor,
|
||||||
// masterBidangBisnisId: data.masterBidangBisnisId,
|
masterBidangBisnisId: data.masterBidangBisnisId,
|
||||||
// logoId: data.fileId,
|
logoId: data.fileId,
|
||||||
// },
|
},
|
||||||
// });
|
});
|
||||||
|
|
||||||
|
if (!createPortofolio)
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: false,
|
||||||
|
message: "Gagal membuat portofolio",
|
||||||
|
},
|
||||||
|
{ status: 400 }
|
||||||
|
);
|
||||||
|
|
||||||
|
const createMedsos = await prisma.portofolio_MediaSosial.create({
|
||||||
|
data: {
|
||||||
|
portofolioId: createPortofolio.id,
|
||||||
|
facebook: data?.facebook,
|
||||||
|
instagram: data?.instagram,
|
||||||
|
tiktok: data?.tiktok,
|
||||||
|
twitter: data?.twitter,
|
||||||
|
youtube: data?.youtube,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!createMedsos)
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: false,
|
||||||
|
message: "Gagal menambahkan medsos",
|
||||||
|
},
|
||||||
|
{ status: 400 }
|
||||||
|
);
|
||||||
|
|
||||||
return NextResponse.json(
|
return NextResponse.json(
|
||||||
{
|
{
|
||||||
success: true,
|
success: true,
|
||||||
message: "Berhasil mendapatkan data",
|
message: "Berhasil mendapatkan data",
|
||||||
id,
|
data: createPortofolio,
|
||||||
data,
|
|
||||||
},
|
},
|
||||||
{ status: 200 }
|
{ status: 200 }
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import { Map_CreateNewPin } from "@/app_modules/map/view";
|
import { Map_CreateNewPin } from "@/app_modules/map/view";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page() {
|
||||||
let portofolioId = params.id;
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Map_CreateNewPin portofolioId={portofolioId} />
|
<Map_CreateNewPin />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
import { CreatePortofolio } from "@/app_modules/katalog/portofolio";
|
import { CreatePortofolio } from "@/app_modules/katalog/portofolio";
|
||||||
import { Portofolio_getMasterBidangBisnis } from "@/app_modules/katalog/portofolio/fun/master/get_bidang_bisnis";
|
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
// const profileId = params.id;
|
|
||||||
// const bidangBisnis = await Portofolio_getMasterBidangBisnis();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<CreatePortofolio
|
<CreatePortofolio />
|
||||||
/>
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ export {
|
|||||||
apiCreatePortofolio,
|
apiCreatePortofolio,
|
||||||
};
|
};
|
||||||
|
|
||||||
const apiCreatePortofolio = async ({ data }: { data: any }) => {
|
const apiCreatePortofolio = async ({ profileId, data }: { profileId: string, data: any }) => {
|
||||||
const { token } = await fetch("/api/get-cookie").then((res) => res.json());
|
const { token } = await fetch("/api/get-cookie").then((res) => res.json());
|
||||||
if (!token) return await token.json().catch(() => null);
|
if (!token) return await token.json().catch(() => null);
|
||||||
|
|
||||||
const res = await fetch(`/api/portofolio`, {
|
const res = await fetch(`/api/portofolio/${profileId}`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: JSON.stringify({ data }),
|
body: JSON.stringify({ data }),
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import { funGlobal_UploadToStorage } from "@/app_modules/_global/fun";
|
|||||||
import { clientLogger } from "@/util/clientLogger";
|
import { clientLogger } from "@/util/clientLogger";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import funCreatePortofolio from "../../fun/fun_create_portofolio";
|
|
||||||
import { apiCreatePortofolio } from "../api_fetch_portofolio";
|
import { apiCreatePortofolio } from "../api_fetch_portofolio";
|
||||||
|
|
||||||
interface ICreatePortofolio {
|
interface ICreatePortofolio {
|
||||||
@@ -45,33 +44,21 @@ export function Portofolio_ComponentButtonSelanjutnya({
|
|||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
async function onSubmit() {
|
const validateData = () => {
|
||||||
if (_.values(dataPortofolio).includes("")) {
|
if (_.includes(_.values(dataPortofolio), "")) {
|
||||||
ComponentGlobal_NotifikasiPeringatan("Lengkapi Data");
|
ComponentGlobal_NotifikasiPeringatan("Lengkapi Data");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dataPortofolio.tlpn.length < 10) {
|
if (dataPortofolio.tlpn.length < 10) {
|
||||||
ComponentGlobal_NotifikasiPeringatan("Nomor telepon minimal 10 angka");
|
ComponentGlobal_NotifikasiPeringatan("Nomor telepon minimal 10 angka");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
return true;
|
||||||
setLoading(true);
|
};
|
||||||
|
|
||||||
const uploadFile = await funGlobal_UploadToStorage({
|
|
||||||
file: file,
|
|
||||||
dirId: DIRECTORY_ID.portofolio_logo,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!uploadFile.success) {
|
|
||||||
setLoading(false);
|
|
||||||
ComponentGlobal_NotifikasiPeringatan("Gagal upload gambar");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fileId = uploadFile.data.id;
|
|
||||||
|
|
||||||
|
const handleCreatePortofolio = async (fileId: string) => {
|
||||||
const newData: ICreatePortofolio = {
|
const newData: ICreatePortofolio = {
|
||||||
namaBisnis: dataPortofolio.namaBisnis,
|
namaBisnis: dataPortofolio.namaBisnis,
|
||||||
masterBidangBisnisId: dataPortofolio.masterBidangBisnisId,
|
masterBidangBisnisId: dataPortofolio.masterBidangBisnisId,
|
||||||
@@ -86,38 +73,48 @@ export function Portofolio_ComponentButtonSelanjutnya({
|
|||||||
fileId: fileId,
|
fileId: fileId,
|
||||||
};
|
};
|
||||||
|
|
||||||
// const responeCreated = await apiCreatePortofolio({
|
const response = await apiCreatePortofolio({
|
||||||
// data: newData,
|
|
||||||
// });
|
|
||||||
|
|
||||||
// if (responeCreated.success) {
|
|
||||||
// ComponentGlobal_NotifikasiBerhasil("Berhasil disimpan");
|
|
||||||
// router.replace(RouterMap.create + responeCreated.id, { scroll: false });
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
const res = await funCreatePortofolio({
|
|
||||||
profileId: profileId,
|
profileId: profileId,
|
||||||
data: dataPortofolio as any,
|
data: newData,
|
||||||
medsos: dataMedsos,
|
|
||||||
fileId: fileId,
|
|
||||||
});
|
});
|
||||||
if (res.status === 201) {
|
|
||||||
|
if (response.success) {
|
||||||
ComponentGlobal_NotifikasiBerhasil("Berhasil disimpan");
|
ComponentGlobal_NotifikasiBerhasil("Berhasil disimpan");
|
||||||
router.replace(RouterMap.create + res.id, { scroll: false });
|
router.replace(RouterMap.create + response.data.id, { scroll: false });
|
||||||
} else {
|
} else {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
ComponentGlobal_NotifikasiGagal("Gagal disimpan");
|
throw new Error("Failed to create portfolio");
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const onSubmit = async () => {
|
||||||
|
if (!validateData()) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
const uploadFile = await funGlobal_UploadToStorage({
|
||||||
|
file: file,
|
||||||
|
dirId: DIRECTORY_ID.portofolio_logo,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!uploadFile.success) {
|
||||||
|
ComponentGlobal_NotifikasiPeringatan("Gagal upload gambar");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await handleCreatePortofolio(uploadFile.data.id);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
|
ComponentGlobal_NotifikasiGagal("Gagal disimpan");
|
||||||
clientLogger.error("Error create portofolio", error);
|
clientLogger.error("Error create portofolio", error);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Button
|
<Button
|
||||||
disabled={_.values(dataPortofolio).includes("") || file === null}
|
disabled={_.values(dataPortofolio).includes("") || !file}
|
||||||
mt={"md"}
|
mt={"md"}
|
||||||
radius={50}
|
radius={50}
|
||||||
loading={loading}
|
loading={loading}
|
||||||
|
|||||||
25
src/app_modules/map/_component/api_fetch_map.ts
Normal file
25
src/app_modules/map/_component/api_fetch_map.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
export { apiCreatePinMap };
|
||||||
|
|
||||||
|
const apiCreatePinMap = async ({
|
||||||
|
portofolioId,
|
||||||
|
data,
|
||||||
|
}: {
|
||||||
|
portofolioId: string;
|
||||||
|
data: any;
|
||||||
|
}) => {
|
||||||
|
const { token } = await fetch("/api/get-cookie").then((res) => res.json());
|
||||||
|
if (!token) return await token.json().catch(() => null);
|
||||||
|
|
||||||
|
const respone = await fetch(`/api/map/${portofolioId}`, {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({ data }),
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Accept: "application/json",
|
||||||
|
"Access-Control-Allow-Origin": "*",
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return await respone.json().catch(() => null);
|
||||||
|
};
|
||||||
@@ -12,7 +12,16 @@ import { useState } from "react";
|
|||||||
import { map_funCreatePin } from "../../fun/create/fun_create_pin";
|
import { map_funCreatePin } from "../../fun/create/fun_create_pin";
|
||||||
import { funGlobal_UploadToStorage } from "@/app_modules/_global/fun";
|
import { funGlobal_UploadToStorage } from "@/app_modules/_global/fun";
|
||||||
import { DIRECTORY_ID } from "@/app/lib";
|
import { DIRECTORY_ID } from "@/app/lib";
|
||||||
|
import { clientLogger } from "@/util/clientLogger";
|
||||||
|
import { data } from "autoprefixer";
|
||||||
|
import { apiCreatePinMap } from "../api_fetch_map";
|
||||||
|
|
||||||
|
interface ICreatePinMAp {
|
||||||
|
latitude: string;
|
||||||
|
longitude: string;
|
||||||
|
namePin: string;
|
||||||
|
imageId: string;
|
||||||
|
}
|
||||||
export function ComponentMap_ButtonSavePin({
|
export function ComponentMap_ButtonSavePin({
|
||||||
namePin,
|
namePin,
|
||||||
lat,
|
lat,
|
||||||
@@ -29,43 +38,72 @@ export function ComponentMap_ButtonSavePin({
|
|||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
async function onSavePin() {
|
const handleUploadImage = async () => {
|
||||||
try {
|
const uploadResult = await funGlobal_UploadToStorage({
|
||||||
setLoading(true);
|
|
||||||
|
|
||||||
const uploadFile = await funGlobal_UploadToStorage({
|
|
||||||
file: file,
|
file: file,
|
||||||
dirId: DIRECTORY_ID.map_image,
|
dirId: DIRECTORY_ID.map_image,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!uploadFile.success) {
|
if (!uploadResult.success) {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
ComponentGlobal_NotifikasiPeringatan("Gagal upload gambar");
|
ComponentGlobal_NotifikasiPeringatan("Gagal upload gambar");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const imageId = uploadFile.data.id;
|
return uploadResult.data.id;
|
||||||
|
};
|
||||||
|
|
||||||
const res = await map_funCreatePin({
|
const handleCreatePin = async (imageId: string) => {
|
||||||
data: {
|
const newData: ICreatePinMAp = {
|
||||||
latitude: lat as any,
|
latitude: lat,
|
||||||
longitude: long as any,
|
longitude: long,
|
||||||
namePin: namePin as any,
|
namePin: namePin,
|
||||||
imageId: imageId,
|
imageId: imageId,
|
||||||
Portofolio: {
|
};
|
||||||
create: { id: portofolioId } as any,
|
|
||||||
},
|
const respone = await apiCreatePinMap({
|
||||||
},
|
portofolioId: portofolioId,
|
||||||
|
data: newData,
|
||||||
});
|
});
|
||||||
res.status === 200
|
|
||||||
? (ComponentGlobal_NotifikasiBerhasil(res.message), router.back())
|
console.log("respone >", respone);
|
||||||
: ComponentGlobal_NotifikasiGagal(res.message);
|
|
||||||
|
if (respone && respone.success) {
|
||||||
|
ComponentGlobal_NotifikasiBerhasil(respone.message);
|
||||||
|
router.back();
|
||||||
|
}
|
||||||
|
|
||||||
|
return respone;
|
||||||
|
};
|
||||||
|
|
||||||
|
const validateInput = () => {
|
||||||
|
if (!namePin || !file) {
|
||||||
|
ComponentGlobal_NotifikasiPeringatan(
|
||||||
|
"Nama pin dan file gambar harus diisi"
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const onSavePin = async () => {
|
||||||
|
if (!validateInput()) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
const imageId = await handleUploadImage();
|
||||||
|
const createPinResult = await handleCreatePin(imageId);
|
||||||
|
|
||||||
|
if (!createPinResult.success) {
|
||||||
|
setLoading(false);
|
||||||
|
ComponentGlobal_NotifikasiPeringatan("Gagal membuat pin");
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
|
clientLogger.error("Error create pin", (error as Error).message);
|
||||||
console.error(error);
|
ComponentGlobal_NotifikasiGagal("Terjadi kesalahan saat menyimpan pin");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -73,7 +111,7 @@ export function ComponentMap_ButtonSavePin({
|
|||||||
loading={loading}
|
loading={loading}
|
||||||
my={"xl"}
|
my={"xl"}
|
||||||
style={{ transition: "0.5s" }}
|
style={{ transition: "0.5s" }}
|
||||||
disabled={namePin === "" || file === null}
|
disabled={!namePin || !file}
|
||||||
radius={"xl"}
|
radius={"xl"}
|
||||||
loaderPosition="center"
|
loaderPosition="center"
|
||||||
bg={MainColor.yellow}
|
bg={MainColor.yellow}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { DIRECTORY_ID } from "@/app/lib";
|
|
||||||
import {
|
import {
|
||||||
AccentColor,
|
AccentColor,
|
||||||
MainColor,
|
MainColor,
|
||||||
@@ -10,25 +9,17 @@ import {
|
|||||||
ComponentGlobal_BoxUploadImage,
|
ComponentGlobal_BoxUploadImage,
|
||||||
ComponentGlobal_ButtonUploadFileImage,
|
ComponentGlobal_ButtonUploadFileImage,
|
||||||
} from "@/app_modules/_global/component";
|
} from "@/app_modules/_global/component";
|
||||||
import {
|
|
||||||
funGlobal_DeleteFileById,
|
|
||||||
funGlobal_UploadToStorage,
|
|
||||||
} from "@/app_modules/_global/fun";
|
|
||||||
import { MAX_SIZE } from "@/app_modules/_global/lib";
|
|
||||||
import { PemberitahuanMaksimalFile } from "@/app_modules/_global/lib/max_size";
|
|
||||||
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan";
|
|
||||||
import {
|
import {
|
||||||
AspectRatio,
|
AspectRatio,
|
||||||
Button,
|
|
||||||
Center,
|
Center,
|
||||||
FileButton,
|
|
||||||
Image,
|
Image,
|
||||||
Paper,
|
Paper,
|
||||||
Stack,
|
Stack,
|
||||||
TextInput,
|
TextInput
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import { IconCamera, IconPhoto } from "@tabler/icons-react";
|
import { IconPhoto } from "@tabler/icons-react";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
|
import { useParams } from "next/navigation";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import Map, {
|
import Map, {
|
||||||
AttributionControl,
|
AttributionControl,
|
||||||
@@ -39,13 +30,9 @@ import Map, {
|
|||||||
import { ComponentMap_ButtonSavePin } from "../_component";
|
import { ComponentMap_ButtonSavePin } from "../_component";
|
||||||
import { defaultLatLong, defaultMapZoom } from "../lib/default_lat_long";
|
import { defaultLatLong, defaultMapZoom } from "../lib/default_lat_long";
|
||||||
|
|
||||||
export function UiMap_CreatePin({
|
export function UiMap_CreatePin({ mapboxToken }: { mapboxToken: string }) {
|
||||||
mapboxToken,
|
const params = useParams<{ id: string }>();
|
||||||
portofolioId,
|
const portofolioId = params.id;
|
||||||
}: {
|
|
||||||
mapboxToken: string;
|
|
||||||
portofolioId: string;
|
|
||||||
}) {
|
|
||||||
const [[lat, long], setLatLong] = useState([0, 0]);
|
const [[lat, long], setLatLong] = useState([0, 0]);
|
||||||
const [isPin, setIsPin] = useState(false);
|
const [isPin, setIsPin] = useState(false);
|
||||||
const [namePin, setNamePin] = useState("");
|
const [namePin, setNamePin] = useState("");
|
||||||
|
|||||||
@@ -1,17 +1,10 @@
|
|||||||
|
import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data";
|
||||||
import UIGlobal_LayoutHeaderTamplate from "@/app_modules/_global/ui/ui_header_tamplate";
|
import UIGlobal_LayoutHeaderTamplate from "@/app_modules/_global/ui/ui_header_tamplate";
|
||||||
import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate";
|
import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate";
|
||||||
import { UiMap_CreatePin } from "../ui/ui_create_pin";
|
import { UiMap_CreatePin } from "../ui/ui_create_pin";
|
||||||
import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data";
|
|
||||||
|
|
||||||
const mapboxToken = process.env.MAPBOX_TOKEN!;
|
const mapboxToken = process.env.MAPBOX_TOKEN!;
|
||||||
export async function Map_CreateNewPin({
|
export async function Map_CreateNewPin() {
|
||||||
portofolioId,
|
|
||||||
}: {
|
|
||||||
portofolioId: string;
|
|
||||||
}) {
|
|
||||||
if (!mapboxToken)
|
|
||||||
return <ComponentGlobal_IsEmptyData text="Mapbox token not found" />;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<UIGlobal_LayoutTamplate
|
<UIGlobal_LayoutTamplate
|
||||||
@@ -19,10 +12,11 @@ export async function Map_CreateNewPin({
|
|||||||
<UIGlobal_LayoutHeaderTamplate title="Tambah Pin" hideButtonLeft />
|
<UIGlobal_LayoutHeaderTamplate title="Tambah Pin" hideButtonLeft />
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<UiMap_CreatePin
|
{!mapboxToken ? (
|
||||||
mapboxToken={mapboxToken}
|
<ComponentGlobal_IsEmptyData text="Mapbox token not found" />
|
||||||
portofolioId={portofolioId}
|
) : (
|
||||||
/>
|
<UiMap_CreatePin mapboxToken={mapboxToken} />
|
||||||
|
)}
|
||||||
</UIGlobal_LayoutTamplate>
|
</UIGlobal_LayoutTamplate>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user