Skip to content

Commit 8e7ea4d

Browse files
committed
fix(tc, feed): update isTokenCreationAvailable for a Post's Rocket button
1 parent bcfd5ab commit 8e7ea4d

3 files changed

Lines changed: 40 additions & 15 deletions

File tree

lib/app/components/counter_items_footer/post_token_button.dart

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,17 @@ import 'package:flutter/material.dart';
44
import 'package:hooks_riverpod/hooks_riverpod.dart';
55
import 'package:ion/app/extensions/extensions.dart';
66
import 'package:ion/app/features/feed/providers/ion_connect_entity_with_counters_provider.r.dart';
7+
import 'package:ion/app/features/feed/providers/token_creation_availability_provider.r.dart';
78
import 'package:ion/app/features/feed/views/pages/token_creation_not_available_modal/token_creation_not_available_modal.dart';
89
import 'package:ion/app/features/ion_connect/model/event_reference.f.dart';
910
import 'package:ion/app/features/ion_connect/model/ion_connect_entity.dart';
1011
import 'package:ion/app/features/ion_connect/providers/ion_connect_entity_provider.r.dart';
1112
import 'package:ion/app/features/tokenized_communities/models/entities/community_token_action.f.dart';
1213
import 'package:ion/app/features/tokenized_communities/models/entities/community_token_definition.f.dart';
13-
import 'package:ion/app/features/tokenized_communities/providers/community_token_definition_provider.r.dart';
1414
import 'package:ion/app/features/tokenized_communities/providers/token_action_first_buy_provider.r.dart';
1515
import 'package:ion/app/features/tokenized_communities/providers/token_market_info_provider.r.dart';
1616
import 'package:ion/app/features/tokenized_communities/utils/external_address_extension.dart';
1717
import 'package:ion/app/features/tokenized_communities/utils/position_formatters.dart';
18-
import 'package:ion/app/features/user/extensions/user_metadata.dart';
19-
import 'package:ion/app/features/user/providers/user_metadata_provider.r.dart';
2018
import 'package:ion/app/router/app_routes.gr.dart';
2119
import 'package:ion/app/router/utils/show_simple_bottom_sheet.dart';
2220
import 'package:ion/generated/assets.gen.dart';
@@ -140,23 +138,14 @@ class _ContentEntityButton extends ConsumerWidget {
140138
@override
141139
Widget build(BuildContext context, WidgetRef ref) {
142140
final eventReference = entity.toEventReference();
143-
final ownerHasBscWallet = ref
144-
.watch(
145-
userMetadataProvider(eventReference.masterPubkey)
146-
.select((e) => e.valueOrNull?.hasBscWallet),
147-
)
148-
.falseOrValue;
149-
final hasTokenDefinition = ref
150-
.watch(ionConnectEntityHasTokenDefinitionProvider(eventReference: eventReference))
151-
.valueOrNull
152-
.falseOrValue;
141+
final isTokenCreationAvailable = ref.watch(
142+
tokenCreationAvailabilityProvider(entity: entity),
143+
);
153144
final hasToken = ref
154145
.watch(ionConnectEntityHasTokenProvider(eventReference: eventReference))
155146
.valueOrNull
156147
.falseOrValue;
157148

158-
final isTokenCreationAvailable = ownerHasBscWallet && hasTokenDefinition;
159-
160149
final externalAddressType = entity.externalAddressType;
161150

162151
return _TokenAvailability(
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// SPDX-License-Identifier: ice License 1.0
2+
3+
import 'package:hooks_riverpod/hooks_riverpod.dart';
4+
import 'package:ion/app/extensions/bool.dart';
5+
import 'package:ion/app/features/ion_connect/model/ion_connect_entity.dart';
6+
import 'package:ion/app/features/user/extensions/user_metadata.dart';
7+
import 'package:ion/app/features/user/providers/user_metadata_provider.r.dart';
8+
import 'package:riverpod_annotation/riverpod_annotation.dart';
9+
10+
part 'token_creation_availability_provider.r.g.dart';
11+
12+
@riverpod
13+
bool tokenCreationAvailability(
14+
Ref ref, {
15+
required IonConnectEntity entity,
16+
}) {
17+
final eventReference = entity.toEventReference();
18+
final userMetadata = ref.watch(userMetadataProvider(eventReference.masterPubkey));
19+
final ownerHasBscWallet = (userMetadata.valueOrNull?.hasBscWallet).falseOrValue;
20+
21+
// TODO: Get tokenized communities release timestamp from Remote Config and compare with entity.publishedTimestamp.
22+
const isPublishedAfterTcRelease = true;
23+
24+
return ownerHasBscWallet && isPublishedAfterTcRelease;
25+
}

lib/app/features/tokenized_communities/utils/external_address_extension.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,15 @@ extension ExternalAddressExtension on IonConnectEntity {
5959
_ => null,
6060
};
6161
}
62+
63+
/// Returns the published timestamp for posts, comments, and articles.
64+
/// Returns null for entities that don't have a published timestamp.
65+
int? get publishedTimestamp {
66+
return switch (this) {
67+
ModifiablePostEntity(:final data) => data.publishedAt.value,
68+
PostEntity() => createdAt,
69+
ArticleEntity(:final data) => data.publishedAt.value,
70+
_ => null,
71+
};
72+
}
6273
}

0 commit comments

Comments
 (0)