1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Prevent blank playlist names

This commit is contained in:
Bill Thornton 2024-10-13 12:00:10 -04:00
parent 363171b56d
commit a37388b2e3
3 changed files with 37 additions and 3 deletions

View file

@ -11,6 +11,7 @@ import globalize from 'lib/globalize';
import { currentSettings as userSettings } from 'scripts/settings/userSettings';
import { PluginType } from 'types/plugin';
import { toApi } from 'utils/jellyfin-apiclient/compat';
import { isBlank } from 'utils/string';
import dialogHelper from '../dialogHelper/dialogHelper';
import loading from '../loading/loading';
@ -86,12 +87,15 @@ function createPlaylist(dlg: DialogElement) {
const apiClient = ServerConnections.getApiClient(currentServerId);
const api = toApi(apiClient);
const name = dlg.querySelector<HTMLInputElement>('#txtNewPlaylistName')?.value;
if (isBlank(name)) return Promise.reject(new Error('Playlist name should not be blank'));
const itemIds = dlg.querySelector<HTMLInputElement>('.fldSelectedItemIds')?.value || undefined;
return getPlaylistsApi(api)
.createPlaylist({
createPlaylistDto: {
Name: dlg.querySelector<HTMLInputElement>('#txtNewPlaylistName')?.value,
Name: name,
IsPublic: dlg.querySelector<HTMLInputElement>('#chkPlaylistPublic')?.checked,
Ids: itemIds?.split(','),
UserId: apiClient.getCurrentUserId()
@ -115,11 +119,14 @@ function updatePlaylist(dlg: DialogElement) {
if (!dlg.playlistId) return Promise.reject(new Error('Missing playlist ID'));
const name = dlg.querySelector<HTMLInputElement>('#txtNewPlaylistName')?.value;
if (isBlank(name)) return Promise.reject(new Error('Playlist name should not be blank'));
return getPlaylistsApi(api)
.updatePlaylist({
playlistId: dlg.playlistId,
updatePlaylistDto: {
Name: dlg.querySelector<HTMLInputElement>('#txtNewPlaylistName')?.value,
Name: name,
IsPublic: dlg.querySelector<HTMLInputElement>('#chkPlaylistPublic')?.checked
}
})

View file

@ -1,6 +1,24 @@
import { describe, expect, it } from 'vitest';
import { toBoolean, toFloat } from './string';
import { isBlank, toBoolean, toFloat } from './string';
describe('isBlank', () => {
it('Should return true if the string is blank', () => {
let check = isBlank(undefined);
expect(check).toBe(true);
check = isBlank(null);
expect(check).toBe(true);
check = isBlank('');
expect(check).toBe(true);
check = isBlank(' \t\t ');
expect(check).toBe(true);
});
it('Should return false if the string is not blank', () => {
const check = isBlank('not an empty string');
expect(check).toBe(false);
});
});
describe('toBoolean', () => {
it('Should return the boolean represented by the string', () => {

View file

@ -1,3 +1,12 @@
/**
* Checks if a string is empty or contains only whitespace.
* @param {string} value The string to test.
* @returns {boolean} True if the string is blank.
*/
export function isBlank(value: string | undefined | null) {
return !value?.trim().length;
}
/**
* Gets the value of a string as boolean.
* @param {string} name The value as a string.