diff --git a/.eslintignore b/.eslintignore index fabbe10497..e5cc476988 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ src/vector/modernizr.js +# Legacy skinning file that some people might still have src/component-index.js diff --git a/.github/workflows/triage-labelled.yml b/.github/workflows/triage-labelled.yml index d95cccc730..20c6c532d5 100644 --- a/.github/workflows/triage-labelled.yml +++ b/.github/workflows/triage-labelled.yml @@ -12,7 +12,6 @@ jobs: contains(github.event.issue.labels.*.name, 'A-Maths') || contains(github.event.issue.labels.*.name, 'A-Message-Pinning') || contains(github.event.issue.labels.*.name, 'A-New-Search-Experience') || - contains(github.event.issue.labels.*.name, 'A-Threads') || contains(github.event.issue.labels.*.name, 'A-Location-Sharing') || contains(github.event.issue.labels.*.name, 'Z-IA') || contains(github.event.issue.labels.*.name, 'A-Themes-Custom') || diff --git a/.gitignore b/.gitignore index 52152e1a11..e0a77f171d 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ electron/pub /config.json /config.json.* /config.local*.json +# Legacy skinning file that some people might still have /src/component-index.js /.tmp /webpack-stats.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 02a0738aca..c70d65a9df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,49 @@ +Changes in [1.10.11](https://github.com/vector-im/element-web/releases/tag/v1.10.11) (2022-04-26) +================================================================================================= + +## ✨ Features + * Handle forced disconnects from Jitsi ([\#21697](https://github.com/vector-im/element-web/pull/21697)). Fixes #21517. + * Improve performance of switching to rooms with lots of servers and ACLs ([\#8347](https://github.com/matrix-org/matrix-react-sdk/pull/8347)). + * Avoid a reflow when setting caret position on an empty composer ([\#8348](https://github.com/matrix-org/matrix-react-sdk/pull/8348)). + * Add message right-click context menu as a labs feature ([\#5672](https://github.com/matrix-org/matrix-react-sdk/pull/5672)). + * Live location sharing - basic maximised beacon map ([\#8310](https://github.com/matrix-org/matrix-react-sdk/pull/8310)). + * Live location sharing - render users own beacons in timeline ([\#8296](https://github.com/matrix-org/matrix-react-sdk/pull/8296)). + * Improve Threads beta around degraded mode ([\#8318](https://github.com/matrix-org/matrix-react-sdk/pull/8318)). + * Live location sharing - beacon in timeline happy path ([\#8285](https://github.com/matrix-org/matrix-react-sdk/pull/8285)). + * Add copy button to View Source screen ([\#8278](https://github.com/matrix-org/matrix-react-sdk/pull/8278)). Fixes #21482. Contributed by @olivialivia. + * Add heart effect ([\#6188](https://github.com/matrix-org/matrix-react-sdk/pull/6188)). Contributed by @CicadaCinema. + * Update new room icon ([\#8239](https://github.com/matrix-org/matrix-react-sdk/pull/8239)). + +## 🐛 Bug Fixes + * Fix: "Code formatting button does not escape backticks" ([\#8181](https://github.com/matrix-org/matrix-react-sdk/pull/8181)). Contributed by @yaya-usman. + * Fix beta indicator dot causing excessive CPU usage ([\#8340](https://github.com/matrix-org/matrix-react-sdk/pull/8340)). Fixes #21793. + * Fix overlapping timestamps on empty messages ([\#8205](https://github.com/matrix-org/matrix-react-sdk/pull/8205)). Fixes #21381. Contributed by @goelesha. + * Fix power selector not showing up in user info when state_default undefined ([\#8297](https://github.com/matrix-org/matrix-react-sdk/pull/8297)). Fixes #21669. + * Avoid looking up settings during timeline rendering ([\#8313](https://github.com/matrix-org/matrix-react-sdk/pull/8313)). Fixes #21740. + * Fix a soft crash with video rooms ([\#8333](https://github.com/matrix-org/matrix-react-sdk/pull/8333)). + * Fixes call tiles overflow ([\#8096](https://github.com/matrix-org/matrix-react-sdk/pull/8096)). Fixes #20254. Contributed by @luixxiul. + * Fix a bug with emoji autocomplete sorting where adding the final ":" would cause the emoji with the typed shortcode to no longer be at the top of the autocomplete list. ([\#8086](https://github.com/matrix-org/matrix-react-sdk/pull/8086)). Fixes #19302. Contributed by @commonlawfeature. + * Fix image preview sizing for edge cases ([\#8322](https://github.com/matrix-org/matrix-react-sdk/pull/8322)). Fixes #20088. + * Refactor SecurityRoomSettingsTab and remove unused state ([\#8306](https://github.com/matrix-org/matrix-react-sdk/pull/8306)). Fixes matrix-org/element-web-rageshakes#12002. + * Don't show the prompt to enable desktop notifications immediately after registration ([\#8274](https://github.com/matrix-org/matrix-react-sdk/pull/8274)). + * Stop tracking threads if threads support is disabled ([\#8308](https://github.com/matrix-org/matrix-react-sdk/pull/8308)). Fixes #21766. + * Fix some issues with threads rendering ([\#8305](https://github.com/matrix-org/matrix-react-sdk/pull/8305)). Fixes #21670. + * Fix threads rendering issue in Safari ([\#8298](https://github.com/matrix-org/matrix-react-sdk/pull/8298)). Fixes #21757. + * Fix space panel width change on hovering over space item ([\#8299](https://github.com/matrix-org/matrix-react-sdk/pull/8299)). Fixes #19891. + * Hide the reply in thread button in deployments where beta is forcibly disabled ([\#8294](https://github.com/matrix-org/matrix-react-sdk/pull/8294)). Fixes #21753. + * Prevent soft crash around room list header context menu when space changes ([\#8289](https://github.com/matrix-org/matrix-react-sdk/pull/8289)). Fixes matrix-org/element-web-rageshakes#11416, matrix-org/element-web-rageshakes#11692, matrix-org/element-web-rageshakes#11739, matrix-org/element-web-rageshakes#11772, matrix-org/element-web-rageshakes#11891 matrix-org/element-web-rageshakes#11858 and matrix-org/element-web-rageshakes#11456. + * When selecting reply in thread on a thread response open existing thread ([\#8291](https://github.com/matrix-org/matrix-react-sdk/pull/8291)). Fixes #21743. + * Handle thread bundled relationships coming from the server via MSC3666 ([\#8292](https://github.com/matrix-org/matrix-react-sdk/pull/8292)). Fixes #21450. + * Fix: Avatar preview does not update when same file is selected repeatedly ([\#8288](https://github.com/matrix-org/matrix-react-sdk/pull/8288)). Fixes #20098. + * Fix a bug where user gets a warning when changing powerlevel from **Admin** to **custom level (100)** ([\#8248](https://github.com/matrix-org/matrix-react-sdk/pull/8248)). Fixes #21682. Contributed by @Jumeb. + * Use a consistent alignment for all text items in a list ([\#8276](https://github.com/matrix-org/matrix-react-sdk/pull/8276)). Fixes #21731. Contributed by @luixxiul. + * Fixes button labels being collapsed per a character in CJK languages ([\#8212](https://github.com/matrix-org/matrix-react-sdk/pull/8212)). Fixes #21287. Contributed by @luixxiul. + * Fix: Remove jittery timeline scrolling after jumping to an event ([\#8263](https://github.com/matrix-org/matrix-react-sdk/pull/8263)). + * Fix regression of edits showing up in the timeline with hidden events shown ([\#8260](https://github.com/matrix-org/matrix-react-sdk/pull/8260)). Fixes #21694. + * Fix reporting events not working ([\#8257](https://github.com/matrix-org/matrix-react-sdk/pull/8257)). Fixes #21713. + * Make Jitsi widgets in video rooms immutable ([\#8244](https://github.com/matrix-org/matrix-react-sdk/pull/8244)). Fixes #21647. + * Fix: Ensure links to events scroll the correct events into view ([\#8250](https://github.com/matrix-org/matrix-react-sdk/pull/8250)). Fixes #19934. + Changes in [1.10.10](https://github.com/vector-im/element-web/releases/tag/v1.10.10) (2022-04-14) ================================================================================================= diff --git a/README.md b/README.md index 75049acdae..084b9b6181 100644 --- a/README.md +++ b/README.md @@ -264,9 +264,6 @@ top of the underlying `matrix-react-sdk`. `matrix-react-sdk` provides both the higher and lower level React components useful for building Matrix communication apps using React. -After creating a new component you must run `yarn reskindex` to regenerate -the `component-index.js` for the app (used in future for skinning). - Please note that Element is intended to run correctly without access to the public internet. So please don't depend on resources (JS libs, CSS, images, fonts) hosted by external CDNs or servers but instead please package all dependencies @@ -321,7 +318,6 @@ Finally, build and start Element itself: yarn link matrix-js-sdk yarn link matrix-react-sdk yarn install -yarn reskindex yarn start ``` @@ -369,9 +365,6 @@ ___ When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be automatically picked up by webpack and built. -If you add or remove any components from the Element skin, you will need to rebuild -the skin's index by running, `yarn reskindex`. - If any of these steps error with, `file table overflow`, you are probably on a mac which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again. You'll need to do this in each new terminal you open before building Element. diff --git a/babel.config.js b/babel.config.js index fe720e0a4d..d2248cd0c9 100644 --- a/babel.config.js +++ b/babel.config.js @@ -13,7 +13,6 @@ module.exports = { "@babel/preset-react", ], "plugins": [ - ["@babel/plugin-proposal-decorators", {legacy: true}], "@babel/plugin-proposal-export-default-from", "@babel/plugin-proposal-numeric-separator", "@babel/plugin-proposal-class-properties", diff --git a/components.json b/components.json new file mode 100644 index 0000000000..cc5046ed69 --- /dev/null +++ b/components.json @@ -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" +} diff --git a/docs/app-load.md b/docs/app-load.md index 7908ce68b0..a043d20463 100644 --- a/docs/app-load.md +++ b/docs/app-load.md @@ -1,5 +1,8 @@ # App load order +**Dev note**: As of March 2022, the skin is no longer part of the app load order at all. The document's graphs have +been kept untouched for posterity. + Old slow flow: ![image](https://user-images.githubusercontent.com/2403652/73848963-00a2a080-4821-11ea-97d4-1200fc2638f3.png) diff --git a/docs/customisations.md b/docs/customisations.md index 5af98a01f9..fed7e616f6 100644 --- a/docs/customisations.md +++ b/docs/customisations.md @@ -34,9 +34,9 @@ default, Element Web does *not* ship with this file to prevent conflicts. ### Custom components -Instead of implementing skinning from the react-sdk, maintainers can use the above system to override components -if they wish. Maintenance and API surface compatibility are left as a responsibility for the project - the layering -in Element Web (including the react-sdk) do not make guarantees that properties/state machines won't change. +Maintainers can use the above system to override components if they wish. Maintenance and API surface compatibility are +left as a responsibility for the project - the layering in Element Web (including the react-sdk) do not make guarantees +that properties/state machines won't change. ### Component visibility customisation diff --git a/docs/labs.md b/docs/labs.md index 72b8b09bae..f05d41babc 100644 --- a/docs/labs.md +++ b/docs/labs.md @@ -183,6 +183,12 @@ Threads can be access by clicking their summary below the root event on the room This feature might work in degraded mode if the homeserver a user is connected to does not advertise support for the unstable feature `org.matrix.msc3440` when calling the `/versions` API endpoint. +## Right-click Message Context Menu (`feature_message_right_click_context_menu`) + +Enables showing a right-click context menu when right-clicking messages in the +timeline. This menu shows options that can usually be found in the message +action bar or in the message options. + ## Voice & video rooms (`feature_video_rooms`) [In Development] Enables support for creating and joining video rooms, which are persistent video chats that users can jump in and out of. diff --git a/docs/skinning thoughts.md b/docs/skinning thoughts.md deleted file mode 100644 index 0466aaa035..0000000000 --- a/docs/skinning thoughts.md +++ /dev/null @@ -1,68 +0,0 @@ -== Skinning refactor == - -matrix-react-sdk - - base images - - base CSS - - all the components needed to build a workable app (including the top layer) - -element-web: the Element skin - - Element-specific classes (e.g. login header/footer) - - Element-specific themes - - light - - dark - -i.e. the only things which should go into element-web are bits which apply vector-specific skinning -specifically "Stuff that any other brand would not want to use. (e.g. Element logos, links, T&Cs)" - - Questions: - - Electron app? (should probably be a separate repo in its own right? but might as well go here for now) - - index.html & index.js? (should be in matrix-react-sdk, given the SDK is useless without them?) - -ideally matrix-react-sdk itself should ship with a default skin which actually works built in. - -status skin (can go in the same app for now) - - has status theme - - which inherits from Element light theme - - how do we share graphics between skins? - - shove them into react-sdk, or... - - guess we do ../../vector/img - - this means keeping the skin name in the images (unless /img is a shortcut to the right skin's images) - -out of scope: - - making the components more independent, so they can be used in isolation. - - that said, the bits which should probably be used by being embeded into a different app: - - login/reg - - RoomView + RoomSettings - - MessageComposer - - RoomList - - MemberList - - MemberInfo - - Voip UI - - UserSettings - - sharing different js-sdks between the different isolated modules - -other changes: - - how do we handle i18n? - - each skin should really be its own i18n project. As long as all the commonality stuff is in matrix-react-sdk this shouldn't be too bad. - - ability to associate components with a given skin - - skins/vector/src <-- components - - skins/vector/css - - skins/vector/img - - skins/vector/fonts - - gather together themes (per skin) into a single place too - - skins/vector/themes/foo/css - - skins/vector/themes/foo/img - - skins/vector/themes/foo/fonts - - ideally element-web would contain almost nothing but skins/vector directory. - - ability to entirely replace CSS rather than override it for a given theme - - e.g. if we replace `Login.js` with `StatusLogin.js`, then we should similarly be able to replace `_Login.scss` with `_StatusLogin.scss`. - -random thoughts; - - should we be able to change the entire skin at runtime (more like wordpress) - to the extent of replacing entire components? - - might pose security issues if a theme can be swapped out to replace MatrixChat or other fundamental functionality at runtime - - if so, perhaps skins & themes should converge... - ------------------ - -Immediate plan for Status: - * Implement it as a theme for the Element skin - * Ideally move skins to a sensible level (possibly even including src?) diff --git a/docs/theming.md b/docs/theming.md index 972c65e71f..10dc0008e1 100644 --- a/docs/theming.md +++ b/docs/theming.md @@ -6,7 +6,7 @@ Element app via CSS & custom imagery. They are *NOT* co be confused with 'skins', which describe apps which sit on top of matrix-react-sdk - e.g. in theory Element itself is a react-sdk skin. -As of Jan 2017, skins are not fully supported; Element is the only available skin. +As of March 2022, skins are not fully supported; Element is the only available skin. To define a theme for Element: diff --git a/package.json b/package.json index 547b125d05..021368599d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "element-web", - "version": "1.10.10", + "version": "1.10.11", "description": "A feature-rich client for Matrix.org", "author": "New Vector Ltd.", "repository": { @@ -30,21 +30,18 @@ "i18n": "matrix-gen-i18n", "prunei18n": "matrix-prune-i18n", "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && matrix-gen-i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", - "reskindex": "reskindex -h src/header", - "reskindex:watch": "reskindex -h src/header -w", - "reskindex:watch-react": "node scripts/yarn-sub.js matrix-react-sdk reskindex:watch", "clean": "rimraf lib webapp", "build": "yarn clean && yarn build:genfiles && yarn build:bundle", "build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats", "build:jitsi": "node scripts/build-jitsi.js", "build:res": "node scripts/copy-res.js", - "build:genfiles": "yarn reskindex && yarn build:res && yarn build:jitsi", + "build:genfiles": "yarn build:res && yarn build:jitsi", "build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js", "build:bundle": "webpack --progress --bail --mode production", "build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json", "dist": "scripts/package.sh", - "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"", - "start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js --https\"", + "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js\"", + "start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js --https\"", "start:res": "yarn build:jitsi && node scripts/copy-res.js -w", "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --mode development --disable-host-check --hot", "lint": "yarn lint:types && yarn lint:js && yarn lint:style", @@ -60,8 +57,8 @@ "gfm.css": "^1.1.2", "jsrsasign": "^10.2.0", "katex": "^0.12.0", - "matrix-js-sdk": "17.0.0", - "matrix-react-sdk": "3.42.4", + "matrix-js-sdk": "17.1.0", + "matrix-react-sdk": "3.43.0", "matrix-widget-api": "^0.1.0-beta.18", "prop-types": "^15.7.2", "react": "17.0.2", @@ -74,7 +71,6 @@ "@babel/eslint-parser": "^7.12.10", "@babel/eslint-plugin": "^7.12.10", "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", "@babel/plugin-proposal-export-default-from": "^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", "@babel/plugin-proposal-numeric-separator": "^7.12.7", diff --git a/res/welcome.html b/res/welcome.html index bb3f84fe64..ef01d8876c 100644 --- a/res/welcome.html +++ b/res/welcome.html @@ -173,7 +173,8 @@ we don't have an account and should hide them. No account == no guest account ei

