1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-25 12:56:41 +07:00

Merge branch 'feature/8-image-preloader' into develop

This commit is contained in:
Fedor Katurov 2020-11-06 22:17:34 +07:00
commit 2c1adc384e
232 changed files with 342 additions and 278 deletions

View file

@ -1,5 +1,5 @@
import React, { FC, useCallback } from 'react';
import styles from './styles.scss';
import styles from './styles.module.scss';
import { Button } from '~/components/input/Button';
import { nodeLockComment } from '~/redux/node/actions';
import { IComment } from '~/redux/types';

View file

@ -2,7 +2,7 @@ import React, { FC, HTMLAttributes, memo } from 'react';
import { CommentWrapper } from '~/components/containers/CommentWrapper';
import { ICommentGroup, IComment } from '~/redux/types';
import { CommentContent } from '~/components/node/CommentContent';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { nodeLockComment, nodeEditComment } from '~/redux/node/actions';
import { INodeState } from '~/redux/node/reducer';
import { CommentForm } from '../CommentForm';

View file

@ -3,7 +3,7 @@ import { IComment, IFile } from '~/redux/types';
import path from 'ramda/es/path';
import { formatCommentText, getURL, getPrettyDate } from '~/utils/dom';
import { Group } from '~/components/containers/Group';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { UPLOAD_TYPES } from '~/redux/uploads/constants';
import assocPath from 'ramda/es/assocPath';
import append from 'ramda/es/append';

View file

@ -1,6 +1,6 @@
import React, { FC, KeyboardEventHandler, memo, useCallback, useEffect, useMemo } from 'react';
import { Textarea } from '~/components/input/Textarea';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { Filler } from '~/components/containers/Filler';
import { Button } from '~/components/input/Button';
import assocPath from 'ramda/es/assocPath';

View file

