Line data Source code
1 : import 'dart:typed_data'; 2 : 3 : import 'package:flutter/material.dart'; 4 : import 'package:mvvm_builder/mvvm_builder.dart'; 5 : import 'package:pal/src/database/entity/helper/helper_entity.dart'; 6 : import 'package:pal/src/services/editor/helper/helper_editor_service.dart'; 7 : import 'package:pal/src/services/pal/pal_state_service.dart'; 8 : import 'package:pal/src/ui/editor/pages/helpers_list/helpers_list_loader.dart'; 9 : import 'package:pal/src/ui/editor/pages/helpers_list/helpers_list_modal.dart'; 10 : import 'package:pal/src/ui/editor/pages/helpers_list/helpers_list_modal_viewmodel.dart'; 11 : import 'package:pal/src/ui/editor/pages/helper_details/helper_details_model.dart'; 12 : 13 : class HelpersListModalPresenter 14 : extends Presenter<HelpersListModalModel, HelpersListModalView> { 15 : final EditorHelperService helperService; 16 : final HelpersListModalLoader loader; 17 : final PalEditModeStateService palEditModeStateService; 18 : 19 2 : HelpersListModalPresenter( 20 : HelpersListModalView viewInterface, { 21 : @required this.loader, 22 : @required this.palEditModeStateService, 23 : @required this.helperService, 24 4 : }) : super(HelpersListModalModel(), viewInterface); 25 : 26 : @override 27 2 : Future onInit() async { 28 2 : this.load(); 29 : } 30 : 31 2 : Future load() async { 32 4 : this.viewModel.isLoading = true; 33 4 : this.viewModel.noMore = false; 34 4 : this.viewModel.loadingMore = false; 35 8 : this.loader.load().then((HelpersListModalModel res) { 36 6 : this.viewModel.helpers = res.helpers; 37 6 : this.viewModel.pageId = res.pageId; 38 4 : this.viewModel.isLoading = false; 39 6 : this.viewModel.pageRouteName = res.pageRouteName; 40 2 : this.refreshView(); 41 : }); 42 : } 43 : 44 0 : void loadMore() { 45 0 : if (!this.viewModel.noMore && !this.viewModel.loadingMore) { 46 0 : this.viewModel.loadingMore = true; 47 0 : this.refreshView(); 48 : 49 0 : this.loader.loadMore(this.viewModel.pageId).then((value) { 50 0 : if (value.isEmpty) { 51 0 : this.viewModel.noMore = true; 52 : } else { 53 0 : this.viewModel.helpers.addAll(value); 54 : } 55 0 : this.viewModel.loadingMore = false; 56 0 : this.refreshView(); 57 : }); 58 : } 59 : } 60 : 61 0 : setImage(ByteData byteData) { 62 0 : this.viewModel.imageBs = byteData.buffer.asUint8List(); 63 0 : this.refreshView(); 64 : } 65 : 66 1 : onClickAdd() async { 67 1 : showEditorBubble(false); 68 : final shouldOpenEditor = 69 5 : await this.viewInterface.openHelperCreationPage(this.viewModel.pageId); 70 : if (shouldOpenEditor != null) { 71 : // Editor is opened, hide bubble 72 0 : showEditorBubble(false); 73 : } else { 74 0 : showEditorBubble(true); 75 : } 76 : } 77 : 78 0 : onClickSettings() async { 79 0 : await this.viewInterface.openAppSettingsPage(); 80 : } 81 : 82 1 : onClickHelper(HelperEntity anHelper) async { 83 1 : showEditorBubble(false); 84 3 : final helperDetailsPopState = await this.viewInterface.openHelperDetailPage( 85 : anHelper, 86 2 : this.viewModel.pageId, 87 2 : this.viewModel.pageRouteName 88 : ); 89 : 90 : if (helperDetailsPopState != null) { 91 : switch (helperDetailsPopState) { 92 0 : case HelperDetailsPopState.deleted: 93 0 : showEditorBubble(true); 94 0 : this.removeHelper(anHelper); 95 : break; 96 0 : case HelperDetailsPopState.editorOpened: 97 0 : showEditorBubble(false); 98 0 : this.viewInterface.popModalDialog(); 99 : break; 100 : default: 101 0 : showEditorBubble(true); 102 : } 103 : } 104 : } 105 : 106 1 : showEditorBubble(bool visible) { 107 3 : this.palEditModeStateService.showEditorBubble.value = visible; 108 1 : this.refreshView(); 109 : } 110 : 111 1 : backupHelpersList() { 112 5 : this.viewModel.backupHelpers = List.from(this.viewModel.helpers); 113 : } 114 : 115 0 : removeHelper(final HelperEntity helper) { 116 0 : this.viewModel.helpers.remove(helper); 117 0 : this.refreshView(); 118 : } 119 : 120 1 : sendNewHelpersOrder( 121 : int oldIndex, 122 : int newIndex, 123 : ) async { 124 1 : Map<String, int> priority = {}; 125 : List<HelperEntity> modifiedHelpers; 126 : 127 1 : if (newIndex < oldIndex) { 128 0 : modifiedHelpers = this.viewModel.helpers.sublist( 129 : newIndex, 130 0 : oldIndex + 1, 131 : ); 132 : } else { 133 4 : if (newIndex < this.viewModel.helpers.length) { 134 1 : newIndex++; 135 : } 136 3 : modifiedHelpers = this.viewModel.helpers.sublist( 137 : oldIndex, 138 : newIndex, 139 : ); 140 : } 141 2 : for (var helper in modifiedHelpers) { 142 1 : priority.putIfAbsent( 143 1 : helper.id, 144 4 : () => this.viewModel.helpers.indexOf(helper), 145 : ); 146 : } 147 : 148 : // Check if changing was succeded or not 149 : try { 150 3 : await this.helperService.updateHelperPriority( 151 2 : this.viewModel.pageId, 152 : priority, 153 : ); 154 : } catch (error) { 155 : // There is an error, revert change 156 4 : this.viewModel.helpers = this.viewModel.backupHelpers; 157 1 : this.refreshView(); 158 : } 159 : } 160 : }