_t("Welcome to Element")

-

_t("Decentralised, encrypted chat & collaboration powered by [matrix]")

+ +

_t("Decentralised, encrypted chat & collaboration powered by $matrixLogo")

diff --git a/res/welcome/images/matrix.svg b/res/welcome/images/matrix.svg deleted file mode 100644 index 13adcab25a..0000000000 --- a/res/welcome/images/matrix.svg +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scripts/docker-link-repos.sh b/scripts/docker-link-repos.sh index 54c89bacae..cf824d87ad 100644 --- a/scripts/docker-link-repos.sh +++ b/scripts/docker-link-repos.sh @@ -32,7 +32,6 @@ cd react-sdk yarn link yarn link matrix-js-sdk yarn --network-timeout=100000 install -yarn reskindex cd ../ echo "Setting up element-web with react-sdk and js-sdk packages" diff --git a/scripts/fetch-develop.deps.sh b/scripts/fetch-develop.deps.sh index 65159d1a1b..71850188a6 100755 --- a/scripts/fetch-develop.deps.sh +++ b/scripts/fetch-develop.deps.sh @@ -92,16 +92,8 @@ pushd matrix-react-sdk yarn link yarn link matrix-js-sdk yarn install --pure-lockfile -yarn reskindex popd yarn link matrix-react-sdk ############################## - -# Link the reskindex binary in place: if we used `yarn link`, -# Yarn would do this for us, but we don't because we'd have -# to define the Yarn binary prefix somewhere so it could put the -# intermediate symlinks there. Instead, we do it ourselves. -mkdir -p node_modules/.bin -ln -sfv ../matrix-react-sdk/scripts/reskindex.js node_modules/.bin/reskindex diff --git a/src/components/structures/VectorEmbeddedPage.tsx b/src/components/structures/VectorEmbeddedPage.tsx deleted file mode 100644 index 85adb2fb3f..0000000000 --- a/src/components/structures/VectorEmbeddedPage.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd -Copyright 2019 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import EmbeddedPage from 'matrix-react-sdk/src/components/structures/EmbeddedPage'; -import sanitizeHtml from 'sanitize-html'; -import { _t } from 'matrix-react-sdk/src/languageHandler'; - -export default class VectorEmbeddedPage extends EmbeddedPage { - static replaces = 'EmbeddedPage'; - - // we're overriding the base component here, for Element-specific tweaks - translate(s: string) { - s = sanitizeHtml(_t(s)); - // ugly fix for https://github.com/vector-im/element-web/issues/4243 - // eslint-disable-next-line max-len - s = s.replace(/\[matrix\]/, 'Matrix'); - return s; - } -} diff --git a/src/components/views/auth/VectorAuthFooter.tsx b/src/components/views/auth/VectorAuthFooter.tsx index 0cdfdc0a23..87557ab4bd 100644 --- a/src/components/views/auth/VectorAuthFooter.tsx +++ b/src/components/views/auth/VectorAuthFooter.tsx @@ -44,6 +44,4 @@ const VectorAuthFooter = () => { ); }; -VectorAuthFooter.replaces = 'AuthFooter'; - export default VectorAuthFooter; diff --git a/src/components/views/auth/VectorAuthHeaderLogo.tsx b/src/components/views/auth/VectorAuthHeaderLogo.tsx index deaf9cc232..d44e3e5a7b 100644 --- a/src/components/views/auth/VectorAuthHeaderLogo.tsx +++ b/src/components/views/auth/VectorAuthHeaderLogo.tsx @@ -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"; diff --git a/src/components/views/auth/VectorAuthPage.tsx b/src/components/views/auth/VectorAuthPage.tsx index d37739a032..d2e6d9f8db 100644 --- a/src/components/views/auth/VectorAuthPage.tsx +++ b/src/components/views/auth/VectorAuthPage.tsx @@ -15,16 +15,15 @@ limitations under the License. */ import React, { CSSProperties } from 'react'; -import * as sdk from 'matrix-react-sdk/src/index'; import SdkConfig from 'matrix-react-sdk/src/SdkConfig'; -export default class VectorAuthPage extends React.PureComponent { - static replaces = 'AuthPage'; +import VectorAuthFooter from "./VectorAuthFooter"; - static welcomeBackgroundUrl; +export default class VectorAuthPage extends React.PureComponent { + 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"); @@ -43,9 +42,7 @@ export default class VectorAuthPage extends React.PureComponent { return VectorAuthPage.welcomeBackgroundUrl; } - render() { - const AuthFooter = sdk.getComponent('auth.AuthFooter'); - + public render() { const pageStyle = { background: `center/cover fixed url(${VectorAuthPage.getWelcomeBackgroundUrl()})`, }; @@ -80,7 +77,7 @@ export default class VectorAuthPage extends React.PureComponent { { this.props.children }
- + ); } diff --git a/src/header b/src/header deleted file mode 100644 index e80658c103..0000000000 --- a/src/header +++ /dev/null @@ -1,15 +0,0 @@ -/* -Copyright 2018 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 1b022d2a2d..69580ca887 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Používání %(brand)s v mobilních zařízeních", "Switch to space by number": "Přepnout na prostor podle čísla", "Next recently visited room or community": "Další nedávno navštívená místnost nebo komunita", - "Previous recently visited room or community": "Nedávno navštívená místnost nebo komunita" + "Previous recently visited room or community": "Nedávno navštívená místnost nebo komunita", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentralizovaný, šifrovaný chat a spolupráce na platformě $matrixLogo" } diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index e63f6dc013..97743f8b71 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Verwende %(brand)s am Handy", "Switch to space by number": "Zum n-ten Space wechseln", "Next recently visited room or community": "Nächster kürzlich besuchter Raum", - "Previous recently visited room or community": "Vorheriger kürzlich besuchter Raum" + "Previous recently visited room or community": "Vorheriger kürzlich besuchter Raum", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Dezentralisierter, verschlüsselter Chat & Zusammenarbeit unterstützt von $matrixLogo" } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 24cdd0fc3d..aef27979d6 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -26,7 +26,7 @@ "Go to element.io": "Go to element.io", "Failed to start": "Failed to start", "Welcome to Element": "Welcome to Element", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentralised, encrypted chat & collaboration powered by $matrixLogo", "Sign In": "Sign In", "Create Account": "Create Account", "Explore rooms": "Explore rooms" diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 8bbfe59aef..4e8b64c790 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -34,5 +34,6 @@ "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funciones avanzadas que su navegador actual no soporta.", "Powered by Matrix": "Funciona con Matrix", "Use %(brand)s on mobile": "Usar %(brand)s en modo móvil", - "Switch to space by number": "Cambiar a espacio por número" + "Switch to space by number": "Cambiar a espacio por número", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Conversaciones y colaboración descentralizadas y cifradas gracias a $matrixLogo" } diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index f70f6bb00c..d6c6619798 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Kasuta rakendust %(brand)s nutiseadmes", "Switch to space by number": "Vaata kogukonnakeskust tema numbri alusel", "Next recently visited room or community": "Järgmine hiljuti külastatud jututuba või kogukond", - "Previous recently visited room or community": "Eelmine hiljuti külastatud jututuba või kogukond" + "Previous recently visited room or community": "Eelmine hiljuti külastatud jututuba või kogukond", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Hajutatud ja krüpteeritud suhtlus- ning ühistöörakendus, mille aluseks on $matrixLogo" } diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 032ad0528c..3c4b336d64 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Utiliser %(brand)s sur téléphone", "Switch to space by number": "Afficher un espace par son numéro", "Next recently visited room or community": "Prochain salon ou communauté récemment visité", - "Previous recently visited room or community": "Salon ou communauté précédemment visité" + "Previous recently visited room or community": "Salon ou communauté précédemment visité", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Messagerie décentralisée, chiffrée & une collaboration alimentée par $matrixLogo" } diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index d17425034a..fac07c72d4 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Utiliza %(brand)s no móbil", "Switch to space by number": "Cambiar a espazo polo número", "Next recently visited room or community": "Seguinte sala ou comunidade visitada recentemente", - "Previous recently visited room or community": "Sala ou Comunidade visitada recentemente" + "Previous recently visited room or community": "Sala ou Comunidade visitada recentemente", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Conversas & colaboración descentralizadas e cifradas grazas a $matrixLogo" } diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 72c5e75032..370a41973b 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Mobilon használd ezt: %(brand)s", "Switch to space by number": "Tér váltás számmal", "Next recently visited room or community": "Következő nemrég meglátogatott szoba vagy közösség", - "Previous recently visited room or community": "Előző nemrég meglátogatott szoba vagy közösség" + "Previous recently visited room or community": "Előző nemrég meglátogatott szoba vagy közösség", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Elosztott, titkosított csevegés & együttműködés ezzel: $matrixLogo" } diff --git a/src/i18n/strings/hy.json b/src/i18n/strings/hy.json new file mode 100644 index 0000000000..0e3bf6ffcd --- /dev/null +++ b/src/i18n/strings/hy.json @@ -0,0 +1,16 @@ +{ + "Explore rooms": "Փնտրել սենյակներ", + "Failed to start": "Չի ստացվում սկսել", + "Use %(brand)s on mobile": "Օգտագործում է %(brand)s հեռախոսի վրա", + "You need to be using HTTPS to place a screen-sharing call.": "Դուք պետք է օգտագործեք HTTPS միացում որպիսի կարողանաք կատարել էկրանը ցույց տալով զանգ", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s%(browserName)s%(osName)s", + "Unknown device": "Անծանոթ սարք", + "Welcome to Element": "Բարի գալուստ Element", + "Your browser can't run %(brand)s": "Ձեր բրաուզերը չի թողարկում %(brand)s", + "Unsupported browser": "Չհամապատասխանող բրաուզեր", + "Dismiss": "Հեռացնել", + "Open": "Բացել", + "Unable to load config file: please refresh the page to try again.": "Ֆայլի ներմուծման սխալ․ խնդրում ենք թարմացնել էջը և նորից փորձել։", + "Invalid JSON": "Չաշխատող JSON", + "Your Element is misconfigured": "Ձեր Element֊ը սխալ է կարգավորված" +} diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index 82e6cffc9f..f360cbfc5b 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -36,5 +36,6 @@ "Your Element is misconfigured": "Anda mengatur Element dengan salah", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Konfigurasi tidak valid: hanya bisa menentukan satu dari default_server_config, default_server_name, atau default_hs_url.", "Next recently visited room or community": "Ruangan atau komunitas berikutnya yang baru saja dilihat", - "Previous recently visited room or community": "Ruangan atau komunitas sebelumnya yang baru saja dilihat" + "Previous recently visited room or community": "Ruangan atau komunitas sebelumnya yang baru saja dilihat", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Obrolan & kolaborasi terdesentralisasi dan terenkripsi, diberdayakan oleh $matrixLogo" } diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index e711c9c3c9..fbaec34669 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Usa %(brand)s su mobile", "Switch to space by number": "Passa allo spazio per numero", "Next recently visited room or community": "Prossima stanza o comunità visitata di recente", - "Previous recently visited room or community": "Precedente stanza o comunità visitata di recente" + "Previous recently visited room or community": "Precedente stanza o comunità visitata di recente", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Chat e collaborazioni criptate e decentralizzate offerte da $matrixLogo" } diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index e878a260c3..c6ed9c3261 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -7,7 +7,7 @@ "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentrale en versleutelde chat & samenwerken dankzij [matrix]", "Sign In": "Inloggen", "Create Account": "Registreren", - "Explore rooms": "Kamers verkennen", + "Explore rooms": "Kamers ontdekken", "Unexpected error preparing the app. See console for details.": "Er is een onverwachte fout opgetreden bij het voorbereiden van de app. Zie de console voor details.", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratiefout: kan slechts één van default_server_config, default_server_name, of default_hs_url opgeven.", "Invalid configuration: no default server specified.": "Configuratie ongeldig: geen standaardserver opgegeven.", @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Gebruik %(brand)s op uw mobiel", "Switch to space by number": "Wissel naar Space met nummer", "Next recently visited room or community": "Volgende recent bezochte kamer of community", - "Previous recently visited room or community": "Vorige recent bezochte kamer of community" + "Previous recently visited room or community": "Vorige recent bezochte kamer of community", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Gedecentraliseerde, versleutelde chat & samenwerking mogelijk gemaakt door $matrixLogo" } diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 4577e14c34..6af9402af1 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -12,7 +12,7 @@ "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Неверная конфигурация: можно указывать только один из следующих параметров: default_server_config, default_server_name или default_hs_url.", "Invalid configuration: no default server specified.": "Неверная конфигурация: сервер по умолчанию не указан.", "The message from the parser is: %(message)s": "Сообщение из парсера: %(message)s", - "Invalid JSON": "Нерабочий JSON", + "Invalid JSON": "Неверный JSON", "Go to your browser to complete Sign In": "Перейдите в браузер для завершения входа", "Open user settings": "Открыть настройки пользователя", "Missing indexeddb worker script!": "Отсутствует скрипт воркера для indexeddb!", @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Воспользуйтесь %(brand)s на мобильном телефоне", "Switch to space by number": "Переключение на пространство по номеру", "Next recently visited room or community": "Следующая недавно посещенная комната или сообщество", - "Previous recently visited room or community": "Предыдущая недавно посещенная комната или сообщество" + "Previous recently visited room or community": "Предыдущая недавно посещенная комната или сообщество", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Децентрализованное, зашифрованное общение и сотрудничество на основе $matrixLogo" } diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index bfd4256f66..3e58210be3 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Používať %(brand)s pri mobilných zariadeniach", "Switch to space by number": "Prepnúť do priestoru podľa čísla", "Next recently visited room or community": "Ďalšia nedávno navštívená miestnosť alebo komunita", - "Previous recently visited room or community": "Predchádzajúca nedávno navštívená miestnosť alebo komunita" + "Previous recently visited room or community": "Predchádzajúca nedávno navštívená miestnosť alebo komunita", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentralizované, šifrované konverzácie a spolupráca na platforme $matrixLogo" } diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 77231f683d..9c97c75cf2 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Përdor %(brand)s në celular", "Switch to space by number": "Kalo te hapësira me numrin", "Next recently visited room or community": "Dhomë ose bashkësi e vizituar më parë pasuese", - "Previous recently visited room or community": "Dhomë ose bashkësi e vizituar më parë e mëparshme" + "Previous recently visited room or community": "Dhomë ose bashkësi e vizituar më parë e mëparshme", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Fjalosje & bashkëpunim i decentralizuar, i fshehtëzuar, bazuar në $matrixLogo" } diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 5563f34331..343dcfee54 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Använd %(brand)s på mobilen", "Switch to space by number": "Byt till utrymme med nummer", "Previous recently visited room or community": "Tidigare nyligen besökta rum eller gemenskap", - "Next recently visited room or community": "Nästa nyligen besökta rum eller gemenskap" + "Next recently visited room or community": "Nästa nyligen besökta rum eller gemenskap", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentraliserad krypterad chatt & samarbete som drivs av $matrixLogo" } diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index f8caae72d1..10d9ecdc34 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -35,5 +35,6 @@ "Missing indexeddb worker script!": "Indexeddb worker kodu eksik!", "Use %(brand)s on mobile": "Mobilde %(brand)s kullan", "Switch to space by number": "Sayı ile belirtilen alana geç", - "Previous recently visited room or community": "En son ziyaret edilen oda veya topluluk" + "Previous recently visited room or community": "En son ziyaret edilen oda veya topluluk", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "$matrixLogo tarafından merkeziyetsiz, şifrelenmiş sohbet & iş birliği" } diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index c73e6b2214..28cac78c7a 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "Користуйтеся %(brand)s на мобільному", "Switch to space by number": "Перейдіть до простору за номером", "Next recently visited room or community": "Наступна нещодавно відвідана кімната або спільнота", - "Previous recently visited room or community": "Попередня нещодавно відвідана кімната або спільнота" + "Previous recently visited room or community": "Попередня нещодавно відвідана кімната або спільнота", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Децентралізована, зашифрована бесіда та співпраця на основі $matrixLogo" } diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 7db0a43e67..07925a1380 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -36,5 +36,6 @@ "Use %(brand)s on mobile": "在行動裝置上使用 %(brand)s", "Switch to space by number": "依數字切換至空間", "Next recently visited room or community": "下一個近期造訪過的聊天室或社群", - "Previous recently visited room or community": "前一個近期造訪過的聊天室或社群" + "Previous recently visited room or community": "前一個近期造訪過的聊天室或社群", + "Decentralised, encrypted chat & collaboration powered by $matrixLogo": "去中心化、加密的聊天與協作,威力本源 $matrixLogo" } diff --git a/src/vector/app.tsx b/src/vector/app.tsx index 7a3abc0c17..1c38a2c84a 100644 --- a/src/vector/app.tsx +++ b/src/vector/app.tsx @@ -18,8 +18,10 @@ See the License for the specific language governing permissions and limitations under the License. */ +// To ensure we load the browser-request version +import "matrix-js-sdk"; // eslint-disable-line no-restricted-imports + import React from 'react'; -import * as sdk from 'matrix-react-sdk/src/index'; import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg'; import { _td, newTranslatableError } from 'matrix-react-sdk/src/languageHandler'; import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils'; @@ -30,6 +32,7 @@ import { IConfigOptions } from "matrix-react-sdk/src/IConfigOptions"; import { logger } from "matrix-js-sdk/src/logger"; import { createClient } from "matrix-js-sdk/src/matrix"; import { SnakedObject } from "matrix-react-sdk/src/utils/SnakedObject"; +import MatrixChat from "matrix-react-sdk/src/components/structures/MatrixChat"; import { parseQs } from './url_utils'; import VectorBasePlatform from "./platform/VectorBasePlatform"; @@ -133,7 +136,6 @@ export async function loadApp(fragParams: {}) { const defaultDeviceName = snakedConfig.get("default_device_display_name") ?? platform.getDefaultDeviceDisplayName(); - const MatrixChat = sdk.getComponent('structures.MatrixChat'); return ; } -async function verifyServerConfig() { +async function verifyServerConfig(): Promise { let validatedConfig; try { logger.log("Verifying homeserver configuration"); diff --git a/src/vector/index.ts b/src/vector/index.ts index 87388799c3..e27129d9aa 100644 --- a/src/vector/index.ts +++ b/src/vector/index.ts @@ -110,7 +110,6 @@ async function start() { preparePlatform, loadOlm, loadConfig, - loadSkin, loadLanguage, loadTheme, loadApp, @@ -160,10 +159,9 @@ async function start() { const loadLanguagePromise = loadLanguage(); // as quickly as we possibly can, set a default theme... const loadThemePromise = loadTheme(); - const loadSkinPromise = loadSkin(); // await things settling so that any errors we have to render have features like i18n running - await settled(loadSkinPromise, loadThemePromise, loadLanguagePromise); + await settled(loadThemePromise, loadLanguagePromise); let acceptBrowser = supportedBrowser; if (!acceptBrowser && window.localStorage) { @@ -211,7 +209,6 @@ async function start() { // assert things started successfully // ################################## await loadOlmPromise; - await loadSkinPromise; await loadThemePromise; await loadLanguagePromise; diff --git a/src/vector/init.tsx b/src/vector/init.tsx index e810d6c826..0e43700ae9 100644 --- a/src/vector/init.tsx +++ b/src/vector/init.tsx @@ -127,27 +127,6 @@ export async function loadLanguage() { } } -export async function loadSkin() { - // Ensure the skin is the very first thing to load for the react-sdk. We don't even want to reference - // the SDK until we have to in imports. - logger.log("Loading skin..."); - // load these async so that its code is not executed immediately and we can catch any exceptions - const [sdk, skin] = await Promise.all([ - import( - /* webpackChunkName: "matrix-react-sdk" */ - /* webpackPreload: true */ - "matrix-react-sdk"), - import( - /* webpackChunkName: "element-web-component-index" */ - /* webpackPreload: true */ - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - this module is generated so may fail lint - "../component-index"), - ]); - sdk.loadSkin(skin); - logger.log("Skin loaded!"); -} - export async function loadTheme() { setTheme(); } diff --git a/src/vector/jitsi/index.ts b/src/vector/jitsi/index.ts index 055d4aff4f..c801d2ad03 100644 --- a/src/vector/jitsi/index.ts +++ b/src/vector/jitsi/index.ts @@ -281,6 +281,18 @@ function createJWTToken() { ); } +async function notifyHangup() { + if (widgetApi) { + // We send the hangup event before setAlwaysOnScreen, because the latter + // can cause the receiving side to instantly stop listening. + try { + await widgetApi.transport.send(ElementWidgetActions.HangupCall, {}); + } finally { + await widgetApi.setAlwaysOnScreen(false); + } + } +} + function joinConference() { // event handler bound in HTML let jwt; if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) { @@ -353,16 +365,7 @@ function joinConference() { // event handler bound in HTML meetApi.on("readyToClose", () => { switchVisibleContainers(); - - if (widgetApi) { - // We send the hangup event before setAlwaysOnScreen, because the latter - // can cause the receiving side to instantly stop listening. - // ignored promise because we don't care if it works - // noinspection JSIgnoredPromiseFromCall - widgetApi.transport.send(ElementWidgetActions.HangupCall, {}).finally(() => - widgetApi.setAlwaysOnScreen(false), - ); - } + notifyHangup(); document.getElementById("jitsiContainer").innerHTML = ""; meetApi = null; @@ -372,6 +375,14 @@ function joinConference() { // event handler bound in HTML } }); + meetApi.on("errorOccurred", ({ error }) => { + if (error.isFatal) { + // We got disconnected. Since Jitsi Meet might send us back to the + // prejoin screen, we're forced to act as if we hung up entirely. + notifyHangup(); + } + }); + meetApi.on("audioMuteStatusChanged", ({ muted }) => { const action = muted ? ElementWidgetActions.MuteAudio : ElementWidgetActions.UnmuteAudio; widgetApi.transport.send(action, {}); diff --git a/test/app-tests/joining-test.tsx b/test/app-tests/joining-test.tsx index 1ea411fec1..618cb10348 100644 --- a/test/app-tests/joining-test.tsx +++ b/test/app-tests/joining-test.tsx @@ -18,9 +18,7 @@ limitations under the License. import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg'; import WebPlatform from '../../src/vector/platform/WebPlatform'; -import * as sdk from "matrix-react-sdk/src/index"; import * as jssdk from "matrix-js-sdk/src/matrix"; -import "../skin-sdk"; import "../jest-mocks"; import React from "react"; import ReactDOM from "react-dom"; @@ -28,15 +26,12 @@ import ReactTestUtils from "react-dom/test-utils"; import {makeType} from "matrix-react-sdk/src/utils/TypeUtils"; import {ValidatedServerConfig} from "matrix-react-sdk/src/utils/AutoDiscoveryUtils"; import {sleep} from "../test-utils"; -import * as test_utils from "../test-utils"; import MockHttpBackend from "matrix-mock-request"; import "fake-indexeddb/auto"; import { RoomView as RoomViewClass } from 'matrix-react-sdk/src/components/structures/RoomView'; - - -const MatrixChat = sdk.getComponent('structures.MatrixChat'); -const RoomDirectory = sdk.getComponent('structures.RoomDirectory'); -const RoomPreviewBar = sdk.getComponent('rooms.RoomPreviewBar'); +import MatrixChat from "matrix-react-sdk/src/components/structures/MatrixChat"; +import RoomDirectory from "matrix-react-sdk/src/components/structures/RoomDirectory"; +import RoomPreviewBar from "matrix-react-sdk/src/components/views/rooms/RoomPreviewBar"; const HS_URL='http://localhost'; const IS_URL='http://localhost'; diff --git a/test/app-tests/loading-test.tsx b/test/app-tests/loading-test.tsx index 068164dcee..ccdcaccdda 100644 --- a/test/app-tests/loading-test.tsx +++ b/test/app-tests/loading-test.tsx @@ -19,16 +19,14 @@ limitations under the License. import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg'; import WebPlatform from '../../src/vector/platform/WebPlatform'; -import '../skin-sdk'; import "../jest-mocks"; import React from 'react'; import ReactDOM from 'react-dom'; import ReactTestUtils from 'react-dom/test-utils'; import MatrixReactTestUtils from 'matrix-react-test-utils'; import * as jssdk from 'matrix-js-sdk/src/matrix'; -import * as sdk from 'matrix-react-sdk/src/index'; import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg'; -import {Views} from 'matrix-react-sdk/src/components/structures/MatrixChat'; +import MatrixChat, {Views} from 'matrix-react-sdk/src/components/structures/MatrixChat'; import dis from 'matrix-react-sdk/src/dispatcher/dispatcher'; import * as test_utils from '../test-utils'; import MockHttpBackend from 'matrix-mock-request'; @@ -41,6 +39,8 @@ import {cleanLocalstorage} from "../test-utils"; import {IndexedDBCryptoStore} from "matrix-js-sdk/src/crypto/store/indexeddb-crypto-store"; import { RoomView as RoomViewClass } from 'matrix-react-sdk/src/components/structures/RoomView'; import LoginComponent from 'matrix-react-sdk/src/components/structures/auth/Login'; +import WelcomeComponent from "matrix-react-sdk/src/components/views/auth/Welcome"; +import EmbeddedPage from "matrix-react-sdk/src/components/structures/EmbeddedPage"; const DEFAULT_HS_URL='http://my_server'; const DEFAULT_IS_URL='http://my_is'; @@ -124,7 +124,6 @@ describe('loading:', function() { }; } - const MatrixChat = sdk.getComponent('structures.MatrixChat'); const fragParts = parseQsFromFragment(windowLocation); const config = Object.assign({ @@ -269,7 +268,7 @@ describe('loading:', function() { return awaitLoginComponent(matrixChat).then(() => { // we expect a single component ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.auth.Login')); + matrixChat, LoginComponent); // the only outstanding request should be a GET /login // (in particular there should be no /register request for @@ -290,7 +289,7 @@ describe('loading:', function() { }).then(() => { // once the sync completes, we should have a room view ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.EmbeddedPage')); + matrixChat, EmbeddedPage); expect(windowLocation.hash).toEqual("#/home"); }); }); @@ -343,7 +342,7 @@ describe('loading:', function() { // once the sync completes, we should have a home page httpBackend.verifyNoOutstandingExpectation(); ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.EmbeddedPage')); + matrixChat, EmbeddedPage); expect(windowLocation.hash).toEqual("#/home"); }); }); @@ -384,7 +383,7 @@ describe('loading:', function() { // we expect a single component ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.auth.Login'), + matrixChat, LoginComponent, ); // the only outstanding request should be a GET /login @@ -413,7 +412,7 @@ describe('loading:', function() { // we should see a home page, even though we previously had // a stored mx_last_room_id ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.EmbeddedPage')); + matrixChat, EmbeddedPage); expect(windowLocation.hash).toEqual("#/home"); }); }); @@ -447,7 +446,7 @@ describe('loading:', function() { // once the sync completes, we should have a welcome page httpBackend.verifyNoOutstandingExpectation(); ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('auth.Welcome')); + matrixChat, WelcomeComponent); expect(windowLocation.hash).toEqual("#/welcome"); }); }); @@ -480,7 +479,7 @@ describe('loading:', function() { // once the sync completes, we should have a welcome page httpBackend.verifyNoOutstandingExpectation(); ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('auth.Welcome')); + matrixChat, WelcomeComponent); expect(windowLocation.hash).toEqual("#/welcome"); expect(MatrixClientPeg.get().baseUrl).toEqual(DEFAULT_HS_URL); expect(MatrixClientPeg.get().idBaseUrl).toEqual(DEFAULT_IS_URL); @@ -539,7 +538,7 @@ describe('loading:', function() { }).then(() => { // once the sync completes, we should have a home page ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.EmbeddedPage')); + matrixChat, EmbeddedPage); // we simulate a click on the 'login' button by firing off // the relevant dispatch. @@ -561,7 +560,7 @@ describe('loading:', function() { // we expect a single component ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.auth.Login'), + matrixChat, LoginComponent, ); }); @@ -569,7 +568,7 @@ describe('loading:', function() { // ILAG renders this obsolete. I think. it('should allow us to return to the app', function() { const login = ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.auth.Login') + matrixChat, LoginComponent ); const linkText = 'Return to app'; @@ -586,7 +585,7 @@ describe('loading:', function() { return sleep(1).then(() => { // we should be straight back into the home page ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.EmbeddedPage')); + matrixChat, EmbeddedPage); }); }); */ @@ -733,19 +732,19 @@ function awaitRoomView(matrixChat, retryLimit?, retryCount?) { function awaitLoginComponent(matrixChat, attempts?) { return MatrixReactTestUtils.waitForRenderedComponentWithType( - matrixChat, sdk.getComponent('structures.auth.Login'), attempts, + matrixChat, LoginComponent, attempts, ); } function awaitWelcomeComponent(matrixChat, attempts?) { return MatrixReactTestUtils.waitForRenderedComponentWithType( - matrixChat, sdk.getComponent('auth.Welcome'), attempts, + matrixChat, WelcomeComponent, attempts, ); } function moveFromWelcomeToLogin(matrixChat) { ReactTestUtils.findRenderedComponentWithType( - matrixChat, sdk.getComponent('auth.Welcome')); + matrixChat, WelcomeComponent); dis.dispatch({ action: 'start_login' }); return awaitLoginComponent(matrixChat); } diff --git a/test/skin-sdk.js b/test/skin-sdk.js deleted file mode 100644 index eaeff52043..0000000000 --- a/test/skin-sdk.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * skin-sdk.js - * - * Skins the react-sdk with the vector components - */ - -import * as sdk from "matrix-react-sdk"; -import * as skin from "../src/component-index"; -sdk.loadSkin(skin); diff --git a/tsconfig.json b/tsconfig.json index b0a58196f5..e48ae0f7b9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "experimentalDecorators": true, - "emitDecoratorMetadata": true, + "experimentalDecorators": false, + "emitDecoratorMetadata": false, "resolveJsonModule": true, "esModuleInterop": true, "module": "commonjs", diff --git a/webpack.config.js b/webpack.config.js index 0fd747a61d..13e969eca4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -49,14 +49,24 @@ try { } catch (e) { // ignore - not important } -const moduleReplacementPlugins = Object.entries(fileOverrides).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), - ); -}); + +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. diff --git a/yarn.lock b/yarn.lock index e355e50dfd..a567c1a188 100644 --- a/yarn.lock +++ b/yarn.lock @@ -116,7 +116,7 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.1": +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": version "7.17.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21" integrity sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ== @@ -354,17 +354,6 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.12.12": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz#c36372ddfe0360cac1ee331a238310bddca11493" - integrity sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.1" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.0" - charcodes "^0.2.0" - "@babel/plugin-proposal-dynamic-import@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" @@ -503,13 +492,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d" - integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -3019,11 +3001,6 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-encrypt-attachment@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/browser-encrypt-attachment/-/browser-encrypt-attachment-0.3.0.tgz#205a94caadf0dc7e81413941812f655bd190ff1c" - integrity sha1-IFqUyq3w3H6BQTlBgS9lW9GQ/xw= - browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" @@ -3397,11 +3374,6 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -charcodes@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" - integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== - cheerio-select@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.5.0.tgz#faf3daeb31b17c5e1a9dabcee288aaf8aafa5823" @@ -8196,15 +8168,20 @@ mathml-tag-names@^2.1.3: version "0.0.1" resolved "https://codeload.github.com/matrix-org/matrix-analytics-events/tar.gz/daad3faed54f0b1f1e026a7498b4653e4d01cd90" +matrix-encrypt-attachment@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/matrix-encrypt-attachment/-/matrix-encrypt-attachment-1.0.3.tgz#6e016587728c396549c833985f39cbf6c07ee97b" + integrity sha512-NwfoDY/yHL9Zo8KrY5GP8ymAoZJpEFKEK+IgJKdWf5xtsIFf7KIU2pbw8+Eq592j//nSDOC+/Ff4Fk8gVvDZpw== + matrix-events-sdk@^0.0.1-beta.7: version "0.0.1-beta.7" resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1-beta.7.tgz#5ffe45eba1f67cc8d7c2377736c728b322524934" integrity sha512-9jl4wtWanUFSy2sr2lCjErN/oC8KTAtaeaozJtrgot1JiQcEI4Rda9OLgQ7nLKaqb4Z/QUx/fR3XpDzm5Jy1JA== -matrix-js-sdk@17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-17.0.0.tgz#6edf2f8d05da003e98a6cf5269a4717adfe4e406" - integrity sha512-8nv+a1e6n4x4DYKiBFRS6/CIpsE22+31K+9/4Y5MB8m3iraSVBtdZ5y/9ktQnjQuo9I85TvyqHL2obRWF7UD5Q== +matrix-js-sdk@17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-17.1.0.tgz#15335b2f8987c7a7f1b5ef91432f981dbe052fc7" + integrity sha512-1MZYo+B4FnZMII1/Mw0E7WX4erCxnPpeA8fankY5Ql82LQQVSnceOpX2XAsRlDHcxcdExB929KKqVrk/eqDM/A== dependencies: "@babel/runtime" "^7.12.5" another-json "^0.2.0" @@ -8226,10 +8203,10 @@ matrix-mock-request@^1.2.3: bluebird "^3.5.0" expect "^1.20.2" -matrix-react-sdk@3.42.4: - version "3.42.4" - resolved "https://registry.yarnpkg.com/matrix-react-sdk/-/matrix-react-sdk-3.42.4.tgz#2d3e830435e1c84b34a06cdaaa11854afae0d7ea" - integrity sha512-6z37RfDzUVwuxdWD59xpK8IvBJfJkEGN07hWD9dcJmUPrEVa1azWGvOLH2FRq1Q525DkLAn5Ci4fNQdUiyzynA== +matrix-react-sdk@3.43.0: + version "3.43.0" + resolved "https://registry.yarnpkg.com/matrix-react-sdk/-/matrix-react-sdk-3.43.0.tgz#a9bff7e221b96c30c4957ce6924e1dea8f01ea4f" + integrity sha512-eJZaNsZWT5G3HIJhK6mwSa5G+Q6RWNKlJkOcur7CPwx7KeZisJiMa10HJhRVfUAXW7uHTKPHYS4pCErvHUMv4w== dependencies: "@babel/runtime" "^7.12.5" "@sentry/browser" "^6.11.0" @@ -8237,7 +8214,6 @@ matrix-react-sdk@3.42.4: "@types/geojson" "^7946.0.8" await-lock "^2.1.0" blurhash "^1.1.3" - browser-encrypt-attachment "^0.3.0" browser-request "^0.3.3" cheerio "^1.0.0-rc.9" classnames "^2.2.6" @@ -8266,8 +8242,9 @@ matrix-react-sdk@3.42.4: lodash "^4.17.20" maplibre-gl "^1.15.2" matrix-analytics-events "github:matrix-org/matrix-analytics-events.git#daad3faed54f0b1f1e026a7498b4653e4d01cd90" + matrix-encrypt-attachment "^1.0.3" matrix-events-sdk "^0.0.1-beta.7" - matrix-js-sdk "17.0.0" + matrix-js-sdk "17.1.0" matrix-widget-api "^0.1.0-beta.18" minimist "^1.2.5" opus-recorder "^8.0.3"