Projekt aplikacji SaaS
8 godz. 8 min · Next.js · Full-stack i Programowanie
Daniel NoworytaFull stack DeveloperNaucz się tworzyć bezpieczne systemy uwierzytelniania i autoryzacji, korzystając z Clerk. Pokażę Ci, jak to robić krok po kroku, aby Twoje aplikacje były bezpieczne i profesjonalne.
Zrozumiesz, jak skutecznie i bezboleśnie połączyć swoją aplikację Next.js z bazą danych PostgreSQL na DigitalOcean. Pokażę Ci, jak używać Prismy, aby ułatwić ten proces.
Dowiesz się, jak zarządzać routingiem i nawigacją w swojej aplikacji, aby użytkownicy mogli łatwo i intuicyjnie poruszać się po Twojej stronie.
Pokażę Ci, jak z łatwością wdrożyć swoją aplikację na Vercel, jednym z najpopularniejszych środowisk hostingowych dla aplikacji Next.js.
Nauczysz się zarządzać stanem aplikacji i jak wykorzystać server actions w praktyce, co pozwoli Ci na tworzenie bardziej zaawansowanych i dynamicznych funkcji.
Ten kurs jest dla osób, które już mają pewne doświadczenie z JavaScript i chcą zgłębić swoje zrozumienie Next.js. Zakładamy, że znasz podstawy TypeScript, TailwindCSS, ale nie potrzebujesz doświadczenia z Next.js - wszystko wyjaśnię Ci od podstaw!
Czas zająć się w naszej aplikacji funkcjonalnością, która umożliwi naszemu
użytkownikowi dodawanie nowej subskrypcji do istniejących już w naszym systemie.
I to generalnie tutaj wyjdziemy poza komponenty po stronie serwera.
Bo jeżeli wchodzą w grę jakieś interakcje, które będą zmieniały stan naszego
komponentu, to prawdopodobnie będziemy musieli troszeczkę sobie tutaj zrewidować
naszą logikę, bo póki co zarówno nasz dashboard jak i
komponent z naszymi subskrypcja to są komponenty tak naprawdę po stronie
serwera i wszystkie dane, które są tutaj są zapisywane po stronie serwera.
No i nie można tutaj wprowadzać żadnych zmian już z poziomu użytkownika.
Dlatego pierwszą rzeczą, którą sobie zrobimy to stworzymy sobie dialog,
który będzie wyskakiwał po naciśnięty tego przycisku.
Będzie to się działo podobnie jak mamy tutaj komponent po stronie klienta.
Natomiast my tutaj stworzymy sobie nasz własny komponent, który będzie wyskakiwał
nam dialog, który umożliwi nam dodawanie subskrypcji.
Jeżeli chodzi o to jak on wygląda, to
możesz teraz sobie zobaczyć na swoim ekranie.
Będzie to nic innego jak prosty formularz.
Jeżeli chodzi o dodatkowe funkcjonalności sobie to zostawimy, natomiast postaramy
się jak najbliżej tego tutaj też wystylizować nasz komponent, nasz popup
dialog, który będzie pokazywał formularz, którym będziemy mieli nazwę subskrypcji.
Kategorie Adres URL naszego awatara wpiszemy sobie
prawdopodobnie na sztywno na chwilę obecną koszt jakiś billing information czy next
payment i po prostu guzik do zapisania nowej subskrypcji.
Oczywiście po tak wykonanej akcji prawdopodobnie będziemy musieli jakoś
zrewidować dane, które mamy już wygenerowane po stronie klienta.
Jako że teraz nasze tabelki są
tak naprawdę pól Server Components, nie ma tam mowy o żadnej modyfikacji danych.
Możemy sobie rewidować dane po stronie serwera.
Natomiast pierwszy
pierwszy efekt, który użytkownik zobaczy po takim dodaniu takiej nowej zwróci byłby
po tym jak jakby użytkownik odświeżył naszą stronę.
Nie chcemy odświeżać strony, dlatego też skorzystamy sobie tutaj prawdopodobnie z
jakiejś takiej po stronie serwera, która pozwoli nam robić mutacje po stronie
klienta i już pokazywać aktualne dane po wykonaniu np.
akcji zapisywania nowej edycji.
Na chwilę obecną przejdźmy
do naszego, do naszego kodu i implementujemy sobie najpierw ten
dialog, który będzie wyskakiwał po naciśnięciu na guziki.
W tym celu wykorzystamy sobie bibliotekę Radix.
I tutaj mamy komponent dialogu,
który będzie komponentem, który sobie wykorzystamy na nasze potrzeby.
Generalnie już wykorzystywaliśmy i z tego co wiem, to
mamy top down menu już wykorzystane w naszej aplikacji.
Natomiast teraz będzie kolejny komponent z
tej biblioteki, którą bardzo Ci polecam do.
Wykorzystamy dialog do tego, żeby wyświetlić nasz formularz dodawania.
Przejdźmy do edytora kodu.
Otwórzmy sobie miejsce, w którym tak
naprawdę będziemy potrzebować dodawać nową subskrypcję.
I z tego co pamiętam mieliśmy to w aplikacji i w layoucie.
Tutaj gdzieś był guzik do dodawania nowej subskrypcji.
Sprawdźmy sobie API user ten komponent
i tutaj mamy guzik do dodawania nowej subskrypcji.
Tutaj już mamy drop menu z Radix a,
natomiast to tutaj tą logikę będziemy musieli sobie za chwilkę teraz
przerobić na to, co pozwoli nam dodawać nową subskrypcję.
Czyli pierwsza rzecz, którą potrzebujemy
to na pewno będziemy musieli sobie zainstalować ten komponent u nas.
Weźmy sobie tutaj.
W instalację kopiujemy sobie npm Install radix dialog.
Przejdźmy do naszego terminala
i zainstalujemy najpierw nasz dialog w naszej w naszej aplikacji.
Dobrze, dialog mamy już zainstalowany.
Możemy sobie znowu odpalić naszą aplikację.
Wróćmy do naszego edytora kodu i zaczniemy sobie tutaj pisać naszą logikę.
Otóż opiekujemy sobie nasz guzik jeżeli
chodzi o dodawanie nowej subskrypcji w właśnie w komponent Dialog.
Będzie to komponent Dialog Root.
Jak wiemy już ten komponent jest
komponentem po stronie klienta, dlatego też możemy skorzystać z dynamicznego
komponentu, bo i tak tu już jest komponent po stronie klienta.
Tak naprawdę ten API User button.
Przypominam Ci, że ten komponent to jest wszystko to, co mamy tutaj w tym miejscu.
To tutaj to jest komponent po stronie
klienta, jako że mamy tutaj bardzo wysoką interaktywność z klientem, dlatego musimy
sobie tutaj zostawić to po stronie klienta.
Pakujemy to w dialog.
I pierwszą rzecz, którą będziemy potrzebowali to na pewno root.
Za importujemy to z Radix Dialog.
Jeżeli chodzi o root też musimy zaimportować z radix dialog.
Natomiast tutaj mamy standardowy import.
My sobie to przerobimy, żeby już po prostu ten ród był zaimportowany.
Zrobimy to coś takiego Path Dialog już w tym momencie.
Ród mamy też zaimportowany wraz z tą paczką tutaj.
Dobrze. Ród mamy już z głowy.
Teraz kolejna rzecz, którą potrzebujemy jeżeli chodzi o dialog, to jak każdy
dialog będzie potrzebował triggera, czyli dialog Trigger.
W naszym przypadku trikiem będzie właśnie
nasz guzik nowej subskrypcji, czyli możemy przenieść do triggera.
Zapiszemy to sobie.
Póki co jeszcze nam się nic nie będzie działo.
Nie mamy żadnego dialogu, nic się nie otwiera.
Możemy zmniejszyć ten ekran.
Na razie się nic nie dzieje.
Natomiast za chwilkę zacznie się dziać.
Otóż możemy dodać sobie już teraz portal.
Portal to jest rzecz też dostarczana nam właśnie z dialogiem
z Radix Suite i to jest jakby nakładka na portal i tutaj w środku będziemy mogli
sobie wyrenderować nasz overlay i dialog content.
Zaczniemy od naszego overlay i
odpowiedniego usytuowania go, żeby po prostu wszystko było zaciemnione.
Jeżeli mamy dialog otwarty, czyli dialog overlay.
I tutaj potrzebujemy tak naprawdę tylko i wyłącznie żadnych żadne niepotrzebne.
Potrzebujemy tylko style class name.
I w naszym przypadku będzie to wyglądało
tak, że chcemy tak naprawdę, żeby ten overlay zajmował nam całą tutaj
powierzchnię naszego, naszego, naszej aplikacji, czyli fixed.
Pozycja fix zrobimy sobie insert 0.
Jeżeli chodzi o zet zróbmy na 10, żeby to
było troszeczkę wyżej w hierarchii naszych komponentów.
BG ustawimy sobie na 950 bardzo ciemne tło, BG Opactwo ustawimy na
80, żeby była jakaś jednak przezroczystość.
Zróbmy sobie jeszcze jeżeli chodzi o date data.
Tutaj wykorzystamy też
customowe State Open równa się Open i tutaj możemy to animować Animate.
I overlay slow.
Zauważ, że nie mamy tutaj podpowiedzi naszego IDE z tego względu, że jeszcze nie
rozszerzyliśmy sobie konfiguracji naszej CSS.
Jeżeli wrócimy tutaj do dokumentacji.
Jeżeli chodzi o time in CSS to zobacz, że
musimy tutaj tak naprawdę sobie rozszerzyć naszą konfigurację, żeby móc
korzystać z tych samych animacji, z których korzystają twórcy dialogu.
Kolory nie potrzebujemy, natomiast key frames jak najbardziej overlay content.
Możemy to tutaj już rozszerzyć.
Wskakujemy sobie do naszego rozszerzenia, do naszych frames.
Jeżeli chodzi o animacje, potrzebujemy te dwie animacje.
Potrzebujemy rozszerzyć sobie tutaj nasz
config i wklejamy sobie te dwie animacje, które są nam potrzebne.
Zapiszemy to sobie i już możemy sobie konflikt zamknąć.
Już w tym momencie.
Jeżeli zacznę pisać animacje overlay tą już powinienem mieć podpowiedź.
Animate No i już mamy overlay.
Już teraz wszystko działa poprawnie.
To znaczy, że dobrze sobie.
Zanim pracowaliśmy, zaimplementowali śmy zmianę w tych stylach.
Zgodnie z dokumentacją dialogu przejdźmy sobie do naszego, do naszych.
To nasi tutaj.
I do naszej strony i widzisz, że już mamy
overlay, który został poprawnie wyświetlony.
Przejdźmy teraz do importu i implementacji
dialogu panelu, który się będzie wyświetlał.
Czyli potrzebujemy na pewno dialog content i dialog content.
Możemy sobie tak naprawdę ustawić tutaj wszystko co chcemy.
Natomiast pierwsza rzecz, którą ja bym
chciał najpierw sobie tutaj ustawić, to na pewno chciałbym ustawić
dialog close button tak, żebyśmy mogli sobie to jakoś zamykać.
I w tym momencie sobie tutaj skopiuję z boku przykładowy button.
Zapiszemy to sobie. Jeżeli chodzi tu o logikę, no to tak
naprawdę dialog chcemy zaznaczyć, bo chcemy dodać swój customowe komponent.
Tutaj są proste style, żeby to jakoś wystylizować.
Czyli przejdźmy do Content class name.
No i zacznijmy od tego, że
możemy mieli pozycje fixed i left ustawimy sobie na 50% i right albo top.
Tak naprawdę powinno nam wystarczyć.
Też ustawimy sobie na 50%, ustawimy dziesiątkę max.
Ustawimy sobie maksymalną wysokość tego komponentu na wartość custom.
Niech to będzie uchwyt i jeżeli chodzi o
szerokość tego komponentu to chciałbym żeby to było maksymalnie 480 pikseli.
Jeżeli chodzi o animację i translate to zaczniemy sobie tutaj to dodawać.
Zamkniemy bocznej teraz jak translate i pierwsza rzecz którą chcemy zrobić to
chcemy przesuwać po X i też zróbmy
tutaj 50% translate y, tutaj też 50%.
Round.
Zróbmy sobie 3 x zaokrąglamy rogi.
Beginning ustawimy na 50 p.
Padding ustawimy tu na.
Niech będzie 6.
W naszym przypadku Shadow.
Ustalimy sobie na wartość customowe to wszystko jeżeli chodzi o Shadow.
Ja sobie tutaj przykleję te style, bo to
jest coś, co ja po prostu sobie wygenerowałem w internecie.
Jeżeli chodzi o shadow
style CSS to jest mnóstwo generatorów do shadow, które możesz sobie wykorzystać.
No i już mamy coś nam się pojawia, Możemy nasz element tutaj zamknąć.
Sprawdźmy sobie czy wszystko tutaj mamy też dobrze wystylizowane.
Może to przesunięcie, ale na razie sobie kasujemy.
No mamy już teraz na środku wszystko wygląda ok.
Mamy nasz nasz panel, mamy nasz dialog, content.
Oczywiście musimy tutaj teraz postarać się
o to, żeby tak naprawdę wszystko było lepiej widoczne.
No bo póki co mamy ten overlay, który jest na dziesiątkę.
Spróbujmy sobie tą dziesiątkę tutaj
skasować i zobaczmy, jaki sposób to teraz wyglądało.
Cały czas mamy problem z wyświetlaniem tego panelu.
Sprawdźmy nasze style.
No i co tutaj mamy źle?
To oczywiście literówka nam się wkradła.
Tego nam tutaj brakuje.
W tym momencie mamy jakiś dialog z jakimś guzikiem do zamykania go.
Oczywiście jeszcze nie wygląda to
dosyć atrakcyjnie, natomiast zajmijmy się teraz tym contentem,
czyli tym formularzem, który będziemy potrzebować do tego, żeby dodawać nową.
Subskrypcje. Czyli funkcjonalność dialogu mamy za sobą.
Jeżeli chodzi o accessibility, to jest to wszystko tutaj pomyślane dobrze.
Teraz zajmiemy się tym, co będziemy wyświetlać tutaj, w środku.