diff --git a/src/app/api/document/more/route.ts b/src/app/api/document/more/route.ts
index f4a77c7..8127fab 100644
--- a/src/app/api/document/more/route.ts
+++ b/src/app/api/document/more/route.ts
@@ -1,6 +1,8 @@
+import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { NextResponse } from "next/server";
+
// MOVE ITEM
export async function POST(request: Request) {
try {
@@ -9,6 +11,35 @@ export async function POST(request: Request) {
return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 });
}
+ const { path, dataItem } = (await request.json());
+
+
+ if (path != "home") {
+ const cekPath = await prisma.divisionDocumentFolderFile.count({
+ where: {
+ isActive: true,
+ id: path
+ }
+ })
+
+ if (cekPath == 0) {
+ return NextResponse.json({ success: false, message: "Gagal mendapatkan path, data tidak ditemukan" }, { status: 404 });
+ }
+ }
+
+ for (let i = 0; i < dataItem.length; i++) {
+ const id = dataItem[i].id;
+ const cekFile = await prisma.divisionDocumentFolderFile.update({
+ where: {
+ id: id
+ },
+ data: {
+ path: path
+ }
+ })
+ }
+
+
return NextResponse.json({ success: true, message: "Berhasil memindahkan item" }, { status: 200 });
} catch (error) {
console.log(error);
diff --git a/src/app/api/document/route.ts b/src/app/api/document/route.ts
index 331595d..0667c34 100644
--- a/src/app/api/document/route.ts
+++ b/src/app/api/document/route.ts
@@ -17,6 +17,7 @@ export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const idDivision = searchParams.get("division");
const path = searchParams.get("path");
+ const category = searchParams.get("category");
const cekDivision = await prisma.division.count({
where: {
@@ -43,14 +44,26 @@ export async function GET(request: Request) {
}
+ let kondisi: any = {
+ isActive: true,
+ idDivision: String(idDivision),
+ path: (path == "undefined" || path == "null" || path == "" || path == null) ? "home" : path
+ }
+
+ if (category == "folder") {
+ kondisi = {
+ isActive: true,
+ idDivision: String(idDivision),
+ path: (path == "undefined" || path == "null" || path == "" || path == null) ? "home" : path,
+ category: "FOLDER"
+ }
+ }
+
+
const data = await prisma.divisionDocumentFolderFile.findMany({
- where: {
- isActive: true,
- idDivision: String(idDivision),
- path: (path == "undefined" || path == "null" || path == "" || path == null) ? "home" : path
- },
+ where: kondisi,
select: {
id: true,
category: true,
diff --git a/src/module/document/lib/api_document.ts b/src/module/document/lib/api_document.ts
index afc3e86..de4f8b5 100644
--- a/src/module/document/lib/api_document.ts
+++ b/src/module/document/lib/api_document.ts
@@ -1,4 +1,4 @@
-import { IFormEditItem, IFormFolder } from "./type_document";
+import { IFormEditItem, IFormFolder, IFormMoreItem } from "./type_document";
export const funGetAllDocument = async (path?: string) => {
const response = await fetch(`/api/document${(path) ? path : ''}`, { next: { tags: ['document'] } });
@@ -43,4 +43,15 @@ export const funDeleteDocument = async (data: []) => {
body: JSON.stringify(data),
});
return await response.json().catch(() => null);
+};
+
+export const funMoveDocument = async (data: IFormMoreItem) => {
+ const response = await fetch("/api/document/more", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(data),
+ });
+ return await response.json().catch(() => null);
};
\ No newline at end of file
diff --git a/src/module/document/lib/type_document.ts b/src/module/document/lib/type_document.ts
index 9f2dbb0..d5b06cd 100644
--- a/src/module/document/lib/type_document.ts
+++ b/src/module/document/lib/type_document.ts
@@ -23,4 +23,14 @@ export interface IFormEditItem {
path: string
idDivision: string
extension: string
+}
+
+export interface IFormDetailMoreItem {
+ id: string
+ name: string
+}
+
+export interface IFormMoreItem {
+ path: string,
+ dataItem: IFormDetailMoreItem[]
}
\ No newline at end of file
diff --git a/src/module/document/ui/drawer_cut_documents.tsx b/src/module/document/ui/drawer_cut_documents.tsx
index 7677160..69298ea 100644
--- a/src/module/document/ui/drawer_cut_documents.tsx
+++ b/src/module/document/ui/drawer_cut_documents.tsx
@@ -3,12 +3,16 @@ import { Box, Button, Divider, Flex, Grid, Group, Modal, Text, TextInput } from
import React, { useState } from 'react';
import toast from 'react-hot-toast';
import { FcDocument, FcFolder, FcImageFile } from 'react-icons/fc';
-import { funCreateFolder, funGetAllDocument } from '../lib/api_document';
+import { funCreateFolder, funGetAllDocument, funMoveDocument } from '../lib/api_document';
import { useParams } from 'next/navigation';
-import { IDataDocument } from '../lib/type_document';
+import { IDataDocument, IFormDetailMoreItem } from '../lib/type_document';
import { useShallowEffect } from '@mantine/hooks';
+import { FaFolder } from 'react-icons/fa6';
+import { IoMdFolder } from 'react-icons/io';
+import { MdFolder } from 'react-icons/md';
-export default function DrawerCutDocuments() {
+
+export default function DrawerCutDocuments({ onChoosePath, data }: { data: IFormDetailMoreItem[], onChoosePath: (val: string) => void }) {
const [opened, setOpened] = useState(false);
const param = useParams<{ id: string }>()
const [path, setPath] = useState('home')
@@ -36,10 +40,9 @@ export default function DrawerCutDocuments() {
setOpened(false)
}
-
async function getOneData() {
try {
- const respon = await funGetAllDocument("?division=" + param.id + "&path=" + path);
+ const respon = await funGetAllDocument("?division=" + param.id + "&path=" + path + "&category=folder");
if (respon.success) {
setDataDocument(respon.data);
} else {
@@ -66,29 +69,35 @@ export default function DrawerCutDocuments() {
-
+
{dataDocument.map((v, i) => {
+ const found = data.some((i: any) => i.id == v.id)
return (
- setPath(v.id)}>
+ {
+ if (!found) {
+ setPath(v.id)
+ }
+ }}>
{
- (v.category == "FOLDER") ?
- :
- (v.extension == "pdf" || v.extension == "csv") ?
- :
-
+ (found) ?
+ :
+
}
{(v.category == "FOLDER") ? v.name : v.name + '.' + v.extension}
+ {
+ (found) && Tidak bisa memilih folder ini
+ }
diff --git a/src/module/document/ui/drawer_more.tsx b/src/module/document/ui/drawer_more.tsx
index 9db2302..6f35338 100644
--- a/src/module/document/ui/drawer_more.tsx
+++ b/src/module/document/ui/drawer_more.tsx
@@ -4,10 +4,36 @@ import React, { useState } from "react";
import { LuFolders, LuFolderSymlink } from "react-icons/lu";
import DrawerCutDocuments from "./drawer_cut_documents";
import DrawerCopyDocuments from "./drawer_copy_documents";
+import { IFormDetailMoreItem } from "../lib/type_document";
+import toast from "react-hot-toast";
+import { funMoveDocument } from "../lib/api_document";
+import { useHookstate } from "@hookstate/core";
+import { globalRefreshDocument } from "../lib/val_document";
-export default function DrawerMore() {
+export default function DrawerMore({ data }: { data: IFormDetailMoreItem[] }) {
const [isCut, setIsCut] = useState(false)
const [isCopy, setIsCopy] = useState(false)
+ const refresh = useHookstate(globalRefreshDocument)
+
+
+ async function onMoveItem(path: string) {
+ try {
+ const res = await funMoveDocument({ path, dataItem: data })
+ if (res.success) {
+ toast.success(res.message)
+ refresh.set(true)
+ } else {
+ toast.error(res.message)
+ }
+ } catch (error) {
+ console.log(error)
+ toast.error("Gagal memindahkan item, coba lagi nanti")
+ }
+ setIsCut(false)
+ }
+
+
+
return (
@@ -35,11 +61,9 @@ export default function DrawerMore() {
setIsCut(false)} title={'Pilih Lokasi Pemindahan'} size="lg">
-
+ { onMoveItem(val) }} />
-
-
setIsCopy(false)} title={'Pilih Lokasi Salin'} size="lg">
diff --git a/src/module/document/ui/navbar_document_division.tsx b/src/module/document/ui/navbar_document_division.tsx
index 0f0a319..97b5e96 100644
--- a/src/module/document/ui/navbar_document_division.tsx
+++ b/src/module/document/ui/navbar_document_division.tsx
@@ -166,6 +166,8 @@ export default function NavbarDocumentDivision() {
function resetRefresh() {
refresh.set(false)
setOpen(false)
+ setMore(false)
+ handleBatal()
}
useShallowEffect(() => {
@@ -397,8 +399,11 @@ export default function NavbarDocumentDivision() {
+
+
+
setMore(false)}>
-
+
);