diff --git a/lib/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart b/lib/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart new file mode 100644 index 00000000..e37cd0a1 --- /dev/null +++ b/lib/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart @@ -0,0 +1,45 @@ +import 'package:equatable/equatable.dart'; + +class PaginatedDataModel extends Equatable { + const PaginatedDataModel({ + required this.data, + required this.page, + required this.size, + required this.hasNext, + required this.totalItems, + required this.totalPages, + }); + + final List data; + final int page; + final int size; + final bool hasNext; + final int totalItems; + final int totalPages; + + factory PaginatedDataModel.fromJson( + Map json, + T Function(Map) fromJsonT, + ) { + return PaginatedDataModel( + data: (json['data'] as List? ?? []) + .map((e) => fromJsonT(e as Map)) + .toList(), + page: json['page'] as int? ?? 1, + size: json['size'] as int? ?? 25, + hasNext: json['hasNext'] as bool? ?? false, + totalItems: json['totalItem'] as int? ?? 0, + totalPages: json['totalPage'] as int? ?? 0, + ); + } + + @override + List get props => [ + data, + page, + size, + hasNext, + totalItems, + totalPages, + ]; +} diff --git a/lib/pages/space_management_v2/modules/communities/data/services/debounced_communities_service.dart b/lib/pages/space_management_v2/modules/communities/data/services/debounced_communities_service.dart index e512679b..a97e8524 100644 --- a/lib/pages/space_management_v2/modules/communities/data/services/debounced_communities_service.dart +++ b/lib/pages/space_management_v2/modules/communities/data/services/debounced_communities_service.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/communities_pagination_model.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/params/load_communities_param.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/services/communities_service.dart'; diff --git a/lib/pages/space_management_v2/modules/communities/data/services/remote_communities_service.dart b/lib/pages/space_management_v2/modules/communities/data/services/remote_communities_service.dart index 925a1cd0..b58961a6 100644 --- a/lib/pages/space_management_v2/modules/communities/data/services/remote_communities_service.dart +++ b/lib/pages/space_management_v2/modules/communities/data/services/remote_communities_service.dart @@ -1,6 +1,6 @@ import 'package:dio/dio.dart'; import 'package:syncrow_web/pages/common/bloc/project_manager.dart'; -import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/communities_pagination_model.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/community_model.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/params/load_communities_param.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/services/communities_service.dart'; import 'package:syncrow_web/services/api/api_exception.dart'; @@ -30,7 +30,7 @@ class RemoteCommunitiesService implements CommunitiesService { }, expectedResponseModel: (json) { final data = json as Map; - return CommunitiesPaginationModel.fromJson(data); + return CommunitiesPaginationModel.fromJson(data, CommunityModel.fromJson); }, ); diff --git a/lib/pages/space_management_v2/modules/communities/domain/models/communities_pagination_model.dart b/lib/pages/space_management_v2/modules/communities/domain/models/communities_pagination_model.dart deleted file mode 100644 index a86783be..00000000 --- a/lib/pages/space_management_v2/modules/communities/domain/models/communities_pagination_model.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/community_model.dart'; - -class CommunitiesPaginationModel extends Equatable { - const CommunitiesPaginationModel({ - required this.communities, - required this.page, - required this.size, - required this.hasNext, - required this.totalItems, - required this.totalPages, - }); - - final List communities; - final int page; - final int size; - final bool hasNext; - final int totalItems; - final int totalPages; - - const CommunitiesPaginationModel.empty() - : communities = const [], - page = 1, - size = 25, - hasNext = false, - totalItems = 0, - totalPages = 0; - - factory CommunitiesPaginationModel.fromJson(Map json) { - return CommunitiesPaginationModel( - communities: (json['data'] as List? ?? []) - .map((e) => CommunityModel.fromJson(e as Map)) - .toList(), - page: json['page'] as int? ?? 1, - size: json['size'] as int? ?? 25, - hasNext: json['hasNext'] as bool? ?? false, - totalItems: json['totalItem'] as int? ?? 0, - totalPages: json['totalPage'] as int? ?? 0, - ); - } - - CommunitiesPaginationModel copyWith({ - List? communities, - int? page, - int? size, - bool? hasNext, - int? totalItems, - int? totalPages, - }) { - return CommunitiesPaginationModel( - communities: communities ?? this.communities, - page: page ?? this.page, - size: size ?? this.size, - hasNext: hasNext ?? this.hasNext, - totalItems: totalItems ?? this.totalItems, - totalPages: totalPages ?? this.totalPages, - ); - } - - @override - List get props => [ - communities, - page, - size, - hasNext, - totalItems, - totalPages, - ]; -} diff --git a/lib/pages/space_management_v2/modules/communities/domain/services/communities_service.dart b/lib/pages/space_management_v2/modules/communities/domain/services/communities_service.dart index 564dc4da..baa84590 100644 --- a/lib/pages/space_management_v2/modules/communities/domain/services/communities_service.dart +++ b/lib/pages/space_management_v2/modules/communities/domain/services/communities_service.dart @@ -1,6 +1,9 @@ -import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/communities_pagination_model.dart'; +import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/community_model.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/params/load_communities_param.dart'; +typedef CommunitiesPaginationModel = PaginatedDataModel; + abstract class CommunitiesService { Future getCommunity(LoadCommunitiesParam param); } diff --git a/lib/pages/space_management_v2/modules/communities/presentation/bloc/communities_bloc.dart b/lib/pages/space_management_v2/modules/communities/presentation/bloc/communities_bloc.dart index 0f754b06..9094a632 100644 --- a/lib/pages/space_management_v2/modules/communities/presentation/bloc/communities_bloc.dart +++ b/lib/pages/space_management_v2/modules/communities/presentation/bloc/communities_bloc.dart @@ -36,7 +36,7 @@ class CommunitiesBloc extends Bloc { emit( CommunitiesState( status: CommunitiesStatus.success, - communities: paginationResponse.communities, + communities: paginationResponse.data, hasNext: paginationResponse.hasNext, currentPage: paginationResponse.page, searchQuery: event.param.search, @@ -67,7 +67,7 @@ class CommunitiesBloc extends Bloc { final paginationResponse = await _communitiesService.getCommunity(param); final updatedCommunities = List.from(state.communities) - ..addAll(paginationResponse.communities); + ..addAll(paginationResponse.data); emit( state.copyWith(