Skip to main content

text_document_editing/
document_editing_controller.rs

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