feat:bulk delete
This commit is contained in:
parent
aebf91a442
commit
cc45c2dabb
|
|
@ -69,98 +69,98 @@ export default function Login() {
|
|||
error("Username & Password Wajib Diisi !");
|
||||
} else {
|
||||
// login dengan otp
|
||||
// loading();
|
||||
// const response: any = await emailValidation(data);
|
||||
// if (response?.error) {
|
||||
// console.log("error", response);
|
||||
// if (response?.message?.messages[0]?.includes("failed to send mail")) {
|
||||
// error("Gagal Mengirim OTP");
|
||||
// return false;
|
||||
// }
|
||||
loading();
|
||||
const response: any = await emailValidation(data);
|
||||
if (response?.error) {
|
||||
console.log("error", response);
|
||||
if (response?.message?.messages[0]?.includes("failed to send mail")) {
|
||||
error("Gagal Mengirim OTP");
|
||||
return false;
|
||||
}
|
||||
|
||||
// if (response?.message?.messages[0]?.includes("username")) {
|
||||
// error("Username / Password Tidak Sesuai");
|
||||
// return false;
|
||||
// }
|
||||
// error("Unknown Error");
|
||||
// return false;
|
||||
// }
|
||||
// close();
|
||||
// if (response?.data?.messages[0] === "Continue to setup email") {
|
||||
// setFirstLogin(true);
|
||||
// } else {
|
||||
// setNeedOtp(true);
|
||||
// }
|
||||
if (response?.message?.messages[0]?.includes("username")) {
|
||||
error("Username / Password Tidak Sesuai");
|
||||
return false;
|
||||
}
|
||||
error("Unknown Error");
|
||||
return false;
|
||||
}
|
||||
close();
|
||||
if (response?.data?.messages[0] === "Continue to setup email") {
|
||||
setFirstLogin(true);
|
||||
} else {
|
||||
setNeedOtp(true);
|
||||
}
|
||||
|
||||
// login tanpa otp
|
||||
loading();
|
||||
const response = await postSignIn(data);
|
||||
if (response?.error) {
|
||||
error("Username / Password Tidak Sesuai");
|
||||
} else {
|
||||
const profile = await getProfile(response?.data?.data?.access_token);
|
||||
const dateTime: any = new Date();
|
||||
// loading();
|
||||
// const response = await postSignIn(data);
|
||||
// if (response?.error) {
|
||||
// error("Username / Password Tidak Sesuai");
|
||||
// } else {
|
||||
// const profile = await getProfile(response?.data?.data?.access_token);
|
||||
// const dateTime: any = new Date();
|
||||
|
||||
const newTime: any = dateTime.getTime() + 10 * 60 * 1000;
|
||||
// const newTime: any = dateTime.getTime() + 10 * 60 * 1000;
|
||||
|
||||
Cookies.set("access_token", response?.data?.data?.access_token, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("refresh_token", response?.data?.data?.refresh_token, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("time_refresh", newTime, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("is_first_login", "true", {
|
||||
secure: true,
|
||||
sameSite: "strict",
|
||||
});
|
||||
const resActivity = await saveActivity(
|
||||
{
|
||||
activityTypeId: 1,
|
||||
url: "https://kontenhumas.com/auth",
|
||||
userId: profile?.data?.data?.id,
|
||||
},
|
||||
accessData?.id_token
|
||||
);
|
||||
Cookies.set("profile_picture", profile?.data?.data?.profilePictureUrl, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("uie", profile?.data?.data?.id, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("ufne", profile?.data?.data?.fullname, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("ulie", profile?.data?.data?.userLevelGroup, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("username", profile?.data?.data?.username, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("urie", profile?.data?.data?.userRoleId, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("masterPoldaId", profile?.data?.data?.masterPoldaId, {
|
||||
expires: 1,
|
||||
});
|
||||
Cookies.set("ulne", profile?.data?.data?.userLevelId, {
|
||||
expires: 1,
|
||||
});
|
||||
// Cookies.set("urce", profile?.data?.data?.roleCode, {
|
||||
// expires: 1,
|
||||
// });
|
||||
Cookies.set("email", profile?.data?.data?.email, {
|
||||
expires: 1,
|
||||
});
|
||||
router.push("/admin/dashboard");
|
||||
Cookies.set("status", "login", {
|
||||
expires: 1,
|
||||
});
|
||||
// Cookies.set("access_token", response?.data?.data?.access_token, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("refresh_token", response?.data?.data?.refresh_token, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("time_refresh", newTime, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("is_first_login", "true", {
|
||||
// secure: true,
|
||||
// sameSite: "strict",
|
||||
// });
|
||||
// const resActivity = await saveActivity(
|
||||
// {
|
||||
// activityTypeId: 1,
|
||||
// url: "https://kontenhumas.com/auth",
|
||||
// userId: profile?.data?.data?.id,
|
||||
// },
|
||||
// accessData?.id_token
|
||||
// );
|
||||
// Cookies.set("profile_picture", profile?.data?.data?.profilePictureUrl, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("uie", profile?.data?.data?.id, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("ufne", profile?.data?.data?.fullname, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("ulie", profile?.data?.data?.userLevelGroup, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("username", profile?.data?.data?.username, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("urie", profile?.data?.data?.userRoleId, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("masterPoldaId", profile?.data?.data?.masterPoldaId, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// Cookies.set("ulne", profile?.data?.data?.userLevelId, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// // Cookies.set("urce", profile?.data?.data?.roleCode, {
|
||||
// // expires: 1,
|
||||
// // });
|
||||
// Cookies.set("email", profile?.data?.data?.email, {
|
||||
// expires: 1,
|
||||
// });
|
||||
// router.push("/admin/dashboard");
|
||||
// Cookies.set("status", "login", {
|
||||
// expires: 1,
|
||||
// });
|
||||
|
||||
close();
|
||||
}
|
||||
// close();
|
||||
// }
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import {
|
|||
Autocomplete,
|
||||
AutocompleteItem,
|
||||
Calendar,
|
||||
Checkbox,
|
||||
Chip,
|
||||
ChipProps,
|
||||
Dropdown,
|
||||
|
|
@ -50,7 +51,7 @@ import {
|
|||
TableRow,
|
||||
} from "@heroui/react";
|
||||
import Link from "next/link";
|
||||
import { Key, useCallback, useEffect, useState } from "react";
|
||||
import { Key, useCallback, useEffect, useRef, useState } from "react";
|
||||
import Datepicker from "react-tailwindcss-datepicker";
|
||||
import Swal from "sweetalert2";
|
||||
import withReactContent from "sweetalert2-react-content";
|
||||
|
|
@ -112,6 +113,8 @@ export default function ArticleTable() {
|
|||
endDate: null,
|
||||
});
|
||||
|
||||
const [selectedArticles, setSelectedArticles] = useState<any>(new Set([]));
|
||||
|
||||
const [articleDate, setArticleDate] = useState<{
|
||||
startDate: any;
|
||||
endDate: any;
|
||||
|
|
@ -283,27 +286,66 @@ export default function ArticleTable() {
|
|||
}
|
||||
};
|
||||
|
||||
const selectedArticlesRef = useRef(selectedArticles);
|
||||
const articlesRef = useRef(article);
|
||||
|
||||
useEffect(() => {
|
||||
selectedArticlesRef.current = selectedArticles;
|
||||
articlesRef.current = article;
|
||||
}, [selectedArticles, article]);
|
||||
|
||||
const doBulkDelete = useCallback(() => {
|
||||
console.log("issame", Array.from(selectedArticlesRef.current));
|
||||
const now = Array.from(selectedArticlesRef.current);
|
||||
if (now.length < 1) {
|
||||
error("Pilih Article");
|
||||
return false;
|
||||
}
|
||||
const isAll = now.join("") === "all";
|
||||
|
||||
MySwal.fire({
|
||||
title: "Hapus Artikel yang Dipilih?",
|
||||
icon: "warning",
|
||||
showCancelButton: true,
|
||||
cancelButtonColor: "#3085d6",
|
||||
confirmButtonColor: "#d33",
|
||||
confirmButtonText: "Hapus",
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
if (isAll) {
|
||||
const temp = [];
|
||||
for (const element of articlesRef.current) {
|
||||
temp.push(String(element.id));
|
||||
}
|
||||
deleteBulkProcess(temp);
|
||||
} else {
|
||||
deleteBulkProcess(now as string[]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}, []);
|
||||
|
||||
const deleteBulkProcess = async (data: string[]) => {
|
||||
loading();
|
||||
for (const element of data) {
|
||||
const resDelete = await deleteArticle(element);
|
||||
}
|
||||
close();
|
||||
success("Berhasil Hapus");
|
||||
setPage(1);
|
||||
initState();
|
||||
};
|
||||
|
||||
const renderCell = useCallback(
|
||||
(article: any, columnKey: Key) => {
|
||||
const cellValue = article[columnKey as keyof any];
|
||||
|
||||
switch (columnKey) {
|
||||
case "isPublish":
|
||||
return (
|
||||
// <Chip
|
||||
// className="capitalize "
|
||||
// color={statusColorMap[article.status]}
|
||||
// size="lg"
|
||||
// variant="flat"
|
||||
// >
|
||||
// <div className="flex flex-row items-center gap-2 justify-center">
|
||||
// {article.status}
|
||||
// </div>
|
||||
// </Chip>
|
||||
<p>{article.isPublish ? "Publish" : "Draft"}</p>
|
||||
);
|
||||
return <p>{article.isPublish ? "Publish" : "Draft"}</p>;
|
||||
case "isBanner":
|
||||
return <p>{article.isBanner ? "Ya" : "Tidak"}</p>;
|
||||
|
||||
case "createdAt":
|
||||
return <p>{convertDateFormat(article.createdAt)}</p>;
|
||||
case "category":
|
||||
|
|
@ -393,6 +435,23 @@ export default function ArticleTable() {
|
|||
</>
|
||||
)}
|
||||
</DropdownItem>
|
||||
<DropdownItem
|
||||
key="deleteBulk"
|
||||
onPress={doBulkDelete}
|
||||
className={roleId && Number(roleId) < 3 ? "" : "hidden"}
|
||||
>
|
||||
{roleId && Number(roleId) < 3 && (
|
||||
<>
|
||||
{" "}
|
||||
<DeleteIcon
|
||||
color="red"
|
||||
size={18}
|
||||
className="inline ml-1 mr-2 mb-1"
|
||||
/>
|
||||
Bulk Delete
|
||||
</>
|
||||
)}
|
||||
</DropdownItem>
|
||||
</DropdownMenu>
|
||||
</Dropdown>
|
||||
</div>
|
||||
|
|
@ -402,7 +461,7 @@ export default function ArticleTable() {
|
|||
return cellValue;
|
||||
}
|
||||
},
|
||||
[article, page]
|
||||
[article, page, selectedArticles]
|
||||
);
|
||||
|
||||
let typingTimer: NodeJS.Timeout;
|
||||
|
|
@ -492,30 +551,6 @@ export default function ArticleTable() {
|
|||
placeholder="Kategori..."
|
||||
name="sub-module"
|
||||
options={categories}
|
||||
// styles={{
|
||||
// control: (base) => ({
|
||||
// ...base,
|
||||
// width: "100%",
|
||||
// overflowX: "auto",
|
||||
// }),
|
||||
// valueContainer: (base) => ({
|
||||
// ...base,
|
||||
// display: "flex",
|
||||
// flexWrap: "nowrap",
|
||||
// overflowX: "auto",
|
||||
// whiteSpace: "nowrap",
|
||||
// gap: "4px",
|
||||
// }),
|
||||
// multiValue: (base) => ({
|
||||
// ...base,
|
||||
// whiteSpace: "nowrap",
|
||||
// flexShrink: 0,
|
||||
// }),
|
||||
// multiValueLabel: (base) => ({
|
||||
// ...base,
|
||||
// whiteSpace: "nowrap",
|
||||
// }),
|
||||
// }}
|
||||
/>
|
||||
</div>
|
||||
{roleId && Number(roleId) < 3 && (
|
||||
|
|
@ -635,6 +670,9 @@ export default function ArticleTable() {
|
|||
wrapper:
|
||||
"min-h-[50px] bg-transpararent text-black dark:text-white ",
|
||||
}}
|
||||
selectionMode={roleId && Number(roleId) < 3 ? "multiple" : "none"}
|
||||
selectedKeys={selectedArticles}
|
||||
onSelectionChange={setSelectedArticles}
|
||||
>
|
||||
<TableHeader
|
||||
columns={
|
||||
|
|
|
|||
Loading…
Reference in New Issue