Skip to content

Commit

Permalink
Merge branch 'master' into js/#1235-TextStyles-inside-Theme
Browse files Browse the repository at this point in the history
# Conflicts:
#	app/lib/page-encointer/new_bazaar/businesses/widgets/businesses_card.dart
#	app/lib/page/assets/announcement/widgets/announcement_card.dart
  • Loading branch information
clangenb committed Jul 11, 2023
2 parents 78a1dc7 + 380eb93 commit dd787bf
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 86 deletions.
3 changes: 3 additions & 0 deletions app/lib/models/announcement/announcement.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class Announcement {
this.isFavorite = false,
this.countFavorite = 0,
});

factory Announcement.fromJson(Map<String, dynamic> json) => _$AnnouncementFromJson(json);
Map<String, dynamic> toJson() => _$AnnouncementToJson(this);

Expand All @@ -23,4 +24,6 @@ class Announcement {
final DateTime publishDate;
final bool isFavorite;
final int countFavorite;

bool get isGlobal => communityIdentifier == 'global';
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class BusinessesCard extends StatelessWidget {
),
Expanded(
child: ListTile(
contentPadding: const EdgeInsets.fromLTRB(10, 10, 10, 5),
contentPadding: const EdgeInsets.all(10),
title: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expand All @@ -63,7 +63,12 @@ class BusinessesCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 28),
Text(businesses.name, style: context.labelLarge),
Text(
businesses.name,
style: context.labelLarge,
overflow: TextOverflow.ellipsis,
maxLines: 1,
),
const SizedBox(height: 8),
Text(
businesses.description,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:mobx/mobx.dart';

import 'package:encointer_wallet/models/announcement/announcement.dart';
import 'package:encointer_wallet/utils/fetch_status.dart';
import 'package:encointer_wallet/service/service.dart';
import 'package:encointer_wallet/config/consts.dart';

part 'announcement_store.g.dart';
Expand Down Expand Up @@ -56,6 +57,7 @@ abstract class _AnnouncementStoreBase with Store {

communityAnnouncementsResponse.fold((l) {
error = l.error.toString();
Log.e('announcement_view', '${l.error}');
fetchStatus = FetchStatus.error;
}, (r) {
announcementsCommunnity = r;
Expand All @@ -66,15 +68,16 @@ abstract class _AnnouncementStoreBase with Store {
}

@action
Future<void> getGlobalAnnouncements({bool devMode = false}) async {
Future<void> getGlobalAnnouncements({bool devMode = false, required String langCode}) async {
if (fetchStatus != FetchStatus.loading) fetchStatus = FetchStatus.loading;
final globalAnnouncementsResponse = await ewHttp.getTypeList<Announcement>(
'${getEncointerFeedLink(devMode: devMode)}/announcements/global/en/announcements.json',
'${getEncointerFeedLink(devMode: devMode)}/announcements/global/$langCode/announcements.json',
fromJson: Announcement.fromJson,
);

globalAnnouncementsResponse.fold((l) {
error = l.error.toString();
Log.e('announcement_view', '${l.error}');
fetchStatus = FetchStatus.error;
}, (r) {
announcementsGlobal = r;
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

73 changes: 3 additions & 70 deletions app/lib/page/assets/announcement/view/announcement_view.dart
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
import 'package:ew_http/ew_http.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:mobx/mobx.dart';
import 'package:provider/provider.dart';
import 'package:flutter/cupertino.dart';

import 'package:encointer_wallet/models/announcement/announcement.dart';
import 'package:encointer_wallet/utils/repository_provider.dart';
import 'package:encointer_wallet/modules/modules.dart';
import 'package:encointer_wallet/page/assets/announcement/logic/announcement_card_store.dart';
import 'package:encointer_wallet/service/log/log_service.dart';
import 'package:encointer_wallet/utils/alerts/app_alert.dart';
import 'package:encointer_wallet/utils/extensions/string/string_extensions.dart';
import 'package:encointer_wallet/utils/fetch_status.dart';
import 'package:encointer_wallet/page/assets/announcement/logic/announcement_store.dart';
import 'package:encointer_wallet/page/assets/announcement/widgets/announcement_card.dart';
import 'package:encointer_wallet/l10n/l10.dart';

const _logTarget = 'announcement_view';

class AnnouncementView extends StatefulWidget {
const AnnouncementView({
Expand All @@ -37,7 +30,6 @@ class AnnouncementView extends StatefulWidget {

class _AnnouncementViewState extends State<AnnouncementView> {
late final AnnouncementStore _announcementStore;
List<ReactionDisposer> _disposers = <ReactionDisposer>[];

@override
void initState() {
Expand All @@ -47,24 +39,9 @@ class _AnnouncementViewState extends State<AnnouncementView> {
await _getAnnouncements();
});

_listenToErrors();

super.initState();
}

@override
void dispose() {
/// Important! Do not forget to dispose all disposable variables
/// which may lead to a memory leak issues
if (_disposers.isNotEmpty) {
for (final d in _disposers) {
d();
}
}

super.dispose();
}

@override
Widget build(BuildContext context) {
return Observer(builder: (_) {
Expand All @@ -76,58 +53,14 @@ class _AnnouncementViewState extends State<AnnouncementView> {
});
}

void _listenToErrors() {
_disposers = <ReactionDisposer>[
/// in case of an unknown error, it triggers dialog to popup
reaction((_) => _announcementStore.error.isNotNullOrEmpty, (result) {
if (result) {
AppAlert.showErrorDialog(
context,
errorText: _getErrorMessages(failureType: FailureType.unknown, error: _announcementStore.error),
buttontext: context.l10n.ok,
);
}
}),

/// in case of a known error, it triggers dialog to popup
reaction((_) => _announcementStore.failureType != null, (result) {
if (result) {
AppAlert.showErrorDialog(
context,
errorText: _getErrorMessages(failureType: _announcementStore.failureType!, error: _announcementStore.error),
buttontext: context.l10n.ok,
);
}
})
];
}

Future<void> _getAnnouncements() async {
final devMode = context.read<AppSettings>().developerMode;
final languageCode = Localizations.localeOf(context).languageCode;
await Future.wait([
_announcementStore.getGlobalAnnouncements(devMode: devMode),
_announcementStore.getCommunityAnnouncements(widget.cid,
devMode: devMode, langCode: Localizations.localeOf(context).languageCode),
_announcementStore.getGlobalAnnouncements(devMode: devMode, langCode: languageCode),
_announcementStore.getCommunityAnnouncements(widget.cid, devMode: devMode, langCode: languageCode),
]);
}

String _getErrorMessages({
required FailureType failureType,

/// [error] is required because we check for it first
/// if it's not null we return needed localized text
required String? error,
}) {
Log.d('_getErrorMessages: failureType = $failureType, error = $error', _logTarget);
if (error.isNotNullOrEmpty) {
return '${context.l10n.announcements} ${context.l10n.errorMessageWithStatusCode(error!)}';
}
return switch (failureType) {
FailureType.badRequest => '${context.l10n.announcements} ${context.l10n.badRequest}',
FailureType.noAuthorization => '${context.l10n.announcements} ${context.l10n.noAuthorizationError}',
_ => '${context.l10n.announcements} ${context.l10n.somethingWentWrong}',
};
}
}

class AnnouncementList extends StatelessWidget {
Expand Down
18 changes: 15 additions & 3 deletions app/lib/page/assets/announcement/widgets/announcement_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import 'package:share_plus/share_plus.dart';
import 'package:encointer_wallet/page/assets/announcement/widgets/publisher_and_community_icon.dart';
import 'package:encointer_wallet/page/assets/announcement/logic/announcement_card_store.dart';
import 'package:encointer_wallet/models/announcement/announcement.dart';
import 'package:encointer_wallet/common/components/logo/community_icon.dart';
import 'package:encointer_wallet/gen/assets.gen.dart';
import 'package:encointer_wallet/theme/theme.dart';

class AnnouncementCard extends StatelessWidget {
Expand All @@ -29,11 +31,21 @@ class AnnouncementCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ListTile(
leading: PublisherSVGandCommunityIcon(announcement.publisherSVG),
leading: PublisherSVGandCommunityIcon(
publisherSVG: announcement.publisherSVG,
child: announcement.isGlobal
? CircleAvatar(
radius: 8,
backgroundImage: Assets.images.public.app.provider(),
)
: const CommunityIconObserver(radius: 8),
),
title: Align(
alignment: Alignment.centerRight,
child: Text(DateFormat.MMMd(local.languageCode).format(announcement.publishDate),
style: context.bodySmall),
child: Text(
DateFormat.MMMd(local.languageCode).format(announcement.publishDate),
style: context.bodySmall,
),
),
subtitle: Text(announcement.title, style: context.titleMedium),
),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
import 'package:flutter/material.dart';
import 'package:encointer_wallet/common/components/logo/community_icon.dart';

class PublisherSVGandCommunityIcon extends StatelessWidget {
const PublisherSVGandCommunityIcon(this.publisherSVG, {super.key});
const PublisherSVGandCommunityIcon({
required this.child,
required this.publisherSVG,
super.key,
});

final String publisherSVG;
final Widget child;

@override
Widget build(BuildContext context) {
return CircleAvatar(
backgroundImage: NetworkImage(publisherSVG),
child: const Align(
alignment: Alignment.bottomRight,
child: CommunityIconObserver(radius: 8),
),
child: Align(alignment: Alignment.bottomRight, child: child),
);
}
}
7 changes: 6 additions & 1 deletion app/lib/store/encointer/encointer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ abstract class _EncointerStore with Store {
return chosenCid != null && communities!.isNotEmpty && communities!.where((cn) => cn.cid == chosenCid).isNotEmpty;
}

@computed
bool get meetupCompleted {
return communityAccount?.meetupCompleted ?? false;
}

// -- sub-stores

/// Bazaar sub-stores.
Expand Down Expand Up @@ -555,7 +560,7 @@ abstract class _EncointerStore with Store {
final assigned = communityAccount?.isAssigned ?? false;
final hasClaims = (communityAccount?.scannedAttendeesCount ?? 0) > 0;

return currentPhase == CeremonyPhase.Attesting && assigned && hasClaims;
return currentPhase == CeremonyPhase.Attesting && assigned && hasClaims && !meetupCompleted;
}

@computed
Expand Down
7 changes: 7 additions & 0 deletions app/lib/store/encointer/encointer.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit dd787bf

Please sign in to comment.