mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
feat(playlist): show confirmation before deleting user playlist #1222
This commit is contained in:
parent
e964f61d38
commit
9f9244062a
@ -70,9 +70,9 @@ class TrackViewHeaderActions extends HookConsumerWidget {
|
|||||||
tooltip: props.isLiked
|
tooltip: props.isLiked
|
||||||
? context.l10n.remove_from_favorites
|
? context.l10n.remove_from_favorites
|
||||||
: context.l10n.save_as_favorite,
|
: context.l10n.save_as_favorite,
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
props.onHeart?.call();
|
final shouldPop = await props.onHeart?.call();
|
||||||
if (isUserPlaylist) {
|
if (isUserPlaylist && shouldPop == true && context.mounted) {
|
||||||
context.pop();
|
context.pop();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:fl_query/fl_query.dart';
|
import 'package:fl_query/fl_query.dart';
|
||||||
import 'package:flutter/material.dart' hide Page;
|
import 'package:flutter/material.dart' hide Page;
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
@ -62,7 +64,7 @@ class InheritedTrackView extends InheritedWidget {
|
|||||||
final String shareUrl;
|
final String shareUrl;
|
||||||
|
|
||||||
// events
|
// events
|
||||||
final VoidCallback? onHeart; // if null heart button will hidden
|
final FutureOr<bool?> Function()? onHeart; // if null heart button will hidden
|
||||||
|
|
||||||
const InheritedTrackView({
|
const InheritedTrackView({
|
||||||
super.key,
|
super.key,
|
||||||
|
@ -290,5 +290,7 @@
|
|||||||
"start_a_radio": "Start a Radio",
|
"start_a_radio": "Start a Radio",
|
||||||
"how_to_start_radio": "How do you want to start the 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?",
|
"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?"
|
||||||
}
|
}
|
@ -2,8 +2,11 @@ import 'package:flutter/material.dart' hide Page;
|
|||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:spotify/spotify.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.dart';
|
||||||
import 'package:spotube/components/shared/tracks_view/track_view_props.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/extensions/infinite_query.dart';
|
||||||
import 'package:spotube/provider/spotify_provider.dart';
|
import 'package:spotube/provider/spotify_provider.dart';
|
||||||
import 'package:spotube/services/mutations/mutations.dart';
|
import 'package:spotube/services/mutations/mutations.dart';
|
||||||
@ -45,6 +48,8 @@ class PlaylistPage extends HookConsumerWidget {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
final isUserPlaylist = useIsUserPlaylist(ref, playlist.id!);
|
||||||
|
|
||||||
return InheritedTrackView(
|
return InheritedTrackView(
|
||||||
collectionId: playlist.id!,
|
collectionId: playlist.id!,
|
||||||
image: TypeConversionUtils.image_X_UrlString(
|
image: TypeConversionUtils.image_X_UrlString(
|
||||||
@ -72,9 +77,20 @@ class PlaylistPage extends HookConsumerWidget {
|
|||||||
shareUrl: playlist.externalUrls?.spotify ?? "",
|
shareUrl: playlist.externalUrls?.spotify ?? "",
|
||||||
onHeart: () async {
|
onHeart: () async {
|
||||||
if (!isLikedQuery.hasData || togglePlaylistLike.isMutating) {
|
if (!isLikedQuery.hasData || togglePlaylistLike.isMutating) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
await togglePlaylistLike.mutate(isLikedQuery.data!);
|
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(),
|
child: const TrackView(),
|
||||||
);
|
);
|
||||||
|
@ -3,77 +3,99 @@
|
|||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"bn": [
|
"bn": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ca": [
|
"ca": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"de": [
|
"de": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"es": [
|
"es": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"fa": [
|
"fa": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"fr": [
|
"fr": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"hi": [
|
"hi": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"it": [
|
"it": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ja": [
|
"ja": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ne": [
|
"ne": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"nl": [
|
"nl": [
|
||||||
@ -81,48 +103,62 @@
|
|||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"pl": [
|
"pl": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"pt": [
|
"pt": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ru": [
|
"ru": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"tr": [
|
"tr": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"uk": [
|
"uk": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
],
|
],
|
||||||
|
|
||||||
"zh": [
|
"zh": [
|
||||||
"start_a_radio",
|
"start_a_radio",
|
||||||
"how_to_start_radio",
|
"how_to_start_radio",
|
||||||
"replace_queue_question",
|
"replace_queue_question",
|
||||||
"endless_playback"
|
"endless_playback",
|
||||||
|
"delete_playlist",
|
||||||
|
"delete_playlist_confirmation"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user