Conversation details: Unblock option for groups, update unblock style
This commit is contained in:
parent
68f27c1c7c
commit
71d6a1d383
5 changed files with 101 additions and 6 deletions
|
@ -5742,6 +5742,10 @@
|
||||||
"message": "Block group",
|
"message": "Block group",
|
||||||
"description": "This is a button to block a group"
|
"description": "This is a button to block a group"
|
||||||
},
|
},
|
||||||
|
"ConversationDetailsActions--unblock-group": {
|
||||||
|
"message": "Unblock group",
|
||||||
|
"description": "This is a button to unblock a group"
|
||||||
|
},
|
||||||
"ConversationDetailsActions--leave-group-must-choose-new-admin": {
|
"ConversationDetailsActions--leave-group-must-choose-new-admin": {
|
||||||
"message": "Before you leave, you must choose at least one new admin for this group.",
|
"message": "Before you leave, you must choose at least one new admin for this group.",
|
||||||
"description": "Shown if, before leaving a group, you need to choose an admin"
|
"description": "Shown if, before leaving a group, you need to choose an admin"
|
||||||
|
@ -5758,6 +5762,16 @@
|
||||||
"message": "Leave",
|
"message": "Leave",
|
||||||
"description": "This is the modal button to confirm leaving a group"
|
"description": "This is the modal button to confirm leaving a group"
|
||||||
},
|
},
|
||||||
|
"ConversationDetailsActions--unblock-group-modal-title": {
|
||||||
|
"message": "Unblock the \"$groupName$\" Group?",
|
||||||
|
"description": "This is the modal title for confirming unblock of a group",
|
||||||
|
"placeholders": {
|
||||||
|
"groupName": {
|
||||||
|
"content": "$1",
|
||||||
|
"example": "Our Conversation"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"ConversationDetailsActions--block-group-modal-title": {
|
"ConversationDetailsActions--block-group-modal-title": {
|
||||||
"message": "Block and Leave the \"$groupName$\" Group?",
|
"message": "Block and Leave the \"$groupName$\" Group?",
|
||||||
"description": "This is the modal title for confirming blocking a group",
|
"description": "This is the modal title for confirming blocking a group",
|
||||||
|
@ -5776,6 +5790,14 @@
|
||||||
"message": "Block",
|
"message": "Block",
|
||||||
"description": "This is the modal button to confirm blocking a group"
|
"description": "This is the modal button to confirm blocking a group"
|
||||||
},
|
},
|
||||||
|
"ConversationDetailsActions--unblock-group-modal-content": {
|
||||||
|
"message": "Your contacts will be able add you to this group.",
|
||||||
|
"description": "This is the modal content for confirming unblock of a group"
|
||||||
|
},
|
||||||
|
"ConversationDetailsActions--unblock-group-modal-confirm": {
|
||||||
|
"message": "Unblock",
|
||||||
|
"description": "This is the modal button to confirm unblock of a group"
|
||||||
|
},
|
||||||
"ConversationDetailsHeader--members": {
|
"ConversationDetailsHeader--members": {
|
||||||
"message": "$number$ members",
|
"message": "$number$ members",
|
||||||
"description": "This is the number of members in a group",
|
"description": "This is the number of members in a group",
|
||||||
|
|
|
@ -123,6 +123,9 @@
|
||||||
&__block-group {
|
&__block-group {
|
||||||
color: $color-accent-red;
|
color: $color-accent-red;
|
||||||
}
|
}
|
||||||
|
&__unblock-group {
|
||||||
|
color: $color-accent-blue;
|
||||||
|
}
|
||||||
|
|
||||||
&__tabs {
|
&__tabs {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -414,6 +417,12 @@
|
||||||
background-color: $color-accent-red;
|
background-color: $color-accent-red;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&--unblock {
|
||||||
|
&::after {
|
||||||
|
-webkit-mask: url(../images/icons/v2/block-24.svg) no-repeat center;
|
||||||
|
background-color: $color-accent-blue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&--verify {
|
&--verify {
|
||||||
&::after {
|
&::after {
|
||||||
|
|
|
@ -30,7 +30,7 @@ const createProps = (overrideProps: Partial<Props> = {}): Props => ({
|
||||||
onLeave: action('onLeave'),
|
onLeave: action('onLeave'),
|
||||||
onUnblock: action('onUnblock'),
|
onUnblock: action('onUnblock'),
|
||||||
i18n,
|
i18n,
|
||||||
isBlocked: false,
|
isBlocked: isBoolean(overrideProps.isBlocked),
|
||||||
isGroup: true,
|
isGroup: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -50,6 +50,20 @@ LeftTheGroup.story = {
|
||||||
name: 'Left the group',
|
name: 'Left the group',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const BlockedAndLeftTheGroup = (): JSX.Element => {
|
||||||
|
const props = createProps({
|
||||||
|
left: true,
|
||||||
|
isBlocked: true,
|
||||||
|
conversationTitle: '😸 Cat Snaps',
|
||||||
|
});
|
||||||
|
|
||||||
|
return <ConversationDetailsActions {...props} />;
|
||||||
|
};
|
||||||
|
|
||||||
|
BlockedAndLeftTheGroup.story = {
|
||||||
|
name: 'Blocked and left the group',
|
||||||
|
};
|
||||||
|
|
||||||
export const CannotLeaveBecauseYouAreTheLastAdmin = (): JSX.Element => {
|
export const CannotLeaveBecauseYouAreTheLastAdmin = (): JSX.Element => {
|
||||||
const props = createProps({ cannotLeaveBecauseYouAreLastAdmin: true });
|
const props = createProps({ cannotLeaveBecauseYouAreLastAdmin: true });
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ export const ConversationDetailsActions: React.ComponentType<Props> = ({
|
||||||
}) => {
|
}) => {
|
||||||
const [confirmLeave, gLeave] = useState<boolean>(false);
|
const [confirmLeave, gLeave] = useState<boolean>(false);
|
||||||
const [confirmGroupBlock, gGroupBlock] = useState<boolean>(false);
|
const [confirmGroupBlock, gGroupBlock] = useState<boolean>(false);
|
||||||
|
const [confirmGroupUnblock, gGroupUnblock] = useState<boolean>(false);
|
||||||
const [confirmDirectBlock, gDirectBlock] = useState<boolean>(false);
|
const [confirmDirectBlock, gDirectBlock] = useState<boolean>(false);
|
||||||
const [confirmDirectUnblock, gDirectUnblock] = useState<boolean>(false);
|
const [confirmDirectUnblock, gDirectUnblock] = useState<boolean>(false);
|
||||||
|
|
||||||
|
@ -82,7 +83,7 @@ export const ConversationDetailsActions: React.ComponentType<Props> = ({
|
||||||
}
|
}
|
||||||
|
|
||||||
let blockNode: ReactNode;
|
let blockNode: ReactNode;
|
||||||
if (isGroup) {
|
if (isGroup && !isBlocked) {
|
||||||
blockNode = (
|
blockNode = (
|
||||||
<PanelRow
|
<PanelRow
|
||||||
disabled={cannotLeaveBecauseYouAreLastAdmin}
|
disabled={cannotLeaveBecauseYouAreLastAdmin}
|
||||||
|
@ -100,6 +101,23 @@ export const ConversationDetailsActions: React.ComponentType<Props> = ({
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
} else if (isGroup && isBlocked) {
|
||||||
|
blockNode = (
|
||||||
|
<PanelRow
|
||||||
|
onClick={() => gGroupUnblock(true)}
|
||||||
|
icon={
|
||||||
|
<ConversationDetailsIcon
|
||||||
|
ariaLabel={i18n('ConversationDetailsActions--unblock-group')}
|
||||||
|
icon={IconType.unblock}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
label={
|
||||||
|
<div className="ConversationDetails__unblock-group">
|
||||||
|
{i18n('ConversationDetailsActions--unblock-group')}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
const label = isBlocked
|
const label = isBlocked
|
||||||
? i18n('MessageRequests--unblock')
|
? i18n('MessageRequests--unblock')
|
||||||
|
@ -108,9 +126,22 @@ export const ConversationDetailsActions: React.ComponentType<Props> = ({
|
||||||
<PanelRow
|
<PanelRow
|
||||||
onClick={() => (isBlocked ? gDirectUnblock(true) : gDirectBlock(true))}
|
onClick={() => (isBlocked ? gDirectUnblock(true) : gDirectBlock(true))}
|
||||||
icon={
|
icon={
|
||||||
<ConversationDetailsIcon ariaLabel={label} icon={IconType.block} />
|
<ConversationDetailsIcon
|
||||||
|
ariaLabel={label}
|
||||||
|
icon={isBlocked ? IconType.unblock : IconType.block}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
label={
|
||||||
|
<div
|
||||||
|
className={
|
||||||
|
isBlocked
|
||||||
|
? 'ConversationDetails__unblock-group'
|
||||||
|
: 'ConversationDetails__block-group'
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{label}
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
label={<div className="ConversationDetails__block-group">{label}</div>}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -134,7 +165,6 @@ export const ConversationDetailsActions: React.ComponentType<Props> = ({
|
||||||
{leaveGroupNode}
|
{leaveGroupNode}
|
||||||
{blockNode}
|
{blockNode}
|
||||||
</PanelSection>
|
</PanelSection>
|
||||||
|
|
||||||
{confirmLeave && (
|
{confirmLeave && (
|
||||||
<ConfirmationDialog
|
<ConfirmationDialog
|
||||||
actions={[
|
actions={[
|
||||||
|
@ -174,6 +204,26 @@ export const ConversationDetailsActions: React.ComponentType<Props> = ({
|
||||||
{i18n('ConversationDetailsActions--block-group-modal-content')}
|
{i18n('ConversationDetailsActions--block-group-modal-content')}
|
||||||
</ConfirmationDialog>
|
</ConfirmationDialog>
|
||||||
)}
|
)}
|
||||||
|
{confirmGroupUnblock && (
|
||||||
|
<ConfirmationDialog
|
||||||
|
actions={[
|
||||||
|
{
|
||||||
|
text: i18n(
|
||||||
|
'ConversationDetailsActions--unblock-group-modal-confirm'
|
||||||
|
),
|
||||||
|
action: onUnblock,
|
||||||
|
style: 'affirmative',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
i18n={i18n}
|
||||||
|
onClose={() => gGroupUnblock(false)}
|
||||||
|
title={i18n('ConversationDetailsActions--unblock-group-modal-title', [
|
||||||
|
conversationTitle,
|
||||||
|
])}
|
||||||
|
>
|
||||||
|
{i18n('ConversationDetailsActions--unblock-group-modal-content')}
|
||||||
|
</ConfirmationDialog>
|
||||||
|
)}
|
||||||
|
|
||||||
{confirmDirectBlock && (
|
{confirmDirectBlock && (
|
||||||
<ConfirmationDialog
|
<ConfirmationDialog
|
||||||
|
@ -193,7 +243,6 @@ export const ConversationDetailsActions: React.ComponentType<Props> = ({
|
||||||
{i18n('MessageRequests--block-direct-confirm-body')}
|
{i18n('MessageRequests--block-direct-confirm-body')}
|
||||||
</ConfirmationDialog>
|
</ConfirmationDialog>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{confirmDirectUnblock && (
|
{confirmDirectUnblock && (
|
||||||
<ConfirmationDialog
|
<ConfirmationDialog
|
||||||
actions={[
|
actions={[
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { bemGenerator } from './util';
|
||||||
|
|
||||||
export enum IconType {
|
export enum IconType {
|
||||||
'block' = 'block',
|
'block' = 'block',
|
||||||
|
'unblock' = 'unblock',
|
||||||
'color' = 'color',
|
'color' = 'color',
|
||||||
'down' = 'down',
|
'down' = 'down',
|
||||||
'invites' = 'invites',
|
'invites' = 'invites',
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue