Added add column button
This commit is contained in:
parent
6133499e98
commit
0c2c428ce4
|
|
@ -4,7 +4,7 @@ use crate::models;
|
||||||
use crate::schema;
|
use crate::schema;
|
||||||
use crate::jrtables;
|
use crate::jrtables;
|
||||||
use models::{ Jrcolumn, NewJrcolumn };
|
use models::{ Jrcolumn, NewJrcolumn };
|
||||||
use schema::jrcolumns::dsl::{ jrcolumns, id, name, jrtable_id, id_in_table };
|
use schema::jrcolumns::dsl::{ jrcolumns, id, name, jrtable_id, id_in_table, column_type };
|
||||||
|
|
||||||
|
|
||||||
pub fn create_jrcolumn(conn: &mut MysqlConnection, tblid: i32, clmnname: String, clmtype: crate::FIELDTYPE) -> Result<usize, diesel::result::Error> {
|
pub fn create_jrcolumn(conn: &mut MysqlConnection, tblid: i32, clmnname: String, clmtype: crate::FIELDTYPE) -> Result<usize, diesel::result::Error> {
|
||||||
|
|
@ -78,17 +78,17 @@ pub fn get_clmid_relative(conn: &mut MysqlConnection, tblid: i32, idintbl: i32)
|
||||||
.first::<i32>(conn)
|
.first::<i32>(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn rename_column_relative(conn: &mut MysqlConnection, tblid: i32, id_in_tbl: i32, new_name: String) -> Result<usize, diesel::result::Error> {
|
pub fn edit_column_relative(conn: &mut MysqlConnection, tblid: i32, id_in_tbl: i32, new_name: &String, clmtype: crate::FIELDTYPE) -> Result<usize, diesel::result::Error> {
|
||||||
let clmid = get_clmid_relative(conn, tblid, id_in_tbl);
|
let clmid = get_clmid_relative(conn, tblid, id_in_tbl);
|
||||||
if clmid.is_err() {
|
if clmid.is_err() {
|
||||||
return Err(clmid.err().unwrap());
|
return Err(clmid.err().unwrap());
|
||||||
}
|
}
|
||||||
rename_column(conn, clmid.unwrap(), new_name)
|
edit_column(conn, clmid.unwrap(), new_name, clmtype)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn rename_column(conn: &mut MysqlConnection, clmnid: i32, new_name: String) -> Result<usize, diesel::result::Error> {
|
pub fn edit_column(conn: &mut MysqlConnection, clmnid: i32, new_name: &String, clmtype: crate::FIELDTYPE) -> Result<usize, diesel::result::Error> {
|
||||||
diesel::update(jrcolumns.find(clmnid))
|
diesel::update(jrcolumns.find(clmnid))
|
||||||
.set(name.eq(new_name))
|
.set((name.eq(new_name), column_type.eq(clmtype as i32)))
|
||||||
.execute(conn)
|
.execute(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -185,7 +185,7 @@ pub fn search_table(tbl: Tbl, search_fields: Vec<i32>, search_value: String) ->
|
||||||
let mut field_sets = HashSet::new();
|
let mut field_sets = HashSet::new();
|
||||||
for field in search_fields {
|
for field in search_fields {
|
||||||
for row in &rows {
|
for row in &rows {
|
||||||
if row.cells[field as usize].to_lowercase().contains(&search_value) {
|
if row.cells[field as usize].to_lowercase().contains(&search_value.to_lowercase()) {
|
||||||
field_sets.insert(row.clone());
|
field_sets.insert(row.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -405,11 +405,11 @@ pub fn delete_column(conn: &mut MysqlConnection, tblid: i32, column_pos: i32, ui
|
||||||
Some(true)
|
Some(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn rename_column(conn: &mut MysqlConnection, tblid: i32, column_pos: i32, new_name: String, uid: i32) -> Option<bool> {
|
pub fn edit_column(conn: &mut MysqlConnection, tblid: i32, column_pos: i32, new_name: &String, new_type: FIELDTYPE, uid: i32) -> Option<bool> {
|
||||||
let owner = jrtables::get_owner_id(conn, tblid);
|
let owner = jrtables::get_owner_id(conn, tblid);
|
||||||
if owner.is_err() ||
|
if owner.is_err() ||
|
||||||
owner.unwrap() != uid ||
|
owner.unwrap() != uid ||
|
||||||
jrcolumns::rename_column_relative(conn, tblid, column_pos, new_name).is_err()
|
jrcolumns::edit_column_relative(conn, tblid, column_pos, new_name, new_type).is_err()
|
||||||
{
|
{
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ async fn rocket() -> _ {
|
||||||
.mount("/", routes![auth::oauth_login, auth::oauth_callback, home, login_home])
|
.mount("/", routes![auth::oauth_login, auth::oauth_callback, home, login_home])
|
||||||
.mount("/table", routes![table::table, table::table_sec, table::edit_tname, table::create, table::import_table, table::delete_table])
|
.mount("/table", routes![table::table, table::table_sec, table::edit_tname, table::create, table::import_table, table::delete_table])
|
||||||
.mount("/row", routes![table::new_entry, table::edit_entry, table::delete_entry])
|
.mount("/row", routes![table::new_entry, table::edit_entry, table::delete_entry])
|
||||||
.mount("/column", routes![table::delete_column])
|
.mount("/column", routes![table::delete_column, table::edit_column])
|
||||||
.register("/", catchers![auth::redirect_to_login])
|
.register("/", catchers![auth::redirect_to_login])
|
||||||
.mount("/static", FileServer::from(relative!("static")))
|
.mount("/static", FileServer::from(relative!("static")))
|
||||||
|
|
||||||
|
|
|
||||||
38
src/table.rs
38
src/table.rs
|
|
@ -17,6 +17,21 @@ struct DeleteColumn {
|
||||||
id_in_table: i32,
|
id_in_table: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(FromForm)]
|
||||||
|
struct EditColumn {
|
||||||
|
tblid: i32,
|
||||||
|
id_in_table: i32,
|
||||||
|
name: String,
|
||||||
|
column_type: isize,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(FromForm)]
|
||||||
|
struct NewColumn {
|
||||||
|
tblid: i32,
|
||||||
|
name: String,
|
||||||
|
column_type: isize,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(FromForm)]
|
#[derive(FromForm)]
|
||||||
struct NewEntry {
|
struct NewEntry {
|
||||||
tblid: i32,
|
tblid: i32,
|
||||||
|
|
@ -201,6 +216,29 @@ pub async fn delete_entry(conn: Db, data: Form<DeleteEntry>, user: AuthUser) ->
|
||||||
Ok(Redirect::to(uri!("/table", table_sec(tblid))))
|
Ok(Redirect::to(uri!("/table", table_sec(tblid))))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[post("/create", data="<data>")]
|
||||||
|
pub async fn create_column(conn: Db, data: Form<NewColumn>, user: AuthUser) -> Result<Redirect, Status> {
|
||||||
|
let uid = user.uid;
|
||||||
|
let tblid = data.tblid;
|
||||||
|
let coltype = FIELDTYPE::from(data.column_type);
|
||||||
|
if conn.run(move |c| inventur_db::add_column(c, tblid, data.name.clone(), coltype, uid)).await.is_none() {
|
||||||
|
return Err(Status::Forbidden);
|
||||||
|
}
|
||||||
|
Ok(Redirect::to(uri!("/table", table_sec(tblid))))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[post("/edit", data="<data>")]
|
||||||
|
pub async fn edit_column(conn: Db, data: Form<EditColumn>, user: AuthUser) -> Result<Redirect, Status> {
|
||||||
|
let uid = user.uid;
|
||||||
|
let tblid = data.tblid;
|
||||||
|
let idintbl = data.id_in_table;
|
||||||
|
let clmtype = FIELDTYPE::from(data.column_type);
|
||||||
|
if conn.run(move |c| inventur_db::edit_column(c, tblid, idintbl, &data.name, clmtype, uid)).await.is_none() {
|
||||||
|
return Err(Status::Forbidden);
|
||||||
|
}
|
||||||
|
Ok(Redirect::to(uri!("/table", table_sec(tblid))))
|
||||||
|
}
|
||||||
|
|
||||||
#[post("/delete", data="<data>")]
|
#[post("/delete", data="<data>")]
|
||||||
pub async fn delete_column(conn: Db, data: Form<DeleteColumn>, user: AuthUser) -> Result<Redirect, Status> {
|
pub async fn delete_column(conn: Db, data: Form<DeleteColumn>, user: AuthUser) -> Result<Redirect, Status> {
|
||||||
let uid = user.uid;
|
let uid = user.uid;
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,7 @@
|
||||||
document.getElementById('form_edit_column_type').value = column_types[clmn_index];
|
document.getElementById('form_edit_column_type').value = column_types[clmn_index];
|
||||||
document.getElementById('modal_caller').innerHTML = column_names[clmn_index];
|
document.getElementById('modal_caller').innerHTML = column_names[clmn_index];
|
||||||
document.getElementById('form_delete_column_idintbl').value = clmn_index + 1;
|
document.getElementById('form_delete_column_idintbl').value = clmn_index + 1;
|
||||||
|
document.getElementById('form_edit_column_idintbl').value = clmn_index + 1;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endblock script %}
|
{% endblock script %}
|
||||||
|
|
@ -84,7 +85,7 @@
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<div class="btn-toolbar mt-2" role="toolbar">
|
<div class="btn-toolbar mt-2" role="toolbar">
|
||||||
<div class="btn-group me-2">
|
<div class="btn-group me-2">
|
||||||
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#new_item"><i class="bi bi-plus-lg"></i></button>
|
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#create_entry_modal"><i class="bi bi-plus-lg"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<form method="get" action="/table/{{ tblid }}">
|
<form method="get" action="/table/{{ tblid }}">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
|
|
@ -116,6 +117,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<div class="btn-toolbar">
|
<div class="btn-toolbar">
|
||||||
|
<button class="btn" data-bs-toggle="modal" data-bs-target="#create_column_modal" type="button" onclick=""><i class="bi bi-bookmark-plus"></i></button>
|
||||||
<form method="GET" action="/table/{{ tblid }}">
|
<form method="GET" action="/table/{{ tblid }}">
|
||||||
<input value="0" name="sort_field" hidden />
|
<input value="0" name="sort_field" hidden />
|
||||||
<input value="{% if sort_field == 0 %}{{ (sort_dir + 1) % 2}}{% else %}0{% endif %}" name="sort_dir" hidden />
|
<input value="{% if sort_field == 0 %}{{ (sort_dir + 1) % 2}}{% else %}0{% endif %}" name="sort_dir" hidden />
|
||||||
|
|
@ -170,12 +172,12 @@
|
||||||
|
|
||||||
{% block more_modals %}
|
{% block more_modals %}
|
||||||
<!-- Add new item -->
|
<!-- Add new item -->
|
||||||
<div class="modal fade" id="new_item" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="create_entry_modal" tabindex="-1" aria-hidden="true">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h1 class="modal-title fs-5">Add entry</h1>
|
<h1 class="modal-title fs-5">Add entry</h1>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" onclick="document.getElementById('form_edit_entry').reset();"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<h5>Cell values:</h5>
|
<h5>Cell values:</h5>
|
||||||
|
|
@ -216,7 +218,7 @@
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h1 class="modal-title fs-5"><div class="row"><div class="col-auto">Row <span id="modal_caller"></span></div><div class="col-auto"><i class="bi bi-pencil-fill"></i></div></div></h1>
|
<h1 class="modal-title fs-5"><div class="row"><div class="col-auto">Row <span id="modal_caller"></span></div><div class="col-auto"><i class="bi bi-pencil-fill"></i></div></div></h1>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" onclick="document.getElementById('form_edit_entry').reset();"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form action="/row/edit" method="post" id="form_edit_entry">
|
<form action="/row/edit" method="post" id="form_edit_entry">
|
||||||
|
|
@ -255,6 +257,44 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Add column -->
|
||||||
|
<div class="modal fade" id="create_column_modal" tabindex="-1" aria-hidden="true" onclick="document.getElementById('form_edit_entry').reset();">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h1 class="modal-title fs-5">New column</h1>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form action="/column/create" method="post" id="form_create_column">
|
||||||
|
<input name="tblid" value="{{ tblid }}" hidden>
|
||||||
|
<div class="mb-3">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-auto">
|
||||||
|
<label for="form_create_column_name" class="form-label">Name:</label>
|
||||||
|
<input type="text" class="form-control" name="name" id="form_create_column_name" />
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<label for="form_create_column_type" class="form-label">Type</label>
|
||||||
|
<select class="form-select" name="column_type" id="form_create_column_type">
|
||||||
|
<option value="0">Text</option>
|
||||||
|
<option value="1">Number</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<div class="col-auto">
|
||||||
|
<button class="btn btn-secondary" data-bs-dismiss="modal" type="button" onclick="document.getElementById('form_create_column').reset();"><i class="bi bi-x"></i></button>
|
||||||
|
<button class="btn btn-primary" type="button" onclick="document.getElementById('form_create_column').submit().reset();"><i class="bi bi-check-lg"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Edit column -->
|
<!-- Edit column -->
|
||||||
<div class="modal fade" id="edit_column_modal" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="edit_column_modal" tabindex="-1" aria-hidden="true">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
|
|
@ -266,6 +306,7 @@
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form action="/column/edit" method="post" id="form_edit_column">
|
<form action="/column/edit" method="post" id="form_edit_column">
|
||||||
<input name="tblid" value="{{ tblid }}" hidden>
|
<input name="tblid" value="{{ tblid }}" hidden>
|
||||||
|
<input name="id_in_table" id="form_edit_column_idintbl" hidden>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
|
|
@ -301,4 +342,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
{% endblock more_modals %}
|
{% endblock more_modals %}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user