Implémentation "HATEOAS" de l'interface pour HTMX et update des URLs qui fonctionne ! #57
@ -1 +0,0 @@
|
|||||||
<div>Hello {{name}}!</div>
|
|
@ -1,41 +0,0 @@
|
|||||||
<nav
|
|
||||||
class="border-b border-gray-200 bg-white"
|
|
||||||
x-data="{ menuOpen: false }"
|
|
||||||
>
|
|
||||||
<div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
|
||||||
<div class="flex h-16 justify-between">
|
|
||||||
<div class="flex">
|
|
||||||
{% include "layout/nav/logo.html" %}
|
|
||||||
<div class="hidden sm:-my-px sm:ml-6 sm:flex sm:space-x-8">
|
|
||||||
{% include "layout/nav/desktop/menu-items.html" %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="hidden sm:ml-6 sm:flex sm:items-center">
|
|
||||||
{% include "layout/nav/desktop/notifications-button.html" %}
|
|
||||||
{% include "layout/nav/desktop/profile.html" %}
|
|
||||||
</div>
|
|
||||||
<div class="-mr-2 flex items-center sm:hidden">
|
|
||||||
{% include "layout/nav/mobile/menu-button.html" %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- Mobile menu, show/hide based on menu state. -->
|
|
||||||
<div
|
|
||||||
class="sm:hidden" id="mobile-menu"
|
|
||||||
x-show="menuOpen"
|
|
||||||
x-cloak
|
|
||||||
>
|
|
||||||
<div class="space-y-1 pb-3 pt-2">
|
|
||||||
{% include "layout/nav/mobile/menu-items.html" %}
|
|
||||||
</div>
|
|
||||||
<div class="border-t border-gray-200 pb-3 pt-4">
|
|
||||||
<div class="flex items-center px-4">
|
|
||||||
{% include "layout/nav/mobile/profile.html" %}
|
|
||||||
{% include "layout/nav/mobile/notifications-button.html" %}
|
|
||||||
</div>
|
|
||||||
<div class="mt-3 space-y-1">
|
|
||||||
{% include "layout/nav/mobile/profile-items.html" %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
@ -1,9 +0,0 @@
|
|||||||
<div
|
|
||||||
id="nav-menu-desktop"
|
|
||||||
hx-get="/nav/menu?mobile=false"
|
|
||||||
hx-target="this"
|
|
||||||
hx-trigger="load"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
>
|
|
||||||
{% include "skeletons/menu-items.html" %}
|
|
||||||
</div>
|
|
@ -1,6 +0,0 @@
|
|||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="relative rounded-full bg-white p-1 text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
|
|
||||||
>
|
|
||||||
{% include "layout/nav/notifications-icon.html" %}
|
|
||||||
</button>
|
|
@ -1,22 +0,0 @@
|
|||||||
<div
|
|
||||||
class="absolute right-0 z-10 mt-2 w-48 origin-top-right rounded-md bg-white py-1 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none"
|
|
||||||
role="menu"
|
|
||||||
id="profile-dropdown"
|
|
||||||
aria-orientation="vertical"
|
|
||||||
aria-labelledby="user-menu-button"
|
|
||||||
tabindex="-1"
|
|
||||||
x-show="profileOpen"
|
|
||||||
x-on:click.outside="profileOpen = false"
|
|
||||||
x-cloak
|
|
||||||
x-transition
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
id="profile-menu-desktop"
|
|
||||||
hx-get="/profile/menu?mobile=false"
|
|
||||||
hx-target="this"
|
|
||||||
hx-trigger="load"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
>
|
|
||||||
Chargement ...
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -1,27 +0,0 @@
|
|||||||
<!-- Profile dropdown -->
|
|
||||||
<div
|
|
||||||
class="relative ml-3"
|
|
||||||
x-data="{ profileOpen: false }"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="relative flex max-w-xs items-center rounded-full bg-white text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
|
|
||||||
id="user-menu-button"
|
|
||||||
aria-controls="profile-dropdown"
|
|
||||||
aria-expanded="false"
|
|
||||||
aria-haspopup="menu"
|
|
||||||
x-on:click="profileOpen = ! profileOpen"
|
|
||||||
>
|
|
||||||
<span class="absolute -inset-1.5"></span>
|
|
||||||
<span class="sr-only">Open user menu</span>
|
|
||||||
<img
|
|
||||||
class="h-8 w-8 rounded-full"
|
|
||||||
src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80"
|
|
||||||
alt=""
|
|
||||||
/>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% include "layout/nav/desktop/profile-dropdown.html" %}
|
|
||||||
</div>
|
|
@ -1,4 +0,0 @@
|
|||||||
<div class="flex flex-shrink-0 items-center">
|
|
||||||
<img class="block h-8 w-auto lg:hidden" src="https://tailwindui.com/img/logos/mark.svg?color=indigo&shade=600" alt="Your Company">
|
|
||||||
<img class="hidden h-8 w-auto lg:block" src="https://tailwindui.com/img/logos/mark.svg?color=indigo&shade=600" alt="Your Company">
|
|
||||||
</div>
|
|
@ -1,43 +0,0 @@
|
|||||||
<!-- Mobile menu button -->
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="relative inline-flex items-center justify-center rounded-md bg-white p-2 text-gray-400 hover:bg-gray-100 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
|
|
||||||
aria-controls="mobile-menu"
|
|
||||||
x-on:click="menuOpen = ! menuOpen"
|
|
||||||
x-bind:aria-expanded="menuOpen"
|
|
||||||
>
|
|
||||||
<span class="absolute -inset-0.5"></span>
|
|
||||||
<span class="sr-only">Open main menu</span>
|
|
||||||
<!-- Menu open: "hidden", Menu closed: "block" -->
|
|
||||||
<svg
|
|
||||||
class="h-6 w-6"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke-width="1.5"
|
|
||||||
stroke="currentColor"
|
|
||||||
x-bind:class="menuOpen ? 'hidden' : 'block'"
|
|
||||||
x-bind:aria-hidden="menuOpen"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
<!-- Menu open: "block", Menu closed: "hidden" -->
|
|
||||||
<svg
|
|
||||||
class="h-6 w-6"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke-width="1.5"
|
|
||||||
stroke="currentColor"
|
|
||||||
x-bind:class="menuOpen ? 'block' : 'hidden'"
|
|
||||||
x-bind:aria-hidden="! menuOpen"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
d="M6 18L18 6M6 6l12 12"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
@ -1,9 +0,0 @@
|
|||||||
<div
|
|
||||||
id="nav-menu-mobile"
|
|
||||||
hx-get="/nav/menu?mobile=true"
|
|
||||||
hx-target="this"
|
|
||||||
hx-trigger="load"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
>
|
|
||||||
Chargement ...
|
|
||||||
</div>
|
|
@ -1,6 +0,0 @@
|
|||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="relative ml-auto flex-shrink-0 rounded-full bg-white p-1 text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
|
|
||||||
>
|
|
||||||
{% include "layout/nav/notifications-icon.html" %}
|
|
||||||
</button>
|
|
@ -1,9 +0,0 @@
|
|||||||
<div
|
|
||||||
id="profile-menu-mobile"
|
|
||||||
hx-get="/profile/menu?mobile=true"
|
|
||||||
hx-target="this"
|
|
||||||
hx-trigger="load"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
>
|
|
||||||
Chargement ...
|
|
||||||
</div>
|
|
@ -1,11 +0,0 @@
|
|||||||
<div class="flex-shrink-0">
|
|
||||||
<img
|
|
||||||
class="h-10 w-10 rounded-full"
|
|
||||||
src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80"
|
|
||||||
alt=""
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="ml-3">
|
|
||||||
<div class="text-base font-medium text-gray-800">Tom Cook</div>
|
|
||||||
<div class="text-sm font-medium text-gray-500">tom@example.com</div>
|
|
||||||
</div>
|
|
@ -1,14 +0,0 @@
|
|||||||
{% for item in items %}
|
|
||||||
<a
|
|
||||||
href=""
|
|
||||||
hx-get="{{ item.href }}"
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#main-container"
|
|
||||||
hx-swap="innerHTML"
|
|
||||||
hx-push-url="true"
|
|
||||||
class="{{ Self::get_classes(self, item.current) }}"
|
|
||||||
aria-current="{% if item.current %}page{% endif %}"
|
|
||||||
>
|
|
||||||
{{ item.label }}
|
|
||||||
</a>
|
|
||||||
{% endfor %}
|
|
@ -1,16 +0,0 @@
|
|||||||
<span class="absolute -inset-1.5"></span>
|
|
||||||
<span class="sr-only">View notifications</span>
|
|
||||||
<svg
|
|
||||||
class="h-6 w-6"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke-width="1.5"
|
|
||||||
stroke="currentColor"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
d="M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
@ -1,11 +0,0 @@
|
|||||||
{% for item in items %}
|
|
||||||
<a
|
|
||||||
href="#{{ item.id }}"
|
|
||||||
class="{{ Self::get_classes(self, item.current) }}"
|
|
||||||
role="menuitem"
|
|
||||||
tabindex="-1"
|
|
||||||
id="{{ item.id }}"
|
|
||||||
>
|
|
||||||
{{ item.label }}
|
|
||||||
</a>
|
|
||||||
{% endfor %}
|
|
@ -1,52 +0,0 @@
|
|||||||
<h3 id="page-title" hx-swap-oob="textContent">
|
|
||||||
CPS
|
|
||||||
</h3>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed border-gray-300 rounded-lg dark:border-gray-600 h-32 md:h-64"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-32 md:h-64"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-32 md:h-64"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-32 md:h-64"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-96 mb-4"
|
|
||||||
></div>
|
|
||||||
<div class="grid grid-cols-2 gap-4 mb-4">
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-96 mb-4"
|
|
||||||
></div>
|
|
||||||
<div class="grid grid-cols-2 gap-4">
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
@ -1,52 +0,0 @@
|
|||||||
<h3 id="page-title" hx-swap-oob="textContent">
|
|
||||||
Accueil
|
|
||||||
</h3>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed border-gray-300 rounded-lg dark:border-gray-600 h-32 md:h-64"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-32 md:h-64"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-32 md:h-64"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-32 md:h-64"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-96 mb-4"
|
|
||||||
></div>
|
|
||||||
<div class="grid grid-cols-2 gap-4 mb-4">
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-96 mb-4"
|
|
||||||
></div>
|
|
||||||
<div class="grid grid-cols-2 gap-4">
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
@ -1,9 +0,0 @@
|
|||||||
use askama_axum::Template;
|
|
||||||
|
|
||||||
#[derive(Template)]
|
|
||||||
#[template(path = "pages/home.html")]
|
|
||||||
pub struct HomeTemplate;
|
|
||||||
|
|
||||||
pub async fn home() -> HomeTemplate {
|
|
||||||
HomeTemplate
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
use askama_axum::Template;
|
|
||||||
use axum::{routing, Router};
|
|
||||||
|
|
||||||
#[derive(Template)]
|
|
||||||
#[template(path = "hello.html")]
|
|
||||||
struct HelloTemplate {
|
|
||||||
pub name: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn hello() -> HelloTemplate {
|
|
||||||
HelloTemplate {
|
|
||||||
name: "Theo".to_string(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_routes() -> Router {
|
|
||||||
Router::new().route("/", routing::get(hello))
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
use axum::Router;
|
|
||||||
|
|
||||||
mod hello;
|
|
||||||
mod nav;
|
|
||||||
mod profile;
|
|
||||||
|
|
||||||
pub fn get_routes() -> Router {
|
|
||||||
Router::new()
|
|
||||||
.nest("/hello", hello::get_routes())
|
|
||||||
.nest("/nav", nav::get_routes())
|
|
||||||
.nest("/profile", profile::get_routes())
|
|
||||||
}
|
|
@ -1,60 +0,0 @@
|
|||||||
use askama_axum::Template;
|
|
||||||
use axum::{extract::Query, routing, Router};
|
|
||||||
use serde::Deserialize;
|
|
||||||
|
|
||||||
struct MenuItem {
|
|
||||||
label: String,
|
|
||||||
href: String,
|
|
||||||
current: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
|
||||||
struct MenuParameters {
|
|
||||||
mobile: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Template)]
|
|
||||||
#[template(path = "layout/nav/nav-menu-items.html")]
|
|
||||||
struct MenuTemplate {
|
|
||||||
mobile: bool,
|
|
||||||
items: Vec<MenuItem>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MenuTemplate {
|
|
||||||
fn get_classes(&self, is_current_item: &bool) -> String {
|
|
||||||
let common_classes = match self.mobile {
|
|
||||||
true => "block border-l-4 py-2 pl-3 pr-4 text-base font-medium".to_string(),
|
|
||||||
false => {
|
|
||||||
"inline-flex items-center border-b-2 px-1 pt-1 text-sm font-medium".to_string()
|
|
||||||
}
|
|
||||||
};
|
|
||||||
match (self.mobile, is_current_item) {
|
|
||||||
(true, true) => common_classes + " border-indigo-500 bg-indigo-50 text-indigo-700",
|
|
||||||
(true, false) => common_classes + " border-transparent text-gray-600 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-800",
|
|
||||||
(false, true) => common_classes + " border-indigo-500 text-gray-900",
|
|
||||||
(false, false) => common_classes + " border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn menu(Query(params): Query<MenuParameters>) -> MenuTemplate {
|
|
||||||
MenuTemplate {
|
|
||||||
mobile: params.mobile,
|
|
||||||
items: vec![
|
|
||||||
MenuItem {
|
|
||||||
label: "Accueil".to_string(),
|
|
||||||
href: "/pages/home".to_string(),
|
|
||||||
current: true,
|
|
||||||
},
|
|
||||||
MenuItem {
|
|
||||||
label: "CPS".to_string(),
|
|
||||||
href: "/pages/cps".to_string(),
|
|
||||||
current: false,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_routes() -> Router {
|
|
||||||
Router::new().route("/menu", routing::get(menu))
|
|
||||||
}
|
|
@ -1,63 +0,0 @@
|
|||||||
use askama_axum::Template;
|
|
||||||
use axum::{extract::Query, routing, Router};
|
|
||||||
use serde::Deserialize;
|
|
||||||
|
|
||||||
struct MenuItem {
|
|
||||||
label: String,
|
|
||||||
id: String,
|
|
||||||
current: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
|
||||||
struct MenuParameters {
|
|
||||||
mobile: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Template)]
|
|
||||||
#[template(path = "layout/nav/profile-menu-items.html")]
|
|
||||||
struct MenuTemplate {
|
|
||||||
mobile: bool,
|
|
||||||
items: Vec<MenuItem>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MenuTemplate {
|
|
||||||
fn get_classes(&self, is_current_item: &bool) -> String {
|
|
||||||
let common_classes = match self.mobile {
|
|
||||||
true => "block px-4 py-2 text-base font-medium text-gray-500 hover:bg-gray-100 hover:text-gray-800".to_string(),
|
|
||||||
false => "block px-4 py-2 text-sm text-gray-700".to_string(),
|
|
||||||
};
|
|
||||||
match (self.mobile, is_current_item) {
|
|
||||||
(true, true) => common_classes + "", // ???
|
|
||||||
(true, false) => common_classes + "",
|
|
||||||
(false, true) => common_classes + " bg-gray-100",
|
|
||||||
(false, false) => common_classes + "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn menu(Query(params): Query<MenuParameters>) -> MenuTemplate {
|
|
||||||
MenuTemplate {
|
|
||||||
mobile: params.mobile,
|
|
||||||
items: vec![
|
|
||||||
MenuItem {
|
|
||||||
label: "Votre profil".to_string(),
|
|
||||||
id: "profile".to_string(),
|
|
||||||
current: false,
|
|
||||||
},
|
|
||||||
MenuItem {
|
|
||||||
label: "Paramètres".to_string(),
|
|
||||||
id: "settings".to_string(),
|
|
||||||
current: false,
|
|
||||||
},
|
|
||||||
MenuItem {
|
|
||||||
label: "Déconnexion".to_string(),
|
|
||||||
id: "logout".to_string(),
|
|
||||||
current: false,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_routes() -> Router {
|
|
||||||
Router::new().route("/menu", routing::get(menu))
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user