diff --git a/src/routes/user/useredit.tsx b/src/routes/user/useredit.tsx index 67fe055632..64e70f32f6 100644 --- a/src/routes/user/useredit.tsx +++ b/src/routes/user/useredit.tsx @@ -25,6 +25,17 @@ type AuthProvider = { Id?: string; } +const getCheckedElementDataIds = (elements: NodeListOf) => ( + Array.prototype.filter.call(elements, e => e.checked) + .map(e => e.getAttribute('data-id')) +); + +function onSaveComplete() { + Dashboard.navigate('userprofiles.html'); + loading.hide(); + toast(globalize.translate('SettingsSaved')); +} + const UserEdit: FunctionComponent = () => { const [ userName, setUserName ] = useState(''); const [ deleteFoldersAccess, setDeleteFoldersAccess ] = useState([]); @@ -56,7 +67,7 @@ const UserEdit: FunctionComponent = () => { } const fldSelectLoginProvider = page.querySelector('.fldSelectLoginProvider') as HTMLDivElement; - providers.length > 1 ? fldSelectLoginProvider.classList.remove('hide') : fldSelectLoginProvider.classList.add('hide'); + fldSelectLoginProvider.classList.toggle('hide', providers.length <= 1); setAuthProviders(providers); @@ -73,7 +84,7 @@ const UserEdit: FunctionComponent = () => { } const fldSelectPasswordResetProvider = page.querySelector('.fldSelectPasswordResetProvider') as HTMLDivElement; - providers.length > 1 ? fldSelectPasswordResetProvider.classList.remove('hide') : fldSelectPasswordResetProvider.classList.add('hide'); + fldSelectPasswordResetProvider.classList.toggle('hide', providers.length <= 1); setPasswordResetProviders(providers); @@ -145,7 +156,7 @@ const UserEdit: FunctionComponent = () => { }); const disabledUserBanner = page.querySelector('.disabledUserBanner') as HTMLDivElement; - user.Policy.IsDisabled ? disabledUserBanner.classList.remove('hide') : disabledUserBanner.classList.add('hide'); + disabledUserBanner.classList.toggle('hide', !user.Policy.IsDisabled); const txtUserName = page.querySelector('#txtUserName') as HTMLInputElement; txtUserName.disabled = false; @@ -198,19 +209,9 @@ const UserEdit: FunctionComponent = () => { loadData(); - function onSaveComplete() { - Dashboard.navigate('userprofiles.html'); - loading.hide(); - toast(globalize.translate('SettingsSaved')); - } - const saveUser = (user: UserDto) => { - if (!user.Id) { - throw new Error('Unexpected null user.Id'); - } - - if (!user.Policy) { - throw new Error('Unexpected null user.Policy'); + if (!user.Id || !user.Policy) { + throw new Error('Unexpected null user id or policy'); } user.Name = (page.querySelector('#txtUserName') as HTMLInputElement).value; @@ -235,19 +236,15 @@ const UserEdit: FunctionComponent = () => { user.Policy.AuthenticationProviderId = (page.querySelector('#selectLoginProvider') as HTMLSelectElement).value; user.Policy.PasswordResetProviderId = (page.querySelector('#selectPasswordResetProvider') as HTMLSelectElement).value; user.Policy.EnableContentDeletion = (page.querySelector('.chkEnableDeleteAllFolders') as HTMLInputElement).checked; - user.Policy.EnableContentDeletionFromFolders = user.Policy.EnableContentDeletion ? [] : Array.prototype.filter.call(page.querySelectorAll('.chkFolder'), function (c) { - return c.checked; - }).map(function (c) { - return c.getAttribute('data-id'); - }); - if (window.ApiClient.isMinServerVersion('10.6.0')) { - user.Policy.SyncPlayAccess = (page.querySelector('#selectSyncPlayAccess') as HTMLSelectElement).value as SyncPlayUserAccessType; - } - window.ApiClient.updateUser(user).then(function () { - window.ApiClient.updateUserPolicy(user.Id || '', user.Policy || {}).then(function () { + user.Policy.EnableContentDeletionFromFolders = user.Policy.EnableContentDeletion ? [] : getCheckedElementDataIds(page.querySelectorAll('.chkFolder')); + user.Policy.SyncPlayAccess = (page.querySelector('#selectSyncPlayAccess') as HTMLSelectElement).value as SyncPlayUserAccessType; + + window.ApiClient.updateUser(user) + .then(() => ( + window.ApiClient.updateUserPolicy(user.Id || '', user.Policy || {}) + )).then(() => { onSaveComplete(); }); - }); }; const onSubmit = (e: Event) => { @@ -261,16 +258,11 @@ const UserEdit: FunctionComponent = () => { }; (page.querySelector('.chkEnableDeleteAllFolders') as HTMLInputElement).addEventListener('change', function (this: HTMLInputElement) { - if (this.checked) { - (page.querySelector('.deleteAccess') as HTMLDivElement).classList.add('hide'); - } else { - (page.querySelector('.deleteAccess') as HTMLDivElement).classList.remove('hide'); - } + (page.querySelector('.deleteAccess') as HTMLDivElement).classList.toggle('hide', this.checked); }); window.ApiClient.getNamedConfiguration('network').then(function (config) { - const fldRemoteAccess = page.querySelector('.fldRemoteAccess') as HTMLDivElement; - config.EnableRemoteAccess ? fldRemoteAccess.classList.remove('hide') : fldRemoteAccess.classList.add('hide'); + (page.querySelector('.fldRemoteAccess') as HTMLDivElement).classList.toggle('hide', !config.EnableRemoteAccess); }); (page.querySelector('.editUserProfileForm') as HTMLFormElement).addEventListener('submit', onSubmit); diff --git a/src/routes/user/usernew.tsx b/src/routes/user/usernew.tsx index e3610b07f5..25d1a13140 100644 --- a/src/routes/user/usernew.tsx +++ b/src/routes/user/usernew.tsx @@ -111,12 +111,8 @@ const UserNew: FunctionComponent = () => { userInput.Name = (page.querySelector('#txtUsername') as HTMLInputElement).value; userInput.Password = (page.querySelector('#txtPassword') as HTMLInputElement).value; window.ApiClient.createUser(userInput).then(function (user) { - if (!user.Id) { - throw new Error('Unexpected null user.Id'); - } - - if (!user.Policy) { - throw new Error('Unexpected null user.Policy'); + if (!user.Id || !user.Policy) { + throw new Error('Unexpected null user id or policy'); } user.Policy.EnableAllFolders = (page.querySelector('.chkEnableAllFolders') as HTMLInputElement).checked; diff --git a/src/routes/user/userparentalcontrol.tsx b/src/routes/user/userparentalcontrol.tsx index dcf465a773..be28cf5089 100644 --- a/src/routes/user/userparentalcontrol.tsx +++ b/src/routes/user/userparentalcontrol.tsx @@ -215,12 +215,8 @@ const UserParentalControl: FunctionComponent = () => { }; const saveUser = (user: UserDto) => { - if (!user.Id) { - throw new Error('Unexpected null user.Id'); - } - - if (!user.Policy) { - throw new Error('Unexpected null user.Policy'); + if (!user.Id || !user.Policy) { + throw new Error('Unexpected null user id or policy'); } const parentalRating = parseInt((page.querySelector('#selectMaxParentalRating') as HTMLSelectElement).value, 10); diff --git a/src/routes/user/userprofile.tsx b/src/routes/user/userprofile.tsx index fb1b5d08f3..0b35d50943 100644 --- a/src/routes/user/userprofile.tsx +++ b/src/routes/user/userprofile.tsx @@ -30,12 +30,8 @@ const UserProfile: FunctionComponent = () => { loading.show(); window.ApiClient.getUser(userId).then(function (user) { - if (!user.Name) { - throw new Error('Unexpected null user.Name'); - } - - if (!user.Id) { - throw new Error('Unexpected null user.Id'); + if (!user.Name || !user.Id) { + throw new Error('Unexpected null user name or id'); } setUserName(user.Name);