diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts index 45b41e82d6..eeb4c97adc 100644 --- a/src/components/playlisteditor/playlisteditor.ts +++ b/src/components/playlisteditor/playlisteditor.ts @@ -149,6 +149,31 @@ function populatePlaylists(editorOptions: PlaylistEditorOptions, panel: DialogEl recursive: true }) .then(({ data }) => { + return Promise.all((data.Items || []).map(item => { + const playlist = { + item, + permissions: undefined + }; + + if (!item.Id) return playlist; + + return getPlaylistsApi(api) + .getPlaylistUser({ + playlistId: item.Id, + userId: apiClient.getCurrentUserId() + }) + .then(({ data: permissions }) => ({ + ...playlist, + permissions + })) + .catch((err) => { + console.warn('[PlaylistEditor] Failed to fetch playlist permissions', err); + + return playlist; + }); + })); + }) + .then(playlists => { let html = ''; if ((editorOptions.enableAddToPlayQueue !== false && playbackManager.isPlaying()) || SyncPlay?.Manager.isSyncPlayEnabled()) { @@ -157,8 +182,10 @@ function populatePlaylists(editorOptions: PlaylistEditorOptions, panel: DialogEl html += ``; - html += data.Items?.map(i => { - return ``; + html += playlists.map(({ item, permissions }) => { + if (!permissions?.CanEdit) return ''; + + return ``; }); select.innerHTML = html;