diff --git a/app/[locale]/(admin)/admin/settings/tenant/component/columns.tsx b/app/[locale]/(admin)/admin/settings/tenant/component/columns.tsx index 86c10b2..b8c8993 100644 --- a/app/[locale]/(admin)/admin/settings/tenant/component/columns.tsx +++ b/app/[locale]/(admin)/admin/settings/tenant/component/columns.tsx @@ -412,7 +412,7 @@ const useTableColumns = (onEdit?: (data: any) => void) => { ) : detailData ? ( - Basic Information + Basic Information Menu Access Action Access @@ -467,7 +467,7 @@ const useTableColumns = (onEdit?: (data: any) => void) => {
Created At: -

+

{detailData.createdAt ? new Date(detailData.createdAt).toLocaleString("id-ID") : "-"} @@ -475,7 +475,7 @@ const useTableColumns = (onEdit?: (data: any) => void) => {

Updated At: -

+

{detailData.updatedAt ? new Date(detailData.updatedAt).toLocaleString("id-ID") : "-"} @@ -595,7 +595,7 @@ const useTableColumns = (onEdit?: (data: any) => void) => { )}

- +
diff --git a/app/[locale]/(admin)/admin/settings/tenant/component/tenant-settings-content-table.tsx b/app/[locale]/(admin)/admin/settings/tenant/component/tenant-settings-content-table.tsx index 548e5cb..c15ae20 100644 --- a/app/[locale]/(admin)/admin/settings/tenant/component/tenant-settings-content-table.tsx +++ b/app/[locale]/(admin)/admin/settings/tenant/component/tenant-settings-content-table.tsx @@ -60,7 +60,10 @@ import { close, loading } from "@/config/swal"; import DetailTenant from "@/components/form/tenant/tenant-detail-update-form"; function TenantSettingsContentTable() { - const [activeTab, setActiveTab] = useLocalStorage('tenant-settings-active-tab', 'profile'); + const [activeTab, setActiveTab] = useLocalStorage( + "tenant-settings-active-tab", + "profile", + ); const [isUserLevelDialogOpen, setIsUserLevelDialogOpen] = useState(false); const [workflow, setWorkflow] = useState(null); @@ -120,7 +123,7 @@ function TenantSettingsContentTable() { }; const handleWorkflowSave = async ( - data: CreateApprovalWorkflowWithClientSettingsRequest + data: CreateApprovalWorkflowWithClientSettingsRequest, ) => { setIsEditingWorkflow(false); await loadData(); @@ -160,7 +163,7 @@ function TenantSettingsContentTable() { const columns = React.useMemo( () => useTableColumns((data) => handleEditUserLevel(data)), - [] + [], ); const [showData, setShowData] = React.useState("10"); const [page, setPage] = React.useState(1); @@ -252,7 +255,7 @@ function TenantSettingsContentTable() { Approval Workflow Setup {workflow && !isEditingWorkflow && ( - @@ -830,7 +836,7 @@ function TenantSettingsContentTable() { ? null : flexRender( header.column.columnDef.header, - header.getContext() + header.getContext(), )} ))} @@ -849,7 +855,7 @@ function TenantSettingsContentTable() { {flexRender( cell.column.columnDef.cell, - cell.getContext() + cell.getContext(), )} ))} diff --git a/app/[locale]/(admin)/admin/settings/tenant/page.tsx b/app/[locale]/(admin)/admin/settings/tenant/page.tsx index faaa04e..f749fe8 100644 --- a/app/[locale]/(admin)/admin/settings/tenant/page.tsx +++ b/app/[locale]/(admin)/admin/settings/tenant/page.tsx @@ -3,8 +3,21 @@ import React, { useState } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; -import { PlusIcon, SettingsIcon, UsersIcon, WorkflowIcon, DotsIcon, DeleteIcon } from "@/components/icons"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { + PlusIcon, + SettingsIcon, + UsersIcon, + WorkflowIcon, + DotsIcon, + DeleteIcon, +} from "@/components/icons"; import { ApprovalWorkflowForm } from "@/components/form/ApprovalWorkflowForm"; import { UserLevelsForm } from "@/components/form/UserLevelsForm"; import { useWorkflowModal } from "@/components/modals/WorkflowModalProvider"; @@ -42,11 +55,14 @@ import TenantSettingsPageTable from "./component/tenant-settings-content-table"; function TenantSettingsContent() { const [activeTab, setActiveTab] = useState("workflows"); const [isUserLevelDialogOpen, setIsUserLevelDialogOpen] = useState(false); - const [workflow, setWorkflow] = useState(null); + const [workflow, setWorkflow] = + useState(null); const [userLevels, setUserLevels] = useState([]); const [isLoading, setIsLoading] = useState(false); const [isEditingWorkflow, setIsEditingWorkflow] = useState(false); - const [editingUserLevel, setEditingUserLevel] = useState(null); + const [editingUserLevel, setEditingUserLevel] = useState( + null, + ); const { checkWorkflowStatus } = useWorkflowStatusCheck(); const { showWorkflowModal } = useWorkflowModal(); @@ -59,7 +75,7 @@ function TenantSettingsContent() { setIsLoading(true); try { const [comprehensiveWorkflowRes, userLevelsRes] = await Promise.all([ - getApprovalWorkflowComprehensiveDetails(), + getApprovalWorkflowComprehensiveDetails(), getUserLevels(), ]); @@ -68,7 +84,7 @@ function TenantSettingsContent() { } else { setWorkflow(null); } - + if (!userLevelsRes?.error) { setUserLevels(userLevelsRes?.data?.data || []); } @@ -79,7 +95,9 @@ function TenantSettingsContent() { } }; - const handleWorkflowSave = async (data: CreateApprovalWorkflowWithClientSettingsRequest) => { + const handleWorkflowSave = async ( + data: CreateApprovalWorkflowWithClientSettingsRequest, + ) => { setIsEditingWorkflow(false); await loadData(); // Reload data after saving }; @@ -87,7 +105,7 @@ function TenantSettingsContent() { const handleUserLevelSave = async (data: UserLevelsCreateRequest) => { try { const response = await createUserLevel(data); - + if (response?.error) { console.error("Error creating user level:", response?.message); // You can add error handling here (e.g., show error message) @@ -98,7 +116,7 @@ function TenantSettingsContent() { } catch (error) { console.error("Error creating user level:", error); } - + setIsUserLevelDialogOpen(false); setEditingUserLevel(null); await loadData(); // Reload data after saving @@ -110,7 +128,11 @@ function TenantSettingsContent() { }; const handleDeleteUserLevel = async (userLevel: UserLevel) => { - if (window.confirm(`Are you sure you want to delete "${userLevel.name}"? This action cannot be undone.`)) { + if ( + window.confirm( + `Are you sure you want to delete "${userLevel.name}"? This action cannot be undone.`, + ) + ) { try { // TODO: Implement delete API call console.log("Delete user level:", userLevel.id); @@ -137,15 +159,11 @@ function TenantSettingsContent() {
- -
- + {/* Child Levels */} {userLevels - .filter(ul => ul.parentLevelId === rootLevel.id) + .filter((ul) => ul.parentLevelId === rootLevel.id) .sort((a, b) => a.levelNumber - b.levelNumber) - .map(childLevel => ( -
+ .map((childLevel) => ( +
{childLevel.levelNumber}
-
{childLevel.name}
+
+ {childLevel.name} +
- {childLevel.aliasName} • {childLevel.group || 'No group'} + {childLevel.aliasName} •{" "} + {childLevel.group || "No group"}
@@ -618,7 +755,9 @@ function TenantSettingsContent() { )} - diff --git a/components/form/common/FormField.tsx b/components/form/common/FormField.tsx index 1027ca0..2ff44b6 100644 --- a/components/form/common/FormField.tsx +++ b/components/form/common/FormField.tsx @@ -3,13 +3,28 @@ import React from "react"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; import { Checkbox } from "@/components/ui/checkbox"; interface FormFieldProps { label: string; name: string; - type?: "text" | "email" | "password" | "number" | "tel" | "url" | "textarea" | "select" | "checkbox"; + type?: + | "text" + | "email" + | "password" + | "number" + | "tel" + | "url" + | "textarea" + | "select" + | "checkbox"; placeholder?: string; value: any; onChange: (value: any) => void; @@ -68,7 +83,9 @@ export const FormField: React.FC = ({ onValueChange={(val) => onChange(val)} disabled={disabled} > - + @@ -83,20 +100,45 @@ export const FormField: React.FC = ({ case "checkbox": return ( -
+
onChange(checked)} - disabled={disabled} - className={hasError ? "border-red-500" : ""} + checked={value} + onCheckedChange={(v) => onChange(!!v)} + className=" + h-4 w-4 + rounded-full + border border-black + text-white + data-[state=checked]:bg-black + focus-visible:ring-2 focus-visible:ring-black + " /> -
); + // case "checkbox": + // return ( + //
+ // onChange(checked)} + // disabled={disabled} + // className={hasError ? "border-red-500" : ""} + // /> + // + //
+ // ); + case "number": return ( = ({ type="number" placeholder={placeholder} value={value || ""} - onChange={(e) => onChange(e.target.value ? Number(e.target.value) : "")} + onChange={(e) => + onChange(e.target.value ? Number(e.target.value) : "") + } disabled={disabled} className={`${hasError ? "border-red-500" : ""} ${className}`} min={min} @@ -136,16 +180,12 @@ export const FormField: React.FC = ({ {required && *} )} - + {renderField()} - - {helpText && ( -

{helpText}

- )} - - {hasError && ( -

{error}

- )} + + {helpText &&

{helpText}

} + + {hasError &&

{error}

}
); }; diff --git a/components/landing-page/navbar.tsx b/components/landing-page/navbar.tsx index ceee0f6..2ade134 100644 --- a/components/landing-page/navbar.tsx +++ b/components/landing-page/navbar.tsx @@ -180,7 +180,7 @@ export default function Navbar() { - + ) : ( diff --git a/components/main/dashboard/dashboard-container.tsx b/components/main/dashboard/dashboard-container.tsx index 61d8d44..2ff1794 100644 --- a/components/main/dashboard/dashboard-container.tsx +++ b/components/main/dashboard/dashboard-container.tsx @@ -268,7 +268,7 @@ export default function DashboardContainer() { animate={{ opacity: 1, x: 0 }} transition={{ delay: 0.7 }} > -
+ {/*

Recent Content

@@ -277,7 +277,7 @@ export default function DashboardContainer() { Create Content -
+
*/}
{article?.map((list: any) => ( diff --git a/components/table/management-user/management-user-internal-column-table.tsx b/components/table/management-user/management-user-internal-column-table.tsx index e0cf636..95e637d 100644 --- a/components/table/management-user/management-user-internal-column-table.tsx +++ b/components/table/management-user/management-user-internal-column-table.tsx @@ -143,14 +143,14 @@ const columns: ColumnDef[] = [ - + Detail - + @@ -159,7 +159,7 @@ const columns: ColumnDef[] = [ {