Skip to content

Commit 06db1ea

Browse files
committed
Teams page
1 parent ff2d95e commit 06db1ea

File tree

15 files changed

+408
-146
lines changed

15 files changed

+408
-146
lines changed

lib/commands/ui/simulation/simulation_screen_navigation_cubit.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ enum SimulationScreenNavigationTarget {
3434
archive,
3535
calendar,
3636
stats,
37+
teams,
3738
settings,
3839
exit,
3940
}
@@ -46,6 +47,7 @@ final navigationTargetsBySimulationMode = {
4647
SimulationScreenNavigationTarget.archive,
4748
SimulationScreenNavigationTarget.calendar,
4849
SimulationScreenNavigationTarget.stats,
50+
SimulationScreenNavigationTarget.teams,
4951
SimulationScreenNavigationTarget.settings,
5052
SimulationScreenNavigationTarget.exit,
5153
],
@@ -56,6 +58,7 @@ final navigationTargetsBySimulationMode = {
5658
SimulationScreenNavigationTarget.archive,
5759
SimulationScreenNavigationTarget.calendar,
5860
SimulationScreenNavigationTarget.stats,
61+
SimulationScreenNavigationTarget.teams,
5962
SimulationScreenNavigationTarget.settings,
6063
SimulationScreenNavigationTarget.exit,
6164
],
@@ -65,6 +68,7 @@ final navigationTargetsBySimulationMode = {
6568
SimulationScreenNavigationTarget.archive,
6669
SimulationScreenNavigationTarget.calendar,
6770
SimulationScreenNavigationTarget.stats,
71+
SimulationScreenNavigationTarget.teams,
6872
SimulationScreenNavigationTarget.settings,
6973
SimulationScreenNavigationTarget.exit,
7074
],
Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import 'package:sj_manager/filters/matching_algorithms/db_item_matching_by_text_algorithm.dart';
1+
import 'package:sj_manager/filters/matching_algorithms/matching_by_text_algorithm.dart';
22
import 'package:sj_manager/models/user_db/hill/hill.dart';
3+
import 'package:sj_manager/utils/filtering.dart';
34

4-
class DefaultHillMatchingByTextAlgorithm extends DbItemMatchingByTextAlgorithm<Hill> {
5+
class DefaultHillMatchingByTextAlgorithm extends MatchingByTextAlgorithm<Hill> {
56
const DefaultHillMatchingByTextAlgorithm({required super.text});
67

78
@override
@@ -10,22 +11,7 @@ class DefaultHillMatchingByTextAlgorithm extends DbItemMatchingByTextAlgorithm<H
1011
String hillName = item.name.toLowerCase();
1112
String hillLocality = item.locality.toLowerCase();
1213

13-
bool containsAllLetters(String source, String target) {
14-
Map<String, int> targetLetterCount = {};
15-
16-
for (var letter in target.split('')) {
17-
targetLetterCount[letter] = (targetLetterCount[letter] ?? 0) + 1;
18-
}
19-
20-
for (var letter in targetLetterCount.keys) {
21-
if (targetLetterCount[letter]! > RegExp(letter).allMatches(source).length) {
22-
return false;
23-
}
24-
}
25-
return true;
26-
}
27-
28-
return containsAllLetters(hillName, searchText) ||
29-
containsAllLetters(hillLocality, searchText);
14+
return hillName.containsAllLetters(from: searchText) ||
15+
hillLocality.containsAllLetters(from: searchText);
3016
}
3117
}

lib/filters/hills/hills_filter.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:sj_manager/filters/matching_algorithms/db_item_matching_by_text_algorithm.dart';
1+
import 'package:sj_manager/filters/matching_algorithms/matching_by_text_algorithm.dart';
22
import 'package:sj_manager/filters/mixins.dart';
33
import 'package:sj_manager/models/user_db/hill/hill_type_by_size.dart';
44
import 'package:sj_manager/filters/filter.dart';
@@ -41,7 +41,7 @@ final class HillsFilterBySearch extends HillsFilter with SearchFilter {
4141
required this.searchAlgorithm,
4242
});
4343

44-
final DbItemMatchingByTextAlgorithm<Hill> searchAlgorithm;
44+
final MatchingByTextAlgorithm<Hill> searchAlgorithm;
4545

4646
@override
4747
bool get isValid => searchAlgorithm.text.isNotEmpty;
Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,14 @@
1-
import 'package:sj_manager/filters/matching_algorithms/db_item_matching_by_text_algorithm.dart';
1+
import 'package:sj_manager/filters/matching_algorithms/matching_by_text_algorithm.dart';
22
import 'package:sj_manager/models/user_db/jumper/jumper.dart';
3+
import 'package:sj_manager/utils/filtering.dart';
34

