diff --git a/packages/app/src/components/PostCard/index.jsx b/packages/app/src/components/PostCard/index.jsx index 71f96d9b..ec44ecb1 100644 --- a/packages/app/src/components/PostCard/index.jsx +++ b/packages/app/src/components/PostCard/index.jsx @@ -12,6 +12,25 @@ import useLayoutEffect from "rc-util/lib/hooks/useLayoutEffect" import "./index.less" +const mediaTypes = { + "jpg": "image", + "jpeg": "image", + "png": "image", + "gif": "image", + "mp4": "video", + "webm": "video", + "ogv": "video", + "mov": "video", + "avi": "video", + "mkv": "video", + "ogg": "audio", + "mp3": "audio", + "wav": "audio", + "flac": "audio", + "aac": "audio", + "m4a": "audio", +} + const ContentFailed = () => { return
@@ -98,44 +117,54 @@ const PostContent = React.memo((props) => { additions = additions.map((uri, index) => { const MediaRender = loadable(async () => { - // create a basic http request for fetching the file media type - const request = new Request(uri, { - method: "HEAD", - }) + let extension = null - // fetch the file media type - const mediaType = await fetch(request) - .then(response => response.headers.get("content-type")) - .catch((error) => { - console.error(error) - return null - }) + try { + // get media type by parsing the uri + const mediaTypeExt = /\.([a-zA-Z0-9]+)$/.exec(uri) - if (!mediaType) { + if (mediaTypeExt) { + extension = mediaTypeExt[1] + } else { + // try to get media by creating requesting the uri + const response = await fetch(uri, { + method: "HEAD", + }) + + extension = response.headers.get("content-type").split("/")[1] + } + + const mediaType = mediaTypes[extension] + + if (!mediaType) { + return () => + } + + switch (mediaType.split("/")[0]) { + case "image": { + return () => + } + case "video": { + return () => + } + case "audio": { + return () => + } + + default: { + return () =>

+ Unsupported media type [{mediaType}/{mediaTypeExt}] +

+ } + } + } catch (error) { + console.error(error) return () => } - - switch (mediaType.split("/")[0]) { - case "image": { - return () => - } - case "video": { - return () => - } - case "audio": { - return () => - } - - default: { - return () =>

- Unsupported media type [{mediaType}] -

- } - } }) return { }) - return
{message} - {additions && + {additions.length > 0 &&
@@ -214,7 +242,7 @@ const PostActions = (props) => { Delete } - trigger={['click']} + trigger={["click"]} >
diff --git a/packages/app/src/components/PostCard/index.less b/packages/app/src/components/PostCard/index.less index 022574ac..feb6c8ae 100644 --- a/packages/app/src/components/PostCard/index.less +++ b/packages/app/src/components/PostCard/index.less @@ -144,23 +144,34 @@ .additions { width: 100%; + height: 28vh; .addition { width: 100%; + height: 100%; // fixtures for media content img { width: 100%; border-radius: 12px; + + user-select: none; + -webkit-user-drag: none; } video { - border-radius: 12px; width: 100%; + border-radius: 12px; + + user-select: none; + -webkit-user-drag: none; } audio { width: 100%; + + user-select: none; + -webkit-user-drag: none; } } } @@ -308,4 +319,34 @@ // .actionsIndicator { // opacity: 0; // } +} + +.adm-swiper-track-inner { + display: flex; + align-items: center; + + height: 100%; + width: 100%; + + user-select: none; + -webkit-user-drag: none; + + .adm-swiper-slide { + display: flex; + align-items: center; + + user-select: none; + -webkit-user-drag: none; + + .adm-swiper-item { + display: flex; + align-items: center; + justify-content: center; + + height: fit-content; + + user-select: none; + -webkit-user-drag: none; + } + } } \ No newline at end of file