mirror of
https://github.com/element-hq/element-web
synced 2024-11-21 16:55:34 +03:00
Step 10.3: Use module replacement to achieve component overrides
This is the same system as the customisations override, however deliberately using a different JSON file to avoid conflicts. Forks would be expected to use the customisations file, not the components file, to override/add components.
This commit is contained in:
parent
5459c1eb96
commit
5b592eca4f
5 changed files with 27 additions and 18 deletions
5
components.json
Normal file
5
components.json
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"src/components/views/auth/AuthFooter.tsx": "src/components/views/auth/VectorAuthFooter.tsx",
|
||||
"src/components/views/auth/AuthHeaderLogo.tsx": "src/components/views/auth/VectorAuthHeaderLogo.tsx",
|
||||
"src/components/views/auth/AuthPage.tsx": "src/components/views/auth/VectorAuthPage.tsx"
|
||||
}
|
|
@ -44,6 +44,4 @@ const VectorAuthFooter = () => {
|
|||
);
|
||||
};
|
||||
|
||||
VectorAuthFooter.replaces = 'AuthFooter';
|
||||
|
||||
export default VectorAuthFooter;
|
||||
|
|
|
@ -19,9 +19,7 @@ import React from 'react';
|
|||
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
||||
|
||||
export default class VectorAuthHeaderLogo extends React.PureComponent {
|
||||
static replaces = 'AuthHeaderLogo';
|
||||
|
||||
render() {
|
||||
public render() {
|
||||
const brandingConfig = SdkConfig.getObject("branding");
|
||||
const logoUrl = brandingConfig?.get("auth_header_logo_url") ?? "themes/element/img/logos/element-logo.svg";
|
||||
|
||||
|
|
|
@ -20,12 +20,10 @@ import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
|||
import VectorAuthFooter from "./VectorAuthFooter";
|
||||
|
||||
export default class VectorAuthPage extends React.PureComponent {
|
||||
static replaces = 'AuthPage';
|
||||
|
||||
static welcomeBackgroundUrl;
|
||||
private static welcomeBackgroundUrl;
|
||||
|
||||
// cache the url as a static to prevent it changing without refreshing
|
||||
static getWelcomeBackgroundUrl() {
|
||||
private static getWelcomeBackgroundUrl() {
|
||||
if (VectorAuthPage.welcomeBackgroundUrl) return VectorAuthPage.welcomeBackgroundUrl;
|
||||
|
||||
const brandingConfig = SdkConfig.getObject("branding");
|
||||
|
@ -44,7 +42,7 @@ export default class VectorAuthPage extends React.PureComponent {
|
|||
return VectorAuthPage.welcomeBackgroundUrl;
|
||||
}
|
||||
|
||||
render() {
|
||||
public render() {
|
||||
const pageStyle = {
|
||||
background: `center/cover fixed url(${VectorAuthPage.getWelcomeBackgroundUrl()})`,
|
||||
};
|
||||
|
|
|
@ -50,14 +50,24 @@ try {
|
|||
} catch (e) {
|
||||
// ignore - not important
|
||||
}
|
||||
const moduleReplacementPlugins = Object.entries(fileOverrides).map(([oldPath, newPath]) => {
|
||||
|
||||
function parseOverridesToReplacements(overrides) {
|
||||
return Object.entries(overrides).map(([oldPath, newPath]) => {
|
||||
return new webpack.NormalModuleReplacementPlugin(
|
||||
// because the input is effectively defined by the person running the build, we don't
|
||||
// need to do anything special to protect against regex overrunning, etc.
|
||||
new RegExp(oldPath.replace(/\//g, '[\\/\\\\]').replace(/\./g, '\\.')),
|
||||
path.resolve(__dirname, newPath),
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const moduleReplacementPlugins = [
|
||||
...parseOverridesToReplacements(require('./components.json')),
|
||||
|
||||
// Allow customisations to override the default components too
|
||||
...parseOverridesToReplacements(fileOverrides),
|
||||
];
|
||||
|
||||
module.exports = (env, argv) => {
|
||||
// Establish settings based on the environment and args.
|
||||
|
|
Loading…
Reference in a new issue