mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-25 07:45:47 +00:00
Merge branch 'development' into 'staging'
Hotfixes flock See merge request mbugroup/lti-web-client!201
This commit is contained in:
@@ -33,22 +33,6 @@ const RowsOptions = ({
|
|||||||
}) => {
|
}) => {
|
||||||
return (
|
return (
|
||||||
<RowOptionsMenuWrapper type={type}>
|
<RowOptionsMenuWrapper type={type}>
|
||||||
<RequirePermission permissions='lti.master.flocks.update'>
|
|
||||||
<Button
|
|
||||||
href={`/master-data/flock/detail/edit/?flockId=${props.row.original.id}`}
|
|
||||||
variant='ghost'
|
|
||||||
color='warning'
|
|
||||||
className='justify-start text-sm'
|
|
||||||
>
|
|
||||||
<Icon
|
|
||||||
icon='material-symbols:edit-outline'
|
|
||||||
width={16}
|
|
||||||
height={16}
|
|
||||||
className='justify-start text-sm'
|
|
||||||
/>
|
|
||||||
Edit
|
|
||||||
</Button>
|
|
||||||
</RequirePermission>
|
|
||||||
<RequirePermission permissions='lti.master.flocks.detail'>
|
<RequirePermission permissions='lti.master.flocks.detail'>
|
||||||
<Button
|
<Button
|
||||||
href={`/master-data/flock/detail/?flockId=${props.row.original.id}`}
|
href={`/master-data/flock/detail/?flockId=${props.row.original.id}`}
|
||||||
@@ -65,6 +49,22 @@ const RowsOptions = ({
|
|||||||
Detail
|
Detail
|
||||||
</Button>
|
</Button>
|
||||||
</RequirePermission>
|
</RequirePermission>
|
||||||
|
<RequirePermission permissions='lti.master.flocks.update'>
|
||||||
|
<Button
|
||||||
|
href={`/master-data/flock/detail/edit/?flockId=${props.row.original.id}`}
|
||||||
|
variant='ghost'
|
||||||
|
color='warning'
|
||||||
|
className='justify-start text-sm'
|
||||||
|
>
|
||||||
|
<Icon
|
||||||
|
icon='material-symbols:edit-outline'
|
||||||
|
width={16}
|
||||||
|
height={16}
|
||||||
|
className='justify-start text-sm'
|
||||||
|
/>
|
||||||
|
Edit
|
||||||
|
</Button>
|
||||||
|
</RequirePermission>
|
||||||
<RequirePermission permissions='lti.master.flocks.delete'>
|
<RequirePermission permissions='lti.master.flocks.delete'>
|
||||||
<Button
|
<Button
|
||||||
onClick={deleteClickHandler}
|
onClick={deleteClickHandler}
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ import ConfirmationModal from '@/components/modal/ConfirmationModal';
|
|||||||
import RequirePermission from '@/components/helper/RequirePermission';
|
import RequirePermission from '@/components/helper/RequirePermission';
|
||||||
import AlertErrorList from '@/components/helper/form/FormErrors';
|
import AlertErrorList from '@/components/helper/form/FormErrors';
|
||||||
import { useFormikErrorList } from '@/services/hooks/useFormikErrorList';
|
import { useFormikErrorList } from '@/services/hooks/useFormikErrorList';
|
||||||
|
import { toast } from 'react-hot-toast';
|
||||||
|
import Alert from '@/components/Alert';
|
||||||
|
|
||||||
interface FlockCustomProps {
|
interface FlockCustomProps {
|
||||||
formType?: 'add' | 'edit' | 'detail';
|
formType?: 'add' | 'edit' | 'detail';
|
||||||
@@ -37,7 +39,13 @@ const FlockForm = ({ formType = 'add', initialValues }: FlockCustomProps) => {
|
|||||||
const confirmationModalDeleteClickHandler = async () => {
|
const confirmationModalDeleteClickHandler = async () => {
|
||||||
setIsDeleteLoading(true);
|
setIsDeleteLoading(true);
|
||||||
|
|
||||||
await FlockApi.delete(initialValues?.id as number);
|
const deleteFlockRes = await FlockApi.delete(initialValues?.id as number);
|
||||||
|
if (deleteFlockRes?.status === 'error') {
|
||||||
|
setFlockFormErrorMessage(deleteFlockRes.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
toast.success(deleteFlockRes?.message as string);
|
||||||
|
|
||||||
deleteModal.closeModal();
|
deleteModal.closeModal();
|
||||||
setIsDeleteLoading(false);
|
setIsDeleteLoading(false);
|
||||||
@@ -68,12 +76,29 @@ const FlockForm = ({ formType = 'add', initialValues }: FlockCustomProps) => {
|
|||||||
|
|
||||||
// cek type form yang disubmit
|
// cek type form yang disubmit
|
||||||
switch (formType) {
|
switch (formType) {
|
||||||
case 'add':
|
case 'add': {
|
||||||
await FlockApi.create(payload);
|
const createFlockRes = await FlockApi.create(payload);
|
||||||
|
if (createFlockRes?.status === 'error') {
|
||||||
|
setFlockFormErrorMessage(createFlockRes.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
toast.success(createFlockRes?.message as string);
|
||||||
break;
|
break;
|
||||||
case 'edit':
|
}
|
||||||
await FlockApi.update(initialValues?.id as number, payload);
|
case 'edit': {
|
||||||
|
const updateFlockRes = await FlockApi.update(
|
||||||
|
initialValues?.id as number,
|
||||||
|
payload
|
||||||
|
);
|
||||||
|
if (updateFlockRes?.status === 'error') {
|
||||||
|
setFlockFormErrorMessage(updateFlockRes.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
toast.success(updateFlockRes?.message as string);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -174,6 +199,24 @@ const FlockForm = ({ formType = 'add', initialValues }: FlockCustomProps) => {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
<AlertErrorList formErrorList={formErrorList} onClose={close} />
|
<AlertErrorList formErrorList={formErrorList} onClose={close} />
|
||||||
|
{flockFormErrorMessage && (
|
||||||
|
<Alert color='error' className='w-full'>
|
||||||
|
<Icon
|
||||||
|
icon='material-symbols:error-outline'
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
/>
|
||||||
|
{flockFormErrorMessage}
|
||||||
|
<Button
|
||||||
|
onClick={() => setFlockFormErrorMessage('')}
|
||||||
|
variant='link'
|
||||||
|
className='ml-auto p-0 w-fit text-white'
|
||||||
|
color='none'
|
||||||
|
>
|
||||||
|
<Icon icon='material-symbols:close' width={24} height={24} />
|
||||||
|
</Button>
|
||||||
|
</Alert>
|
||||||
|
)}
|
||||||
|
|
||||||
{formType !== 'detail' && (
|
{formType !== 'detail' && (
|
||||||
<div
|
<div
|
||||||
@@ -197,17 +240,6 @@ const FlockForm = ({ formType = 'add', initialValues }: FlockCustomProps) => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{flockFormErrorMessage && (
|
|
||||||
<div role='alert' className='alert alert-error'>
|
|
||||||
<Icon
|
|
||||||
icon='material-symbols:error-outline'
|
|
||||||
width={24}
|
|
||||||
height={24}
|
|
||||||
/>
|
|
||||||
<span>{flockFormErrorMessage}</span>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|||||||
@@ -75,12 +75,12 @@ const ChickinFormKandang = ({
|
|||||||
<div className='flex flex-row gap-2'>
|
<div className='flex flex-row gap-2'>
|
||||||
<Badge
|
<Badge
|
||||||
variant='soft'
|
variant='soft'
|
||||||
color='success'
|
color='primary'
|
||||||
className={{
|
className={{
|
||||||
badge: 'rounded-lg px-2',
|
badge: 'rounded-lg px-2',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Icon icon='mdi:circle' width={12} height={12} color='success' />{' '}
|
<Icon icon='mdi:circle' width={12} height={12} color='primary' />{' '}
|
||||||
Aktif
|
Aktif
|
||||||
</Badge>
|
</Badge>
|
||||||
<div className='divider divider-horizontal p-0 m-0'></div>
|
<div className='divider divider-horizontal p-0 m-0'></div>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import ConfirmationModalWithNotes from '@/components/modal/ConfirmationModalWith
|
|||||||
import Table from '@/components/Table';
|
import Table from '@/components/Table';
|
||||||
import { ROWS_OPTIONS } from '@/config/constant';
|
import { ROWS_OPTIONS } from '@/config/constant';
|
||||||
import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
|
import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
|
||||||
import { cn, formatDate } from '@/lib/helper';
|
import { cn, formatDate, formatTitleCase } from '@/lib/helper';
|
||||||
import { AreaApi, KandangApi, LocationApi } from '@/services/api/master-data';
|
import { AreaApi, KandangApi, LocationApi } from '@/services/api/master-data';
|
||||||
import { ProjectFlockApi } from '@/services/api/production/project-flock';
|
import { ProjectFlockApi } from '@/services/api/production/project-flock';
|
||||||
import { useTableFilter } from '@/services/hooks/useTableFilter';
|
import { useTableFilter } from '@/services/hooks/useTableFilter';
|
||||||
@@ -254,7 +254,8 @@ const ProjectFlockTable = ({ refresh }: { refresh?: () => void }) => {
|
|||||||
header: 'Status',
|
header: 'Status',
|
||||||
cell: (props) => {
|
cell: (props) => {
|
||||||
const approval = props.row.original.approval;
|
const approval = props.row.original.approval;
|
||||||
|
const isRejected = approval?.action == 'REJECTED';
|
||||||
|
const isApproved = approval?.action == 'APPROVED';
|
||||||
return (
|
return (
|
||||||
<Badge
|
<Badge
|
||||||
variant='soft'
|
variant='soft'
|
||||||
@@ -262,11 +263,17 @@ const ProjectFlockTable = ({ refresh }: { refresh?: () => void }) => {
|
|||||||
badge: 'rounded-lg px-2 w-full flex flex-row justify-start',
|
badge: 'rounded-lg px-2 w-full flex flex-row justify-start',
|
||||||
}}
|
}}
|
||||||
color={
|
color={
|
||||||
approval?.step_number == 1
|
isRejected
|
||||||
|
? 'error'
|
||||||
|
: isApproved
|
||||||
|
? approval?.step_number == 1
|
||||||
? 'neutral'
|
? 'neutral'
|
||||||
: approval?.step_number == 2
|
: approval?.step_number == 2
|
||||||
|
? 'primary'
|
||||||
|
: approval?.step_number == 3
|
||||||
? 'success'
|
? 'success'
|
||||||
: 'error'
|
: 'neutral'
|
||||||
|
: 'neutral'
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
@@ -277,11 +284,15 @@ const ProjectFlockTable = ({ refresh }: { refresh?: () => void }) => {
|
|||||||
approval?.step_number == 1
|
approval?.step_number == 1
|
||||||
? 'neutral'
|
? 'neutral'
|
||||||
: approval?.step_number == 2
|
: approval?.step_number == 2
|
||||||
|
? 'primary'
|
||||||
|
: approval?.step_number == 3
|
||||||
? 'success'
|
? 'success'
|
||||||
: 'error'
|
: 'neutral'
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
{approval?.step_name}
|
{isRejected
|
||||||
|
? 'Ditolak'
|
||||||
|
: formatTitleCase(approval?.step_name || '')}
|
||||||
</Badge>
|
</Badge>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -156,9 +156,9 @@ const ProjectFlockDetail = ({
|
|||||||
projectFlock.approval?.step_number == 1
|
projectFlock.approval?.step_number == 1
|
||||||
? 'neutral'
|
? 'neutral'
|
||||||
: projectFlock.approval?.step_number == 2
|
: projectFlock.approval?.step_number == 2
|
||||||
|
? 'primary'
|
||||||
|
: projectFlock.approval?.step_number == 3
|
||||||
? 'success'
|
? 'success'
|
||||||
: projectFlock.approval?.step_number >= 3
|
|
||||||
? 'error'
|
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
className={{
|
className={{
|
||||||
@@ -173,9 +173,9 @@ const ProjectFlockDetail = ({
|
|||||||
projectFlock.approval?.step_number == 1
|
projectFlock.approval?.step_number == 1
|
||||||
? 'neutral'
|
? 'neutral'
|
||||||
: projectFlock.approval?.step_number == 2
|
: projectFlock.approval?.step_number == 2
|
||||||
|
? 'primary'
|
||||||
|
: projectFlock.approval?.step_number == 3
|
||||||
? 'success'
|
? 'success'
|
||||||
: projectFlock.approval?.step_number >= 3
|
|
||||||
? 'error'
|
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
/>{' '}
|
/>{' '}
|
||||||
@@ -273,7 +273,7 @@ const ProjectFlockDetail = ({
|
|||||||
<div className='flex flex-row gap-2'>
|
<div className='flex flex-row gap-2'>
|
||||||
<Badge
|
<Badge
|
||||||
variant='soft'
|
variant='soft'
|
||||||
color={'success'}
|
color={'primary'}
|
||||||
className={{
|
className={{
|
||||||
badge: 'rounded-lg px-2',
|
badge: 'rounded-lg px-2',
|
||||||
}}
|
}}
|
||||||
@@ -282,7 +282,7 @@ const ProjectFlockDetail = ({
|
|||||||
icon='mdi:circle'
|
icon='mdi:circle'
|
||||||
width={12}
|
width={12}
|
||||||
height={12}
|
height={12}
|
||||||
color={'success'}
|
color={'primary'}
|
||||||
/>{' '}
|
/>{' '}
|
||||||
Kandang Aktif ({projectFlock.kandangs?.length})
|
Kandang Aktif ({projectFlock.kandangs?.length})
|
||||||
</Badge>
|
</Badge>
|
||||||
|
|||||||
Reference in New Issue
Block a user