Skip to content

Commit

Permalink
[Application] Added initial charts bloc
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed May 6, 2022
1 parent 515df3a commit e745e81
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/application/bloc.dart
Expand Up @@ -12,6 +12,7 @@ export 'calculator_asc_materials/sessions_order/calculator_asc_materials_session
export 'changelog/changelog_bloc.dart';
export 'character/character_bloc.dart';
export 'characters/characters_bloc.dart';
export 'charts/charts_bloc.dart';
export 'custom_build/custom_build_bloc.dart';
export 'custom_builds/custom_builds_bloc.dart';
export 'donations/donations_bloc.dart';
Expand Down
59 changes: 59 additions & 0 deletions lib/application/charts/charts_bloc.dart
@@ -0,0 +1,59 @@
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:shiori/domain/enums/enums.dart';
import 'package:shiori/domain/models/models.dart';
import 'package:shiori/domain/services/genshin_service.dart';
import 'package:shiori/domain/services/telemetry_service.dart';

part 'charts_bloc.freezed.dart';
part 'charts_event.dart';
part 'charts_state.dart';

class ChartsBloc extends Bloc<ChartsEvent, ChartsState> {
final GenshinService _genshinService;
final TelemetryService _telemetryService;

ChartsBloc(this._genshinService, this._telemetryService) : super(const ChartsState.loading());

@override
Stream<ChartsState> mapEventToState(ChartsEvent event) async* {
final s = await event.map(
init: (_) async => _init(),
elementSelected: (e) async => _elementSelected(e.type),
);

yield s;
}

Future<ChartsState> _init() async {
await _telemetryService.trackChartsOpened();
final tops = [
..._genshinService.getTopCharts(ChartType.topFiveStarCharacterMostReruns),
..._genshinService.getTopCharts(ChartType.topFiveStarCharacterLeastReruns),
..._genshinService.getTopCharts(ChartType.topFiveStarWeaponMostReruns),
..._genshinService.getTopCharts(ChartType.topFiveStarWeaponLeastReruns),
..._genshinService.getTopCharts(ChartType.topFourStarCharacterMostReruns),
..._genshinService.getTopCharts(ChartType.topFourStarCharacterLeastReruns),
..._genshinService.getTopCharts(ChartType.topFourStarWeaponMostReruns),
..._genshinService.getTopCharts(ChartType.topFourStarWeaponLeastReruns),
];
final birthdays = _genshinService.getCharacterBirthdaysForCharts();
final elements = _genshinService.getElementsForCharts();
return ChartsState.initial(tops: tops, birthdays: birthdays, elements: elements, filteredElements: elements);
}

ChartsState _elementSelected(ElementType type) => state.maybeMap(
initial: (state) {
final selectedTypes = [...state.selectedElementTypes];
if (selectedTypes.contains(type)) {
selectedTypes.remove(type);
} else {
selectedTypes.add(type);
}

final filteredElements = selectedTypes.isEmpty ? state.elements : state.elements.where((el) => selectedTypes.contains(el.type)).toList();
return state.copyWith(selectedElementTypes: selectedTypes, filteredElements: filteredElements);
},
orElse: () => state,
);
}
10 changes: 10 additions & 0 deletions lib/application/charts/charts_event.dart
@@ -0,0 +1,10 @@
part of 'charts_bloc.dart';

@freezed
class ChartsEvent with _$ChartsEvent {
const factory ChartsEvent.init() = _Init;

const factory ChartsEvent.elementSelected({
required ElementType type,
}) = _ElementSelected;
}
14 changes: 14 additions & 0 deletions lib/application/charts/charts_state.dart
@@ -0,0 +1,14 @@
part of 'charts_bloc.dart';

@freezed
class ChartsState with _$ChartsState {
const factory ChartsState.loading() = _LoadingState;

const factory ChartsState.initial({
required List<ChartTopItemModel> tops,
required List<ChartBirthdayMonthModel> birthdays,
required List<ChartElementItemModel> elements,
required List<ChartElementItemModel> filteredElements,
@Default(<ElementType>[]) List<ElementType> selectedElementTypes,
}) = _InitialState;
}
6 changes: 6 additions & 0 deletions lib/injection.dart
Expand Up @@ -162,6 +162,12 @@ class Injection {
return ItemReleaseHistoryBloc(genshinService, telemetryService);
}

static ChartsBloc get chartsBloc {
final genshinService = getIt<GenshinService>();
final telemetryService = getIt<TelemetryService>();
return ChartsBloc(genshinService, telemetryService);
}

//TODO: USE THIS PROP
// static CalculatorAscMaterialsItemBloc get calculatorAscMaterialsItemBloc {
// final genshinService = getIt<GenshinService>();
Expand Down

0 comments on commit e745e81

Please sign in to comment.