1use 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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}