From c2f6a802445f475100ca46022d01c23c5c0c8cc0 Mon Sep 17 00:00:00 2001 From: Dylan <36567925+Airyzz@users.noreply.github.com> Date: Sun, 28 Aug 2022 19:38:57 +0930 Subject: [PATCH 1/8] Created Link handlers for matrix.to --- package-lock.json | 39 +++++++++----- package.json | 1 + src/app/organisms/join-alias/JoinAlias.jsx | 47 ++++++++++++++++ src/util/linkHandlers.jsx | 39 ++++++++++++++ src/util/twemojify.jsx | 62 +++++++++++++++------- 5 files changed, 157 insertions(+), 31 deletions(-) create mode 100644 src/util/linkHandlers.jsx diff --git a/package-lock.json b/package-lock.json index 5c2db9d38e..2b013b359c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@fontsource/roboto": "^4.5.8", "@khanacademy/simple-markdown": "^0.8.3", "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz", + "@tauri-apps/api": "^1.0.2", "@tippyjs/react": "^4.2.6", "babel-polyfill": "^6.26.0", "blurhash": "^1.1.5", @@ -2496,6 +2497,20 @@ "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-3.0.1.tgz", "integrity": "sha512-XjDVbs3ZU16CO1h5Q3Ew2RPJqmZBDE/EVf1LYp6ePEffs3V/MX9ZbL5bJr8qiK5SbGmUMuDoaFgyKacYz8prRA==" }, + "node_modules/@tauri-apps/api": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.0.2.tgz", + "integrity": "sha512-yuNW0oeJ1/ZA7wNF1KgxhHrSu5viPVzY/UgUczzN5ptLM8dH15Juy5rEGkoHfeXGju90Y/l22hi3BtIrp/za+w==", + "engines": { + "node": ">= 12.22.0", + "npm": ">= 6.6.0", + "yarn": ">= 1.19.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, "node_modules/@tippyjs/react": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", @@ -3025,8 +3040,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -3042,9 +3055,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "node_modules/ajv-keywords": { "version": "3.5.2", @@ -15347,6 +15358,11 @@ "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-3.0.1.tgz", "integrity": "sha512-XjDVbs3ZU16CO1h5Q3Ew2RPJqmZBDE/EVf1LYp6ePEffs3V/MX9ZbL5bJr8qiK5SbGmUMuDoaFgyKacYz8prRA==" }, + "@tauri-apps/api": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.0.2.tgz", + "integrity": "sha512-yuNW0oeJ1/ZA7wNF1KgxhHrSu5viPVzY/UgUczzN5ptLM8dH15Juy5rEGkoHfeXGju90Y/l22hi3BtIrp/za+w==" + }, "@tippyjs/react": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", @@ -15823,14 +15839,15 @@ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "requires": {}, + "requires": { + "ajv": "^8.0.0" + }, "dependencies": { "ajv": { - "version": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, - "optional": true, - "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -15842,9 +15859,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "optional": true, - "peer": true + "dev": true } } }, diff --git a/package.json b/package.json index 63e46a64b6..8d3269a44d 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "@fontsource/roboto": "^4.5.8", "@khanacademy/simple-markdown": "^0.8.3", "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz", + "@tauri-apps/api": "^1.0.2", "@tippyjs/react": "^4.2.6", "babel-polyfill": "^6.26.0", "blurhash": "^1.1.5", diff --git a/src/app/organisms/join-alias/JoinAlias.jsx b/src/app/organisms/join-alias/JoinAlias.jsx index bb90bf3545..5f8020332e 100644 --- a/src/app/organisms/join-alias/JoinAlias.jsx +++ b/src/app/organisms/join-alias/JoinAlias.jsx @@ -18,6 +18,9 @@ import Dialog from '../../molecules/dialog/Dialog'; import CrossIC from '../../../../public/res/ic/outlined/cross.svg'; import { useStore } from '../../hooks/useStore'; +import RoomTile from '../../molecules/room-tile/RoomTile'; + +import { Debounce } from '../../../util/common'; const ALIAS_OR_ID_REG = /^[#|!].+:.+\..+$/; @@ -25,9 +28,13 @@ function JoinAliasContent({ term, requestClose }) { const [process, setProcess] = useState(false); const [error, setError] = useState(undefined); const [lastJoinId, setLastJoinId] = useState(undefined); + const [preview, setPreview] = useState(undefined); + const [loadingPreview, setLoadingPreview] = useState(undefined) + const [debounce] = useState(new Debounce()); const mx = initMatrix.matrixClient; const mountStore = useStore(); + let roomData = null; const openRoom = (roomId) => { const room = mx.getRoom(roomId); @@ -48,6 +55,33 @@ function JoinAliasContent({ term, requestClose }) { }; }, [lastJoinId]); + const loadPreview = async (text) => { + setLoadingPreview(true); + setPreview(undefined); + debounce._(async () => { + try { + let room_id = text; + + if(text.startsWith('#')){ + const room = await mx.resolveRoomAlias(text); + room_id = room.room_id; + } + + roomData = await mx.getRoom(room_id) + setLoadingPreview(false) + setPreview(roomData) + } + catch{ + setLoadingPreview(false) + setPreview(undefined) + } + + }, 500)(); + } + + if(loadingPreview === undefined && term) + loadPreview(term) + const handleSubmit = async (e) => { e.preventDefault(); mountStore.setItem(true); @@ -85,6 +119,9 @@ function JoinAliasContent({ term, requestClose }) { } }; + if(term && loadingPreview === undefined) + loadPreview(term); + return (