1 00:00:02,370 --> 00:00:07,800 Teraz jesteśmy już bardzo blisko końca tego modułu, dlatego musimy upewnić się, że teraz wysyłamy 2 00:00:07,800 --> 00:00:11,370 akcje w celu utworzenia nowego produktu lub aktualizacji produktu, 3 00:00:11,410 --> 00:00:16,080 dlatego przede wszystkim musimy dodać te akcje tutaj w naszym folderze akcji . 4 00:00:16,210 --> 00:00:28,830 Więc wyeksportuję stałą tutaj, utworzę taki produkt tutaj, stworzę produkt, a następnie tutaj, kolejny identyfikator aktualizacji produktu za pomocą 5 00:00:28,860 --> 00:00:38,500 aktualizacji produktu i zaktualizuj produkt taki jak ten i utworzę pasujących twórców akcji lub utwórz 6 00:00:38,500 --> 00:00:47,670 produkt, a teraz to zależy od Ciebie jak chcesz to ustrukturyzować, jakie dane chcesz 7 00:00:47,670 --> 00:00:50,270 uzyskać, tworząc produkt. 8 00:00:50,340 --> 00:00:56,370 Jestem fanem tworzenia produktu naprawdę tutaj w akcji lub w reduktorze, 9 00:00:56,490 --> 00:01:04,590 więc faktycznie spodziewam się tutaj tytułu, opisu, imageUrl i ceny, powiedzmy, a następnie zwracam 10 00:01:04,590 --> 00:01:14,070 obiekt akcji, w którym typ jest stworzyć produkt, a dane produktu to po prostu wszystkie dane scalone 11 00:01:14,070 --> 00:01:15,220 razem. 12 00:01:15,450 --> 00:01:22,710 Więc tutaj mam mój tytuł, który jest odwzorowany na tytuł, który otrzymujemy jako argument, opis zamapowany na opis 13 00:01:23,340 --> 00:01:28,230 i dlatego możemy również użyć nowoczesnego skrótu JavaScript, w którym jeśli nazwa 14 00:01:28,230 --> 00:01:31,490 właściwości i nazwa zmiennej wartości są takie same, 15 00:01:31,530 --> 00:01:36,810 możesz po prostu napisać tak to wygląda, więc jeśli jest taka sama jak 16 00:01:36,810 --> 00:01:38,610 cena: cena, możemy 17 00:01:38,610 --> 00:01:45,880 to tutaj napisać, oczywiście jest to również możliwe w tytule i opisie, aby zmapować wszystkie te argumenty na 18 00:01:45,880 --> 00:01:54,460 właściwości o tej samej nazwie w tym obiekcie i jeśli zaktualizujemy produkt, który jest względnie równy, zaktualizuj produkt, abyśmy mogli go 19 00:01:54,460 --> 00:01:59,920 ogólnie skopiować, ale jest jedna ważna różnica. W tym przypadku potrzebujemy również identyfikatora produktu, który należy zmienić, więc otrzymujemy 20 00:01:59,920 --> 00:02:08,370 to jako dodatkowy argument i możemy przechowywać go w naszej akcji, a zatem w osobnej właściwości naszego obiektu akcji. Teraz w reduktorze oczywiście musimy 21 00:02:08,370 --> 00:02:09,510 sobie 22 00:02:09,510 --> 00:02:10,920 z tym 23 00:02:10,920 --> 00:02:20,900 poradzić, musimy obsłużyć tworzenie i aktualizację. Dodajmy więc nowy przypadek tutaj w reduktorze produktów, aby utworzyć produkt. 24 00:02:20,930 --> 00:02:28,940 W tym celu upewnij się, że importujesz produkt tworzenia z działań produktów i oczywiście jeden do aktualizacji produktu 25 00:02:28,940 --> 00:02:33,740 za pomocą aktualizacji produktu, pamiętaj również, aby go zaimportować. 26 00:02:35,970 --> 00:02:42,300 W tworzeniu produktu oczywiście musimy utworzyć nowy produkt i będę go tutaj przechowywać w stałej postaci z 27 00:02:42,300 --> 00:02:45,230 nowym słowem kluczowym w utworzonym wcześniej modelu produktu, 28 00:02:45,230 --> 00:02:51,780 w tym celu wystarczy upewnić się, że importujesz tutaj ten model produktu z folder modeli i ten produkt 29 00:02:51,780 --> 00:02:58,260 tutaj otrzymują identyfikator, który na razie może wygenerować ręcznie z nową datą do łańcucha, aby mieć rodzaj 30 00:02:58,260 --> 00:03:04,350 pseudo unikalnego identyfikatora fikcyjnego na chwilę później, zostanie wygenerowany na serwerze, ale jeszcze go nie 31 00:03:04,350 --> 00:03:05,600 mamy . 32 00:03:05,970 --> 00:03:11,580 Identyfikator właściciela na razie jest zapisany na stałe w U1, ponieważ w tej chwili nie mamy 33 00:03:11,580 --> 00:03:17,910 użytkowników w tej aplikacji, ale tytuł i tak dalej mogą być wypełnione danymi z akcji, ponieważ w akcji 34 00:03:17,940 --> 00:03:22,040 tworzenia produktu mamy klucz danych produktu, który zawiera obiekt z tytułem, 35 00:03:22,050 --> 00:03:24,010 opisem, imageUrl i ceną i takie 36 00:03:24,010 --> 00:03:25,800 dane możemy teraz pobrać. 37 00:03:25,980 --> 00:03:43,800 Więc tutaj po tytuł otrzymujemy działanie productData. tytuł, dla imageUrl, to akcja. dane produktu. 38 00:03:43,800 --> 00:03:43,800 imageUrl, co nie dziwi w opisie, to akcja. dane produktu. 39 00:03:44,380 --> 00:03:52,780 opis i cena, to działanie. dane produktu. Cena £. To jest teraz nowy produkt, który tworzę. 40 00:03:53,070 --> 00:03:58,890 Teraz musimy dodać go do naszego sklepu, zwracając tutaj nasz zaktualizowany stan, w którym najpierw kopiuję istniejący 41 00:03:58,890 --> 00:04:03,840 stan, a teraz muszę dodać go zarówno do dostępnych produktów, jak i produktów 42 00:04:03,840 --> 00:04:09,690 użytkowników, ponieważ go stworzyliśmy, z pewnością dlatego należy dla nas, więc musi być częścią zarówno tablic, jak 43 00:04:09,690 --> 00:04:15,480 i dostępnych produktów, więc możemy wziąć te dostępne produkty, które otrzymaliśmy i użyć concat, aby uzyskać 44 00:04:15,480 --> 00:04:21,990 nową tablicę, która jest starą tablicą plus dodać nowy element, a tutaj nowy produkt jest ten nowy element i 45 00:04:21,990 --> 00:04:25,040 robię dokładnie to samo w przypadku produktów użytkownika. 46 00:04:25,110 --> 00:04:34,220 Więc tutaj używam państwowych produktów użytkownika i konkatuję mój nowy produkt. A co z aktualizacją? Aby zaktualizować, musimy przede wszystkim 47 00:04:34,220 --> 00:04:37,430 znaleźć indeks bieżącego produktu, aby indeks 48 00:04:37,430 --> 00:04:46,580 produktu mógł być stałą nazwą, można uzyskać dostęp do naszych produktów użytkowników, a tam z indeksem find, który 49 00:04:46,580 --> 00:04:51,570 jest wbudowaną metodą Javascript, możemy znaleźć indeks określonego elementu. 50 00:04:51,590 --> 00:04:57,440 Ponownie bierze to funkcję, która wykonuje się na każdym elemencie w tej tablicy i która musi 51 00:04:57,440 --> 00:05:02,930 zwrócić wartość true, abyśmy mieli indeks, i tam spojrzę na identyfikatory i szukam identyfikatorów, 52 00:05:02,930 --> 00:05:05,330 w których jest on równy 53 00:05:05,330 --> 00:05:11,520 mojemu pid, moje działanie pid, ponieważ jeśli pamiętasz, jak skonfigurowaliśmy tę akcję, do aktualizacji mamy tutaj pole 54 00:05:11,520 --> 00:05:13,980 pid, które przechowuje identyfikatory produktów, które otrzymujemy. 55 00:05:13,980 --> 00:05:19,470 Więc szukam tego produktu, a następnie przechowuję indeks tego produktu w tablicy produktów 56 00:05:19,620 --> 00:05:21,890 użytkownika w indeksie produktów tutaj, 57 00:05:21,900 --> 00:05:27,720 teraz możemy utworzyć tutaj zaktualizowany produkt, który jest technicznie nowym przedmiotem produktu, ale oczywiście 58 00:05:27,720 --> 00:05:29,570 wstępnie wypełniony starymi produktami 59 00:05:29,670 --> 00:05:31,200 dane, na przykład 60 00:05:31,230 --> 00:05:34,320 zachowujemy identyfikator, więc podejmujemy akcję pid jako wartość. 61 00:05:34,320 --> 00:05:40,080 Zachowuję również identyfikator właściciela i w tym celu mogę uzyskać dostęp do produktów użytkowników państwowych dla indeksu, który 62 00:05:40,080 --> 00:05:46,070 właśnie odkryliśmy, a więc dla tego indeksu produktów,. ownerID, nie zmienię tego. 63 00:05:46,290 --> 00:05:48,800 Oczywiście zachowam nowy tytuł, 64 00:05:48,900 --> 00:06:03,180 więc tutaj będę przechowywać akcję. dane produktu. tytuł, zapiszę nowy imageUrl, więc akcja. dane produktu. 65 00:06:03,180 --> 00:06:11,190 imageUrl i ja zapiszemy nowy opis, więc akcja. dane produktu. opis. Jednak wspomniałem, że cena nie powinna być 66 00:06:11,520 --> 00:06:24,750 edytowalna, więc jako wartość tego zachowam pierwotną cenę, więc podaj indeks produktów użytkowników. cena tutaj. 67 00:06:24,840 --> 00:06:30,150 Nawiasem mówiąc, oznacza to również, że nasze działanie nie jest całkowicie poprawne, tam też oczekuję ceny, nie powinienem tego robić, ponieważ 68 00:06:30,150 --> 00:06:36,060 i tak nie możemy wprowadzić jej w nasze dane wejściowe, nie potrzebujemy jej, więc nie powinniśmy spodziewaj się tego tutaj, nie powinniśmy przekazywać go 69 00:06:36,390 --> 00:06:41,090 jako części danych produktu do aktualizacji produktu, w przypadku nowego produktu potrzebujemy go, ale do aktualizacji nie. 70 00:06:41,500 --> 00:06:46,600 Dzięki temu mamy nasz zaktualizowany produkt z kilkoma nowymi danymi i starymi 71 00:06:46,600 --> 00:06:55,090 danymi, teraz musimy oczywiście zaktualizować nasz stan i do tego mamy zaktualizowane produkty użytkownika, w których ostatecznie kopiuję moje istniejące produkty 72 00:06:55,210 --> 00:07:01,960 użytkownika za pomocą tej składni tutaj, aby utworzyć kopię, a następnie ustawiam zaktualizowane produkty użytkownika dla 73 00:07:01,960 --> 00:07:09,460 wybranego indeksu produktu równe zaktualizowanemu produktowi, więc zastępuję produkt o tym indeksie nowym zaktualizowanym produktem w mojej kopii, 74 00:07:09,460 --> 00:07:15,790 nie w oryginalnej tablicy, ale w kopii. Muszę zrobić to samo z dostępnymi 75 00:07:15,790 --> 00:07:20,770 produktami, ale tam przede wszystkim muszę znaleźć indeks, ponieważ ten indeks 76 00:07:20,770 --> 00:07:25,230 tutaj działa tylko dla produktów użytkowników, indeks dostępnych produktów jest 77 00:07:25,750 --> 00:07:32,200 prawdopodobnie inny, więc mam swoje dostępne indeks produktu tutaj, jeśli chcesz go tak nazwać, który 78 00:07:32,200 --> 00:07:37,330 ogólnie ma taką samą logikę wyboru, więc możemy go skopiować, ale oczywiście 79 00:07:37,420 --> 00:07:45,660 zajrzę do tablicy dostępnych produktów zamiast tablicy produktów użytkownika. A teraz znowu, tutaj możemy mieć zaktualizowane dostępne 80 00:07:45,660 --> 00:07:53,280 produkty, w których kopiuję mój stan dostępnych produktów, a następnie ustawiam zaktualizowane dostępne produkty 81 00:07:53,340 --> 00:08:02,110 dla danego indeksu produktów na równe, przepraszam za dostępny indeks produktów oczywiście równy zaktualizowanemu produktowi, tak aby 82 00:08:02,410 --> 00:08:07,810 Zastępuję mój istniejący produkt zaktualizowanym produktem zarówno w produktach dostępnych, 83 00:08:07,810 --> 00:08:15,030 jak i w tablicy produktów użytkownika. Cóż, teraz musimy tylko przywrócić nasz nowy 84 00:08:15,030 --> 00:08:23,490 stan, najpierw skopiować istniejący i ustawić dostępne produkty równe zaktualizowanym dostępnym produktom i ustawić produkty użytkownika równe zaktualizowanym 85 00:08:23,490 --> 00:08:32,790 produktom użytkownika, więc do moich zaktualizowanych tablic konfiguruję się tam. Dzięki temu mamy nadzieję, że mamy całą logikę, której potrzebujemy, teraz wyślijmy 86 00:08:32,790 --> 00:08:38,880 te zdarzenia z poziomu ekranu dodanego produktu. Więc tutaj musimy zaimportować użycie wysyłki 87 00:08:38,880 --> 00:08:46,440 z React Redux i zaimportować nasze akcje, więc zaimportuj wszystko jako akcje produktów z folderu 88 00:08:46,530 --> 00:08:54,910 sklepu, tam z folderu akcji i tam z pliku produktów, a następnie oczywiście wyślij te rzeczy 89 00:08:55,360 --> 00:09:01,060 w module obsługi przesyłania. Tutaj, co wysyłamy, zależy od tego, czy 90 00:09:01,150 --> 00:09:02,540 edytujemy, czy dodajemy, 91 00:09:02,650 --> 00:09:08,110 jak wspomniałem, możemy dowiedzieć się, co się dzieje z pomocą edytowanego produktu, jeśli jest 92 00:09:08,110 --> 00:09:11,100 ustawiony, edytujemy, jeśli nie jest ustawiony, jesteśmy dodawanie 93 00:09:11,100 --> 00:09:18,370 Więc tutaj, w module obsługi przesyłania, możemy dodać sprawdzanie if i sprawdzanie, czy edytowany produkt, 94 00:09:18,460 --> 00:09:25,660 jeśli jest ustawiony, edytujemy, więc wtedy chcę wysłać zdarzenie aktualizacji produktu, po pierwsze, ja musimy 95 00:09:25,660 --> 00:09:33,650 utworzyć tę funkcję wysyłki za pomocą użycia wysyłki, a teraz z tym utworzonym, tam możemy wywołać działania 96 00:09:34,310 --> 00:09:39,410 produktów wysyłki, zaktualizuj produkt, ponieważ robimy to tutaj i teraz przesyłamy 97 00:09:40,570 --> 00:09:42,700 wszystkie potrzebne nam dane, 98 00:09:42,700 --> 00:09:44,980 które są moim ID produktu 99 00:09:45,130 --> 00:09:49,060 , to jest identyfikator produktu, który edytujemy, wyodrębniamy 100 00:09:51,850 --> 00:09:59,020 to tutaj i oczywiście dodatkowo przesyłamy tytuł, przekazujemy opis, wszystkie te stałe stanu, które mamy 101 00:09:59,050 --> 00:10:07,630 tutaj, nasz imageUrl, a nie cenę, ponieważ nie potrzebuję tego, aw innym przypadku tutaj, oznacza to, że dodajemy, 102 00:10:07,630 --> 00:10:09,060 a następnie 103 00:10:09,130 --> 00:10:13,560 chcę wysłać akcję produktów. stworzyć produkt, tutaj 104 00:10:13,660 --> 00:10:21,850 przekazujemy tytuł, opis, imageUrl, a także cenę, a wraz z tym powinniśmy mieć konfigurację, 105 00:10:21,900 --> 00:10:26,580 w której mamy nadzieję dodawać i edytować produkty. 106 00:10:26,640 --> 00:10:28,040 Zapiszmy 107 00:10:28,050 --> 00:10:36,060 to i rzućmy okiem. Jeśli teraz przejdziemy do obszaru administracyjnego tutaj i dodam to 108 00:10:36,120 --> 00:10:43,460 i dodam wykrzyknik tutaj, a także tutaj w opisie i klikam Zapisz, dostaję niezdefiniowany nie jest przedmiotem, oceniając 109 00:10:43,460 --> 00:10:45,440 cenę rekwizytów do naprawienia. 110 00:10:45,530 --> 00:10:49,540 Wygląda więc na to, że straciłem swoją cenę podczas próby aktualizacji. 111 00:10:49,850 --> 00:10:54,140 Dobrze, zanim to naprawimy, zobaczmy, czy dodanie nowego produktu w ogóle działa. 112 00:10:54,260 --> 00:11:00,890 Jeśli dodam tutaj produkt z testem, test, który oczywiście nie jest prawidłowym imageUrl, więc 113 00:11:00,890 --> 00:11:06,750 nie zobaczymy obrazu, ale przynajmniej popijamy coś, jest to również test. 114 00:11:06,830 --> 00:11:10,250 Jeśli spróbujemy tego i kliknę przycisk Prześlij, to również 115 00:11:10,250 --> 00:11:13,220 nie działa, więc jakoś oszczędzanie ceny 116 00:11:13,220 --> 00:11:19,700 nie działa i myślę, że problem jest tutaj, problem polega na tym, że cena jest w rzeczywistości 117 00:11:19,700 --> 00:11:24,890 ciągiem znaków, ale powinna być numer, dzięki czemu możemy łatwo przekonwertować go na 118 00:11:24,890 --> 00:11:33,580 liczbę, dodając tutaj znak plus, zanim przekażemy go, aby utworzyć produkt, do aktualizacji, z drugiej strony, jeśli spojrzymy na nasz reduktor produktów, 119 00:11:33,580 --> 00:11:36,790 zwykle powinien zachować cenę, którą już miał . 120 00:11:36,850 --> 00:11:42,870 Zobaczmy więc, czy to plus naprawia to dodawanie, czy też jest też inny problem, to była zmiana, która i tak 121 00:11:42,880 --> 00:11:48,060 jest wymagana, ale zobaczmy, czy jest inny problem. Więc przetestuj, przetestuj, dwanaście, proszę 122 00:11:48,060 --> 00:11:54,330 wprowadź tutaj tylko cyfry, a nie jakiś tekst, który obecnie możesz, ale który 123 00:11:54,330 --> 00:12:02,950 by go złamał, przetestuj, naciśnij ten przycisk, tak, nie wygląda to źle, mamy tutaj problem z obrazem, 124 00:12:02,950 --> 00:12:09,920 ale jeśli przewiniemy w dół, właściwie tutaj, jeśli to odrzucimy, możemy zobaczyć nasz produkt, 125 00:12:09,920 --> 00:12:14,030 więc cena jest pominięta, więc coś jest nie 126 00:12:14,040 --> 00:12:18,290 tak i wydaje się, że nie zapisujemy obrazu poprawnie, 127 00:12:18,390 --> 00:12:22,380 nie tylko dlatego, że nie jest wyświetlany, ale 128 00:12:22,380 --> 00:12:25,400 z powodu ostrzeżenie, które otrzymaliśmy, ale 129 00:12:25,740 --> 00:12:27,570 ogólnie działa. 130 00:12:27,570 --> 00:12:31,650 Jednak na przykład tutaj, jeśli spróbuję zaktualizować i zapisać to, nadal pojawia się błąd, więc 131 00:12:31,650 --> 00:12:33,320 nadal coś jest nie tak. 132 00:12:33,360 --> 00:12:39,270 Więc jedną rzeczą, która jest niewłaściwa, są oczywiście działania, w przypadku aktualizacji produktu typem powinien być produkt 133 00:12:39,270 --> 00:12:41,100 aktualizujący, a nie tworzenie produktu, 134 00:12:41,100 --> 00:12:45,710 w przeciwnym razie wyzwalamy niewłaściwe działanie w reduktorze, co tłumaczy występujący błąd ceny. 135 00:12:45,720 --> 00:12:50,190 Musi to być tutaj aktualizacja produktu, aby nieoczekiwanie zaktualizować produkt. 136 00:12:50,400 --> 00:12:57,060 To jeden problem, ale kolejny duży problem można znaleźć na ekranie dodanego produktu. Używam tu metody wywołania zwrotnego use, aby 137 00:12:57,060 --> 00:13:00,580 odpowiednio owinąć moduł obsługi przesyłania i robię to, 138 00:13:00,660 --> 00:13:03,480 aby uniknąć niepotrzebnego odtwarzania funkcji. 139 00:13:03,480 --> 00:13:08,730 Problem polega na tym, że początkowo ustawiłem to jako pustą tablicę jako listę zależności, co oznacza, że 140 00:13:08,730 --> 00:13:12,740 nigdy nie jest ona odtwarzana, co miało sens, gdy logowaliśmy się tylko na 141 00:13:13,230 --> 00:13:17,100 konsoli, ale teraz robimy tam rzeczy i teraz faktycznie mamy zależności. 142 00:13:17,100 --> 00:13:22,710 W tej chwili nigdy nie odtwarzam tej funkcji, co oznacza, że nigdy nie jest odtwarzana ze względu na zaktualizowane wartości. 143 00:13:22,710 --> 00:13:28,180 Kiedy przesyłamy formularz, nigdy nie bierzemy pod uwagę tego, co wpisał użytkownik. 144 00:13:28,200 --> 00:13:30,930 Więc właściwie teraz 145 00:13:31,020 --> 00:13:40,590 musimy tutaj określić zależności, funkcję wysyłki, ale co ważniejsze, nawet identyfikator prod, tytuł, opis 146 00:13:40,680 --> 00:13:49,380 i imageUrl, a także oczywiście cenę. Teraz, jeśli to uratujemy, powinniśmy mieć się dobrze i wszystkie 147 00:13:49,380 --> 00:13:50,880 problemy powinny zniknąć. 148 00:13:50,880 --> 00:13:52,220 Poczekajmy więc na 149 00:13:52,290 --> 00:13:59,510 ponowne załadowanie, przejdź teraz do administratora i zacznij edytować to może i teraz, jeśli dodamy wykrzyknik w tytule i w 150 00:13:59,510 --> 00:14:05,660 opisie i zachowamy to i wrócimy, zobaczymy to tutaj i jeśli przejdziemy do produktów , widzimy 151 00:14:05,720 --> 00:14:09,090 to również tutaj, a w szczegółach widzimy również wykrzyknik. 152 00:14:09,170 --> 00:14:12,910 Teraz, jeśli wrócimy do administratora i utworzymy 153 00:14:13,080 --> 00:14:15,200 nowy produkt, przetestuj, 154 00:14:15,390 --> 00:14:21,790 przetestuj, dwunastu, przetestuj to, a ja to zapiszę i wrócę, teraz 155 00:14:21,890 --> 00:14:26,780 to też się pojawi. Oczywiście obraz nie pojawia się, 156 00:14:26,810 --> 00:14:31,480 ponieważ nie wprowadziliśmy prawidłowego adresu URL, ale pojawiają się wszystkie inne 157 00:14:31,550 --> 00:14:35,410 dane, więc na ogół działa i oczywiście możesz wprowadzić 158 00:14:35,410 --> 00:14:44,450 prawidłowy imageUrl i to też się zepsuje, przetestujmy to szybko także. Wróćmy więc do sekcji administracyjnej i dodajmy tutaj półkę, 159 00:14:44,470 --> 00:14:53,970 dlatego wybrałem adres URL półki znalezionej w Internecie za 199. 99, to ładna półka 160 00:14:53,970 --> 00:15:00,870 jak ta. Jeśli teraz to zapiszemy i wrócimy, to wygląda dobrze, oto nasz 161 00:15:00,870 --> 00:15:05,260 obraz i widzimy to również tutaj na ekranie produktu i możemy go również wyświetlić tutaj. 162 00:15:05,730 --> 00:15:07,070 Wydaje się więc, 163 00:15:07,080 --> 00:15:11,610 że to działa i dzięki temu ogólnie mamy konfigurację, która działa. 164 00:15:11,610 --> 00:15:16,410 Teraz są drobne rzeczy, nad którymi chcę popracować, na przykład przed usunięciem, fajnie 165 00:15:16,410 --> 00:15:23,310 byłoby mieć małe okno dialogowe potwierdzenia, a ponadto chcę się upewnić, że kiedy dodamy lub edytujemy produkt, po kliknięciu 166 00:15:23,400 --> 00:15:26,140 przycisku Zapisz tutaj automatycznie nawigujemy wstecz. 167 00:15:26,130 --> 00:15:31,590 Są to oczywiście drobne rzeczy, ale myślę, że stanowią one dobry finał tutaj w tym module.