diff --git a/src/components/FloatingActionsButton.tsx b/src/components/FloatingActionsButton.tsx
index 2e4eed07..974ca280 100644
--- a/src/components/FloatingActionsButton.tsx
+++ b/src/components/FloatingActionsButton.tsx
@@ -5,6 +5,8 @@ import Tooltip from '@/components/Tooltip';
import { cn } from '@/lib/helper';
import { Icon } from '@iconify/react';
+import { useAuth } from '@/services/hooks/useAuth';
+
type FloatingActionsButtonProps = {
actions: {
action: 'DETAIL' | 'EDIT' | 'DELETE';
@@ -13,6 +15,7 @@ type FloatingActionsButtonProps = {
onClick?: () => void;
hidden?: boolean;
disabled?: boolean;
+ permissions?: string | string[];
}[];
approvals: {
action: 'APPROVED' | 'REJECTED';
@@ -20,6 +23,7 @@ type FloatingActionsButtonProps = {
label?: string;
onClick?: () => void;
disabled?: boolean;
+ permissions?: string | string[];
}[];
selectedRowIds: number[];
onClose: () => void;
@@ -31,6 +35,7 @@ const FloatingActionsButton = ({
selectedRowIds,
onClose,
}: FloatingActionsButtonProps) => {
+ const { permissionCheck } = useAuth();
// Jika tidak ada baris yang dipilih, jangan tampilkan FAB
const positionStyles =
selectedRowIds.length > 0
@@ -71,7 +76,18 @@ const FloatingActionsButton = ({
{/* Render Aksi dari props.actions */}
{actions
- .filter((action) => !action.hidden)
+ .filter((action) => {
+ if (action.hidden) return false;
+ if (action.permissions) {
+ if (typeof action.permissions === 'string') {
+ return permissionCheck(action.permissions);
+ }
+ return action.permissions.some((permission) =>
+ permissionCheck(permission)
+ );
+ }
+ return true;
+ })
.map((action, index) => {
return (
diff --git a/src/components/pages/production/project-flock/ProjectFlockTable.tsx b/src/components/pages/production/project-flock/ProjectFlockTable.tsx
index 4be30f7a..7f8ee104 100644
--- a/src/components/pages/production/project-flock/ProjectFlockTable.tsx
+++ b/src/components/pages/production/project-flock/ProjectFlockTable.tsx
@@ -25,6 +25,8 @@ import { ChangeEventHandler, useEffect, useMemo, useState } from 'react';
import toast from 'react-hot-toast';
import useSWR from 'swr';
+import RequirePermission from '@/components/helper/RequirePermission';
+
const RowOptionsMenu = ({
type = 'dropdown',
props,
@@ -46,50 +48,58 @@ const RowOptionsMenu = ({
)}
>
-
-
- Detail
-
- {props.row.original.approval.step_name === 'Aktif' && (
+
-
- Chickin
+
+ Detail
+
+ {props.row.original.approval.step_name === 'Aktif' && (
+
+
+
+ Chickin
+
+
)}
{props.row.original.approval.step_name === 'Pengajuan' && (
-
-
- Edit
-
+
+
+
+ Edit
+
+
)}
-
-
- Delete
-
+
+
+
+ Delete
+
+
);
@@ -287,14 +297,16 @@ const ProjectFlockTable = ({ refresh }: { refresh?: () => void }) => {
-
-
- Tambah
-
+
+
+
+ Tambah
+
+
{/* void }) => {
);
setRowSelection({});
},
+ permissions: 'lti.production.project_flocks.detail',
},
{
action: 'DELETE',
@@ -639,6 +652,7 @@ const ProjectFlockTable = ({ refresh }: { refresh?: () => void }) => {
onClick: () => {
deleteModal.openModal();
},
+ permissions: 'lti.production.project_flocks.delete',
},
]}
approvals={[
@@ -651,6 +665,7 @@ const ProjectFlockTable = ({ refresh }: { refresh?: () => void }) => {
confirmModal.openModal();
},
disabled: !canApprove,
+ permissions: 'lti.production.project_flocks.approve',
},
{
icon: 'mdi:times',
@@ -660,6 +675,7 @@ const ProjectFlockTable = ({ refresh }: { refresh?: () => void }) => {
setApprovalAction('REJECTED');
confirmModal.openModal();
},
+ permissions: 'lti.production.project_flocks.approve',
},
]}
selectedRowIds={selectedRowIds}
diff --git a/src/components/pages/production/project-flock/chickin/ProjectFlockChickinDetail.tsx b/src/components/pages/production/project-flock/chickin/ProjectFlockChickinDetail.tsx
index 3b2b8f45..087f0848 100644
--- a/src/components/pages/production/project-flock/chickin/ProjectFlockChickinDetail.tsx
+++ b/src/components/pages/production/project-flock/chickin/ProjectFlockChickinDetail.tsx
@@ -22,6 +22,7 @@ import { useEffect, useState } from 'react';
import useSWR from 'swr';
import { FormHeader } from '@/components/helper/form/FormHeader';
import Link from 'next/link';
+import RequirePermission from '@/components/helper/RequirePermission';
const ProjectFlockChickinDetail = ({
projectFlockId,
@@ -484,21 +485,23 @@ const ProjectFlockChickinDetail = ({
{kandang.kandang.name}
-
{
- handleChickinClick(kandang);
- }}
- disabled={projectFlock?.approval?.step_number === 1}
- >
- Chick In{' '}
-
-
+
+ {
+ handleChickinClick(kandang);
+ }}
+ disabled={projectFlock?.approval?.step_number === 1}
+ >
+ Chick In{' '}
+
+
+
))}
diff --git a/src/components/pages/production/project-flock/detail/ProjectFlockDetail.tsx b/src/components/pages/production/project-flock/detail/ProjectFlockDetail.tsx
index 41b511c9..0ee3ae32 100644
--- a/src/components/pages/production/project-flock/detail/ProjectFlockDetail.tsx
+++ b/src/components/pages/production/project-flock/detail/ProjectFlockDetail.tsx
@@ -29,6 +29,7 @@ import {
} from '@/config/approval-line';
import useSWR from 'swr';
import { ProjectFlockKandangApi } from '@/services/api/production';
+import RequirePermission from '@/components/helper/RequirePermission';
const ProjectFlockDetail = ({
projectFlock,
@@ -110,27 +111,31 @@ const ProjectFlockDetail = ({
leftIconHref='/production/project-flock'
subtitle={`Created On ${formatDate(projectFlock.created_at, 'MMM DD, YYYY')}`}
>
-
-
-
-
-
-
-
- {
- deleteModal.openModal();
- }}
- >
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ {
+ deleteModal.openModal();
+ }}
+ >
+
+
+
+
+
{/* Informasi Umum */}
@@ -418,38 +423,42 @@ const ProjectFlockDetail = ({
-
-
+
- Chickin
-
-
-
-
+ Chickin
+
+
+
+
+
- Close
-
-
+
+ Close
+
+
+
diff --git a/src/components/pages/production/project-flock/form/ProjectFlockForm.tsx b/src/components/pages/production/project-flock/form/ProjectFlockForm.tsx
index 5ce62733..46830879 100644
--- a/src/components/pages/production/project-flock/form/ProjectFlockForm.tsx
+++ b/src/components/pages/production/project-flock/form/ProjectFlockForm.tsx
@@ -47,6 +47,7 @@ import Card from '@/components/Card';
import ProjectFlockKandangTable from '@/components/pages/production/project-flock/form/ProjectFlockKandangTable';
import { Nonstock } from '@/types/api/master-data/nonstock';
import { useUiStore } from '@/stores/ui/ui.store';
+import RequirePermission from '@/components/helper/RequirePermission';
import DrawerHeader from '@/components/helper/drawer/DrawerHeader';
interface ProjectFlockFormProps {
@@ -734,36 +735,40 @@ const ProjectFlockForm = ({
)}
{formType == 'detail' && (
- {
- if (initialValues?.id) {
- setApprovalAction('APPROVED');
- confirmModal.openModal();
- }
- }}
- disabled={!initialValues?.id || isApprovedDisabled}
- className='w-full sm:w-fit'
- >
-
- Approve
-
- {
- if (initialValues?.id) {
- setApprovalAction('REJECTED');
- confirmModal.openModal();
- }
- }}
- disabled={!initialValues?.id || isRejectedDisabled}
- className='w-full sm:w-fit'
- >
-
- Reject
-
+
+ {
+ if (initialValues?.id) {
+ setApprovalAction('APPROVED');
+ confirmModal.openModal();
+ }
+ }}
+ disabled={!initialValues?.id || isApprovedDisabled}
+ className='w-full sm:w-fit'
+ >
+
+ Approve
+
+
+
+ {
+ if (initialValues?.id) {
+ setApprovalAction('REJECTED');
+ confirmModal.openModal();
+ }
+ }}
+ disabled={!initialValues?.id || isRejectedDisabled}
+ className='w-full sm:w-fit'
+ >
+
+ Reject
+
+
)}