Wdrożenie projektu
15 godz. 6 min · UI, UX i Webdesign
Krzysiek PiekarzAutomation Specialist / No-code DeveloperMateriał szkoleniowy został zaprojektowany tak, aby mogło z niego skorzystać jak najszersze grono odbiorców. Nieważne czy jesteś totalnym laikiem, czy też posiadasz już wiedzę z zakresu programowania lub designu, na pewno znajdziesz tu coś dla siebie. A więc kto jeszcze może skorzystać z wiedzy zawartej w tym kursie?
W tej lekcji nadal kontynuujemy naszą
przygodę ze stroną listingu i tym razem zajmiemy się tutaj sekcją Photos.
Na chwilę obecną mamy ją tutaj tylko za
modelowane, a powinna ona domyślnie wyglądać w ten sposób, czyli będziemy
wyświetlać tutaj zdjęcia, a także dodamy taką własną,
bardzo prostą przeglądarkę do zdjęć, która wzorowana jest przykładem
pochodzącym z kursu Gregory'ego Johna z serwisu Bild am Radio.
Zresztą w tym kursie znajdziesz mnóstwo
wskazówek i mnóstwo rad, które tam udziela.
Ja staram się je przenosić, ponieważ uważam, że są niesamowicie przydatne
i każdy szanujący się Babel developer powinien z nich korzystać.
A więc przystąpimy do pracy.
Wracamy na stronę naszego listingu.
Jeżeli przekazujesz tutaj dynamicznie wartości, tak jak pokazałem to w
poprzedniej lekcji i teraz po odświeżeniu strony, nie masz tutaj żadnych tekstów,
to winowajca jest jeden, czyli Twój pasek adresu URL.
Pamiętaj, że musisz tu przekazywać zawsze
parametr l równy właśnie temu listing owi, który chcesz akurat tutaj wyświetlić.
Jeśli dziwi Cię ten zapis tutaj, ten procent i 20, to jest to po prostu nazwa
Sakura Heaven ze spacją, która została przez Babel odpowiednio zakodowana.
To tak zwanego URL encoder.
Ponieważ w pasku adresu nie możemy
wyświetlać spacji, nie możemy wyświetlać znaków specjalnych, to Bubble zadbało o
to, aby się to odpowiednio wyświetlało i właśnie tak zostało to zakodowane.
Tak więc jeżeli nie masz tutaj tekstów,
nie przekazałeś sobie tego parametru, to wróć na stronę index ową lub gdziekolwiek,
gdzie korzystamy właśnie z tej grupy i wyświetlamy rekordy z OZ Listing.
Tam kliknij na kartę i wtedy zostaniesz
przeniesiony na tą stronę z tym odpowiednim parametrem przekazanym.
A więc wracamy do edytora i przystępujemy do pracy nad grupą Photos.
To, co chcę zrobić tutaj w pierwszej kolejności.
Całej tej grupy przekazać.
Ustawić w zasadzie typowy content na iOS Listing.
I będzie to parent group Listing.
Pozbywamy się tego koloru.
Następnie layout zmieniamy w tym przypadku na All in Parent.
Kolejno podajemy tutaj następną grupę.
Ja będę ją sobie chciał tutaj wyceny ować.
Nazwiemy ją.
Po prostu photos i na rok.
I tym razem będzie to rok.
Gap Space ustawiony dla kolumn na 32 piksele.
Pozbywamy się tutaj minimalnej szerokości.
Minimalną wysokość chwilowo możemy zostawić taka jaka jest.
Oczywiście potem sobie to wyzeruje.
Następnie dodaję tutaj obrazek.
Nazwijmy go.
Main image, czyli main img.
Będę tutaj chciał przekazać dynamicznie wartość, jaką?
Oczywiście nasz główny obrazek z setu,
a więc parę grup wink, którego chwilowo tutaj nie mamy
ustawionego, bo nie przekazaliśmy tego do Photos i Nero Group.
Musimy oczywiście o to zadbać, czyli ustawić OS listing.
Parents Group a jest listing i dopiero
teraz mogę się odnieść do elementu rodzica.
I wskazać tutaj. Image Mail.
Jak pamiętasz ustawiliśmy to jako listę, więc można tutaj wskazać pierwszy item,
ponieważ z resztą i tak zawsze będziemy mieć tam tylko jeden obrazek.
Unikam w ten sposób.
Tu odznaczamy minimalną szerokość X, aby
zachować aspect ratio, w tym przypadku równe 1 do 1.
OK, wróćmy tutaj do edytora i wybierzmy
sobie tym razem grupę i wstaw ją w odpowiednie miejsce.
Czyli do grupy Photos inner.
Obrazek chcę przesunąć do lewej strony tą grupę tutaj do prawej.
Nazwijmy ją.
I photos list.
Grób.
Będzie to kolumn.
Gap Space Ring 32 piksele.
Odznacza on tutaj minimalną szerokość.
I to co chcę zrobić, to tak zaznaczyć sobie ten obrazek.
Skopiować.
Zanim go tutaj wkleję,
to do tej grupy photos list G jeszcze muszę przekazać oczywiście
odpowiedni set, czyli OST listing i Parent group as listing.
Dopiero teraz, jeżeli wkleję tutaj ten obrazek.
Tu nie będę miał błędu, że odnosimy się do elementu rodzica, który nie istnieje.
Tylko jeszcze tak to ustawmy.
Suma dla obrazka i tu też ustawmy sumę dla obrazka.
I teraz tu chcę się odnieść nie do image
main, tylko images list i wybrać tutaj First item.
Przechodzimy.
To będzie tak.
Image.
On.
MG Na razie zostawmy taką nazwę.
To co chcę zrobić to odznaczyć, odznaczyć aspect ratio, wywalić minimalną wysokość,
ale ustawić minimalną szerokość na 280 pikseli.
I odznaczyć tę opcję Visit content.
Teraz zaznaczam ten obrazek i go do pliku.
Będzie to Image 2.
Pozostawiam.
Dokładnie takie same właściwości zaznaczam grupę foto z list.
Odznaczamy minimalną wysokość.
To, co jeszcze muszę dla niej zrobić, to rozciągnąć ją na całą dostępną wysokość.
A więc zaznaczam tą opcję.
Teraz wygląda to już mniej więcej tak jak powinno.
Czyli mamy tutaj główny obrazek po lewej stronie i obrazki z listy.
Pierwszy to oczywiście musimy wskazać drugi, czyli.
Hitem.
Wybieramy opcję Item hash i mówimy, że ma to być.
2. Czyli.
To wyświetlamy pierwszy obrazek to wyświetlamy drugi.
Dla ułatwienia możemy to zmienić w ten sposób.
Czyli nie Wheels item tylko item 1o.
Teraz wygląda to dużo lepiej.
Czyli odnieść się do listy i Magic list i
wyślij mi tu item 1 a to wyświetli numer 2.
Dodajmy jeszcze zaokrąglanie narożników
równe 8 pikseli dla wszystkich tych obrazków.
I zerknijmy do podglądu.
Odświeżamy.
Jak widzisz, przekazaliśmy tutaj
odpowiednie obrazki z naszego rekordu Status listing, czyli tutaj Sakura Heaven.
Mamy główny obrazek i mamy obrazek
pierwszy z tej listy i obrazek drugi z listy.
Ta co go jeszcze tutaj potrzebuje, to.
Tego przycisku mogę go sobie zaznaczyć, czyli Share Group.
Wstawić go bezpośrednio tutaj do Photos
Group, gdzie mieliśmy ustawione all in to parent.
Wybieram pakiet.
Przesuwam go tutaj w prawy dolny róg.
I ustawiam marginesy równe.
Szesnaście pikseli od prawej.
I 16 pikseli od dołu.
Zmieniamy nazwę na.
Photos Group.
Tutaj ten tekst.
Na wallu Photos.
Kolejno zmieniam ikonkę na.
Gallery wait linear.
Zmień jej nazwę na Gallery.
I zerknijmy teraz do podglądał.
Odświeżamy.
Tutaj nasz przycisk wyświetla się w odpowiednim miejscu,
a my musimy teraz zadbać o to, aby po jego kliknięciu wyświetlił się nam pop up.
A tam dodamy zaraz właśnie taką prostą przeglądarkę, żeby ułatwić sobie życie.
Wróćmy do edytora i skopiuj my pop up ze strony Serge'a.
To pokażę Ci dodatkową sztuczkę.
Jak pamiętasz.
Tutaj dla tego popup u dodaliśmy już jedno
workflow, które po kliknięciu w tą ikonkę go zamyka.
Jeżeli chcesz przenieść element razem z workflow, które już do niego dodałeś,
wystarczy, że zaznaczysz cały taki element.
U nas jest to Filters Popup.
Wybierzesz Edit i wybierzesz tutaj opcję kopii Special.
I kopie ład Workflow.
Teraz możemy wrócić na stronę listingu.
Zaznaczyć całą stronę i wybrać Edit Pass Special base Tweet Workplace.
I teraz nasz popup zostanie dodany.
A ja jeżeli przejdę do workflow to jak widzisz mam
już ten workflow, którego zamyka po kliknięciu w ikonkę Close.
Wróćmy więc do designu i poprawimy sobie cały ten popup.
Tym razem będzie to po prostu Gallery popup.
Przechodzę do layoutu i zmieniam tak layout na.
Column maksymalna szerokość 768 pikseli.
Nie potrzebuję tutaj minimalnej wysokości.
I tak co mamy tutaj jeszcze do zrobienia?
Tą górną sekcję, czyli header możemy sobie zostawić.
To będzie.
Gallery pop up Cheddar Group.
To co będę chciał zrobić tutaj, to przekazywać nazwę listingu.
Jak to zrobić? Najpierw muszę sobie tutaj ustawić.
Typowy content dla całego pop upu.
Będzie to, jak się domyślasz, jest
listing, a kolejno musimy przekazać tutaj data source.
Jaki listing chcemy wyświetlić.
Oczywiście ten, który mamy tutaj ustawiony już dla Page wrapper, a dodatkowa para.
Wybieramy sobie ten listing po prostu pobierając go z paska adresu URL.
A więc mogę się tutaj odnieść do Page wrapper.
I wybrać listing, który jest tam przypisany.
Dzięki temu mogę przekazać to teraz tutaj do header a.
Parents Group of Listing.
I tutaj ten tekst zmienić na Parents Group as Listing Display.
To co chcę zrobić, to tutaj dla całego tego kontentu pozbyć
się wszystkiego i wszystkich tych elementów.
DVD itd.
Jest to mi chwilowo niepotrzebne.
Zaznaczam całą tą grupę to będzie.
Gallery Popup Content.
Przechodzę do layoutu.
Ustaw ma tutaj przynajmniej chwilowo.
Oznaczmy tę opcja minimalną wysokość na powiedzmy 340 pikseli.
Tylko chwilowo.
Pozbywamy się też tych marginesów.
Ponieważ nie mamy tutaj już all in to parent, są one niepotrzebne.
Taka mamy header chwilowo content i sprawmy sobie jeszcze tutaj ten footer.
Zmieńmy tak jego nazwę na.
Gallery.
Pop up footer group.
I tak będę chciał się pozbyć.
Tego i tego.
Następnie wracam na naszą stronę listingu i wykorzystuję elementy, które już tutaj
mamy dodane, mianowicie tą grupę z ratingiem.
Po prostu ją sobie kopiuję.
Otwieram pop up i wstawiam do naszego foldera.
Co ją tak przenieść w to miejsce?
I tak ikonka 24 na 24 piksele.
A ten tekst.
Chcę się pozbyć.
Tej wartości, natomiast czcionkę tutaj zmienić na body.
A w zasadzie może nie na body, tylko na healing szóstego typu.
I jeszcze odsunąć te elementy w środku.
W tej grupie nie 4 tylko a powiedzmy 8 pikseli.
Wracamy znowu na stronę listingu
i tym razem zaznaczam tutaj całą tą grupę Host Info Group.
Jak widzisz ja tutaj dodałem delikatną
poprawkę, a mianowicie wstawiłem tutaj ikonkę.
O takiej wartości i o takim kolorze.
Zaraz zobaczysz jak ona wygląda.
Ja zaznaczam całą tą grupę kopiuję.
Przechodzę do pop upów i wstawiam ją sobie tutaj.
To co chcę zrobić, to dostosować szerokość tej grupy do contentu.
Powinniśmy to zrobić?
Zaraz zobaczmy.
Tak, tylko pewnie będziemy musieli jeszcze
zadbać o to, aby ta grupa w środku też się dostosowywała.
Czyli grupa hostess grup też powinna dostosować sobie szerokość do contentu?
OK, teraz wyświetla nam się to już całkiem fajnie.
Mieliśmy tę grupę w takim położeniu.
I tutaj zmienimy tylko na futra.
Oznaczmy sobie tą szerokość.
Pozbądźmy się tej minimalnej wysokości.
I dodajmy padding.
Od góry i od dołu równe szesnaście pikseli.
I to co chcę jeszcze zrobić dla całego
futra, to ustawić tutaj background flat color.
Nasz kolor Primary 25. OK.
Teraz zadbajmy o to, aby ten footer się tutaj wyświetlał po kliknięciu w ten
przycisk vol photos, a więc dodajemy do niego workflow.
I oczywiście.
Stały element.
Gallery Popup.
Przejdźmy do podglądu.
Klikam na przycisk.
W to miejsce została przekazana nazwa
naszego listingu, którą aktualnie wyświetlamy, czyli Sakura Heaven.
Mamy tu informacje o hoście, o jego ratingu.
Możemy zamknąć nasz popup i uzupełnić oczywiście tutaj content.
A więc zamykamy i wracamy do edytora.
To, co będę chciał zrobić.
To tak zaznaczyć sobie cały ten obrazek
mamy mieć i go po prostu chwilowo skopiować.
Otworzyć pop up.
Wstawić go tutaj do Gallery Popup Content Group.
Oczywiście mamy tutaj błąd, że odnosimy
się do elementu rodzica, który nie istnieje.
Ale to nic. Zaraz to poprawimy.
Na razie kliknij Clear Expression, żeby nie mieć tutaj błędu.
I weźmy tak to będzie Gallery.
Main Image.
Przechodzę do layoutu i tym razem zmieniam aspect ratio na 3 do 2.
Kolejno dodaję tutaj sobie repeat thing grupę.
Jej nazwa to galery.
Images.
R.G..
I tak odznaczamy tutaj.
Minimalną szerokość.
Wysokość chwilowo sobie zostawmy.
Natomiast tutaj zmieniamy to na RAW.
Typowy content.
Zaraz będziemy to musieli ustawić.
To co ja chcę zrobić, to zostawić tutaj.
Jeden rząd, a w zasadzie może niejeden rząd, ponieważ nie wiemy ile obrazków
haseł doda do swojego listingu, więc zróbmy to nieco inaczej.
Odznaczamy tę opcję tu wybieramy 100%,
natomiast będę chciał wyświetlać standardowo 6 kolumn.
Separatory ustawiamy na solid.
Nasz kolor biały, bo taki kolor ma również pop up i tutaj szerokość 16 pikseli.
I tak do środka będę chciał wstawić obrazek.
Zerknijmy, czy nam to wystarczyło we właściwe miejsce.
Wskoczyła do Rep thing grupy to będzie po prostu.
Galery.
Image img.
Oczywiście bez literówek.
Zaokrąglenie narożników równe 8 pikseli.
I teraz przejdźmy do zakładki Layout.
Tu będę chciał nadać stałą szerokość.
W moim przypadku będzie to 90 pikseli i aspect ratio 3 do 2.
To co mogę zrobić, to zaznaczyć całą grupę i pozbyć się minimalnej wysokości.
I jeszcze tak dostosować tutaj fit fit tu
content i olać całą tą repeat grupę w naszym popie.
Czyli oczywiście nie tutaj, tylko tutaj.
I teraz.
Co chcę tutaj przekazywać.
Obrazek z Karen Self Think.
Tego na razie nie ustawiliśmy, więc musimy
zadbać o przekazanie odpowiedniego kontentu i tutaj odpowiedniego kontentu.
Aby to zrobić, zastosujemy pewną sztuczkę,
a mianowicie wykorzystamy State Custom State do tego, aby wyświetlać
odpowiednie elementy i kolejno je przełączać.
Zaraz zobaczysz jak to zrobimy.
Dla całego pop upów będę chciał dodać dwa custom state.
Będzie to tak.
Main Image.
A może inaczej image main.
Zróbmy to tak image main będzie to po prostu obrazek.
Czyli typ image.
Na razie nie ustawiamy tutaj żadnego
default value, ponieważ musielibyśmy tutaj na stałe
wczytać jakiś obrazek, a ja tego nie chcę robić.
Następnie dodajemy tu images list.
To będzie też image.
Ale oczywiście lista, skoro tu jest lista w nazwie.
I teraz zróbmy to w ten sposób.
Dla głównego obrazka.
Tu chcę sobie wyciągnąć wartość z tego custom statu.
Czyli.
Gallery Popup.
Image Small.
I to wszystko.
Czyli po prostu ten obrazek, który przypiszemy jako State Image Machine.
To z kolei dla tej całej grupy znowu chcę wybrać.
Typ to muszę wskazać, że to będą obrazki, czyli to będzie image.
A data Source będzie to po prostu ten
stats z obrazkami, czyli znowu gallery pop up i tym razem state o nazwie Images List.
Już tutaj mamy po prostu stały typ contentu.
Będą to obrazki, a pochodzące właśnie z tego custom stage.
I tak na chwilę obecną nic nam to nie da,
ponieważ jak pamiętasz nasz custom stat jest chwilowo pusty.
Jak więc możemy zadbać o to, aby go tutaj odpowiednio ustawiać?
Możemy do tego wykorzystać workflow, ale kiedy ja chcę to zrobić w ten sposób,
że klikając tutaj w ten przycisk View All photos będę chciał nie tylko wyświetlić
nasz popup, ale również ustawić tam dynamicznie state.
Możemy to zrobić mega prosty sposób, po prostu przechodząc do tego workflow.
Tutaj foto z grupy script.
Tu pokazujemy nasz popup, ale jako pierwszy krok chcę tutaj wybrać State.
I zdefiniować status elementu jakiegoś oczywiście naszego.
Gallery Popup.
I teraz mamy tutaj custom state do wyboru.
Ja chcę zdefiniować oba.
I tak.
Wariat dla Image Pan to będzie.
Parents Group as Listing.
Bo jak pamiętasz tutaj cała ta grupa to właśnie ta Photo Group.
Aha, tutaj nie mamy.
Możemy ustawić jej content.
To będzie OS Listing
i Parent group of listing, czyli po prostu ten listing, który tutaj wyświetlamy.
W ten sposób możemy się w Workflow odwołać do $this group a jest listing.
I co tu chcemy wyświetlić?
Co by tu przekazać?
Główny obrazek, czyli image main.
First item, czyli jako ten główny obrazek
w pobawię wyśle główny obrazek jaki jest przypisany do tego listingu.
Natomiast co chcemy wyświetlić tutaj w Images List.
Otóż chcemy to wyświetlić zarówno te
pozostałe obrazki, jak i ten główny obrazek.
Dlatego też mówiłem Ci, że
musieliśmy to Image Mail ustalić jako listę, a nie jako pojedynczy obrazek.
Ponieważ teraz możemy wykorzystać kolejną
sztuczkę w Babel i połączyć dwie listy w jedną.
Aby to zrobić, najpierw odnosimy się do DIV Group.
To jest listing.
Image Mail to jest lista jak pamiętasz nie pojedynczy obrazek tylko lista.
I teraz wybieram sobie tutaj merge, a w zasadzie przez to zaczynam wpisywać merge
i mam Merge white, czyli połącz to listę z.
I teraz muszę przekazać drugą listę, czyli DIS Group a S Listing.
Images List.
I Babel zrobi to za nas.
Powiedzieliśmy Babel, aby teraz połączył ze sobą obie te listy i ustawił je jako
custom state o nazwie Images List dla naszego Popup u.
Wiem, że na początek może to dosyć
skomplikowanie wyglądać, ale jak widzisz nie jest bardzo trudne.
Gdybym tutaj po prostu ten image zestawił jako pojedynczy obrazek, to nie jestem w
Babel w stanie w prosty sposób połączyć jednego itemu z listą.
A ponieważ zamieniliśmy to image main na listę, to mogę wykorzystać po prostu merge
width i połączyć w taki prosty sposób obie listy.
Skoro to już mamy ustawione, to zobaczmy czy nam to odpowiednio zadziała.
Przejdźmy do podglądu.
Odświeżamy.
Klikamy Wolf Photos.
Jak widzisz tutaj to zadziałało.
Ten główny obrazek się ustawił tak jak powinien.
Jest to dokładnie ten sam obrazek.
Które mamy tutaj, czyli ten główny.
Natomiast nie wyświetla nam się tutaj ta
lista z obrazkami, ale musimy to pewnie zaraz poprawić.
Wracamy do designu i zerknijmy sobie na nasz popup.
Na tą listę gallery images to przekazujemy
odpowiednia odpowiednią lista obrazków, czyli nasz custom stats.
Ale nie ustawiłem tutaj tego.
Przekazywania danych do poszczególnego itemu.
Jak się domyślasz, wybieramy tu po prostu Current image.
I to wszystko co musimy zrobić.
Otworzyliśmy stronę jeszcze raz.
Klikamy na.
Tutaj ten przycisk.
Jak widzisz wszystko działa fantastycznie.
Mamy tu ten pierwszy obrazek główny i dodatkowo te pozostałe, które mamy tutaj.
A więc Bubble zadbał o to, aby połączyć te
wszystkie obrazki w jedną listę i je w tym miejscu wyświetlić.
Teraz chciałbym, aby po kliknięciu w taki
obrazek, ten tutaj pojedynczy zmieniał się ten główny.
Jak to zrobić? Już ci pokazuję.
Wracamy tutaj.
Tutaj tylko muszę osobiście ustawić zoom,
żeby mi zadziałało zaokrąglenia narożników, żeby ten obrazek został
dostosowany do tego elementu, który tutaj wyświetlamy.
Jeżeli obrazek jest za duży to bubble jak
mówiłem przytnie go odpowiednio i renderuje, a my teraz dla takiego
pojedynczego itemu znów musimy nadać workflow.
Klikamy więc tutaj.
I co się ma stać po kliknięciu w taki obrazek z listy.
Otóż chcemy ten obrazek, który właśnie
klikniemy ustawić jako state na popup gallery o nazwie mail Czytam Image Mail.
A więc znowu state.
Odnosimy się do galerii pop up.
Kolejno odnosimy się do statku o nazwie Image Main.
Jako wartość chcemy tam przekazać.
Current select image.
Jak widzisz bóbr stara się nam pomóc w każdym momencie w naszej pracy
i sam już wie, że jeżeli kliknę w ten obrazek to po prostu go sobie pobierz i
przekaż tutaj do tego statu, czyli wybrać ten obrazek, który masz w aktualnej
komórce i przekaż go właśnie tutaj jako custom stats.
I to w zasadzie wszystko, co musieliśmy
zrobić, aby zbudować taką naszą customowe przeglądarkę zdjęć.
Możemy wrócić, odświeżyć.
Klikam View photos.
Klikam tu.
I ten obrazek został przekazany.
Klikam tu.
I to się zmienia.
Pablo mówił chwilę to zajmuje tylko dlatego, że obrazki są dość spore.
Natomiast jak widzisz mamy taką super prostą, fajną przeglądarkę zdjęć.
Oczywiście moglibyśmy zadbać o to, żeby była ona dużo większa, albo zainstalować
jakiś plugin, który wyświetlał by te obrazki na pełnej rozdzielczości.
Natomiast jak mówię, ja chcę, żeby
ten kurs był jak najprostszy, żebyśmy korzystali z jak najmniejszej ilości
pluginów, ponieważ te lepsze pluginy z reguły są niestety płatne.
Dlatego też mogliśmy to obejść i zbudować sobie taką własną przeglądarkę.
Mam nadzieję, że zasada działania jest dla Ciebie jasna.
Jak to zrobiliśmy?
Mamy tutaj 2 staty, które nie ustawiamy od razu, ale przekazujemy te wartości
dynamicznie w momencie kliknięcia właśnie w ten przycisk.
Ten przycisk ma tutaj ustawiony Data type na cały listing, który tutaj wyświetlamy.
Dzięki czemu właśnie po kliknięciu w niego
możemy sobie tutaj przekazać dynamicznie ten stat i pobrać właśnie te wartości.
Z tej grupy, czyli z listingu, który tam jest przepisany i powiedzieć, że
image main first item chcemy ustawić jako state image main.
A tutaj, jak już pamiętasz, reagujemy obie
te grupy i uzyskujemy listę ze wszystkimi obrazkami.
Jak więc sam widzisz, Babel pozwala nam na
dynamiczne przekazywanie wartości na kilka różnych sposobów.
W tej lekcji nauczyłeś się, jak przekazywać sobie dynamicznie wartości z
jednego elementu do drugiego za pomocą właśnie statów i odpowiednich workflow.
Ja dziękuję Ci za uwagę.
Zasłużyłeś na nagrodę, że dotarłeś ze mną do tej lekcji.
Zasłużyłeś na chwilę odpoczynku, a my widzimy się już w kolejnej lekcji.