Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
mahmoud-eslami committed Jun 10, 2023
2 parents e27d04f + f7f9c9d commit ce8eb1b
Show file tree
Hide file tree
Showing 23 changed files with 417 additions and 179 deletions.
1 change: 1 addition & 0 deletions lib/core/resources/enums/tasks_filter_enums.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
enum TasksFilterEnum { all, unCompleted, completed }
11 changes: 7 additions & 4 deletions lib/di.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import "package:pomodore/features/task_management/domain/usecases/complete_task_
import "package:pomodore/features/task_management/domain/usecases/delete_task_usecase.dart";
import "package:pomodore/features/task_management/domain/usecases/edit_task_usecase.dart";
import "package:pomodore/features/task_management/domain/usecases/get_all_categories_usecase.dart";
import "package:pomodore/features/task_management/domain/usecases/get_all_tasks.dart";
import "package:pomodore/features/task_management/domain/usecases/get_analysis_usecase.dart";
import "package:pomodore/features/task_management/domain/usecases/get_daily_information_usecase.dart";
import "package:pomodore/features/task_management/domain/usecases/get_specific_date_tasks_usecase.dart";
Expand All @@ -55,7 +56,7 @@ import "core/services/database/storage.dart";
import "core/utils/ticker.dart";
import "features/task_management/data/data_sources/tasks_local_data_source.dart";
import "features/task_management/domain/repositories/category_repository.dart";
import "features/task_management/domain/usecases/get_tasks_usecase.dart";
import "features/task_management/domain/usecases/get_uncompleted_tasks_usecase.dart";

final getIt = GetIt.instance;

