From b88aa32e078e272cb37162dd229e0fb269aab890 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 23 Apr 2020 11:28:41 +0700 Subject: [PATCH 1/4] simplier slider for images --- .../containers/PageCover/styles.scss | 3 +- src/components/node/NodeImageBlock/index.tsx | 59 +++--- .../node/NodeImageBlock/styles.scss | 9 +- .../node/NodePanelInner/styles.scss | 5 +- src/containers/node/NodeLayout/index.tsx | 182 ++++++++++-------- src/redux/node/constants.ts | 7 +- 6 files changed, 143 insertions(+), 122 deletions(-) diff --git a/src/components/containers/PageCover/styles.scss b/src/components/containers/PageCover/styles.scss index 4c2b9724..92f9c352 100644 --- a/src/components/containers/PageCover/styles.scss +++ b/src/components/containers/PageCover/styles.scss @@ -18,6 +18,7 @@ height: 100%; animation: fadeIn 2s; will-change: transform, opacity; + filter: blur(10px); &::after { content: ' '; @@ -26,7 +27,7 @@ left: 0; width: 100%; height: 100%; - background: url(~/sprites/stripes.svg) rgba(0, 0, 0, 0.3); + background: url(~/sprites/stripes.svg) transparentize($content_bg, 0.2); } @include tablet { diff --git a/src/components/node/NodeImageBlock/index.tsx b/src/components/node/NodeImageBlock/index.tsx index ef2f9f85..9bfacf4b 100644 --- a/src/components/node/NodeImageBlock/index.tsx +++ b/src/components/node/NodeImageBlock/index.tsx @@ -30,25 +30,18 @@ const NodeImageBlock: FC = ({ node, is_loading, updateLayout, modalShowP ); const setRef = useCallback(index => el => (refs.current[index] = el), [refs]); + const onImageLoad = useCallback(index => () => setLoaded({ ...loaded, [index]: true }), [ setLoaded, loaded, ]); - const onOpenPhotoSwipe = useCallback( - (index: number) => () => modalShowPhotoswipe(images, index), - [modalShowPhotoswipe, images] - ); - useEffect(() => updateLayout(), [loaded]); useEffect(() => { if (!refs || !refs.current[current] || !loaded[current]) return setHeight(320); - const el = refs.current[current]; - const element_height = el.getBoundingClientRect && el.getBoundingClientRect().height; - setHeight(element_height); }, [refs, current, loaded]); @@ -59,35 +52,33 @@ const NodeImageBlock: FC = ({ node, is_loading, updateLayout, modalShowP return (
-
- + -
- {(is_loading || !loaded[0] || !images.length) &&
} +
+ {(is_loading || !loaded[0] || !images.length) &&
} - {images.map((file, index) => ( -
( +
+ - -
- ))} -
+ onLoad={onImageLoad(index)} + /> +
+ ))}
); diff --git a/src/components/node/NodeImageBlock/styles.scss b/src/components/node/NodeImageBlock/styles.scss index 7e537fa4..ebe0ebf1 100644 --- a/src/components/node/NodeImageBlock/styles.scss +++ b/src/components/node/NodeImageBlock/styles.scss @@ -1,4 +1,6 @@ .wrap { + padding-bottom: $gap * 2; + &:global(.is_animated) { .image_container { transition: height 0.5s; @@ -12,7 +14,6 @@ .image_container { width: 100%; - background: $node_image_bg; border-radius: $panel_radius 0 0 $panel_radius; display: flex; align-items: center; @@ -22,10 +23,12 @@ user-select: none; .image { - max-height: 960px; + max-height: calc(100vh - 140px); max-width: 100%; opacity: 1; - border-radius: $radius $radius 0 0; + border-radius: $radius; + + @include outer_shadow(); } } diff --git a/src/components/node/NodePanelInner/styles.scss b/src/components/node/NodePanelInner/styles.scss index 60894c34..15e6c348 100644 --- a/src/components/node/NodePanelInner/styles.scss +++ b/src/components/node/NodePanelInner/styles.scss @@ -36,8 +36,9 @@ @include tablet { border-radius: 0; - flex-direction: column; - align-items: flex-start; + // flex-direction: column; + // align-items: flex-start; + height: 128px; } @include can_backdrop { diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx index dfcc0a3e..4d395695 100644 --- a/src/containers/node/NodeLayout/index.tsx +++ b/src/containers/node/NodeLayout/index.tsx @@ -12,7 +12,7 @@ import { NodeNoComments } from '~/components/node/NodeNoComments'; import { NodeRelated } from '~/components/node/NodeRelated'; import { NodeComments } from '~/components/node/NodeComments'; import { NodeTags } from '~/components/node/NodeTags'; -import { NODE_COMPONENTS, NODE_INLINES } from '~/redux/node/constants'; +import { NODE_COMPONENTS, NODE_INLINES, NODE_HEADS } from '~/redux/node/constants'; import { selectUser } from '~/redux/auth/selectors'; import pick from 'ramda/es/pick'; import { NodeRelatedPlaceholder } from '~/components/node/NodeRelated/placeholder'; @@ -97,8 +97,9 @@ const NodeLayoutUnconnected: FC = memo( const can_like = useMemo(() => canLikeNode(node, user), [node, user]); const can_star = useMemo(() => canStarNode(node, user), [node, user]); + const head = node && node.type && NODE_HEADS[node.type]; const block = node && node.type && NODE_COMPONENTS[node.type]; - const inline_block = node && node.type && NODE_INLINES[node.type]; + const inline = node && node.type && NODE_INLINES[node.type]; const onEdit = useCallback(() => nodeEdit(node.id), [nodeEdit, node]); const onLike = useCallback(() => nodeLike(node.id), [nodeLike, node]); @@ -112,91 +113,110 @@ const NodeLayoutUnconnected: FC = memo( }, [nodeSetCoverImage, node.cover]); return ( - - {block && - createElement(block, { node, is_loading, updateLayout, layout, modalShowPhotoswipe })} + <> + {head && + createElement(head, { node, is_loading, updateLayout, layout, modalShowPhotoswipe })} - + + {block && + createElement(block, { node, is_loading, updateLayout, layout, modalShowPhotoswipe })} - {node.deleted_at ? ( - - ) : ( - - - - - {inline_block && ( -
- {createElement(inline_block, { - node, - is_loading, - updateLayout, - layout, - modalShowPhotoswipe, - })} -
- )} + - {is_loading || is_loading_comments || (!comments.length && !inline_block) ? ( - - ) : ( - - )} + {node.deleted_at ? ( + + ) : ( + + + + + {inline && ( +
+ {createElement(inline, { + node, + is_loading, + updateLayout, + layout, + modalShowPhotoswipe, + })} +
+ )} - {is_user && !is_loading && } + {is_loading || is_loading_comments || (!comments.length && !inline) ? ( + + ) : ( + + )} + + {is_user && !is_loading && } +
+ +
+ + + {!is_loading && ( + + )} + + {is_loading && } + + {!is_loading && + related && + related.albums && + Object.keys(related.albums) + .filter(album => related.albums[album].length > 0) + .map(album => ( + + ))} + + {!is_loading && + related && + related.similar && + related.similar.length > 0 && ( + + )} + + +
+
+
+ )} -
- - - {!is_loading && ( - - )} - - {is_loading && } - - {!is_loading && - related && - related.albums && - Object.keys(related.albums) - .filter(album => related.albums[album].length > 0) - .map(album => ( - - ))} - - {!is_loading && related && related.similar && related.similar.length > 0 && ( - - )} - - -
-
-
-
- )} - -