import { useForm } from '@mantine/form'; import { closeAllModals, openModal } from '@mantine/modals'; import { useTranslation } from 'react-i18next'; import i18n from '/@/i18n/i18n'; import { api } from '/@/renderer/api'; import { queryKeys } from '/@/renderer/api/query-keys'; import { useUpdatePlaylist } from '/@/renderer/features/playlists/mutations/update-playlist-mutation'; import { queryClient } from '/@/renderer/lib/react-query'; import { useCurrentServer } from '/@/renderer/store'; import { hasFeature } from '/@/shared/api/utils'; import { Group } from '/@/shared/components/group/group'; import { ModalButton } from '/@/shared/components/modal/model-shared'; import { Select } from '/@/shared/components/select/select'; import { Stack } from '/@/shared/components/stack/stack'; import { Switch } from '/@/shared/components/switch/switch'; import { TextInput } from '/@/shared/components/text-input/text-input'; import { toast } from '/@/shared/components/toast/toast'; import { PlaylistDetailResponse, ServerListItem, ServerType, SortOrder, UpdatePlaylistBody, UpdatePlaylistQuery, User, UserListQuery, UserListSort, } from '/@/shared/types/domain-types'; import { ServerFeature } from '/@/shared/types/features-types'; interface UpdatePlaylistFormProps { body: Partial; onCancel: () => void; query: UpdatePlaylistQuery; users?: User[]; } export const UpdatePlaylistForm = ({ body, onCancel, query, users }: UpdatePlaylistFormProps) => { const { t } = useTranslation(); const mutation = useUpdatePlaylist({}); const server = useCurrentServer(); const userList = users?.map((user) => ({ label: user.name, value: user.id, })); const form = useForm({ initialValues: { _custom: { navidrome: { owner: body?._custom?.navidrome?.owner || '', ownerId: body?._custom?.navidrome?.ownerId || '', rules: undefined, sync: body?._custom?.navidrome?.sync || false, }, }, comment: body?.comment || '', name: body?.name || '', public: body.public, }, }); const handleSubmit = form.onSubmit((values) => { mutation.mutate( { body: values, query, serverId: server?.id, }, { onError: (err) => { toast.error({ message: err.message, title: t('error.genericError', { postProcess: 'sentenceCase' }), }); }, onSuccess: () => { toast.success({ message: t('form.editPlaylist.success', { postProcess: 'sentenceCase' }), }); onCancel(); }, }, ); }); const isPublicDisplayed = hasFeature(server, ServerFeature.PUBLIC_PLAYLIST); const isOwnerDisplayed = server?.type === ServerType.NAVIDROME && userList; const isSubmitDisabled = !form.values.name || mutation.isLoading; return (
{server?.type === ServerType.NAVIDROME && ( )} {isOwnerDisplayed && (