aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2022-08-06 11:40:07 -0700
committerAnton Tananaev <anton@traccar.org>2022-08-06 11:40:07 -0700
commit15c780b0e08062328e3708e38f47c3361da1f345 (patch)
tree8162c6cf042ff4e6488013c92ce888fd46c90932
parent1a4086a8bbca15a5f197f2f4ead79d9dd045f251 (diff)
downloadtrackermap-web-15c780b0e08062328e3708e38f47c3361da1f345.tar.gz
trackermap-web-15c780b0e08062328e3708e38f47c3361da1f345.tar.bz2
trackermap-web-15c780b0e08062328e3708e38f47c3361da1f345.zip
Better logo handling
-rw-r--r--modern/src/login/LoginLayout.js9
-rw-r--r--modern/src/login/LoginPage.js14
-rw-r--r--modern/src/login/LogoImage.js42
3 files changed, 46 insertions, 19 deletions
diff --git a/modern/src/login/LoginLayout.js b/modern/src/login/LoginLayout.js
index 83a87500..8f2ee6ca 100644
--- a/modern/src/login/LoginLayout.js
+++ b/modern/src/login/LoginLayout.js
@@ -2,7 +2,7 @@ import React from 'react';
import { useMediaQuery, Paper } from '@mui/material';
import makeStyles from '@mui/styles/makeStyles';
import { useTheme } from '@mui/material/styles';
-import logoSvg from '../resources/images/logo.svg';
+import LogoImage from './LogoImage';
const useStyles = makeStyles((theme) => ({
root: {
@@ -13,7 +13,6 @@ const useStyles = makeStyles((theme) => ({
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
- color: theme.palette.secondary.contrastText,
background: theme.palette.primary.main,
paddingBottom: theme.spacing(5),
width: theme.dimensions.sidebarWidth,
@@ -49,11 +48,7 @@ const LoginLayout = ({ children }) => {
return (
<main className={classes.root}>
<div className={classes.sidebar}>
- {!useMediaQuery(theme.breakpoints.down('lg')) && (
- <svg height="64" width="240">
- <use xlinkHref={`${logoSvg}#img`} />
- </svg>
- )}
+ {!useMediaQuery(theme.breakpoints.down('lg')) && <LogoImage color={theme.palette.secondary.contrastText} />}
</div>
<Paper className={classes.paper}>
<form className={classes.form}>
diff --git a/modern/src/login/LoginPage.js b/modern/src/login/LoginPage.js
index 87192a3f..e3b5f39b 100644
--- a/modern/src/login/LoginPage.js
+++ b/modern/src/login/LoginPage.js
@@ -12,8 +12,8 @@ import { sessionActions } from '../store';
import { useLocalization, useTranslation } from '../common/components/LocalizationProvider';
import LoginLayout from './LoginLayout';
import usePersistedState from '../common/util/usePersistedState';
-import logoSvg from '../resources/images/logo.svg';
import { nativePostMessage } from '../common/components/NativeInterface';
+import LogoImage from './LogoImage';
const useStyles = makeStyles((theme) => ({
options: {
@@ -26,10 +26,6 @@ const useStyles = makeStyles((theme) => ({
flexDirection: 'column',
gap: theme.spacing(2),
},
- logoContainer: {
- textAlign: 'center',
- color: theme.palette.primary.main,
- },
extraContainer: {
display: 'flex',
gap: theme.spacing(2),
@@ -105,13 +101,7 @@ const LoginPage = () => {
)}
</div>
<div className={classes.container}>
- {useMediaQuery(theme.breakpoints.down('lg')) && (
- <div className={classes.logoContainer}>
- <svg height="64" width="240">
- <use xlinkHref={`${logoSvg}#img`} />
- </svg>
- </div>
- )}
+ {useMediaQuery(theme.breakpoints.down('lg')) && <LogoImage color={theme.palette.primary.main} />}
<TextField
required
error={failed}
diff --git a/modern/src/login/LogoImage.js b/modern/src/login/LogoImage.js
new file mode 100644
index 00000000..d3f4b1ce
--- /dev/null
+++ b/modern/src/login/LogoImage.js
@@ -0,0 +1,42 @@
+import React, { useRef } from 'react';
+import { makeStyles } from '@mui/styles';
+import image from '../resources/images/logo.svg';
+
+const useStyles = makeStyles(() => ({
+ image: {
+ alignSelf: 'center',
+ maxWidth: '240px',
+ maxHeight: '120px',
+ width: 'auto',
+ height: 'auto',
+ visibility: 'hidden',
+ },
+}));
+
+const LogoImage = ({ color }) => {
+ const classes = useStyles();
+
+ const element = useRef(null);
+
+ return (
+ <object
+ type="image/svg+xml"
+ data={image}
+ aria-label="logo"
+ className={classes.image}
+ ref={element}
+ onLoad={() => {
+ const imageDocument = element.current.contentDocument;
+ imageDocument.querySelectorAll('svg').forEach((element) => {
+ const style = imageDocument.createElement('style');
+ style.appendChild(imageDocument.createTextNode(`g { color: ${color}; }`));
+ element.insertAdjacentElement('afterbegin', style);
+ element.innerHTML += '';
+ });
+ element.current.style.visibility = 'visible';
+ }}
+ />
+ );
+};
+
+export default LogoImage;