aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/app/home/mod.rs61
-rw-r--r--src/app/manage/mod.rs68
-rw-r--r--src/app/mod.rs85
-rw-r--r--src/components/mod.rs19
-rw-r--r--src/components/navbar/mod.rs42
-rw-r--r--src/components/navbar/nav_link.rs44
-rw-r--r--src/components/navigation_menu/menu_header.rs32
-rw-r--r--src/components/navigation_menu/menu_item.rs43
-rw-r--r--src/components/navigation_menu/menu_items.rs32
-rw-r--r--src/components/navigation_menu/mod.rs38
-rw-r--r--src/main.rs25
11 files changed, 489 insertions, 0 deletions
diff --git a/src/app/home/mod.rs b/src/app/home/mod.rs
new file mode 100644
index 0000000..71f3a58
--- /dev/null
+++ b/src/app/home/mod.rs
@@ -0,0 +1,61 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use yew::prelude::*;
+use yew_icons::IconId;
+
+use crate::app::Route;
+use crate::components::navigation_menu::*;
+
+#[function_component(HomePage)]
+pub fn home_page() -> Html {
+ html! {
+ <div id={"home-page"}>
+ <NavigationMenu>
+ <menu_header::MenuHeader>
+ <h1>{ "Welcome To OpenBills!" }</h1>
+ </menu_header::MenuHeader>
+
+ <menu_items::MenuItems>
+ <menu_item::MenuItem
+ icon={IconId::FontAwesomeSolidPlus}
+ label={"Create New Invoice"}
+ to={Route::NewInvoice}
+ />
+
+ <menu_item::MenuItem
+ icon={IconId::FontAwesomeSolidMagnifyingGlass}
+ label={"View Invoices"}
+ to={Route::ViewInvoices}
+ />
+
+ <menu_item::MenuItem
+ icon={IconId::FontAwesomeSolidMountainSun}
+ label={"Manage Data"}
+ to={Route::ManageMenu}
+ />
+
+ <menu_item::MenuItem
+ icon={IconId::FontAwesomeSolidGear}
+ label={"Settings"}
+ to={Route::Settings}
+ />
+ </menu_items::MenuItems>
+ </NavigationMenu>
+ </div>
+ }
+}
diff --git a/src/app/manage/mod.rs b/src/app/manage/mod.rs
new file mode 100644
index 0000000..17b7b16
--- /dev/null
+++ b/src/app/manage/mod.rs
@@ -0,0 +1,68 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use yew::prelude::*;
+use yew_icons::IconId;
+
+use crate::app::Route;
+use crate::components::navigation_menu::*;
+
+#[function_component(ManageMenuPage)]
+pub fn manage_menu_page() -> Html {
+ html! {
+ <div id={"manage-menu-page"}>
+ <NavigationMenu>
+ <menu_header::MenuHeader>
+ <h1>{ "Manage OpenBills Data" }</h1>
+ <p>{ "Here you can add/modify/delete OpenBills data (clients, invoices, etc)" }</p>
+ </menu_header::MenuHeader>
+
+ <menu_items::MenuItems>
+ <menu_item::MenuItem
+ icon={IconId::FontAwesomeSolidUser}
+ label={"Edit Clients"}
+ to={Route::ManageClients}
+ />
+
+ <menu_item::MenuItem
+ icon={IconId::FontAwesomeSolidIndustry}
+ label={"Edit Brands"}
+ to={Route::ManageBrands}
+ />
+
+ <menu_item::MenuItem
+ icon={IconId::FontAwesomeSolidCartShopping}
+ label={"Edit Items"}
+ to={Route::ManageItems}
+ />
+
+ <menu_item::MenuItem
+ icon={IconId::FontAwesomeSolidFileInvoice}
+ label={"Edit Invoices"}
+ to={Route::ManageInvoices}
+ />
+
+ <menu_item::MenuItem
+ icon={IconId::FontAwesomeSolidHouseChimney}
+ label={"Home"}
+ to={Route::Home}
+ />
+ </menu_items::MenuItems>
+ </NavigationMenu>
+ </div>
+ }
+}
diff --git a/src/app/mod.rs b/src/app/mod.rs
new file mode 100644
index 0000000..671aac6
--- /dev/null
+++ b/src/app/mod.rs
@@ -0,0 +1,85 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+mod home;
+mod manage;
+
+use yew::prelude::*;
+use yew_router::prelude::*;
+
+use crate::components::navbar;
+
+#[derive(Clone, Routable, PartialEq)]
+pub enum Route {
+ #[at("/")]
+ Home,
+
+ #[at("/manage")]
+ ManageMenu,
+ #[at("/manage/clients")]
+ ManageClients,
+ #[at("/manage/brands")]
+ ManageBrands,
+ #[at("/manage/items")]
+ ManageItems,
+ #[at("/manage/invoices")]
+ ManageInvoices,
+
+ #[at("/invoice/new")]
+ NewInvoice,
+ #[at("/invoice/all")]
+ ViewInvoices,
+ #[at("/invoice/one")]
+ ViewInvoice,
+ #[at("/settings")]
+ Settings,
+
+ #[not_found]
+ #[at("/404")]
+ NotFound,
+}
+
+pub fn switch(routes: Route) -> Html {
+ match routes {
+ Route::Home => html! {<home::HomePage />},
+
+ Route::ManageMenu => html! {<manage::ManageMenuPage />},
+ Route::ManageClients => html! {<h1>{ "Edit Clients" }</h1>},
+ Route::ManageBrands => html! {<h1>{ "Edit Brands" }</h1>},
+ Route::ManageItems => html! {<h1>{ "Edit Items" }</h1>},
+ Route::ManageInvoices => html! {<h1>{ "Edit Invoices" }</h1>},
+
+ Route::NewInvoice => html! {<h1>{ "Create New Invoice" }</h1>},
+ Route::ViewInvoices => html! {<h1>{ "View All Invoices" }</h1>},
+ Route::ViewInvoice => html! {<h1>{ "View a Single Invoice" }</h1>},
+ Route::Settings => html! {<h1>{ "Settings Page" }</h1>},
+
+ Route::NotFound => html! {<h1>{"404 Page Not Found"}</h1>},
+ }
+}
+
+#[function_component(App)]
+pub fn app() -> Html {
+ html! {
+ <BrowserRouter>
+ <navbar::Navbar />
+ <main>
+ <Switch<Route> render={switch} />
+ </main>
+ </BrowserRouter>
+ }
+}
diff --git a/src/components/mod.rs b/src/components/mod.rs
new file mode 100644
index 0000000..f185cc7
--- /dev/null
+++ b/src/components/mod.rs
@@ -0,0 +1,19 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+pub mod navbar;
+pub mod navigation_menu;
diff --git a/src/components/navbar/mod.rs b/src/components/navbar/mod.rs
new file mode 100644
index 0000000..3aaeb72
--- /dev/null
+++ b/src/components/navbar/mod.rs
@@ -0,0 +1,42 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+mod nav_link;
+
+use yew::prelude::*;
+use yew_router::prelude::*;
+
+use crate::app::Route;
+
+#[function_component(Navbar)]
+pub fn navbar() -> Html {
+ html! {
+ <div id={"navbar-wrapper"}>
+ <div id={"navbar"}>
+ <span id={"nav-logo"}>
+ <Link<Route> to={Route::Home}>
+ <img src="/public/img/nav-logo.png" alt="OpenBills Web Client Logo" />
+ </Link<Route>>
+ </span>
+
+ <nav>
+ <nav_link::NavLink label={"Home"} to={Route::Home} />
+ </nav>
+ </div>
+ </div>
+ }
+}
diff --git a/src/components/navbar/nav_link.rs b/src/components/navbar/nav_link.rs
new file mode 100644
index 0000000..3930d71
--- /dev/null
+++ b/src/components/navbar/nav_link.rs
@@ -0,0 +1,44 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use yew::prelude::*;
+use yew_router::prelude::*;
+
+use crate::app::Route;
+
+#[derive(Properties, PartialEq)]
+pub struct Props {
+ pub label: String,
+ pub to: Route,
+}
+
+#[function_component(NavLink)]
+pub fn nav_link(props: &Props) -> Html {
+ let route = use_route::<Route>().unwrap_or_default();
+
+ let classes = if route == props.to {
+ classes!("active")
+ } else {
+ classes!("")
+ };
+
+ html! {
+ <Link<Route> classes={classes} to={props.to.clone()}>
+ {props.label.clone()}
+ </Link<Route>>
+ }
+}
diff --git a/src/components/navigation_menu/menu_header.rs b/src/components/navigation_menu/menu_header.rs
new file mode 100644
index 0000000..6c5f4e6
--- /dev/null
+++ b/src/components/navigation_menu/menu_header.rs
@@ -0,0 +1,32 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use yew::prelude::*;
+
+#[derive(Properties, PartialEq)]
+pub struct Props {
+ pub children: Children,
+}
+
+#[function_component(MenuHeader)]
+pub fn menu_header(props: &Props) -> Html {
+ html! {
+ <div class={"header"}>
+ {props.children.clone()}
+ </div>
+ }
+}
diff --git a/src/components/navigation_menu/menu_item.rs b/src/components/navigation_menu/menu_item.rs
new file mode 100644
index 0000000..cd03c01
--- /dev/null
+++ b/src/components/navigation_menu/menu_item.rs
@@ -0,0 +1,43 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use yew::prelude::*;
+use yew_router::prelude::*;
+use yew_icons::{Icon, IconId};
+
+use crate::app::Route;
+
+#[derive(Properties, PartialEq)]
+pub struct Props {
+ pub label: String,
+ pub icon: IconId,
+ pub to: Route,
+}
+
+#[function_component(MenuItem)]
+pub fn menu_item(props: &Props) -> Html {
+ html! {
+ <Link<Route> classes={classes!("menu-item")} to={props.to.clone()}>
+ <div class={"logo"}>
+ <Icon icon_id={props.icon} />
+ </div>
+ <div class={"label"}>
+ {props.label.clone()}
+ </div>
+ </Link<Route>>
+ }
+}
diff --git a/src/components/navigation_menu/menu_items.rs b/src/components/navigation_menu/menu_items.rs
new file mode 100644
index 0000000..efab75e
--- /dev/null
+++ b/src/components/navigation_menu/menu_items.rs
@@ -0,0 +1,32 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use yew::prelude::*;
+
+#[derive(Properties, PartialEq)]
+pub struct Props {
+ pub children: Children,
+}
+
+#[function_component(MenuItems)]
+pub fn menu_items(props: &Props) -> Html {
+ html! {
+ <div class={"items-wrapper"}>
+ {props.children.clone()}
+ </div>
+ }
+}
diff --git a/src/components/navigation_menu/mod.rs b/src/components/navigation_menu/mod.rs
new file mode 100644
index 0000000..58ceec7
--- /dev/null
+++ b/src/components/navigation_menu/mod.rs
@@ -0,0 +1,38 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+pub mod menu_header;
+pub mod menu_items;
+pub mod menu_item;
+
+use yew::prelude::*;
+
+#[derive(Properties, PartialEq)]
+pub struct Props {
+ pub children: Children,
+}
+
+#[function_component(NavigationMenu)]
+pub fn navigation_menu(props: &Props) -> Html {
+ html! {
+ <div class={"menu-wrapper"}>
+ <div class={"menu"}>
+ {props.children.clone()}
+ </div>
+ </div>
+ }
+}
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..a95dffc
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,25 @@
+/* openbills-web - Web client for Libre Billing Software
+ * Copyright (C) 2023 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+mod app;
+mod components;
+
+use app::App;
+
+fn main() {
+ yew::Renderer::<App>::new().render();
+}