1use crate::AddBlockToListDto;
4use crate::CreateListDto;
5use crate::CreateListResultDto;
6use crate::DeleteTextDto;
7use crate::DeleteTextResultDto;
8use crate::InsertBlockDto;
9use crate::InsertBlockResultDto;
10use crate::InsertDjotAtPositionDto;
11use crate::InsertDjotAtPositionResultDto;
12use crate::InsertFormattedTextDto;
13use crate::InsertFormattedTextResultDto;
14use crate::InsertFragmentDto;
15use crate::InsertFragmentResultDto;
16use crate::InsertFrameDto;
17use crate::InsertFrameResultDto;
18use crate::InsertHtmlAtPositionDto;
19use crate::InsertHtmlAtPositionResultDto;
20use crate::InsertImageDto;
21use crate::InsertImageResultDto;
22use crate::InsertListDto;
23use crate::InsertListResultDto;
24use crate::InsertMarkdownAtPositionDto;
25use crate::InsertMarkdownAtPositionResultDto;
26use crate::InsertTableColumnDto;
27use crate::InsertTableColumnResultDto;
28use crate::InsertTableDto;
29use crate::InsertTableResultDto;
30use crate::InsertTableRowDto;
31use crate::InsertTableRowResultDto;
32use crate::InsertTextDto;
33use crate::InsertTextResultDto;
34use crate::MergeTableCellsDto;
35use crate::MergeTableCellsResultDto;
36use crate::RemoveBlockFromListDto;
37use crate::RemoveTableColumnDto;
38use crate::RemoveTableColumnResultDto;
39use crate::RemoveTableDto;
40use crate::RemoveTableRowDto;
41use crate::RemoveTableRowResultDto;
42use crate::SplitTableCellDto;
43use crate::SplitTableCellResultDto;
44use crate::UnwrapBlockFromFrameDto;
45use crate::UnwrapBlockFromFrameResultDto;
46use crate::UnwrapFrameDto;
47use crate::UnwrapFrameResultDto;
48use crate::WrapBlocksInFrameDto;
49use crate::WrapBlocksInFrameResultDto;
50use crate::units_of_work::add_block_to_list_uow::AddBlockToListUnitOfWorkFactory;
51use crate::units_of_work::create_list_uow::CreateListUnitOfWorkFactory;
52use crate::units_of_work::delete_text_uow::DeleteTextUnitOfWorkFactory;
53use crate::units_of_work::insert_block_uow::InsertBlockUnitOfWorkFactory;
54use crate::units_of_work::insert_djot_at_position_uow::InsertDjotAtPositionUnitOfWorkFactory;
55use crate::units_of_work::insert_formatted_text_uow::InsertFormattedTextUnitOfWorkFactory;
56use crate::units_of_work::insert_fragment_uow::InsertFragmentUnitOfWorkFactory;
57use crate::units_of_work::insert_frame_uow::InsertFrameUnitOfWorkFactory;
58use crate::units_of_work::insert_html_at_position_uow::InsertHtmlAtPositionUnitOfWorkFactory;
59use crate::units_of_work::insert_image_uow::InsertImageUnitOfWorkFactory;
60use crate::units_of_work::insert_list_uow::InsertListUnitOfWorkFactory;
61use crate::units_of_work::insert_markdown_at_position_uow::InsertMarkdownAtPositionUnitOfWorkFactory;
62use crate::units_of_work::insert_table_column_uow::InsertTableColumnUnitOfWorkFactory;
63use crate::units_of_work::insert_table_row_uow::InsertTableRowUnitOfWorkFactory;
64use crate::units_of_work::insert_table_uow::InsertTableUnitOfWorkFactory;
65use crate::units_of_work::insert_text_uow::InsertTextUnitOfWorkFactory;
66use crate::units_of_work::merge_table_cells_uow::MergeTableCellsUnitOfWorkFactory;
67use crate::units_of_work::remove_block_from_list_uow::RemoveBlockFromListUnitOfWorkFactory;
68use crate::units_of_work::remove_table_column_uow::RemoveTableColumnUnitOfWorkFactory;
69use crate::units_of_work::remove_table_row_uow::RemoveTableRowUnitOfWorkFactory;
70use crate::units_of_work::remove_table_uow::RemoveTableUnitOfWorkFactory;
71use crate::units_of_work::split_table_cell_uow::SplitTableCellUnitOfWorkFactory;
72use crate::units_of_work::unwrap_block_from_frame_uow::UnwrapBlockFromFrameUnitOfWorkFactory;
73use crate::units_of_work::unwrap_frame_uow::UnwrapFrameUnitOfWorkFactory;
74use crate::units_of_work::wrap_blocks_in_frame_uow::WrapBlocksInFrameUnitOfWorkFactory;
75use crate::use_cases::add_block_to_list_uc::AddBlockToListUseCase;
76use crate::use_cases::create_list_uc::CreateListUseCase;
77use crate::use_cases::delete_text_uc::DeleteTextUseCase;
78use crate::use_cases::insert_block_uc::InsertBlockUseCase;
79use crate::use_cases::insert_djot_at_position_uc::InsertDjotAtPositionUseCase;
80use crate::use_cases::insert_formatted_text_uc::InsertFormattedTextUseCase;
81use crate::use_cases::insert_fragment_uc::InsertFragmentUseCase;
82use crate::use_cases::insert_frame_uc::InsertFrameUseCase;
83use crate::use_cases::insert_html_at_position_uc::InsertHtmlAtPositionUseCase;
84use crate::use_cases::insert_image_uc::InsertImageUseCase;
85use crate::use_cases::insert_list_uc::InsertListUseCase;
86use crate::use_cases::insert_markdown_at_position_uc::InsertMarkdownAtPositionUseCase;
87use crate::use_cases::insert_table_column_uc::InsertTableColumnUseCase;
88use crate::use_cases::insert_table_row_uc::InsertTableRowUseCase;
89use crate::use_cases::insert_table_uc::InsertTableUseCase;
90use crate::use_cases::insert_text_uc::InsertTextUseCase;
91use crate::use_cases::merge_table_cells_uc::MergeTableCellsUseCase;
92use crate::use_cases::remove_block_from_list_uc::RemoveBlockFromListUseCase;
93use crate::use_cases::remove_table_column_uc::RemoveTableColumnUseCase;
94use crate::use_cases::remove_table_row_uc::RemoveTableRowUseCase;
95use crate::use_cases::remove_table_uc::RemoveTableUseCase;
96use crate::use_cases::split_table_cell_uc::SplitTableCellUseCase;
97use crate::use_cases::unwrap_block_from_frame_uc::UnwrapBlockFromFrameUseCase;
98use crate::use_cases::unwrap_frame_uc::UnwrapFrameUseCase;
99use crate::use_cases::wrap_blocks_in_frame_uc::WrapBlocksInFrameUseCase;
100use anyhow::Result;
101use common::event::{Event, Origin};
102
103use common::event::DocumentEditingEvent::AddBlockToList;
104use common::event::DocumentEditingEvent::CreateList;
105use common::event::DocumentEditingEvent::DeleteText;
106use common::event::DocumentEditingEvent::InsertBlock;
107use common::event::DocumentEditingEvent::InsertDjotAtPosition;
108use common::event::DocumentEditingEvent::InsertFormattedText;
109use common::event::DocumentEditingEvent::InsertFragment;
110use common::event::DocumentEditingEvent::InsertFrame;
111use common::event::DocumentEditingEvent::InsertHtmlAtPosition;
112use common::event::DocumentEditingEvent::InsertImage;
113use common::event::DocumentEditingEvent::InsertList;
114use common::event::DocumentEditingEvent::InsertMarkdownAtPosition;
115use common::event::DocumentEditingEvent::InsertTable;
116use common::event::DocumentEditingEvent::InsertTableColumn;
117use common::event::DocumentEditingEvent::InsertTableRow;
118use common::event::DocumentEditingEvent::InsertText;
119use common::event::DocumentEditingEvent::MergeTableCells;
120use common::event::DocumentEditingEvent::RemoveBlockFromList;
121use common::event::DocumentEditingEvent::RemoveTable;
122use common::event::DocumentEditingEvent::RemoveTableColumn;
123use common::event::DocumentEditingEvent::RemoveTableRow;
124use common::event::DocumentEditingEvent::SplitTableCell;
125use common::event::DocumentEditingEvent::UnwrapBlockFromFrame;
126use common::event::DocumentEditingEvent::UnwrapFrame;
127use common::event::DocumentEditingEvent::WrapBlocksInFrame;
128
129use common::undo_redo::UndoRedoManager;
130use common::{database::db_context::DbContext, event::EventHub};
131use std::sync::Arc;
132
133pub fn insert_text(
134 db_context: &DbContext,
135 event_hub: &Arc<EventHub>,
136 undo_redo_manager: &mut UndoRedoManager,
137 stack_id: Option<u64>,
138 dto: &InsertTextDto,
139) -> Result<InsertTextResultDto> {
140 let uow_context = InsertTextUnitOfWorkFactory::new(db_context, event_hub);
141 let mut uc = InsertTextUseCase::new(Box::new(uow_context));
142 let return_dto = uc.execute(dto)?;
143 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
144 event_hub.send_event(Event {
146 origin: Origin::DocumentEditing(InsertText),
147 ids: vec![],
148 data: None,
149 });
150 Ok(return_dto)
151}
152
153pub fn delete_text(
154 db_context: &DbContext,
155 event_hub: &Arc<EventHub>,
156 undo_redo_manager: &mut UndoRedoManager,
157 stack_id: Option<u64>,
158 dto: &DeleteTextDto,
159) -> Result<DeleteTextResultDto> {
160 let uow_context = DeleteTextUnitOfWorkFactory::new(db_context, event_hub);
161 let mut uc = DeleteTextUseCase::new(Box::new(uow_context));
162 let return_dto = uc.execute(dto)?;
163 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
164 event_hub.send_event(Event {
166 origin: Origin::DocumentEditing(DeleteText),
167 ids: vec![],
168 data: None,
169 });
170 Ok(return_dto)
171}
172
173pub fn insert_block(
174 db_context: &DbContext,
175 event_hub: &Arc<EventHub>,
176 undo_redo_manager: &mut UndoRedoManager,
177 stack_id: Option<u64>,
178 dto: &InsertBlockDto,
179) -> Result<InsertBlockResultDto> {
180 let uow_context = InsertBlockUnitOfWorkFactory::new(db_context, event_hub);
181 let mut uc = InsertBlockUseCase::new(Box::new(uow_context));
182 let return_dto = uc.execute(dto)?;
183 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
184 event_hub.send_event(Event {
186 origin: Origin::DocumentEditing(InsertBlock),
187 ids: vec![],
188 data: None,
189 });
190 Ok(return_dto)
191}
192
193pub fn insert_image(
194 db_context: &DbContext,
195 event_hub: &Arc<EventHub>,
196 undo_redo_manager: &mut UndoRedoManager,
197 stack_id: Option<u64>,
198 dto: &InsertImageDto,
199) -> Result<InsertImageResultDto> {
200 let uow_context = InsertImageUnitOfWorkFactory::new(db_context, event_hub);
201 let mut uc = InsertImageUseCase::new(Box::new(uow_context));
202 let return_dto = uc.execute(dto)?;
203 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
204 event_hub.send_event(Event {
206 origin: Origin::DocumentEditing(InsertImage),
207 ids: vec![],
208 data: None,
209 });
210 Ok(return_dto)
211}
212
213pub fn insert_frame(
214 db_context: &DbContext,
215 event_hub: &Arc<EventHub>,
216 undo_redo_manager: &mut UndoRedoManager,
217 stack_id: Option<u64>,
218 dto: &InsertFrameDto,
219) -> Result<InsertFrameResultDto> {
220 let uow_context = InsertFrameUnitOfWorkFactory::new(db_context, event_hub);
221 let mut uc = InsertFrameUseCase::new(Box::new(uow_context));
222 let return_dto = uc.execute(dto)?;
223 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
224 event_hub.send_event(Event {
226 origin: Origin::DocumentEditing(InsertFrame),
227 ids: vec![],
228 data: None,
229 });
230 Ok(return_dto)
231}
232
233pub fn insert_formatted_text(
234 db_context: &DbContext,
235 event_hub: &Arc<EventHub>,
236 undo_redo_manager: &mut UndoRedoManager,
237 stack_id: Option<u64>,
238 dto: &InsertFormattedTextDto,
239) -> Result<InsertFormattedTextResultDto> {
240 let uow_context = InsertFormattedTextUnitOfWorkFactory::new(db_context, event_hub);
241 let mut uc = InsertFormattedTextUseCase::new(Box::new(uow_context));
242 let return_dto = uc.execute(dto)?;
243 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
244 event_hub.send_event(Event {
246 origin: Origin::DocumentEditing(InsertFormattedText),
247 ids: vec![],
248 data: None,
249 });
250 Ok(return_dto)
251}
252
253pub fn create_list(
254 db_context: &DbContext,
255 event_hub: &Arc<EventHub>,
256 undo_redo_manager: &mut UndoRedoManager,
257 stack_id: Option<u64>,
258 dto: &CreateListDto,
259) -> Result<CreateListResultDto> {
260 let uow_context = CreateListUnitOfWorkFactory::new(db_context, event_hub);
261 let mut uc = CreateListUseCase::new(Box::new(uow_context));
262 let return_dto = uc.execute(dto)?;
263 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
264 event_hub.send_event(Event {
266 origin: Origin::DocumentEditing(CreateList),
267 ids: vec![],
268 data: None,
269 });
270 Ok(return_dto)
271}
272
273pub fn insert_list(
274 db_context: &DbContext,
275 event_hub: &Arc<EventHub>,
276 undo_redo_manager: &mut UndoRedoManager,
277 stack_id: Option<u64>,
278 dto: &InsertListDto,
279) -> Result<InsertListResultDto> {
280 let uow_context = InsertListUnitOfWorkFactory::new(db_context, event_hub);
281 let mut uc = InsertListUseCase::new(Box::new(uow_context));
282 let return_dto = uc.execute(dto)?;
283 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
284 event_hub.send_event(Event {
286 origin: Origin::DocumentEditing(InsertList),
287 ids: vec![],
288 data: None,
289 });
290 Ok(return_dto)
291}
292
293pub fn insert_fragment(
294 db_context: &DbContext,
295 event_hub: &Arc<EventHub>,
296 undo_redo_manager: &mut UndoRedoManager,
297 stack_id: Option<u64>,
298 dto: &InsertFragmentDto,
299) -> Result<InsertFragmentResultDto> {
300 let uow_context = InsertFragmentUnitOfWorkFactory::new(db_context, event_hub);
301 let mut uc = InsertFragmentUseCase::new(Box::new(uow_context));
302 let return_dto = uc.execute(dto)?;
303 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
304 event_hub.send_event(Event {
306 origin: Origin::DocumentEditing(InsertFragment),
307 ids: vec![],
308 data: None,
309 });
310 Ok(return_dto)
311}
312
313pub fn insert_html_at_position(
314 db_context: &DbContext,
315 event_hub: &Arc<EventHub>,
316 undo_redo_manager: &mut UndoRedoManager,
317 stack_id: Option<u64>,
318 dto: &InsertHtmlAtPositionDto,
319) -> Result<InsertHtmlAtPositionResultDto> {
320 let uow_context = InsertHtmlAtPositionUnitOfWorkFactory::new(db_context, event_hub);
321 let mut uc = InsertHtmlAtPositionUseCase::new(Box::new(uow_context));
322 let return_dto = uc.execute(dto)?;
323 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
324 event_hub.send_event(Event {
326 origin: Origin::DocumentEditing(InsertHtmlAtPosition),
327 ids: vec![],
328 data: None,
329 });
330 Ok(return_dto)
331}
332
333pub fn insert_markdown_at_position(
334 db_context: &DbContext,
335 event_hub: &Arc<EventHub>,
336 undo_redo_manager: &mut UndoRedoManager,
337 stack_id: Option<u64>,
338 dto: &InsertMarkdownAtPositionDto,
339) -> Result<InsertMarkdownAtPositionResultDto> {
340 let uow_context = InsertMarkdownAtPositionUnitOfWorkFactory::new(db_context, event_hub);
341 let mut uc = InsertMarkdownAtPositionUseCase::new(Box::new(uow_context));
342 let return_dto = uc.execute(dto)?;
343 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
344 event_hub.send_event(Event {
346 origin: Origin::DocumentEditing(InsertMarkdownAtPosition),
347 ids: vec![],
348 data: None,
349 });
350 Ok(return_dto)
351}
352
353pub fn insert_djot_at_position(
354 db_context: &DbContext,
355 event_hub: &Arc<EventHub>,
356 undo_redo_manager: &mut UndoRedoManager,
357 stack_id: Option<u64>,
358 dto: &InsertDjotAtPositionDto,
359) -> Result<InsertDjotAtPositionResultDto> {
360 let uow_context = InsertDjotAtPositionUnitOfWorkFactory::new(db_context, event_hub);
361 let mut uc = InsertDjotAtPositionUseCase::new(Box::new(uow_context));
362 let return_dto = uc.execute(dto)?;
363 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
364 event_hub.send_event(Event {
365 origin: Origin::DocumentEditing(InsertDjotAtPosition),
366 ids: vec![],
367 data: None,
368 });
369 Ok(return_dto)
370}
371
372pub fn insert_table(
373 db_context: &DbContext,
374 event_hub: &Arc<EventHub>,
375 undo_redo_manager: &mut UndoRedoManager,
376 stack_id: Option<u64>,
377 dto: &InsertTableDto,
378) -> Result<InsertTableResultDto> {
379 let uow_context = InsertTableUnitOfWorkFactory::new(db_context, event_hub);
380 let mut uc = InsertTableUseCase::new(Box::new(uow_context));
381 let return_dto = uc.execute(dto)?;
382 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
383 event_hub.send_event(Event {
385 origin: Origin::DocumentEditing(InsertTable),
386 ids: vec![],
387 data: None,
388 });
389 Ok(return_dto)
390}
391
392pub fn remove_table(
393 db_context: &DbContext,
394 event_hub: &Arc<EventHub>,
395 undo_redo_manager: &mut UndoRedoManager,
396 stack_id: Option<u64>,
397 dto: &RemoveTableDto,
398) -> Result<()> {
399 let uow_context = RemoveTableUnitOfWorkFactory::new(db_context, event_hub);
400 let mut uc = RemoveTableUseCase::new(Box::new(uow_context));
401 uc.execute(dto)?;
402 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
403 event_hub.send_event(Event {
405 origin: Origin::DocumentEditing(RemoveTable),
406 ids: vec![],
407 data: None,
408 });
409 Ok(())
410}
411
412pub fn insert_table_row(
413 db_context: &DbContext,
414 event_hub: &Arc<EventHub>,
415 undo_redo_manager: &mut UndoRedoManager,
416 stack_id: Option<u64>,
417 dto: &InsertTableRowDto,
418) -> Result<InsertTableRowResultDto> {
419 let uow_context = InsertTableRowUnitOfWorkFactory::new(db_context, event_hub);
420 let mut uc = InsertTableRowUseCase::new(Box::new(uow_context));
421 let return_dto = uc.execute(dto)?;
422 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
423 event_hub.send_event(Event {
425 origin: Origin::DocumentEditing(InsertTableRow),
426 ids: vec![],
427 data: None,
428 });
429 Ok(return_dto)
430}
431
432pub fn insert_table_column(
433 db_context: &DbContext,
434 event_hub: &Arc<EventHub>,
435 undo_redo_manager: &mut UndoRedoManager,
436 stack_id: Option<u64>,
437 dto: &InsertTableColumnDto,
438) -> Result<InsertTableColumnResultDto> {
439 let uow_context = InsertTableColumnUnitOfWorkFactory::new(db_context, event_hub);
440 let mut uc = InsertTableColumnUseCase::new(Box::new(uow_context));
441 let return_dto = uc.execute(dto)?;
442 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
443 event_hub.send_event(Event {
445 origin: Origin::DocumentEditing(InsertTableColumn),
446 ids: vec![],
447 data: None,
448 });
449 Ok(return_dto)
450}
451
452pub fn remove_table_row(
453 db_context: &DbContext,
454 event_hub: &Arc<EventHub>,
455 undo_redo_manager: &mut UndoRedoManager,
456 stack_id: Option<u64>,
457 dto: &RemoveTableRowDto,
458) -> Result<RemoveTableRowResultDto> {
459 let uow_context = RemoveTableRowUnitOfWorkFactory::new(db_context, event_hub);
460 let mut uc = RemoveTableRowUseCase::new(Box::new(uow_context));
461 let return_dto = uc.execute(dto)?;
462 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
463 event_hub.send_event(Event {
465 origin: Origin::DocumentEditing(RemoveTableRow),
466 ids: vec![],
467 data: None,
468 });
469 Ok(return_dto)
470}
471
472pub fn remove_table_column(
473 db_context: &DbContext,
474 event_hub: &Arc<EventHub>,
475 undo_redo_manager: &mut UndoRedoManager,
476 stack_id: Option<u64>,
477 dto: &RemoveTableColumnDto,
478) -> Result<RemoveTableColumnResultDto> {
479 let uow_context = RemoveTableColumnUnitOfWorkFactory::new(db_context, event_hub);
480 let mut uc = RemoveTableColumnUseCase::new(Box::new(uow_context));
481 let return_dto = uc.execute(dto)?;
482 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
483 event_hub.send_event(Event {
485 origin: Origin::DocumentEditing(RemoveTableColumn),
486 ids: vec![],
487 data: None,
488 });
489 Ok(return_dto)
490}
491
492pub fn merge_table_cells(
493 db_context: &DbContext,
494 event_hub: &Arc<EventHub>,
495 undo_redo_manager: &mut UndoRedoManager,
496 stack_id: Option<u64>,
497 dto: &MergeTableCellsDto,
498) -> Result<MergeTableCellsResultDto> {
499 let uow_context = MergeTableCellsUnitOfWorkFactory::new(db_context, event_hub);
500 let mut uc = MergeTableCellsUseCase::new(Box::new(uow_context));
501 let return_dto = uc.execute(dto)?;
502 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
503 event_hub.send_event(Event {
505 origin: Origin::DocumentEditing(MergeTableCells),
506 ids: vec![],
507 data: None,
508 });
509 Ok(return_dto)
510}
511
512pub fn split_table_cell(
513 db_context: &DbContext,
514 event_hub: &Arc<EventHub>,
515 undo_redo_manager: &mut UndoRedoManager,
516 stack_id: Option<u64>,
517 dto: &SplitTableCellDto,
518) -> Result<SplitTableCellResultDto> {
519 let uow_context = SplitTableCellUnitOfWorkFactory::new(db_context, event_hub);
520 let mut uc = SplitTableCellUseCase::new(Box::new(uow_context));
521 let return_dto = uc.execute(dto)?;
522 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
523 event_hub.send_event(Event {
525 origin: Origin::DocumentEditing(SplitTableCell),
526 ids: vec![],
527 data: None,
528 });
529 Ok(return_dto)
530}
531
532pub fn add_block_to_list(
533 db_context: &DbContext,
534 event_hub: &Arc<EventHub>,
535 undo_redo_manager: &mut UndoRedoManager,
536 stack_id: Option<u64>,
537 dto: &AddBlockToListDto,
538) -> Result<()> {
539 let uow_context = AddBlockToListUnitOfWorkFactory::new(db_context, event_hub);
540 let mut uc = AddBlockToListUseCase::new(Box::new(uow_context));
541 uc.execute(dto)?;
542 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
543 event_hub.send_event(Event {
544 origin: Origin::DocumentEditing(AddBlockToList),
545 ids: vec![],
546 data: None,
547 });
548 Ok(())
549}
550
551pub fn remove_block_from_list(
552 db_context: &DbContext,
553 event_hub: &Arc<EventHub>,
554 undo_redo_manager: &mut UndoRedoManager,
555 stack_id: Option<u64>,
556 dto: &RemoveBlockFromListDto,
557) -> Result<()> {
558 let uow_context = RemoveBlockFromListUnitOfWorkFactory::new(db_context, event_hub);
559 let mut uc = RemoveBlockFromListUseCase::new(Box::new(uow_context));
560 uc.execute(dto)?;
561 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
562 event_hub.send_event(Event {
563 origin: Origin::DocumentEditing(RemoveBlockFromList),
564 ids: vec![],
565 data: None,
566 });
567 Ok(())
568}
569
570pub fn wrap_blocks_in_frame(
571 db_context: &DbContext,
572 event_hub: &Arc<EventHub>,
573 undo_redo_manager: &mut UndoRedoManager,
574 stack_id: Option<u64>,
575 dto: &WrapBlocksInFrameDto,
576) -> Result<WrapBlocksInFrameResultDto> {
577 let uow_context = WrapBlocksInFrameUnitOfWorkFactory::new(db_context, event_hub);
578 let mut uc = WrapBlocksInFrameUseCase::new(Box::new(uow_context));
579 let return_dto = uc.execute(dto)?;
580 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
581 event_hub.send_event(Event {
582 origin: Origin::DocumentEditing(WrapBlocksInFrame),
583 ids: vec![],
584 data: None,
585 });
586 Ok(return_dto)
587}
588
589pub fn unwrap_frame(
590 db_context: &DbContext,
591 event_hub: &Arc<EventHub>,
592 undo_redo_manager: &mut UndoRedoManager,
593 stack_id: Option<u64>,
594 dto: &UnwrapFrameDto,
595) -> Result<UnwrapFrameResultDto> {
596 let uow_context = UnwrapFrameUnitOfWorkFactory::new(db_context, event_hub);
597 let mut uc = UnwrapFrameUseCase::new(Box::new(uow_context));
598 let return_dto = uc.execute(dto)?;
599 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
600 event_hub.send_event(Event {
601 origin: Origin::DocumentEditing(UnwrapFrame),
602 ids: vec![],
603 data: None,
604 });
605 Ok(return_dto)
606}
607
608pub fn unwrap_block_from_frame(
609 db_context: &DbContext,
610 event_hub: &Arc<EventHub>,
611 undo_redo_manager: &mut UndoRedoManager,
612 stack_id: Option<u64>,
613 dto: &UnwrapBlockFromFrameDto,
614) -> Result<UnwrapBlockFromFrameResultDto> {
615 let uow_context = UnwrapBlockFromFrameUnitOfWorkFactory::new(db_context, event_hub);
616 let mut uc = UnwrapBlockFromFrameUseCase::new(Box::new(uow_context));
617 let return_dto = uc.execute(dto)?;
618 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
619 event_hub.send_event(Event {
620 origin: Origin::DocumentEditing(UnwrapBlockFromFrame),
621 ids: vec![],
622 data: None,
623 });
624 Ok(return_dto)
625}