From 6198d814d811f22455a4152e3aece55b20033b06 Mon Sep 17 00:00:00 2001 From: Riccardo Graziosi <31478034+riggraz@users.noreply.github.com> Date: Mon, 22 Aug 2022 10:38:03 +0200 Subject: [PATCH] Add ReactIcons (#149) --- .../components/Comments/CommentEditForm.tsx | 40 +++++++---------- .../components/Comments/CommentFooter.tsx | 30 +++++++------ .../Comments/NewCommentUpdateSection.tsx | 21 ++++----- .../components/Post/PostEditForm.tsx | 8 ++-- app/javascript/components/Post/PostFooter.tsx | 29 +++++++----- .../SiteSettings/Authentication/OAuthForm.tsx | 12 +++-- .../Authentication/OAuthProviderItem.tsx | 45 ++++++++++++------- .../SiteSettings/Boards/BoardEditable.tsx | 24 ++++++---- .../SiteSettings/Boards/BoardForm.tsx | 1 + .../PostStatuses/PostStatusEditable.tsx | 24 ++++++---- .../PostStatuses/PostStatusForm.tsx | 1 + .../SiteSettings/Users/UserEditable.tsx | 24 +++++----- .../components/common/ActionLink.tsx | 26 +++++++++++ .../common/CopyToClipboardButton.tsx | 11 +++-- app/javascript/components/common/DragZone.tsx | 15 ++++++- app/javascript/components/common/Icons.tsx | 28 ++++++++++++ app/javascript/stylesheets/common/_index.scss | 21 +++++++++ .../stylesheets/components/Comments.scss | 17 +++---- .../stylesheets/components/Post.scss | 16 +------ .../stylesheets/components/Roadmap.scss | 1 + .../SiteSettings/Authentication/index.scss | 12 ++--- .../components/SiteSettings/Boards/index.scss | 10 +---- .../SiteSettings/PostStatuses/index.scss | 10 +---- .../SiteSettings/Roadmap/index.scss | 1 + .../components/SiteSettings/Users/index.scss | 20 +-------- .../stylesheets/icons/drag_icon.scss | 28 ------------ app/javascript/stylesheets/main.scss | 5 +-- app/views/devise/registrations/new.html.erb | 3 +- app/views/devise/sessions/new.html.erb | 3 +- config/locales/en.yml | 1 + package.json | 1 + yarn.lock | 5 +++ 32 files changed, 267 insertions(+), 226 deletions(-) create mode 100644 app/javascript/components/common/ActionLink.tsx create mode 100644 app/javascript/components/common/Icons.tsx delete mode 100644 app/javascript/stylesheets/icons/drag_icon.scss diff --git a/app/javascript/components/Comments/CommentEditForm.tsx b/app/javascript/components/Comments/CommentEditForm.tsx index 2a855fd5..932614b5 100644 --- a/app/javascript/components/Comments/CommentEditForm.tsx +++ b/app/javascript/components/Comments/CommentEditForm.tsx @@ -1,6 +1,9 @@ import * as React from 'react'; import I18n from 'i18n-js'; import Button from '../common/Button'; +import Switch from '../common/Switch'; +import ActionLink from '../common/ActionLink'; +import { CancelIcon } from '../common/Icons'; interface Props { id: number; @@ -61,34 +64,23 @@ class CommentEditForm extends React.Component {
{ - isPowerUser ? - <> - this.handleCommentIsPostUpdateChange(e.target.checked)} - checked={isPostUpdate || false} - /> -   - - - : - null + isPowerUser && + this.handleCommentIsPostUpdateChange(!isPostUpdate)} + checked={isPostUpdate || false} + label={I18n.t('post.new_comment.is_post_update')} + /> } -
-
- - { I18n.t('common.buttons.cancel') } - +
+ }> + {I18n.t('common.buttons.cancel')} +   -
diff --git a/app/javascript/components/Comments/CommentFooter.tsx b/app/javascript/components/Comments/CommentFooter.tsx index 409351df..0e5b57f0 100644 --- a/app/javascript/components/Comments/CommentFooter.tsx +++ b/app/javascript/components/Comments/CommentFooter.tsx @@ -5,6 +5,8 @@ import Separator from '../common/Separator'; import { MutedText } from '../common/CustomTexts'; import friendlyDate from '../../helpers/datetime'; import { ReplyFormState } from '../../reducers/replyFormReducer'; +import ActionLink from '../common/ActionLink'; +import { CancelIcon, DeleteIcon, EditIcon, ReplyIcon } from '../common/Icons'; interface Props { id: number; @@ -34,43 +36,43 @@ const CommentFooter = ({ toggleEditMode, }: Props) => (
- + : } + > { replyForm.isOpen ? I18n.t('common.buttons.cancel') : I18n.t('post.comments.reply_button') } - + { isPowerUser || currentUserEmail === commentAuthorEmail ? <> - - + }> {I18n.t('common.buttons.edit')} - + - - confirm(I18n.t('common.confirmation')) && handleDeleteComment(id)} - className="commentLink"> - {I18n.t('common.buttons.delete')} - + icon={} + > + {I18n.t('common.buttons.delete')} + : null } - + {friendlyDate(createdAt)} { - createdAt !== updatedAt ? + createdAt !== updatedAt && <> { I18n.t('common.edited').toLowerCase() } - : - null }
); diff --git a/app/javascript/components/Comments/NewCommentUpdateSection.tsx b/app/javascript/components/Comments/NewCommentUpdateSection.tsx index 7d79e204..ccb9ed59 100644 --- a/app/javascript/components/Comments/NewCommentUpdateSection.tsx +++ b/app/javascript/components/Comments/NewCommentUpdateSection.tsx @@ -2,6 +2,7 @@ import * as React from 'react'; import I18n from 'i18n-js'; import { MutedText } from '../common/CustomTexts'; +import Switch from '../common/Switch'; interface Props { postUpdateFlagValue: boolean; @@ -13,21 +14,15 @@ const NewCommentUpdateSection = ({ handlePostUpdateFlag, }: Props) => (
-
- -   - -
+ { - postUpdateFlagValue ? + postUpdateFlagValue && {I18n.t('post.new_comment.user_notification')} - : - null }
); diff --git a/app/javascript/components/Post/PostEditForm.tsx b/app/javascript/components/Post/PostEditForm.tsx index 70746821..deb248e6 100644 --- a/app/javascript/components/Post/PostEditForm.tsx +++ b/app/javascript/components/Post/PostEditForm.tsx @@ -8,6 +8,8 @@ import IPostStatus from '../../interfaces/IPostStatus'; import IBoard from '../../interfaces/IBoard'; import Button from '../common/Button'; import Spinner from '../common/Spinner'; +import ActionLink from '../common/ActionLink'; +import { CancelIcon } from '../common/Icons'; interface Props { title: string; @@ -93,9 +95,9 @@ const PostEditForm = ({ />
- - { I18n.t('common.buttons.cancel') } - + }> + {I18n.t('common.buttons.cancel')} +  
- {I18n.t('common.buttons.edit')} + }> + {I18n.t('common.buttons.edit')} + - - - confirm(I18n.t('common.confirmation')) && handleDelete(id)}> + confirm(I18n.t('common.confirmation')) && handleDelete(id)} + icon={} + > {I18n.t('common.buttons.delete')} - +
: @@ -102,11 +107,12 @@ class BoardsEditable extends React.Component { handleUpdate={this.handleUpdate} /> - + } + > {I18n.t('common.buttons.cancel')} - + } diff --git a/app/javascript/components/SiteSettings/Boards/BoardForm.tsx b/app/javascript/components/SiteSettings/Boards/BoardForm.tsx index f5c9bfd7..72c8bbd7 100644 --- a/app/javascript/components/SiteSettings/Boards/BoardForm.tsx +++ b/app/javascript/components/SiteSettings/Boards/BoardForm.tsx @@ -68,6 +68,7 @@ const BoardForm = ({ {...register('name', { required: true })} placeholder={I18n.t('site_settings.boards.form.name')} autoFocus={mode === 'update'} + autoComplete={'off'} className="formControl" /> diff --git a/app/javascript/components/SiteSettings/PostStatuses/PostStatusEditable.tsx b/app/javascript/components/SiteSettings/PostStatuses/PostStatusEditable.tsx index e79a3478..832a3dff 100644 --- a/app/javascript/components/SiteSettings/PostStatuses/PostStatusEditable.tsx +++ b/app/javascript/components/SiteSettings/PostStatuses/PostStatusEditable.tsx @@ -6,6 +6,8 @@ import PostStatusLabel from "../../common/PostStatusLabel"; import DragZone from '../../common/DragZone'; import Separator from '../../common/Separator'; import PostStatusForm from './PostStatusForm'; +import ActionLink from '../../common/ActionLink'; +import { CancelIcon, DeleteIcon, EditIcon } from '../../common/Icons'; interface Props { id: number; @@ -74,13 +76,16 @@ class PostStatusEditable extends React.Component { : @@ -93,11 +98,12 @@ class PostStatusEditable extends React.Component { handleUpdate={this.handleUpdate} /> - + } + > {I18n.t('common.buttons.cancel')} - + } diff --git a/app/javascript/components/SiteSettings/PostStatuses/PostStatusForm.tsx b/app/javascript/components/SiteSettings/PostStatuses/PostStatusForm.tsx index 53a7b717..8e9e8821 100644 --- a/app/javascript/components/SiteSettings/PostStatuses/PostStatusForm.tsx +++ b/app/javascript/components/SiteSettings/PostStatuses/PostStatusForm.tsx @@ -72,6 +72,7 @@ const PostStatusForm = ({ {...register('name', { required: true })} placeholder={I18n.t('site_settings.post_statuses.form.name')} autoFocus={mode === 'update'} + autoComplete={'off'} className="formControl" /> diff --git a/app/javascript/components/SiteSettings/Users/UserEditable.tsx b/app/javascript/components/SiteSettings/Users/UserEditable.tsx index 7a0f3a69..e9948bc2 100644 --- a/app/javascript/components/SiteSettings/Users/UserEditable.tsx +++ b/app/javascript/components/SiteSettings/Users/UserEditable.tsx @@ -6,6 +6,8 @@ import IUser, { UserRoles, USER_ROLE_ADMIN, USER_ROLE_USER, USER_STATUS_ACTIVE, import Separator from "../../common/Separator"; import UserForm from "./UserForm"; import { MutedText } from "../../common/CustomTexts"; +import { BlockIcon, CancelIcon, EditIcon, UnblockIcon } from "../../common/Icons"; +import ActionLink from "../../common/ActionLink"; interface Props { user: IUser; @@ -119,18 +121,18 @@ class UserEditable extends React.Component {
- editEnabled && this.toggleEditMode()} - className={editEnabled ? '' : 'actionDisabled'} + icon={} + disabled={!editEnabled} > { I18n.t('common.buttons.edit') } - + - - - blockEnabled && this._handleUpdateUserStatus()} - className={blockEnabled ? '' : 'actionDisabled'} + icon={user.status !== USER_STATUS_BLOCKED ? : } + disabled={!blockEnabled} > { user.status !== USER_STATUS_BLOCKED ? @@ -138,15 +140,15 @@ class UserEditable extends React.Component { : I18n.t('site_settings.users.unblock') } - +
: <> - - { I18n.t('common.buttons.cancel') } - + }> + {I18n.t('common.buttons.cancel')} + } diff --git a/app/javascript/components/common/ActionLink.tsx b/app/javascript/components/common/ActionLink.tsx new file mode 100644 index 00000000..9f32025b --- /dev/null +++ b/app/javascript/components/common/ActionLink.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; + +interface Props { + onClick: React.MouseEventHandler; + icon?: React.ReactElement; + disabled?: boolean; + customClass?: string; + children: React.ReactNode; +} + +const ActionLink = ({ + onClick, + icon, + disabled = false, + customClass, + children, +}: Props) => ( + + {icon}{children} + +); + +export default ActionLink; \ No newline at end of file diff --git a/app/javascript/components/common/CopyToClipboardButton.tsx b/app/javascript/components/common/CopyToClipboardButton.tsx index cfb98e2d..8108914f 100644 --- a/app/javascript/components/common/CopyToClipboardButton.tsx +++ b/app/javascript/components/common/CopyToClipboardButton.tsx @@ -1,6 +1,8 @@ import * as React from 'react'; import I18n from 'i18n-js'; import { useState } from 'react'; +import ActionLink from './ActionLink'; +import { CopyIcon, DoneIcon } from './Icons'; interface Props { label: string; @@ -20,7 +22,7 @@ const CopyToClipboardButton = ({ return ( ready ? - { if (navigator.clipboard) { navigator.clipboard.writeText(textToCopy).then(() => { @@ -32,11 +34,14 @@ const CopyToClipboardButton = ({ alertError(); } }} + icon={} > {label} - + : - {copiedLabel} + + {copiedLabel} + ); }; diff --git a/app/javascript/components/common/DragZone.tsx b/app/javascript/components/common/DragZone.tsx index 80a5bb64..ec764bf7 100644 --- a/app/javascript/components/common/DragZone.tsx +++ b/app/javascript/components/common/DragZone.tsx @@ -1,11 +1,22 @@ import * as React from 'react'; +import { MdDragIndicator } from 'react-icons/md'; -const DragZone = ({dndProvided, isDragDisabled, color = 'black'}) => ( +interface Props { + dndProvided: any; + isDragDisabled: boolean; + color?: 'black' | 'white'; +} + +const DragZone = ({ + dndProvided, + isDragDisabled, + color = 'black', +}: Props) => ( - + ); diff --git a/app/javascript/components/common/Icons.tsx b/app/javascript/components/common/Icons.tsx new file mode 100644 index 00000000..949fcd45 --- /dev/null +++ b/app/javascript/components/common/Icons.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; + +import { BsReply } from 'react-icons/bs'; +import { FiEdit, FiDelete } from 'react-icons/fi'; +import { ImCancelCircle } from 'react-icons/im'; +import { TbLock, TbLockOpen } from 'react-icons/tb'; +import { MdContentCopy, MdDone, MdOutlineArrowBack } from 'react-icons/md'; +import { GrTest } from 'react-icons/gr'; + +export const EditIcon = () => ; + +export const DeleteIcon = () => ; + +export const CancelIcon = () => ; + +export const BlockIcon = () => ; + +export const UnblockIcon = () => ; + +export const CopyIcon = () => ; + +export const TestIcon = () => ; + +export const DoneIcon = () => ; + +export const BackIcon = () => ; + +export const ReplyIcon = () => ; \ No newline at end of file diff --git a/app/javascript/stylesheets/common/_index.scss b/app/javascript/stylesheets/common/_index.scss index a94855cb..b79ea7b8 100644 --- a/app/javascript/stylesheets/common/_index.scss +++ b/app/javascript/stylesheets/common/_index.scss @@ -187,4 +187,25 @@ .link { cursor: pointer; &:hover { text-decoration: underline; } +} + +.actionLink { + display: flex; + cursor: pointer; + align-self: center; + margin-right: 12px; + + &:hover { text-decoration: underline !important; } + + svg { + margin-right: 4px; + align-self: center; + } + + &.actionLinkDisabled { + color: $astuto-grey !important; + + text-decoration: none !important; + cursor: not-allowed; + } } \ No newline at end of file diff --git a/app/javascript/stylesheets/components/Comments.scss b/app/javascript/stylesheets/components/Comments.scss index 977f3f62..bae13b12 100644 --- a/app/javascript/stylesheets/components/Comments.scss +++ b/app/javascript/stylesheets/components/Comments.scss @@ -1,15 +1,6 @@ .commentsContainer { @extend .my-3; - a.commentLink { - color: $primary-color; - - &:hover { - text-decoration: underline; - cursor: pointer; - } - } - .commentForm { @extend .form-control, @@ -41,7 +32,7 @@ .justify-content-between, .mt-3; - margin-left: 48px; + margin-left: 58px; } .currentUserAvatar { @@ -71,6 +62,8 @@ .d-flex, .justify-content-between; } + + .editCommentFormActions { @extend .d-flex; } } .commentsTitle { @@ -113,7 +106,9 @@ } .commentFooter { - font-size: 14px; + @extend .d-flex; + + font-size: 13px; } } } \ No newline at end of file diff --git a/app/javascript/stylesheets/components/Post.scss b/app/javascript/stylesheets/components/Post.scss index a499bd0d..f40bde7e 100644 --- a/app/javascript/stylesheets/components/Post.scss +++ b/app/javascript/stylesheets/components/Post.scss @@ -141,12 +141,7 @@ .postAuthorAvatar { @extend .gravatar; } } - a { - &:hover { - cursor: pointer; - text-decoration: underline; - } - } + .postFooterActions { @extend .d-flex; } } .postEditForm { @@ -155,14 +150,7 @@ } .postEditFormButtons { - text-align: right; - - a { - &:hover { - cursor: pointer; - text-decoration: underline; - } - } + @extend .d-flex, .justify-content-end; } } } diff --git a/app/javascript/stylesheets/components/Roadmap.scss b/app/javascript/stylesheets/components/Roadmap.scss index babe950f..0d7297d0 100644 --- a/app/javascript/stylesheets/components/Roadmap.scss +++ b/app/javascript/stylesheets/components/Roadmap.scss @@ -25,6 +25,7 @@ .columnTitle { color: white; + text-transform: uppercase; } } diff --git a/app/javascript/stylesheets/components/SiteSettings/Authentication/index.scss b/app/javascript/stylesheets/components/SiteSettings/Authentication/index.scss index d5da13d4..2b28fa0a 100644 --- a/app/javascript/stylesheets/components/SiteSettings/Authentication/index.scss +++ b/app/javascript/stylesheets/components/SiteSettings/Authentication/index.scss @@ -34,11 +34,9 @@ } .oAuthActions { - align-self: center; + @extend .d-flex; - a { - @extend .link; - } + align-self: center; } } } @@ -46,12 +44,8 @@ .authenticationFormPage { a.backButton { - @extend .mb-2; + @extend .mb-2, .align-self-start; font-size: 18px; } - - a.link { - @extend .link; - } } \ No newline at end of file diff --git a/app/javascript/stylesheets/components/SiteSettings/Boards/index.scss b/app/javascript/stylesheets/components/SiteSettings/Boards/index.scss index fba2d238..9278b311 100644 --- a/app/javascript/stylesheets/components/SiteSettings/Boards/index.scss +++ b/app/javascript/stylesheets/components/SiteSettings/Boards/index.scss @@ -13,12 +13,6 @@ column-gap: 32px; - a { - cursor: pointer; - - &:hover { text-decoration: underline; } - } - .boardInfo { @extend .d-flex, @@ -30,8 +24,8 @@ .boardDescription { @extend .text-center; } } - .boardEditableActions, .boardFormCancelButton { - @extend .align-self-center; + .boardEditableActions { + @extend .d-flex, .align-self-center; } } } diff --git a/app/javascript/stylesheets/components/SiteSettings/PostStatuses/index.scss b/app/javascript/stylesheets/components/SiteSettings/PostStatuses/index.scss index ca3d33f7..e2a9a30d 100644 --- a/app/javascript/stylesheets/components/SiteSettings/PostStatuses/index.scss +++ b/app/javascript/stylesheets/components/SiteSettings/PostStatuses/index.scss @@ -11,15 +11,7 @@ .justify-content-between, .p-3; - a { - cursor: pointer; - - &:hover { text-decoration: underline; } - } - - .postStatusFormCancelButton { - align-self: center; - } + .postStatusEditableActions { @extend .d-flex; } } } diff --git a/app/javascript/stylesheets/components/SiteSettings/Roadmap/index.scss b/app/javascript/stylesheets/components/SiteSettings/Roadmap/index.scss index 89235627..5725e949 100644 --- a/app/javascript/stylesheets/components/SiteSettings/Roadmap/index.scss +++ b/app/javascript/stylesheets/components/SiteSettings/Roadmap/index.scss @@ -45,6 +45,7 @@ color: white; padding: 8px 4px; + text-transform: uppercase; .titleText { @extend .align-self-center; } } diff --git a/app/javascript/stylesheets/components/SiteSettings/Users/index.scss b/app/javascript/stylesheets/components/SiteSettings/Users/index.scss index 2b32a60f..39c7b812 100644 --- a/app/javascript/stylesheets/components/SiteSettings/Users/index.scss +++ b/app/javascript/stylesheets/components/SiteSettings/Users/index.scss @@ -30,7 +30,7 @@ ul.usersList { } .userEditableActions { - @extend .align-self-center; + @extend .d-flex, .align-self-center; } .userForm { @@ -41,24 +41,8 @@ ul.usersList { } } - .updateUserButton { @extend .align-self-center; } - - .userEditCancelButton { @extend .align-self-center; } - - a { - cursor: pointer; - - &:hover { text-decoration: underline; } - } - - a.actionDisabled { - @extend .mutedText; - - text-decoration: none; - cursor: not-allowed; - } - .updateUserButton { + @extend .align-self-center; margin-left: 16px; } diff --git a/app/javascript/stylesheets/icons/drag_icon.scss b/app/javascript/stylesheets/icons/drag_icon.scss deleted file mode 100644 index fdb604d4..00000000 --- a/app/javascript/stylesheets/icons/drag_icon.scss +++ /dev/null @@ -1,28 +0,0 @@ -/* Code taken from: https://gist.github.com/JakeSidSmith/83c324dbe7e4d91ee8c52525b1d504d9 */ -/* Thanks JakeSidSmith */ - -span.drag-icon { - display: inline-block; - width: 16px; - height: 8px; -} - -span.drag-icon, -span.drag-icon::before { - background-image: radial-gradient(black 40%, transparent 40%); - background-size: 4px 4px; - background-position: 0 100%; - background-repeat: repeat-x; -} - -span.drag-icon.drag-icon-white, -span.drag-icon.drag-icon-white::before { - background-image: radial-gradient(white 40%, transparent 40%); -} - -span.drag-icon::before { - content: ''; - display: block; - width: 100%; - height: 33%; -} \ No newline at end of file diff --git a/app/javascript/stylesheets/main.scss b/app/javascript/stylesheets/main.scss index 2292f4e4..5ba0dc97 100644 --- a/app/javascript/stylesheets/main.scss +++ b/app/javascript/stylesheets/main.scss @@ -22,7 +22,4 @@ @import 'components/SiteSettings/PostStatuses'; @import 'components/SiteSettings/Roadmap'; @import 'components/SiteSettings/Users'; - @import 'components/SiteSettings/Authentication'; - -/* Icons */ -@import 'icons/drag_icon'; \ No newline at end of file + @import 'components/SiteSettings/Authentication'; \ No newline at end of file diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index f6311f2a..36d14488 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -40,10 +40,9 @@
<%= f.submit t('common.forms.auth.sign_up'), class: "btn btn-dark btn-block" %>
- -
<% if not @o_auths.empty? %> +
<% @o_auths.each do |o_auth| %>

