Merge pull request #561 from proddy/dev

table resizing fix
This commit is contained in:
Proddy
2022-06-25 14:28:07 +02:00
committed by GitHub
13 changed files with 283 additions and 381 deletions

View File

@@ -14,8 +14,12 @@
## Fixed ## Fixed
- fix Table resizing in WebUI [#519](https://github.com/emsesp/EMS-ESP32/issues/519)
## Changed ## Changed
- Shorten "friendly names" in Home Assistant [#555](https://github.com/emsesp/EMS-ESP32/issues/555)
- platformio 2.3.0 (IDF 4, Arduino 2) - platformio 2.3.0 (IDF 4, Arduino 2)
- remove master-thermostat, support multiple thermostats - remove master-thermostat, support multiple thermostats

View File

@@ -12,14 +12,14 @@
"@emotion/styled": "^11.9.3", "@emotion/styled": "^11.9.3",
"@msgpack/msgpack": "^2.7.2", "@msgpack/msgpack": "^2.7.2",
"@mui/icons-material": "^5.8.4", "@mui/icons-material": "^5.8.4",
"@mui/material": "^5.8.4", "@mui/material": "^5.8.5",
"@table-library/react-table-library": "^3.1.5", "@table-library/react-table-library": "3.2.0-beta.1",
"@types/lodash": "^4.14.182", "@types/lodash": "^4.14.182",
"@types/node": "^18.0.0", "@types/node": "^18.0.0",
"@types/react": "^18.0.14", "@types/react": "^18.0.14",
"@types/react-dom": "^18.0.5", "@types/react-dom": "^18.0.5",
"@types/react-router-dom": "^5.3.3", "@types/react-router-dom": "^5.3.3",
"async-validator": "^4.1.1", "async-validator": "^4.2.5",
"axios": "^0.27.2", "axios": "^0.27.2",
"http-proxy-middleware": "^2.0.6", "http-proxy-middleware": "^2.0.6",
"jwt-decode": "^3.1.2", "jwt-decode": "^3.1.2",
@@ -34,10 +34,10 @@
"react-router-dom": "^6.3.0", "react-router-dom": "^6.3.0",
"react-scripts": "5.0.1", "react-scripts": "5.0.1",
"sockette": "^2.0.6", "sockette": "^2.0.6",
"typescript": "^4.7.3" "typescript": "^4.7.4"
}, },
"devDependencies": { "devDependencies": {
"nodemon": "^2.0.16", "nodemon": "^2.0.18",
"npm-run-all": "^4.1.5" "npm-run-all": "^4.1.5"
} }
}, },
@@ -3028,9 +3028,9 @@
} }
}, },
"node_modules/@mui/base": { "node_modules/@mui/base": {
"version": "5.0.0-alpha.85", "version": "5.0.0-alpha.86",
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.85.tgz", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.86.tgz",
"integrity": "sha512-ONlQJOmQrxmR+pYF9AqH69FOG4ofwzVzNltwb2xKAQIW3VbsNZahcHIpzhFd70W6EIU+QHzB9TzamSM+Fg/U7w==", "integrity": "sha512-0vi/Nni1mizrgrzKeyksEjw5JVSrgT8Vr2NhxzFtYxqpMgtdSrBvcmcuzBf9kE/ECMPbgpSIcqv0nLbLZUYkOQ==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@emotion/is-prop-valid": "^1.1.2", "@emotion/is-prop-valid": "^1.1.2",
@@ -3085,13 +3085,13 @@
} }
}, },
"node_modules/@mui/material": { "node_modules/@mui/material": {
"version": "5.8.4", "version": "5.8.5",
"resolved": "https://registry.npmjs.org/@mui/material/-/material-5.8.4.tgz", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.8.5.tgz",
"integrity": "sha512-KlOJS1JGhwuhdoF4fulmz41h/YxyMdZSc+ncz+HAah0GKn8ovAs5774f1w0lIasxbtI1Ziunwvmnu9PvvUKdMw==", "integrity": "sha512-wngPXlOI9BurLSGlObQM/2L0QFFaIcvJnDK5A+ALxuUyuQnPviVWfC1l/r8rPlxQ4PCbSYpq3gzLlgnLoWcO/g==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@mui/base": "5.0.0-alpha.85", "@mui/base": "5.0.0-alpha.86",
"@mui/system": "^5.8.4", "@mui/system": "^5.8.5",
"@mui/types": "^7.1.4", "@mui/types": "^7.1.4",
"@mui/utils": "^5.8.4", "@mui/utils": "^5.8.4",
"@types/react-transition-group": "^4.4.4", "@types/react-transition-group": "^4.4.4",
@@ -3184,9 +3184,9 @@
} }
}, },
"node_modules/@mui/system": { "node_modules/@mui/system": {
"version": "5.8.4", "version": "5.8.5",
"resolved": "https://registry.npmjs.org/@mui/system/-/system-5.8.4.tgz", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.8.5.tgz",
"integrity": "sha512-eeYZXlOn4p+tYwqqDlci6wW4knJ68aGx5A24YU9ubYZ5o0IwveoNP3LC9sHAMxigk/mUTqL4bpSMJ2HbTn2aQg==", "integrity": "sha512-1bhITHp5sX/CVEf1QwtBWvW+kNnH+GU7lKz0CeAL1RyH9dWvoL9Yt/+i/L8hJ6jVZB/7Au2F6MsyDPt8V1jfdA==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@mui/private-theming": "^5.8.4", "@mui/private-theming": "^5.8.4",
@@ -3725,9 +3725,9 @@
} }
}, },
"node_modules/@table-library/react-table-library": { "node_modules/@table-library/react-table-library": {
"version": "3.1.5", "version": "3.2.0-beta.1",
"resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.5.tgz", "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.2.0-beta.1.tgz",
"integrity": "sha512-yJXR+RaP3Wt3vqe34PXjKZMsce9ZApkwdhvsgJ/39QicSnPx4cYSJ1/mCrGfkYYRcXzIkvsX38ElCZcp8uTl1A==", "integrity": "sha512-WKSf0n8GQxCikTxwxjHLplG9xTsSxlu1INe6bW9/CgcJab04NyA03pvTDUU0J1C0xxDhdxtcoM8dFrHnP2XpwQ==",
"dependencies": { "dependencies": {
"clsx": "1.1.1", "clsx": "1.1.1",
"react-virtualized-auto-sizer": "1.0.6", "react-virtualized-auto-sizer": "1.0.6",
@@ -4872,9 +4872,9 @@
"integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
}, },
"node_modules/async-validator": { "node_modules/async-validator": {
"version": "4.1.1", "version": "4.2.5",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.1.1.tgz", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
"integrity": "sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==" "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
}, },
"node_modules/asynckit": { "node_modules/asynckit": {
"version": "0.4.0", "version": "0.4.0",
@@ -12489,9 +12489,9 @@
"integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
}, },
"node_modules/nodemon": { "node_modules/nodemon": {
"version": "2.0.16", "version": "2.0.18",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz",
"integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
@@ -16801,9 +16801,9 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "4.7.3", "version": "4.7.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
"integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
@@ -20090,9 +20090,9 @@
"integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw==" "integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw=="
}, },
"@mui/base": { "@mui/base": {
"version": "5.0.0-alpha.85", "version": "5.0.0-alpha.86",
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.85.tgz", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.86.tgz",
"integrity": "sha512-ONlQJOmQrxmR+pYF9AqH69FOG4ofwzVzNltwb2xKAQIW3VbsNZahcHIpzhFd70W6EIU+QHzB9TzamSM+Fg/U7w==", "integrity": "sha512-0vi/Nni1mizrgrzKeyksEjw5JVSrgT8Vr2NhxzFtYxqpMgtdSrBvcmcuzBf9kE/ECMPbgpSIcqv0nLbLZUYkOQ==",
"requires": { "requires": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@emotion/is-prop-valid": "^1.1.2", "@emotion/is-prop-valid": "^1.1.2",
@@ -20113,13 +20113,13 @@
} }
}, },
"@mui/material": { "@mui/material": {
"version": "5.8.4", "version": "5.8.5",
"resolved": "https://registry.npmjs.org/@mui/material/-/material-5.8.4.tgz", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.8.5.tgz",
"integrity": "sha512-KlOJS1JGhwuhdoF4fulmz41h/YxyMdZSc+ncz+HAah0GKn8ovAs5774f1w0lIasxbtI1Ziunwvmnu9PvvUKdMw==", "integrity": "sha512-wngPXlOI9BurLSGlObQM/2L0QFFaIcvJnDK5A+ALxuUyuQnPviVWfC1l/r8rPlxQ4PCbSYpq3gzLlgnLoWcO/g==",
"requires": { "requires": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@mui/base": "5.0.0-alpha.85", "@mui/base": "5.0.0-alpha.86",
"@mui/system": "^5.8.4", "@mui/system": "^5.8.5",
"@mui/types": "^7.1.4", "@mui/types": "^7.1.4",
"@mui/utils": "^5.8.4", "@mui/utils": "^5.8.4",
"@types/react-transition-group": "^4.4.4", "@types/react-transition-group": "^4.4.4",
@@ -20151,9 +20151,9 @@
} }
}, },
"@mui/system": { "@mui/system": {
"version": "5.8.4", "version": "5.8.5",
"resolved": "https://registry.npmjs.org/@mui/system/-/system-5.8.4.tgz", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.8.5.tgz",
"integrity": "sha512-eeYZXlOn4p+tYwqqDlci6wW4knJ68aGx5A24YU9ubYZ5o0IwveoNP3LC9sHAMxigk/mUTqL4bpSMJ2HbTn2aQg==", "integrity": "sha512-1bhITHp5sX/CVEf1QwtBWvW+kNnH+GU7lKz0CeAL1RyH9dWvoL9Yt/+i/L8hJ6jVZB/7Au2F6MsyDPt8V1jfdA==",
"requires": { "requires": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"@mui/private-theming": "^5.8.4", "@mui/private-theming": "^5.8.4",
@@ -20472,9 +20472,9 @@
} }
}, },
"@table-library/react-table-library": { "@table-library/react-table-library": {
"version": "3.1.5", "version": "3.2.0-beta.1",
"resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.5.tgz", "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.2.0-beta.1.tgz",
"integrity": "sha512-yJXR+RaP3Wt3vqe34PXjKZMsce9ZApkwdhvsgJ/39QicSnPx4cYSJ1/mCrGfkYYRcXzIkvsX38ElCZcp8uTl1A==", "integrity": "sha512-WKSf0n8GQxCikTxwxjHLplG9xTsSxlu1INe6bW9/CgcJab04NyA03pvTDUU0J1C0xxDhdxtcoM8dFrHnP2XpwQ==",
"requires": { "requires": {
"clsx": "1.1.1", "clsx": "1.1.1",
"react-virtualized-auto-sizer": "1.0.6", "react-virtualized-auto-sizer": "1.0.6",
@@ -21393,9 +21393,9 @@
"integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
}, },
"async-validator": { "async-validator": {
"version": "4.1.1", "version": "4.2.5",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.1.1.tgz", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
"integrity": "sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==" "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
}, },
"asynckit": { "asynckit": {
"version": "0.4.0", "version": "0.4.0",
@@ -26949,9 +26949,9 @@
"integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
}, },
"nodemon": { "nodemon": {
"version": "2.0.16", "version": "2.0.18",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz",
"integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==",
"dev": true, "dev": true,
"requires": { "requires": {
"chokidar": "^3.5.2", "chokidar": "^3.5.2",
@@ -29957,9 +29957,9 @@
} }
}, },
"typescript": { "typescript": {
"version": "4.7.3", "version": "4.7.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
"integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==" "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ=="
}, },
"unbox-primitive": { "unbox-primitive": {
"version": "1.0.2", "version": "1.0.2",

View File

@@ -8,14 +8,14 @@
"@emotion/styled": "^11.9.3", "@emotion/styled": "^11.9.3",
"@msgpack/msgpack": "^2.7.2", "@msgpack/msgpack": "^2.7.2",
"@mui/icons-material": "^5.8.4", "@mui/icons-material": "^5.8.4",
"@mui/material": "^5.8.4", "@mui/material": "^5.8.5",
"@table-library/react-table-library": "^3.1.5", "@table-library/react-table-library": "3.2.0-beta.1",
"@types/lodash": "^4.14.182", "@types/lodash": "^4.14.182",
"@types/node": "^18.0.0", "@types/node": "^18.0.0",
"@types/react": "^18.0.14", "@types/react": "^18.0.14",
"@types/react-dom": "^18.0.5", "@types/react-dom": "^18.0.5",
"@types/react-router-dom": "^5.3.3", "@types/react-router-dom": "^5.3.3",
"async-validator": "^4.1.1", "async-validator": "^4.2.5",
"axios": "^0.27.2", "axios": "^0.27.2",
"http-proxy-middleware": "^2.0.6", "http-proxy-middleware": "^2.0.6",
"jwt-decode": "^3.1.2", "jwt-decode": "^3.1.2",
@@ -30,7 +30,7 @@
"react-router-dom": "^6.3.0", "react-router-dom": "^6.3.0",
"react-scripts": "5.0.1", "react-scripts": "5.0.1",
"sockette": "^2.0.6", "sockette": "^2.0.6",
"typescript": "^4.7.3" "typescript": "^4.7.4"
}, },
"scripts": { "scripts": {
"start": "react-app-rewired start", "start": "react-app-rewired start",
@@ -97,7 +97,7 @@
] ]
}, },
"devDependencies": { "devDependencies": {
"nodemon": "^2.0.16", "nodemon": "^2.0.18",
"npm-run-all": "^4.1.5" "npm-run-all": "^4.1.5"
} }
} }

