-
Notifications
You must be signed in to change notification settings - Fork 12
/
quick_links_viewmodel.dart
85 lines (71 loc) · 2.89 KB
/
quick_links_viewmodel.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Package imports:
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:stacked/stacked.dart';
// Project imports:
import 'package:notredame/core/managers/quick_link_repository.dart';
import 'package:notredame/core/models/quick_link.dart';
import 'package:notredame/core/models/quick_link_data.dart';
import 'package:notredame/locator.dart';
class QuickLinksViewModel extends FutureViewModel<List<QuickLink>> {
/// Localization class of the application.
final AppIntl _appIntl;
/// used to get all links for ETS page
List<QuickLink> quickLinkList = [];
List<QuickLink> deletedQuickLinks = [];
final QuickLinkRepository _quickLinkRepository =
locator<QuickLinkRepository>();
QuickLinksViewModel(AppIntl intl) : _appIntl = intl;
Future<List<QuickLink>> getQuickLinks() async {
List<QuickLinkData> quickLinkDataList = [];
try {
quickLinkDataList =
await _quickLinkRepository.getQuickLinkDataFromCache();
} catch (e) {
// if cache is not initialized, return default list
return _quickLinkRepository.getDefaultQuickLinks(_appIntl);
}
// otherwise, return quickLinks according to the cache
final defaultQuickLinks =
_quickLinkRepository.getDefaultQuickLinks(_appIntl);
quickLinkDataList.sort((a, b) => a.index.compareTo(b.index));
return quickLinkDataList
.map((data) => defaultQuickLinks
.firstWhere((quickLink) => quickLink.id == data.id))
.toList();
}
Future<List<QuickLink>> getDeletedQuickLinks() async {
// Get ids from current quick links
final currentQuickLinkIds = quickLinkList.map((e) => e.id).toList();
// Return those not in current quick links but in default list
return _quickLinkRepository
.getDefaultQuickLinks(_appIntl)
.where((element) => !currentQuickLinkIds.contains(element.id))
.toList();
}
Future deleteQuickLink(int index) async {
final deletedQuickLink = quickLinkList.removeAt(index);
deletedQuickLinks.add(deletedQuickLink);
await _quickLinkRepository.updateQuickLinkDataToCache(quickLinkList);
notifyListeners();
}
Future restoreQuickLink(int index) async {
final deletedQuickLink = deletedQuickLinks.removeAt(index);
quickLinkList.add(deletedQuickLink);
await _quickLinkRepository.updateQuickLinkDataToCache(quickLinkList);
notifyListeners();
}
Future reorderQuickLinks(int oldIndex, int newIndex) async {
final QuickLink item = quickLinkList.removeAt(oldIndex);
quickLinkList.insert(newIndex, item);
await _quickLinkRepository.updateQuickLinkDataToCache(quickLinkList);
notifyListeners();
}
@override
Future<List<QuickLink>> futureToRun() async {
setBusyForObject(quickLinkList, true);
quickLinkList = await getQuickLinks();
deletedQuickLinks = await getDeletedQuickLinks();
setBusyForObject(quickLinkList, false);
return quickLinkList;
}
}