@@ -95,8 +95,8 @@ function ManageRulesContent({
9595 payeeId,
9696 setLoading,
9797} : ManageRulesContentProps ) {
98- const [ allRules , setAllRules ] = useState ( null ) ;
99- const [ rules , setRules ] = useState ( null ) ;
98+ const [ allRules , setAllRules ] = useState ( [ ] ) ;
99+ const [ page , setPage ] = useState ( 0 ) ;
100100 const [ filter , setFilter ] = useState ( '' ) ;
101101 const dispatch = useDispatch ( ) ;
102102
@@ -117,18 +117,27 @@ function ManageRulesContent({
117117
118118 const filteredRules = useMemo (
119119 ( ) =>
120- filter === '' || ! rules
121- ? rules
122- : rules . filter ( rule =>
120+ ( filter === ''
121+ ? allRules
122+ : allRules . filter ( rule =>
123123 ruleToString ( rule , filterData )
124124 . toLowerCase ( )
125125 . includes ( filter . toLowerCase ( ) ) ,
126- ) ,
127- [ rules , filter , filterData ] ,
126+ )
127+ ) . slice ( 0 , 100 + page * 50 ) ,
128+ [ allRules , filter , filterData , page ] ,
128129 ) ;
129130 const selectedInst = useSelected ( 'manage-rules' , allRules , [ ] ) ;
130131 const [ hoveredRule , setHoveredRule ] = useState ( null ) ;
131132
133+ const onSearchChange = useCallback (
134+ ( value : string ) => {
135+ setFilter ( value ) ;
136+ setPage ( 0 ) ;
137+ } ,
138+ [ setFilter ] ,
139+ ) ;
140+
132141 async function loadRules ( ) {
133142 setLoading ( true ) ;
134143
@@ -147,8 +156,7 @@ function ManageRulesContent({
147156
148157 useEffect ( ( ) => {
149158 async function loadData ( ) {
150- const loadedRules = await loadRules ( ) ;
151- setRules ( loadedRules . slice ( 0 , 100 ) ) ;
159+ await loadRules ( ) ;
152160 setLoading ( false ) ;
153161
154162 await dispatch ( initiallyLoadPayees ( ) ) ;
@@ -166,7 +174,7 @@ function ManageRulesContent({
166174 } , [ ] ) ;
167175
168176 function loadMore ( ) {
169- setRules ( rules . concat ( allRules . slice ( rules . length , rules . length + 50 ) ) ) ;
177+ setPage ( page => page + 1 ) ;
170178 }
171179
172180 async function onDeleteSelected ( ) {
@@ -179,10 +187,7 @@ function ManageRulesContent({
179187 alert ( 'Some rules were not deleted because they are linked to schedules' ) ;
180188 }
181189
182- const newRules = await loadRules ( ) ;
183- setRules ( rules => {
184- return newRules . slice ( 0 , rules . length ) ;
185- } ) ;
190+ await loadRules ( ) ;
186191 selectedInst . dispatch ( { type : 'select-none' } ) ;
187192 setLoading ( false ) ;
188193 }
@@ -191,19 +196,8 @@ function ManageRulesContent({
191196 dispatch (
192197 pushModal ( 'edit-rule' , {
193198 rule,
194- onSave : async newRule => {
195- const newRules = await loadRules ( ) ;
196-
197- setRules ( rules => {
198- const newIdx = newRules . findIndex ( rule => rule . id === newRule . id ) ;
199-
200- if ( newIdx > rules . length ) {
201- return newRules . slice ( 0 , newIdx + 75 ) ;
202- } else {
203- return newRules . slice ( 0 , rules . length ) ;
204- }
205- } ) ;
206-
199+ onSave : async ( ) => {
200+ await loadRules ( ) ;
207201 setLoading ( false ) ;
208202 } ,
209203 } ) ,
@@ -236,13 +230,7 @@ function ManageRulesContent({
236230 pushModal ( 'edit-rule' , {
237231 rule,
238232 onSave : async newRule => {
239- const newRules = await loadRules ( ) ;
240-
241- setRules ( rules => {
242- const newIdx = newRules . findIndex ( rule => rule . id === newRule . id ) ;
243- return newRules . slice ( 0 , newIdx + 75 ) ;
244- } ) ;
245-
233+ await loadRules ( ) ;
246234 setLoading ( false ) ;
247235 } ,
248236 } ) ,
@@ -253,7 +241,7 @@ function ManageRulesContent({
253241 setHoveredRule ( id ) ;
254242 } , [ ] ) ;
255243
256- if ( rules === null ) {
244+ if ( allRules . length === 0 ) {
257245 return null ;
258246 }
259247
@@ -290,13 +278,12 @@ function ManageRulesContent({
290278 < Search
291279 placeholder = "Filter rules..."
292280 value = { filter }
293- onChange = { setFilter }
281+ onChange = { onSearchChange }
294282 />
295283 </ View >
296284 < View style = { { flex : 1 } } >
297285 < RulesHeader />
298286 < SimpleTable
299- data = { filteredRules }
300287 loadMore = { loadMore }
301288 // Hide the last border of the item in the table
302289 style = { { marginBottom : - 1 } }
0 commit comments