11import Head from 'next/head' ;
22import { useRouter } from 'next/router' ;
33import React , { useEffect } from 'react' ;
4- import { AddExpensePage } from '~/components/AddExpense/AddExpensePage' ;
4+ import { AddOrEditExpensePage } from '~/components/AddExpense/AddExpensePage' ;
55import MainLayout from '~/components/Layout/MainLayout' ;
66import { env } from '~/env' ;
77import { isStorageConfigured } from '~/server/storage' ;
8- import { useAddExpenseStore } from '~/store/addStore' ;
8+ import { calculateSplitShareBasedOnAmount , useAddExpenseStore } from '~/store/addStore' ;
99import { type NextPageWithUser } from '~/types' ;
1010import { api } from '~/utils/api' ;
11+ import { toFixedNumber , toInteger } from '~/utils/numbers' ;
1112
1213// 🧾
1314
1415const AddPage : NextPageWithUser < {
1516 isStorageConfigured : boolean ;
1617 enableSendingInvites : boolean ;
1718} > = ( { user, isStorageConfigured, enableSendingInvites } ) => {
18- const { setCurrentUser, setGroup, setParticipants, setCurrency } = useAddExpenseStore (
19- ( s ) => s . actions ,
20- ) ;
19+ const {
20+ setCurrentUser,
21+ setGroup,
22+ setParticipants,
23+ setCurrency,
24+ setAmount,
25+ setDescription,
26+ setPaidBy,
27+ setAmountStr,
28+ setSplitType,
29+ } = useAddExpenseStore ( ( s ) => s . actions ) ;
2130 const currentUser = useAddExpenseStore ( ( s ) => s . currentUser ) ;
2231
2332 useEffect ( ( ) => {
@@ -32,11 +41,11 @@ const AddPage: NextPageWithUser<{
3241 } , [ ] ) ;
3342
3443 const router = useRouter ( ) ;
35- const { friendId, groupId } = router . query ;
44+ const { friendId, groupId, expenseId } = router . query ;
3645
3746 const _groupId = parseInt ( groupId as string ) ;
3847 const _friendId = parseInt ( friendId as string ) ;
39-
48+ const _expenseId = expenseId as string ;
4049 const groupQuery = api . group . getGroupDetails . useQuery (
4150 { groupId : _groupId } ,
4251 { enabled : ! ! _groupId } ,
@@ -47,6 +56,11 @@ const AddPage: NextPageWithUser<{
4756 { enabled : ! ! _friendId } ,
4857 ) ;
4958
59+ const expenseQuery = api . user . getExpenseDetails . useQuery (
60+ { expenseId : _expenseId } ,
61+ { enabled : ! ! _expenseId , refetchOnWindowFocus : false } ,
62+ ) ;
63+
5064 useEffect ( ( ) => {
5165 // Set group
5266 if ( groupId && ! groupQuery . isLoading && groupQuery . data && currentUser ) {
@@ -69,16 +83,56 @@ const AddPage: NextPageWithUser<{
6983 // eslint-disable-next-line react-hooks/exhaustive-deps
7084 } , [ friendId , friendQuery . isLoading , friendQuery . data , currentUser ] ) ;
7185
86+ useEffect ( ( ) => {
87+ if ( _expenseId && expenseQuery . data ) {
88+ console . log (
89+ 'expenseQuery.data 123' ,
90+ expenseQuery . data . expenseParticipants ,
91+ expenseQuery . data . splitType ,
92+ calculateSplitShareBasedOnAmount (
93+ toFixedNumber ( expenseQuery . data . amount ) ,
94+ expenseQuery . data . expenseParticipants . map ( ( ep ) => ( {
95+ ...ep . user ,
96+ amount : toFixedNumber ( ep . amount ) ,
97+ } ) ) ,
98+ expenseQuery . data . splitType ,
99+ expenseQuery . data . paidByUser ,
100+ ) ,
101+ ) ;
102+ expenseQuery . data . group && setGroup ( expenseQuery . data . group ) ;
103+ setParticipants (
104+ calculateSplitShareBasedOnAmount (
105+ toFixedNumber ( expenseQuery . data . amount ) ,
106+ expenseQuery . data . expenseParticipants . map ( ( ep ) => ( {
107+ ...ep . user ,
108+ amount : toFixedNumber ( ep . amount ) ,
109+ } ) ) ,
110+ expenseQuery . data . splitType ,
111+ expenseQuery . data . paidByUser ,
112+ ) ,
113+ ) ;
114+ setCurrency ( expenseQuery . data . currency ) ;
115+ setAmountStr ( toFixedNumber ( expenseQuery . data . amount ) . toString ( ) ) ;
116+ setDescription ( expenseQuery . data . name ) ;
117+ setPaidBy ( expenseQuery . data . paidByUser ) ;
118+ setAmount ( toFixedNumber ( expenseQuery . data . amount ) ) ;
119+ setSplitType ( expenseQuery . data . splitType ) ;
120+ useAddExpenseStore . setState ( { showFriends : false } ) ;
121+ }
122+ // eslint-disable-next-line react-hooks/exhaustive-deps
123+ } , [ _expenseId , expenseQuery . data ] ) ;
124+
72125 return (
73126 < >
74127 < Head >
75128 < title > Add Expense</ title >
76129 </ Head >
77130 < MainLayout hideAppBar >
78- { currentUser ? (
79- < AddExpensePage
131+ { currentUser && ( ! _expenseId || expenseQuery . data ) ? (
132+ < AddOrEditExpensePage
80133 isStorageConfigured = { isStorageConfigured }
81134 enableSendingInvites = { enableSendingInvites }
135+ expenseId = { _expenseId }
82136 />
83137 ) : (
84138 < div > </ div >
@@ -93,8 +147,6 @@ AddPage.auth = true;
93147export default AddPage ;
94148
95149export async function getServerSideProps ( ) {
96- console . log ( 'isStorageConfigured' , isStorageConfigured ( ) ) ;
97-
98150 return {
99151 props : {
100152 isStorageConfigured : ! ! isStorageConfigured ( ) ,
0 commit comments