View File

@@ -35,43 +35,44 @@ const ManageUsersForm: FC = () => {
const authenticatedContext = useContext(AuthenticatedContext); const authenticatedContext = useContext(AuthenticatedContext);
const table_theme = useTheme({ const table_theme = useTheme({
Table: `
--data-table-library_grid-template-columns: repeat(1, minmax(0, 1fr)) 90px 120px;
`,
BaseRow: ` BaseRow: `
font-size: 14px; font-size: 14px;
color: white;
padding-left: 8px;
`, `,
HeaderRow: ` HeaderRow: `
text-transform: uppercase; text-transform: uppercase;
background-color: black; background-color: black;
color: #90CAF9; color: #90CAF9;
font-weight: 500; .th {
border-bottom: 1px solid #e0e0e0; padding: 8px;
height: 42px;
font-weight: 500;
border-bottom: 1px solid #565656;
}
`, `,
Row: ` Row: `
&:nth-of-type(odd) { .td {
padding: 8px;
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
}
&:nth-of-type(odd) .td {
background-color: #303030; background-color: #303030;
} }
&:nth-of-type(even) { &:nth-of-type(even) .td {
background-color: #1e1e1e; background-color: #1e1e1e;
} }
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
position: relative;
z-index: 1;
&:not(:last-of-type) {
margin-bottom: -1px;
}
&:not(:first-of-type) {
margin-top: -1px;
}
&:hover {
color: white;
}
`, `,
BaseCell: ` BaseCell: `
border-top: 1px solid transparent; &:nth-of-type(2) {
border-right: 1px solid transparent; text-align: center;
border-bottom: 1px solid transparent; }
&:last-of-type {
text-align: right;
}
` `
}); });
@@ -130,22 +131,22 @@ const ManageUsersForm: FC = () => {
return ( return (
<> <>
<Table data={{ nodes: user_table }} theme={table_theme}> <Table data={{ nodes: user_table }} theme={table_theme} layout={{ custom: true }}>
{(tableList: any) => ( {(tableList: any) => (
<> <>
<Header> <Header>
<HeaderRow> <HeaderRow>
<HeaderCell>USERNAME</HeaderCell> <HeaderCell resize>USERNAME</HeaderCell>
<HeaderCell>IS ADMIN</HeaderCell> <HeaderCell stiff>IS ADMIN</HeaderCell>
<HeaderCell /> <HeaderCell stiff />
</HeaderRow> </HeaderRow>
</Header> </Header>
<Body> <Body>
{tableList.map((u: any) => ( {tableList.map((u: any) => (
<Row key={u.id} item={u}> <Row key={u.id} item={u}>
<Cell>{u.username}</Cell> <Cell>{u.username}</Cell>
<Cell>{u.admin ? <CheckIcon /> : <CloseIcon />}</Cell> <Cell stiff>{u.admin ? <CheckIcon /> : <CloseIcon />}</Cell>
<Cell> <Cell stiff>
<IconButton <IconButton
size="small" size="small"
disabled={!authenticatedContext.me.admin} disabled={!authenticatedContext.me.admin}

View File

@@ -88,185 +88,121 @@ const DashboardData: FC = () => {
const [deviceDialog, setDeviceDialog] = useState<number>(-1); const [deviceDialog, setDeviceDialog] = useState<number>(-1);
const [onlyFav, setOnlyFav] = useState(false); const [onlyFav, setOnlyFav] = useState(false);
const device_theme = useTheme({ const common_theme = useTheme({
BaseRow: ` BaseRow: `
font-size: 14px; font-size: 14px;
color: white;
height: 46px;
&:focus {
z-index: 2;
border-top: 1px solid #177ac9;
border-bottom: 1px solid #177ac9;
}
`, `,
HeaderRow: ` HeaderRow: `
text-transform: uppercase; text-transform: uppercase;
background-color: black; background-color: black;
color: #90CAF9; color: #90CAF9;
border-bottom: 1px solid #e0e0e0;
font-weight: 500; .th {
border-bottom: 1px solid #565656;
}
`, `,
Row: ` Row: `
background-color: #1e1e1e; background-color: #1e1e1e;
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
position: relative; position: relative;
z-index: 1; cursor: pointer;
&:not(:last-of-type) {
margin-bottom: -1px; .td {
padding: 8px;
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
} }
&:not(:first-of-type) {
margin-top: -1px; &.tr.tr-body.row-select.row-select-single-selected {
}
&:hover {
z-index: 2;
color: white;
border-top: 1px solid #177ac9;
border-bottom: 1px solid #177ac9;
},
&.tr.tr-body.row-select.row-select-single-selected, &.tr.tr-body.row-select.row-select-selected {
background-color: #3d4752; background-color: #3d4752;
color: white; color: white;
font-weight: normal; font-weight: normal;
z-index: 2; }
&:hover .td {
border-top: 1px solid #177ac9; border-top: 1px solid #177ac9;
border-bottom: 1px solid #177ac9; border-bottom: 1px solid #177ac9;
} }
`, `,
BaseCell: ` Cell: `
border-top: 1px solid transparent;
border-right: 1px solid transparent;
border-bottom: 1px solid transparent;
&:not(.stiff) > div {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
&:nth-of-type(1) {
padding-left: 8px;
min-width: 42px;
width: 42px;
div {
width: 100%;
}
}
&:nth-of-type(2) {
min-width: 100px;
width: 100px;
}
&:nth-of-type(3) {
flex: 1;
}
&:nth-of-type(4) {
text-align: center;
max-width: 100px;
}
&:last-of-type { &:last-of-type {
padding-left: 0px; text-align: right;
text-align: center; },
width: 32px;
min-width: 32px;
max-width: 32px;
}
` `
}); });
const data_theme = useTheme({ const device_theme = useTheme([
BaseRow: ` common_theme,
font-size: 14px; {
color: white; Table: `
min-height: 32px; --data-table-library_grid-template-columns: 40px 100px repeat(1, minmax(0, 1fr)) 80px 40px;
`, `,
HeaderRow: ` BaseRow: `
text-transform: uppercase; .td {
background-color: black; height: 42px;
color: #90CAF9; }
border-bottom: 1px solid #e0e0e0; `,
font-weight: 500; BaseCell: `
`, &:nth-of-type(2) {
Row: ` text-align: left;
&:nth-of-type(odd) { },
background-color: #303030; &:nth-of-type(4) {
} text-align: center;
&:nth-of-type(even) { }
background-color: #1e1e1e; `,
} HeaderRow: `
border-top: 1px solid #565656; .th {
border-bottom: 1px solid #565656; padding: 8px;
position: relative; height: 42px;
z-index: 1; font-weight: 500;
&:not(:last-of-type) { `
margin-bottom: -1px; }
} ]);
&:not(:first-of-type) {
margin-top: -1px; const data_theme = useTheme([
} common_theme,
&:hover { {
z-index: 2; Table: `
border-top: 1px solid #177ac9; --data-table-library_grid-template-columns: repeat(1, minmax(0, 1fr)) 200px 40px;
border-bottom: 1px solid #177ac9; `,
color: white; BaseRow: `
} .td {
`, height: 32px;
BaseCell: ` }
padding-left: 16px; `,
cursor: pointer; BaseCell: `
border-top: 1px solid transparent; &:nth-of-type(2) {
border-right: 1px solid transparent; text-align: right;
border-bottom: 1px solid transparent; },
&:not(.stiff) > div { `,
white-space: nowrap; HeaderRow: `
overflow: hidden; .th {
text-overflow: ellipsis; height: 32px;
} }
&:nth-of-type(1) { `,
width: 260px; Row: `
} &:nth-of-type(odd) .td {
&:nth-of-type(2) { background-color: #303030;
flex: 1; }
text-align: right; `
} }
&:last-of-type { ]);
padding-left: 0px;
text-align: center;
width: 32px;
min-width: 32px;
max-width: 32px;
}
`,
HeaderCell: `
&:not(:last-of-type) {
padding-left: 8px;
border-left: 1px solid #565656;
}
&:first-of-type {
border-left: 0px;
}
`
});
const temperature_theme = useTheme([data_theme]); const temperature_theme = useTheme([data_theme]);
const analog_theme = useTheme([ const analog_theme = useTheme([
data_theme, data_theme,
{ {
Table: `
--data-table-library_grid-template-columns: 80px repeat(1, minmax(0, 1fr)) 120px 100px 40px;
`,
BaseCell: ` BaseCell: `
&:nth-of-type(1) {
width: 100px;
min-width: 100px;
}
&:nth-of-type(2) { &:nth-of-type(2) {
text-align: left; text-align: left;
} },
&:nth-of-type(3) {
width: 100px;
min-width: 100px;
}
&:nth-of-type(4) { &:nth-of-type(4) {
text-align: right; text-align: right;
flex: 1;
} }
` `
} }
]); ]);
@@ -536,6 +472,7 @@ const DashboardData: FC = () => {
label={deviceValue.id.slice(2)} label={deviceValue.id.slice(2)}
value={deviceValue.u ? numberValue(deviceValue.v) : deviceValue.v} value={deviceValue.u ? numberValue(deviceValue.v) : deviceValue.v}
autoFocus autoFocus
multiline
sx={{ width: '30ch' }} sx={{ width: '30ch' }}
type={deviceValue.u ? 'number' : 'text'} type={deviceValue.u ? 'number' : 'text'}
onChange={updateValue(setDeviceValue)} onChange={updateValue(setDeviceValue)}
@@ -709,23 +646,23 @@ const DashboardData: FC = () => {
<> <>
<Header> <Header>
<HeaderRow> <HeaderRow>
<HeaderCell /> <HeaderCell stiff />
<HeaderCell>TYPE</HeaderCell> <HeaderCell stiff>TYPE</HeaderCell>
<HeaderCell>DESCRIPTION</HeaderCell> <HeaderCell resize>DESCRIPTION</HeaderCell>
<HeaderCell>ENTITIES</HeaderCell> <HeaderCell stiff>ENTITIES</HeaderCell>
<HeaderCell /> <HeaderCell stiff />
</HeaderRow> </HeaderRow>
</Header> </Header>
<Body> <Body>
{tableList.map((device: Device, index: number) => ( {tableList.map((device: Device, index: number) => (
<Row key={device.id} item={device}> <Row key={device.id} item={device}>
<Cell> <Cell stiff>
<DeviceIcon type={device.t} /> <DeviceIcon type={device.t} />
</Cell> </Cell>
<Cell>{device.t}</Cell> <Cell stiff>{device.t}</Cell>
<Cell>{device.n}</Cell> <Cell>{device.n}</Cell>
<Cell>{device.e}</Cell> <Cell stiff>{device.e}</Cell>
<Cell> <Cell stiff>
<IconButton size="small" onClick={() => setDeviceDialog(index)}> <IconButton size="small" onClick={() => setDeviceDialog(index)}>
<InfoOutlinedIcon color="info" sx={{ fontSize: 16, verticalAlign: 'middle' }} /> <InfoOutlinedIcon color="info" sx={{ fontSize: 16, verticalAlign: 'middle' }} />
</IconButton> </IconButton>
@@ -778,7 +715,7 @@ const DashboardData: FC = () => {
return ( return (
<> <>
<Typography sx={{ pt: 2, pb: 1 }} variant="h6" color="primary"> <Typography sx={{ pt: 2, pb: 1 }} variant="h6" color="secondary">
{deviceData.label} {deviceData.label}
</Typography> </Typography>
<FormControlLabel <FormControlLabel
@@ -814,7 +751,7 @@ const DashboardData: FC = () => {
ENTITY NAME ENTITY NAME
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell> <HeaderCell reszie>
<Button <Button
fullWidth fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-end' }} style={{ fontSize: '14px', justifyContent: 'flex-end' }}
@@ -824,7 +761,7 @@ const DashboardData: FC = () => {
VALUE VALUE
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell /> <HeaderCell stiff />
</HeaderRow> </HeaderRow>
</Header> </Header>
<Body> <Body>
@@ -832,7 +769,7 @@ const DashboardData: FC = () => {
<Row key={dv.id} item={dv} onClick={() => sendCommand(dv)}> <Row key={dv.id} item={dv} onClick={() => sendCommand(dv)}>
<Cell>{renderNameCell(dv)}</Cell> <Cell>{renderNameCell(dv)}</Cell>
<Cell>{formatValue(dv.v, dv.u)}</Cell> <Cell>{formatValue(dv.v, dv.u)}</Cell>
<Cell> <Cell stiff>
{dv.c && me.admin && !hasMask(dv.id, DeviceEntityMask.DV_READONLY) && ( {dv.c && me.admin && !hasMask(dv.id, DeviceEntityMask.DV_READONLY) && (
<IconButton size="small" onClick={() => sendCommand(dv)}> <IconButton size="small" onClick={() => sendCommand(dv)}>
{isCmdOnly(dv) ? ( {isCmdOnly(dv) ? (
@@ -867,7 +804,7 @@ const DashboardData: FC = () => {
const renderDallasData = () => ( const renderDallasData = () => (
<> <>
<Typography sx={{ pt: 2, pb: 1 }} variant="h6" color="primary"> <Typography sx={{ pt: 2, pb: 1 }} variant="h6" color="secondary">
Temperature Sensors Temperature Sensors
</Typography> </Typography>
<Table <Table
@@ -890,7 +827,7 @@ const DashboardData: FC = () => {
NAME NAME
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell> <HeaderCell stiff>
<Button <Button
fullWidth fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-end' }} style={{ fontSize: '14px', justifyContent: 'flex-end' }}
@@ -900,7 +837,7 @@ const DashboardData: FC = () => {
TEMPERATURE TEMPERATURE
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell /> <HeaderCell stiff />
</HeaderRow> </HeaderRow>
</Header> </Header>
<Body> <Body>
@@ -926,7 +863,7 @@ const DashboardData: FC = () => {
const renderAnalogData = () => ( const renderAnalogData = () => (
<> <>
<Typography sx={{ pt: 2, pb: 1 }} variant="h6" color="primary"> <Typography sx={{ pt: 2, pb: 1 }} variant="h6" color="secondary">
Analog Sensors Analog Sensors
</Typography> </Typography>
@@ -935,7 +872,7 @@ const DashboardData: FC = () => {
<> <>
<Header> <Header>
<HeaderRow> <HeaderRow>
<HeaderCell resize> <HeaderCell stiff>
<Button <Button
fullWidth fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-start' }} style={{ fontSize: '14px', justifyContent: 'flex-start' }}
@@ -955,7 +892,7 @@ const DashboardData: FC = () => {
NAME NAME
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell resize> <HeaderCell stiff>
<Button <Button
fullWidth fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-start' }} style={{ fontSize: '14px', justifyContent: 'flex-start' }}
@@ -965,18 +902,18 @@ const DashboardData: FC = () => {
TYPE TYPE
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell>VALUE</HeaderCell> <HeaderCell stiff>VALUE</HeaderCell>
<HeaderCell /> <HeaderCell stiff />
</HeaderRow> </HeaderRow>
</Header> </Header>
<Body> <Body>
{tableList.map((a: Analog) => ( {tableList.map((a: Analog) => (
<Row key={a.id} item={a} onClick={() => updateAnalog(a)}> <Row key={a.id} item={a} onClick={() => updateAnalog(a)}>
<Cell>{a.g}</Cell> <Cell stiff>{a.g}</Cell>
<Cell>{a.n}</Cell> <Cell>{a.n}</Cell>
<Cell>{AnalogTypeNames[a.t]} </Cell> <Cell stiff>{AnalogTypeNames[a.t]} </Cell>
<Cell>{a.t ? formatValue(a.v, a.u) : ''}</Cell> <Cell stiff>{a.t ? formatValue(a.v, a.u) : ''}</Cell>
<Cell> <Cell stiff>
{me.admin && ( {me.admin && (
<IconButton onClick={() => updateAnalog(a)}> <IconButton onClick={() => updateAnalog(a)}>
<EditIcon color="primary" sx={{ fontSize: 16 }} /> <EditIcon color="primary" sx={{ fontSize: 16 }} />

View File

@@ -88,65 +88,40 @@ const DashboardStatus: FC = () => {
const { me } = useContext(AuthenticatedContext); const { me } = useContext(AuthenticatedContext);
const stats_theme = tableTheme({ const stats_theme = tableTheme({
Table: `
--data-table-library_grid-template-columns: repeat(1, minmax(0, 1fr)) 90px 90px 80px;
`,
BaseRow: ` BaseRow: `
font-size: 14px; font-size: 14px;
color: white;
height: 32px;
`, `,
HeaderRow: ` HeaderRow: `
text-transform: uppercase; text-transform: uppercase;
background-color: black; background-color: black;
color: #90CAF9; color: #90CAF9;
font-weight: 500;
border-bottom: 1px solid #e0e0e0; .th {
padding-left: 8px; height: 42px;
font-weight: 500;
border-bottom: 1px solid #565656;
}
`, `,
Row: ` Row: `
&:nth-of-type(odd) { .td {
padding: 8px;
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
}
&:nth-of-type(odd) .td {
background-color: #303030; background-color: #303030;
} }
&:nth-of-type(even) { &:nth-of-type(even) .td {
background-color: #1e1e1e; background-color: #1e1e1e;
} }
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
position: relative;
z-index: 1;
&:not(:last-of-type) {
margin-bottom: -1px;
}
&:not(:first-of-type) {
margin-top: -1px;
}
&:hover {
color: white;
}
`, `,
BaseCell: ` BaseCell: `
border-top: 1px solid transparent; &:not(:first-of-type) {
border-right: 1px solid transparent; text-align: center;
border-bottom: 1px solid transparent;
&:not(.stiff) > div {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
&:nth-of-type(1) {
padding-left: 8px;
flex: 1;
}
&:nth-of-type(2) {
width: 70px;
text-align: right;
}
&:nth-of-type(3) {
width: 40px;
text-align: right;
}
&:last-of-type {
width: 75px;
text-align: right;
padding-right: 8px;
} }
` `
}); });
@@ -224,19 +199,19 @@ const DashboardStatus: FC = () => {
<> <>
<Header> <Header>
<HeaderRow> <HeaderRow>
<HeaderCell></HeaderCell> <HeaderCell resize></HeaderCell>
<HeaderCell>SUCCESS</HeaderCell> <HeaderCell stiff>SUCCESS</HeaderCell>
<HeaderCell>FAIL</HeaderCell> <HeaderCell stiff>FAIL</HeaderCell>
<HeaderCell>QUALITY</HeaderCell> <HeaderCell stiff>QUALITY</HeaderCell>
</HeaderRow> </HeaderRow>
</Header> </Header>
<Body> <Body>
{tableList.map((stat: Stat) => ( {tableList.map((stat: Stat) => (
<Row key={stat.id} item={stat}> <Row key={stat.id} item={stat}>
<Cell>{stat.id}</Cell> <Cell>{stat.id}</Cell>
<Cell>{Intl.NumberFormat().format(stat.s)}</Cell> <Cell stiff>{Intl.NumberFormat().format(stat.s)}</Cell>
<Cell>{Intl.NumberFormat().format(stat.f)}</Cell> <Cell stiff>{Intl.NumberFormat().format(stat.f)}</Cell>
<Cell>{showQuality(stat)}</Cell> <Cell stiff>{showQuality(stat)}</Cell>
</Row> </Row>
))} ))}
</Body> </Body>

View File

@@ -63,80 +63,65 @@ const SettingsCustomization: FC = () => {
const [masks, setMasks] = useState(() => ['']); const [masks, setMasks] = useState(() => ['']);
const entities_theme = useTheme({ const entities_theme = useTheme({
Table: `
--data-table-library_grid-template-columns: 120px repeat(1, minmax(0, 1fr)) 120px;
`,
BaseRow: ` BaseRow: `
font-size: 14px; font-size: 14px;
color: white; .td {
height: 32px; height: 32px;
min-height: 32px; }
`,
BaseCell: `
&:last-of-type {
text-align: right;
}
`, `,
HeaderRow: ` HeaderRow: `
text-transform: uppercase; text-transform: uppercase;
background-color: black; background-color: black;
border-bottom: 1px solid #e0e0e0;
color: #90CAF9; color: #90CAF9;
font-weight: 500;
.th {
border-bottom: 1px solid #565656;
font-weight: 500;
}
&:nth-of-type(1) .th {
text-align: center;
}
`, `,
Row: ` Row: `
background-color: #1e1e1e; background-color: #1e1e1e;
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
position: relative; position: relative;
z-index: 1; cursor: pointer;
&:not(:last-of-type) {
margin-bottom: -1px; .td {
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
} }
&:not(:first-of-type) {
margin-top: -1px; &.tr.tr-body.row-select.row-select-single-selected {
}
&:hover {
z-index: 2;
color: white;
border-top: 1px solid #177ac9;
border-bottom: 1px solid #177ac9;
},
&.tr.tr-body.row-select.row-select-single-selected, &.tr.tr-body.row-select.row-select-selected {
background-color: #3d4752; background-color: #3d4752;
color: white; color: white;
font-weight: normal; font-weight: normal;
z-index: 2; }
&:hover .td {
border-top: 1px solid #177ac9; border-top: 1px solid #177ac9;
border-bottom: 1px solid #177ac9; border-bottom: 1px solid #177ac9;
} }
&:nth-of-type(odd) .td {
background-color: #303030;
}
`, `,
BaseCell: ` Cell: `
border-top: 1px solid transparent;
border-right: 1px solid transparent;
border-bottom: 1px solid transparent;
&:not(.stiff) > div {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
&:nth-of-type(1) {
width: 120px;
min-width: 120px;
max-width: 120px;
}
&:nth-of-type(2) { &:nth-of-type(2) {
padding-left: 8px; padding: 8px;
flex: 1;
} }
&:nth-of-type(3) { &:last-of-type {
padding-right: 8px; padding-right: 8px;
text-align: right;
width: 120px;
min-width: 120px;
}
`,
HeaderCell: `
&:nth-of-type(1) {
padding-left: 24px;
}
&:nth-of-type(2) {
padding-left: 0px;
}
&:not(:last-of-type) {
border-right: 1px solid #565656;
} }
` `
}); });
@@ -451,7 +436,7 @@ const SettingsCustomization: FC = () => {
<> <>
<Header> <Header>
<HeaderRow> <HeaderRow>
<HeaderCell>OPTIONS</HeaderCell> <HeaderCell stiff>OPTIONS</HeaderCell>
<HeaderCell resize> <HeaderCell resize>
<Button <Button
fullWidth fullWidth
@@ -462,13 +447,13 @@ const SettingsCustomization: FC = () => {
NAME NAME
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell>VALUE</HeaderCell> <HeaderCell resize>VALUE</HeaderCell>
</HeaderRow> </HeaderRow>
</Header> </Header>
<Body> <Body>
{tableList.map((de: DeviceEntity) => ( {tableList.map((de: DeviceEntity) => (
<Row key={de.id} item={de}> <Row key={de.id} item={de}>
<Cell> <Cell stiff>
<ToggleButtonGroup <ToggleButtonGroup
size="small" size="small"
color="secondary" color="secondary"

View File

@@ -13,8 +13,8 @@
"compression": "^1.7.4", "compression": "^1.7.4",
"express": "^4.18.1", "express": "^4.18.1",
"express-sse": "^0.5.3", "express-sse": "^0.5.3",
"nodemon": "^2.0.16", "nodemon": "^2.0.18",
"ws": "^8.7.0" "ws": "^8.8.0"
} }
}, },
"node_modules/@msgpack/msgpack": { "node_modules/@msgpack/msgpack": {
@@ -1153,9 +1153,9 @@
} }
}, },
"node_modules/nodemon": { "node_modules/nodemon": {
"version": "2.0.16", "version": "2.0.18",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz",
"integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"chokidar": "^3.5.2", "chokidar": "^3.5.2",
@@ -1811,9 +1811,9 @@
} }
}, },
"node_modules/ws": { "node_modules/ws": {
"version": "8.7.0", "version": "8.8.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz",
"integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==",
"engines": { "engines": {
"node": ">=10.0.0" "node": ">=10.0.0"
}, },
@@ -2672,9 +2672,9 @@
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
}, },
"nodemon": { "nodemon": {
"version": "2.0.16", "version": "2.0.18",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz",
"integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==",
"requires": { "requires": {
"chokidar": "^3.5.2", "chokidar": "^3.5.2",
"debug": "^3.2.7", "debug": "^3.2.7",
@@ -3169,9 +3169,9 @@
} }
}, },
"ws": { "ws": {
"version": "8.7.0", "version": "8.8.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz",
"integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==",
"requires": {} "requires": {}
}, },
"xdg-basedir": { "xdg-basedir": {

View File

@@ -15,7 +15,7 @@
"compression": "^1.7.4", "compression": "^1.7.4",
"express": "^4.18.1", "express": "^4.18.1",
"express-sse": "^0.5.3", "express-sse": "^0.5.3",
"nodemon": "^2.0.16", "nodemon": "^2.0.18",
"ws": "^8.7.0" "ws": "^8.8.0"
} }
} }

View File

@@ -45,7 +45,7 @@ class AnalogSensor {
std::string name() const; std::string name() const;
void set_name(const std::string & name) { void set_name(const std::string & name) {
name_ = name; name_ = name;
} }
uint8_t gpio() const { uint8_t gpio() const {

View File

@@ -57,7 +57,7 @@ class DallasSensor {
std::string name() const; std::string name() const;
void set_name(const std::string & name) { void set_name(const std::string & name) {
name_ = name; name_ = name;
} }
bool apply_customization(); bool apply_customization();

View File

@@ -191,7 +191,7 @@ class System {
#ifndef EMSESP_STANDALONE #ifndef EMSESP_STANDALONE
return (ethernet_connected() || WiFi.isConnected()); return (ethernet_connected() || WiFi.isConnected());
#else #else
return true; return true;
#endif #endif
} }

View File

@@ -1 +1 @@
#define EMSESP_APP_VERSION "3.4.2b2" #define EMSESP_APP_VERSION "3.4.2b3"