tasksListSearchProvider top-level property

dynamic tasksListSearchProvider
final

Implementation

final tasksListSearchProvider = FutureProvider.autoDispose
    .family<List<String>, TasksListSearchParams>((ref, params) async {
  final tasksList = await ref.watch(taskListProvider(params.spaceId).future);

  //Return all task list if search text is empty
  if (params.searchText.isEmpty) return tasksList;

  //Return all task list filter if search text is given
  List<String> filteredTaskList = [];
  for (final taskListId in tasksList) {
    //Check search param in task list
    final taskListItem =
        await ref.watch(taskListItemProvider(taskListId).future);
    if (taskListItem
        .name()
        .toLowerCase()
        .contains(params.searchText.toLowerCase())) {
      filteredTaskList.add(taskListId);
      continue;
    }

    //Check search param in task list items data
    final tasks = await ref.watch(taskItemsListProvider(taskListItem).future);
    for (final openTaskItemId in tasks.openTasks) {
      final openTaskItem = await ref.watch(
        taskItemProvider((taskListId: taskListId, taskId: openTaskItemId))
            .future,
      );
      if (openTaskItem
          .title()
          .toLowerCase()
          .contains(params.searchText.toLowerCase())) {
        filteredTaskList.add(taskListId);
        break;
      }
    }
  }
  return filteredTaskList;
});