diff --git a/packages/app/public/assets/badges/early_streamer.svg b/packages/app/public/assets/badges/early_streamer.svg
new file mode 100644
index 00000000..41376040
--- /dev/null
+++ b/packages/app/public/assets/badges/early_streamer.svg
@@ -0,0 +1,3 @@
+
diff --git a/packages/app/public/assets/badges/x1.svg b/packages/app/public/assets/badges/x1.svg
new file mode 100644
index 00000000..7af13996
--- /dev/null
+++ b/packages/app/public/assets/badges/x1.svg
@@ -0,0 +1,23 @@
+
diff --git a/packages/app/src/components/UserBadges/index.jsx b/packages/app/src/components/UserBadges/index.jsx
index 78f57437..72e704e6 100755
--- a/packages/app/src/components/UserBadges/index.jsx
+++ b/packages/app/src/components/UserBadges/index.jsx
@@ -1,47 +1,88 @@
import React from "react"
import * as antd from "antd"
-import Loadable from "react-loadable"
import { createIconRender } from "components/Icons"
import { UserModel } from "models"
import "./index.less"
-export default React.memo((props) => {
- return React.createElement(Loadable({
- loader: async () => {
- let { user_id } = props
+import DOMPurify from "dompurify"
+import axios from "axios"
- const badgesData = await UserModel.getUserBadges(user_id).catch((err) => {
- console.error(err)
+const RemoteSVG = (props) => {
+ // IMPORTANT: Only use this component for SVG files that you trust.
+ console.warn("RemoteSVGToComponent: This component is not safe at all, cause use __dangerouslySetInnerHTML. Only use it for SVG files that you trust.")
- app.message.error("Failed to fetch user badges")
+ // make sure the url is local
+ if (!props.src.startsWith("/") && !props.remote) {
+ console.error("RemoteSVGToComponent: The file is not a local file.")
+ return () => null
+ }
- return null
- })
+ // make sure the file is a SVG
+ if (!props.src.endsWith(".svg")) {
+ console.error("RemoteSVGToComponent: The file is not a SVG.")
+ return () => null
+ }
- if (!badgesData) {
- return null
+ const [L_Badge, R_Badge, E_Badge] = app.cores.api.useRequest(async () => {
+ return await axios({
+ method: "GET",
+ url: props.src,
+ })
+ })
+
+ if (E_Badge || L_Badge) {
+ return <>>
+ }
+
+ return