diff --git a/src/app/api/document/more/route.ts b/src/app/api/document/more/route.ts
index 89b5bfc..20a697c 100644
--- a/src/app/api/document/more/route.ts
+++ b/src/app/api/document/more/route.ts
@@ -1,4 +1,4 @@
-import { prisma } from "@/module/_global";
+import { DIR, funCopyFile, prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { createLogUser } from "@/module/user";
import _ from "lodash";
@@ -106,85 +106,55 @@ export async function PUT(request: Request) {
let name = dataItem[i].name;
const category = dataItem[i].category;
const extension = dataItem[i].extension;
+ const idStorage = dataItem[i].idStorage;
- let status = false
- let numb = 1
- do {
- const cekName = await prisma.divisionDocumentFolderFile.count({
- where: {
- path: path,
- isActive: true,
+ const copyOnStorage = await funCopyFile({ fileId: idStorage, dirId: DIR.document })
+ if (copyOnStorage.success) {
+ let status = false
+ let numb = 1
+ do {
+ const cekName = await prisma.divisionDocumentFolderFile.count({
+ where: {
+ path: path,
+ isActive: true,
+ extension,
+ name
+ }
+ })
+
+ if (cekName > 0) {
+ name = dataItem[i].name + " (" + numb + ")"
+ numb++
+ status = false
+ } else {
+ status = true
+ }
+ } while (status == false);
+
+
+ const create = await prisma.divisionDocumentFolderFile.create({
+ data: {
+ name,
+ path,
+ idDivision,
+ category,
extension,
- name
+ idStorage: copyOnStorage.data.id,
+ createdBy: user.id
+ },
+ select: {
+ id: true
}
})
- if (cekName > 0) {
- name = dataItem[i].name + " (" + numb + ")"
- numb++
- status = false
- } else {
- status = true
- }
- } while (status == false);
-
-
- const create = await prisma.divisionDocumentFolderFile.create({
- data: {
- name,
- path,
- idDivision,
- category,
- extension,
- createdBy: user.id
- },
- select: {
- id: true
- }
- })
-
- // let newPath = create.id
- // let idPath = dataItem[i].id;
- // let statusCek = false
- // do {
- // const cekFolder = await prisma.divisionDocumentFolderFile.findMany({
- // where: {
- // isActive: true,
- // path: idPath
- // }
- // })
-
- // if (cekFolder.length == 0) {
- // statusCek = true
- // } else {
- // for (let index = 0; index < cekFolder.length; index++) {
- // const addChildren = await prisma.divisionDocumentFolderFile.create({
- // data: {
- // name: cekFolder[index].name,
- // path: newPath,
- // idDivision,
- // category: cekFolder[index].category,
- // extension: cekFolder[index].extension,
- // createdBy: user.id
- // },
- // select: {
- // id: true
- // }
- // })
-
- // newPath = create.id
- // }
-
-
- // }
-
-
- // } while (statusCek == false);
-
+ // create log user
+ const log = await createLogUser({ act: 'CREATE', desc: 'User menyalin file', table: 'divisionDocumentFolderFile', data: create.id })
+ }
}
-
return NextResponse.json({ success: true, message: "Berhasil salin item" }, { status: 200 });
+
+
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal salin item, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
@@ -222,7 +192,8 @@ export async function DELETE(request: Request) {
}
-
+ // create log user
+ const log = await createLogUser({ act: 'CREATE', desc: 'User membagikan item', table: 'divisionDocumentShare', data: '' })
return NextResponse.json({ success: true, message: "Berhasil membagikan item" }, { status: 200 });
} catch (error) {
console.error(error);
diff --git a/src/module/_global/fun/copy_file.ts b/src/module/_global/fun/copy_file.ts
new file mode 100644
index 0000000..eabce8f
--- /dev/null
+++ b/src/module/_global/fun/copy_file.ts
@@ -0,0 +1,22 @@
+export async function funCopyFile({ fileId, dirId }: { fileId: string, dirId: string }) {
+ try {
+ const res = await fetch(`https://wibu-storage.wibudev.com/api/files/copy/${dirId}/${dirId}`, {
+ method: "POST",
+ body: JSON.stringify({ fileId: fileId }),
+ headers: {
+ Authorization: `Bearer ${process.env.WS_APIKEY}`
+ }
+ });
+
+ if (res.ok) {
+ const hasil = await res.json()
+ return { success: true, data: hasil.data }
+ } else {
+ const errorText = await res.json();
+ return { success: false, data: {} }
+ }
+ } catch (error) {
+ console.error("Copy error:", error);
+ return { success: false, data: {} }
+ }
+}
\ No newline at end of file
diff --git a/src/module/_global/index.ts b/src/module/_global/index.ts
index c29f0b3..bcdf19e 100644
--- a/src/module/_global/index.ts
+++ b/src/module/_global/index.ts
@@ -6,6 +6,7 @@ import SkeletonDetailListTugasTask from "./components/skeleton_detail_list_tugas
import SkeletonDetailProfile from "./components/skeleton_detail_profile";
import SkeletonSingle from "./components/skeleton_single";
import WrapLayout from "./components/wrap_layout";
+import { funCopyFile } from "./fun/copy_file";
import { funDeleteFile } from "./fun/delete_file";
import { funUploadFile } from "./fun/upload_file";
import { WARNA } from "./fun/WARNA";
@@ -42,3 +43,4 @@ export { funUploadFile }
export { funDeleteFile }
export { DIR }
export { TEMA }
+export { funCopyFile }
diff --git a/src/module/document/ui/drawer_more.tsx b/src/module/document/ui/drawer_more.tsx
index d70d093..97ff2f8 100644
--- a/src/module/document/ui/drawer_more.tsx
+++ b/src/module/document/ui/drawer_more.tsx
@@ -9,12 +9,14 @@ import { funCopyDocument, funMoveDocument } from "../lib/api_document";
import { useHookstate } from "@hookstate/core";
import { globalRefreshDocument } from "../lib/val_document";
import { useParams } from "next/navigation";
+import { useShallowEffect } from "@mantine/hooks";
export default function DrawerMore({ data }: { data: IDataDocument[] }) {
const [isCut, setIsCut] = useState(false)
const [isCopy, setIsCopy] = useState(false)
const refresh = useHookstate(globalRefreshDocument)
const param = useParams<{ id: string }>()
+ const [forbidCopy, setForbidCopy] = useState(true)
async function onMoveItem(path: string) {
@@ -51,6 +53,16 @@ export default function DrawerMore({ data }: { data: IDataDocument[] }) {
}
+ function cekFileSelected() {
+ const cek = data.some((i: any) => i.category == "FOLDER")
+ setForbidCopy(cek)
+ }
+
+ useShallowEffect(() => {
+ cekFileSelected()
+ }, [data])
+
+
return (
@@ -66,14 +78,17 @@ export default function DrawerMore({ data }: { data: IDataDocument[] }) {
Pindah
- setIsCopy(true)} justify={'center'} align={'center'} direction={'column'} >
-
-
-
-
- Salin
-
-
+ {
+ (!forbidCopy) &&
+ setIsCopy(true)} justify={'center'} align={'center'} direction={'column'} >
+
+
+
+
+ Salin
+
+
+ }
diff --git a/src/module/document/ui/navbar_document_division.tsx b/src/module/document/ui/navbar_document_division.tsx
index 8e09dec..c483594 100644
--- a/src/module/document/ui/navbar_document_division.tsx
+++ b/src/module/document/ui/navbar_document_division.tsx
@@ -46,7 +46,7 @@ export default function NavbarDocumentDivision() {
const [selectedFiles, setSelectedFiles] = useState([])
const [selectAll, setSelectAll] = useState(false)
const [dariSelectAll, setDariSelectAll] = useState(false)
- const isMobile = useMediaQuery('(max-width: 369px)');
+ const isMobile = useMediaQuery('(max-width: 369px)');
const [bodyRename, setBodyRename] = useState({
id: '',
name: '',
@@ -69,6 +69,7 @@ export default function NavbarDocumentDivision() {
extension: dataDocument[index].extension,
category: dataDocument[index].category,
share: dataDocument[index].share,
+ idStorage: dataDocument[index].idStorage
}
])
}
@@ -102,6 +103,7 @@ export default function NavbarDocumentDivision() {
extension: dataDocument[index].extension,
category: dataDocument[index].category,
share: dataDocument[index].share,
+ idStorage: dataDocument[index].idStorage
}
setSelectedFiles((selectedFiles: any) => [...selectedFiles, newArr])
}