use crate::ecs::{
components::{buffer::EditorView, vim::VimModalState},
events::status::StatusMessageRejected,
events::status::StatusRejectionReason,
events::status::{StatusMessage, StatusMessageRequested},
};
use bevy::prelude::{MessageReader, MessageWriter, Query, With};
pub(super) fn apply_status_message_requests(
mut requests: MessageReader<StatusMessageRequested>,
mut rejected: MessageWriter<StatusMessageRejected>,
mut query: Query<&mut VimModalState, With<EditorView>>,
) {
for request in requests.read() {
let Ok(mut modal_state) = query.get_mut(request.target.get()) else {
let _sent = rejected.write(StatusMessageRejected {
target: request.target,
rejected: request.message.clone(),
reason: StatusRejectionReason::MissingTarget {
target: request.target,
},
});
continue;
};
match &request.message {
StatusMessage::Clear => modal_state.editor.status.clear(),
StatusMessage::Info(message) => modal_state.editor.status.set_info(message.clone()),
StatusMessage::Error(error) => modal_state.editor.status.set_error(*error),
}
}
}