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!
Teraz, kiedy mamy już ogólną strukturę
naszej strony, przejdźmy sobie do budowania tego
komponentu tutaj ze statystykami, który widzimy właśnie w tym miejscu.
Postaramy się odzwierciedlić jak najbliżej to, co mamy tutaj, jeżeli chodzi o teorię.
Jeżeli chodzi o tą konwencję, czyli o walutę, którą posługuje się nasz
użytkownik, to prawdopodobnie powinniśmy sobie tutaj stworzyć jakieś opcje
użytkownika, który może sobie zapisywać to to będziemy za czytywać.
Natomiast my przyjmiemy sobie tutaj w ćwiczeniu, że tak naprawdę waluta, którą
posługuje się użytkownik to będzie polska złotówka.
Jeżeli chodzi o resztę, to ja tutaj widzę
na pewno to można wyodrębnić jako malutki
komponent, bo tak naprawdę logika się tutaj nam powtarza.
Mamy tu tylko jakąś sumę, która się zmienia i opis
Walutę też możemy przekazywać jako props, czyli możemy sobie zbudować taki mały
komponent, jeżeli chodzi o tą taką pojedynczą statystykę.
Przejdźmy teraz do naszego edytora kodu.
Mamy tutaj naszą stronę z portem.
Ja sobie ją troszeczkę powiększa, żebyśmy mieli podgląd na większy widok i
przejdziemy teraz tutaj właśnie do edytowania tej części.
Może to jest przesuniemy sobie troszeczkę wyżej.
Ja sobie to zapiszę, to
też przesunę nad ten wrapper, żebyśmy mieli podgląd co gdzie się znajduje.
I tutaj w środku naszego wrapper na statystyki przejdziemy teraz i zbudujemy.
Tak, najpierw będziemy potrzebowali tak naprawdę,
żeby wszystko odsunąć od siebie, od góry i od dołu, czyli div i tutaj class.
No i musimy sobie ustawić na jakiś margin na x.
Niech to będzie na razie 6.
Zobaczymy jak to będzie wyglądać.
Display zróbmy sobie na flex.
Jeżeli chodzi o wysokość niech to będzie full jeżeli chodzi o Items Center.
Może wysokość tak naprawdę nie będziemy
potrzebować tutaj to nam się przyda Items Center i zrobimy sobie na przejść.
Zapiszemy to sobie już w tym momencie.
Tutaj spróbujemy sobie zamocować nasz przykładowy komponent.
Jeżeli chodzi o treści na początku w naszym designie mamy tylko informacje na
temat naszego miesiąca i roku, w którym aktualnie się znajdujemy.
Przejdźmy
do naszego edytora kodu i zaczniemy pisać logikę dla tego pojedynczego komponentu.
Pakujemy to w div i tutaj jako H1 zrobimy sobie date.
Użyjemy tutaj format dat jako datę.
Jako dane po prostu przyjmiemy przyjmiemy sobie new date.
Dzień dzisiejszy jako format chcemy wyłuskać tutaj tylko miesiąc, czyli cztery
duże ELK i jak najbardziej nam tutaj wystarczą.
Jeżeli chodzi o opis
to możemy sobie zrobić tutaj span albo po prostu zwyczajne P.
Tak naprawdę też powinno nam wystarczyć i
tutaj w środku jako dana też możemy sobie skorzystać tak
naprawdę z funkcji Format Date Defenders i jako Date też New date.
Natomiast tutaj jako format przyjmiemy coś innego.
Oczywiście tutaj nam chodzi o rok jeżeli spojrzymy na firmę.
Tutaj potrzebujemy rok naszej daty pokazać, czyli przejdziemy tutaj i w tym
momencie możemy użyć po prostu czterech literek Y jako małe literki.
Zapiszemy sobie to już teraz sprawdźmy jak wygląda nasza strona.
No coś tutaj się już pojawiło.
Jeszcze nie mamy styli.
Teraz warto sobie tutaj ustawić na ten div wysokość na h full.
Wtedy wyszukuje to nam.
Ten element mamy już w środku w środku dane niezależnie jak wysoki on będzie.
No i teraz musimy skupić się na sterowaniu
tych poszczególnych, tych poszczególnych napisów.
Także przesunę sobie tutaj, żebyśmy więcej widzieli.
I ta jedynka, czyli teraz musimy zdecydować klasę.
No i tutaj będziemy potrzebowali tag text XML.
Jeżeli chodzi o wielkość tekstu font ustawimy na semi bold.
Żeby troszeczkę jednak ten tekst wyszczególnić.
Leading zrobimy na 5 i tracking na wide zapiszemy to sobie.
No i już mamy napis Jun.
Wygląda to dużo lepiej jeżeli chodzi o
naszą, o nasz drugi tekst, czyli o nasz rok, to jednak nie może on być tak bardzo
widoczny jak miesiąc, tak jak to mamy tutaj w designie.
Jednak jest to troszeczkę słabszą czcionką pisane i kolor też jest bardziej wyblakły.
Dlatego przejdziemy
do naszej implementacji i zaczniemy od tego, że
na pewno jeżeli chodzi o wielkość tekstu musimy to zmniejszyć, żeby to nie było
tak bardzo widoczne jak nazwa naszego miesiąca, czyli tekst XS.
Już powinienem w tym pomoc.
Mamy jak najbardziej jest ok.
Jeżeli chodzi o kolor no to musimy zrobić tekst z link i ustawmy na 500.
Też jest bardziej wyblakły i
myślę, że to wszystko na chwilę obecną jak najbardziej wygląda to w porządku.
Teraz co potrzebujemy zrobić?
Generalnie na firmie mamy coś takiego, że tu jest jakaś większa przerwa.
Czyli można tak naprawdę dojść do wniosku, że pewnie.
Zamknięte w 1 div.
I pewnie to tutaj po tej stronie.
To będzie jakiś drugi list z tymi statystykami.
Tutaj m.in. mamy coś, jakiś wrapper.
Czyli możemy albo użyć jakiegoś
sera, tutaj nadać mu klasę, żeby sobie rosną i odsunął nam te rzeczy.
Natomiast możemy też zapakować tą część
naszej statystyki, tą część statystyk w osobne 2 divy i wykorzystać tutaj flex i
czas strefy space between do tego, żeby odsunąć od
siebie te dwa elementy, żeby zawsze były po prawej po lewej stronie.
Myślę, że ta druga strategia będzie dużo lepsza w tym przypadku.
Także wróćmy do naszych statystyk.
Mamy tutaj nasz główny komponent ze statystykami i tutaj mamy
nasz komponent Flex, który ogarnia nam tutaj te wszystkie rzeczy.
I teraz to jest część ze statystykami po lewej stronie.
Załóżmy sobie
i załóżmy sobie, że druga część będzie statystykami po prawej stronie.
I teraz, żeby tutaj coś wpisać, żebyśmy mieli już jakieś dane, no to zaczniemy
sobie budować kolejny ten komponent ze statystykami.
Zobaczmy, jak to tutaj było w naszym dizajnie.
Potrzebujemy styl tutaj i jakąś sumę w złotówkach wyrażoną.
Także zaczniemy sobie od tego.
Najpierw na sztywno wpiszemy sobie tutaj jakąś sumę.
Po prostu możemy sobie wpisać 36,5
jeżeli chodzi o pierwszą wartość i niech to będzie też pisane w dwójce.
Wrzucimy tutaj tą sumę do środka.
Jeżeli chodzi o walutę, czyli o to PLN to musimy sobie to też osobno zdecydować, bo
widzimy, że waluta tutaj jest wyraźnie mniejsza w naszym dizajnie.
Czyli prawdopodobnie możemy sobie wykorzystać w naszej dwójce
i tutaj w tym miejscu możemy sobie wpisać nasze PLN, które nam się przyda.
Prawdopodobnie będziemy musieli to za chwilkę sobie wystosować.
Jeżeli chodzi o napis poniżej.
Możemy też przyjąć, że to będzie PLN, czyli paragraf zwyczajny.
No i tutaj możemy sobie skorzystać z formuły i też wykorzystać format do tego,
żeby powiedzieć odpowiedzi tak, czyli zapłacono.
Odpowiedź w tym miesiącu I tutaj
skorzystamy też po prostu z dnia dzisiejszego i sformatowania w taki
sposób, że po prostu wyciągniemy sobie miesiąc z tej daty.
Zapiszemy to sobie teraz, sprawdzimy, jak wygląda nasza strona.
No mamy, tutaj już coś się pojawiło.
Teraz, żeby to odsunąć od siebie na prawą stronę zajmijmy się najpierw tym.
Jeżeli tutaj mamy Items Center, no to
musimy prawdopodobnie dodać tylko between i już.
To pozwoli nam odsunąć tą całą resztę na prawą stronę.
W razie czasu jak będą pojawiały się
kolejne statystyki to po prostu to się będzie coraz bardziej tutaj przybliżał.
Natomiast teraz zajmijmy się stylem tego pojedynczego komponentu.
Zaczniemy od dwójki.
Name Tutaj będzie podobnie jak poprzednio text XML potrzebujemy.
Jeżeli chodzi o kolejne rzeczy to na pewno font semi bold.
Dodatkowo przyda nam się tutaj leading też piątka i tracking.
Zróbmy sobie na wait podobnie.
To może jest podobne style naprawdę jak
mieliśmy tutaj w tym poprzednim komponencie, czyli mamy jeszcze 5 6 PLN.
Natomiast ten span musi być inaczej
tutaj zaadresowany, dlatego mamy go opakowane tą w span class name tutaj.
W tym przypadku będziemy potrzebowali margin po lewej stronie 1.
Tekst zróbmy sobie na 80 tys. margin na 2.
Na razie tekst ustawimy na 8 pikseli,
z tego względu 8 tutaj ustawiam, bo generalnie jeżeli wziąłbym najmniejszą
wartość tekstu w tej rundzie, czyli tekst jest x s to mamy 12 pisali.
My potrzebujemy dużo mniejszą czcionkę
tutaj, dlatego skorzystamy z wartości custom nowej.
Ustawię to sobie na 8 pikseli.
Potrzebujemy jeszcze aplikacje, czyli wszystko dużymi literami.
Zapiszemy to sobie sprawdźmy.
No PLN wygląda dużo lepiej, natomiast margines jest nieodpowiedni.
Sprawdźmy sobie jak ustawiam sobie to na jedynkę.
No już lepiej tutaj przybliżone do całej reszty.
Także myślę, że możemy to sobie na chwilę obecną zostawić tak jak jest.
Jeżeli chodzi o tutaj, o ten podpis jaka to jest statystyka?
Zróbmy sobie class name.
I tak naprawdę tekst xx.
Podobnie jak to mieliśmy w poprzednim
miesiącem i z rokiem, jeżeli chodzi o tekst kolor.
I 500.
Możemy sobie ustawić tak jak to w poprzednim było komponencie.
Jeżeli chodzi o następne rzeczy, to myślę, że to powinno nam już teraz wystarczyć.
Mamy już to jakoś tutaj wygląda, czyli
mamy nasz komponent do poszczególnej statystyki i mamy już za sobą.
Czyli możemy sobie teraz tak naprawdę
wiadomo, że będziemy musieli powtarzać tę logikę.
Będziemy mogli sobie teraz ten komponent wyciągnąć na zewnątrz.
Tworzy sobie osobny komponent, który będziemy mogli sobie używać.
Czyli zróbmy sobie tutaj w naszych komponentach STAT komponent Test X.
Może to nazwijmy to stats.
Single single stack komponentu.
Myślę, że taka nazwa jest jak najbardziej
ok i możemy skopiować tutaj Export default function.
Przejdźmy do Single Component.
Zmieniłem nazwę singiel Stats i tutaj jako read
możemy wrzucić to co tutaj zbudowaliśmy już jako naszą, jako naszą zaślepkę.
Czyli złapiemy sobie
tego diva pojedynczego z pojedynczym statystykom zapiszemy to.
Format będziemy musieli oczywiście tutaj sobie zaimportować z FMS.
Uważaj jak będziesz importować,
prawdopodobnie automatycznie będzie to z innej biblioteki.
I tutaj już w tym miejscu, zanim zajmiemy się tym,
żeby przekazywać odpowiednie propsy do komponentu, czyli stworzymy sobie tutaj
interfejs i możemy sobie zrobić po prostu props.
No i co będziemy potrzebować ten komponent?
Zmienna będzie ta wartość, czyli jakaś jakiś number.
Zróbmy sobie.
SUM number.
Jeżeli chodzi o następną rzecz, którą będziemy potrzebować to na pewno currency.
I tutaj możemy sobie
skorzystać z naszych z naszych typów, które są facto typami z Primy.
Możemy sobie wykorzystać, że to będzie tak naprawdę typ właśnie ten enum, który mamy.
Możemy to zrobić jako opcja domyślna dla
nas, bo my tutaj wiemy, że tak naprawdę będziemy wykorzystywali
polskie złotówki jako opcja, która będzie zakodowana na stałe w naszej aplikacji.
Natomiast oczywiście w przyszłych
rozwiniętej aplikacji radziłbym Ci zrobić też tutaj jakiś moduł do ustawień
użytkownika, gdzie użytkownik może sobie ustawić swoją główną walutę w aplikacji.
Według tego też będziemy prawdopodobnie
musieli te statystyki temu użytkownikowi przeliczać.
Natomiast na chwilę obecną ustawimy tutaj
na na sztywno PLN, natomiast zaślepkę już możemy sobie wstawić currency.
Oczywiście tutaj musimy te wszystkie rzeczy wyciągnąć najpierw sam i
currency i to będzie typu single stack component.
Props. Tak, to jest typ.
I tutaj już możemy sobie użyć karencji i tutaj możemy użyć sam.
Zapiszemy to sobie.
Kolejna rzecz, której potrzebujemy nasz opis, czyli ta część.
Tak naprawdę ona będzie musiała być przekazana jako parametr.
Tak.
Czyli możemy sobie zrobić description albo Super title.
No i tutaj możemy sobie zrobić screena.
Kiedy potrzebujemy w naszych procesach i
title potrzebujemy później użyć sobie właśnie w tym miejscu.
Tak zapiszemy sobie nasz komponent.
Już mamy gotowy komponent, który możemy
wykorzystać do tego, żeby powiela się nasze statystyki.
Jeżeli sobie zrobimy logikę związaną
właśnie z obliczaniem statystyk i właśnie logiką związaną z obliczaniem tych
statystyk zajmiemy się w następnym odcinku.
Jednak zanim przejdziemy do naszego
odcinka, to po prostu wykorzystajmy już nasz nowo stworzony komponent.
Jeszcze tutaj przydałoby się mamy go wyeksportowane.
Dlatego tutaj w tym momencie w naszym też Wordzie.
W miejsce tego diva pod spodem możemy wykorzystać nasz string komponent.
Importujemy sobie go od razu.
Będziemy mieli tutaj podpowiedź jakich danych potrzebujemy.
Jeżeli chodzi o sumę to w naszym przypadku
niech to będzie na chwilę obecną 36,6 tak jak to było poprzednio.
Jeżeli chodzi o kolejny prop czyli currency.
Niech to będzie tutaj przekazane też w subskrypcji PLN.
Jeżeli chodzi o sam title
to wrzucimy sobie ten twór, który zrobiliśmy tutaj, czyli That i in.
I dokładnie to niech będzie ten string tutaj wrzucony właśnie w to miejsce.
To już możemy sobie w.
Zostawimy sobie na razie tego diva, zobaczymy czy to tak samo wygląda.
Zobacz, mamy te same obiekty.
Czyli w tym momencie możemy jak
najbardziej tutaj zrezygnować z tego elementu.
No i mamy nasz komponent ze statystykami.
Teraz przejdźmy do tworzenia logiki
związanej z obliczaniem tych wszystkich wartości.
No bo troszkę tego tutaj mamy pokazane na tym ekranie.
Do tego musimy sobie stworzyć logiczny,
która nam policzy to, co użytkownik ma jeszcze do zapłaty w tym miesiącu, to co
już zapłacił, to co zapłacił w zeszłym miesiącu i to co zapłaci w tym miesiącu.
Przejdźmy teraz do tworzenia logiki związanej z obliczaniem tych statystyk.