All language subtitles for 15. Implementing Pagination - Part 2

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 1 00:00:01,340 --> 00:00:03,150 So let's now finish 2 2 00:00:03,150 --> 00:00:05,223 building the pagination feature. 3 3 00:00:06,890 --> 00:00:08,980 And for that let's actually think 4 4 00:00:08,980 --> 00:00:11,653 about some different scenarios. 5 5 00:00:11,653 --> 00:00:12,540 And to do that, 6 6 00:00:12,540 --> 00:00:14,683 I will actually come here to the demo. 7 7 00:00:16,960 --> 00:00:19,890 So the buttons that we want to render down here 8 8 00:00:19,890 --> 00:00:22,090 are not always the same. 9 9 00:00:22,090 --> 00:00:25,930 So, in this first scenario we are on page one. 10 10 00:00:25,930 --> 00:00:27,630 And so therefore, 11 11 00:00:27,630 --> 00:00:31,230 only this next button here is showing, right. 12 12 00:00:31,230 --> 00:00:34,720 But there is, of course, no button to go back. 13 13 00:00:34,720 --> 00:00:39,210 Now, if we had actually less than 10 results, 14 14 00:00:39,210 --> 00:00:41,730 so basically only one search page, 15 15 00:00:41,730 --> 00:00:44,003 then there would be no buttons at all. 16 16 00:00:45,750 --> 00:00:48,180 Then if we are on some other page, 17 17 00:00:48,180 --> 00:00:50,430 which is not the first page, 18 18 00:00:50,430 --> 00:00:52,730 well, then we have a button to go back 19 19 00:00:52,730 --> 00:00:54,800 and one to go forward. 20 20 00:00:54,800 --> 00:00:57,760 So that is basically the third scenario. 21 21 00:00:57,760 --> 00:01:00,950 And then if we go all the way to the last page, 22 22 00:01:00,950 --> 00:01:03,723 then we only have a button to go back. 23 23 00:01:04,700 --> 00:01:06,330 And so we have to account 24 24 00:01:06,330 --> 00:01:09,860 for all of these different scenarios, okay. 25 25 00:01:09,860 --> 00:01:11,240 So let's go back 26 26 00:01:11,240 --> 00:01:13,970 and basically implement a new view 27 27 00:01:13,970 --> 00:01:15,963 for this pagination. 28 28 00:01:17,420 --> 00:01:19,650 So, here in the views, 29 29 00:01:19,650 --> 00:01:23,493 we create a new file called paginationView.js. 30 30 00:01:28,410 --> 00:01:32,830 And here let's actually copy some code from here 31 31 00:01:32,830 --> 00:01:34,680 so we don't have the same work 32 32 00:01:34,680 --> 00:01:35,983 over and over again. 33 33 00:01:39,560 --> 00:01:42,773 Then of course, this one here is called PaginationView, 34 34 00:01:45,836 --> 00:01:49,450 and the parent element is not this one, 35 35 00:01:49,450 --> 00:01:51,873 so let's go check out or markup. 36 36 00:01:53,584 --> 00:01:57,740 And so here we already are had the right element. 37 37 00:01:57,740 --> 00:02:02,250 So you see that after this unordered list of results, 38 38 00:02:02,250 --> 00:02:06,710 we have this div element with a class of pagination. 39 39 00:02:06,710 --> 00:02:10,090 And so then this one here already contains the template 40 40 00:02:10,090 --> 00:02:12,180 for a button to go back, 41 41 00:02:12,180 --> 00:02:13,800 so to the previous page, 42 42 00:02:13,800 --> 00:02:16,053 and one button to go to the next page. 43 43 00:02:17,640 --> 00:02:19,770 So we're going to need this soon 44 44 00:02:19,770 --> 00:02:24,770 but for now let's just complete this setup here, okay. 45 45 00:02:27,240 --> 00:02:29,770 And so now just as all the other classes, 46 46 00:02:29,770 --> 00:02:33,549 we will have a generate markup method here, 47 47 00:02:33,549 --> 00:02:34,799 generateMarkup, 48 48 00:02:37,270 --> 00:02:40,060 because remember, that is the method 49 49 00:02:40,060 --> 00:02:42,920 that the render method is going to call 50 50 00:02:42,920 --> 00:02:44,900 in order to generate the markup 51 51 00:02:44,900 --> 00:02:49,250 for the view that we're working on, right. 52 52 00:02:49,250 --> 00:02:52,030 So again, every view, at least every view 53 53 00:02:52,030 --> 00:02:55,070 that renders something to the user interface 54 54 00:02:55,070 --> 00:02:57,543 needs a generate markup method. 55 55 00:02:58,610 --> 00:03:00,600 So that's this one here. 56 56 00:03:00,600 --> 00:03:02,020 And so now let's account 57 57 00:03:02,020 --> 00:03:05,143 for these different scenarios that we just saw. 58 58 00:03:06,410 --> 00:03:10,740 So let's say the first one is, we are at page one, 59 59 00:03:10,740 --> 00:03:14,663 and there are other pages. 60 60 00:03:15,660 --> 00:03:18,040 Then the next one is we are on page one, 61 61 00:03:18,040 --> 00:03:22,160 and there are no other pages. 62 62 00:03:22,160 --> 00:03:24,440 Then there is the scenario that we are 63 63 00:03:25,680 --> 00:03:27,380 on the last page, 64 64 00:03:27,380 --> 00:03:28,950 and also the scenario 65 65 00:03:28,950 --> 00:03:33,363 that we are on some other page, basically. 66 66 00:03:34,470 --> 00:03:39,470 So other page, like this, okay. 67 67 00:03:39,530 --> 00:03:43,890 So what data do we need in order to figure out 68 68 00:03:43,890 --> 00:03:45,530 if we are on page one, 69 69 00:03:45,530 --> 00:03:47,623 and if there are other pages? 70 70 00:03:48,520 --> 00:03:52,800 Well, for that, we are going to need, basically, 71 71 00:03:52,800 --> 00:03:56,270 this entire search object here. 72 72 00:03:56,270 --> 00:03:58,720 So this contains all the search results, 73 73 00:03:58,720 --> 00:04:02,760 and also the current page and the results per page. 74 74 00:04:02,760 --> 00:04:04,860 And so we will need all of this data 75 75 00:04:04,860 --> 00:04:05,940 in order to compute 76 76 00:04:05,940 --> 00:04:10,090 which buttons should be displayed, all right. 77 77 00:04:10,090 --> 00:04:12,710 And so let's actually go to our controller, 78 78 00:04:12,710 --> 00:04:14,960 and already call the render function 79 79 00:04:14,960 --> 00:04:18,000 so that we can parse in the data that we need, 80 80 00:04:18,000 --> 00:04:20,083 and so that we can then use it. 81 81 00:04:20,920 --> 00:04:23,590 And, well, when do we actually want 82 82 00:04:23,590 --> 00:04:25,840 to display the pagination? 83 83 00:04:25,840 --> 00:04:28,600 Well, it's actually right at the moment 84 84 00:04:28,600 --> 00:04:31,203 when we are also displaying the search results. 85 85 00:04:32,240 --> 00:04:34,510 So we will actually do that right here 86 86 00:04:34,510 --> 00:04:36,313 after displaying the results. 87 87 00:04:37,160 --> 00:04:38,830 So we get the search query, 88 88 00:04:38,830 --> 00:04:42,050 load the search results, render the results, 89 89 00:04:42,050 --> 00:04:47,050 and then also render the initial pagination buttons. 90 90 00:04:51,810 --> 00:04:55,190 And so now here we actually need to export this view, 91 91 00:04:55,190 --> 00:04:58,430 so that we can then import it into the controller. 92 92 00:04:58,430 --> 00:05:01,873 So just like we have been doing in all the other views, 93 93 00:05:02,720 --> 00:05:05,480 we say export default, 94 94 00:05:05,480 --> 00:05:09,093 and then a new PaginationView object. 95 95 00:05:10,370 --> 00:05:15,093 And so then we come here and import that. 96 96 00:05:17,560 --> 00:05:22,030 So results becomes pagination, 97 97 00:05:22,030 --> 00:05:23,850 and now of course that view 98 98 00:05:23,850 --> 00:05:25,633 has a render method on it. 99 99 00:05:27,520 --> 00:05:31,100 So paginationView.render, 100 100 00:05:31,100 --> 00:05:32,840 and here we need to parse in 101 101 00:05:32,840 --> 00:05:36,590 basically the entire search object. 102 102 00:05:36,590 --> 00:05:40,910 So state.search. 103 103 00:05:40,910 --> 00:05:45,320 And actually that's model.state.search. 104 104 00:05:45,320 --> 00:05:46,193 And so now, 105 105 00:05:47,390 --> 00:05:50,340 through the magic of this view class here, 106 106 00:05:50,340 --> 00:05:51,893 we now get access to this data 107 107 00:05:51,893 --> 00:05:55,567 that we just parsed in, in this._data, right. 108 108 00:05:59,100 --> 00:06:01,600 So right here, this._data 109 109 00:06:02,880 --> 00:06:06,913 is now the entire search results object basically. 110 110 00:06:07,800 --> 00:06:11,410 So, in order to figure out if we are on page one 111 111 00:06:11,410 --> 00:06:13,180 and there are other pages, 112 112 00:06:13,180 --> 00:06:16,200 we need to know how many pages there are. 113 113 00:06:16,200 --> 00:06:18,063 So, let's compute that. 114 114 00:06:19,220 --> 00:06:20,843 So const numPages, 115 115 00:06:22,620 --> 00:06:25,333 and how do we actually know the number of pages? 116 116 00:06:26,200 --> 00:06:28,970 Well, basically we need the number of results 117 117 00:06:28,970 --> 00:06:33,360 divided by the number of results per page, right. 118 118 00:06:33,360 --> 00:06:36,040 So for example if we had 60 results, 119 119 00:06:36,040 --> 00:06:40,710 and 10 results per page, then, we had six pages. 120 120 00:06:40,710 --> 00:06:45,577 So, the number of results comes from this.data.results. 121 121 00:06:51,390 --> 00:06:54,320 So let's check that in the model here again. 122 122 00:06:54,320 --> 00:06:57,490 So results, again, is the entire array, 123 123 00:06:57,490 --> 00:07:00,480 which contains, so all the search results, 124 124 00:07:00,480 --> 00:07:03,230 and then we also have results per page, 125 125 00:07:03,230 --> 00:07:05,840 which is this configuration constant 126 126 00:07:05,840 --> 00:07:08,840 that we set to 10, remember. 127 127 00:07:08,840 --> 00:07:10,630 So let me copy this, 128 128 00:07:10,630 --> 00:07:14,180 and then here we will divide that. 129 129 00:07:14,180 --> 00:07:17,413 So this.data.resultsPerPage. 130 130 00:07:19,100 --> 00:07:21,020 And this is a very important variable, 131 131 00:07:21,020 --> 00:07:24,710 so let's start by logging it to the console, 132 132 00:07:24,710 --> 00:07:26,720 and with this, we will then also know 133 133 00:07:26,720 --> 00:07:29,670 if we correctly hooked everything up here. 134 134 00:07:29,670 --> 00:07:31,487 So basically, if this render here 135 135 00:07:31,487 --> 00:07:35,053 of the pagination view is already doing its work. 136 136 00:07:36,430 --> 00:07:37,573 So let's see. 137 137 00:07:41,070 --> 00:07:42,453 Searching for pizza. 138 138 00:07:44,130 --> 00:07:48,580 Well, here we get some, (chuckles) not a number. 139 139 00:07:48,580 --> 00:07:50,300 And of course, well, 140 140 00:07:50,300 --> 00:07:53,760 here actually we already have something rendered. 141 141 00:07:53,760 --> 00:07:56,230 And so that's undefined because right now 142 142 00:07:56,230 --> 00:08:00,400 we are not returning anything from this function. 143 143 00:08:00,400 --> 00:08:02,660 And so if we don't return anything 144 144 00:08:02,660 --> 00:08:05,310 by default undefined is returned, 145 145 00:08:05,310 --> 00:08:09,283 and so that's 10 basically rendered here to the page. 146 146 00:08:10,300 --> 00:08:12,160 But anyway, what matters here 147 147 00:08:12,160 --> 00:08:15,730 is that for some reason we got not a number. 148 148 00:08:15,730 --> 00:08:18,810 So that means, ah! 149 149 00:08:18,810 --> 00:08:20,690 And I know why here. 150 150 00:08:20,690 --> 00:08:24,630 So here, this is the entire array, right. 151 151 00:08:24,630 --> 00:08:27,440 So we are dividing this array by the number. 152 152 00:08:27,440 --> 00:08:30,633 But of course what we want is the length of the array. 153 153 00:08:33,430 --> 00:08:35,023 So let's try that again. 154 154 00:08:36,700 --> 00:08:40,950 Yeah, now we get 5.9 pages. 155 155 00:08:40,950 --> 00:08:43,000 And of course we now need to round that 156 156 00:08:43,000 --> 00:08:45,790 to the next highest integer. 157 157 00:08:45,790 --> 00:08:50,763 And so for that we simply use Math.ceil, remember. 158 158 00:08:52,250 --> 00:08:56,550 And so this will now become six, okay. 159 159 00:08:56,550 --> 00:09:00,193 So, let's do some check here. 160 160 00:09:01,150 --> 00:09:03,330 So if we're currently on page one, 161 161 00:09:03,330 --> 00:09:08,330 which is this.data.page equals one. 162 162 00:09:11,810 --> 00:09:13,370 And so now it is very important 163 163 00:09:13,370 --> 00:09:17,960 that we actually have the current page in this state, right. 164 164 00:09:17,960 --> 00:09:19,743 So that's why we put it right here. 165 165 00:09:20,830 --> 00:09:24,700 So whenever the getSearchResultsPage method 166 166 00:09:24,700 --> 00:09:27,173 is being called with some value. 167 167 00:09:28,800 --> 00:09:30,380 So just to illustrate this, 168 168 00:09:30,380 --> 00:09:33,563 let's actually render the results at page two, 169 169 00:09:34,960 --> 00:09:38,023 just to then test if what we have here works. 170 170 00:09:39,000 --> 00:09:42,570 But anyway, here we are testing if we're on page one. 171 171 00:09:42,570 --> 00:09:46,780 And so that's this.data.page equals one, 172 172 00:09:46,780 --> 00:09:48,860 and there are other pages. 173 173 00:09:48,860 --> 00:09:50,600 And so basically that means 174 174 00:09:50,600 --> 00:09:53,210 that the current page needs to be less 175 175 00:09:53,210 --> 00:09:55,070 than the number of pages. 176 176 00:09:55,070 --> 00:09:56,630 And so that basically means 177 177 00:09:56,630 --> 00:09:59,763 that number of pages here is greater than one. 178 178 00:10:00,840 --> 00:10:04,433 So numPages greater than one. 179 179 00:10:05,490 --> 00:10:07,833 So this is our first if check, 180 180 00:10:09,270 --> 00:10:14,270 let's actually log that to the console page one 181 181 00:10:14,790 --> 00:10:16,370 and others. 182 182 00:10:16,370 --> 00:10:18,893 Or actually let's even return that string. 183 183 00:10:19,900 --> 00:10:22,983 'Cause we already know that this will then get printed. 184 184 00:10:24,470 --> 00:10:25,720 Even though of course, 185 185 00:10:25,720 --> 00:10:27,693 this is not at all what we want. 186 186 00:10:28,620 --> 00:10:31,270 Now this one here we will leave to the end. 187 187 00:10:31,270 --> 00:10:32,923 So let's continue with this one. 188 188 00:10:34,690 --> 00:10:37,723 So being on the last page basically means 189 189 00:10:37,723 --> 00:10:39,130 that the current page 190 190 00:10:39,130 --> 00:10:43,950 is the same as the number of pages, right. 191 191 00:10:43,950 --> 00:10:48,950 So data.page is equal the number of pages. 192 192 00:10:51,280 --> 00:10:54,100 So in the current example we have six pages. 193 193 00:10:54,100 --> 00:10:57,120 And so if the current page is number six, 194 194 00:10:57,120 --> 00:11:00,173 well, then that means we are on the last page. 195 195 00:11:01,550 --> 00:11:06,550 So here let's return last page. 196 196 00:11:11,540 --> 00:11:13,800 Then here some other page, 197 197 00:11:13,800 --> 00:11:16,260 basically simply means that the current page 198 198 00:11:16,260 --> 00:11:18,423 is less than the number of pages. 199 199 00:11:21,830 --> 00:11:24,840 And if any of what I'm saying doesn't make sense, 200 200 00:11:24,840 --> 00:11:26,910 then probably the best thing to do 201 201 00:11:26,910 --> 00:11:28,560 is to pause the video, 202 202 00:11:28,560 --> 00:11:30,623 and think about this on your own. 203 203 00:11:31,610 --> 00:11:33,773 So that's always my advice. 204 204 00:11:35,030 --> 00:11:38,280 So basically, reflecting on what I'm saying 205 205 00:11:38,280 --> 00:11:42,700 is usually the best solution to really figuring out 206 206 00:11:42,700 --> 00:11:45,990 what exactly it is what I'm doing here. 207 207 00:11:45,990 --> 00:11:49,060 So of course I'm trying my best to explain everything, 208 208 00:11:49,060 --> 00:11:50,260 but at a certain point, 209 209 00:11:50,260 --> 00:11:53,390 you also have to take a look at the code 210 210 00:11:53,390 --> 00:11:56,123 and think about it on your own a bit. 211 211 00:11:57,320 --> 00:12:00,640 But anyway, this actually already covers 212 212 00:12:00,640 --> 00:12:01,913 all of the scenarios. 213 213 00:12:03,220 --> 00:12:05,970 So if none of these scenarios here is met, 214 214 00:12:05,970 --> 00:12:09,480 then that basically means that we are on page one, 215 215 00:12:09,480 --> 00:12:11,383 and there are no other pages. 216 216 00:12:17,447 --> 00:12:21,447 And so in this case we can return only one page. 217 217 00:12:24,450 --> 00:12:27,400 And actually that is not really true 218 218 00:12:27,400 --> 00:12:30,110 because let's say that we only had one, 219 219 00:12:30,110 --> 00:12:32,350 so that numPage would be one, 220 220 00:12:32,350 --> 00:12:35,570 then actually this here would also be true. 221 221 00:12:35,570 --> 00:12:38,550 So here we have to add the same as before, 222 222 00:12:38,550 --> 00:12:41,593 so numPages needs to be also greater than one. 223 223 00:12:42,530 --> 00:12:45,290 So then we are really on the last page 224 224 00:12:45,290 --> 00:12:47,870 and need to render some other buttons. 225 225 00:12:47,870 --> 00:12:49,430 So, but to test this, 226 226 00:12:49,430 --> 00:12:52,173 let's keep in mind that we are currently on page two. 227 227 00:12:53,430 --> 00:12:54,270 And so therefore, 228 228 00:12:54,270 --> 00:12:57,983 we want to now see other page rendered. 229 229 00:13:01,130 --> 00:13:03,090 So let's see. 230 230 00:13:03,090 --> 00:13:06,670 And indeed, there we have another page. 231 231 00:13:06,670 --> 00:13:08,443 Now let's try page number six. 232 232 00:13:14,630 --> 00:13:17,470 So here we see we have six pages, 233 233 00:13:17,470 --> 00:13:19,653 and so now it says last page. 234 234 00:13:20,670 --> 00:13:21,890 Great. 235 235 00:13:21,890 --> 00:13:23,393 And now page number one. 236 236 00:13:25,490 --> 00:13:27,363 And so one more time. 237 237 00:13:29,600 --> 00:13:33,310 And so page one but there are other pages. 238 238 00:13:33,310 --> 00:13:34,190 Great. 239 239 00:13:34,190 --> 00:13:37,090 So this was I think the hardest part, 240 240 00:13:37,090 --> 00:13:39,790 so figuring out these different scenarios. 241 241 00:13:39,790 --> 00:13:42,903 And now all we need to do is to create the markup. 242 242 00:13:43,870 --> 00:13:48,400 So let's come here to the HTML and grab this code. 243 243 00:13:48,400 --> 00:13:51,463 So this is the code for going to the previous page. 244 244 00:13:55,510 --> 00:13:58,700 So when do we want to go to the previous page? 245 245 00:13:58,700 --> 00:14:00,693 Well, for example right here, 246 246 00:14:01,570 --> 00:14:04,050 on the last page, right. 247 247 00:14:04,050 --> 00:14:08,023 So here, in fact, we only want exactly that one button. 248 248 00:14:13,330 --> 00:14:17,470 Now what is the page here that we want to go to? 249 249 00:14:17,470 --> 00:14:19,860 So we need this number here. 250 250 00:14:19,860 --> 00:14:23,943 Well, that page is basically the current one minus one. 251 251 00:14:25,630 --> 00:14:26,463 Right. 252 252 00:14:27,500 --> 00:14:32,500 So, we are using this this.data.page a lot of times, 253 253 00:14:33,040 --> 00:14:34,943 so let's store that in a variable. 254 254 00:14:37,360 --> 00:14:42,360 So, yeah, const current page is this. 255 255 00:14:46,030 --> 00:14:50,150 And so now let's replace that everywhere here 256 256 00:14:50,150 --> 00:14:52,053 with current page. 257 257 00:14:53,250 --> 00:14:58,250 So here we will then want the current page minus one. 258 258 00:14:59,420 --> 00:15:02,473 And here we need to replace the icons. 259 259 00:15:05,710 --> 00:15:06,543 Okay. 260 260 00:15:07,640 --> 00:15:09,690 Then here on page one, 261 261 00:15:09,690 --> 00:15:12,100 we basically need the opposite. 262 262 00:15:12,100 --> 00:15:15,060 So again, we only want just one button 263 263 00:15:15,060 --> 00:15:18,080 but the one to go to the next page. 264 264 00:15:18,080 --> 00:15:19,323 So let's grab it. 265 265 00:15:20,370 --> 00:15:23,363 And actually it's almost the same markup. 266 266 00:15:26,890 --> 00:15:29,633 So another nice template literal. 267 267 00:15:35,000 --> 00:15:38,493 And now here it says page three. 268 268 00:15:39,530 --> 00:15:40,630 And so of course, 269 269 00:15:40,630 --> 00:15:45,133 here we will now want to go to the current page plus one. 270 270 00:15:48,150 --> 00:15:49,330 Right. 271 271 00:15:49,330 --> 00:15:52,653 And then here, again, we need to replace the icons. 272 272 00:15:57,560 --> 00:15:58,423 Okay. 273 273 00:15:59,670 --> 00:16:02,740 And then here for the other page, 274 274 00:16:02,740 --> 00:16:04,893 we want basically both of them. 275 275 00:16:05,990 --> 00:16:09,150 So let's return this, 276 276 00:16:09,150 --> 00:16:11,270 or actually this one here. 277 277 00:16:11,270 --> 00:16:13,863 So first the button to go back. 278 278 00:16:17,038 --> 00:16:20,747 And then also add the button to go forward. 279 279 00:16:23,730 --> 00:16:28,470 All right, and then when we're on page one, 280 280 00:16:28,470 --> 00:16:30,530 then we simply return nothing, 281 281 00:16:30,530 --> 00:16:33,900 because here we don't want to render any button. 282 282 00:16:33,900 --> 00:16:35,300 So if there are no other pages 283 283 00:16:35,300 --> 00:16:37,573 there's nowhere to go, of course. 284 284 00:16:38,630 --> 00:16:40,110 All right. 285 285 00:16:40,110 --> 00:16:42,950 So let's see what page we are currently on, 286 286 00:16:42,950 --> 00:16:44,600 so page one. 287 287 00:16:44,600 --> 00:16:48,217 And so that should render then this button here. 288 288 00:16:50,870 --> 00:16:54,610 So saying, page two. 289 289 00:16:54,610 --> 00:16:55,483 So let's see. 290 290 00:16:57,130 --> 00:17:00,050 And indeed, page two. 291 291 00:17:00,050 --> 00:17:01,500 Now of course if we click here 292 292 00:17:01,500 --> 00:17:03,400 then nothing's going to happen, 293 293 00:17:03,400 --> 00:17:05,273 but for now that is not the point. 294 294 00:17:06,440 --> 00:17:08,723 Let's try page number four now. 295 295 00:17:13,560 --> 00:17:18,560 So, go back to page three or forward to page five. 296 296 00:17:19,200 --> 00:17:21,030 So beautiful. 297 297 00:17:21,030 --> 00:17:22,850 So it looks like it's working, 298 298 00:17:22,850 --> 00:17:26,313 let's just try the last page here now. 299 299 00:17:30,760 --> 00:17:32,293 Oh, what's going on here? 300 300 00:17:36,420 --> 00:17:39,990 And indeed, it says to go back to page five 301 301 00:17:39,990 --> 00:17:42,450 but no page to go forward. 302 302 00:17:42,450 --> 00:17:44,040 So that's awesome. 303 303 00:17:44,040 --> 00:17:46,170 Now the next thing that we need to do here 304 304 00:17:46,170 --> 00:17:50,130 is to then add an event listener to these buttons, 305 305 00:17:50,130 --> 00:17:52,860 so that we can then actually go back 306 306 00:17:52,860 --> 00:17:55,300 and display another page. 307 307 00:17:55,300 --> 00:17:58,290 So right now, this is not useful at all 308 308 00:17:58,290 --> 00:18:00,480 but at least we already have our buttons here 309 309 00:18:00,480 --> 00:18:02,560 showing up right in the beginning 310 310 00:18:02,560 --> 00:18:04,533 when the search results are loaded. 311 311 00:18:06,400 --> 00:18:08,000 Okay. 312 312 00:18:08,000 --> 00:18:11,980 Now, this code here could of course be refactored 313 313 00:18:11,980 --> 00:18:14,180 because we are repeating a lot of code here. 314 314 00:18:15,310 --> 00:18:19,130 So this button is the same as this next button 315 315 00:18:19,130 --> 00:18:23,300 and the previous button is also the same here, okay. 316 316 00:18:23,300 --> 00:18:24,940 So we could refactor that 317 317 00:18:24,940 --> 00:18:27,060 but I will actually not do it here, 318 318 00:18:27,060 --> 00:18:29,940 and instead leave it for you as a challenge. 319 319 00:18:29,940 --> 00:18:32,310 So you might create a method called, 320 320 00:18:32,310 --> 00:18:35,230 for example, generate markup button, 321 321 00:18:35,230 --> 00:18:38,920 and then refactor that code in that method. 322 322 00:18:38,920 --> 00:18:42,020 But here, I'm not gonna waste any more time, 323 323 00:18:42,020 --> 00:18:44,030 and instead, I will go immediately 324 324 00:18:44,030 --> 00:18:46,750 to adding the event listener. 325 325 00:18:46,750 --> 00:18:48,230 Now just like before, 326 326 00:18:48,230 --> 00:18:51,970 we need to use the publisher subscriber pattern, 327 327 00:18:51,970 --> 00:18:54,050 just like we did, for example here, 328 328 00:18:54,050 --> 00:18:56,573 in the recipe view, remember? 329 329 00:18:57,580 --> 00:19:01,210 So, again that works by creating a publisher, 330 330 00:19:01,210 --> 00:19:03,640 which is basically a function 331 331 00:19:03,640 --> 00:19:06,260 which is the one listening for the event, 332 332 00:19:06,260 --> 00:19:08,600 which receives a handler function, 333 333 00:19:08,600 --> 00:19:11,709 which in our case, is going to be a controller 334 334 00:19:11,709 --> 00:19:13,940 that lives here in the controller. 335 335 00:19:13,940 --> 00:19:14,890 And so with this, 336 336 00:19:14,890 --> 00:19:17,770 we will then be able to listen for the event 337 337 00:19:17,770 --> 00:19:20,620 here in the view where it makes sense, 338 338 00:19:20,620 --> 00:19:22,030 while at the same time, 339 339 00:19:22,030 --> 00:19:24,070 being able to handle that event 340 340 00:19:24,070 --> 00:19:27,023 from the controller, basically, okay. 341 341 00:19:28,180 --> 00:19:31,333 So, let's add that method here. 342 342 00:19:32,300 --> 00:19:33,483 So addHandler, 343 343 00:19:35,360 --> 00:19:36,773 I'm just calling it click. 344 344 00:19:37,680 --> 00:19:40,213 So for a click on one of the buttons. 345 345 00:19:42,060 --> 00:19:43,530 Okay. 346 346 00:19:43,530 --> 00:19:47,230 Now here we are going to use event delegation, 347 347 00:19:47,230 --> 00:19:49,720 because there are going to be two buttons, 348 348 00:19:49,720 --> 00:19:50,553 but of course, 349 349 00:19:50,553 --> 00:19:54,200 we don't want to listen to each of them individually. 350 350 00:19:54,200 --> 00:19:57,170 So instead, we will add the event listener 351 351 00:19:57,170 --> 00:19:59,833 to the common parent element, 352 352 00:20:00,680 --> 00:20:02,703 which is indeed this.parentElement. 353 353 00:20:06,360 --> 00:20:07,410 So .addEventListener, 354 354 00:20:10,342 --> 00:20:14,120 and this time, finally, listening for a click. 355 355 00:20:15,668 --> 00:20:17,930 And then here we have a function, 356 356 00:20:17,930 --> 00:20:20,570 because we cannot immediately call the handler 357 357 00:20:20,570 --> 00:20:22,170 that comes in here, 358 358 00:20:22,170 --> 00:20:24,740 because first, we will need to figure out 359 359 00:20:24,740 --> 00:20:26,970 which button was actually clicked, 360 360 00:20:26,970 --> 00:20:28,463 based on the event. 361 361 00:20:29,390 --> 00:20:31,370 So that's event delegation 362 362 00:20:31,370 --> 00:20:34,550 and I hope you remember how it works. 363 363 00:20:34,550 --> 00:20:39,550 So in this case we can simply create a button element 364 364 00:20:40,950 --> 00:20:43,210 and select the closest button element 365 365 00:20:43,210 --> 00:20:45,320 to the clicked element. 366 366 00:20:45,320 --> 00:20:48,550 So the clicked element is e.target, 367 367 00:20:48,550 --> 00:20:51,380 and then closest, 368 368 00:20:51,380 --> 00:20:54,040 which is really an amazing method. 369 369 00:20:54,040 --> 00:20:55,403 And so here we can now, 370 370 00:20:57,130 --> 00:21:00,540 basically look for this button. 371 371 00:21:00,540 --> 00:21:04,963 So for the element with this class, all right. 372 372 00:21:05,800 --> 00:21:08,480 So remember that the closest method 373 373 00:21:08,480 --> 00:21:10,610 is a little bit like query selector, 374 374 00:21:10,610 --> 00:21:13,120 but instead for searching down in the tree, 375 375 00:21:13,120 --> 00:21:14,730 so for children, 376 376 00:21:14,730 --> 00:21:17,430 it basically searches up in the tree. 377 377 00:21:17,430 --> 00:21:19,380 So it looks for parents. 378 378 00:21:19,380 --> 00:21:22,750 And this is important because here in the button, 379 379 00:21:22,750 --> 00:21:26,220 we might actually click on this span element, 380 380 00:21:26,220 --> 00:21:29,340 or on this SVG or this use, 381 381 00:21:29,340 --> 00:21:32,150 instead of clicking on the button itself. 382 382 00:21:32,150 --> 00:21:35,730 So we cannot simply set the button to e.target, 383 383 00:21:35,730 --> 00:21:37,990 but we actually need to search 384 384 00:21:37,990 --> 00:21:40,333 for the closest button element itself. 385 385 00:21:41,360 --> 00:21:43,550 And just to see that this works, 386 386 00:21:43,550 --> 00:21:46,390 let's actually now create our controller. 387 387 00:21:46,390 --> 00:21:48,470 So here we will then log that button 388 388 00:21:48,470 --> 00:21:52,400 to the console only for now, all right. 389 389 00:21:52,400 --> 00:21:54,600 And so now let's go to the controller 390 390 00:21:54,600 --> 00:21:57,173 and as always create a new controller here. 391 391 00:21:58,360 --> 00:22:00,400 So basically this is the controller 392 392 00:22:00,400 --> 00:22:02,830 that will be executed whenever a click 393 393 00:22:02,830 --> 00:22:04,563 on one of the buttons happens. 394 394 00:22:06,620 --> 00:22:11,620 So controlPagination is a function, 395 395 00:22:14,710 --> 00:22:17,840 which for now doesn't really do anything, 396 396 00:22:17,840 --> 00:22:21,970 let's just call it Pag controller. 397 397 00:22:21,970 --> 00:22:24,143 So simply logging this to the console, 398 398 00:22:25,190 --> 00:22:27,223 but what matters here is that now, 399 399 00:22:28,170 --> 00:22:32,900 we call the paginationView and addhandlerClick. 400 400 00:22:32,900 --> 00:22:35,600 And so this will then, of course, 401 401 00:22:35,600 --> 00:22:37,240 call this function here, 402 402 00:22:37,240 --> 00:22:40,230 which in turn will call addEventListener, 403 403 00:22:40,230 --> 00:22:43,080 so that we can start listening for the click event 404 404 00:22:43,930 --> 00:22:48,313 on this pagination element, okay. 405 405 00:22:49,260 --> 00:22:52,063 Now here we also parse in the handler. 406 406 00:22:53,100 --> 00:22:55,840 So that's controlPagination, 407 407 00:22:55,840 --> 00:22:59,650 And so just, again to check if everything is working, 408 408 00:22:59,650 --> 00:23:02,823 let's simply also call that handler right here. 409 409 00:23:03,960 --> 00:23:06,590 So once we click on the button now, 410 410 00:23:06,590 --> 00:23:09,740 we should see this button logged to the console, 411 411 00:23:09,740 --> 00:23:13,000 and then also the handler function should run, 412 412 00:23:13,000 --> 00:23:15,880 which is, of course, this one, 413 413 00:23:15,880 --> 00:23:19,250 and so that should then log Pag controller. 414 414 00:23:19,250 --> 00:23:20,363 So let's see. 415 415 00:23:24,230 --> 00:23:27,440 So looks like we're still on the last page. 416 416 00:23:27,440 --> 00:23:30,530 Let's click and yeah. 417 417 00:23:30,530 --> 00:23:33,350 So everything works as expected, 418 418 00:23:33,350 --> 00:23:35,890 we have the button correctly selected, 419 419 00:23:35,890 --> 00:23:38,643 and it also says pagination controller. 420 420 00:23:39,720 --> 00:23:40,670 Great. 421 421 00:23:40,670 --> 00:23:44,270 So now we have the click on the button, 422 422 00:23:44,270 --> 00:23:46,210 so it is correctly selected 423 423 00:23:46,210 --> 00:23:48,553 but why did we actually select the button? 424 424 00:23:49,520 --> 00:23:52,220 Well, we need a way of knowing 425 425 00:23:52,220 --> 00:23:55,760 which is the page where we need to go now. 426 426 00:23:55,760 --> 00:23:58,080 So it says here page five 427 427 00:23:58,080 --> 00:23:59,483 but how will JavaScript know 428 428 00:23:59,483 --> 00:24:01,960 that it should now actually display 429 429 00:24:01,960 --> 00:24:04,920 the results of page number five here? 430 430 00:24:04,920 --> 00:24:08,050 Well, this is where we, one more time, 431 431 00:24:08,050 --> 00:24:10,730 need to basically establish a connection 432 432 00:24:10,730 --> 00:24:13,810 between the dumb and our code. 433 433 00:24:13,810 --> 00:24:15,920 And so remember that we can do that 434 434 00:24:15,920 --> 00:24:18,123 using the custom data attributes. 435 435 00:24:19,130 --> 00:24:20,490 So what we will do here 436 436 00:24:20,490 --> 00:24:22,520 is to create a data attribute 437 437 00:24:22,520 --> 00:24:24,240 on each of the buttons, 438 438 00:24:24,240 --> 00:24:27,710 which will contain the page that we want to go to. 439 439 00:24:27,710 --> 00:24:29,290 And so then in our code, 440 440 00:24:29,290 --> 00:24:33,100 we can read that data and make JavaScript 441 441 00:24:33,100 --> 00:24:36,670 or make our application go to that exact page. 442 442 00:24:36,670 --> 00:24:40,110 And so this is basically the final piece 443 443 00:24:40,110 --> 00:24:44,180 of the puzzle, okay. 444 444 00:24:44,180 --> 00:24:45,540 So here in our button, 445 445 00:24:45,540 --> 00:24:48,173 let's now add that data attribute, 446 446 00:24:49,640 --> 00:24:53,293 so data, and I'm gonna call it goto. 447 447 00:24:56,860 --> 00:24:59,190 And so the page to want to go to 448 448 00:24:59,190 --> 00:25:01,093 is exactly the same as this one. 449 449 00:25:02,870 --> 00:25:05,590 So basically exactly the same that it says 450 450 00:25:06,700 --> 00:25:08,303 in the button text itself. 451 451 00:25:09,720 --> 00:25:11,453 So now let's copy that everywhere. 452 452 00:25:12,540 --> 00:25:15,653 Here it is page number, so minus one. 453 453 00:25:17,980 --> 00:25:19,513 Here again minus one. 454 454 00:25:21,950 --> 00:25:26,950 And then here on this it is page plus one, right. 455 455 00:25:28,490 --> 00:25:29,690 And so then here, 456 456 00:25:29,690 --> 00:25:33,890 we can actually get that number, of course, 457 457 00:25:33,890 --> 00:25:34,913 from the button. 458 458 00:25:37,270 --> 00:25:38,550 So let's call it goToPage 459 459 00:25:40,650 --> 00:25:43,990 and it is btn.dataset.goto. 460 460 00:25:49,130 --> 00:25:52,380 And then let's log that to the console. 461 461 00:25:54,000 --> 00:25:55,720 All right. 462 462 00:25:55,720 --> 00:25:58,500 And actually, let's go to some other page. 463 463 00:25:58,500 --> 00:26:02,560 So basically start this here on page four, 464 464 00:26:02,560 --> 00:26:03,960 just so we have two buttons. 465 465 00:26:08,780 --> 00:26:12,520 Very weird what's happening here with the scroll. 466 466 00:26:12,520 --> 00:26:15,320 But anyway, here we have now, 467 467 00:26:15,320 --> 00:26:17,823 the buttons for page three and five. 468 468 00:26:18,780 --> 00:26:20,720 So let's click. 469 469 00:26:20,720 --> 00:26:23,110 And indeed, here we have the five, 470 470 00:26:23,110 --> 00:26:26,450 and we also successfully read the five here. 471 471 00:26:26,450 --> 00:26:28,270 Now you see that this is here, 472 472 00:26:28,270 --> 00:26:29,890 like kind of in this white, 473 473 00:26:29,890 --> 00:26:32,740 while this here is purple. 474 474 00:26:32,740 --> 00:26:36,190 So remember that purple here means the number, 475 475 00:26:36,190 --> 00:26:38,240 and so this is still a string, 476 476 00:26:38,240 --> 00:26:40,540 and so we will need to convert that. 477 477 00:26:40,540 --> 00:26:42,870 But another thing that I wanted to show you, 478 478 00:26:42,870 --> 00:26:44,260 is that of course, 479 479 00:26:44,260 --> 00:26:49,140 we can also click outside of one of the buttons, right. 480 480 00:26:49,140 --> 00:26:51,960 And so then here the button is of course null, 481 481 00:26:51,960 --> 00:26:54,883 and we get an error by trying to read the data set. 482 482 00:26:56,870 --> 00:27:00,460 So, let's first convert 483 483 00:27:00,460 --> 00:27:03,170 that value we get from the user interface, 484 484 00:27:03,170 --> 00:27:05,250 but all of this should only happen 485 485 00:27:05,250 --> 00:27:07,303 if there actually is a button. 486 486 00:27:08,510 --> 00:27:12,550 So, yet another guard clause here, 487 487 00:27:12,550 --> 00:27:14,483 saying if there is no button, 488 488 00:27:16,080 --> 00:27:19,713 then return immediately, okay. 489 489 00:27:22,280 --> 00:27:24,543 So let's try another one now, pasta, 490 490 00:27:27,020 --> 00:27:28,420 and if we click now, 491 491 00:27:28,420 --> 00:27:31,240 then here we get the number three, 492 492 00:27:31,240 --> 00:27:35,360 and here, the number five, right. 493 493 00:27:35,360 --> 00:27:38,713 So, what are we going to do now with this number? 494 494 00:27:40,140 --> 00:27:43,300 Well, we can simply parse that number back 495 495 00:27:43,300 --> 00:27:45,360 to the controller basically. 496 496 00:27:45,360 --> 00:27:46,800 And then in the controller, 497 497 00:27:46,800 --> 00:27:50,010 we can finally, finally use that number 498 498 00:27:50,010 --> 00:27:51,750 to actually render the results 499 499 00:27:51,750 --> 00:27:53,540 on the page that we want, 500 500 00:27:53,540 --> 00:27:57,283 by using, again, this method here, all right. 501 501 00:27:58,230 --> 00:28:02,370 So these pagination and results controllers 502 502 00:28:02,370 --> 00:28:04,940 are kind of intertwined. 503 503 00:28:04,940 --> 00:28:07,510 So I think that this is a little bit confusing 504 504 00:28:07,510 --> 00:28:08,950 because of that, 505 505 00:28:08,950 --> 00:28:12,360 but if you analyze all of this here, maybe afterwards, 506 506 00:28:12,360 --> 00:28:14,590 you'll see that it makes sense. 507 507 00:28:14,590 --> 00:28:17,070 So we already see that here in the controller 508 508 00:28:17,070 --> 00:28:20,120 we are rendering the pagination in the beginning, 509 509 00:28:20,120 --> 00:28:21,720 and so here in the pagination 510 510 00:28:21,720 --> 00:28:24,393 we will later render the new results. 511 511 00:28:25,820 --> 00:28:28,453 But let's not get ahead of ourselves. 512 512 00:28:29,320 --> 00:28:30,950 So what I want to do now here 513 513 00:28:30,950 --> 00:28:34,903 is to actually parse that page into the handler. 514 514 00:28:37,280 --> 00:28:38,220 Okay. 515 515 00:28:38,220 --> 00:28:39,680 And so of course our handler 516 516 00:28:39,680 --> 00:28:42,163 now needs to accept this value. 517 517 00:28:43,730 --> 00:28:45,977 So let's call it again, goToPage. 518 518 00:28:49,020 --> 00:28:51,313 And just to see, again, if this works, 519 519 00:28:53,700 --> 00:28:56,023 log that value to the console. 520 520 00:28:58,070 --> 00:28:58,963 Okay. 521 521 00:29:00,070 --> 00:29:02,730 And indeed, we get page number five, 522 522 00:29:02,730 --> 00:29:05,170 which is the button that we clicked on, 523 523 00:29:05,170 --> 00:29:07,183 coming from the controller this time. 524 524 00:29:08,170 --> 00:29:09,360 And now, finally, 525 525 00:29:09,360 --> 00:29:11,100 what should actually happen here 526 526 00:29:11,100 --> 00:29:14,313 on the user interface, once we click this button? 527 527 00:29:15,270 --> 00:29:18,060 Well, we should get the search results 528 528 00:29:18,060 --> 00:29:19,820 for page number five, 529 529 00:29:19,820 --> 00:29:23,010 and they should be rendered here, right. 530 530 00:29:23,010 --> 00:29:26,263 And then also new buttons should be rendered too. 531 531 00:29:27,690 --> 00:29:31,000 So this should then change to page four, 532 532 00:29:31,000 --> 00:29:33,130 and this to page Six. 533 533 00:29:33,130 --> 00:29:35,180 Because when we go forward, 534 534 00:29:35,180 --> 00:29:37,420 then these two values here are, of course, 535 535 00:29:37,420 --> 00:29:40,430 going to increase, okay. 536 536 00:29:40,430 --> 00:29:42,500 And so let's simply do that. 537 537 00:29:42,500 --> 00:29:44,800 And we already know how to do it, 538 538 00:29:44,800 --> 00:29:47,083 because we already did it before. 539 539 00:29:48,270 --> 00:29:51,850 So, remember I said we want to render the results 540 540 00:29:51,850 --> 00:29:54,860 and we want to render the pagination buttons. 541 541 00:29:54,860 --> 00:29:58,500 And so that is exactly what we already have here. 542 542 00:29:58,500 --> 00:30:03,500 And so, let's simply copy and paste it right here. 543 543 00:30:03,880 --> 00:30:07,963 So let me change this here to render new results. 544 544 00:30:09,400 --> 00:30:14,400 And then here, render new pagination buttons. 545 545 00:30:14,770 --> 00:30:18,090 And then here, of course, we want not number four 546 546 00:30:18,090 --> 00:30:19,653 but we want goToPage. 547 547 00:30:20,720 --> 00:30:24,460 And then here rendering the new pagination buttons 548 548 00:30:24,460 --> 00:30:28,990 is actually going to stay exactly the same, right. 549 549 00:30:28,990 --> 00:30:31,240 So, when we do this here, 550 550 00:30:31,240 --> 00:30:34,480 so get search results with this new page, 551 551 00:30:34,480 --> 00:30:36,030 let's say four, 552 552 00:30:36,030 --> 00:30:37,320 then here in the model, 553 553 00:30:37,320 --> 00:30:40,660 state.search.page gets updated 554 554 00:30:40,660 --> 00:30:43,520 to that new value, right. 555 555 00:30:43,520 --> 00:30:46,850 So the state.search object is then different, 556 556 00:30:46,850 --> 00:30:49,450 and so that is the object that we then parse 557 557 00:30:49,450 --> 00:30:52,970 into rendering the new pagination. 558 558 00:30:52,970 --> 00:30:53,840 And so therefore, 559 559 00:30:53,840 --> 00:30:55,840 it will then render new buttons 560 560 00:30:55,840 --> 00:31:00,790 because the page before has been changed, okay. 561 561 00:31:00,790 --> 00:31:03,400 And so this should now actually work. 562 562 00:31:03,400 --> 00:31:05,390 Just keep in mind that we will, again, 563 563 00:31:05,390 --> 00:31:08,320 start at page number four. 564 564 00:31:08,320 --> 00:31:10,543 Well let's actually make that page three. 565 565 00:31:11,790 --> 00:31:15,260 Oh, and before actually checking out the results, 566 566 00:31:15,260 --> 00:31:18,260 I just wanted to say that this actually works 567 567 00:31:18,260 --> 00:31:21,090 because render will basically overwrite 568 568 00:31:21,090 --> 00:31:24,170 the markup that was there previously. 569 569 00:31:24,170 --> 00:31:25,693 And the reason for that is 570 570 00:31:25,693 --> 00:31:28,730 that we here have the clear method. 571 571 00:31:28,730 --> 00:31:32,900 And so before any new HTML is inserted into the page, 572 572 00:31:32,900 --> 00:31:36,280 the parentElement is first cleared, 573 573 00:31:36,280 --> 00:31:39,020 so it's first emptied, right. 574 574 00:31:39,020 --> 00:31:43,500 And so then that means that render here 575 575 00:31:43,500 --> 00:31:46,610 basically overwrites everything that was there 576 576 00:31:46,610 --> 00:31:49,133 and puts the new content in the same place. 577 577 00:31:50,560 --> 00:31:55,450 But anyway, let's make sure to reload, pizza, 578 578 00:31:55,450 --> 00:31:58,600 and we are at page number three. 579 579 00:31:58,600 --> 00:32:01,540 And now let's see the magic happen. 580 580 00:32:01,540 --> 00:32:04,043 And I hope we don't have any bug here. 581 581 00:32:05,140 --> 00:32:07,900 And it works! 582 582 00:32:07,900 --> 00:32:10,010 So beautiful, beautiful. 583 583 00:32:10,010 --> 00:32:12,660 And congratulations also for you 584 584 00:32:12,660 --> 00:32:15,730 to following up until this point. 585 585 00:32:15,730 --> 00:32:19,150 So this is, I think up until this point, 586 586 00:32:19,150 --> 00:32:21,663 the most impressive work that we have done. 587 587 00:32:23,880 --> 00:32:28,160 So you see everything updates here just as expected, 588 588 00:32:28,160 --> 00:32:30,080 we get new content, 589 589 00:32:30,080 --> 00:32:33,640 and now page six, you see here, 590 590 00:32:33,640 --> 00:32:36,283 will be the last page, so let's see. 591 591 00:32:37,280 --> 00:32:40,970 And yeah, so now we don't have the last button, 592 592 00:32:40,970 --> 00:32:43,203 and we can only go back to page five. 593 593 00:32:44,420 --> 00:32:46,700 So now let's go to the first page, 594 594 00:32:46,700 --> 00:32:50,010 and indeed, we can only now move forward 595 595 00:32:50,010 --> 00:32:52,830 and get the first 10 results here. 596 596 00:32:52,830 --> 00:32:55,283 So, really great work here. 597 597 00:32:56,510 --> 00:32:58,903 I'm really happy about this progress here. 598 598 00:32:59,770 --> 00:33:02,490 Now just to make sure, one more thing, 599 599 00:33:02,490 --> 00:33:05,800 let's try this here with the results per page 600 600 00:33:05,800 --> 00:33:06,863 of a different value. 601 601 00:33:08,670 --> 00:33:11,150 So let's say that we actually wanted 602 602 00:33:11,150 --> 00:33:13,623 like only five results per page. 603 603 00:33:15,470 --> 00:33:20,470 So then we should get a lot more pages. 604 604 00:33:20,510 --> 00:33:22,340 And so it's important that we check 605 605 00:33:22,340 --> 00:33:23,883 that that actually works. 606 606 00:33:25,210 --> 00:33:29,110 So you see that it does actually work already. 607 607 00:33:29,110 --> 00:33:31,680 So we only have five results here now, 608 608 00:33:31,680 --> 00:33:33,720 and we can also already see 609 609 00:33:33,720 --> 00:33:35,643 that we will have 12 pages. 610 610 00:33:38,140 --> 00:33:41,770 Oh, and we are still on page number three. 611 611 00:33:41,770 --> 00:33:44,520 But now we will be able to go back 612 612 00:33:44,520 --> 00:33:48,303 or actually to go forward to page number 12. 613 613 00:33:50,230 --> 00:33:55,230 And so each of these pages only has five recipes. 614 614 00:33:59,000 --> 00:34:00,730 And now let's just try to search 615 615 00:34:00,730 --> 00:34:03,220 for something that is not very common, 616 616 00:34:03,220 --> 00:34:05,523 like dip for example. 617 617 00:34:08,200 --> 00:34:11,273 And, wow, we still have a couple of pages here actually. 618 618 00:34:14,320 --> 00:34:16,390 But before we go any further, 619 619 00:34:16,390 --> 00:34:19,870 let's put this here actually to zero 620 620 00:34:19,870 --> 00:34:21,320 or actually to one, 621 621 00:34:21,320 --> 00:34:23,280 and remember that parsing nothing 622 622 00:34:23,280 --> 00:34:26,093 is basically the same as setting it to one. 623 623 00:34:30,800 --> 00:34:33,483 So let's try dip here again. 624 624 00:34:35,370 --> 00:34:38,370 But it seems like we have still six pages. 625 625 00:34:38,370 --> 00:34:40,600 So I just wanted to find some search term 626 626 00:34:40,600 --> 00:34:42,690 that only has one page. 627 627 00:34:42,690 --> 00:34:44,173 Let's try hummus maybe. 628 628 00:34:45,110 --> 00:34:47,233 Ah, but we again have four pages. 629 629 00:34:48,140 --> 00:34:52,450 Well we can fake that by, or here, 630 630 00:34:52,450 --> 00:34:56,090 by having 50 results on one page. 631 631 00:34:56,090 --> 00:34:57,133 And so with this, 632 632 00:34:59,140 --> 00:35:03,150 we should already only have one page with pasta. 633 633 00:35:03,150 --> 00:35:05,850 So pasta has 45 results, 634 634 00:35:05,850 --> 00:35:08,320 but here we want 50 on one page. 635 635 00:35:08,320 --> 00:35:10,910 So we only have one page you see, 636 636 00:35:10,910 --> 00:35:12,683 and indeed, no buttons. 637 637 00:35:14,500 --> 00:35:15,790 Great. 638 638 00:35:15,790 --> 00:35:20,213 Let's put it back to a meaningful value, so 10. 639 639 00:35:22,010 --> 00:35:24,713 And so with this, we are actually done. 640 640 00:35:25,560 --> 00:35:29,163 Let's just clean up our code here a little bit more, 641 641 00:35:30,370 --> 00:35:32,170 but I think that with this 642 642 00:35:32,170 --> 00:35:36,850 we are now good to call this finished. 643 643 00:35:36,850 --> 00:35:40,100 And actually we finished now the entire part one 644 644 00:35:40,100 --> 00:35:42,990 of our flowchart, right. 645 645 00:35:42,990 --> 00:35:46,300 So this was already done, this here as well. 646 646 00:35:46,300 --> 00:35:48,820 And now, here what we did 647 647 00:35:48,820 --> 00:35:51,840 was to listen to this event, 648 648 00:35:51,840 --> 00:35:53,860 then render the pagination buttons, 649 649 00:35:53,860 --> 00:35:54,860 and of course, 650 650 00:35:54,860 --> 00:35:57,490 render the corresponding search results. 651 651 00:35:57,490 --> 00:35:59,800 So all of this is now in place, 652 652 00:35:59,800 --> 00:36:03,980 but I ask you to really analyze again 653 653 00:36:03,980 --> 00:36:07,440 the code that we have here in control pagination, 654 654 00:36:07,440 --> 00:36:10,960 as well as here in control search results. 655 655 00:36:10,960 --> 00:36:13,030 Because again, these two controllers, 656 656 00:36:13,030 --> 00:36:15,270 they're kind of intertwined. 657 657 00:36:15,270 --> 00:36:18,150 So they both are doing similar things, 658 658 00:36:18,150 --> 00:36:21,370 at least when it comes to displaying the pagination 659 659 00:36:21,370 --> 00:36:24,040 and the results themselves. 660 660 00:36:24,040 --> 00:36:25,340 So it's very important 661 661 00:36:25,340 --> 00:36:28,053 that you understand the flow of this data here, 662 662 00:36:29,780 --> 00:36:34,380 especially of this, goToPage, okay. 663 663 00:36:34,380 --> 00:36:36,170 And then maybe also analyze again 664 664 00:36:36,170 --> 00:36:38,030 how all of this here works, 665 665 00:36:38,030 --> 00:36:40,960 but then you're good to go to the next video. 666 666 00:36:40,960 --> 00:36:43,010 And so there we will discuss, 667 667 00:36:43,010 --> 00:36:46,570 basically our next step, what we should do next. 668 668 00:36:46,570 --> 00:36:49,310 So that next video is gonna be a lot shorter, 669 669 00:36:49,310 --> 00:36:51,890 so that we can finally take a break 670 670 00:36:51,890 --> 00:36:53,640 from this application. 671 671 00:36:53,640 --> 00:36:56,730 So again, analyze this like I told you to, 672 672 00:36:56,730 --> 00:36:58,500 and then after you're ready, 673 673 00:36:58,500 --> 00:37:03,083 let's go move on to our next part of the flowchart. 56261

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.