@ -1,5 +1,5 @@
import React, { FC, useState, useCallback } from 'react';
import styles from './styles.scss';
import styles from './styles.module.scss';
interface IProps {
onEdit: () => void;

View file

@ -2,7 +2,7 @@ import React, { FC } from 'react';
import range from 'ramda/es/range';
import classNames from 'classnames';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
interface IProps {
total: number;

View file

@ -1,5 +1,5 @@
import React, { FC } from 'react';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { Group } from '~/components/containers/Group';
import { Filler } from '~/components/containers/Filler';

View file

@ -2,7 +2,7 @@ import React, { FC, useMemo } from 'react';
import { INode } from '~/redux/types';
import { UPLOAD_TYPES } from '~/redux/uploads/constants';
import { AudioPlayer } from '~/components/media/AudioPlayer';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { INodeComponentProps } from '~/redux/node/constants';
interface IProps extends INodeComponentProps {}

View file

@ -1,6 +1,6 @@
import React, { FC, useMemo } from 'react';
import { INode } from '~/redux/types';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { UPLOAD_TYPES } from '~/redux/uploads/constants';
import path from 'ramda/es/path';
import { getURL } from '~/utils/dom';

View file

@ -1,7 +1,7 @@
import React, { FC, useCallback, KeyboardEventHandler, useEffect, useMemo } from 'react';
import { Textarea } from '~/components/input/Textarea';
import { CommentWrapper } from '~/components/containers/CommentWrapper';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { Filler } from '~/components/containers/Filler';
import { Button } from '~/components/input/Button';
import assocPath from 'ramda/es/assocPath';

View file

@ -2,7 +2,7 @@ import React, { FC, useMemo, memo } from 'react';
import { Comment } from '../Comment';
import { Filler } from '~/components/containers/Filler';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { ICommentGroup, IComment } from '~/redux/types';
import { groupCommentsByUser } from '~/utils/fn';
import { IUser } from '~/redux/auth/types';

View file

@ -1,5 +1,5 @@
import React, { FC } from 'react';
import styles from './styles.scss';
import styles from './styles.module.scss';
interface IProps {}

View file

@ -1,6 +1,6 @@
import React, { FC, useMemo, useState, useEffect, useRef, useCallback } from 'react';
import { ImageSwitcher } from '../ImageSwitcher';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { INode } from '~/redux/types';
import classNames from 'classnames';
import { getURL } from '~/utils/dom';

View file

@ -1,5 +1,5 @@
import React, { FC } from 'react';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { LoaderCircle } from '~/components/input/LoaderCircle';
const NodeImageBlockPlaceholder: FC<{}> = () => (

View file

@ -1,5 +1,5 @@
import React, { FC, useMemo, useState, useEffect, useRef, useCallback } from 'react';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import classNames from 'classnames';
import { UPLOAD_TYPES } from '~/redux/uploads/constants';
import { INodeComponentProps } from '~/redux/node/constants';
@ -78,8 +78,8 @@ const NodeImageSlideBlock: FC<IProps> = ({
]);
// update outside hooks
useEffect(() => updateLayout(), [loaded, height, images]);
useEffect(() => updateSizes(), [refs, current, loaded, images]);
useEffect(updateLayout, [loaded, height, images]);
useEffect(updateSizes, [refs, current, loaded, images]);
useEffect(() => {
const timeout = setTimeout(updateLayout, 300);
@ -251,7 +251,7 @@ const NodeImageSlideBlock: FC<IProps> = ({
<div className={classNames(styles.cutter, { [styles.is_loading]: is_loading })} ref={wrap}>
<div
className={classNames(styles.placeholder, {
[styles.is_loading]: is_loading || !loaded[current],
[styles.is_loading]: is_loading,
})}
>
<div>
@ -274,13 +274,57 @@ const NodeImageSlideBlock: FC<IProps> = ({
images.map((file, index) => (
<div
className={classNames(styles.image_wrap, {
is_active: index === current && loaded[index],
[styles.is_active]: index === current,
})}
ref={setRef(index)}
key={node.updated_at + file.id}
>
<svg
viewBox={`0 0 ${file.metadata.width} ${file.metadata.height}`}
className={classNames(styles.preview, { [styles.is_loaded]: loaded[index] })}
style={{
maxHeight: max_height,
width: '100%',
}}
>
<defs>
<filter id="f1" x="0" y="0">
<feBlend
mode="multiply"
x="0%"
y="0%"
width="100%"
height="100%"
in="SourceGraphic"
in2="SourceGraphic"
result="blend"
/>
<feGaussianBlur
stdDeviation="15 15"
x="0%"
y="0%"
width="100%"
height="100%"
in="blend"
edgeMode="none"
result="blur2"
/>
</filter>
</defs>
<rect fill="#242222" width="100%" height="100%" stroke="none" rx="8" ry="8" />
<image
xlinkHref={getURL(file, PRESETS['300'])}
width="100%"
height="100%"
filter="url(#f1)"
/>
</svg>
<img
className={styles.image}
className={classNames(styles.image, { [styles.is_loaded]: loaded[index] })}
src={getURL(file, PRESETS['1600'])}
alt=""
key={file.id}

View file

@ -39,18 +39,6 @@
transition: none;
}
.image {
max-width: 100%;
opacity: 1;
border-radius: $radius;
box-shadow: transparentize($color: white, $amount: 0.95) 0 -1px,
transparentize($color: #000000, $amount: 0.6) 0 2px 5px;
@include tablet {
border-radius: 0;
}
}
&.is_dragging {
transition: none;
}
@ -67,7 +55,7 @@
padding: 0 $gap / 2;
position: relative;
&:global(.is_active) {
&.is_active {
opacity: 1;
}
@ -155,7 +143,6 @@
align-items: center;
justify-content: center;
background: $content_bg;
z-index: 0;
pointer-events: none;
touch-action: none;
transition: opacity 2s;
@ -171,3 +158,28 @@
fill: white;
}
}
.image, .preview {
max-width: 100%;
border-radius: $radius;
@include tablet {
border-radius: 0;
}
}
.image {
position: absolute;
opacity: 0;
&.is_loaded {
opacity: 1;
position: static;
}
}
.preview {
&.is_loaded {
display: none;
}
}

View file

@ -1,5 +1,5 @@
import React, { FC, useMemo } from 'react';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { Group } from '~/components/containers/Group';
import classNames from 'classnames';
import { Filler } from '~/components/containers/Filler';

View file

@ -1,5 +1,5 @@
import React, { FC, useCallback, useEffect, useRef, useState, memo } from 'react';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { INode } from '~/redux/types';
import { createPortal } from 'react-dom';
import { NodePanelInner } from '~/components/node/NodePanelInner';

View file

@ -1,5 +1,5 @@
import React, { FC, memo } from 'react';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { Group } from '~/components/containers/Group';
import { Filler } from '~/components/containers/Filler';
import { Icon } from '~/components/input/Icon';

View file

@ -1,5 +1,5 @@
import React, { FC, ReactElement } from 'react';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { Group } from '~/components/containers/Group';
import { INode } from '~/redux/types';
import { NodeRelatedItem } from '~/components/node/NodeRelatedItem';

View file

@ -1,6 +1,6 @@
import React, { FC, memo } from "react";
import styles from "./styles.scss";
import cell_style from "~/components/node/NodeRelatedItem/styles.scss";
import styles from './styles.module.scss';
import cell_style from "~/components/node/NodeRelatedItem/styles.module.scss";
import { Group } from "~/components/containers/Group";
import { Placeholder } from "~/components/placeholders/Placeholder";
import range from "ramda/es/range";

View file

@ -1,5 +1,5 @@
import React, { FC, memo, useCallback, useState, useMemo } from 'react';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import classNames from 'classnames';
import { INode } from '~/redux/types';
import { URLS, PRESETS } from '~/constants/urls';

View file

@ -2,7 +2,7 @@ import React, { FC } from 'react';
import { INode } from '~/redux/types';
import path from 'ramda/es/path';
import { formatTextParagraphs } from '~/utils/dom';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import { INodeComponentProps } from '~/redux/node/constants';
interface IProps extends INodeComponentProps {}

View file

@ -1,5 +1,5 @@
import React, { FC, useMemo } from 'react';
import * as styles from './styles.scss';
import styles from './styles.module.scss';
import path from 'ramda/es/path';
import { INodeComponentProps } from '~/redux/node/constants';