diff --git a/src/renderer/features/playlists/components/save-as-playlist-form.tsx b/src/renderer/features/playlists/components/save-as-playlist-form.tsx new file mode 100644 index 00000000..1c70066c --- /dev/null +++ b/src/renderer/features/playlists/components/save-as-playlist-form.tsx @@ -0,0 +1,87 @@ +import { Group, Stack } from '@mantine/core'; +import { useForm } from '@mantine/form'; +import { CreatePlaylistBody, RawCreatePlaylistResponse, ServerType } from '/@/renderer/api/types'; +import { Button, Switch, TextInput, toast } from '/@/renderer/components'; +import { useCreatePlaylist } from '/@/renderer/features/playlists/mutations/create-playlist-mutation'; +import { useCurrentServer } from '/@/renderer/store'; + +interface SaveAsPlaylistFormProps { + body: Partial; + onCancel: () => void; + onSuccess: (data: RawCreatePlaylistResponse) => void; +} + +export const SaveAsPlaylistForm = ({ body, onSuccess, onCancel }: SaveAsPlaylistFormProps) => { + const mutation = useCreatePlaylist(); + const server = useCurrentServer(); + + const form = useForm({ + initialValues: { + comment: body.comment || '', + name: body.name || '', + ndParams: { + public: false, + rules: undefined, + ...body.ndParams, + }, + }, + }); + + const handleSubmit = form.onSubmit((values) => { + mutation.mutate( + { body: values }, + { + onError: (err) => { + toast.error({ message: err.message, title: 'Error creating playlist' }); + }, + onSuccess: (data) => { + toast.success({ message: 'Playlist created successfully' }); + onSuccess(data); + onCancel(); + }, + }, + ); + }); + + const isPublicDisplayed = server?.type === ServerType.NAVIDROME; + const isSubmitDisabled = !form.values.name || mutation.isLoading; + + return ( +
+ + + + {isPublicDisplayed && ( + + )} + + + + + +
+ ); +};