Skip to content

Commit dbf8078

Browse files
added archiving and unarchiving dyn fields
1 parent cf26703 commit dbf8078

File tree

6 files changed

+240
-125
lines changed

6 files changed

+240
-125
lines changed

src/db.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,33 @@ impl Db {
382382
});
383383
}
384384

385+
pub fn edit_dyn_field_visbility(
386+
&mut self,
387+
id: &usize,
388+
field: &DbFields,
389+
visible: bool,
390+
) -> Vec<DbFields> {
391+
self.contents.iter_mut().for_each(|item| {
392+
if item.id == *id {
393+
if let DbFields::Fields(field_id) = field {
394+
item
395+
.fields
396+
.iter_mut()
397+
.find(|field| field.id == *field_id)
398+
.unwrap_or(&mut DynamicField {
399+
id: *field_id,
400+
title: String::from(""),
401+
visible,
402+
value: vec![(0, String::from(""))],
403+
})
404+
.visible = visible;
405+
}
406+
}
407+
});
408+
409+
self.get_hidden_dyn_fields(id)
410+
}
411+
385412
// edit a field
386413
pub fn edit_field(
387414
&mut self,

src/ui/details/button_slots.rs

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use floem::{
22
event::EventListener,
33
kurbo::Size,
4-
reactive::{create_rw_signal, RwSignal},
4+
reactive::{create_rw_signal, RwSignal, WriteSignal},
55
view::View,
66
views::{container, h_stack, label, Decorators},
77
Clipboard, EventPropagation,
@@ -186,12 +186,30 @@ pub fn history_button_slot(
186186
}
187187
}
188188

189-
pub fn delete_button_slot(
190-
is_dyn_field: bool,
191-
is_hidden: bool,
192-
tooltip_signals: TooltipSignals,
193-
_config: Config,
194-
) -> impl View {
189+
pub struct DeleteButtonSlot {
190+
pub id: usize,
191+
pub field: DbFields,
192+
pub set_hidden_field_list: WriteSignal<im::Vector<DbFields>>,
193+
pub set_dyn_field_list: WriteSignal<im::Vector<DbFields>>,
194+
pub hidden_field_len: RwSignal<usize>,
195+
pub is_dyn_field: bool,
196+
pub is_hidden: bool,
197+
pub tooltip_signals: TooltipSignals,
198+
pub config: Config,
199+
}
200+
201+
pub fn delete_button_slot(param: DeleteButtonSlot) -> impl View {
202+
let DeleteButtonSlot {
203+
id,
204+
field,
205+
set_hidden_field_list,
206+
set_dyn_field_list,
207+
hidden_field_len,
208+
is_dyn_field,
209+
is_hidden,
210+
tooltip_signals,
211+
config,
212+
} = param;
195213
let delete_icon = include_str!("../icons/delete.svg");
196214
let add_icon = include_str!("../icons/add.svg");
197215

@@ -207,9 +225,29 @@ pub fn delete_button_slot(
207225
move |_| {
208226
tooltip_signals.hide();
209227
if is_hidden {
210-
// TODO: unarchive this field
228+
let hidden_field_list: im::Vector<DbFields> = config
229+
.db
230+
.write()
231+
.unwrap()
232+
.edit_dyn_field_visbility(&id, &field, true)
233+
.into();
234+
hidden_field_len.set(hidden_field_list.len());
235+
set_hidden_field_list.set(hidden_field_list);
236+
let field_list: im::Vector<DbFields> =
237+
config.db.read().unwrap().get_dyn_fields(&id).into();
238+
set_dyn_field_list.set(field_list);
211239
} else {
212-
// TODO: archive this field
240+
let hidden_field_list: im::Vector<DbFields> = config
241+
.db
242+
.write()
243+
.unwrap()
244+
.edit_dyn_field_visbility(&id, &field, false)
245+
.into();
246+
hidden_field_len.set(hidden_field_list.len());
247+
set_hidden_field_list.set(hidden_field_list);
248+
let field_list: im::Vector<DbFields> =
249+
config.db.read().unwrap().get_dyn_fields(&id).into();
250+
set_dyn_field_list.set(field_list);
213251
}
214252
},
215253
)

src/ui/details/detail_view.rs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use floem::{
22
id::Id,
3-
reactive::{create_signal, ReadSignal, RwSignal, WriteSignal},
3+
reactive::{
4+
create_rw_signal, create_signal, ReadSignal, RwSignal, WriteSignal,
5+
},
46
style::{AlignContent, AlignItems},
57
view::View,
68
views::{
@@ -14,7 +16,7 @@ use crate::{
1416
db::DbFields,
1517
ui::{
1618
details::{
17-
hidden_fields::hidden_fields,
19+
hidden_fields::{hidden_fields, HiddeFields},
1820
list_item::{list_item, ListItem},
1921
new_field::new_field,
2022
},
@@ -89,7 +91,8 @@ pub fn detail_view(
8991

9092
let hidden_field_list: im::Vector<DbFields> =
9193
config.db.read().unwrap().get_hidden_dyn_fields(&id).into();
92-
let (hidden_field_list, _set_hidden_field_list) =
94+
let hidden_field_len = create_rw_signal(hidden_field_list.len());
95+
let (hidden_field_list, set_hidden_field_list) =
9396
create_signal(hidden_field_list);
9497

9598
let config_fields = config.clone();
@@ -118,6 +121,9 @@ pub fn detail_view(
118121
list_item(ListItem {
119122
id,
120123
field: DbFields::Title,
124+
set_hidden_field_list,
125+
set_dyn_field_list,
126+
hidden_field_len,
121127
is_secret: false,
122128
is_hidden: false,
123129
tooltip_signals,
@@ -127,6 +133,9 @@ pub fn detail_view(
127133
list_item(ListItem {
128134
id,
129135
field: DbFields::Url,
136+
set_hidden_field_list,
137+
set_dyn_field_list,
138+
hidden_field_len,
130139
is_secret: false,
131140
is_hidden: false,
132141
tooltip_signals,
@@ -136,6 +145,9 @@ pub fn detail_view(
136145
list_item(ListItem {
137146
id,
138147
field: DbFields::Username,
148+
set_hidden_field_list,
149+
set_dyn_field_list,
150+
hidden_field_len,
139151
is_secret: true,
140152
is_hidden: false,
141153
tooltip_signals,
@@ -145,6 +157,9 @@ pub fn detail_view(
145157
list_item(ListItem {
146158
id,
147159
field: DbFields::Password,
160+
set_hidden_field_list,
161+
set_dyn_field_list,
162+
hidden_field_len,
148163
is_secret: true,
149164
is_hidden: false,
150165
tooltip_signals,
@@ -160,6 +175,9 @@ pub fn detail_view(
160175
list_item(ListItem {
161176
id,
162177
field,
178+
set_hidden_field_list,
179+
set_dyn_field_list,
180+
hidden_field_len,
163181
is_secret: true,
164182
is_hidden: false,
165183
tooltip_signals,
@@ -168,15 +186,20 @@ pub fn detail_view(
168186
})
169187
.style(|s| s.padding_bottom(5))
170188
},
171-
),
172-
hidden_fields(
189+
)
190+
.style(|s| s.margin_bottom(10)),
191+
hidden_fields(HiddeFields {
173192
id,
174193
hidden_field_list,
194+
set_hidden_field_list,
195+
set_dyn_field_list,
196+
hidden_field_len,
175197
tooltip_signals,
176198
set_list,
177199
main_scroll_to,
178-
config.clone(),
179-
),
200+
config: config.clone(),
201+
})
202+
.style(|s| s.margin_bottom(10)),
180203
new_field(
181204
id,
182205
set_dyn_field_list,

0 commit comments

Comments
 (0)