|
3 | 3 | use crate::templates::components::PostgresLogo; |
4 | 4 | use crate::components::navigation::navbar::marketing_link::MarketingLink; |
5 | 5 | use crate::components::static_nav_link::StaticNavLink; |
| 6 | + use pgml_components::Component; |
6 | 7 |
|
7 | | - let solutions_links = vec![ |
| 8 | + let solutions_use_cases_links = vec![ |
| 9 | + StaticNavLink::new("Search".to_string(), "/docs/guides/improve-search-results-with-machine-learning".to_string()).icon("feature_search"), |
8 | 10 | StaticNavLink::new("Chatbots".to_string(), "/chatbot".to_string()).icon("smart_toy"), |
9 | | - StaticNavLink::new("Site Search".to_string(), "/test2".to_string()).icon("manage_search").disabled(true), |
10 | | - StaticNavLink::new("Fraud Detection".to_string(), "/test2".to_string()).icon("e911_emergency").disabled(true), |
11 | | - StaticNavLink::new("Forecasting".to_string(), "/test2".to_string()).icon("avg_pace").disabled(true), |
| 11 | + ]; |
| 12 | + |
| 13 | + let solutions_tasks_links = vec![ |
| 14 | + StaticNavLink::new("RAG".to_string(), "/test2".to_string()).icon("manage_search").disabled(true), |
| 15 | + StaticNavLink::new("NLP".to_string(), "/docs/guides/natural-language-processing".to_string()).icon("description"), |
| 16 | + StaticNavLink::new("Supervised Learning".to_string(), "/docs/guides/supervised-learning".to_string()).icon("model_training"), |
| 17 | + StaticNavLink::new("Embeddings".to_string(), "/docs/api/sql-extension/pgml.embed".to_string()).icon("subtitles"), |
| 18 | + StaticNavLink::new("Vector Database".to_string(), "/docs/product/vector-database".to_string()).icon("open_with"), |
12 | 19 | ]; |
13 | 20 |
|
14 | 21 | let company_links = vec![ |
|
17 | 24 | StaticNavLink::new("Contact".to_string(), "/contact".to_string()).icon("alternate_email") |
18 | 25 | ]; |
19 | 26 |
|
20 | | - struct MobileNavs { |
21 | | - collapse: String, |
22 | | - links: Vec<StaticNavLink> |
| 27 | + struct DrawerNav { |
| 28 | + collapse_name: String, |
| 29 | + links: Vec<Component>, |
| 30 | + to_expand: Vec<String> |
23 | 31 | } |
24 | 32 |
|
25 | | - let mobile_nav_items = vec![ |
26 | | - MobileNavs { |
27 | | - collapse: "solutions-collapse".to_string(), |
28 | | - links: solutions_links.clone() |
29 | | - }, |
30 | | - MobileNavs { |
31 | | - collapse: "company-collapse".to_string(), |
32 | | - links: company_links.clone() |
33 | | - } |
34 | | - ]; |
| 33 | + let drawer = |item: DrawerNav| { |
| 34 | + let collapse_name = item.collapse_name; |
| 35 | + |
| 36 | + let links = item.links.iter().map(|link| { |
| 37 | + link.clone().render_once().unwrap() |
| 38 | + }).collect::<Vec<String>>().join("\n"); |
| 39 | + |
| 40 | + let to_expand = item.to_expand.join(" "); |
| 41 | + |
| 42 | + format!(r#" |
| 43 | + <div class="nav-item collapse-horizontal {collapse_name} collapse drawer-submenu {to_expand}"> |
| 44 | + <ul class="sub-menu-dropdown mb-5 d-flex flex-column gap-3"> |
| 45 | + <a class="btn btn-tertiary-web-app" data-bs-toggle="collapse" data-bs-target=".{collapse_name}"> |
| 46 | + <span class="material-symbols-outlined icon-back-btn"> |
| 47 | + arrow_back |
| 48 | + </span> |
| 49 | + Back |
| 50 | + </a> |
| 51 | + {links} |
| 52 | + </ul> |
| 53 | + </div> |
| 54 | + "#) |
| 55 | + }; |
| 56 | + |
| 57 | + let link_to_drawer = |name: &str, target: &str| { |
| 58 | + format!(r##" |
| 59 | + <li class="nav-item d-flex align-items-center d-flex d-xl-none"> |
| 60 | + <a class="nav-link p-0 fw-semibold" href="#" data-bs-toggle="collapse" data-bs-target=".{target}">{name}</a> |
| 61 | + </li> |
| 62 | + "##) |
| 63 | + }; |
| 64 | + |
| 65 | + let close_mobile_main_nav_items = vec!["solutions-collapse", "company-collapse"]; |
35 | 66 | %> |
36 | 67 |
|
37 | 68 | <div class="sticky-top-nav" data-controller="navigation-navbar-marketing"> |
|
57 | 88 |
|
58 | 89 | <div class="collapse navbar-collapse drawer-submenu-container navbarSupportedContent" id="navbarSupportedContent"> |
59 | 90 | <!-- Main Menu --> |
60 | | - <div class="nav-item w-100 d-xl-flex flex-column flex-xl-row align-items-xl-center collapse collapse-horizontal drawer-submenu <% for item in &mobile_nav_items {%> <%- item.collapse %><% } %> show"> |
| 91 | + <div class="nav-item w-100 d-xl-flex flex-column flex-xl-row align-items-xl-center collapse collapse-horizontal drawer-submenu <% for item in close_mobile_main_nav_items {%> <%- item %><% } %> solutions-collapse show"> |
61 | 92 | <ul class="navbar-nav flex-grow-1 gap-4 me-auto my-4 my-xl-0"> |
62 | 93 |
|
63 | 94 | <% if !standalone_dashboard { %> |
64 | 95 | <div class="d-none d-xl-flex"> |
65 | 96 | <%+ MarketingLink::new() |
66 | 97 | .name("Solutions") |
67 | | - .links(solutions_links.clone()) %> |
| 98 | + .links(solutions_tasks_links.clone()) |
| 99 | + .title_col1("ml & ai tasks") |
| 100 | + .links_col2(solutions_use_cases_links.clone()) |
| 101 | + .title_col2("use cases") %> |
68 | 102 | </div> |
69 | | - <li class="nav-item d-flex align-items-center d-flex d-xl-none"> |
70 | | - <a class="nav-link p-0 fw-semibold" href="#" data-bs-toggle="collapse" data-bs-target=".solutions-collapse">Solutions</a> |
71 | | - </li> |
| 103 | + <%- link_to_drawer("Solutions", "solutions-collapse") %> |
72 | 104 |
|
73 | 105 | <%+ MarketingLink::new().link(StaticNavLink::new("Pricing".to_string(), "/pricing".to_string())) %> |
74 | 106 | <% } %> |
|
82 | 114 | .name("Company") |
83 | 115 | .links(company_links.clone()) %> |
84 | 116 | </div> |
85 | | - <li class="nav-item d-flex align-items-center d-flex d-xl-none"> |
86 | | - <a class="nav-link p-0 fw-semibold" href="#" data-bs-toggle="collapse" data-bs-target=".company-collapse">Company</a> |
87 | | - </li> |
| 117 | + <%- link_to_drawer("Company", "company-collapse") %> |
88 | 118 | <% } %> |
89 | 119 |
|
90 | 120 | <li class="nav-item d-none d-xl-flex align-items-center"> |
|
133 | 163 | </ul> |
134 | 164 | </div> |
135 | 165 |
|
136 | | - |
137 | 166 | <!-- subnavs for less than large screens --> |
138 | | - <% for item in mobile_nav_items { %> |
139 | | - <div class="nav-item collapse-horizontal <%- item.collapse %> collapse drawer-submenu"> |
140 | | - <ul class="sub-menu-dropdown mb-5 d-flex flex-column gap-3"> |
141 | | - <a class="btn btn-tertiary-web-app" data-bs-toggle="collapse" data-bs-target=".<%- item.collapse%>"> |
142 | | - <span class="material-symbols-outlined icon-back-btn"> |
143 | | - arrow_back |
144 | | - </span> |
145 | | - Back |
146 | | - </a> |
147 | | - <% for link in item.links { %> |
148 | | - <%+ MarketingLink::new().link( |
149 | | - StaticNavLink::new(link.name.to_string(), link.href.to_string()) |
150 | | - .disabled(link.disabled) |
151 | | - ) %> |
152 | | - <% } %> |
153 | | - </ul> |
154 | | - </div> |
155 | | - <% } %> |
156 | | - </div> |
| 167 | + <%- drawer( |
| 168 | + DrawerNav { |
| 169 | + collapse_name: "company-collapse".to_string(), |
| 170 | + links: |
| 171 | + company_links.iter().map(|link| { |
| 172 | + MarketingLink::new().link( |
| 173 | + StaticNavLink::new(link.name.to_string(), link.href.to_string()) |
| 174 | + .disabled(link.disabled)) |
| 175 | + .into() |
| 176 | + }).collect::<Vec<Component>>(), |
| 177 | + to_expand: vec![] |
| 178 | + } |
| 179 | + ) %> |
| 180 | + |
| 181 | + <%- drawer( |
| 182 | + DrawerNav { |
| 183 | + collapse_name: "solutions-tasks-collapse".to_string(), |
| 184 | + links: |
| 185 | + solutions_tasks_links.iter().map(|link| { |
| 186 | + MarketingLink::new().link( |
| 187 | + StaticNavLink::new(link.name.to_string(), link.href.to_string()) |
| 188 | + .disabled(link.disabled)) |
| 189 | + .into() |
| 190 | + }).collect::<Vec<Component>>(), |
| 191 | + to_expand: vec![] |
| 192 | + } |
| 193 | + ) %> |
| 194 | + |
| 195 | + <%- drawer( |
| 196 | + DrawerNav { |
| 197 | + collapse_name: "solutions-use-cases-collapse".to_string(), |
| 198 | + links: |
| 199 | + solutions_use_cases_links.iter().map(|link| { |
| 200 | + MarketingLink::new().link( |
| 201 | + StaticNavLink::new(link.name.to_string(), link.href.to_string()) |
| 202 | + .disabled(link.disabled)) |
| 203 | + .into() |
| 204 | + }).collect::<Vec<Component>>(), |
| 205 | + to_expand: vec![] |
| 206 | + } |
| 207 | + ) %> |
| 208 | + |
| 209 | + <%- drawer( |
| 210 | + DrawerNav { |
| 211 | + collapse_name: "solutions-collapse".to_string(), |
| 212 | + links: |
| 213 | + vec![ |
| 214 | + Component::from(link_to_drawer("Tasks", "solutions-tasks-collapse")), |
| 215 | + Component::from(link_to_drawer("Use Cases", "solutions-use-cases-collapse")) |
| 216 | + ], |
| 217 | + to_expand: vec!["solutions-tasks-collapse".to_string(), "solutions-use-cases-collapse".to_string()] |
| 218 | + } |
| 219 | + ) %> |
157 | 220 |
|
158 | 221 | </div> |
159 | 222 | </nav> |
|
0 commit comments