Skip to content

Commit

Permalink
✨ Add create chest
Browse files Browse the repository at this point in the history
  • Loading branch information
JakesMD committed Aug 26, 2024
1 parent 425c7cf commit df6c33f
Show file tree
Hide file tree
Showing 40 changed files with 807 additions and 125 deletions.
17 changes: 13 additions & 4 deletions app/lib/app/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:math';

import 'package:cauth_client/cauth_client.dart';
import 'package:cauth_repository/cauth_repository.dart';
import 'package:cchest_repository/cchest_repository.dart';
import 'package:ccore/ccore.dart';
import 'package:cdatabase_client/cdatabase_client.dart';
import 'package:cgem_repository/cgem_repository.dart';
Expand Down Expand Up @@ -40,11 +41,13 @@ class ChuckleChestApp extends StatefulWidget {
}

class _ChuckleChestAppState extends State<ChuckleChestApp> {
late CDatabaseClient databaseClient;
late CChestClient chestClient;
late CGemClient gemClient;
late CPlatformClient platformClient;
late CAuthClient authClient;

late CAuthRepository authRepository;
late CChestRepository chestRepository;
late CGemRepository gemRepository;

late CAppRouter appRouter;
Expand All @@ -57,17 +60,20 @@ class _ChuckleChestAppState extends State<ChuckleChestApp> {

final supabaseClient = Supabase.instance.client;

final chestsTable = CChestsTable(supabaseClient: supabaseClient);
final gemsTable = CGemsTable(supabaseClient: supabaseClient);

platformClient = CPlatformClient();
authClient = CAuthClient(authClient: supabaseClient.auth);
databaseClient = CDatabaseClient(gemsTable: gemsTable);
chestClient = CChestClient(chestsTable: chestsTable);
gemClient = CGemClient(gemsTable: gemsTable);

authRepository = CAuthRepository(
authClient: CAuthClient(authClient: supabaseClient.auth),
);
chestRepository = CChestRepository(chestClient: chestClient);
gemRepository = CGemRepository(
databaseClient: databaseClient,
gemClient: gemClient,
platformClient: platformClient,
);

Expand All @@ -83,11 +89,13 @@ class _ChuckleChestAppState extends State<ChuckleChestApp> {
providers: [
CClientProvider.value(value: platformClient),
CClientProvider.value(value: authClient),
CClientProvider.value(value: databaseClient),
CClientProvider.value(value: chestClient),
CClientProvider.value(value: gemClient),
],
child: MultiRepositoryProvider(
providers: [
RepositoryProvider.value(value: authRepository),
RepositoryProvider.value(value: chestRepository),
RepositoryProvider.value(value: gemRepository),
],
child: MaterialApp.router(
Expand All @@ -108,6 +116,7 @@ class _ChuckleChestAppState extends State<ChuckleChestApp> {
...GlobalMaterialLocalizations.delegates,
GlobalWidgetsLocalizations.delegate,
],
locale: const Locale('de'),
supportedLocales: CCoreL10n.supportedLocales,
routerConfig: appRouter.config(
reevaluateListenable: ReevaluateListenable.stream(
Expand Down
6 changes: 6 additions & 0 deletions app/lib/app/guards/chests.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:developer';

import 'package:cauth_repository/cauth_repository.dart';
import 'package:chuckle_chest/app/router.dart';
import 'package:cpub/auto_route.dart';
Expand All @@ -19,6 +21,10 @@ class CChestsGuard implements AutoRouteGuard {
@override
void onNavigation(NavigationResolver resolver, StackRouter router) {
if (authRepository.currentUser!.chests.isEmpty) {
log(
'''Navigation from ${router.current.name} to ${resolver.routeName} denied. Redirecting to CGetStartedRoute...''',
name: 'CChestsGuard',
);
resolver.redirect(const CGetStartedRoute(), replace: true);
} else {
resolver.next();
Expand Down
6 changes: 6 additions & 0 deletions app/lib/app/guards/no_chests.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:developer';

import 'package:cauth_repository/cauth_repository.dart';
import 'package:chuckle_chest/app/router.dart';
import 'package:cpub/auto_route.dart';
Expand All @@ -19,6 +21,10 @@ class CNoChestsGuard implements AutoRouteGuard {
@override
void onNavigation(NavigationResolver resolver, StackRouter router) {
if (authRepository.currentUser!.chests.isNotEmpty) {
log(
'''Navigation from ${router.current.name} to ${resolver.routeName} denied. Redirecting to CChestRoute...''',
name: 'CNoChestsGuard',
);
resolver.redirect(CChestRoute(chestID: null), replace: true);
} else {
resolver.next();
Expand Down
6 changes: 6 additions & 0 deletions app/lib/app/guards/signed_in.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:developer';

import 'package:cauth_repository/cauth_repository.dart';
import 'package:chuckle_chest/app/router.dart';
import 'package:cpub/auto_route.dart';
Expand All @@ -19,6 +21,10 @@ class CSignedInGuard implements AutoRouteGuard {
@override
void onNavigation(NavigationResolver resolver, StackRouter router) {
if (authRepository.currentUser == null) {
log(
'''Navigation from ${router.current.name} to ${resolver.routeName} denied. Redirecting to CSigninRoute...''',
name: 'CSignedInGuard',
);
resolver.redirect(const CSigninRoute(), replace: true);
} else {
resolver.next();
Expand Down
6 changes: 6 additions & 0 deletions app/lib/app/guards/signed_out.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:developer';

import 'package:cauth_repository/cauth_repository.dart';
import 'package:chuckle_chest/app/router.dart';
import 'package:cpub/auto_route.dart';
Expand All @@ -19,6 +21,10 @@ class CSignedOutGuard implements AutoRouteGuard {
@override
void onNavigation(NavigationResolver resolver, StackRouter router) {
if (authRepository.currentUser != null) {
log(
'''Navigation from ${router.current.name} to ${resolver.routeName} denied. Redirecting to CSigninRoute...''',
name: 'CHomeRoute',
);
resolver.redirect(const CHomeRoute(), replace: true);
} else {
resolver.next();
Expand Down
14 changes: 10 additions & 4 deletions app/lib/localization/arb/intl_de.arb
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
{
"@@locale": "de",
"cancel": "Abbrechen",
"chestCreationDialog_createButton": "Erstellen",
"chestCreationDialog_label_chestName": "Name der Truhe",
"chestCreationDialog_title": "Neue Truhe erstellen",
"close": "Schließen",
"delete": "Löschen",
"gem_share_message": "Schau dir dieses Gem auf ChuckleChest an! 😂 {link}",
"gem_share_message": "Schau dir diese Gemme auf ChuckleChest an! 😂 {link}",
"gem_share_subject": "Das ist so gut! 😂",
"getStartedPage_createChestButton": "Neue Truhe erstellen",
"getStartedPage_logoutButton": "Ausloggen",
"getStartedPage_title": "Legen wir los!",
"ok": "Ok",
"otpVerificationPage_error_invalidToken": "Dieses Code ist ungültig. Bitte versuchen Sie es erneut.",
"otpVerificationPage_message": "Bitte geben Sie Ihren Code ein, den wir an Ihren Posteingang gesendet haben.",
Expand All @@ -21,14 +27,14 @@
"save": "Speichern",
"signinPage_error_emailRateLimitExceeded": "Wir haben unser stündliches Anmelde-Limit erreicht. Bitte versuchen Sie es später erneut.",
"signinPage_error_userNotFound": "Wir konnten diesen Benutzer nicht finden.",
"signinPage_hint_email": "E-Mail-Addresse",
"signinPage_hint_username": "Benutzername",
"signinPage_loginButton": "Einloggen",
"signinPage_signupButton": "Registrieren",
"signinPage_tab_login": "Einloggen",
"signinPage_tab_signup": "Registrieren",
"signinPage_title": "Willkommen!",
"snackBar_error_defaultMessage": "Hoppla! Etwas ist schiefgelaufen. Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.",
"stagingBanner_button": "Zur Endversion",
"stagingBanner_message": "Sie nutzen die Vorabversion.",
"signinPage_hint_email": "E-Mail-Addresse",
"signinPage_hint_username": "Benutzername"
"stagingBanner_message": "Sie nutzen die Vorabversion."
}
14 changes: 10 additions & 4 deletions app/lib/localization/arb/intl_en.arb
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
{
"@@locale": "en",
"cancel": "Cancel",
"chestCreationDialog_createButton": "Create",
"chestCreationDialog_label_chestName": "Chest name",
"chestCreationDialog_title": "Create a new chest",
"close": "Close",
"delete": "Delete",
"gem_share_message": "Check out this gem on ChuckleChest! 😂 {link}",
"gem_share_subject": "This is so good! 😂",
"getStartedPage_createChestButton": "Create a new chest",
"getStartedPage_logoutButton": "Log out",
"getStartedPage_title": "Let's get started!",
"ok": "OK",
"otpVerificationPage_error_invalidToken": "This pin is invalid. Please try again.",
"otpVerificationPage_message": "Please enter the pin we sent to your inbox.",
"otpVerificationPage_title": "One-Time Pin Verification",
"otpVerificationPage_title": "One-Time pin verification",
"quoteItem_person": "{nickname} • {age} {age, plural, =0{years} =1{year} other{years}} old",
"@quoteItem_person": {
"placeholders": {
Expand All @@ -21,14 +27,14 @@
"save": "Save",
"signinPage_error_emailRateLimitExceeded": "We've reached our hourly sign-in limit. Please try again later.",
"signinPage_error_userNotFound": "We couldn't find this user.",
"signinPage_hint_email": "Email",
"signinPage_hint_username": "Username",
"signinPage_loginButton": "Log in",
"signinPage_signupButton": "Sign up",
"signinPage_tab_login": "Log in",
"signinPage_tab_signup": "Sign up",
"signinPage_title": "Welcome to ChuckleChest!",
"snackBar_error_defaultMessage": "Oops! Something went wrong. Please check your internet connection and try again.",
"stagingBanner_button": "Release version",
"stagingBanner_message": "You're using the staging version.",
"signinPage_hint_email": "Email",
"signinPage_hint_username": "Username"
"stagingBanner_message": "You're using the staging version."
}
62 changes: 49 additions & 13 deletions app/lib/localization/generated/localizations.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,24 @@ abstract class CAppL10n {
/// **'Cancel'**
String get cancel;

/// No description provided for @chestCreationDialog_createButton.
///
/// In en, this message translates to:
/// **'Create'**
String get chestCreationDialog_createButton;

/// No description provided for @chestCreationDialog_label_chestName.
///
/// In en, this message translates to:
/// **'Chest name'**
String get chestCreationDialog_label_chestName;

/// No description provided for @chestCreationDialog_title.
///
/// In en, this message translates to:
/// **'Create a new chest'**
String get chestCreationDialog_title;

/// No description provided for @close.
///
/// In en, this message translates to:
Expand All @@ -125,6 +143,24 @@ abstract class CAppL10n {
/// **'This is so good! 😂'**
String get gem_share_subject;

/// No description provided for @getStartedPage_createChestButton.
///
/// In en, this message translates to:
/// **'Create a new chest'**
String get getStartedPage_createChestButton;

/// No description provided for @getStartedPage_logoutButton.
///
/// In en, this message translates to:
/// **'Log out'**
String get getStartedPage_logoutButton;

/// No description provided for @getStartedPage_title.
///
/// In en, this message translates to:
/// **'Let\'s get started!'**
String get getStartedPage_title;

/// No description provided for @ok.
///
/// In en, this message translates to:
Expand All @@ -146,7 +182,7 @@ abstract class CAppL10n {
/// No description provided for @otpVerificationPage_title.
///
/// In en, this message translates to:
/// **'One-Time Pin Verification'**
/// **'One-Time pin verification'**
String get otpVerificationPage_title;

/// No description provided for @quoteItem_person.
Expand All @@ -173,6 +209,18 @@ abstract class CAppL10n {
/// **'We couldn\'t find this user.'**
String get signinPage_error_userNotFound;

/// No description provided for @signinPage_hint_email.
///
/// In en, this message translates to:
/// **'Email'**
String get signinPage_hint_email;

/// No description provided for @signinPage_hint_username.
///
/// In en, this message translates to:
/// **'Username'**
String get signinPage_hint_username;

/// No description provided for @signinPage_loginButton.
///
/// In en, this message translates to:
Expand Down Expand Up @@ -220,18 +268,6 @@ abstract class CAppL10n {
/// In en, this message translates to:
/// **'You\'re using the staging version.'**
String get stagingBanner_message;

/// No description provided for @signinPage_hint_email.
///
/// In en, this message translates to:
/// **'Email'**
String get signinPage_hint_email;

/// No description provided for @signinPage_hint_username.
///
/// In en, this message translates to:
/// **'Username'**
String get signinPage_hint_username;
}

class _CAppL10nDelegate extends LocalizationsDelegate<CAppL10n> {
Expand Down
32 changes: 25 additions & 7 deletions app/lib/localization/generated/localizations_de.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@ class CAppL10nDe extends CAppL10n {
@override
String get cancel => 'Abbrechen';

@override
String get chestCreationDialog_createButton => 'Erstellen';

@override
String get chestCreationDialog_label_chestName => 'Name der Truhe';

@override
String get chestCreationDialog_title => 'Neue Truhe erstellen';

@override
String get close => 'Schließen';

Expand All @@ -19,12 +28,21 @@ class CAppL10nDe extends CAppL10n {

@override
String gem_share_message(Object link) {
return 'Schau dir dieses Gem auf ChuckleChest an! 😂 $link';
return 'Schau dir diese Gemme auf ChuckleChest an! 😂 $link';
}

@override
String get gem_share_subject => 'Das ist so gut! 😂';

@override
String get getStartedPage_createChestButton => 'Neue Truhe erstellen';

@override
String get getStartedPage_logoutButton => 'Ausloggen';

@override
String get getStartedPage_title => 'Legen wir los!';

@override
String get ok => 'Ok';

Expand Down Expand Up @@ -58,6 +76,12 @@ class CAppL10nDe extends CAppL10n {
@override
String get signinPage_error_userNotFound => 'Wir konnten diesen Benutzer nicht finden.';

@override
String get signinPage_hint_email => 'E-Mail-Addresse';

@override
String get signinPage_hint_username => 'Benutzername';

@override
String get signinPage_loginButton => 'Einloggen';

Expand All @@ -81,10 +105,4 @@ class CAppL10nDe extends CAppL10n {

@override
String get stagingBanner_message => 'Sie nutzen die Vorabversion.';

@override
String get signinPage_hint_email => 'E-Mail-Addresse';

@override
String get signinPage_hint_username => 'Benutzername';
}
Loading

0 comments on commit df6c33f

Please sign in to comment.