···250250 return Ok(Some(Signal::Helix { path }));
251251 }
252252253253- Signal::ClosedZettel => {
254254- let selected = self
255255- .zettel_list
256256- .state
257257- .selected()
258258- .expect("This must be the zettel we just edited");
259259-253253+ Signal::ClosedZettel { zid } => {
260254 // regenerate a fresh zettel list
261255 self.zettel_list = ZettelList::new(
262256 self.get_zettels_by_current_query().await?,
···264258 self.zettel_list.width,
265259 );
266260267267- let Some(zid) = self.zettel_list.id_list.get(selected) else {
268268- return Ok(None);
269269- };
270270-271261 let kt = self.kh.read().await;
272262273273- let zettel = Zettel::fetch_from_db(zid, &kt.db)
263263+ let zettel = Zettel::fetch_from_db(&zid, &kt.db)
274264 .await?
275265 .expect("invariant broken, we just closed this zettel");
276266267267+ let idx = self
268268+ .zettel_list
269269+ .id_list
270270+ .iter()
271271+ .position(|id| *id == zettel.id);
272272+277273 // reset the state of the component
278274 self.search.clear_query();
279279- self.zettel_list.state.select_first();
275275+ self.zettel_list.state.select(idx);
280276281277 self.zettel_view = ZettelView::from(&zettel);
282278 self.preview = Preview::from(zettel.content(&kt.index).clone());
+5-2
src/tui/signal.rs
···5566use serde::{Deserialize, Serialize};
7788-use crate::tui::Region;
88+use crate::{tui::Region, types::ZettelId};
991010/// The varying signals that can be emitted.
1111#[derive(Debug, Clone, PartialEq, Eq, Display, Serialize, Deserialize)]
···3333 /// User asks to open a `Zettel`
3434 OpenZettel,
3535 /// The user is done editing a `Zettel`
3636- ClosedZettel,
3636+ ClosedZettel {
3737+ /// the id of the `Zettel` that was closed
3838+ zid: ZettelId,
3939+ },
37403841 /// this is fucking temporary
3942 Helix {