diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 64e7dd22b..f424e20b6 100644
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -259,6 +259,9 @@
"groupOthersPromoted": "$name$ and $count$ others were promoted to Admin.",
"inviteFailed": "Invite Failed",
+ "invitePending": "Invite Pending",
+ "promotionFailed": "Promotion Failed",
+ "promotionPending": "Promotion Pending",
"groupInviteFailedOne": "Failed to invite $name$ to $groupname$",
"groupInviteFailedTwo": "Failed to invite $first$ and $second$ to $groupname$",
"groupInviteFailedOthers": "Failed to invite $first$ and $count$ others to $groupname$",
diff --git a/ts/components/MemberListItem.tsx b/ts/components/MemberListItem.tsx
index cda20a20b..5a133da47 100644
--- a/ts/components/MemberListItem.tsx
+++ b/ts/components/MemberListItem.tsx
@@ -1,8 +1,20 @@
import React from 'react';
import styled from 'styled-components';
-import { Avatar, AvatarSize, CrownIcon } from './avatar/Avatar';
+import { GroupPubkeyType, PubkeyType } from 'libsession_util_nodejs';
import { useConversationUsernameOrShorten } from '../hooks/useParamSelector';
+import { PubKey } from '../session/types';
+import { UserUtils } from '../session/utils';
+import { GroupInvite } from '../session/utils/job_runners/jobs/GroupInviteJob';
+import {
+ useMemberInviteFailed,
+ useMemberInvitePending,
+ useMemberPromotionFailed,
+ useMemberPromotionPending,
+} from '../state/selectors/groups';
+import { Avatar, AvatarSize, CrownIcon } from './avatar/Avatar';
+import { Flex } from './basic/Flex';
+import { SessionButton, SessionButtonShape, SessionButtonType } from './basic/SessionButton';
import { SessionRadio } from './basic/SessionRadio';
const AvatarContainer = styled.div`
@@ -55,8 +67,6 @@ const StyledInfo = styled.div`
const StyledName = styled.span`
font-weight: bold;
- margin-inline-start: var(--margins-md);
- margin-inline-end: var(--margins-md);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -67,7 +77,7 @@ const StyledCheckContainer = styled.div`
align-items: center;
`;
-export const MemberListItem = (props: {
+type MemberListItemProps = {
pubkey: string;
isSelected: boolean;
// this bool is used to make a zombie appear with less opacity than a normal member
@@ -78,19 +88,114 @@ export const MemberListItem = (props: {
onSelect?: (pubkey: string) => void;
onUnselect?: (pubkey: string) => void;
dataTestId?: string;
+ displayGroupStatus?: boolean;
+ groupPk?: string;
+};
+
+const ResendInviteContainer = ({
+ displayGroupStatus,
+ groupPk,
+ pubkey,
+}: Pick) => {
+ if (
+ displayGroupStatus &&
+ groupPk &&
+ PubKey.isClosedGroupV2(groupPk) &&
+ PubKey.is05Pubkey(pubkey) &&
+ !UserUtils.isUsFromCache(pubkey)
+ ) {
+ return (
+
+
+
+ );
+ }
+ return null;
+};
+
+const StyledGroupStatusText = styled.span<{ isFailure: boolean }>`
+ color: var(--danger-color);
+ font-size: var(--font-size-xs);
+ margin-top: var(--margins-xs);
+`;
+
+const GroupStatusText = ({ groupPk, pubkey }: { pubkey: PubkeyType; groupPk: GroupPubkeyType }) => {
+ const groupInviteFailed = useMemberInviteFailed(pubkey, groupPk);
+ const groupPromotionFailed = useMemberPromotionFailed(pubkey, groupPk);
+
+ const groupInvitePending = useMemberInvitePending(pubkey, groupPk);
+ const groupPromotionPending = useMemberPromotionPending(pubkey, groupPk);
+
+ const statusText = groupPromotionFailed
+ ? window.i18n('promotionFailed')
+ : groupInviteFailed
+ ? window.i18n('inviteFailed')
+ : groupInvitePending
+ ? window.i18n('invitePending')
+ : groupPromotionPending
+ ? window.i18n('promotionPending')
+ : null;
+
+ if (!statusText) {
+ return null;
+ }
+ return (
+
+ {statusText}
+
+ );
+};
+
+const GroupStatusContainer = ({
+ displayGroupStatus,
+ groupPk,
+ pubkey,
+}: Pick) => {
+ if (
+ displayGroupStatus &&
+ groupPk &&
+ PubKey.isClosedGroupV2(groupPk) &&
+ PubKey.is05Pubkey(pubkey) &&
+ !UserUtils.isUsFromCache(pubkey)
+ ) {
+ return ;
+ }
+ return null;
+};
+
+const ResendInviteButton = ({
+ groupPk,
+ pubkey,
+}: {
+ pubkey: PubkeyType;
+ groupPk: GroupPubkeyType;
}) => {
- const {
- isSelected,
- pubkey,
- isZombie,
- isAdmin,
- onSelect,
- onUnselect,
- inMentions,
- disableBg,
- dataTestId,
- } = props;
+ return (
+ {
+ void GroupInvite.addGroupInviteJob({ groupPk, member: pubkey });
+ }}
+ />
+ );
+};
+export const MemberListItem = ({
+ isSelected,
+ pubkey,
+ dataTestId,
+ disableBg,
+ displayGroupStatus,
+ inMentions,
+ isAdmin,
+ isZombie,
+ onSelect,
+ onUnselect,
+ groupPk,
+}: MemberListItemProps) => {
const memberName = useConversationUsernameOrShorten(pubkey);
return (
@@ -114,9 +219,27 @@ export const MemberListItem = (props: {
>
- {memberName}
+
+ {memberName}
+
+
+
+
{!inMentions && (
diff --git a/ts/components/dialog/UpdateGroupMembersDialog.tsx b/ts/components/dialog/UpdateGroupMembersDialog.tsx
index 6547e8e11..48a91549f 100644
--- a/ts/components/dialog/UpdateGroupMembersDialog.tsx
+++ b/ts/components/dialog/UpdateGroupMembersDialog.tsx
@@ -1,5 +1,5 @@
import _ from 'lodash';
-import React from 'react';
+import React, { useMemo } from 'react';
import { useDispatch } from 'react-redux';
import useKey from 'react-use/lib/useKey';
import styled from 'styled-components';
@@ -25,6 +25,7 @@ import {
import { useSet } from '../../hooks/useSet';
import { ConvoHub } from '../../session/conversations';
import { initiateClosedGroupUpdate } from '../../session/group/closed-group';
+import { useSelectedIsGroupV2 } from '../../state/selectors/selectedConversation';
type Props = {
conversationId: string;
@@ -46,16 +47,19 @@ const ClassicMemberList = (props: {
}) => {
const { onSelect, convoId, onUnselect, selectedMembers } = props;
const weAreAdmin = useWeAreAdmin(convoId);
+ const isV2Group = useSelectedIsGroupV2();
const groupAdmins = useGroupAdmins(convoId);
const groupMembers = useSortedGroupMembers(convoId);
- let currentMembers = groupMembers || [];
- currentMembers = [...currentMembers].sort(m => (groupAdmins?.includes(m) ? -1 : 0));
+ const sortedMembers = useMemo(
+ () => [...groupMembers].sort(m => (groupAdmins?.includes(m) ? -1 : 0)),
+ [groupMembers, groupAdmins]
+ );
return (
<>
- {currentMembers.map(member => {
+ {sortedMembers.map(member => {
const isSelected = (weAreAdmin && selectedMembers.includes(member)) || false;
const isAdmin = groupAdmins?.includes(member);
@@ -68,6 +72,8 @@ const ClassicMemberList = (props: {
key={member}
isAdmin={isAdmin}
disableBg={true}
+ displayGroupStatus={isV2Group && weAreAdmin}
+ groupPk={convoId}
/>
);
})}
diff --git a/ts/node/logging.ts b/ts/node/logging.ts
index f256d4f82..dcfc3ab21 100644
--- a/ts/node/logging.ts
+++ b/ts/node/logging.ts
@@ -1,13 +1,14 @@
// NOTE: Temporarily allow `then` until we convert the entire file to `async` / `await`:
/* eslint-disable more/no-then */
-import path from 'path';
import fs from 'fs';
+import path from 'path';
-import { app, ipcMain as ipc } from 'electron';
import Logger from 'bunyan';
-import _ from 'lodash';
+// eslint-disable-next-line import/order
+import { app, ipcMain as ipc } from 'electron';
import firstline from 'firstline';
+import _ from 'lodash';
import { readLastLinesEnc } from 'read-last-lines-ts';
import rimraf from 'rimraf';
diff --git a/ts/state/selectors/groups.ts b/ts/state/selectors/groups.ts
index 11e6d13f8..fb9e88e8d 100644
--- a/ts/state/selectors/groups.ts
+++ b/ts/state/selectors/groups.ts
@@ -1,5 +1,4 @@
-import { GroupPubkeyType } from 'libsession_util_nodejs';
-import { isEmpty } from 'lodash';
+import { GroupMemberGet, GroupPubkeyType, PubkeyType } from 'libsession_util_nodejs';
import { useSelector } from 'react-redux';
import { PubKey } from '../../session/types';
import { GroupState } from '../ducks/groups';
@@ -7,7 +6,7 @@ import { StateType } from '../reducer';
const getLibGroupsState = (state: StateType): GroupState => state.groups;
-export function getLibMembersPubkeys(state: StateType, convo?: string): Array {
+function getMembersOfGroup(state: StateType, convo?: string): Array {
if (!convo) {
return [];
}
@@ -16,9 +15,15 @@ export function getLibMembersPubkeys(state: StateType, convo?: string): Array, memberPk: string) {
+ return members.find(m => m.pubkeyHex === memberPk);
+}
+
+export function getLibMembersPubkeys(state: StateType, convo?: string): Array {
+ const members = getMembersOfGroup(state, convo);
return members.map(m => m.pubkeyHex);
}
@@ -28,21 +33,36 @@ function getIsCreatingGroupFromUI(state: StateType): boolean {
}
export function getLibAdminsPubkeys(state: StateType, convo?: string): Array {
- if (!convo) {
- return [];
- }
- if (!PubKey.isClosedGroupV2(convo)) {
- return [];
- }
-
- const members = getLibGroupsState(state).members[convo];
- if (isEmpty(members)) {
- return [];
- }
+ const members = getMembersOfGroup(state, convo);
return members.filter(m => m.promoted).map(m => m.pubkeyHex);
}
+function getMemberInviteFailed(state: StateType, pubkey: PubkeyType, convo?: GroupPubkeyType) {
+ const members = getMembersOfGroup(state, convo);
+ return findMemberInMembers(members, pubkey)?.inviteFailed || false;
+}
+
+function getMemberInvitePending(state: StateType, pubkey: PubkeyType, convo?: GroupPubkeyType) {
+ const members = getMembersOfGroup(state, convo);
+ return findMemberInMembers(members, pubkey)?.invitePending || false;
+}
+
+function getMemberIsPromoted(state: StateType, pubkey: PubkeyType, convo?: GroupPubkeyType) {
+ const members = getMembersOfGroup(state, convo);
+ return findMemberInMembers(members, pubkey)?.promoted || false;
+}
+
+function getMemberPromotionFailed(state: StateType, pubkey: PubkeyType, convo?: GroupPubkeyType) {
+ const members = getMembersOfGroup(state, convo);
+ return findMemberInMembers(members, pubkey)?.promotionFailed || false;
+}
+
+function getMemberPromotionPending(state: StateType, pubkey: PubkeyType, convo?: GroupPubkeyType) {
+ const members = getMembersOfGroup(state, convo);
+ return findMemberInMembers(members, pubkey)?.promotionPending || false;
+}
+
export function getLibMembersCount(state: StateType, convo?: GroupPubkeyType): Array {
return getLibMembersPubkeys(state, convo);
}
@@ -89,3 +109,21 @@ export function getLibGroupAdminsOutsideRedux(convoId: string): Array {
export function useIsCreatingGroupFromUIPending() {
return useSelector(getIsCreatingGroupFromUI);
}
+
+export function useMemberInviteFailed(member: PubkeyType, groupPk: GroupPubkeyType) {
+ return useSelector((state: StateType) => getMemberInviteFailed(state, member, groupPk));
+}
+
+export function useMemberInvitePending(member: PubkeyType, groupPk: GroupPubkeyType) {
+ return useSelector((state: StateType) => getMemberInvitePending(state, member, groupPk));
+}
+export function useMemberIsPromoted(member: PubkeyType, groupPk: GroupPubkeyType) {
+ return useSelector((state: StateType) => getMemberIsPromoted(state, member, groupPk));
+}
+
+export function useMemberPromotionFailed(member: PubkeyType, groupPk: GroupPubkeyType) {
+ return useSelector((state: StateType) => getMemberPromotionFailed(state, member, groupPk));
+}
+export function useMemberPromotionPending(member: PubkeyType, groupPk: GroupPubkeyType) {
+ return useSelector((state: StateType) => getMemberPromotionPending(state, member, groupPk));
+}
diff --git a/ts/types/LocalizerKeys.ts b/ts/types/LocalizerKeys.ts
index 17c81014f..14fa5beba 100644
--- a/ts/types/LocalizerKeys.ts
+++ b/ts/types/LocalizerKeys.ts
@@ -234,6 +234,7 @@ export type LocalizerKeys =
| 'invalidSessionId'
| 'inviteContacts'
| 'inviteFailed'
+ | 'invitePending'
| 'join'
| 'joinACommunity'
| 'joinOpenGroup'
@@ -363,6 +364,8 @@ export type LocalizerKeys =
| 'primaryColorRed'
| 'primaryColorYellow'
| 'privacySettingsTitle'
+ | 'promotionFailed'
+ | 'promotionPending'
| 'pruneSettingDescription'
| 'pruneSettingTitle'
| 'publicChatExists'
diff --git a/yarn.lock b/yarn.lock
index ae1a8c628..f9c7f8bea 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -12,20 +12,27 @@
resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
+"@babel/code-frame@^7.0.0":
+ version "7.22.13"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
+ integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
+ dependencies:
+ "@babel/highlight" "^7.22.13"
+ chalk "^2.4.2"
+
"@babel/code-frame@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
dependencies:
- "@babel/highlight" "^7.22.10"
- chalk "^2.4.2"
+ "@babel/highlight" "^7.22.5"
"@babel/generator@^7.22.7":
- version "7.22.9"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d"
- integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
+ integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
dependencies:
- "@babel/types" "^7.22.5"
+ "@babel/types" "^7.23.0"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
@@ -81,25 +88,35 @@
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+"@babel/helper-validator-identifier@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
"@babel/helper-validator-identifier@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
-"@babel/highlight@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
- integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
+"@babel/highlight@^7.22.13", "@babel/highlight@^7.22.5":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54"
+ integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==
dependencies:
- "@babel/helper-validator-identifier" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.20"
chalk "^2.4.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.20.15", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7":
+"@babel/parser@^7.20.15", "@babel/parser@^7.22.5":
version "7.22.7"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae"
integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==
+"@babel/parser@^7.22.7":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
+ integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
+
"@babel/plugin-syntax-jsx@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918"
@@ -135,18 +152,18 @@
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e"
integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==
dependencies:
- "@babel/code-frame" "^7.22.10"
- "@babel/generator" "^7.22.10"
+ "@babel/code-frame" "^7.22.5"
+ "@babel/generator" "^7.22.7"
"@babel/helper-environment-visitor" "^7.22.5"
"@babel/helper-function-name" "^7.22.5"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.22.10"
- "@babel/types" "^7.22.10"
+ "@babel/parser" "^7.22.7"
+ "@babel/types" "^7.22.5"
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.22.10", "@babel/types@^7.22.5":
+"@babel/types@^7.22.5":
version "7.22.10"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03"
integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==
@@ -155,6 +172,15 @@
"@babel/helper-validator-identifier" "^7.22.5"
to-fast-properties "^2.0.0"
+"@babel/types@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
+ integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
"@commitlint/cli@^17.7.1":
version "17.7.1"
resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.7.1.tgz#f3ab35bd38d82fcd4ab03ec5a1e9db26d57fe1b0"
@@ -1039,21 +1065,21 @@
"@types/prop-types" "*"
"@types/react" "*"
-"@types/react@*", "@types/react@^17", "@types/react@^17.0.2":
- version "17.0.62"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.62.tgz#2efe8ddf8533500ec44b1334dd1a97caa2f860e3"
- integrity sha512-eANCyz9DG8p/Vdhr0ZKST8JV12PhH2ACCDYlFw6DIO+D+ca+uP4jtEDEpVqXZrh/uZdXQGwk7whJa3ah5DtyLw==
+"@types/react@*", "@types/react@17.0.2", "@types/react@^17":
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.2.tgz#3de24c4efef902dd9795a49c75f760cbe4f7a5a8"
+ integrity sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==
dependencies:
"@types/prop-types" "*"
- "@types/scheduler" "*"
csstype "^3.0.2"
-"@types/react@17.0.2":
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.2.tgz#3de24c4efef902dd9795a49c75f760cbe4f7a5a8"
- integrity sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==
+"@types/react@^17.0.2":
+ version "17.0.62"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.62.tgz#2efe8ddf8533500ec44b1334dd1a97caa2f860e3"
+ integrity sha512-eANCyz9DG8p/Vdhr0ZKST8JV12PhH2ACCDYlFw6DIO+D+ca+uP4jtEDEpVqXZrh/uZdXQGwk7whJa3ah5DtyLw==
dependencies:
"@types/prop-types" "*"
+ "@types/scheduler" "*"
csstype "^3.0.2"
"@types/redux-logger@3.0.7":
@@ -1549,6 +1575,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
dependencies:
color-convert "^2.0.1"
+ansi-styles@^6.0.0, ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
@@ -2403,6 +2434,14 @@ commander@^5.0.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+compare-func@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
+ integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
+ dependencies:
+ array-ify "^1.0.0"
+ dot-prop "^5.1.0"
+
compare-version@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080"
@@ -2443,6 +2482,30 @@ console-control-strings@^1.1.0:
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
+conventional-changelog-angular@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541"
+ integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==
+ dependencies:
+ compare-func "^2.0.0"
+
+conventional-changelog-conventionalcommits@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz#3bad05f4eea64e423d3d90fc50c17d2c8cf17652"
+ integrity sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==
+ dependencies:
+ compare-func "^2.0.0"
+
+conventional-commits-parser@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505"
+ integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==
+ dependencies:
+ JSONStream "^1.3.5"
+ is-text-path "^1.0.1"
+ meow "^8.1.2"
+ split2 "^3.2.2"
+
copy-to-clipboard@^3.3.1:
version "3.3.3"
resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0"
@@ -3392,6 +3455,21 @@ execa@^4.0.0:
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"
+execa@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+ integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^6.0.0"
+ human-signals "^2.1.0"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.1"
+ onetime "^5.1.2"
+ signal-exit "^3.0.3"
+ strip-final-newline "^2.0.0"
+
extract-zip@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
@@ -6694,6 +6772,14 @@ slice-ansi@^3.0.0:
astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0"
+slice-ansi@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
+ integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
+ dependencies:
+ ansi-styles "^6.0.0"
+ is-fullwidth-code-point "^4.0.0"
+
smart-buffer@^4.0.2:
version "4.2.0"
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
@@ -7775,6 +7861,11 @@ yauzl@^2.10.0:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
+yn@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+ integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
+
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"