diff --git a/src/components/pages/NewUserPage.tsx b/src/components/pages/NewUserPage.tsx index b84095a510..bb53266fe0 100644 --- a/src/components/pages/NewUserPage.tsx +++ b/src/components/pages/NewUserPage.tsx @@ -36,33 +36,54 @@ const NewUserPage: FunctionComponent = () => { }; const loadMediaFolders = useCallback((result) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + const mediaFolders = getItemsResult(result); setMediaFoldersItems(mediaFolders); - const folderAccess = element?.current?.querySelector('.folderAccess'); + const folderAccess = page.querySelector('.folderAccess'); folderAccess.dispatchEvent(new CustomEvent('create')); - element.current.querySelector('.chkEnableAllFolders').checked = false; + page.querySelector('.chkEnableAllFolders').checked = false; }, []); const loadChannels = useCallback((result) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + const channels = getItemsResult(result); setChannelsItems(channels); - const channelAccess = element?.current?.querySelector('.channelAccess'); + const channelAccess = page.querySelector('.channelAccess'); channelAccess.dispatchEvent(new CustomEvent('create')); - const channelAccessContainer = element?.current?.querySelector('.channelAccessContainer'); + const channelAccessContainer = page.querySelector('.channelAccessContainer'); channels.length ? channelAccessContainer.classList.remove('hide') : channelAccessContainer.classList.add('hide'); - element.current.querySelector('.chkEnableAllChannels').checked = false; + page.querySelector('.chkEnableAllChannels').checked = false; }, []); const loadUser = useCallback(() => { - element.current.querySelector('#txtUsername').value = ''; - element.current.querySelector('#txtPassword').value = ''; + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + + page.querySelector('#txtUsername').value = ''; + page.querySelector('#txtPassword').value = ''; loading.show(); const promiseFolders = window.ApiClient.getJSON(window.ApiClient.getUrl('Library/MediaFolders', { IsHidden: false @@ -76,29 +97,36 @@ const NewUserPage: FunctionComponent = () => { }, [loadChannels, loadMediaFolders]); useEffect(() => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + loadUser(); const saveUser = () => { const userInput: userInput = {}; - userInput.Name = element?.current?.querySelector('#txtUsername').value; - userInput.Password = element?.current?.querySelector('#txtPassword').value; + userInput.Name = page.querySelector('#txtUsername').value; + userInput.Password = page.querySelector('#txtPassword').value; window.ApiClient.createUser(userInput).then(function (user) { - user.Policy.EnableAllFolders = element?.current?.querySelector('.chkEnableAllFolders').checked; + user.Policy.EnableAllFolders = page.querySelector('.chkEnableAllFolders').checked; user.Policy.EnabledFolders = []; if (!user.Policy.EnableAllFolders) { - user.Policy.EnabledFolders = Array.prototype.filter.call(element?.current?.querySelectorAll('.chkFolder'), function (i) { + user.Policy.EnabledFolders = Array.prototype.filter.call(page.querySelectorAll('.chkFolder'), function (i) { return i.checked; }).map(function (i) { return i.getAttribute('data-id'); }); } - user.Policy.EnableAllChannels = element?.current?.querySelector('.chkEnableAllChannels').checked; + user.Policy.EnableAllChannels = page.querySelector('.chkEnableAllChannels').checked; user.Policy.EnabledChannels = []; if (!user.Policy.EnableAllChannels) { - user.Policy.EnabledChannels = Array.prototype.filter.call(element?.current?.querySelectorAll('.chkChannel'), function (i) { + user.Policy.EnabledChannels = Array.prototype.filter.call(page.querySelectorAll('.chkChannel'), function (i) { return i.checked; }).map(function (i) { return i.getAttribute('data-id'); @@ -122,19 +150,19 @@ const NewUserPage: FunctionComponent = () => { return false; }; - element?.current?.querySelector('.chkEnableAllChannels').addEventListener('change', function (this: HTMLInputElement) { - const channelAccessListContainer = element?.current?.querySelector('.channelAccessListContainer'); + page.querySelector('.chkEnableAllChannels').addEventListener('change', function (this: HTMLInputElement) { + const channelAccessListContainer = page.querySelector('.channelAccessListContainer'); this.checked ? channelAccessListContainer.classList.add('hide') : channelAccessListContainer.classList.remove('hide'); }); - element?.current?.querySelector('.chkEnableAllFolders').addEventListener('change', function (this: HTMLInputElement) { - const folderAccessListContainer = element?.current?.querySelector('.folderAccessListContainer'); + page.querySelector('.chkEnableAllFolders').addEventListener('change', function (this: HTMLInputElement) { + const folderAccessListContainer = page.querySelector('.folderAccessListContainer'); this.checked ? folderAccessListContainer.classList.add('hide') : folderAccessListContainer.classList.remove('hide'); }); - element?.current?.querySelector('.newUserProfileForm').addEventListener('submit', onSubmit); + page.querySelector('.newUserProfileForm').addEventListener('submit', onSubmit); - element?.current?.querySelector('.button-cancel').addEventListener('click', function() { + page.querySelector('.button-cancel').addEventListener('click', function() { window.history.back(); }); }, [loadUser]); diff --git a/src/components/pages/UserEditPage.tsx b/src/components/pages/UserEditPage.tsx index 139ed92214..d9bf935a7f 100644 --- a/src/components/pages/UserEditPage.tsx +++ b/src/components/pages/UserEditPage.tsx @@ -45,7 +45,14 @@ const UserEditPage: FunctionComponent = () => { }; const loadAuthProviders = useCallback((user, providers) => { - const fldSelectLoginProvider = element?.current?.querySelector('.fldSelectLoginProvider'); + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + + const fldSelectLoginProvider = page.querySelector('.fldSelectLoginProvider'); providers.length > 1 ? fldSelectLoginProvider.classList.remove('hide') : fldSelectLoginProvider.classList.add('hide'); setAuthProviders(providers); @@ -55,7 +62,14 @@ const UserEditPage: FunctionComponent = () => { }, []); const loadPasswordResetProviders = useCallback((user, providers) => { - const fldSelectPasswordResetProvider = element?.current?.querySelector('.fldSelectPasswordResetProvider'); + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + + const fldSelectPasswordResetProvider = page.querySelector('.fldSelectPasswordResetProvider'); providers.length > 1 ? fldSelectPasswordResetProvider.classList.remove('hide') : fldSelectPasswordResetProvider.classList.add('hide'); setPasswordResetProviders(providers); @@ -65,6 +79,13 @@ const UserEditPage: FunctionComponent = () => { }, []); const loadDeleteFolders = useCallback((user, mediaFolders) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + window.ApiClient.getJSON(window.ApiClient.getUrl('Channels', { SupportsMediaDeletion: true })).then(function (channelsResult) { @@ -94,13 +115,20 @@ const UserEditPage: FunctionComponent = () => { setDeleteFoldersAccess(itemsArr); - const chkEnableDeleteAllFolders = element.current.querySelector('.chkEnableDeleteAllFolders'); + const chkEnableDeleteAllFolders = page.querySelector('.chkEnableDeleteAllFolders'); chkEnableDeleteAllFolders.checked = user.Policy.EnableContentDeletion; triggerChange(chkEnableDeleteAllFolders); }); }, []); const loadUser = useCallback((user) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + window.ApiClient.getJSON(window.ApiClient.getUrl('Auth/Providers')).then(function (providers) { loadAuthProviders(user, providers); }); @@ -113,37 +141,37 @@ const UserEditPage: FunctionComponent = () => { loadDeleteFolders(user, folders.Items); }); - const disabledUserBanner = element?.current?.querySelector('.disabledUserBanner'); + const disabledUserBanner = page.querySelector('.disabledUserBanner'); user.Policy.IsDisabled ? disabledUserBanner.classList.remove('hide') : disabledUserBanner.classList.add('hide'); - const txtUserName = element?.current?.querySelector('#txtUserName'); + const txtUserName = page.querySelector('#txtUserName'); txtUserName.disabled = ''; txtUserName.removeAttribute('disabled'); - const lnkEditUserPreferences = element?.current?.querySelector('.lnkEditUserPreferences'); + const lnkEditUserPreferences = page.querySelector('.lnkEditUserPreferences'); lnkEditUserPreferences.setAttribute('href', 'mypreferencesmenu.html?userId=' + user.Id); LibraryMenu.setTitle(user.Name); setUserName(user.Name); - element.current.querySelector('#txtUserName').value = user.Name; - element.current.querySelector('.chkIsAdmin').checked = user.Policy.IsAdministrator; - element.current.querySelector('.chkDisabled').checked = user.Policy.IsDisabled; - element.current.querySelector('.chkIsHidden').checked = user.Policy.IsHidden; - element.current.querySelector('.chkRemoteControlSharedDevices').checked = user.Policy.EnableSharedDeviceControl; - element.current.querySelector('.chkEnableRemoteControlOtherUsers').checked = user.Policy.EnableRemoteControlOfOtherUsers; - element.current.querySelector('.chkEnableDownloading').checked = user.Policy.EnableContentDownloading; - element.current.querySelector('.chkManageLiveTv').checked = user.Policy.EnableLiveTvManagement; - element.current.querySelector('.chkEnableLiveTvAccess').checked = user.Policy.EnableLiveTvAccess; - element.current.querySelector('.chkEnableMediaPlayback').checked = user.Policy.EnableMediaPlayback; - element.current.querySelector('.chkEnableAudioPlaybackTranscoding').checked = user.Policy.EnableAudioPlaybackTranscoding; - element.current.querySelector('.chkEnableVideoPlaybackTranscoding').checked = user.Policy.EnableVideoPlaybackTranscoding; - element.current.querySelector('.chkEnableVideoPlaybackRemuxing').checked = user.Policy.EnablePlaybackRemuxing; - element.current.querySelector('.chkForceRemoteSourceTranscoding').checked = user.Policy.ForceRemoteSourceTranscoding; - element.current.querySelector('.chkRemoteAccess').checked = user.Policy.EnableRemoteAccess == null || user.Policy.EnableRemoteAccess; - element.current.querySelector('#txtRemoteClientBitrateLimit').value = user.Policy.RemoteClientBitrateLimit / 1e6 || ''; - element.current.querySelector('#txtLoginAttemptsBeforeLockout').value = user.Policy.LoginAttemptsBeforeLockout || '0'; - element.current.querySelector('#txtMaxActiveSessions').value = user.Policy.MaxActiveSessions || '0'; + page.querySelector('#txtUserName').value = user.Name; + page.querySelector('.chkIsAdmin').checked = user.Policy.IsAdministrator; + page.querySelector('.chkDisabled').checked = user.Policy.IsDisabled; + page.querySelector('.chkIsHidden').checked = user.Policy.IsHidden; + page.querySelector('.chkRemoteControlSharedDevices').checked = user.Policy.EnableSharedDeviceControl; + page.querySelector('.chkEnableRemoteControlOtherUsers').checked = user.Policy.EnableRemoteControlOfOtherUsers; + page.querySelector('.chkEnableDownloading').checked = user.Policy.EnableContentDownloading; + page.querySelector('.chkManageLiveTv').checked = user.Policy.EnableLiveTvManagement; + page.querySelector('.chkEnableLiveTvAccess').checked = user.Policy.EnableLiveTvAccess; + page.querySelector('.chkEnableMediaPlayback').checked = user.Policy.EnableMediaPlayback; + page.querySelector('.chkEnableAudioPlaybackTranscoding').checked = user.Policy.EnableAudioPlaybackTranscoding; + page.querySelector('.chkEnableVideoPlaybackTranscoding').checked = user.Policy.EnableVideoPlaybackTranscoding; + page.querySelector('.chkEnableVideoPlaybackRemuxing').checked = user.Policy.EnablePlaybackRemuxing; + page.querySelector('.chkForceRemoteSourceTranscoding').checked = user.Policy.ForceRemoteSourceTranscoding; + page.querySelector('.chkRemoteAccess').checked = user.Policy.EnableRemoteAccess == null || user.Policy.EnableRemoteAccess; + page.querySelector('#txtRemoteClientBitrateLimit').value = user.Policy.RemoteClientBitrateLimit / 1e6 || ''; + page.querySelector('#txtLoginAttemptsBeforeLockout').value = user.Policy.LoginAttemptsBeforeLockout || '0'; + page.querySelector('#txtMaxActiveSessions').value = user.Policy.MaxActiveSessions || '0'; if (window.ApiClient.isMinServerVersion('10.6.0')) { - element.current.querySelector('#selectSyncPlayAccess').value = user.Policy.SyncPlayAccess; + page.querySelector('#selectSyncPlayAccess').value = user.Policy.SyncPlayAccess; } loading.hide(); }, [loadAuthProviders, loadPasswordResetProviders, loadDeleteFolders ]); @@ -156,6 +184,13 @@ const UserEditPage: FunctionComponent = () => { }, [loadUser]); useEffect(() => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + loadData(); function onSaveComplete() { @@ -173,34 +208,34 @@ const UserEditPage: FunctionComponent = () => { throw new Error('Unexpected null user.Policy'); } - user.Name = element?.current?.querySelector('#txtUserName').value; - user.Policy.IsAdministrator = element?.current?.querySelector('.chkIsAdmin').checked; - user.Policy.IsHidden = element?.current?.querySelector('.chkIsHidden').checked; - user.Policy.IsDisabled = element?.current?.querySelector('.chkDisabled').checked; - user.Policy.EnableRemoteControlOfOtherUsers = element?.current?.querySelector('.chkEnableRemoteControlOtherUsers').checked; - user.Policy.EnableLiveTvManagement = element?.current?.querySelector('.chkManageLiveTv').checked; - user.Policy.EnableLiveTvAccess = element?.current?.querySelector('.chkEnableLiveTvAccess').checked; - user.Policy.EnableSharedDeviceControl = element?.current?.querySelector('.chkRemoteControlSharedDevices').checked; - user.Policy.EnableMediaPlayback = element?.current?.querySelector('.chkEnableMediaPlayback').checked; - user.Policy.EnableAudioPlaybackTranscoding = element?.current?.querySelector('.chkEnableAudioPlaybackTranscoding').checked; - user.Policy.EnableVideoPlaybackTranscoding = element?.current?.querySelector('.chkEnableVideoPlaybackTranscoding').checked; - user.Policy.EnablePlaybackRemuxing = element?.current?.querySelector('.chkEnableVideoPlaybackRemuxing').checked; - user.Policy.ForceRemoteSourceTranscoding = element?.current?.querySelector('.chkForceRemoteSourceTranscoding').checked; - user.Policy.EnableContentDownloading = element?.current?.querySelector('.chkEnableDownloading').checked; - user.Policy.EnableRemoteAccess = element?.current?.querySelector('.chkRemoteAccess').checked; - user.Policy.RemoteClientBitrateLimit = Math.floor(1e6 * parseFloat(element?.current?.querySelector('#txtRemoteClientBitrateLimit').value || '0')); - user.Policy.LoginAttemptsBeforeLockout = parseInt(element?.current?.querySelector('#txtLoginAttemptsBeforeLockout').value || '0'); - user.Policy.MaxActiveSessions = parseInt(element?.current?.querySelector('#txtMaxActiveSessions').value || '0'); - user.Policy.AuthenticationProviderId = element?.current?.querySelector('.selectLoginProvider').value; - user.Policy.PasswordResetProviderId = element?.current?.querySelector('.selectPasswordResetProvider').value; - user.Policy.EnableContentDeletion = element?.current?.querySelector('.chkEnableDeleteAllFolders').checked; - user.Policy.EnableContentDeletionFromFolders = user.Policy.EnableContentDeletion ? [] : Array.prototype.filter.call(element?.current?.querySelectorAll('.chkFolder'), function (c) { + user.Name = page.querySelector('#txtUserName').value; + user.Policy.IsAdministrator = page.querySelector('.chkIsAdmin').checked; + user.Policy.IsHidden = page.querySelector('.chkIsHidden').checked; + user.Policy.IsDisabled = page.querySelector('.chkDisabled').checked; + user.Policy.EnableRemoteControlOfOtherUsers = page.querySelector('.chkEnableRemoteControlOtherUsers').checked; + user.Policy.EnableLiveTvManagement = page.querySelector('.chkManageLiveTv').checked; + user.Policy.EnableLiveTvAccess = page.querySelector('.chkEnableLiveTvAccess').checked; + user.Policy.EnableSharedDeviceControl = page.querySelector('.chkRemoteControlSharedDevices').checked; + user.Policy.EnableMediaPlayback = page.querySelector('.chkEnableMediaPlayback').checked; + user.Policy.EnableAudioPlaybackTranscoding = page.querySelector('.chkEnableAudioPlaybackTranscoding').checked; + user.Policy.EnableVideoPlaybackTranscoding = page.querySelector('.chkEnableVideoPlaybackTranscoding').checked; + user.Policy.EnablePlaybackRemuxing = page.querySelector('.chkEnableVideoPlaybackRemuxing').checked; + user.Policy.ForceRemoteSourceTranscoding = page.querySelector('.chkForceRemoteSourceTranscoding').checked; + user.Policy.EnableContentDownloading = page.querySelector('.chkEnableDownloading').checked; + user.Policy.EnableRemoteAccess = page.querySelector('.chkRemoteAccess').checked; + user.Policy.RemoteClientBitrateLimit = Math.floor(1e6 * parseFloat(page.querySelector('#txtRemoteClientBitrateLimit').value || '0')); + user.Policy.LoginAttemptsBeforeLockout = parseInt(page.querySelector('#txtLoginAttemptsBeforeLockout').value || '0'); + user.Policy.MaxActiveSessions = parseInt(page.querySelector('#txtMaxActiveSessions').value || '0'); + user.Policy.AuthenticationProviderId = page.querySelector('.selectLoginProvider').value; + user.Policy.PasswordResetProviderId = page.querySelector('.selectPasswordResetProvider').value; + user.Policy.EnableContentDeletion = page.querySelector('.chkEnableDeleteAllFolders').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 = element?.current?.querySelector('#selectSyncPlayAccess').value; + user.Policy.SyncPlayAccess = page.querySelector('#selectSyncPlayAccess').value; } window.ApiClient.updateUser(user).then(function () { window.ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () { @@ -219,22 +254,22 @@ const UserEditPage: FunctionComponent = () => { return false; }; - element?.current?.querySelector('.chkEnableDeleteAllFolders').addEventListener('change', function (this: HTMLInputElement) { + page.querySelector('.chkEnableDeleteAllFolders').addEventListener('change', function (this: HTMLInputElement) { if (this.checked) { - element?.current?.querySelector('.deleteAccess').classList.add('hide'); + page.querySelector('.deleteAccess').classList.add('hide'); } else { - element?.current?.querySelector('.deleteAccess').classList.remove('hide'); + page.querySelector('.deleteAccess').classList.remove('hide'); } }); window.ApiClient.getServerConfiguration().then(function (config) { - const fldRemoteAccess = element?.current?.querySelector('.fldRemoteAccess'); + const fldRemoteAccess = page.querySelector('.fldRemoteAccess'); config.EnableRemoteAccess ? fldRemoteAccess.classList.remove('hide') : fldRemoteAccess.classList.add('hide'); }); - element?.current?.querySelector('.editUserProfileForm').addEventListener('submit', onSubmit); + page.querySelector('.editUserProfileForm').addEventListener('submit', onSubmit); - element?.current?.querySelector('.button-cancel').addEventListener('click', function() { + page.querySelector('.button-cancel').addEventListener('click', function() { window.history.back(); }); }, [loadData]); diff --git a/src/components/pages/UserLibraryAccessPage.tsx b/src/components/pages/UserLibraryAccessPage.tsx index 13e79a8a47..ea601d248a 100644 --- a/src/components/pages/UserLibraryAccessPage.tsx +++ b/src/components/pages/UserLibraryAccessPage.tsx @@ -34,6 +34,13 @@ const UserLibraryAccessPage: FunctionComponent = () => { }; const loadMediaFolders = useCallback((user, mediaFolders) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + const itemsArr: ItemsArr[] = []; for (const folder of mediaFolders) { @@ -48,12 +55,19 @@ const UserLibraryAccessPage: FunctionComponent = () => { setMediaFoldersItems(itemsArr); - const chkEnableAllFolders = element.current.querySelector('.chkEnableAllFolders'); + const chkEnableAllFolders = page.querySelector('.chkEnableAllFolders'); chkEnableAllFolders.checked = user.Policy.EnableAllFolders; triggerChange(chkEnableAllFolders); }, []); const loadChannels = useCallback((user, channels) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + const itemsArr: ItemsArr[] = []; for (const folder of channels) { @@ -69,17 +83,24 @@ const UserLibraryAccessPage: FunctionComponent = () => { setChannelsItems(itemsArr); if (channels.length) { - element?.current?.querySelector('.channelAccessContainer').classList.remove('hide'); + page.querySelector('.channelAccessContainer').classList.remove('hide'); } else { - element?.current?.querySelector('.channelAccessContainer').classList.add('hide'); + page.querySelector('.channelAccessContainer').classList.add('hide'); } - const chkEnableAllChannels = element.current.querySelector('.chkEnableAllChannels'); + const chkEnableAllChannels = page.querySelector('.chkEnableAllChannels'); chkEnableAllChannels.checked = user.Policy.EnableAllChannels; triggerChange(chkEnableAllChannels); }, []); const loadDevices = useCallback((user, devices) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + const itemsArr: ItemsArr[] = []; for (const device of devices) { @@ -95,14 +116,14 @@ const UserLibraryAccessPage: FunctionComponent = () => { setDevicesItems(itemsArr); - const chkEnableAllDevices = element.current.querySelector('.chkEnableAllDevices'); + const chkEnableAllDevices = page.querySelector('.chkEnableAllDevices'); chkEnableAllDevices.checked = user.Policy.EnableAllDevices; triggerChange(chkEnableAllDevices); if (user.Policy.IsAdministrator) { - element?.current?.querySelector('.deviceAccessContainer').classList.add('hide'); + page.querySelector('.deviceAccessContainer').classList.add('hide'); } else { - element?.current?.querySelector('.deviceAccessContainer').classList.remove('hide'); + page.querySelector('.deviceAccessContainer').classList.remove('hide'); } }, []); @@ -130,6 +151,13 @@ const UserLibraryAccessPage: FunctionComponent = () => { }, [loadUser]); useEffect(() => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + loadData(); const onSubmit = (e: Event) => { @@ -152,20 +180,20 @@ const UserLibraryAccessPage: FunctionComponent = () => { throw new Error('Unexpected null user.Policy'); } - user.Policy.EnableAllFolders = element?.current?.querySelector('.chkEnableAllFolders').checked; - user.Policy.EnabledFolders = user.Policy.EnableAllFolders ? [] : Array.prototype.filter.call(element?.current?.querySelectorAll('.chkFolder'), function (c) { + user.Policy.EnableAllFolders = page.querySelector('.chkEnableAllFolders').checked; + user.Policy.EnabledFolders = user.Policy.EnableAllFolders ? [] : Array.prototype.filter.call(page.querySelectorAll('.chkFolder'), function (c) { return c.checked; }).map(function (c) { return c.getAttribute('data-id'); }); - user.Policy.EnableAllChannels = element?.current?.querySelector('.chkEnableAllChannels').checked; - user.Policy.EnabledChannels = user.Policy.EnableAllChannels ? [] : Array.prototype.filter.call(element?.current?.querySelectorAll('.chkChannel'), function (c) { + user.Policy.EnableAllChannels = page.querySelector('.chkEnableAllChannels').checked; + user.Policy.EnabledChannels = user.Policy.EnableAllChannels ? [] : Array.prototype.filter.call(page.querySelectorAll('.chkChannel'), function (c) { return c.checked; }).map(function (c) { return c.getAttribute('data-id'); }); - user.Policy.EnableAllDevices = element?.current?.querySelector('.chkEnableAllDevices').checked; - user.Policy.EnabledDevices = user.Policy.EnableAllDevices ? [] : Array.prototype.filter.call(element?.current?.querySelectorAll('.chkDevice'), function (c) { + user.Policy.EnableAllDevices = page.querySelector('.chkEnableAllDevices').checked; + user.Policy.EnabledDevices = user.Policy.EnableAllDevices ? [] : Array.prototype.filter.call(page.querySelectorAll('.chkDevice'), function (c) { return c.checked; }).map(function (c) { return c.getAttribute('data-id'); @@ -182,19 +210,19 @@ const UserLibraryAccessPage: FunctionComponent = () => { toast(globalize.translate('SettingsSaved')); }; - element?.current?.querySelector('.chkEnableAllDevices').addEventListener('change', function (this: HTMLInputElement) { - element?.current?.querySelector('.deviceAccessListContainer').classList.toggle('hide', this.checked); + page.querySelector('.chkEnableAllDevices').addEventListener('change', function (this: HTMLInputElement) { + page.querySelector('.deviceAccessListContainer').classList.toggle('hide', this.checked); }); - element?.current?.querySelector('.chkEnableAllChannels').addEventListener('change', function (this: HTMLInputElement) { - element?.current?.querySelector('.channelAccessListContainer').classList.toggle('hide', this.checked); + page.querySelector('.chkEnableAllChannels').addEventListener('change', function (this: HTMLInputElement) { + page.querySelector('.channelAccessListContainer').classList.toggle('hide', this.checked); }); - element?.current?.querySelector('.chkEnableAllFolders').addEventListener('change', function (this: HTMLInputElement) { - element?.current?.querySelector('.folderAccessListContainer').classList.toggle('hide', this.checked); + page.querySelector('.chkEnableAllFolders').addEventListener('change', function (this: HTMLInputElement) { + page.querySelector('.folderAccessListContainer').classList.toggle('hide', this.checked); }); - element?.current?.querySelector('.userLibraryAccessForm').addEventListener('submit', onSubmit); + page.querySelector('.userLibraryAccessForm').addEventListener('submit', onSubmit); }, [loadData]); return ( diff --git a/src/components/pages/UserParentalControl.tsx b/src/components/pages/UserParentalControl.tsx index 6fec792a15..11e9b96e05 100644 --- a/src/components/pages/UserParentalControl.tsx +++ b/src/components/pages/UserParentalControl.tsx @@ -60,6 +60,13 @@ const UserParentalControl: FunctionComponent = () => { }, []); const loadUnratedItems = useCallback((user) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + const items = [{ name: globalize.translate('Books'), value: 'Book' @@ -97,14 +104,21 @@ const UserParentalControl: FunctionComponent = () => { setUnratedItems(itemsArr); - const blockUnratedItems = element?.current?.querySelector('.blockUnratedItems'); + const blockUnratedItems = page.querySelector('.blockUnratedItems'); blockUnratedItems.dispatchEvent(new CustomEvent('create')); }, []); const loadBlockedTags = useCallback((tags) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + setBlockedTags(tags); - const blockedTagsElem = element?.current?.querySelector('.blockedTags'); + const blockedTagsElem = page.querySelector('.blockedTags'); for (const btnDeleteTag of blockedTagsElem.querySelectorAll('.btnDeleteTag')) { btnDeleteTag.addEventListener('click', function () { @@ -118,9 +132,16 @@ const UserParentalControl: FunctionComponent = () => { }, []); const renderAccessSchedule = useCallback((schedules) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + setAccessSchedules(schedules); - const accessScheduleList = element?.current?.querySelector('.accessScheduleList'); + const accessScheduleList = page.querySelector('.accessScheduleList'); for (const btnDelete of accessScheduleList.querySelectorAll('.btnDelete')) { btnDelete.addEventListener('click', function () { @@ -135,6 +156,13 @@ const UserParentalControl: FunctionComponent = () => { }, []); const loadUser = useCallback((user, allParentalRatings) => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + setUserName(user.Name); LibraryMenu.setTitle(user.Name); loadUnratedItems(user); @@ -153,12 +181,12 @@ const UserParentalControl: FunctionComponent = () => { } } - element.current.querySelector('.selectMaxParentalRating').value = ratingValue; + page.querySelector('.selectMaxParentalRating').value = ratingValue; if (user.Policy.IsAdministrator) { - element?.current?.querySelector('.accessScheduleSection').classList.add('hide'); + page.querySelector('.accessScheduleSection').classList.add('hide'); } else { - element?.current?.querySelector('.accessScheduleSection').classList.remove('hide'); + page.querySelector('.accessScheduleSection').classList.remove('hide'); } renderAccessSchedule(user.Policy.AccessSchedules || []); loading.hide(); @@ -175,6 +203,13 @@ const UserParentalControl: FunctionComponent = () => { }, [loadUser]); useEffect(() => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + loadData(); const onSaveComplete = () => { @@ -191,8 +226,8 @@ const UserParentalControl: FunctionComponent = () => { throw new Error('Unexpected null user.Policy'); } - user.Policy.MaxParentalRating = element?.current?.querySelector('.selectMaxParentalRating').value || null; - user.Policy.BlockUnratedItems = Array.prototype.filter.call(element?.current?.querySelectorAll('.chkUnratedItem'), function (i) { + user.Policy.MaxParentalRating = page.querySelector('.selectMaxParentalRating').value || null; + user.Policy.BlockUnratedItems = Array.prototype.filter.call(page.querySelectorAll('.chkUnratedItem'), function (i) { return i.checked; }).map(function (i) { return i.getAttribute('data-itemtype'); @@ -223,7 +258,7 @@ const UserParentalControl: FunctionComponent = () => { }; const getSchedulesFromPage = () => { - return Array.prototype.map.call(element?.current?.querySelectorAll('.liSchedule'), function (elem) { + return Array.prototype.map.call(page.querySelectorAll('.liSchedule'), function (elem) { return { DayOfWeek: elem.getAttribute('data-day'), StartHour: elem.getAttribute('data-start'), @@ -233,7 +268,7 @@ const UserParentalControl: FunctionComponent = () => { }; const getBlockedTagsFromPage = () => { - return Array.prototype.map.call(element?.current?.querySelectorAll('.blockedTag'), function (elem) { + return Array.prototype.map.call(page.querySelectorAll('.blockedTag'), function (elem) { return elem.getAttribute('data-tag'); }); }; @@ -264,15 +299,15 @@ const UserParentalControl: FunctionComponent = () => { return false; }; - element?.current?.querySelector('.btnAddSchedule').addEventListener('click', function () { + page.querySelector('.btnAddSchedule').addEventListener('click', function () { showSchedulePopup({}, -1); }); - element?.current?.querySelector('.btnAddBlockedTag').addEventListener('click', function () { + page.querySelector('.btnAddBlockedTag').addEventListener('click', function () { showBlockedTagPopup(); }); - element?.current?.querySelector('.userParentalControlForm').addEventListener('submit', onSubmit); + page.querySelector('.userParentalControlForm').addEventListener('submit', onSubmit); }, [loadBlockedTags, loadData, renderAccessSchedule]); return ( diff --git a/src/components/pages/UserProfilesPage.tsx b/src/components/pages/UserProfilesPage.tsx index ede1ba9f3b..82bed095e9 100644 --- a/src/components/pages/UserProfilesPage.tsx +++ b/src/components/pages/UserProfilesPage.tsx @@ -34,6 +34,13 @@ const UserProfilesPage: FunctionComponent = () => { }; useEffect(() => { + const page = element.current; + + if (!page) { + console.error('Unexpected null reference'); + return; + } + loadData(); const showUserMenu = (elem: HTMLElement) => { @@ -105,7 +112,7 @@ const UserProfilesPage: FunctionComponent = () => { }); }; - element?.current?.addEventListener('click', function (e) { + page.addEventListener('click', function (e) { const btnUserMenu = dom.parentWithClass(e.target, 'btnUserMenu'); if (btnUserMenu) { @@ -113,7 +120,7 @@ const UserProfilesPage: FunctionComponent = () => { } }); - element?.current?.querySelector('.btnAddUser').addEventListener('click', function() { + page.querySelector('.btnAddUser').addEventListener('click', function() { Dashboard.navigate('usernew.html'); }); }, []);