- {this.state.avatar}
+ return
;
+ } else {
+ return
;
+ }
+ });
+
+ return (
+
+ {avatar}
-
- {events}
+
+ {events.map((event, key) => {
+ return ;
+ })}
-
;
- }
-});
+
+ );
+}
module.exports = chat;
diff --git a/src/lib/generate-thumbnail-url.js b/src/lib/generate-thumbnail-url.js
new file mode 100644
index 0000000..7dba6df
--- /dev/null
+++ b/src/lib/generate-thumbnail-url.js
@@ -0,0 +1,15 @@
+"use strict";
+
+const { validateOptions, required, isNumber, isString } = require("validatem");
+const isMXC = require("./validate/is-mxc");
+
+module.exports = function generateThumbnailUrl({homeserver, mxc, width, height }) {
+ validateOptions(arguments, {
+ homeserver: [ required, isString ],
+ mxc: [ required, isMXC ],
+ width: [ required, isNumber ],
+ height: [ required, isNumber ]
+ });
+
+ return `${homeserver}/_matrix/media/v1/thumbnail/${mxc.homeserver}/${mxc.id}?width=${width}&height=${height}&method=scale`;
+};
diff --git a/src/lib/parse-mxc.js b/src/lib/parse-mxc.js
new file mode 100644
index 0000000..ed49b71
--- /dev/null
+++ b/src/lib/parse-mxc.js
@@ -0,0 +1,16 @@
+"use strict";
+
+const urlLib = require("url");
+
+module.exports = function parseMXC(uri) {
+ let parsed = urlLib.parse(uri);
+
+ if (parsed.protocol === "mxc:" && parsed.slashes === true) {
+ return {
+ homeserver: parsed.host,
+ id: parsed.pathname.replace(/^\/+/, "")
+ };
+ } else {
+ throw new Error("Specified URI is not an MXC URI");
+ }
+};
diff --git a/src/lib/validate/is-mxc.js b/src/lib/validate/is-mxc.js
new file mode 100644
index 0000000..9f9f57a
--- /dev/null
+++ b/src/lib/validate/is-mxc.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function isMXC(value) {
+ if (value.homeserver == null || value.id == null) {
+ throw new Error("Must be an MXC object");
+ }
+};
diff --git a/yarn.lock b/yarn.lock
index 84f21fc..cba98a1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1359,6 +1359,11 @@ assign-symbols@^1.0.0:
resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+assure-array@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assure-array/-/assure-array-1.0.0.tgz#4f4ad16a87659d6200a4fb7103462033d216ec1f"
+ integrity sha1-T0rRaodlnWIApPtxA0YgM9IW7B8=
+
astral-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
@@ -2594,6 +2599,11 @@ create-ecdh@^4.0.0:
bn.js "^4.1.0"
elliptic "^6.0.0"
+create-error@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/create-error/-/create-error-0.3.1.tgz#69810245a629e654432bf04377360003a5351a23"
+ integrity sha1-aYECRaYp5lRDK/BDdzYAA6U1GiM=
+
create-hash@^1.1.0, create-hash@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
@@ -2778,6 +2788,15 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
+dataprog@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/dataprog/-/dataprog-0.1.0.tgz#373c3708e4a1ebc03b066142921fdf663caa27bb"
+ integrity sha512-mG+VRq+cu9vOdEYj7LV0RrI4ocOx3r9jemlKuCxAxB8uHEa1yqaPlDIjNSwwY6yi7oh/VETqf9tm+qGreVRXjQ==
+ dependencies:
+ assure-array "^1.0.0"
+ bluebird "^3.5.5"
+ default-value "^1.0.0"
+
date-now@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
@@ -9810,6 +9829,15 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
+validatem@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/validatem/-/validatem-0.2.0.tgz#0cde815813f3c8a33615bf09370e88d511a65658"
+ integrity sha512-fSW8L19US3smdm/E5tw7zTR3WgC+yGiBf67zhxCgVJExujZui2t8gwVyX05u9tcIBu/90tzqsD9hfMR0VAGKUA==
+ dependencies:
+ assure-array "^1.0.0"
+ create-error "^0.3.1"
+ default-value "^1.0.0"
+
value-or-function@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813"