use std::rc::Rc;
use gpui::{App, Global};
use ui::icons::glyph;
use crate::slash::{SlashAction, SlashAt, SlashItem, SlashRow};
pub fn defaults() -> Vec<SlashItem> {
let mut items = vec![SlashItem::Heading("Turn into".into())];
items.extend(crate::slash::turns(crate::slash::defaults()));
items.push(SlashItem::Heading("Block".into()));
items.push(SlashItem::Row(SlashRow {
label: "Duplicate".into(),
icon: Some(glyph::CopyPlus.into()),
action: SlashAction::Run(Rc::new(|at: SlashAt, _, cx| {
at.editor
.update(cx, |editor, cx| editor.duplicate_block(at.block, cx))
.ok();
})),
}));
items.push(SlashItem::Row(SlashRow {
label: "Delete".into(),
icon: Some(glyph::Trash.into()),
action: SlashAction::Run(Rc::new(|at: SlashAt, _, cx| {
at.editor
.update(cx, |editor, cx| editor.remove_block(at.block, cx))
.ok();
})),
}));
items
}
pub(crate) struct Installed(pub Vec<SlashItem>);
impl Global for Installed {}
pub(crate) fn installed(cx: &App) -> Vec<SlashItem> {
cx.try_global::<Installed>()
.map_or_else(defaults, |Installed(items)| items.clone())
}