mirror of
https://github.com/muerwre/vault-frontend.git
synced 2025-04-24 20:36:40 +07:00
fix eslint
This commit is contained in:
parent
e4b158dada
commit
a26e4168fd
80 changed files with 199 additions and 205 deletions
|
@ -86,6 +86,7 @@ const LoginAnimatedScene: FC<LoginSceneProps> = memo(() => {
|
|||
const listener = throttle(100, onMouseMove);
|
||||
document.addEventListener('mousemove', listener);
|
||||
return () => document.removeEventListener('mousemove', listener);
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []);
|
||||
|
||||
if (isTablet) {
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
import React, { FC, ReactNode, useCallback } from 'react';
|
||||
import { FC, ReactNode } from 'react';
|
||||
|
||||
import { WithDescription } from '~/components/common/WithDescription';
|
||||
import { Icon } from '~/components/input/Icon';
|
||||
|
||||
import styles from './styles.module.scss';
|
||||
|
||||
interface Props {
|
||||
icon: string;
|
||||
title: string;
|
||||
|
@ -22,12 +20,6 @@ const BorisContactItem: FC<Props> = ({
|
|||
prefix,
|
||||
suffix,
|
||||
}) => {
|
||||
const onClick = useCallback(() => {
|
||||
if (!link) return;
|
||||
|
||||
window.open(link);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div>
|
||||
{prefix}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import React, { FC } from 'react';
|
||||
|
||||
import { BorisContactItem } from '~/components/boris/BorisContactItem';
|
||||
import { Group } from '~/components/containers/Group';
|
||||
import { Padder } from '~/components/containers/Padder';
|
||||
import { Button } from '~/components/input/Button';
|
||||
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
import React, { VFC } from 'react';
|
||||
|
||||
import { parseISO } from 'date-fns';
|
||||
|
||||
import { StatsCountdownCard } from '~/components/charts/StatsCountdownCard';
|
||||
import { StatsGraphCard } from '~/components/charts/StatsGraphCard';
|
||||
import { foundationDate } from '~/constants/boris/constants';
|
||||
|
||||
import styles from './styles.module.scss';
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ const BorisStatsBackend: FC<IProps> = ({ isLoading, stats }) => {
|
|||
);
|
||||
const nodesByMonth = useMemo(
|
||||
() => stats.nodes.by_month?.slice(0, -1),
|
||||
[stats.comments.by_month],
|
||||
[stats.nodes.by_month],
|
||||
);
|
||||
|
||||
if (!stats && !isLoading) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
import React, { useMemo, VFC } from 'react';
|
||||
|
||||
import { lighten } from 'color2k';
|
||||
|
||||
import { makeBezierCurve, PathPoint } from '~/utils/dom/makeBezierCurve';
|
||||
import { SVGProps } from '~/utils/types';
|
||||
|
||||
|
@ -40,7 +38,7 @@ const BasicCurveChart: VFC<BasicCurveChartProps> = ({
|
|||
],
|
||||
[],
|
||||
),
|
||||
[height, width, items, gap],
|
||||
[items, borderGap, height, max, width],
|
||||
);
|
||||
|
||||
if (!points.length) {
|
||||
|
|
|
@ -11,15 +11,13 @@ import React, {
|
|||
|
||||
import classnames from 'classnames';
|
||||
|
||||
import { CommentForm } from '~/components/comment/CommentForm';
|
||||
import { Authorized } from '~/components/containers/Authorized';
|
||||
import { Group } from '~/components/containers/Group';
|
||||
import { AudioPlayer } from '~/components/media/AudioPlayer';
|
||||
import { COMMENT_BLOCK_RENDERERS } from '~/constants/comment';
|
||||
import { UploadType } from '~/constants/uploads';
|
||||
import { imagePresets } from '~/constants/urls';
|
||||
import { IComment, IFile } from '~/types';
|
||||
import { formatCommentText, getPrettyDate, getURL } from '~/utils/dom';
|
||||
import { formatCommentText, getPrettyDate } from '~/utils/dom';
|
||||
import { append, assocPath, path, reduce } from '~/utils/ramda';
|
||||
|
||||
import { CommentEditingForm } from '../CommentEditingForm';
|
||||
|
|
|
@ -10,23 +10,25 @@ interface CommentDistanceProps {
|
|||
secondDate?: Date;
|
||||
}
|
||||
|
||||
const CommentDistance: FC<CommentDistanceProps> = memo(({ firstDate, secondDate }) => {
|
||||
const distance = useMemo(() => {
|
||||
if (!firstDate || !secondDate) {
|
||||
return undefined;
|
||||
const CommentDistance: FC<CommentDistanceProps> = memo(
|
||||
({ firstDate, secondDate }) => {
|
||||
const distance = useMemo(() => {
|
||||
if (!firstDate || !secondDate) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return formatDistance(secondDate, firstDate, {
|
||||
locale: ru,
|
||||
addSuffix: false,
|
||||
});
|
||||
}, [firstDate, secondDate]);
|
||||
|
||||
if (!distance) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return formatDistance(secondDate, firstDate, {
|
||||
locale: ru,
|
||||
addSuffix: false,
|
||||
});
|
||||
}, []);
|
||||
|
||||
if (!distance) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return <div className={styles.bar}>прошло {distance}</div>;
|
||||
});
|
||||
return <div className={styles.bar}>прошло {distance}</div>;
|
||||
},
|
||||
);
|
||||
|
||||
export { CommentDistance };
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { FC, useCallback, useMemo, useState } from 'react';
|
||||
import { FC, useCallback, useState } from 'react';
|
||||
|
||||
import { FormikProvider } from 'formik';
|
||||
import { observer } from 'mobx-react-lite';
|
||||
|
@ -9,14 +9,12 @@ import { CommentFormFormatButtons } from '~/components/comment/CommentFormFormat
|
|||
import { LocalCommentFormTextarea } from '~/components/comment/LocalCommentFormTextarea';
|
||||
import { Filler } from '~/components/containers/Filler';
|
||||
import { Button } from '~/components/input/Button';
|
||||
import { UploadDropzone } from '~/components/upload/UploadDropzone';
|
||||
import { ERROR_LITERAL } from '~/constants/errors';
|
||||
import { EMPTY_COMMENT } from '~/constants/node';
|
||||
import { useCommentFormFormik } from '~/hooks/comments/useCommentFormFormik';
|
||||
import { useInputPasteUpload } from '~/hooks/dom/useInputPasteUpload';
|
||||
import { IComment, INode } from '~/types';
|
||||
import { IComment } from '~/types';
|
||||
import {
|
||||
UploaderContextProvider,
|
||||
useUploaderContext,
|
||||
} from '~/utils/context/UploaderContextProvider';
|
||||
|
||||
|
|
|
@ -30,14 +30,14 @@ const CommentFormAttaches: FC = () => {
|
|||
(newFiles: IFile[]) => {
|
||||
setFiles([...filesAudios, ...newFiles.filter((it) => it)]);
|
||||
},
|
||||
[setFiles, filesImages, filesAudios],
|
||||
[setFiles, filesAudios],
|
||||
);
|
||||
|
||||
const onAudioMove = useCallback(
|
||||
(newFiles: IFile[]) => {
|
||||
setFiles([...filesImages, ...newFiles]);
|
||||
},
|
||||
[setFiles, filesImages, filesAudios],
|
||||
[setFiles, filesImages],
|
||||
);
|
||||
|
||||
const onFileDelete = useCallback(
|
||||
|
|
|
@ -115,7 +115,7 @@ const CommentFormFormatButtons: FC<IProps> = ({ element, handler }) => {
|
|||
label="Коммент"
|
||||
className={styles.button}
|
||||
>
|
||||
{`/ /`}
|
||||
{'/ /'}
|
||||
</Button>
|
||||
</ButtonGroup>
|
||||
);
|
||||
|
|
|
@ -4,7 +4,6 @@ import classNames from 'classnames';
|
|||
|
||||
import { Square } from '~/components/common/Square';
|
||||
import { imagePresets } from '~/constants/urls';
|
||||
import { useColorGradientFromString } from '~/hooks/color/useColorGradientFromString';
|
||||
import { getURLFromString } from '~/utils/dom';
|
||||
import { DivProps } from '~/utils/types';
|
||||
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
import React, {
|
||||
CSSProperties,
|
||||
FC,
|
||||
useCallback,
|
||||
useMemo,
|
||||
useReducer,
|
||||
useState,
|
||||
} from 'react';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
|
|
@ -16,7 +16,7 @@ const WithDescription: FC<Props> = ({ icon, title, subtitle, link }) => {
|
|||
if (!link) return;
|
||||
|
||||
window.open(link);
|
||||
}, []);
|
||||
}, [link]);
|
||||
|
||||
return (
|
||||
<div
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { FC, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
||||
import React, { FC, useEffect, useRef, useState } from 'react';
|
||||
|
||||
import Masonry from 'react-masonry-css';
|
||||
|
||||
|
@ -34,6 +34,7 @@ const Columns: FC<ColumnsProps> = ({
|
|||
const timeout = setTimeout(() => setColumns([...childs]), 150);
|
||||
|
||||
return () => clearTimeout(timeout);
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [ref.current]);
|
||||
|
||||
useScrollEnd(columns, onScrollEnd, { active: hasMore, threshold: 2 });
|
||||
|
|
|
@ -15,7 +15,7 @@ const AudioGrid: FC<IProps> = ({ files, setFiles, locked }) => {
|
|||
(newFiles: IFile[]) => {
|
||||
setFiles(newFiles);
|
||||
},
|
||||
[setFiles, files],
|
||||
[setFiles],
|
||||
);
|
||||
|
||||
const onDrop = useCallback(
|
||||
|
|
|
@ -18,7 +18,7 @@ const ImageGrid: FC<IProps> = ({ files, setFiles, locked }) => {
|
|||
(newFiles: IFile[]) => {
|
||||
setFiles(newFiles.filter((it) => it));
|
||||
},
|
||||
[setFiles, files],
|
||||
[setFiles],
|
||||
);
|
||||
|
||||
const onDrop = useCallback(
|
||||
|
|
|
@ -25,12 +25,16 @@ const CellShade: FC<Props> = ({ color, size = 50, angle = 7, ...rest }) => {
|
|||
|
||||
return `linear-gradient(${angle}deg, ${normalized} ${size}px, ${transparentize(
|
||||
normalized,
|
||||
1
|
||||
1,
|
||||
)} ${size * 5}px)`;
|
||||
}, [color, size]);
|
||||
}, [angle, color, size]);
|
||||
|
||||
return (
|
||||
<div {...rest} className={classNames(rest.className, styles.shade)} style={{ background }} />
|
||||
<div
|
||||
{...rest}
|
||||
className={classNames(rest.className, styles.shade)}
|
||||
style={{ background }}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { FC, useCallback } from 'react';
|
||||
import React, { useCallback } from 'react';
|
||||
|
||||
import { Filler } from '~/components/containers/Filler';
|
||||
import { Button } from '~/components/input/Button';
|
||||
|
@ -10,7 +10,7 @@ import styles from './styles.module.scss';
|
|||
const FlowLoginStamp = () => {
|
||||
const showModal = useShowModal(Dialog.Login);
|
||||
|
||||
const onClick = useCallback(() => showModal({}), []);
|
||||
const onClick = useCallback(() => showModal({}), [showModal]);
|
||||
|
||||
return (
|
||||
<div className={styles.stamp}>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import React, { FC, useCallback, useMemo, useState } from 'react';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import Image from 'next/image';
|
||||
import SwiperCore, { Autoplay, EffectFade, Lazy, Navigation } from 'swiper';
|
||||
import { Swiper, SwiperSlide } from 'swiper/react';
|
||||
import SwiperClass from 'swiper/types/swiper-class';
|
||||
|
|
|
@ -90,7 +90,7 @@ const Button: FC<IButtonProps> = memo(
|
|||
}
|
||||
|
||||
return 24;
|
||||
}, []);
|
||||
}, [size]);
|
||||
|
||||
return (
|
||||
<Tippy content={label || ''} disabled={!label}>
|
||||
|
|
|
@ -3,7 +3,6 @@ import React, { FC } from 'react';
|
|||
import Image from 'next/future/image';
|
||||
import SwiperCore, { A11y, Navigation, Pagination } from 'swiper';
|
||||
|
||||
import { ImagePreloader } from '~/components/media/ImagePreloader';
|
||||
import { Placeholder } from '~/components/placeholders/Placeholder';
|
||||
import { INodeComponentProps } from '~/constants/node';
|
||||
import { imagePresets } from '~/constants/urls';
|
||||
|
|
|
@ -61,6 +61,7 @@ const MenuButton: FC<MenuButtonProps> = ({
|
|||
|
||||
useEffect(() => {
|
||||
popper.update?.();
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [visible]);
|
||||
|
||||
return (
|
||||
|
|
|
@ -2,7 +2,6 @@ import { PropsWithChildren } from 'react';
|
|||
|
||||
import classNames from 'classnames';
|
||||
|
||||
import { Anchor } from '~/components/common/Anchor';
|
||||
import { DivProps, LinkProps } from '~/utils/types';
|
||||
|
||||
import styles from './styles.module.scss';
|
||||
|
|
|
@ -89,6 +89,7 @@ const NodeImageSwiperBlock: FC<IProps> = observer(({ node }) => {
|
|||
useEffect(() => {
|
||||
controlledSwiper?.slideTo(0, 0);
|
||||
return () => controlledSwiper?.slideTo(0, 0);
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [images, node?.id]);
|
||||
|
||||
useEffect(() => {
|
||||
|
@ -97,6 +98,7 @@ const NodeImageSwiperBlock: FC<IProps> = observer(({ node }) => {
|
|||
} else {
|
||||
controlledSwiper?.keyboard.enable();
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [isModalActive]);
|
||||
|
||||
if (!images?.length) {
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
import React, { FC, useCallback } from 'react';
|
||||
import React, { FC } from 'react';
|
||||
|
||||
import { Pressable } from '~/components/common/Pressable';
|
||||
import { NodeRelated } from '~/components/node/NodeRelated';
|
||||
import { NodeRelatedPlaceholder } from '~/components/node/NodeRelated/placeholder';
|
||||
import { Dialog } from '~/constants/modal';
|
||||
import { useShowModal } from '~/hooks/modal/useShowModal';
|
||||
import { useTagSidebar } from '~/hooks/sidebar/useTagSidebar';
|
||||
import { INode, ITag } from '~/types';
|
||||
import { INode } from '~/types';
|
||||
import { INodeRelated } from '~/types/node';
|
||||
import { useSidebar } from '~/utils/providers/SidebarProvider';
|
||||
|
||||
interface IProps {
|
||||
isLoading: boolean;
|
||||
|
|
|
@ -25,14 +25,14 @@ const NoteCard: VFC<NoteCardProps> = ({
|
|||
}) => {
|
||||
const [editing, setEditing] = useState(false);
|
||||
|
||||
const toggleEditing = useCallback(() => setEditing(v => !v), []);
|
||||
const toggleEditing = useCallback(() => setEditing((v) => !v), []);
|
||||
const onUpdate = useCallback(
|
||||
(text: string, callback?: () => void) =>
|
||||
update(text, () => {
|
||||
setEditing(false);
|
||||
callback?.();
|
||||
}),
|
||||
[],
|
||||
[update],
|
||||
);
|
||||
|
||||
return (
|
||||
|
|
|
@ -3,8 +3,6 @@ import React, { FC } from 'react';
|
|||
import { Anchor } from '~/components/common/Anchor';
|
||||
import { InlineUsername } from '~/components/common/InlineUsername';
|
||||
import { Square } from '~/components/common/Square';
|
||||
import { Card } from '~/components/containers/Card';
|
||||
import { FlowRecentItem } from '~/components/flow/FlowRecentItem';
|
||||
import { NotificationItem, NotificationType } from '~/types/notifications';
|
||||
import { formatText, getPrettyDate, getURLFromString } from '~/utils/dom';
|
||||
|
||||
|
|
|
@ -2,9 +2,7 @@ import React, { ChangeEvent, FC, useCallback } from 'react';
|
|||
|
||||
import { Avatar } from '~/components/common/Avatar';
|
||||
import { Button } from '~/components/input/Button';
|
||||
import { imagePresets } from '~/constants/urls';
|
||||
import { IFile } from '~/types';
|
||||
import { getURL } from '~/utils/dom';
|
||||
|
||||
import styles from './styles.module.scss';
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ import { useState, VFC } from 'react';
|
|||
|
||||
import { Group } from '~/components/containers/Group';
|
||||
import { Button } from '~/components/input/Button';
|
||||
import { Icon } from '~/components/input/Icon';
|
||||
import { HorizontalMenu } from '~/components/menu/HorizontalMenu';
|
||||
import { useStackContext } from '~/components/sidebar/SidebarStack';
|
||||
import { SidebarStackCard } from '~/components/sidebar/SidebarStackCard';
|
||||
|
|
|
@ -38,7 +38,7 @@ const SidebarCards: FC = ({ children }) => {
|
|||
return [];
|
||||
}
|
||||
|
||||
return Array.isArray(children) ? children.filter(it => it) : [children];
|
||||
return Array.isArray(children) ? children.filter((it) => it) : [children];
|
||||
}, [children]);
|
||||
|
||||
if (isNil(activeTab) || !nonEmptyChildren[activeTab]) {
|
||||
|
@ -48,7 +48,7 @@ const SidebarCards: FC = ({ children }) => {
|
|||
return <div className={styles.card}>{nonEmptyChildren[activeTab]}</div>;
|
||||
};
|
||||
|
||||
const SidebarStack = function({
|
||||
const SidebarStack = function ({
|
||||
children,
|
||||
tab,
|
||||
onTabChange,
|
||||
|
@ -58,7 +58,7 @@ const SidebarStack = function({
|
|||
const closeAllTabs = useCallback(() => {
|
||||
setActiveTab(undefined);
|
||||
onTabChange?.(undefined);
|
||||
}, []);
|
||||
}, [onTabChange]);
|
||||
|
||||
const onChangeTab = useCallback(
|
||||
(index: number) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue