diff --git a/src/components/login/LoginView.tsx b/src/components/login/LoginView.tsx index 2da9120..e77dac5 100644 --- a/src/components/login/LoginView.tsx +++ b/src/components/login/LoginView.tsx @@ -196,12 +196,15 @@ export const LoginView: FC = ({ onAuthenticated, isEntering = fa const [ loginViewConfig, setLoginViewConfig ] = useState>(() => GetConfigurationValue>('loginview', {})); const submitTimeRef = useRef(0); - const configuredLoginImages: Record = (loginViewConfig?.['images'] as Record) ?? {}; - const loginImages: Record = { ...getDefaultLoginImages(), ...configuredLoginImages }; - - const configuredLoginWidgets: Record = (loginViewConfig?.['widgets'] as Record) ?? {}; + const loginImages = useMemo>(() => + { + const configured = (loginViewConfig?.['images'] as Record) ?? {}; + return { ...getDefaultLoginImages(), ...configured }; + }, [ loginViewConfig ]); + const loginWidgetSlots = useMemo(() => { + const configuredLoginWidgets = (loginViewConfig?.['widgets'] as Record) ?? {}; return Object.entries(configuredLoginWidgets) .filter(([ key, value ]) => key.startsWith('slot.') && key.endsWith('.widget') && typeof value === 'string' && value.length > 0) .map(([ key, value ]) => @@ -213,7 +216,7 @@ export const LoginView: FC = ({ onAuthenticated, isEntering = fa }) .filter(slot => slot.slotNum > 0) .sort((a, b) => a.slotNum - b.slotNum); - }, [ configuredLoginWidgets ]); + }, [ loginViewConfig ]); const backgroundColor = (loginImages['background.colour'] || GetConfigurationValue('login_background.colour', '#6eadc8')); const background = interpolate(loginImages['background'] || GetConfigurationValue('login_background', '')); @@ -222,11 +225,6 @@ export const LoginView: FC = ({ onAuthenticated, isEntering = fa const left = interpolate(loginImages['left'] || GetConfigurationValue('login_left', '')); const rightRepeat = interpolate(loginImages['right.repeat'] || GetConfigurationValue('login_right.repeat', '')); const right = interpolate(loginImages['right'] || GetConfigurationValue('login_right', '')); - const widgetImageUrls = useMemo(() => loginWidgetSlots - .map(slot => typeof slot.conf.image === 'string' ? interpolate(slot.conf.image) : '') - .filter(Boolean), [ loginWidgetSlots ]); - const loginImageUrls = useMemo(() => [ background, sun, drape, left, rightRepeat, right, ...widgetImageUrls ].filter(Boolean), [ background, sun, drape, left, rightRepeat, right, widgetImageUrls ]); - const [ loginImagesVersion, setLoginImagesVersion ] = useState(0); const loginUrl = GetConfigurationValue('login.endpoint', '/api/auth/login'); const registerUrl = GetConfigurationValue('login.register.endpoint', '/api/auth/register'); const forgotUrl = GetConfigurationValue('login.forgot.endpoint', '/api/auth/forgot-password'); @@ -306,30 +304,6 @@ export const LoginView: FC = ({ onAuthenticated, isEntering = fa } }, [ localeApplying, selectedLocale ]); - useEffect(() => - { - if(!loginImageUrls.length) return; - - let cancelled = false; - - loginImageUrls.forEach(url => - { - const image = new Image(); - - image.onload = image.onerror = () => - { - if(!cancelled) setLoginImagesVersion(version => version + 1); - }; - - image.src = url; - }); - - return () => - { - cancelled = true; - }; - }, [ loginImageUrls ]); - useEffect(() => { if(!info) return; @@ -645,9 +619,6 @@ export const LoginView: FC = ({ onAuthenticated, isEntering = fa { left ? : null } { rightRepeat ?
: null } { right ? : null } - { loginWidgetSlots.length > 0 &&