From b60ac3a9b40ba1e7a8af8fbcba4b07b6d4ad1421 Mon Sep 17 00:00:00 2001 From: hanif salafi Date: Sun, 22 Jun 2025 12:08:08 +0700 Subject: [PATCH] feat: update category, admin settings, management user --- .../admin/add-experts/create/page.tsx | 23 ++++++++++++++++++- .../settings/category/component/column.tsx | 10 ++++++++ components/landing-page/content-category.tsx | 2 +- service/content/content.ts | 2 +- service/management-user/management-user.ts | 5 ++++ 5 files changed, 39 insertions(+), 3 deletions(-) diff --git a/app/[locale]/(protected)/admin/add-experts/create/page.tsx b/app/[locale]/(protected)/admin/add-experts/create/page.tsx index dfa67b06..ba1382e0 100644 --- a/app/[locale]/(protected)/admin/add-experts/create/page.tsx +++ b/app/[locale]/(protected)/admin/add-experts/create/page.tsx @@ -26,12 +26,13 @@ import { import { useEffect, useState } from "react"; import { AdministrationLevelList, + checkRolePlacementsAvailability, getListCompetencies, getListExperiences, saveUserInternal, saveUserRolePlacements, } from "@/service/management-user/management-user"; -import { loading } from "@/config/swal"; +import { error, loading } from "@/config/swal"; import { Eye, EyeOff } from "lucide-react"; const FormSchema = z.object({ @@ -134,6 +135,26 @@ export default function AddExpertForm() { }; loading(); + + // check availability first + var placementArr: any[] = []; + placementRows.forEach((row: any) => { + placementArr.push({ + roleId: Number(row.roleId), + userLevelId: Number(row.userLevelId), + }); + }); + + const dataReqAvail = { + placements: placementArr, + }; + const resAvail = await checkRolePlacementsAvailability(dataReqAvail); + if (resAvail?.error) { + close(); + error(resAvail.message); + return false; + } + const res = await saveUserInternal(dataReq); const resData = res?.data?.data; const userProfileId = resData?.id; diff --git a/app/[locale]/(protected)/admin/settings/category/component/column.tsx b/app/[locale]/(protected)/admin/settings/category/component/column.tsx index 7f41bda2..71813ee8 100644 --- a/app/[locale]/(protected)/admin/settings/category/component/column.tsx +++ b/app/[locale]/(protected)/admin/settings/category/component/column.tsx @@ -67,6 +67,16 @@ const columns: ColumnDef[] = [ ), }, + { + id: "created", + accessorKey: "created", + header: "Dibuat Oleh", + cell: ({ row }) => ( +
+ {row.original.createdByName}({row.original.createdByUserLevelName}) +
+ ), + }, { id: "actions", accessorKey: "action", diff --git a/components/landing-page/content-category.tsx b/components/landing-page/content-category.tsx index 690cda74..2212cff2 100644 --- a/components/landing-page/content-category.tsx +++ b/components/landing-page/content-category.tsx @@ -81,7 +81,7 @@ const ContentCategory = (props: { group?: string; type: string }) => { alt="category" width={2560} height={1440} - src={category?.smallThumbnailLink} + src={category?.thumbnailLink} className="w-full lg:h-[300px] h-40 object-cover group-hover:scale-110 transition-transform duration-300" /> diff --git a/service/content/content.ts b/service/content/content.ts index d200a906..320ddeb6 100644 --- a/service/content/content.ts +++ b/service/content/content.ts @@ -152,7 +152,7 @@ export async function getTagsBySubCategoryId(subCategory: any) { } export async function listEnableCategory(type: any) { - const url = `media/categories/list/enable?enablePage=0&sort=desc&sortBy=id&type=${type}`; + const url = `media/categories/list?enablePage=0&sort=desc&sortBy=id&type=${type}`; return httpGetInterceptor(url); } diff --git a/service/management-user/management-user.ts b/service/management-user/management-user.ts index b2098c4e..339bf4c2 100644 --- a/service/management-user/management-user.ts +++ b/service/management-user/management-user.ts @@ -46,6 +46,11 @@ export async function saveUserInternal(data: any) { return httpPostInterceptor(url, data); } +export async function checkRolePlacementsAvailability(data: any) { + const url = "users/role-placements/availability"; + return httpPostInterceptor(url, data); +} + export async function saveUserRolePlacements(data: any) { const url = "users/role-placements"; return httpPostInterceptor(url, data);