aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVidhu Kant Sharma <vidhukant@vidhukant.com>2023-08-30 16:38:53 +0530
committerVidhu Kant Sharma <vidhukant@vidhukant.com>2023-08-30 16:38:53 +0530
commit7a7847555ec3384b3462da6b90138cce3ca7cceb (patch)
tree14ab9157e0cf0b953498d4f8e6a8c614a61f9760
parent0d7d20829623b14c8ea5284bc24e63f7c31d61b7 (diff)
made crappy table component
-rw-r--r--css/_table.scss50
-rw-r--r--css/styles.scss2
-rw-r--r--src/app/manage/customer/mod.rs67
-rw-r--r--src/components/mod.rs1
-rw-r--r--src/components/navbar/nav.rs14
-rw-r--r--src/components/table/cell.rs32
-rw-r--r--src/components/table/header.rs37
-rw-r--r--src/components/table/items.rs32
-rw-r--r--src/components/table/mod.rs37
-rw-r--r--src/components/table/row.rs33
10 files changed, 265 insertions, 40 deletions
diff --git a/css/_table.scss b/css/_table.scss
new file mode 100644
index 0000000..4321a8b
--- /dev/null
+++ b/css/_table.scss
@@ -0,0 +1,50 @@
+.table {
+ $header-height: 3rem;
+ $list-item-height: 2.5rem;
+ $pd: 0.7em;
+ position: relative;
+
+ .table-header {
+ $br: $pd;
+ background-color: var(--body-bg-alt);
+ width: 100%;
+ height: $header-height;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-bottom: 1px solid var(--link-fg);
+ font-weight: bold;
+ font-size: 1.2em;
+ border-radius: $br $br 0 0;
+ }
+
+ .table-row {
+ display: grid;
+ padding: 0 $pd;
+ align-items: center;
+ height: 100%;
+ width: 100%;
+ }
+
+ .table-items {
+ min-height: 40rem;
+ max-height: 75vh;
+ width: 100%;
+
+ border: 1px solid var(--body-bg-alt);
+ overflow-y: scroll;
+
+ position: absolute;
+ top: $header-height;
+ left: 0;
+
+ .table-row {
+ height: $list-item-height;
+ font-size: 1.2em;
+ }
+
+ .table-row:nth-child(even) {
+ background-color: var(--body-bg-alt);
+ }
+ }
+}
diff --git a/css/styles.scss b/css/styles.scss
index 6f2424c..7440d4c 100644
--- a/css/styles.scss
+++ b/css/styles.scss
@@ -4,7 +4,7 @@
@import "navbar";
@import "menu_page";
-@import "manage/customer";
+@import "table";
:root {
--body-bg: #282a36;
diff --git a/src/app/manage/customer/mod.rs b/src/app/manage/customer/mod.rs
index 8f5f6fb..0ae0f24 100644
--- a/src/app/manage/customer/mod.rs
+++ b/src/app/manage/customer/mod.rs
@@ -21,6 +21,14 @@ use yew::prelude::*;
use crate::models::customer;
+use crate::components::table::{
+ Table,
+ header::Header,
+ items::Items,
+ cell::Cell,
+ row::Row,
+};
+
#[function_component(ManageCustomerPage)]
pub fn manage_customer() -> Html {
let mut customers = Vec::new();
@@ -45,37 +53,46 @@ pub fn manage_customer() -> Html {
c1s1.postal_code = "121212".to_string();
c1s1.country = "India".to_string();
c1.add_shipping_address(c1s1);
- customers.push(c1);
-
- let mut c2: customer::Customer = customer::Customer::new();
- c2.id = 1;
- c2.name = "Google Inc.".to_string();
- c2.gstin = "AKSK821KA12SJ123LJF".to_string();
- c2.contact.contact_name = "Google".to_string();
- c2.contact.phone_number = "490183212".to_string();
- c2.contact.email_address = "google@google.com".to_string();
- c2.contact.website = "google.com".to_string();
- c2.billing_address.address_text = "Address".to_string();
- c2.billing_address.city = "City".to_string();
- c2.billing_address.state = "State".to_string();
- c2.billing_address.postal_code = "121212".to_string();
- c2.billing_address.country = "India".to_string();
- let mut c2s1 = customer::Address::new();
- c2s1.address_text = "Address".to_string();
- c2s1.city = "City".to_string();
- c2s1.state = "State".to_string();
- c2s1.postal_code = "121212".to_string();
- c2s1.country = "India".to_string();
- c2.add_shipping_address(c2s1);
- for _ in 0..1000 {
- customers.push(c2.clone());
+ for _ in 0..20 {
+ customers.push(c1.clone());
}
html! {
<div id={"manage-customer-page"}>
<p>{"To Add: Searching, Viewing, Editing, Deletion, Batch Deletion"}</p>
- <list::CustomersList customers={customers}/>
+
+ <Table>
+ <Header template={"1fr 3fr 2fr 2fr"}>
+ <Cell>
+ {"S. No"}
+ </Cell>
+
+ <Cell>
+ {"Customer Name"}
+ </Cell>
+
+ <Cell>
+ {"GSTIN"}
+ </Cell>
+ </Header>
+
+ <Items>
+ <Row template={"1fr 3fr 2fr 2fr"}>
+ <Cell>
+ {"S. No"}
+ </Cell>
+
+ <Cell>
+ {"Customer Name"}
+ </Cell>
+
+ <Cell>
+ {"GSTIN"}
+ </Cell>
+ </Row>
+ </Items>
+ </Table>
</div>
}
}
diff --git a/src/components/mod.rs b/src/components/mod.rs
index f185cc7..cfa9064 100644
--- a/src/components/mod.rs
+++ b/src/components/mod.rs
@@ -17,3 +17,4 @@
pub mod navbar;
pub mod navigation_menu;
+pub mod table;
diff --git a/src/components/navbar/nav.rs b/src/components/navbar/nav.rs
index 5249b60..021e20c 100644
--- a/src/components/navbar/nav.rs
+++ b/src/components/navbar/nav.rs
@@ -17,7 +17,6 @@
use yew::prelude::*;
use yew_router::prelude::*;
-use gloo::utils::document;
use crate::app::Route;
use crate::components::navbar::nav_link::NavLink;
@@ -87,19 +86,6 @@ pub fn nav() -> Html {
.map(|link| html!(<NavLink label={link.label.clone()} to={link.to.clone()} />))
.collect();
- // set document title
- document().set_title(match current_route {
- Route::Home => "",
-
- Route::ManageMenu => "Manage OpenBills Data",
- Route::ManageCustomers => "Manage OpenBills Customers",
- Route::ManageBrands => "Manage OpenBills Brands",
- Route::ManageItems => "Manage OpenBills Items",
- Route::ManageInvoices => "Manage OpenBills Invoices",
-
- _ => "Hello World",
- });
-
html! {
<nav>
{links_html}
diff --git a/src/components/table/cell.rs b/src/components/table/cell.rs
new file mode 100644
index 0000000..34091f7
--- /dev/null
+++ b/src/components/table/cell.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(Cell)]
+pub fn cell(props: &Props) -> Html {
+ html! {
+ <div class={"table-cell"}>
+ {props.children.clone()}
+ </div>
+ }
+}
diff --git a/src/components/table/header.rs b/src/components/table/header.rs
new file mode 100644
index 0000000..715ec2f
--- /dev/null
+++ b/src/components/table/header.rs
@@ -0,0 +1,37 @@
+/* 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 crate::components::table::row::Row;
+
+#[derive(Properties, PartialEq)]
+pub struct Props {
+ pub children: Children,
+ pub template: String,
+}
+
+#[function_component(Header)]
+pub fn header(props: &Props) -> Html {
+ html! {
+ <div class={"table-header"}>
+ <Row template={props.template.clone()}>
+ {props.children.clone()}
+ </Row>
+ </div>
+ }
+}
diff --git a/src/components/table/items.rs b/src/components/table/items.rs
new file mode 100644
index 0000000..ccd7421
--- /dev/null
+++ b/src/components/table/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(Items)]
+pub fn items(props: &Props) -> Html {
+ html! {
+ <div class={"table-items"}>
+ {props.children.clone()}
+ </div>
+ }
+}
diff --git a/src/components/table/mod.rs b/src/components/table/mod.rs
new file mode 100644
index 0000000..a740cfe
--- /dev/null
+++ b/src/components/table/mod.rs
@@ -0,0 +1,37 @@
+/* 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 header;
+pub mod items;
+pub mod row;
+pub mod cell;
+
+use yew::prelude::*;
+
+#[derive(Properties, PartialEq)]
+pub struct Props {
+ pub children: Children,
+}
+
+#[function_component(Table)]
+pub fn table(props: &Props) -> Html {
+ html! {
+ <div class={"table"}>
+ {props.children.clone()}
+ </div>
+ }
+}
diff --git a/src/components/table/row.rs b/src/components/table/row.rs
new file mode 100644
index 0000000..5577422
--- /dev/null
+++ b/src/components/table/row.rs
@@ -0,0 +1,33 @@
+/* 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,
+ pub template: String,
+}
+
+#[function_component(Row)]
+pub fn row(props: &Props) -> Html {
+ html! {
+ <div class={"table-row"} style={format!("grid-template-columns: {};", props.template)}>
+ {props.children.clone()}
+ </div>
+ }
+}