From 2261e83715f13eadbe5ab6d835b76a894b30fcfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Dere=C5=BEi=C4=87?= Date: Thu, 1 Feb 2024 15:07:30 +0100 Subject: [PATCH] refactoring: changing param list of a fn --- app/lib/actions/billActions.ts | 10 ++++++---- app/lib/actions/locationActions.ts | 2 +- app/lib/actions/navigationActions.ts | 9 ++++++++- app/ui/BillDeleteForm.tsx | 5 ++--- app/ui/BillEditForm.tsx | 10 +++++----- app/ui/LocationDeleteForm.tsx | 4 ++-- app/ui/LocationEditForm.tsx | 2 +- app/year-month/[id]/add/page.tsx | 2 +- 8 files changed, 26 insertions(+), 18 deletions(-) diff --git a/app/lib/actions/billActions.ts b/app/lib/actions/billActions.ts index cb84856..d5ed282 100644 --- a/app/lib/actions/billActions.ts +++ b/app/lib/actions/billActions.ts @@ -109,7 +109,7 @@ const serializeAttachment = async (billAttachment: File | null) => { * @param formData form data * @returns */ -export const updateOrAddBill = withUser(async (user:AuthenticatedUser, locationId: string, billId:string|undefined, billYear:number|undefined, prevState:State, formData: FormData) => { +export const updateOrAddBill = withUser(async (user:AuthenticatedUser, locationId: string, billId:string|undefined, billYear:number|undefined, billMonth:number|undefined, prevState:State, formData: FormData) => { const { id: userId } = user; @@ -191,7 +191,9 @@ export const updateOrAddBill = withUser(async (user:AuthenticatedUser, locationI } }); } - await gotoHome(billYear ? `/?year=${billYear}` : undefined); + if(billYear && billMonth ) { + await gotoHome({ year: billYear, month: billMonth }); + } }) export const fetchBillById = withUser(async (user:AuthenticatedUser, locationID:string, billID:string) => { @@ -219,7 +221,7 @@ export const fetchBillById = withUser(async (user:AuthenticatedUser, locationID: return([billLocation, bill] as [BillingLocation, Bill]); }) -export const deleteBillById = withUser(async (user:AuthenticatedUser, locationID:string, billID:string, year:number) => { +export const deleteBillById = withUser(async (user:AuthenticatedUser, locationID:string, billID:string, year:number, month:number) => { const { id: userId } = user; @@ -240,6 +242,6 @@ export const deleteBillById = withUser(async (user:AuthenticatedUser, locationID } }); - await gotoHome(`/?year=${year}`); + await gotoHome({year, month}); return(post.modifiedCount); }); \ No newline at end of file diff --git a/app/lib/actions/locationActions.ts b/app/lib/actions/locationActions.ts index 36fadb9..b8d7a14 100644 --- a/app/lib/actions/locationActions.ts +++ b/app/lib/actions/locationActions.ts @@ -138,5 +138,5 @@ export const deleteLocationById = withUser(async (user:AuthenticatedUser, locati // find a location with the given locationID const post = await dbClient.collection("lokacije").deleteOne({ _id: locationID, userId }); - await gotoHome(`/?year=${yearMonth?.year}`) + await gotoHome(yearMonth) }) \ No newline at end of file diff --git a/app/lib/actions/navigationActions.ts b/app/lib/actions/navigationActions.ts index 444c801..258a9df 100644 --- a/app/lib/actions/navigationActions.ts +++ b/app/lib/actions/navigationActions.ts @@ -2,8 +2,15 @@ import { revalidatePath } from "next/cache"; import { redirect } from 'next/navigation'; +import { YearMonth } from "../db-types"; -export async function gotoHome(path: string = '/') { +export async function gotoHome({year, month}: YearMonth) { + const path = `/?year=${year}&month=${month}`; + await gotoUrl(path); +} + +export async function gotoUrl(path: string) { + console.log(path) revalidatePath(path, "page"); redirect(path); } diff --git a/app/ui/BillDeleteForm.tsx b/app/ui/BillDeleteForm.tsx index 3be7946..df76fa0 100644 --- a/app/ui/BillDeleteForm.tsx +++ b/app/ui/BillDeleteForm.tsx @@ -2,7 +2,6 @@ import { FC } from "react"; import { Bill, BillingLocation } from "../lib/db-types"; -import { deleteLocationById } from "../lib/actions/locationActions"; import { useFormState } from "react-dom"; import { Main } from "./Main"; import { gotoHome } from "../lib/actions/navigationActions"; @@ -15,11 +14,11 @@ export interface BillDeleteFormProps { export const BillDeleteForm:FC = ({ bill, location }) => { - const handleAction = deleteBillById.bind(null, location._id, bill._id, location.yearMonth.year); + const handleAction = deleteBillById.bind(null, location._id, bill._id, location.yearMonth.year, location.yearMonth.month); const [ state, dispatch ] = useFormState(handleAction, null); const handleCancel = () => { - gotoHome(`/?year=${location.yearMonth.year}&month=${location.yearMonth.month}`); + gotoHome(location.yearMonth); }; return( diff --git a/app/ui/BillEditForm.tsx b/app/ui/BillEditForm.tsx index 215facd..443eb02 100644 --- a/app/ui/BillEditForm.tsx +++ b/app/ui/BillEditForm.tsx @@ -11,11 +11,11 @@ import { formatYearMonth } from "../lib/format"; // Next.js does not encode an utf-8 file name correctly when sending a form with a file attachment // This is a workaround for that -const updateOrAddBillMiddleware = (locationId: string, billId:string|undefined, billYear:number|undefined, prevState:any, formData: FormData) => { +const updateOrAddBillMiddleware = (locationId: string, billId:string|undefined, billYear:number|undefined, billMonth:number|undefined, prevState:any, formData: FormData) => { // URL encode the file name of the attachment so it is correctly sent to the server const billAttachment = formData.get('billAttachment') as File; formData.set('billAttachment', billAttachment, encodeURIComponent(billAttachment.name)); - return updateOrAddBill(locationId, billId, billYear, prevState, formData); + return updateOrAddBill(locationId, billId, billYear, billMonth, prevState, formData); } export interface BillEditFormProps { @@ -27,17 +27,17 @@ export const BillEditForm:FC = ({ location, bill }) => { const { _id: billID, name, paid, attachment, notes, payedAmount } = bill ?? { _id:undefined, name:"", paid:false, notes:"" }; - const { yearMonth:{year: billYear}, _id: locationID } = location; + const { yearMonth:{year: billYear, month: billMonth}, _id: locationID } = location; const initialState = { message: null, errors: {} }; - const handleAction = updateOrAddBillMiddleware.bind(null, locationID, billID, billYear); + const handleAction = updateOrAddBillMiddleware.bind(null, locationID, billID, billYear, billMonth); const [ state, dispatch ] = useFormState(handleAction, initialState); const [ isPaid, setIsPaid ] = React.useState(paid); // redirect to the main page const handleCancel = () => { - gotoHome(billYear ? `/?year=${billYear}&month=${location.yearMonth.month}` : undefined); + gotoHome(location.yearMonth); }; const billPaid_handleChange = (event: React.ChangeEvent) => { diff --git a/app/ui/LocationDeleteForm.tsx b/app/ui/LocationDeleteForm.tsx index 47737d9..30fe546 100644 --- a/app/ui/LocationDeleteForm.tsx +++ b/app/ui/LocationDeleteForm.tsx @@ -5,7 +5,7 @@ import { BillingLocation } from "../lib/db-types"; import { deleteLocationById } from "../lib/actions/locationActions"; import { useFormState } from "react-dom"; import { Main } from "./Main"; -import { gotoHome } from "../lib/actions/navigationActions"; +import { gotoUrl } from "../lib/actions/navigationActions"; export interface LocationDeleteFormProps { /** location which should be deleted */ @@ -18,7 +18,7 @@ export const LocationDeleteForm:FC = ({ location }) => const [ state, dispatch ] = useFormState(handleAction, null); const handleCancel = () => { - gotoHome(`/location/${location._id}/edit/`); + gotoUrl(`/location/${location._id}/edit/`); }; return( diff --git a/app/ui/LocationEditForm.tsx b/app/ui/LocationEditForm.tsx index d7c305a..7c3b8b9 100644 --- a/app/ui/LocationEditForm.tsx +++ b/app/ui/LocationEditForm.tsx @@ -24,7 +24,7 @@ export const LocationEditForm:FC = ({ location, yearMonth // redirect to the main page const handleCancel = () => { - gotoHome(location ? `/?year=${location?.yearMonth?.year}&month=${location?.yearMonth?.month}` : undefined); + if(location) gotoHome(location?.yearMonth); }; return( diff --git a/app/year-month/[id]/add/page.tsx b/app/year-month/[id]/add/page.tsx index 4725ee7..7a35d08 100644 --- a/app/year-month/[id]/add/page.tsx +++ b/app/year-month/[id]/add/page.tsx @@ -7,7 +7,7 @@ export default async function Page({ params:{ id } }: { params: { id:string } }) const { year, month } = parseYearMonth(id); await addMonth({ year, month }); - await gotoHome(`/?year=${year}`); + await gotoHome({ year, month }); return null; // if we don't return anything, the client-side will not re-validate cache } \ No newline at end of file