refactor(FE): Add guards for latest_approval and move search

This commit is contained in:
rstubryan
2026-01-19 15:27:49 +07:00
parent eefec93811
commit 9c540e7cd8
+17 -25
View File
@@ -54,17 +54,19 @@ const RowOptionsMenu = ({
rejectClickHandler: () => void; rejectClickHandler: () => void;
deleteClickHandler: () => void; deleteClickHandler: () => void;
}) => { }) => {
const showEditButton = const showEditButton = props.row.original.latest_approval
props.row.original.latest_approval.step_number !== 6 && ? props.row.original.latest_approval.step_number !== 6 &&
(props.row.original.latest_approval.step_number === 1 || (props.row.original.latest_approval.step_number === 1 ||
props.row.original.latest_approval.step_number === 2 || props.row.original.latest_approval.step_number === 2 ||
props.row.original.latest_approval.step_number === 3 || props.row.original.latest_approval.step_number === 3 ||
props.row.original.latest_approval.step_number === 4); props.row.original.latest_approval.step_number === 4)
: false;
// TODO: apply RBAC // TODO: apply RBAC
const showRealizationButton = const showRealizationButton = props.row.original.latest_approval
props.row.original.latest_approval.action !== 'REJECTED' && ? props.row.original.latest_approval.action !== 'REJECTED' &&
props.row.original.latest_approval.step_number === 4; props.row.original.latest_approval.step_number === 4
: false;
return ( return (
<RowOptionsMenuWrapper type={type}> <RowOptionsMenuWrapper type={type}>
@@ -278,6 +280,7 @@ const ExpensesTable = () => {
cell: ({ row }) => { cell: ({ row }) => {
const isCheckboxDisabled = const isCheckboxDisabled =
!row.getCanSelect() || !row.getCanSelect() ||
!row.original.latest_approval ||
row.original.latest_approval.action === 'REJECTED'; row.original.latest_approval.action === 'REJECTED';
return ( return (
@@ -413,6 +416,8 @@ const ExpensesTable = () => {
const tableEnableRowSelectionHandler: (row: Row<Expense>) => boolean = ( const tableEnableRowSelectionHandler: (row: Row<Expense>) => boolean = (
row row
) => { ) => {
if (!row.original.latest_approval) return false;
return ( return (
row.original.latest_approval.action !== 'REJECTED' && row.original.latest_approval.action !== 'REJECTED' &&
row.original.latest_approval.step_number !== 6 row.original.latest_approval.step_number !== 6
@@ -692,14 +697,6 @@ const ExpensesTable = () => {
</> </>
)} )}
</div> </div>
<DebouncedTextInput
name='search'
placeholder='Cari Biaya Operasional'
value={tableFilterState.search}
onChange={searchChangeHandler}
className={{ wrapper: 'sm:max-w-3xs' }}
/>
</div> </div>
<div className='grid grid-cols-12 justify-end gap-2'> <div className='grid grid-cols-12 justify-end gap-2'>
@@ -753,17 +750,12 @@ const ExpensesTable = () => {
}} }}
/> />
<SelectInput <DebouncedTextInput
label='Baris' name='search'
options={ROWS_OPTIONS} placeholder='Cari Biaya Operasional'
value={{ value={tableFilterState.search}
label: String(tableFilterState.pageSize), onChange={searchChangeHandler}
value: tableFilterState.pageSize, className={{ wrapper: 'col-span-12 max-w-52 justify-self-end' }}
}}
onChange={pageSizeChangeHandler}
className={{
wrapper: 'col-span-12 max-w-28 justify-self-end',
}}
/> />
</div> </div>
</div> </div>