feat(playlist): show confirmation before deleting user playlist #1222

This commit is contained in:
Kingkor Roy Tirtho 2024-02-17 23:01:14 +06:00
parent e964f61d38
commit 9f9244062a
5 changed files with 81 additions and 25 deletions

View File

@ -70,9 +70,9 @@ class TrackViewHeaderActions extends HookConsumerWidget {
tooltip: props.isLiked
? context.l10n.remove_from_favorites
: context.l10n.save_as_favorite,
onPressed: () {
props.onHeart?.call();
if (isUserPlaylist) {
onPressed: () async {
final shouldPop = await props.onHeart?.call();
if (isUserPlaylist && shouldPop == true && context.mounted) {
context.pop();
}
},

View File

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:fl_query/fl_query.dart';
import 'package:flutter/material.dart' hide Page;
import 'package:spotify/spotify.dart';
@ -62,7 +64,7 @@ class InheritedTrackView extends InheritedWidget {
final String shareUrl;
// events
final VoidCallback? onHeart; // if null heart button will hidden
final FutureOr<bool?> Function()? onHeart; // if null heart button will hidden
const InheritedTrackView({
super.key,

View File

@ -290,5 +290,7 @@
"start_a_radio": "Start a Radio",
"how_to_start_radio": "How do you want to start the radio?",
"replace_queue_question": "Do you want to replace the current queue or append to it?",
"endless_playback": "Endless Playback"
"endless_playback": "Endless Playback",
"delete_playlist": "Delete Playlist",
"delete_playlist_confirmation": "Are you sure you want to delete this playlist?"
}

View File

@ -2,8 +2,11 @@ import 'package:flutter/material.dart' hide Page;
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/components/shared/dialogs/prompt_dialog.dart';
import 'package:spotube/components/shared/tracks_view/sections/body/use_is_user_playlist.dart';
import 'package:spotube/components/shared/tracks_view/track_view.dart';
import 'package:spotube/components/shared/tracks_view/track_view_props.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/infinite_query.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/services/mutations/mutations.dart';
@ -45,6 +48,8 @@ class PlaylistPage extends HookConsumerWidget {
],
);
final isUserPlaylist = useIsUserPlaylist(ref, playlist.id!);
return InheritedTrackView(
collectionId: playlist.id!,
image: TypeConversionUtils.image_X_UrlString(
@ -72,9 +77,20 @@ class PlaylistPage extends HookConsumerWidget {
shareUrl: playlist.externalUrls?.spotify ?? "",
onHeart: () async {
if (!isLikedQuery.hasData || togglePlaylistLike.isMutating) {
return;
return false;
}
final confirmed = isUserPlaylist
? await showPromptDialog(
context: context,
title: context.l10n.delete_playlist,
message: context.l10n.delete_playlist_confirmation,
)
: true;
if (confirmed) {
await togglePlaylistLike.mutate(isLikedQuery.data!);
return isUserPlaylist;
}
return null;
},
child: const TrackView(),
);

View File

@ -3,77 +3,99 @@
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"bn": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"ca": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"de": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"es": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"fa": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"fr": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"hi": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"it": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"ja": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"ne": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"nl": [
@ -81,48 +103,62 @@
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"pl": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"pt": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"ru": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"tr": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"uk": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
],
"zh": [
"start_a_radio",
"how_to_start_radio",
"replace_queue_question",
"endless_playback"
"endless_playback",
"delete_playlist",
"delete_playlist_confirmation"
]
}