Refactor_Expenses #321
@ -33,7 +33,11 @@ import {
|
|||||||
SearchSchema,
|
SearchSchema,
|
||||||
} from "../../components/Expenses/ExpenseSchema";
|
} from "../../components/Expenses/ExpenseSchema";
|
||||||
import { useHasUserPermission } from "../../hooks/useHasUserPermission";
|
import { useHasUserPermission } from "../../hooks/useHasUserPermission";
|
||||||
import { CREATE_EXEPENSE } from "../../utils/constants";
|
import {
|
||||||
|
CREATE_EXEPENSE,
|
||||||
|
VIEW_ALL_EXPNESE,
|
||||||
|
VIEW_SELF_EXPENSE,
|
||||||
|
} from "../../utils/constants";
|
||||||
|
|
||||||
const SelectDropdown = ({
|
const SelectDropdown = ({
|
||||||
label,
|
label,
|
||||||
@ -100,12 +104,12 @@ export const useExpenseContext = () => {
|
|||||||
throw new Error("useExpenseContext must be used within an ExpenseProvider");
|
throw new Error("useExpenseContext must be used within an ExpenseProvider");
|
||||||
}
|
}
|
||||||
return context;
|
return context;
|
||||||
}
|
};
|
||||||
|
|
||||||
const ExpensePage = () => {
|
const ExpensePage = () => {
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const [filters,setFilter] = useState()
|
const [filters, setFilter] = useState();
|
||||||
const IsCreatedAble = useHasUserPermission(CREATE_EXEPENSE)
|
const IsCreatedAble = useHasUserPermission(CREATE_EXEPENSE);
|
||||||
const dropdownRef = useRef(null);
|
const dropdownRef = useRef(null);
|
||||||
const shouldCloseOnOutsideClick = useRef(false);
|
const shouldCloseOnOutsideClick = useRef(false);
|
||||||
const selectedProjectId = useSelector(
|
const selectedProjectId = useSelector(
|
||||||
@ -123,7 +127,8 @@ const ExpensePage = () => {
|
|||||||
IsOpen: false,
|
IsOpen: false,
|
||||||
Image: null,
|
Image: null,
|
||||||
});
|
});
|
||||||
|
const IsViewAll = useHasUserPermission(VIEW_ALL_EXPNESE);
|
||||||
|
const IsViewSelf = useHasUserPermission(VIEW_SELF_EXPENSE);
|
||||||
const contextValue = {
|
const contextValue = {
|
||||||
setViewExpense,
|
setViewExpense,
|
||||||
setManageExpenseModal,
|
setManageExpenseModal,
|
||||||
@ -155,7 +160,7 @@ const ExpensePage = () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const onSubmit = (data) => {
|
const onSubmit = (data) => {
|
||||||
setFilter(data)
|
setFilter(data);
|
||||||
};
|
};
|
||||||
const isValidDate = (date) => {
|
const isValidDate = (date) => {
|
||||||
return date instanceof Date && !isNaN(date);
|
return date instanceof Date && !isNaN(date);
|
||||||
@ -175,7 +180,6 @@ const setDateRange = ({ startDate, endDate }) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const toggleDropdown = () => {
|
const toggleDropdown = () => {
|
||||||
setIsOpen((prev) => {
|
setIsOpen((prev) => {
|
||||||
shouldCloseOnOutsideClick.current = !prev;
|
shouldCloseOnOutsideClick.current = !prev;
|
||||||
@ -200,18 +204,16 @@ const setDateRange = ({ startDate, endDate }) => {
|
|||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
const clearFilter = () => {
|
const clearFilter = () => {
|
||||||
setFilter(
|
setFilter({
|
||||||
{
|
|
||||||
projectIds: [],
|
projectIds: [],
|
||||||
statusIds: [],
|
statusIds: [],
|
||||||
createdByIds: [],
|
createdByIds: [],
|
||||||
paidById: [],
|
paidById: [],
|
||||||
startDate: null,
|
startDate: null,
|
||||||
endDate: null,
|
endDate: null,
|
||||||
})
|
});
|
||||||
reset()
|
reset();
|
||||||
|
};
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ExpenseContext.Provider value={contextValue}>
|
<ExpenseContext.Provider value={contextValue}>
|
||||||
@ -222,6 +224,8 @@ const setDateRange = ({ startDate, endDate }) => {
|
|||||||
{ label: "Expense", link: null },
|
{ label: "Expense", link: null },
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
{IsViewAll || IsViewSelf ? (
|
||||||
|
<>
|
||||||
<div className="card my-1 text-start px-0">
|
<div className="card my-1 text-start px-0">
|
||||||
<div className="card-body py-1 px-1">
|
<div className="card-body py-1 px-1">
|
||||||
<div className="row">
|
<div className="row">
|
||||||
@ -278,10 +282,15 @@ const setDateRange = ({ startDate, endDate }) => {
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
className="form-check-input form-check-input-sm"
|
className="form-check-input form-check-input-sm"
|
||||||
value={status.id}
|
value={status.id}
|
||||||
checked={value.includes(status.id)}
|
checked={value.includes(
|
||||||
|
status.id
|
||||||
|
)}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
if (e.target.checked) {
|
if (e.target.checked) {
|
||||||
onChange([...value, status.id]);
|
onChange([
|
||||||
|
...value,
|
||||||
|
status.id,
|
||||||
|
]);
|
||||||
} else {
|
} else {
|
||||||
onChange(
|
onChange(
|
||||||
value.filter(
|
value.filter(
|
||||||
@ -337,7 +346,7 @@ const setDateRange = ({ startDate, endDate }) => {
|
|||||||
type="button"
|
type="button"
|
||||||
className="btn btn-secondary btn-xs"
|
className="btn btn-secondary btn-xs"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
clearFilter()
|
clearFilter();
|
||||||
setIsOpen(false);
|
setIsOpen(false);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@ -376,13 +385,21 @@ const setDateRange = ({ startDate, endDate }) => {
|
|||||||
<i className="bx bx-plus fs-4 text-white"></i>
|
<i className="bx bx-plus fs-4 text-white"></i>
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ExpenseList filters={filters} />
|
<ExpenseList filters={filters} />
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<div className="card text-center py-1">
|
||||||
|
<i className="fa-solid fa-triangle-exclamation fs-5"></i>
|
||||||
|
<p>
|
||||||
|
Access Denied: You don't have permission to perform this action. !
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{ManageExpenseModal.IsOpen && (
|
{ManageExpenseModal.IsOpen && (
|
||||||
<GlobalModel
|
<GlobalModel
|
||||||
isOpen={ManageExpenseModal.IsOpen}
|
isOpen={ManageExpenseModal.IsOpen}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user