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::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    // Notify that the handling manifest has been loaded
145    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    // Notify that the handling manifest has been loaded
165    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    // Notify that the handling manifest has been loaded
185    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    // Notify that the handling manifest has been loaded
205    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    // Notify that the handling manifest has been loaded
225    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    // Notify that the handling manifest has been loaded
245    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    // Notify that the handling manifest has been loaded
265    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    // Notify that the handling manifest has been loaded
285    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    // Notify that the handling manifest has been loaded
305    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    // Notify that the handling manifest has been loaded
325    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    // Notify that the handling manifest has been loaded
345    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    // Notify that the handling manifest has been loaded
384    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    // Notify that the handling manifest has been loaded
404    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    // Notify that the handling manifest has been loaded
424    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    // Notify that the handling manifest has been loaded
444    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    // Notify that the handling manifest has been loaded
464    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    // Notify that the handling manifest has been loaded
484    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    // Notify that the handling manifest has been loaded
504    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    // Notify that the handling manifest has been loaded
524    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}