4-
final class DefaultJumperMatchingByTextAlgorithm
5-
extends DbItemMatchingByTextAlgorithm<Jumper> {
5+
final class DefaultJumperMatchingByTextAlgorithm extends MatchingByTextAlgorithm<Jumper> {
66
const DefaultJumperMatchingByTextAlgorithm({required super.text});
77

88
@override
99
bool matches(Jumper item) {
1010
String searchText = text.toLowerCase();
1111
String fullName = '${item.name} ${item.surname}'.toLowerCase();
12-
13-
bool containsAllLetters(String source, String target) {
14-
Map<String, int> targetLetterCount = {};
15-
16-
// Count occurrences of each letter in the target (searchText)
17-
for (var letter in target.split('')) {
18-
targetLetterCount[letter] = (targetLetterCount[letter] ?? 0) + 1;
19-
}
20-
21-
// Check if source contains all letters from target with required frequency
22-
for (var letter in targetLetterCount.keys) {
23-
if (targetLetterCount[letter]! > RegExp(letter).allMatches(source).length) {
24-
return false;
25-
}
26-
}
27-
return true;
28-
}
29-
30-
return containsAllLetters(fullName, searchText);
12+
return fullName.containsAllLetters(from: searchText);
3113
}
3214
}

lib/filters/jumpers/jumpers_filter.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:sj_manager/filters/filter.dart';
2-
import 'package:sj_manager/filters/matching_algorithms/db_item_matching_by_text_algorithm.dart';
2+
import 'package:sj_manager/filters/matching_algorithms/matching_by_text_algorithm.dart';
33
import 'package:sj_manager/filters/mixins.dart';
44
import 'package:sj_manager/models/user_db/country/country.dart';
55
import 'package:sj_manager/models/user_db/jumper/jumper.dart';
@@ -59,7 +59,7 @@ final class JumpersFilterBySearch extends JumpersFilter with SearchFilter {
5959
required this.searchAlgorithm,
6060
});
6161

62-
final DbItemMatchingByTextAlgorithm<Jumper> searchAlgorithm;
62+
final MatchingByTextAlgorithm<Jumper> searchAlgorithm;
6363

6464
@override
6565
bool get isValid => searchAlgorithm.text.isNotEmpty;

lib/filters/matching_algorithms/db_item_matching_by_text_algorithm.dart renamed to lib/filters/matching_algorithms/matching_by_text_algorithm.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:sj_manager/filters/matching_algorithms/match_algorithm.dart';
22

3-
abstract class DbItemMatchingByTextAlgorithm<T> extends ItemMatchAlgorithm<T> {
4-
const DbItemMatchingByTextAlgorithm({
3+
abstract class MatchingByTextAlgorithm<T> extends ItemMatchAlgorithm<T> {
4+
const MatchingByTextAlgorithm({
55
required this.text,
66
});
77

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import 'package:flutter/material.dart';
2+
3+
class MySearchBar extends StatelessWidget {
4+
const MySearchBar({
5+
super.key,
6+
this.controller,
7+
this.autofocus = true,
8+
this.hintText,
9+
this.backgroundColor,
10+
});
11+
12+
final TextEditingController? controller;
13+
final bool autofocus;
14+
final String? hintText;
15+
final Color? backgroundColor;
16+
17+
@override
18+
Widget build(BuildContext context) {
19+
return SearchBar(
20+
controller: controller,
21+
backgroundColor: WidgetStatePropertyAll(backgroundColor),
22+
overlayColor: WidgetStateColor.resolveWith((states) {
23+
if (states.contains(WidgetState.hovered)) {
24+
return Theme.of(context).colorScheme.surfaceContainerLowest;
25+
} else {
26+
return Colors.transparent;
27+
}
28+
}),
29+
elevation: const WidgetStatePropertyAll(0),
30+
autoFocus: autofocus,
31+
hintText: hintText,
32+
);
33+
}
34+
}

lib/ui/screens/simulation/large/__large.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ class _LargeState extends State<_Large> {
5353
widget: _TeamScreen(
5454
initialMode: settings.arguments as TeamScreenMode,
5555
)),
56+
'/simulation/teams' => buildPageRoute(
57+
widget: const _TeamsScreen(
58+
initialSex: TeamsScreenSelectedSex.both,
59+
),
60+
),
5661
_ => null,
5762
};
5863
},

lib/ui/screens/simulation/large/__navigation_rail.dart

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class _NavigationRailState extends State<_NavigationRail> {
3636
NavigationRailDestination(
3737
icon: const Icon(Symbols.group),
3838
label: Text(
39-
'Drużyna',
39+
'Kadra',
4040
style: regularRailDestinationLabelStyle,
4141
),
4242
),
@@ -72,6 +72,13 @@ class _NavigationRailState extends State<_NavigationRail> {
7272
),
7373
disabled: true,
7474
),
75+
NavigationRailDestination(
76+
icon: const Icon(Symbols.groups),
77+
label: Text(
78+
'Drużyny',
79+
style: regularRailDestinationLabelStyle,
80+
),
81+
),
7582
NavigationRailDestination(
7683
icon: const Icon(Symbols.settings),
7784
label: Text(
@@ -102,14 +109,18 @@ class _NavigationRailState extends State<_NavigationRail> {
102109
'/simulation/team',
103110
arguments: TeamScreenMode.overview,
104111
);
112+
case SimulationScreenNavigationTarget.teams:
113+
widget.navigatorKey.currentState!.pushReplacementNamed(
114+
'/simulation/teams',
115+
);
105116
case SimulationScreenNavigationTarget.exit:
106117
widget.exit();
107118
default:
108119
throw ArgumentError(
109120
'Prosimy o zgłoszenie nam tego błędu. Próbowano przejść do ekranu $navigationTarget (niezaimplementowano)',
110121
);
111122
}
112-
if (selecetedIndex != 7) {
123+
if (navigationTarget != SimulationScreenNavigationTarget.exit) {
113124
context
114125
.read<SimulationScreenNavigationCubit>()
115126
.change(screen: navigationTarget);

0 commit comments

Comments
 (0)