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!
Póki co, jak przyznasz, nasz dialog nie wygląda zbytnio zachęcająco.
Dlatego teraz zajmiemy się podstawową
strukturą tego formularza, który jest tutaj w środku.
Mianowicie na początku skorzystamy ze
standardowego HTML, a nie będziemy tego jeszcze stylizować i potem przechodząc do
sterowania zastanowimy się, czy można tutaj jakoś wyeksportować pojedyncze
komponenty pojedynczy import, czy moglibyśmy np.
skorzystać z jakiejś zewnętrznej biblioteki do walidacji?
To sobie zrobimy za chwilkę.
Natomiast na początku zajmijmy się tym,
żebyśmy w ogóle stworzyli sobie tutaj nasz formularz, żeby był tutaj widoczny.
Póki co mamy tylko guzik zamykania.
Także rozpoczniemy sobie pisanie naszej
logiki tutaj w tym miejscu i na pewno będziemy potrzebowali.
Jeżeli chodzi o zobaczymy nasz design, to mamy tutaj dwa pola.
Na początku mamy jakiś tytuł tego popa, mamy jakiś sam tytuł, czyli
zróbmy sobie tutaj dialog title i możemy sobie zapisać przednią subskrypcję.
Tak zapiszemy sobie te zmiany.
Wróćmy do naszej strony i czy tu już nam się coś pojawiło?
Sprawdźmy.
Mamy Adidasa Już mamy.
Nasz tytuł się pojawił.
Zobaczmy, czy ten komponent też dostarcza nam substytutu.
Ale z tego co widać to tutaj nie mamy takiej opcji.
Mamy description, możemy sobie z tego skorzystać i w naszym przypadku.
Jeżeli chodzi o description, to w filmie mamy najpierw General Information.
Możemy sobie tego jak najbardziej użyć General Information.
Zapisujemy to sobie.
Już mamy subskrypcję General Information.
I teraz pod spodem tutaj patrząc na nasz
design, no to musimy tak naprawdę zacząć budować sobie nasz formularz.
Pierwszym polem będzie zwyczajny input typu text z label.
Czyli przejdźmy do naszego kodu
i tutaj pod spodem otworzymy sobie nasz form początek naszego formularza.
I tutaj zaczniemy od label i HTML for niech to będzie name.
Tutaj napiszemy name.
Na razie nie będziemy sobie robić
gwiazdki, że jest required i input type text.
Niech będzie.
I IT sobie zrobimy.
Name i name też name.
I myślę, że to wszystko. Sprawdźmy.
Mamy tutaj jakieś jest jakieś pole, jakiś impuls się nam pojawił, także możemy sobie
teraz to skopiować tak naprawdę, bo kolejnym polem, które będziemy potrzebować
tutaj, to będzie kategoria, czyli kategoria.
Potem nie będzie Olimpu, tylko oczywiście musimy tutaj zrobić selekcję.
Tu nie potrzebujemy już tego typu.
Jeżeli chodzi o selektor, musimy też podać tutaj opcję tak, czyli option.
No i niech będzie pierwszy.
Na razie sobie spiszemy, wpiszemy z ręki
entertainment i drugi option sobie zrobimy insurance.
Tylko jakie przykłady?
Po prostu entertainment.
I bardzo dobrze.
Mamy dwie opcje do wyboru.
Póki co mamy jeszcze Entertainment Insurance.
Na razie nie patrzymy się na style.
Powoli sobie budujemy całą naszą strukturę.
Dobrze, to mamy dwa pola tutaj w formie.
Sprawdźmy teraz design.
Kategoria i name muszą być koło siebie.
Później mamy coś takiego jak website.
Jest to też to, że to będzie też pole typu po prostu zwyczajny text input.
Tylko odpowiednio pewnie będziemy musieli sobie oscylować.
Ten przedrostek albo skorzystamy z jakiejś
gotowej biblioteki, która pomoże nam budować tego typu formularze.
Przejdźmy teraz do naszego edytora kodu.
Kolejnym polem, które będziemy mieli.
Zaczynamy od Label i Website.
Zróbmy sobie avatar URL.
W naszym przypadku niech to będzie avatar.
URL i input.
Niech to będzie typ text name, avatar, url i id to sobie zrobimy avatara.
Zapiszemy to sobie już w tym momencie
powinniśmy mieć tutaj kolejny input na avatar URL.
Kolejna rzecz w naszym
formularzy to musimy sobie oddzielić to, czyli znowu musimy.
Możemy wykorzystać ten sam komponent, który mamy tutaj.
Prawdopodobnie dajemy dajemy sobie to,
to tutaj to też będzie wyglądało tak samo, czyli będziemy mogli wykorzystać te same
trzy komponenty tutaj, w tych miejscach, do tego.
W naszym przypadku korzystaliśmy dialog
description, czyli możemy sobie teraz to wszystko oddzielić za pomocą dialog
on i tutaj jako description będzie expand information, czyli Expand information.
Zapisujemy to sobie, już mamy nasz information.
No i kolejne pola.
Sprawdźmy teraz jakie mamy kolejne pole.
Tutaj mamy koszt.
W naszym designie
jest koszt i to też będzie pole typu input tak naprawdę i też możemy poniżej zrobić
też jakby nie widać tego dokładnie na tym ekranie.
Natomiast jako że my mamy trzy waluty,
to tutaj warto byłoby zrobić jakiś pewnie select, dzięki któremu użytkownik może
sobie wybrać waluty wspierane przez nasz system.
Tutaj input typu number, gdzie może sobie wpisać po prostu swoją wartość.
Tak?
Czyli przejdźmy do naszego edytora kodu i znowu label.
Tutaj html for zrobimy sobie kostkę kostką i tutaj input będą dwa.
Tutaj tak naprawdę pierwszy będzie typu
number, gdzie jako wartości będziemy mogli.
Tak naprawdę musimy podać minimalną
wartość, żeby pozwolić użytkownikowi tutaj wpisywać wartości po przecinku.
Musimy podać coś takiego.
I generalnie rzecz biorąc name robimy na kostce i ID też na kostce.
To jest pierwszy input. Drugi typ tutaj pod spodem to będzie typu
select czyli robimy select i tutaj będzie currency.
PIT też możemy sobie zrobić na karencji.
Jeżeli chodzi o label to nie potrzebujemy
label, a na to zrobimy opcje Option i tutaj value niech
będzie EUR i zrobimy sobie 3 opcje, które są wspierane przez nasz system.
Oczywiście jak będziemy to refaktoryzacji to prawdopodobnie powinniśmy tutaj użyć
tak na prawdę tego typu karencji i zmapować to na poszczególne
opcje w miarę czasu jak ta aplikacja będzie się rozrasta.
Tutaj usd, pln i w miarę jak się będzie to
aplikacja rozrastać to może przyjść coś takiego, że będziesz wspierać.
Więcej tutaj value dla Twojego klienta, dla Twojego użytkownika.
Dlatego też myślę, że warto, żeby
skorzystać tutaj od razu z tego typu, który podchodzi nam z bazy
danych, a który mówi nam o tym, ile walut wspieramy dla naszego użytkownika.
Kolejne opcje, które tutaj potrzebujemy sprawdźmy sobie na nasz mock.
Mamy Billing information i myślę, że na
pewno będziemy tutaj musieli coś zrobić z tym billing period.
Pewno będziemy musieli sobie coś zrobić.
Next payment, payment, last payment zostawimy to sobie.
Na razie nie wspieramy tej opcji w ogóle w naszej bazy danych.
Nasz model na razie tego nie ma, dlatego
zostawimy sobie tylko po prostu billing period i experiment, żeby zaznaczyć to,
żeby to odpowiednio pokazać w naszej tabelce.
Czyli wróćmy do edytora kodu.
I kolejna rzecz, którą potrzebujemy to dialog Description.
To jest jakby inna sekcja już tak billing information.
Czyli musimy oddzielić tą poprzednią sekcję i tutaj będzie billing information.
My potrzebujemy tutaj dwóch importów.
Myślę, że tutaj ten design nie oddaje
tego, co tak naprawdę mamy w logice naszej bazy danych.
Na razie sobie zrobimy tutaj prosty select, bo wspieramy tylko miesięczny,
kwartalny i roczne rozliczenia za subskrypcje.
Dlatego możemy sobie zrobić tutaj prosty
select, który będzie miał trzy opcje do wyboru.
Przejdźmy do naszego komponentu i zrobiłem
sobie label HTML for i tutaj możemy zaznaczyć tak
naprawdę billing period i zaznaczymy Billing period.
Jeżeli chodzi o import no to będzie typu
select i tutaj też musimy skopiować tą nazwę billing period.
Możemy sobie zrobić kopiuj wklej.
Jeżeli chodzi o opcje to mamy ich tak naprawdę kilka.
Mamy tylko trzy monety.
Kopiujemy to sobie.
Znajdziemy tutaj i wklejamy tutaj będziemy quarterly I.
Czyli rocznie, miesięcznie i kwartalnie.
Na razie sobie to mocujemy, za chwilkę przechodzimy do refaktoryzacji.
Użyjemy tutaj konkretnej logiki.
Wykorzystamy znowu tutaj nasz typ SMA.
Smakujemy możliwe wartości, no po prostu
użyjemy tych wartości jako waluty w naszych opcjach do wyboru.
Jeżeli chodzi o next payment no to będzie prosty input typu date.
Czyli przejdźmy tutaj do naszego edytora kodu i poniżej.
Label next Payment jako input typu date.
Zapiszemy to sobie wróćmy do naszej strony.
Sprawdźmy jak to wygląda.
Mamy tutaj input typu na razie standardowy input, który mamy w przeglądarce.
Za chwilkę zajmiemy się stylem sianiem tego wszystkiego.
Myślę, że to jest chyba na tyle Tak
naprawdę co potrzebujemy potrzebujemy jeszcze jeżeli chodzi o nasz design.
Potrzebujemy dwa guziki.
Tym tutaj tą informacją na razie się nie przejmujemy.
Nie będziemy tego tutaj implementować.
Tu jest informacja o jakimś przypominajka użytkownika.
Natomiast to na pewno sobie implementujemy.
Czyli możemy przejść poniżej
input avatar url i wpisać sobie ten tekst Help avatar for your serwis.
Czyli możemy sobie przejść tutaj do naszego do naszego edytora kodu.
Przejdziemy sobie poniżej avatar url input i tutaj w tym miejscu zrobimy sobie
zwyczajne PE, które będzie po prostu z tym tekstem wskazującym, że jeżeli użytkownik
poda nam informacje na temat strony, będzie nam łatwiej wygenerować odpowiedni
avatar dla serwisu, którego korzysta dobrze.
Czyli taką podstawową strukturę mam za sobą.
Jeszcze dodamy tutaj dwa guziki jeżeli
chodzi o cancel i submit, tak jak to mamy tutaj w naszym w naszym designie.
Przejdźmy teraz do naszego komponentu i oba te guziki będą tak naprawdę cancel.
Guzik będzie zamykał nasz nasz komponent,
natomiast save czyli Add subskrypcję będziemy zamykać od razu komponentu.
Czyli tak naprawdę jeżeli chodzi o nasz guzik Cancel możemy sobie wykorzystać
dialog close i tutaj w formularzu możemy to zrobić.
Tak naprawdę dialog close.
Tutaj możemy sobie zrobić button i tutaj Cancel.
Zapiszemy to i drugi to po prostu będzie normalny baton.
I tutaj nie.
Zapiszę to sobie.
No i mamy już cancel subskrypcję.
Jeżeli nacinamy Cancel, to dialog nam się zamyka.
Odkrywcze.
Jeszcze nie robi tak naprawdę nic, tylko forum.
Wrócimy na poprzednią stronę.
Tutaj możemy sobie na razie na on pliku
po prostu zrobić privacy default, żeby nam się ten film po prostu nie emitował.
Zobaczymy czy teraz zadziała.
Restartujemy naszą stronę.
Nasz komponent ten guzik póki co nie robi nic.
O to nam chodzi. Teraz przejdziemy do stylu działania tych
komponentów, żeby to wyglądało tak jak naszym na naszym okapie tutaj.