@@ -24,6 +24,7 @@ export type MemberDataStore = Member & {
24
24
} ;
25
25
26
26
const initialStore : ( ) => MemberDataStore = ( ) => ( {
27
+ id : Math . random ( ) . toString ( 36 ) . slice ( 2 ) ,
27
28
items : [ { id : Math . random ( ) . toString ( 36 ) . slice ( 2 ) } ] ,
28
29
add : $ ( function ( this : MemberDataStore ) {
29
30
this . items = this . items . concat ( {
@@ -38,10 +39,11 @@ const initialStore: () => MemberDataStore = () => ({
38
39
} ) ,
39
40
} ) ;
40
41
41
- type BillStore = {
42
+ export type BillStore = {
42
43
name : string ;
43
44
members : MemberDataStore [ ] ;
44
45
clearAll : QRL < ( ) => void > ;
46
+ deleteMember : QRL < ( id : string ) => void > ;
45
47
} ;
46
48
47
49
const BILL_NAME_DEFAULT = "Untitled Bill" ;
@@ -54,6 +56,11 @@ export default component$(() => {
54
56
clearAll : $ ( function ( this : BillStore ) {
55
57
this . members . forEach ( ( member ) => member . clear ( ) ) ;
56
58
} ) ,
59
+ deleteMember : $ ( function ( this : BillStore , id : string ) {
60
+ this . members = this . members . filter (
61
+ ( member : MemberDataStore ) => member . id !== id ,
62
+ ) ;
63
+ } ) ,
57
64
} ) ;
58
65
const nav = useNavigate ( ) ;
59
66
const isDirty = useSignal ( true ) ;
@@ -109,10 +116,21 @@ export default component$(() => {
109
116
isDirty . value = false ;
110
117
transactions . value = await computeSplit ( store . members ) ;
111
118
119
+ nav (
120
+ `/start/?billName=${
121
+ searchParams . get ( "billName" ) || BILL_NAME_DEFAULT
122
+ } &memberCount=${
123
+ store . members . length ||
124
+ searchParams . get ( "memberCount" ) ||
125
+ MEMBER_COUNT_DEFAULT . toString ( )
126
+ } `,
127
+ ) ;
128
+
112
129
const { id } = await billsStore . save ( {
113
130
id : params . id || undefined ,
114
131
name : store . name ,
115
- members : store . members . map ( ( { name, items } ) => ( {
132
+ members : store . members . map ( ( { id, name, items } ) => ( {
133
+ id,
116
134
name,
117
135
items,
118
136
} ) ) ,
@@ -122,7 +140,6 @@ export default component$(() => {
122
140
id,
123
141
name : store . name ,
124
142
} ) ;
125
-
126
143
if ( ! params . id ) {
127
144
nav ( `/start/${ id } ` ) ;
128
145
}
@@ -134,7 +151,12 @@ export default component$(() => {
134
151
< div class = "flex flex-col md:flex-row gap-8" >
135
152
< div class = "flex flex-col gap-4 flex-1 items-center" >
136
153
{ store . members . map ( ( member , i ) => (
137
- < MemberData key = { i } store = { member } number = { i + 1 } />
154
+ < MemberData
155
+ billStore = { store }
156
+ key = { i }
157
+ store = { member }
158
+ number = { i + 1 }
159
+ />
138
160
) ) }
139
161
</ div >
140
162
< div class = "flex-1 text-center " >
0 commit comments