Skip to content

Commit 5a7e615

Browse files
committed
feat(local_ads_management): implement save as draft and publish functionalities
- Add CreateLocalBannerAdSavedAsDraft and CreateLocalBannerAdPublished events - Implement _onSavedAsDraft and _onPublished event handlers - Update CreateLocalBannerAdStatus to include draft and published states - Modify CreateLocalBannerAdBloc to handle new events
1 parent 3439f4d commit 5a7e615

File tree

1 file changed

+48
-3
lines changed

1 file changed

+48
-3
lines changed

lib/local_ads_management/bloc/create_local_ads/create_local_banner_ad_bloc.dart

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ class CreateLocalBannerAdBloc
1717
super(const CreateLocalBannerAdState()) {
1818
on<CreateLocalBannerAdImageUrlChanged>(_onImageUrlChanged);
1919
on<CreateLocalBannerAdTargetUrlChanged>(_onTargetUrlChanged);
20-
on<CreateLocalBannerAdSubmitted>(_onSubmitted);
20+
on<CreateLocalBannerAdSavedAsDraft>(_onSavedAsDraft);
21+
on<CreateLocalBannerAdPublished>(_onPublished);
2122
}
2223

2324
final DataRepository<LocalAd> _localAdsRepository;
@@ -37,8 +38,52 @@ class CreateLocalBannerAdBloc
3738
emit(state.copyWith(targetUrl: event.targetUrl));
3839
}
3940

40-
Future<void> _onSubmitted(
41-
CreateLocalBannerAdSubmitted event,
41+
/// Handles saving the local banner ad as a draft.
42+
Future<void> _onSavedAsDraft(
43+
CreateLocalBannerAdSavedAsDraft event,
44+
Emitter<CreateLocalBannerAdState> emit,
45+
) async {
46+
if (!state.isFormValid) return;
47+
48+
emit(state.copyWith(status: CreateLocalBannerAdStatus.submitting));
49+
try {
50+
final now = DateTime.now();
51+
final newLocalBannerAd = LocalBannerAd(
52+
id: _uuid.v4(),
53+
imageUrl: state.imageUrl,
54+
targetUrl: state.targetUrl,
55+
createdAt: now,
56+
updatedAt: now,
57+
status: ContentStatus.draft,
58+
);
59+
60+
await _localAdsRepository.create(item: newLocalBannerAd);
61+
emit(
62+
state.copyWith(
63+
status: CreateLocalBannerAdStatus.success,
64+
createdLocalBannerAd: newLocalBannerAd,
65+
),
66+
);
67+
} on HttpException catch (e) {
68+
emit(
69+
state.copyWith(
70+
status: CreateLocalBannerAdStatus.failure,
71+
exception: e,
72+
),
73+
);
74+
} catch (e) {
75+
emit(
76+
state.copyWith(
77+
status: CreateLocalBannerAdStatus.failure,
78+
exception: UnknownException('An unexpected error occurred: $e'),
79+
),
80+
);
81+
}
82+
}
83+
84+
/// Handles publishing the local banner ad.
85+
Future<void> _onPublished(
86+
CreateLocalBannerAdPublished event,
4287
Emitter<CreateLocalBannerAdState> emit,
4388
) async {
4489
if (!state.isFormValid) return;

0 commit comments

Comments
 (0)