Separate navbar and footer components for reusability
This commit is contained in:
@ -17,7 +17,7 @@ func init() {
|
|||||||
|
|
||||||
func GET(w http.ResponseWriter, r *http.Request) {
|
func GET(w http.ResponseWriter, r *http.Request) {
|
||||||
userSession := r.Context().Value("user").(types.User)
|
userSession := r.Context().Value("user").(types.User)
|
||||||
component := userView.Main("User Page", userSession.Email, userSession.Username, session.GetSessions(userSession.Email))
|
component := userView.Main("User Page", userSession, session.GetSessions(userSession.Email))
|
||||||
err := component.Render(r.Context(), w)
|
err := component.Render(r.Context(), w)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
@ -8,64 +8,7 @@ import (
|
|||||||
templ content(title string, user types.User) {
|
templ content(title string, user types.User) {
|
||||||
@layout.Base(title){
|
@layout.Base(title){
|
||||||
<div class="bg-white">
|
<div class="bg-white">
|
||||||
<header class="flex items-center justify-between border-b border-gray-200 bg-white px-6 py-4">
|
@layout.Navbar(user)
|
||||||
<div class="flex items-center gap-4">
|
|
||||||
<a class="flex items-center gap-2" href="#">
|
|
||||||
<image src="public/brand.svg" width="48" height="48"/>
|
|
||||||
<span class="text-lg font-semibold">Filekeeper</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="flex space-x-4">
|
|
||||||
if user.Authenticated {
|
|
||||||
<div class="flex items-center gap-4">
|
|
||||||
<div
|
|
||||||
class="relative inline-flex items-center justify-center w-10 h-10 overflow-hidden bg-gray-100 rounded-full">
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"
|
|
||||||
width="256" height="256" viewBox="0 0 256 256" xml:space="preserve">
|
|
||||||
<defs>
|
|
||||||
</defs>
|
|
||||||
<g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;"
|
|
||||||
transform="translate(1.4065934065934016 1.4065934065934016) scale(2.81 2.81)">
|
|
||||||
<circle cx="45" cy="45" r="44"
|
|
||||||
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(178,178,178); fill-rule: nonzero; opacity: 1;"
|
|
||||||
transform=" matrix(1 0 0 1 0 0) " />
|
|
||||||
<circle cx="44.997" cy="39.727000000000004" r="19.817"
|
|
||||||
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(109,109,109); fill-rule: nonzero; opacity: 1;"
|
|
||||||
transform=" matrix(1 0 0 1 0 0) " />
|
|
||||||
<path
|
|
||||||
d="M 11.266 73.25 C 19.337 63.622 31.454 57.5 45 57.5 c 13.546 0 25.663 6.122 33.734 15.75 l 0 0 C 70.663 82.878 58.547 89 45 89 C 31.454 89 19.337 82.878 11.266 73.25 L 11.266 73.25 z"
|
|
||||||
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(109,109,109); fill-rule: nonzero; opacity: 1;"
|
|
||||||
transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
|
||||||
<path
|
|
||||||
d="M 45 90 C 20.187 90 0 69.813 0 45 C 0 20.187 20.187 0 45 0 c 24.813 0 45 20.187 45 45 C 90 69.813 69.813 90 45 90 z M 45 2 C 21.29 2 2 21.29 2 45 c 0 23.71 19.29 43 43 43 c 23.71 0 43 -19.29 43 -43 C 88 21.29 68.71 2 45 2 z"
|
|
||||||
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(43,43,43); fill-rule: nonzero; opacity: 1;"
|
|
||||||
transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
|
||||||
<path
|
|
||||||
d="M 78.734 73.25 c -6.576 -7.844 -15.837 -13.358 -26.368 -15.133 c 7.294 -2.925 12.451 -10.048 12.451 -18.387 c 0 -10.945 -8.873 -19.817 -19.817 -19.817 S 25.183 28.785 25.183 39.73 c 0 8.339 5.157 15.462 12.451 18.387 c -10.531 1.775 -19.793 7.29 -26.368 15.133 v 0 C 19.337 82.878 31.454 89 45 89 C 58.547 89 70.663 82.878 78.734 73.25 L 78.734 73.25 z"
|
|
||||||
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(109,109,109); fill-rule: nonzero; opacity: 1;"
|
|
||||||
transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
|
||||||
<path
|
|
||||||
d="M 45 90 c -13.344 0 -25.919 -5.871 -34.5 -16.107 L 9.961 73.25 l 0.539 -0.643 c 6.239 -7.441 14.692 -12.654 24.046 -14.883 c -6.379 -3.687 -10.363 -10.467 -10.363 -17.995 c 0 -11.479 9.339 -20.817 20.817 -20.817 s 20.817 9.339 20.817 20.817 c 0 7.528 -3.983 14.309 -10.362 17.995 c 9.354 2.229 17.808 7.441 24.046 14.883 l 0.538 0.643 l -0.538 0.643 C 70.919 84.129 58.344 90 45 90 z M 12.581 73.25 C 20.764 82.635 32.531 88 45 88 c 12.47 0 24.236 -5.365 32.419 -14.75 C 70.887 65.761 61.964 60.748 52.2 59.104 l -3.506 -0.591 l 3.3 -1.323 c 7.183 -2.882 11.823 -9.734 11.823 -17.46 c 0 -10.376 -8.441 -18.817 -18.817 -18.817 s -18.817 8.441 -18.817 18.817 c 0 7.726 4.641 14.578 11.823 17.46 l 3.3 1.323 L 37.8 59.104 C 28.037 60.748 19.114 65.76 12.581 73.25 z"
|
|
||||||
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(43,43,43); fill-rule: nonzero; opacity: 1;"
|
|
||||||
transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<div class="font-medium hidden sm:block">
|
|
||||||
<div>{ user.Username }</div>
|
|
||||||
<div class="text-sm text-gray-500">{ user.Email }</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
} else {
|
|
||||||
<a href="/signup" class="text-gray-600 hover:text-gray-800">
|
|
||||||
Sign up
|
|
||||||
</a>
|
|
||||||
<a href="/signin" class="text-gray-600 hover:text-gray-800">
|
|
||||||
Sign in
|
|
||||||
</a>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<main class="container mx-auto px-6 py-16 text-center">
|
<main class="container mx-auto px-6 py-16 text-center">
|
||||||
<h1 class="text-5xl font-bold text-gray-900 mb-2">Your files, always within reach.</h1>
|
<h1 class="text-5xl font-bold text-gray-900 mb-2">Your files, always within reach.</h1>
|
||||||
<p class="text-gray-700 text-lg mb-8">
|
<p class="text-gray-700 text-lg mb-8">
|
||||||
@ -168,32 +111,7 @@ templ content(title string, user types.User) {
|
|||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="bg-white p-6 md:p-8 w-full relative bottom-0 border-t border-gray-200 w-full py-8">
|
@layout.Footer()
|
||||||
<div class="container mx-auto flex flex-col items-center justify-between gap-6 md:flex-row">
|
|
||||||
<div class="flex items-center gap-2">
|
|
||||||
<image src="public/brand.svg" width="48" height="48"/>
|
|
||||||
<span class="text-lg font-semibold">Filekeeper</span>
|
|
||||||
</div>
|
|
||||||
<nav class="flex flex-wrap items-center justify-center gap-4 text-sm font-medium">
|
|
||||||
<a class="hover:underline" href="#">
|
|
||||||
Pricing
|
|
||||||
</a>
|
|
||||||
<a class="hover:underline" href="#">
|
|
||||||
About
|
|
||||||
</a>
|
|
||||||
<a class="hover:underline" href="#">
|
|
||||||
Contact
|
|
||||||
</a>
|
|
||||||
<a class="hover:underline" href="#">
|
|
||||||
Terms
|
|
||||||
</a>
|
|
||||||
<a class="hover:underline" href="#">
|
|
||||||
Privacy
|
|
||||||
</a>
|
|
||||||
</nav>
|
|
||||||
<p class="text-sm text-gray-500">© 2024 Filekeeper. All rights reserved.</p>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package layout
|
package layout
|
||||||
|
|
||||||
|
import "github.com/fossyy/filekeeper/types"
|
||||||
|
|
||||||
templ Base(title string){
|
templ Base(title string){
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
@ -13,4 +15,94 @@ templ Base(title string){
|
|||||||
{ children... }
|
{ children... }
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
}
|
||||||
|
|
||||||
|
templ Navbar(user types.User) {
|
||||||
|
<header class="flex items-center justify-between border-b border-gray-200 bg-white px-6 py-4">
|
||||||
|
<div class="flex items-center gap-4">
|
||||||
|
<a class="flex items-center gap-2" href="#">
|
||||||
|
<image src="public/brand.svg" width="48" height="48" />
|
||||||
|
<span class="text-lg font-semibold">Filekeeper</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="flex space-x-4">
|
||||||
|
if user.Authenticated {
|
||||||
|
<div class="flex items-center gap-4">
|
||||||
|
<div
|
||||||
|
class="relative inline-flex items-center justify-center w-10 h-10 overflow-hidden bg-gray-100 rounded-full">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"
|
||||||
|
width="256" height="256" viewBox="0 0 256 256" xml:space="preserve">
|
||||||
|
<defs>
|
||||||
|
</defs>
|
||||||
|
<g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;"
|
||||||
|
transform="translate(1.4065934065934016 1.4065934065934016) scale(2.81 2.81)">
|
||||||
|
<circle cx="45" cy="45" r="44"
|
||||||
|
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(178,178,178); fill-rule: nonzero; opacity: 1;"
|
||||||
|
transform=" matrix(1 0 0 1 0 0) " />
|
||||||
|
<circle cx="44.997" cy="39.727000000000004" r="19.817"
|
||||||
|
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(109,109,109); fill-rule: nonzero; opacity: 1;"
|
||||||
|
transform=" matrix(1 0 0 1 0 0) " />
|
||||||
|
<path
|
||||||
|
d="M 11.266 73.25 C 19.337 63.622 31.454 57.5 45 57.5 c 13.546 0 25.663 6.122 33.734 15.75 l 0 0 C 70.663 82.878 58.547 89 45 89 C 31.454 89 19.337 82.878 11.266 73.25 L 11.266 73.25 z"
|
||||||
|
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(109,109,109); fill-rule: nonzero; opacity: 1;"
|
||||||
|
transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
||||||
|
<path
|
||||||
|
d="M 45 90 C 20.187 90 0 69.813 0 45 C 0 20.187 20.187 0 45 0 c 24.813 0 45 20.187 45 45 C 90 69.813 69.813 90 45 90 z M 45 2 C 21.29 2 2 21.29 2 45 c 0 23.71 19.29 43 43 43 c 23.71 0 43 -19.29 43 -43 C 88 21.29 68.71 2 45 2 z"
|
||||||
|
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(43,43,43); fill-rule: nonzero; opacity: 1;"
|
||||||
|
transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
||||||
|
<path
|
||||||
|
d="M 78.734 73.25 c -6.576 -7.844 -15.837 -13.358 -26.368 -15.133 c 7.294 -2.925 12.451 -10.048 12.451 -18.387 c 0 -10.945 -8.873 -19.817 -19.817 -19.817 S 25.183 28.785 25.183 39.73 c 0 8.339 5.157 15.462 12.451 18.387 c -10.531 1.775 -19.793 7.29 -26.368 15.133 v 0 C 19.337 82.878 31.454 89 45 89 C 58.547 89 70.663 82.878 78.734 73.25 L 78.734 73.25 z"
|
||||||
|
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(109,109,109); fill-rule: nonzero; opacity: 1;"
|
||||||
|
transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
||||||
|
<path
|
||||||
|
d="M 45 90 c -13.344 0 -25.919 -5.871 -34.5 -16.107 L 9.961 73.25 l 0.539 -0.643 c 6.239 -7.441 14.692 -12.654 24.046 -14.883 c -6.379 -3.687 -10.363 -10.467 -10.363 -17.995 c 0 -11.479 9.339 -20.817 20.817 -20.817 s 20.817 9.339 20.817 20.817 c 0 7.528 -3.983 14.309 -10.362 17.995 c 9.354 2.229 17.808 7.441 24.046 14.883 l 0.538 0.643 l -0.538 0.643 C 70.919 84.129 58.344 90 45 90 z M 12.581 73.25 C 20.764 82.635 32.531 88 45 88 c 12.47 0 24.236 -5.365 32.419 -14.75 C 70.887 65.761 61.964 60.748 52.2 59.104 l -3.506 -0.591 l 3.3 -1.323 c 7.183 -2.882 11.823 -9.734 11.823 -17.46 c 0 -10.376 -8.441 -18.817 -18.817 -18.817 s -18.817 8.441 -18.817 18.817 c 0 7.726 4.641 14.578 11.823 17.46 l 3.3 1.323 L 37.8 59.104 C 28.037 60.748 19.114 65.76 12.581 73.25 z"
|
||||||
|
style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(43,43,43); fill-rule: nonzero; opacity: 1;"
|
||||||
|
transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="font-medium hidden sm:block">
|
||||||
|
<div>{ user.Username }</div>
|
||||||
|
<div class="text-sm text-gray-500">{ user.Email }</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
} else {
|
||||||
|
<a href="/signup" class="text-gray-600 hover:text-gray-800">
|
||||||
|
Sign up
|
||||||
|
</a>
|
||||||
|
<a href="/signin" class="text-gray-600 hover:text-gray-800">
|
||||||
|
Sign in
|
||||||
|
</a>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
}
|
||||||
|
|
||||||
|
templ Footer() {
|
||||||
|
<footer class="bg-white p-6 md:p-8 w-full relative bottom-0 border-t border-gray-200 w-full py-8">
|
||||||
|
<div class="container mx-auto flex flex-col items-center justify-between gap-6 md:flex-row">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<image src="public/brand.svg" width="48" height="48"/>
|
||||||
|
<span class="text-lg font-semibold">Filekeeper</span>
|
||||||
|
</div>
|
||||||
|
<nav class="flex flex-wrap items-center justify-center gap-4 text-sm font-medium">
|
||||||
|
<a class="hover:underline" href="#">
|
||||||
|
Pricing
|
||||||
|
</a>
|
||||||
|
<a class="hover:underline" href="#">
|
||||||
|
About
|
||||||
|
</a>
|
||||||
|
<a class="hover:underline" href="#">
|
||||||
|
Contact
|
||||||
|
</a>
|
||||||
|
<a class="hover:underline" href="#">
|
||||||
|
Terms
|
||||||
|
</a>
|
||||||
|
<a class="hover:underline" href="#">
|
||||||
|
Privacy
|
||||||
|
</a>
|
||||||
|
</nav>
|
||||||
|
<p class="text-sm text-gray-500">© 2024 Filekeeper. All rights reserved.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
}
|
}
|
@ -1,12 +1,14 @@
|
|||||||
package userView
|
package userView
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/fossyy/filekeeper/types"
|
||||||
"github.com/fossyy/filekeeper/view/layout"
|
"github.com/fossyy/filekeeper/view/layout"
|
||||||
"github.com/fossyy/filekeeper/session"
|
"github.com/fossyy/filekeeper/session"
|
||||||
)
|
)
|
||||||
|
|
||||||
templ content(email string, username string, title string, ListSession []*session.SessionInfo) {
|
templ content(title string, user types.User, ListSession []*session.SessionInfo) {
|
||||||
@layout.Base(title){
|
@layout.Base(title){
|
||||||
|
@layout.Navbar(user)
|
||||||
<main class="container mx-auto px-4 py-12 md:px-6 md:py-16 lg:py-10">
|
<main class="container mx-auto px-4 py-12 md:px-6 md:py-16 lg:py-10">
|
||||||
<div class="grid gap-10 lg:grid-cols-[1fr_300px]">
|
<div class="grid gap-10 lg:grid-cols-[1fr_300px]">
|
||||||
<div class="space-y-8">
|
<div class="space-y-8">
|
||||||
@ -21,7 +23,7 @@ templ content(email string, username string, title string, ListSession []*sessio
|
|||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
class="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
|
class="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
|
||||||
id="name" placeholder="Enter your name" value={username} disabled />
|
id="name" placeholder="Enter your name" value={user.Username} disabled />
|
||||||
</div>
|
</div>
|
||||||
<div class="grid gap-2">
|
<div class="grid gap-2">
|
||||||
<label
|
<label
|
||||||
@ -31,7 +33,7 @@ templ content(email string, username string, title string, ListSession []*sessio
|
|||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
class="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
|
class="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
|
||||||
type="email" id="email" placeholder="Enter your email" value={email} disabled />
|
type="email" id="email" placeholder="Enter your email" value={user.Email} disabled />
|
||||||
</div>
|
</div>
|
||||||
<div class="grid gap-2">
|
<div class="grid gap-2">
|
||||||
<label
|
<label
|
||||||
@ -177,7 +179,8 @@ templ content(email string, username string, title string, ListSession []*sessio
|
|||||||
</section>
|
</section>
|
||||||
<div class="grid gap-1">
|
<div class="grid gap-1">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<button
|
<a
|
||||||
|
href="/logout"
|
||||||
class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2">
|
class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
|
||||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||||
@ -187,7 +190,7 @@ templ content(email string, username string, title string, ListSession []*sessio
|
|||||||
<line x1="21" x2="9" y1="12" y2="12"></line>
|
<line x1="21" x2="9" y1="12" y2="12"></line>
|
||||||
</svg>
|
</svg>
|
||||||
Log Out
|
Log Out
|
||||||
</button>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-sm text-gray-500">
|
<p class="text-sm text-gray-500">
|
||||||
Click to log out or terminate the current session.
|
Click to log out or terminate the current session.
|
||||||
@ -257,9 +260,10 @@ templ content(email string, username string, title string, ListSession []*sessio
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
@layout.Footer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
templ Main(title string, email string, username string, ListSession []*session.SessionInfo) {
|
templ Main(title string, user types.User, ListSession []*session.SessionInfo) {
|
||||||
@content(email, username, title, ListSession)
|
@content(title, user, ListSession)
|
||||||
}
|
}
|
Reference in New Issue
Block a user