Expand Down Expand Up @@ -120,7 +121,9 @@ Future inject() async {
.registerSingleton<ChangeSettingsUseCase>(ChangeSettingsUseCase(getIt()));
getIt.registerSingleton<GetDailyInformationUseCase>(
GetDailyInformationUseCase(getIt()));
getIt.registerSingleton<GetTasksUseCase>(GetTasksUseCase(getIt()));
getIt.registerSingleton<GetUnCompletedTasksUseCase>(
GetUnCompletedTasksUseCase(getIt()));
getIt.registerSingleton(GetAllTasksUseCase(getIt()));
getIt.registerSingleton<GetAnalysisUseCase>(GetAnalysisUseCase(getIt()));
getIt.registerSingleton<ChangeLocaleUseCase>(ChangeLocaleUseCase(getIt()));
getIt.registerSingleton<GetLocaleUseCase>(GetLocaleUseCase(getIt()));
Expand Down Expand Up @@ -161,7 +164,7 @@ Future inject() async {
getIt.registerFactory<TasksBloc>(() => TasksBloc(
addTaskUsecase: getIt(),
addCategoryUsecase: getIt(),
getSpecificDateTasks: getIt(),
getAllTasksUseCase: getIt(),
getAllCategories: getIt(),
completeTaskUseCase: getIt(),
deleteTaskUseCase: getIt(),
Expand All @@ -170,7 +173,7 @@ Future inject() async {
getIt.registerFactory<AnalysisBloc>(() => AnalysisBloc(getIt()));
getIt.registerFactory<HomeBloc>(() => HomeBloc(
getDailyInformationUseCase: getIt(),
getTasksUseCase: getIt(),
getUnCompletedUseCase: getIt(),
checkDailyGoalUseCase: getIt(),
saveDailyGoalUseCase: getIt(),
));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import "package:pomodore/core/resources/params/habit_params.dart";
import "package:pomodore/core/services/database/database_helper.dart";
import "package:pomodore/core/utils/debug_print.dart";
import "package:pomodore/features/habit_tracking/data/models/habit_model.dart";
import "package:pomodore/features/habit_tracking/domain/entities/habit_entity.dart";
import "package:sqflite/sqflite.dart";

import "../../../../core/utils/utils.dart";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import "package:dartz/dartz.dart";
import "package:pomodore/core/resources/usecase.dart";
import "package:pomodore/features/habit_tracking/domain/entities/habit_entity.dart";
import "package:pomodore/features/habit_tracking/domain/repositories/habit_tracking_repository.dart";

import "../../../../core/resources/params/habit_params.dart";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
import "package:bloc/bloc.dart";
import "package:dartz/dartz.dart";
import "package:equatable/equatable.dart";
import "package:pomodore/core/utils/debug_print.dart";
import "package:pomodore/features/habit_tracking/domain/entities/habit_entity.dart";
import "package:pomodore/features/habit_tracking/domain/usecases/add_new_habit_usecase.dart";
import "package:pomodore/features/habit_tracking/domain/usecases/delete_habit_usecase.dart";
import "package:pomodore/features/habit_tracking/domain/usecases/done_today_habit_usecase.dart";
import "package:pomodore/features/habit_tracking/domain/usecases/edit_habit_usecase.dart";
import "package:pomodore/features/habit_tracking/domain/usecases/get_all_habits_usecase.dart";
import "package:pomodore/features/task_management/domain/usecases/get_all_categories_usecase.dart";

import "../../../../../core/resources/params/habit_params.dart";
import "../../../../../core/utils/utils.dart";

part "habit_tracker_event.dart";
part "habit_tracker_state.dart";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class TasksLocalDataSource {
return true;
}

Future<List<Map<String, dynamic>>>? getAllNotCompletedTasks() async {
Future<List<Map<String, dynamic>>>? getAllUnCompletedTasks() async {
List<Map<String, dynamic>>? list;
try {
const query = "SELECT * FROM ${DatabaseHelper.taskTable} WHERE done = 0";
Expand All @@ -47,6 +47,20 @@ class TasksLocalDataSource {
return list;
}

Future<List<Map<String, dynamic>>>? getAllTasks() async {
List<Map<String, dynamic>>? list;
try {
const query = "SELECT * FROM ${DatabaseHelper.taskTable}";
final List<Map<String, Object?>> records = await db.rawQuery(query);

list = records;
} catch (e) {
rethrow;
}

return list;
}

Future<List<Map<String, dynamic>>>? getSpecificDateTasks(
DateTime time) async {
List<Map<String, dynamic>>? list;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,29 @@ class TaskRepositoryImpl implements TaskRepository {
}

@override
Future<Either<String, List<TaskEntity>>> getTasks() async {
Future<Either<String, List<TaskEntity>>> getAllTasks() async {
late Either<String, List<TaskEntity>> result;

final List<Map<String, dynamic>>? rawList =
await localDataSource.getAllNotCompletedTasks();
await localDataSource.getAllTasks();

if (rawList != null) {
final List<TaskEntity> list =
TaskModel.sortTasksByDateTime(TaskModel.parseRawList(rawList));
result = Right(list);
} else {
result = const Left("error");
}

return result;
}

@override
Future<Either<String, List<TaskEntity>>> getUnCompletedTasks() async {
late Either<String, List<TaskEntity>> result;

final List<Map<String, dynamic>>? rawList =
await localDataSource.getAllUnCompletedTasks();

if (rawList != null) {
final List<TaskEntity> list =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ abstract class TaskRepository {

Future<Either<String, List<TaskEntity>>> getTaskByDate(DateTime date);

Future<Either<String, List<TaskEntity>>> getTasks();
Future<Either<String, List<TaskEntity>>> getUnCompletedTasks();

Future<Either<String, List<TaskEntity>>> getAllTasks();

Future<Either<String, List<PomodoroEntity>>> getAllTodayPomodoro();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import "package:pomodore/core/resources/usecase.dart";
import "package:pomodore/features/task_management/domain/entities/task_entity.dart";
import "package:pomodore/features/task_management/domain/repositories/task_repository.dart";

class GetTasksUseCase
class GetAllTasksUseCase
extends UseCase<Either<String, List<TaskEntity>>, NoParams> {
final TaskRepository _taskRepository;

GetTasksUseCase(this._taskRepository);
GetAllTasksUseCase(this._taskRepository);

@override
Future<Either<String, List<TaskEntity>>> call({NoParams? params}) {
return _taskRepository.getTasks();
return _taskRepository.getAllTasks();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import "package:dartz/dartz.dart";
import "package:pomodore/core/resources/params/no_params.dart";
import "package:pomodore/core/resources/usecase.dart";
import "package:pomodore/features/task_management/domain/entities/task_entity.dart";
import "package:pomodore/features/task_management/domain/repositories/task_repository.dart";

class GetUnCompletedTasksUseCase
extends UseCase<Either<String, List<TaskEntity>>, NoParams> {
final TaskRepository _taskRepository;

GetUnCompletedTasksUseCase(this._taskRepository);

@override
Future<Either<String, List<TaskEntity>>> call({NoParams? params}) {
return _taskRepository.getUnCompletedTasks();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import "package:bloc/bloc.dart";
import "package:dartz/dartz.dart";
import "package:equatable/equatable.dart";
import "package:pomodore/features/task_management/domain/entities/daily_information_entity.dart";
import "package:pomodore/features/task_management/domain/usecases/get_tasks_usecase.dart";
import "package:pomodore/features/task_management/domain/usecases/get_uncompleted_tasks_usecase.dart";

import "../../../domain/entities/task_entity.dart";
import "../../../domain/usecases/check_daily_goal_usecase.dart";
Expand All @@ -14,13 +14,13 @@ part "home_state.dart";

class HomeBloc extends Bloc<HomeEvent, HomeState> {
final GetDailyInformationUseCase getDailyInformationUseCase;
final GetTasksUseCase getTasksUseCase;
final GetUnCompletedTasksUseCase getUnCompletedUseCase;
final CheckDailyGoalUseCase checkDailyGoalUseCase;
final SaveDailyGoalUseCase saveDailyGoalUseCase;

HomeBloc({
required this.getDailyInformationUseCase,
required this.getTasksUseCase,
required this.getUnCompletedUseCase,
required this.checkDailyGoalUseCase,
required this.saveDailyGoalUseCase,
}) : super(HomeInitial()) {
Expand Down Expand Up @@ -64,7 +64,8 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
_onFetchHomeData(HomeDataFetched event, Emitter emit) async {
emit(FetchHomeDataLoading());

final Either<String, List<TaskEntity>> tasks = await getTasksUseCase.call();
final Either<String, List<TaskEntity>> tasks =
await getUnCompletedUseCase.call();
final Either<String, DailyInformationEntity> dailyInfo =
await getDailyInformationUseCase.call();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import "package:bloc/bloc.dart";
import "package:dartz/dartz.dart";
import "package:equatable/equatable.dart";
import "package:pomodore/core/resources/enums/tasks_filter_enums.dart";
import "package:pomodore/features/task_management/domain/entities/task_entity.dart";
import "package:pomodore/features/task_management/domain/usecases/edit_task_usecase.dart";
import "package:pomodore/features/task_management/domain/usecases/get_all_categories_usecase.dart";
Expand All @@ -10,48 +11,63 @@ import "../../../domain/usecases/add_category_usecase.dart";
import "../../../domain/usecases/add_task_usecase.dart";
import "../../../domain/usecases/complete_task_usecase.dart";
import "../../../domain/usecases/delete_task_usecase.dart";
import "../../../domain/usecases/get_specific_date_tasks_usecase.dart";
import "../../../domain/usecases/get_all_tasks.dart";

part "tasks_event.dart";

part "tasks_state.dart";

class TasksBloc extends Bloc<TasksEvent, TasksState> {
final AddTaskUsecase addTaskUsecase;
final AddCategoryUsecase addCategoryUsecase;
final GetSpecificDateTasksUseCase getSpecificDateTasks;
final GetAllCategoriesUseCase getAllCategories;
final CompleteTaskUseCase completeTaskUseCase;
final DeleteTaskUseCase deleteTaskUseCase;
final EditTaskUseCase editTaskUseCase;
final GetAllTasksUseCase getAllTasksUseCase;

TasksBloc({
required this.addTaskUsecase,
required this.addCategoryUsecase,
required this.getSpecificDateTasks,
required this.getAllCategories,
required this.completeTaskUseCase,
required this.deleteTaskUseCase,
required this.editTaskUseCase,
required this.getAllTasksUseCase,
}) : super(TasksInitial()) {
on<TasksEvent>((event, emit) {});
on<TaskAdded>(_taskAdded);
on<CategoryAdded>(_categoryAdded);
on<SpecificDateTasksFetched>(_todayTasksFetched);
on<AllTasksFetched>(_todayTasksFetched);
on<CategoriesFetched>(_categoriesFetched);
on<TaskCompleted>(_taskCompleted);
on<TaskDeleted>(_taskDeleted);
on<DateAdded>(_dateAdded);
on<TaskEdited>(_taskEdited);
on<TasksFiltered>(_taskFiltered);
}

void _dateAdded(DateAdded event, Emitter emit) {
emit(AddDateLoading());
emit(AddDateSuccess(event.dateTime));
}

// void saveCurrentPomodoroOnDatabase(PomodoroEntity item) =>
// addPomodoroToDbUseCase.call(params: item);
_taskFiltered(TasksFiltered event, emit) {
List<TaskEntity> filteredList = [];

if (event.filterMode == TasksFilterEnum.all) {
emit(FilterTaskSuccess(list: event.list, index: 0));
} else if (event.filterMode == TasksFilterEnum.unCompleted) {
for (var element in event.list) {
if (!element.done) filteredList.add(element);
}
emit(FilterTaskSuccess(list: filteredList, index: 1));
} else {
for (var element in event.list) {
if (element.done) filteredList.add(element);
}
emit(FilterTaskSuccess(list: filteredList, index: 2));
}
}

_taskEdited(TaskEdited event, Emitter emit) async {
emit(EditTaskLoading());
Expand Down Expand Up @@ -91,29 +107,30 @@ class TasksBloc extends Bloc<TasksEvent, TasksState> {
_categoriesFetched(CategoriesFetched event, Emitter<TasksState> emit) async {
emit(CategoriesFetchLoading());

final Either<String, List<CategoryEntity>> result = await getAllCategories.call();
final Either<String, List<CategoryEntity>> result =
await getAllCategories.call();
result.fold(
(l) => emit(CategoriesFetchFailure()),
(r) => emit(CategoriesFetchSuccess(r)),
);
}

_todayTasksFetched(
SpecificDateTasksFetched event, Emitter<TasksState> emit) async {
emit(SpecificDateTasksReceivedLoading());
_todayTasksFetched(AllTasksFetched event, Emitter<TasksState> emit) async {
emit(GetAllTasksLoading());

final Either<String, List<TaskEntity>> result =
await getSpecificDateTasks.call(params: event.data);
await getAllTasksUseCase.call();
result.fold(
(l) => emit(SpecificDateTasksReceivedFailure()),
(r) => emit(SpecificDateTasksReceivedSuccess(r)),
(l) => emit(GetAllTasksFail()),
(r) => emit(GetAllTasksSuccess(r)),
);
}

_taskAdded(TaskAdded event, Emitter<TasksState> emit) async {
emit(TaskAddLoading());

final Either<String, bool> result = await addTaskUsecase.call(params: event.data);
final Either<String, bool> result =
await addTaskUsecase.call(params: event.data);
result.fold(
(l) => emit(TaskAddFailure()),
(r) => emit(TaskAddSuccess()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,11 @@ class CategoryAdded extends TasksEvent {
List<Object?> get props => [data];
}

class SpecificDateTasksFetched extends TasksEvent {
final DateTime data;

const SpecificDateTasksFetched(this.data);

@override
List<Object?> get props => [data];
class AllTasksFetched extends TasksEvent {
const AllTasksFetched();

@override
String toString() {
return "SpecificDateTasksFetched{data: $data}";
}
List<Object?> get props => [];
}

class CategoriesFetched extends TasksEvent {
Expand Down Expand Up @@ -89,3 +82,19 @@ class TaskEdited extends TasksEvent {
return "TaskEdited{item: $item}";
}
}

class TasksFiltered extends TasksEvent {
final TasksFilterEnum filterMode;
final List<TaskEntity> list;

const TasksFiltered({
required this.filterMode,
required this.list,
});

@override
List<Object?> get props => [
filterMode,
list,
];
}
Loading

0 comments on commit ce8eb1b

Please sign in to comment.