<%= link_to t('common.forms.auth.sign_up_with', { o_auth: o_auth.name }), diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 100d5956..7cf80ce2 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -29,10 +29,9 @@

<%= f.submit t('common.forms.auth.log_in'), class: "btn btn-dark btn-block" %>
- -
<% if not @o_auths.empty? %> +
<% @o_auths.each do |o_auth| %>

<%= link_to t('common.forms.auth.log_in_with', { o_auth: o_auth.name }), diff --git a/config/locales/en.yml b/config/locales/en.yml index 440362bb..465d56bd 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -53,6 +53,7 @@ en: update: 'Save' confirm: 'Confirm' back: 'Back' + test: 'Test' datetime: now: 'just now' minutes: diff --git a/package.json b/package.json index 58ed5560..43e8af14 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "react-dom": "^16.9.0", "react-gravatar": "^2.6.3", "react-hook-form": "7.33.1", + "react-icons": "4.4.0", "react-infinite-scroller": "^1.2.4", "react-markdown": "^5.0.3", "react-redux": "^7.1.1", diff --git a/yarn.lock b/yarn.lock index f3f99f74..3709e58f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6388,6 +6388,11 @@ react-hook-form@7.33.1: resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.33.1.tgz#8c4410e3420788d3b804d62cc4c142915c2e46d0" integrity sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg== +react-icons@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.4.0.tgz#a13a8a20c254854e1ec9aecef28a95cdf24ef703" + integrity sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg== + react-infinite-scroller@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz#f67eaec4940a4ce6417bebdd6e3433bfc38826e9"