Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf367f18

Browse files
committed
updates for orgs
1 parentdb92b1c commitf367f18

File tree

8 files changed

+134
-35
lines changed

8 files changed

+134
-35
lines changed

‎pgml-dashboard/src/components/breadcrumbs/mod.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
1+
usecrate::components::dropdown::{Dropdown,DropdownItems};
12
usecrate::components::NavLink;
3+
usecrate::components::StaticNavLink;
24
use pgml_components::component;
35
use sailfish::TemplateOnce;
46

5-
#[derive(TemplateOnce)]
7+
#[derive(TemplateOnce,Clone,Default)]
68
#[template(path ="breadcrumbs/template.html")]
79
pubstructBreadcrumbs<'a>{
8-
publinks:Vec<NavLink<'a>>,
10+
puborganizations:Vec<StaticNavLink>,
11+
pubdatabases:Vec<StaticNavLink>,
12+
pubpath:Vec<NavLink<'a>>,
913
}
1014

1115
impl<'a>Breadcrumbs<'a>{
12-
pubfnrender(links:Vec<NavLink<'a>>) ->String{
13-
Breadcrumbs{ links}.render_once().unwrap()
16+
pubfnnew(path:Vec<NavLink<'a>>,organizations:Vec<StaticNavLink>,databases:Vec<StaticNavLink>) ->Self{
17+
Breadcrumbs{
18+
path,
19+
databases,
20+
organizations,
21+
}
1422
}
1523
}
1624

‎pgml-dashboard/src/components/breadcrumbs/template.html

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<%
22
use crate::utils::config;
33
use crate::utils::urls;
4+
use crate::components::dropdown::Dropdown;
45

56
let home_uri = if config::standalone_dashboard() {
67
urls::deployment_notebooks()
@@ -12,18 +13,30 @@
1213
<nav>
1314
<navaria-label="breadcrumb z-1">
1415
<olclass="breadcrumb">
15-
<liclass="breadcrumb-item body-regular-text <% iflinks.is_empty() {%>active<% } %>">
16+
<!-- <lix x-first x-last">path.is_empty() {%>active<% } %>">
1617
<a class="d-flex gap-2 align-items-center" href="<%- home_uri %>">
1718
<span class="icon-owl icomoon"></span>
1819
Home
1920
</a>
21+
</li> -->
22+
23+
<% if !organizations.is_empty() {%>
24+
<li>
25+
<%+ Dropdown::nav(organizations) %>
2026
</li>
27+
<% } %>
28+
29+
<% if !databases.is_empty() {%>
30+
<li>
31+
<%+ Dropdown::nav(databases) %>
32+
</li>
33+
<% } %>
2134

22-
<% if !links.is_empty() {%>
35+
<% if !path.is_empty() {%>
2336
<divclass="vr my-1 mx-2"></div>
2437
<% } %>
2538

26-
<% for link inlinks {
39+
<% for link inpath {
2740
let active = if link.active {
2841
"active"
2942
} else {

‎pgml-dashboard/src/components/navigation/left_nav/web_app/mod.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
1-
usecrate::components::StaticNav;
1+
usecrate::components::{StaticNav,StaticNavLink};
22
use pgml_components::component;
33
use sailfish::TemplateOnce;
44

5+
#[derive(Default,Debug,Clone)]
6+
pubstructMenu{
7+
pubback:Option<StaticNavLink>,
8+
pubitems:StaticNav,
9+
}
10+
511
#[derive(TemplateOnce,Default)]
612
#[template(path ="navigation/left_nav/web_app/template.html")]
713
pubstructWebApp{
8-
pubupper_nav:StaticNav,
914
pubid:Option<String>,
15+
pubmenu:Menu,
1016
}
1117

1218
implWebApp{
13-
pubfnnew(upper_nav:StaticNav) ->WebApp{
14-
WebApp{upper_nav,id:None}
19+
pubfnnew(menu:Menu) ->WebApp{
20+
WebApp{id:None, menu}
1521
}
1622

1723
pubfnid(mutself,id:&str) ->WebApp{

‎pgml-dashboard/src/components/navigation/left_nav/web_app/template.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@
99
<divclass="d-flex flex-column justify-content-between h-100 menu-container leftnav-collapse-affect collapsed">
1010
<divclass="d-flex flex-column">
1111
<spanclass="leftnav-collapse collapse"data-extend-bs-collapse-target="stateReference"data-navigation-left-nav-web-app-target="stateReference"></span>
12-
<%+ LeftNavMenu { nav: upper_nav } %>
12+
<% if let Some(back_link) = menu.back {%>
13+
<aclass="btn btn-tertiary justify-content-start gap-3"style="height: 2rem;"href="<%- back_link.href %>">
14+
<spanclass="material-symbols-outlined">arrow_back</span>
15+
<spanclass="collapse collapse-horizontal leftnav-collapse text-nowrap overflow-hidden"><%- back_link.name %></span></a>
16+
<% } %>
17+
<%+ LeftNavMenu { nav: menu.items } %>
1318
</div>
1419
</div>
1520
</nav>

‎pgml-dashboard/src/guards.rs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,31 @@ impl Cluster {
4646
context:Context{
4747
user: models::User::default(),
4848
cluster: models::Cluster::default(),
49-
dropdown_nav:StaticNav{
49+
deployment_dropdown:StaticNav{
5050
links:vec![StaticNavLink::new("Local".to_string(),"/dashboard".to_string()).active(true)],
5151
},
52-
product_left_nav:StaticNav{
53-
links:vec![
54-
StaticNavLink::new("Notebooks".to_string(), urls::deployment_notebooks())
55-
.icon("format_list_bulleted_add"),
56-
StaticNavLink::new("Projects".to_string(), urls::deployment_projects()).icon("library_add"),
57-
StaticNavLink::new("Models".to_string(), urls::deployment_models()).icon("grid_view"),
58-
StaticNavLink::new("Snapshots".to_string(), urls::deployment_snapshots())
59-
.icon("filter_center_focus"),
60-
StaticNavLink::new("Upload data".to_string(), urls::deployment_uploader()).icon("upload"),
61-
],
52+
organization_dropdown:StaticNav{
53+
links:vec![StaticNavLink::new(
54+
"Organization".to_string(),
55+
"/organizations".to_string(),
56+
)],
6257
},
6358
marketing_footer:MarketingFooter::new().render_once().unwrap(),
6459
head_items:None,
60+
product_left_nav:crate::components::navigation::left_nav::web_app::Menu{
61+
back:None,
62+
items:StaticNav{
63+
links:vec![
64+
StaticNavLink::new("Notebooks".to_string(), urls::deployment_notebooks())
65+
.icon("format_list_bulleted_add"),
66+
StaticNavLink::new("Projects".to_string(), urls::deployment_projects()).icon("library_add"),
67+
StaticNavLink::new("Models".to_string(), urls::deployment_models()).icon("grid_view"),
68+
StaticNavLink::new("Snapshots".to_string(), urls::deployment_snapshots())
69+
.icon("filter_center_focus"),
70+
StaticNavLink::new("Upload data".to_string(), urls::deployment_uploader()).icon("upload"),
71+
],
72+
},
73+
},
6574
},
6675
notifications:None,
6776
}

‎pgml-dashboard/src/lib.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,11 @@ pub struct ClustersSettings {
4949
pubstructContext{
5050
pubuser: models::User,
5151
pubcluster: models::Cluster,
52-
pubdropdown_nav:StaticNav,
53-
pubproduct_left_nav:StaticNav,
52+
puborganization_dropdown:StaticNav,
53+
pubdeployment_dropdown:StaticNav,
5454
pubmarketing_footer:String,
5555
pubhead_items:Option<String>,
56+
pubproduct_left_nav:crate::components::navigation::left_nav::web_app::Menu,
5657
}
5758

5859
#[derive(Debug,Clone,Default)]
@@ -646,7 +647,8 @@ mod test {
646647
context:Context{
647648
user: models::User::default(),
648649
cluster: models::Cluster::default(),
649-
dropdown_nav:StaticNav{links:vec![]},
650+
deployment_dropdown:StaticNav{links:vec![]},
651+
organization_dropdown:StaticNav{links:vec![]},
650652
product_left_nav:StaticNav{links:vec![]},
651653
marketing_footer:MarketingFooter::new().render_once().unwrap(),
652654
head_items:None,
@@ -719,7 +721,8 @@ mod test {
719721
context:Context{
720722
user: models::User::default(),
721723
cluster: models::Cluster::default(),
722-
dropdown_nav:StaticNav{links:vec![]},
724+
deployment_dropdown:StaticNav{links:vec![]},
725+
organization_dropdown:StaticNav{links:vec![]},
723726
product_left_nav:StaticNav{links:vec![]},
724727
marketing_footer:MarketingFooter::new().render_once().unwrap(),
725728
head_items:None,

‎pgml-dashboard/src/templates/mod.rs

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use sqlx::postgres::types::PgMoney;
1212
use sqlx::types::time::PrimitiveDateTime;
1313
use sqlx::{Column,Executor,PgPool,Row,Statement,TypeInfo,ValueRef};
1414

15+
usecrate::components::breadcrumbs::Breadcrumbs;
1516
usecrate::models;
1617
usecrate::utils::tabs;
1718

@@ -116,10 +117,10 @@ impl From<Layout> for String {
116117
#[template(path ="layout/web_app_base.html")]
117118
pubstructWebAppBase<'a>{
118119
pubcontent:Option<String>,
119-
pubbreadcrumbs:Vec<NavLink<'a>>,
120+
pubbreadcrumbs:Breadcrumbs<'a>,
120121
pubhead:Head,
121122
pubdropdown_nav:StaticNav,
122-
pubproduct_left_nav:StaticNav,
123+
pubproduct_left_nav:crate::components::navigation::left_nav::web_app::Menu,
123124
pubbody_components:Vec<Component>,
124125
pubcluster:Cluster,
125126
pubproduct_banners_high:Vec<ProductBanner>,
@@ -145,7 +146,7 @@ impl<'a> WebAppBase<'a> {
145146
WebAppBase{
146147
head,
147148
cluster,
148-
dropdown_nav: context.context.dropdown_nav.clone(),
149+
dropdown_nav: context.context.deployment_dropdown.clone(),
149150
product_left_nav: context.context.product_left_nav.clone(),
150151
product_banners_high: all_product_high_level,
151152
product_banner_medium:ProductBanner::from_notification(Notification::next_product_of_level(
@@ -161,18 +162,22 @@ impl<'a> WebAppBase<'a> {
161162
}
162163

163164
pubfnbreadcrumbs(&mutself,breadcrumbs:Vec<NavLink<'a>>) ->&mutSelf{
164-
self.breadcrumbs = breadcrumbs.to_owned();
165+
self.breadcrumbs.path = breadcrumbs.clone();
165166
self
166167
}
167168

168169
pubfndisable_upper_nav(&mutself) ->&mutSelf{
169170
let links:Vec<StaticNavLink> =self
170171
.product_left_nav
172+
.items
171173
.links
172174
.iter()
173175
.map(|item| item.to_owned().disabled(true))
174176
.collect();
175-
self.product_left_nav =StaticNav{ links};
177+
self.product_left_nav =crate::components::navigation::left_nav::web_app::Menu{
178+
back:self.product_left_nav.back.clone(),
179+
items:StaticNav{ links},
180+
};
176181
self
177182
}
178183

@@ -186,6 +191,56 @@ impl<'a> WebAppBase<'a> {
186191
self
187192
}
188193

194+
pubfnbreadcrumbs_from_uri(
195+
&mutself,
196+
org_dropdown:Vec<StaticNavLink>,
197+
database_dropdown:Vec<StaticNavLink>,
198+
uri:&str,
199+
) ->&mutSelf{
200+
let uri =if uri.starts_with("/"){
201+
uri.chars().skip(1).collect::<String>()
202+
}else{
203+
uri.to_string()
204+
};
205+
206+
let start_index =match(org_dropdown.is_empty(), database_dropdown.is_empty()){
207+
(true,true) =>0,
208+
(false,true) =>1,
209+
_ =>2,
210+
};
211+
212+
letmut uris = uri
213+
.split("/")
214+
.skip(start_index)
215+
.enumerate()
216+
.map(|(i, part)|{
217+
let path = uri
218+
.split("/")
219+
.into_iter()
220+
.take(1 + i + start_index)
221+
.collect::<Vec<&str>>()
222+
.join("/");
223+
letmut out ="/".to_owned();
224+
out.push_str(&path);
225+
226+
NavLink::new(part,&out)
227+
})
228+
.collect::<Vec<NavLink>>();
229+
230+
ifletSome(last) = uris.clone().into_iter().next_back(){
231+
uris.pop();
232+
uris.push(last.active());
233+
}
234+
235+
self.breadcrumbs =Breadcrumbs{
236+
organizations: org_dropdown,
237+
databases: database_dropdown,
238+
path: uris,
239+
};
240+
241+
self
242+
}
243+
189244
pubfnrender<T>(&mutself,template:T) ->String
190245
where
191246
T: sailfish::TemplateOnce,

‎pgml-dashboard/templates/layout/web_app_base.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
<main>
1515
<divclass="container-fluid p-0 min-vh-lg-100">
1616
<divclass="row gx-0 min-vh-lg-100 gy-0">
17-
<%+ WebAppNavbar::new(product_left_nav.links.clone(), dropdown_nav).cluster(cluster) %>
17+
<%+ WebAppNavbar::new(product_left_nav.items.links.clone(), dropdown_nav).cluster(cluster) %>
1818
<divclass="d-flex">
1919
<%+ WebAppLeftNav::new(product_left_nav.clone())
20-
.id(&product_left_nav.unique_id()) %>
20+
.id(&product_left_nav.items.unique_id()) %>
2121

2222
<divclass="clear-from-under-navbar flex-grow-1 min-vw-0 web-app-content-area">
2323
<divclass="px-4 px-sm-5 py-3 d-none d-lg-flex"style="position: absolute">
24-
<%- Breadcrumbs::render(breadcrumbs) %>
24+
<%+breadcrumbs %>
2525
</div>
2626

2727
<divclass="px-xs-2 px-md-5 overflow-hidden"style="padding-top: 57px;">

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp