prevent calling unnecessary call during logout and fixed currency displaying in update form

This commit is contained in:
pramod.mahajan 2025-11-08 21:32:35 +05:30
parent e7fcfdb154
commit c14dc3d765
4 changed files with 269 additions and 251 deletions

View File

@ -165,7 +165,7 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => {
amount: data.amount || "",
noOfPersons: data.noOfPersons || "",
gstNumber: data.gstNumber || "",
currencyId: data.currencyId || DEFAULT_CURRENCY,
currencyId: data.currency.id || DEFAULT_CURRENCY,
billAttachments: data.documents
? data.documents.map((doc) => ({
fileName: doc.fileName,

View File

@ -16,11 +16,13 @@ import Error from "../common/Error";
import { useRecurringExpenseContext } from "../../pages/RecurringExpense/RecurringExpensePage";
import { useRecurringExpenseList } from "../../hooks/useExpense";
import Pagination from "../common/Pagination";
import { SpinnerLoader } from "../common/Loader";
const RecurringExpenseList = ({ search, filterStatuses }) => {
const { setManageRequest, setVieRequest, setViewRecurring } = useRecurringExpenseContext();
const { setManageRequest, setVieRequest, setViewRecurring } =
useRecurringExpenseContext();
const navigate = useNavigate();
const [IsDeleteModalOpen, setIsDeleteModalOpen,] = useState(false);
const [IsDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
const [deletingId, setDeletingId] = useState(null);
const SelfId = useSelector(
@ -68,7 +70,9 @@ const RecurringExpenseList = ({ search, filterStatuses }) => {
align: "text-end",
getValue: (e) =>
e?.amount
? `${e?.currency?.symbol ? e.currency.symbol + " " : ""}${e.amount.toLocaleString()}`
? `${
e?.currency?.symbol ? e.currency.symbol + " " : ""
}${e.amount.toLocaleString()}`
: "N/A",
},
{
@ -108,7 +112,6 @@ const RecurringExpenseList = ({ search, filterStatuses }) => {
debouncedSearch
);
const paginate = (page) => {
if (page >= 1 && page <= (data?.totalPages ?? 1)) {
setCurrentPage(page);
@ -178,8 +181,9 @@ const RecurringExpenseList = ({ search, filterStatuses }) => {
/>
)}
<div className="card page-min-h table-responsive px-sm-4">
<div className="card page-min-h table-responsive px-sm-4 ">
<div className="card-datatable" id="payment-request-table">
{Array.isArray(filteredData) && filteredData.length > 0 && (
<table className="table border-top dataTable text-nowrap align-middle">
<thead>
<tr>
@ -267,19 +271,26 @@ const RecurringExpenseList = ({ search, filterStatuses }) => {
<td
colSpan={recurringExpenseColumns?.length + 1}
className="text-center border-0 py-8"
>
<p>No Recurring Expense Found</p>
</td>
></td>
</tr>
)}
</tbody>
</table>
)}
{!filteredData ||
filteredData.length === 0
&& (
<div className="d-flex justify-content-center align-items-center h-64">
{isError ? (<p>{error.message}</p>):(<p>No Recurring Expense Found</p>)}
</div>
)}
</div>
{/* Pagination */}
<Pagination
currentPage={currentPage}
totalPages={data?.totalPages}
e
onPageChange={paginate}
/>
</div>

View File

@ -147,32 +147,36 @@ export const useAuthModal = () => {
export const useLogout = () => {
const queryClient = useQueryClient();
const naviget = useNavigate();
const navigate = useNavigate();
const dispatch = useDispatch();
return useMutation({
mutationFn: async () => {
let payload = {
refreshToken:
const refreshToken =
localStorage.getItem("refreshToken") ||
sessionStorage.getItem("refreshToken"),
};
return await AuthRepository.logout(payload);
sessionStorage.getItem("refreshToken");
if (!refreshToken) return; // no call if already removed
return await AuthRepository.logout({ refreshToken });
},
onSuccess: (data) => {
onMutate: async () => {
// Cancel all ongoing queries
await queryClient.cancelQueries();
},
onSuccess: () => {
queryClient.clear();
removeSession();
dispatch(cacheProfileData(null));
// window.location.href = "/auth/login";
naviget("/auth/login", { replace: true });
if (onSuccessCallBack) onSuccessCallBack();
navigate("/auth/login", { replace: true });
},
onError: (error) => {
showToast(error.message || "Error while creating project", "error");
onError: () => {
removeSession();
queryClient.clear();
navigate("/auth/login", { replace: true });
},
});
};

View File

@ -12,7 +12,9 @@ export const RecurringExpenseContext = createContext();
export const useRecurringExpenseContext = () => {
const context = useContext(RecurringExpenseContext);
if (!context) {
throw new Error("useRecurringExpenseContext must be used within an ExpenseProvider");
throw new Error(
"useRecurringExpenseContext must be used within an ExpenseProvider"
);
}
return context;
};
@ -21,7 +23,10 @@ const RecurringExpensePage = () => {
IsOpen: null,
RecurringId: null,
});
const [viewRecurring, setViewRecurring] = useState({ view: false, recurringId: null })
const [viewRecurring, setViewRecurring] = useState({
view: false,
recurringId: null,
});
const [selectedStatuses, setSelectedStatuses] = useState(
PAYEE_RECURRING_EXPENSE.map((s) => s.id)
@ -31,14 +36,12 @@ const RecurringExpensePage = () => {
const contextValue = {
setManageRequest,
setViewRecurring
setViewRecurring,
};
const handleStatusChange = (id) => {
setSelectedStatuses((prev) =>
prev.includes(id)
? prev.filter((s) => s !== id)
: [...prev, id]
prev.includes(id) ? prev.filter((s) => s !== id) : [...prev, id]
);
};
return (
@ -114,11 +117,13 @@ const RecurringExpensePage = () => {
</button>
</div>
</div>
</div>
</div>
<RecurringExpenseList filterStatuses={selectedStatuses} search={search} />
<RecurringExpenseList
filterStatuses={selectedStatuses}
search={search}
/>
{ManageRequest.IsOpen && (
<GlobalModel
@ -155,8 +160,6 @@ const RecurringExpensePage = () => {
<ViewRecurringExpense RecurringId={viewRecurring.recurringId} />
</GlobalModel>
)}
</div>
</RecurringExpenseContext.Provider>
);