router.push("/dev/katalog/view")}>
+ router.push(`/dev/katalog/${profileId}`)}>
Edit Profile
diff --git a/src/app_modules/katalog/profile/edit/view.tsx b/src/app_modules/katalog/profile/edit/view.tsx
index 9f7a80d5..72f88401 100644
--- a/src/app_modules/katalog/profile/edit/view.tsx
+++ b/src/app_modules/katalog/profile/edit/view.tsx
@@ -4,7 +4,7 @@ import { myConsole } from "@/app/fun/my_console";
import { ApiHipmi } from "@/app/lib/api";
import { Warna } from "@/app/lib/warna";
import { gs_token } from "@/app_modules/home/state/global_state";
-import { Button, Select, Stack, TextInput } from "@mantine/core";
+import { Button, Loader, Select, Stack, TextInput } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
import { useAtom } from "jotai";
import _ from "lodash";
@@ -13,57 +13,53 @@ import { useState } from "react";
import toast from "react-simple-toasts";
import { gs_profile } from "../state/global_state";
import { loadDataProfile } from "../fun/fun_get_profile";
+import { USER_PROFILE } from "@/app_modules/models/user_profile";
+import funEditProfile from "../fun/fun_edit_profile";
-export default function EditProfile({ data }: { data: any }) {
+export default function EditProfile({ data }: { data: USER_PROFILE }) {
const router = useRouter();
//Get data profile
- const [profile, setProfile] = useAtom(gs_profile)
- useShallowEffect(() => {
- loadDataProfile(setProfile);
- }, []);
+ const [dataProfile, setDataProfile] = useState(data);
async function onUpdate() {
- const body = profile;
+ const body = dataProfile;
if (_.values(body).includes("")) return toast("Lengkapi data");
- await fetch(ApiHipmi.edit_profile, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(body),
- })
- .then((res) => res.json())
- .then((val) => {
- myConsole(val);
- if (val.status == 200) {
- toast("Data tersimpan");
- loadDataProfile(setProfile)
- return setTimeout(() => router.push("/dev/katalog/view"), 1000);
- } else {
- return toast("Gagal update !!!");
- }
- });
+ await funEditProfile(body).then((res) => {
+ if (res.status === 200) {
+ toast("Update berhasil");
+ setTimeout(() => router.push(`/dev/katalog/${data.Profile?.id}`), 1000);
+ } else {
+ toast("Gagal update");
+ }
+ });
}
- if(!profile) return <>>
+ if (!dataProfile)
+ return (
+ <>
+
+ >
+ );
return (
<>
- {/* {JSON.stringify(profile)} */}
-
-
+
+
{
- setProfile({
- ...profile,
- name: val.target.value,
+ setDataProfile({
+ ...(dataProfile as any),
+ Profile: {
+ ...dataProfile.Profile,
+ name: val.target.value,
+ },
});
}}
/>
@@ -71,12 +67,14 @@ export default function EditProfile({ data }: { data: any }) {
{
- myConsole(val.target.value);
- setProfile({
- ...profile,
- email: val.target.value,
+ setDataProfile({
+ ...(dataProfile as any),
+ Profile: {
+ ...dataProfile.Profile,
+ email: val.target.value,
+ },
});
}}
/>
@@ -84,27 +82,32 @@ export default function EditProfile({ data }: { data: any }) {
{
- myConsole(val.target.value);
- setProfile({
- ...profile,
- alamat: val.target.value,
+ setDataProfile({
+ ...(dataProfile as any),
+ Profile: {
+ ...dataProfile.Profile,
+ alamat: val.target.value,
+ },
});
}}
/>
+
+ {/* {JSON.stringify(dataProfile, null, 2)} */}
>
);
}
diff --git a/src/app_modules/katalog/profile/fun/fun_create_profile.ts b/src/app_modules/katalog/profile/fun/fun_create_profile.ts
new file mode 100644
index 00000000..8279d54b
--- /dev/null
+++ b/src/app_modules/katalog/profile/fun/fun_create_profile.ts
@@ -0,0 +1,25 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function funCreateNewProfile(data: any) {
+ console.log(data);
+ const body = data;
+
+ const res = await prisma.profile.create({
+ data: {
+ userId: body.userId,
+ name: body.name,
+ email: body.email,
+ alamat: body.alamat,
+ jenisKelamin: body.jenisKelamin,
+ },
+ });
+
+ if (!res) return { status: 400 };
+
+ return {
+ status: 201,
+ success: true,
+ };
+}
diff --git a/src/app_modules/katalog/profile/fun/fun_edit_profile.ts b/src/app_modules/katalog/profile/fun/fun_edit_profile.ts
new file mode 100644
index 00000000..4c1c523d
--- /dev/null
+++ b/src/app_modules/katalog/profile/fun/fun_edit_profile.ts
@@ -0,0 +1,25 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { USER_PROFILE } from "@/app_modules/models/user_profile";
+
+export default async function funEditProfile(data: USER_PROFILE) {
+ const res = await prisma.profile.update({
+ where: {
+ id: data.Profile?.id,
+ },
+ data: {
+ name: data.Profile?.name,
+ email: data.Profile?.email,
+ alamat: data.Profile?.alamat,
+ jenisKelamin: data.Profile?.jenisKelamin,
+ },
+ });
+
+ if (!res) return { status: 400 };
+
+ return {
+ status: 200,
+ success: true,
+ };
+}
diff --git a/src/app_modules/katalog/profile/main/view.tsx b/src/app_modules/katalog/profile/main/view.tsx
index aeb56913..482f42c4 100644
--- a/src/app_modules/katalog/profile/main/view.tsx
+++ b/src/app_modules/katalog/profile/main/view.tsx
@@ -45,7 +45,6 @@ export default function ProfileView({ user }: { user: USER_PROFILE }) {
if (!stateUser) return <>>;
return (
<>
- {/* {JSON.stringify(stateUser)} */}
{/* Background dan foto */}
@@ -67,7 +66,6 @@ export default function ProfileView({ user }: { user: USER_PROFILE }) {
}}
>
- {/* {stateUser.Profile?.ImageProfile?.url} */}
{stateUser.Profile?.ImageProfile?.url && (
)}
@@ -93,7 +86,7 @@ export default function ProfileView({ user }: { user: USER_PROFILE }) {
variant="transparent"
bg={"gray"}
radius={50}
- onClick={() => router.push("/dev/profile/upload")}
+ onClick={() => router.push(`/dev/profile/upload/${stateUser.Profile?.id}`)}
sx={{ position: "relative" }}
>
@@ -112,7 +105,7 @@ export default function ProfileView({ user }: { user: USER_PROFILE }) {
{
- router.push("/dev/profile/edit");
+ router.push(`/dev/profile/edit/${stateUser.id}`);
}}
>
diff --git a/src/app_modules/katalog/profile/upload/layout.tsx b/src/app_modules/katalog/profile/upload/layout.tsx
index ad85d5ab..ca4d2b4b 100644
--- a/src/app_modules/katalog/profile/upload/layout.tsx
+++ b/src/app_modules/katalog/profile/upload/layout.tsx
@@ -18,27 +18,29 @@ import { useShallowEffect } from "@mantine/hooks";
import { loadDataProfile } from "../fun/fun_get_profile";
import { funUploadFoto } from "../fun/upload_foto";
import { useRouter } from "next/navigation";
+import { useState } from "react";
export default function UploadFotoProfileLayout({
children,
+ profileId
}: {
children: any;
+ profileId: any
}) {
const router = useRouter()
- const [profile, setProfile] = useAtom(gs_profile);
- useShallowEffect(() => {
- loadDataProfile(setProfile);
- }, []);
+ const [profile, setProfile] = useState(profileId)
+
return (
<>
+ {JSON.stringify(profileId)}
router.push("/dev/katalog/view")}
+ onClick={() => router.push(`/dev/katalog/${profile}`)}
>
@@ -54,7 +56,7 @@ export default function UploadFotoProfileLayout({
{
- const id = profile?.id
+ const id = profile
if (!files) return toast("File Kosong");
const fd = new FormData();
@@ -63,7 +65,7 @@ export default function UploadFotoProfileLayout({
const upFoto = await funUploadFoto(fd, id);
if (upFoto.success) {
toast("Upload berhasil");
- router.push("/dev/katalog/view")
+ router.push(`/dev/katalog/${profile}`)
// loadDataProfile(valUser.id, setUser, setProfile);
}
}}
diff --git a/src/app_modules/models/portofolio.ts b/src/app_modules/models/portofolio.ts
index 0a169463..a7e6b01c 100644
--- a/src/app_modules/models/portofolio.ts
+++ b/src/app_modules/models/portofolio.ts
@@ -1,9 +1,28 @@
export interface LIST_PORTOFOLIO {
- id: string;
- namaBisnis: string;
- alamatKantor: string;
- tlpn: string;
- deskripssi: string;
- masterBidangBisnisId: string;
- active: boolean;
-}
\ No newline at end of file
+ id: string;
+ namaBisnis: string;
+ alamatKantor: string;
+ tlpn: string;
+ deskripssi: string;
+ masterBidangBisnisId: string;
+ active: boolean;
+ profileId: string
+}
+
+export interface BIDANG_BISNIS {
+ id: string;
+ name: string;
+ active: boolean;
+}
+
+export interface MODEL_PORTOFOLIO {
+ id: string;
+ namaBisnis: string;
+ alamatKantor: string;
+ deskripsi: string;
+ tlpn: string;
+ active: boolean;
+ MasterBidangBisnis: BIDANG_BISNIS;
+ masterBidangBisnisId: string
+ profileId: string,
+}
diff --git a/src/app_modules/notif/index.tsx b/src/app_modules/notif/index.tsx
new file mode 100644
index 00000000..6dc0240d
--- /dev/null
+++ b/src/app_modules/notif/index.tsx
@@ -0,0 +1,17 @@
+"use client";
+import { useShallowEffect } from "@mantine/hooks";
+import io from "socket.io-client";
+import { toast } from "react-toastify";
+// const socket = io("https://io.wibudev.com");
+
+export default function AppNotif() {
+ // useShallowEffect(() => {
+ // socket.on("io", (data) => {
+ // console.log(JSON.stringify(data))
+ // if (data && data.id === "hipmi") {
+ // toast.success(data.data);
+ // }
+ // });
+ // }, []);
+ return <>>;
+}
diff --git a/yarn.lock b/yarn.lock
index 401c63e6..f16faa0d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -545,6 +545,11 @@
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz#31b9c510d8cada9683549e1dbb4284cca5001faf"
integrity sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==
+"@socket.io/component-emitter@~3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553"
+ integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==
+
"@swc/helpers@0.5.2":
version "0.5.2"
resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d"
@@ -1144,6 +1149,11 @@ clsx@1.1.1:
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
+clsx@^1.1.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
+ integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
+
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -1240,7 +1250,7 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
-debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -1371,6 +1381,22 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+engine.io-client@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002"
+ integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.1"
+ engine.io-parser "~5.2.1"
+ ws "~8.11.0"
+ xmlhttprequest-ssl "~2.0.0"
+
+engine.io-parser@~5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.1.tgz#9f213c77512ff1a6cc0c7a86108a7ffceb16fcfb"
+ integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==
+
enhanced-resolve@^5.12.0:
version "5.15.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35"
@@ -2939,6 +2965,13 @@ react-textarea-autosize@8.3.4:
use-composed-ref "^1.3.0"
use-latest "^1.2.1"
+react-toastify@^9.1.3:
+ version "9.1.3"
+ resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.3.tgz#1e798d260d606f50e0fab5ee31daaae1d628c5ff"
+ integrity sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==
+ dependencies:
+ clsx "^1.1.1"
+
react@18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
@@ -3130,6 +3163,24 @@ slash@^4.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+socket.io-client@^4.7.2:
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.2.tgz#f2f13f68058bd4e40f94f2a1541f275157ff2c08"
+ integrity sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.2"
+ engine.io-client "~6.5.2"
+ socket.io-parser "~4.2.4"
+
+socket.io-parser@~4.2.4:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83"
+ integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.1"
+
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
@@ -3596,6 +3647,16 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+ws@~8.11.0:
+ version "8.11.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
+ integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
+
+xmlhttprequest-ssl@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67"
+ integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==
+
xtend@~2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"