Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions lib/app/models/data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,15 @@ class Data {

List<Task> _completedData() {
var data = _allData().where(
(task) => task.status == 'completed' || task.status == 'deleted');
(task) => task.status == 'completed');
return [
for (var task in data) task.rebuild((b) => b..id = 0),
];
}

List<Task> completedData() {
var data = _allData().where(
(task) => task.status == 'completed' || task.status == 'deleted');
(task) => task.status == 'completed');
return data
.toList()
.asMap()
Expand All @@ -85,8 +85,19 @@ class Data {
];
}

List<Task> deletedData() {
var data = _allData().where(
(task) => task.status == 'deleted');
return data
.toList()
.asMap()
.entries
.map((entry) => entry.value.rebuild((b) => b..id = entry.key + 1))
.toList();
}

List<Task> allData() {
var data = pendingData()..addAll(_completedData());
var data = pendingData()..addAll(_completedData())..addAll(deletedData());
return data;
}

Expand Down
4 changes: 4 additions & 0 deletions lib/app/models/filters.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ class Filters {
const Filters({
required this.pendingFilter,
required this.waitingFilter,
required this.deletedFilter,
required this.togglePendingFilter,
required this.toggleWaitingFilter,
required this.tagFilters,
Expand All @@ -14,8 +15,11 @@ class Filters {

final bool pendingFilter;
final bool waitingFilter;
final bool deletedFilter;

final void Function() togglePendingFilter;
final void Function() toggleWaitingFilter;

final TagFilters tagFilters;
final dynamic projects;
final String projectFilter;
Expand Down
131 changes: 79 additions & 52 deletions lib/app/modules/home/controllers/home_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ class HomeController extends GetxController {
late Storage storage;
final RxBool pendingFilter = false.obs;
final RxBool waitingFilter = false.obs;
final RxBool deletedFilter = false.obs;

final RxString projectFilter = ''.obs;
final RxBool tagUnion = false.obs;
final RxString selectedSort = ''.obs;
Expand Down Expand Up @@ -95,6 +97,7 @@ class HomeController extends GetxController {
everAll([
pendingFilter,
waitingFilter,
deletedFilter,
projectFilter,
tagUnion,
selectedSort,
Expand Down Expand Up @@ -210,92 +213,98 @@ class HomeController extends GetxController {
}

void _profileSet() {
pendingFilter.value = Query(storage.tabs.tab()).getPendingFilter();
if (!Query(storage.tabs.tab()).getWaitingFilter()) {
waitingFilter.value = Query(storage.tabs.tab()).getWaitingFilter();
} else {
Query(storage.tabs.tab()).toggleWaitingFilter();
waitingFilter.value = Query(storage.tabs.tab()).getWaitingFilter();
}
final bool isPending = Query(storage.tabs.tab()).getPendingFilter();

pendingFilter.value = isPending;
deletedFilter.value = false;
waitingFilter.value = Query(storage.tabs.tab()).getWaitingFilter();

projectFilter.value = Query(storage.tabs.tab()).projectFilter();
tagUnion.value = Query(storage.tabs.tab()).tagUnion();
selectedSort.value = Query(storage.tabs.tab()).getSelectedSort();
selectedTags.addAll(Query(storage.tabs.tab()).getSelectedTags());
selectedTags.assignAll(Query(storage.tabs.tab()).getSelectedTags());

_refreshTasks();
pendingTags.value = _pendingTags();
projects.value = _projects();

if (searchVisible.value) {
toggleSearch();
}
}

void _refreshTasks() {
List<Task> baseTasks;

if (pendingFilter.value) {
queriedTasks.value = storage.data
.pendingData()
.where((task) => task.status == 'pending')
.toList();
baseTasks = storage.data.pendingData();
} else if (deletedFilter.value) {
baseTasks = storage.data.deletedData();
} else {
queriedTasks.value = storage.data.completedData();
baseTasks = storage.data.completedData();
}

queriedTasks.assignAll(baseTasks);

if (waitingFilter.value) {
var currentTime = DateTime.now();
queriedTasks.value = queriedTasks
.where((task) => task.wait != null && task.wait!.isAfter(currentTime))
.toList();
final now = DateTime.now();
queriedTasks.value = queriedTasks.where((task) {
return task.wait != null && task.wait!.isAfter(now);
}).toList();
}

if (projectFilter.value.isNotEmpty) {
queriedTasks.value = queriedTasks.where((task) {
if (task.project == null) {
return false;
} else {
return task.project!.startsWith(projectFilter.value);
}
return task.project?.startsWith(projectFilter.value) ?? false;
}).toList();
}

queriedTasks.value = queriedTasks.where((task) {
var tags = task.tags?.toSet() ?? {};
final tags = task.tags?.toSet() ?? <String>{};

if (selectedTags.isEmpty) return true;

if (tagUnion.value) {
if (selectedTags.isEmpty) {
return true;
}
return selectedTags.any((tag) => (tag.startsWith('+'))
? tags.contains(tag.substring(1))
: !tags.contains(tag.substring(1)));
return selectedTags.any((tag) {
final clean = tag.substring(1);
return tag.startsWith('+')
? tags.contains(clean)
: !tags.contains(clean);
});
} else {
return selectedTags.every((tag) => (tag.startsWith('+'))
? tags.contains(tag.substring(1))
: !tags.contains(tag.substring(1)));
return selectedTags.every((tag) {
final clean = tag.substring(1);
return tag.startsWith('+')
? tags.contains(clean)
: !tags.contains(clean);
});
}
}).toList();

var sortColumn =
selectedSort.value.substring(0, selectedSort.value.length - 1);
var ascending = selectedSort.value.endsWith('+');
queriedTasks.sort((a, b) {
int result;
if (sortColumn == 'id') {
result = a.id!.compareTo(b.id!);
} else {
result = compareTasks(sortColumn)(a, b);
}
return ascending ? result : -result;
});
if (selectedSort.value.isNotEmpty) {
final column =
selectedSort.value.substring(0, selectedSort.value.length - 1);
final ascending = selectedSort.value.endsWith('+');

queriedTasks.sort((a, b) {
final result = column == 'id'
? a.id!.compareTo(b.id!)
: compareTasks(column)(a, b);
return ascending ? result : -result;
});
}

searchedTasks.assignAll(queriedTasks);
var searchTerm = searchController.text;
if (searchVisible.value) {
searchedTasks.value = searchedTasks
.where((task) =>
task.description.contains(searchTerm) ||
(task.annotations?.asList() ?? []).any(
(annotation) => annotation.description.contains(searchTerm)))
.toList();
if (searchVisible.value && searchController.text.isNotEmpty) {
final term = searchController.text.toLowerCase();
searchedTasks.value = searchedTasks.where((task) {
return task.description.toLowerCase().contains(term) ||
(task.annotations?.asList() ?? []).any(
(a) => a.description.toLowerCase().contains(term),
);
}).toList();
}

pendingTags.value = _pendingTags();
projects.value = _projects();
}
Expand Down Expand Up @@ -374,6 +383,23 @@ class HomeController extends GetxController {
_refreshTasks();
}

void toggleStatusFilter() {
if (pendingFilter.value) {
// Pending → Completed
pendingFilter.value = false;
deletedFilter.value = false;
} else if (!pendingFilter.value && !deletedFilter.value) {
// Completed → Deleted
deletedFilter.value = true;
} else {
// Deleted → Pending
pendingFilter.value = true;
deletedFilter.value = false;
}

_refreshTasks();
}

Task getTask(String uuid) {
return storage.data.getTask(uuid);
}
Expand Down Expand Up @@ -611,6 +637,7 @@ class HomeController extends GetxController {
var filters = Filters(
pendingFilter: pendingFilter.value,
waitingFilter: waitingFilter.value,
deletedFilter: deletedFilter.value,
togglePendingFilter: togglePendingFilter,
toggleWaitingFilter: toggleWaitingFilter,
projects: projects,
Expand Down
64 changes: 35 additions & 29 deletions lib/app/modules/home/views/filter_drawer_home_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -80,44 +80,50 @@ class FilterDrawer extends StatelessWidget {
border: Border.all(color: TaskWarriorColors.borderColor),
),
child: ListTile(
contentPadding: const EdgeInsets.only(
left: 8,
),
contentPadding: const EdgeInsets.only(left: 8),
onTap:
homeController.toggleStatusFilter,
title: RichText(
key: homeController.statusKey,
maxLines: 2,
text: TextSpan(
children: <TextSpan>[
children: [
TextSpan(
text:
'${SentenceManager(currentLanguage: homeController.selectedLanguage.value).sentences.filterDrawerStatus} : ',
style: TextStyle(
fontFamily: FontFamily.poppins,
fontSize: TaskWarriorFonts.fontSizeMedium,
color: tColors.primaryTextColor,
)),
text:
'${SentenceManager(currentLanguage: homeController.selectedLanguage.value).sentences.filterDrawerStatus} : ',
style: TextStyle(
fontFamily: FontFamily.poppins,
fontSize: TaskWarriorFonts.fontSizeMedium,
color: tColors.primaryTextColor,
),
),
TextSpan(
text: filters.pendingFilter
? SentenceManager(
currentLanguage: homeController
.selectedLanguage.value)
.sentences
.filterDrawerPending
: SentenceManager(
currentLanguage: homeController
.selectedLanguage.value)
.sentences
.filterDrawerCompleted,
style: TextStyle(
fontFamily: FontFamily.poppins,
fontSize: TaskWarriorFonts.fontSizeMedium,
color: tColors.primaryTextColor,
)),
text: filters.deletedFilter
? SentenceManager(
currentLanguage:
homeController.selectedLanguage.value)
.sentences
.filterDrawerDeleted
: filters.pendingFilter
? SentenceManager(
currentLanguage: homeController
.selectedLanguage.value)
.sentences
.filterDrawerPending
: SentenceManager(
currentLanguage: homeController
.selectedLanguage.value)
.sentences
.filterDrawerCompleted,
style: TextStyle(
fontFamily: FontFamily.poppins,
fontSize: TaskWarriorFonts.fontSizeMedium,
color: tColors.primaryTextColor,
),
),
],
),
),
onTap: filters.togglePendingFilter,
textColor: tColors.primaryTextColor,
),
),
const Divider(
Expand Down
2 changes: 2 additions & 0 deletions lib/app/utils/language/bengali_sentences.dart
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ class BengaliSentences extends Sentences {
@override
String get filterDrawerCompleted => 'সম্পন্ন';
@override
String get filterDrawerDeleted => 'মুছে ফেলা হয়েছে';
@override
String get filterDrawerFilterTagBy => 'ট্যাগ দ্বারা ফিল্টার করুন';
@override
String get filterDrawerAND => 'এবং';
Expand Down
2 changes: 2 additions & 0 deletions lib/app/utils/language/english_sentences.dart
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ class EnglishSentences extends Sentences {
@override
String get filterDrawerCompleted => 'Completed';
@override
String get filterDrawerDeleted => 'Deleted';
@override
String get filterDrawerFilterTagBy => 'Filter Tag By';
@override
String get filterDrawerAND => 'AND';
Expand Down
2 changes: 2 additions & 0 deletions lib/app/utils/language/french_sentences.dart
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ class FrenchSentences extends Sentences {
@override
String get filterDrawerCompleted => 'Complété';
@override
String get filterDrawerDeleted => 'Supprimé';
@override
String get filterDrawerFilterTagBy => 'Filtrer par tag';
@override
String get filterDrawerAND => 'et';
Expand Down
2 changes: 2 additions & 0 deletions lib/app/utils/language/hindi_sentences.dart
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ class HindiSentences extends Sentences {
@override
String get filterDrawerCompleted => 'पूर्ण';
@override
String get filterDrawerDeleted => 'हटाए गए';
@override
String get filterDrawerFilterTagBy => 'टैग से फ़िल्टर करें';
@override
String get filterDrawerAND => 'और';
Expand Down
2 changes: 2 additions & 0 deletions lib/app/utils/language/marathi_sentences.dart
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ class MarathiSentences extends Sentences {
@override
String get filterDrawerCompleted => 'पूर्ण';
@override
String get filterDrawerDeleted => 'काढून टाकलेले';
@override
String get filterDrawerFilterTagBy => 'टॅगवर फिल्टर करा';
@override
String get filterDrawerAND => 'आणि';
Expand Down
1 change: 1 addition & 0 deletions lib/app/utils/language/sentences.dart
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ abstract class Sentences {
String get filterDrawerShowWaiting;
String get filterDrawerPending;
String get filterDrawerCompleted;
String get filterDrawerDeleted;
String get filterDrawerFilterTagBy;
String get filterDrawerAND;
String get filterDrawerOR;
Expand Down
Loading