diff --git a/src/page/template/modal/user-modal.htm b/src/page/template/modal/user-modal.htm
index ef11362fbef..7afa3e5b51c 100644
--- a/src/page/template/modal/user-modal.htm
+++ b/src/page/template/modal/user-modal.htm
@@ -9,7 +9,7 @@
diff --git a/src/page/template/panel/group-participant-user.htm b/src/page/template/panel/group-participant-user.htm
index af26744ac4d..44a79c8b460 100644
--- a/src/page/template/panel/group-participant-user.htm
+++ b/src/page/template/panel/group-participant-user.htm
@@ -16,7 +16,7 @@
-
+
diff --git a/src/script/components/panel/userActions.js b/src/script/components/panel/userActions.js
index eaaeeab690d..cc7ba738b25 100644
--- a/src/script/components/panel/userActions.js
+++ b/src/script/components/panel/userActions.js
@@ -37,17 +37,15 @@ export const Actions = {
ko.components.register('user-actions', {
template: '',
- viewModel: function({user, conversation, actionsViewModel, onAction = () => {}, isSelfActivated}) {
- user = ko.unwrap(user);
- conversation = ko.unwrap(conversation);
+ viewModel: function({user, conversation = () => false, actionsViewModel, onAction = () => {}, isSelfActivated}) {
isSelfActivated = ko.unwrap(isSelfActivated);
- const isMe = user.is_me;
- const isNotMe = !isMe && isSelfActivated;
+ const isMe = ko.computed(() => user().is_me);
+ const isNotMe = ko.computed(() => !isMe() && isSelfActivated);
const allItems = [
{
// open self profile
- condition: () => isMe,
+ condition: () => isMe(),
item: {
click: () => {
amplify.publish(z.event.WebApp.PREFERENCES.MANAGE_ACCOUNT);
@@ -62,15 +60,15 @@ ko.components.register('user-actions', {
// self leave conversation
condition: () => {
return (
- isMe &&
+ isMe() &&
isSelfActivated &&
- conversation &&
- conversation.isGroup() &&
- !conversation.removed_from_conversation()
+ conversation() &&
+ conversation().isGroup() &&
+ !conversation().removed_from_conversation()
);
},
item: {
- click: () => actionsViewModel.leaveConversation(conversation).then(() => onAction(Actions.LEAVE)),
+ click: () => actionsViewModel.leaveConversation(conversation()).then(() => onAction(Actions.LEAVE)),
icon: 'leave-icon',
identifier: 'do-leave',
label: t('groupParticipantActionLeave'),
@@ -78,9 +76,9 @@ ko.components.register('user-actions', {
},
{
// open conversation
- condition: () => isNotMe && (user.isConnected() || user.isTeamMember()),
+ condition: () => isNotMe() && (user().isConnected() || user().isTeamMember()),
item: {
- click: () => actionsViewModel.open1to1Conversation(user).then(() => onAction(Actions.OPEN_CONVERSATION)),
+ click: () => actionsViewModel.open1to1Conversation(user()).then(() => onAction(Actions.OPEN_CONVERSATION)),
icon: 'message-icon',
identifier: 'go-conversation',
label: t('groupParticipantActionOpenConversation'),
@@ -88,7 +86,7 @@ ko.components.register('user-actions', {
},
{
// accept request
- condition: () => isNotMe && user.isIncomingRequest(),
+ condition: () => isNotMe() && user().isIncomingRequest(),
item: {
click: () =>
actionsViewModel.acceptConnectionRequest(user, true).then(() => onAction(Actions.ACCEPT_REQUEST)),
@@ -99,9 +97,9 @@ ko.components.register('user-actions', {
},
{
//ignore request
- condition: () => isNotMe && user.isIncomingRequest(),
+ condition: () => isNotMe() && user().isIncomingRequest(),
item: {
- click: () => actionsViewModel.ignoreConnectionRequest(user).then(() => onAction(Actions.IGNORE_REQUEST)),
+ click: () => actionsViewModel.ignoreConnectionRequest(user()).then(() => onAction(Actions.IGNORE_REQUEST)),
icon: 'close-icon',
identifier: 'do-ignore-request',
label: t('groupParticipantActionIgnoreRequest'),
@@ -109,9 +107,9 @@ ko.components.register('user-actions', {
},
{
// cancel request
- condition: () => isNotMe && user.isOutgoingRequest(),
+ condition: () => isNotMe() && user().isOutgoingRequest(),
item: {
- click: () => actionsViewModel.cancelConnectionRequest(user).then(() => onAction(Actions.CANCEL_REQUEST)),
+ click: () => actionsViewModel.cancelConnectionRequest(user()).then(() => onAction(Actions.CANCEL_REQUEST)),
icon: 'undo-icon',
identifier: 'do-cancel-request',
label: t('groupParticipantActionCancelRequest'),
@@ -120,12 +118,12 @@ ko.components.register('user-actions', {
{
// send request
condition: () => {
- const isNotConnectedUser = user.isCanceled() || user.isUnknown();
- const canConnect = !user.isTeamMember() && !user.isTemporaryGuest();
- return isNotMe && isNotConnectedUser && canConnect;
+ const isNotConnectedUser = user().isCanceled() || user().isUnknown();
+ const canConnect = !user().isTeamMember() && !user().isTemporaryGuest();
+ return isNotMe() && isNotConnectedUser && canConnect;
},
item: {
- click: () => actionsViewModel.sendConnectionRequest(user).then(() => onAction(Actions.SEND_REQUEST)),
+ click: () => actionsViewModel.sendConnectionRequest(user()).then(() => onAction(Actions.SEND_REQUEST)),
icon: 'plus-icon',
identifier: 'do-send-request',
label: t('groupParticipantActionSendRequest'),
@@ -133,9 +131,9 @@ ko.components.register('user-actions', {
},
{
// block user
- condition: () => isNotMe && (user.isConnected() || user.isRequest()),
+ condition: () => isNotMe() && (user().isConnected() || user().isRequest()),
item: {
- click: () => actionsViewModel.blockUser(user).then(() => onAction(Actions.BLOCK)),
+ click: () => actionsViewModel.blockUser(user()).then(() => onAction(Actions.BLOCK)),
icon: 'block-icon',
identifier: 'do-block',
label: t('groupParticipantActionBlock'),
@@ -143,9 +141,9 @@ ko.components.register('user-actions', {
},
{
// unblock user
- condition: () => isNotMe && user.isBlocked(),
+ condition: () => isNotMe() && user().isBlocked(),
item: {
- click: () => actionsViewModel.unblockUser(user).then(() => onAction(Actions.UNBLOCK)),
+ click: () => actionsViewModel.unblockUser(user()).then(() => onAction(Actions.UNBLOCK)),
icon: 'block-icon',
identifier: 'do-unblock',
label: t('groupParticipantActionUnblock'),
@@ -155,15 +153,18 @@ ko.components.register('user-actions', {
// remove user from conversation
condition: () => {
return (
- isNotMe &&
- conversation &&
- conversation.isActiveParticipant() &&
- conversation.participating_user_ids().some(id => user.id === id) &&
+ isNotMe() &&
+ conversation() &&
+ conversation().isActiveParticipant() &&
+ conversation()
+ .participating_user_ids()
+ .some(id => user().id === id) &&
z.userPermission().canUpdateGroupParticipants()
);
},
item: {
- click: () => actionsViewModel.removeFromConversation(conversation, user).then(() => onAction(Actions.REMOVE)),
+ click: () =>
+ actionsViewModel.removeFromConversation(conversation(), user()).then(() => onAction(Actions.REMOVE)),
icon: 'minus-icon',
identifier: 'do-remove',
label: t('groupParticipantActionRemove'),
@@ -171,6 +172,6 @@ ko.components.register('user-actions', {
},
];
- this.items = ko.computed(() => (user ? allItems.filter(({condition}) => condition()).map(({item}) => item) : []));
+ this.items = ko.computed(() => (user() ? allItems.filter(({condition}) => condition()).map(({item}) => item) : []));
},
});
diff --git a/test/unit_tests/components/panel/userActionsSpec.js b/test/unit_tests/components/panel/userActionsSpec.js
index a380602d670..08f4cc55fa7 100644
--- a/test/unit_tests/components/panel/userActionsSpec.js
+++ b/test/unit_tests/components/panel/userActionsSpec.js
@@ -36,7 +36,7 @@ describe('user-actions', () => {
const conversation = new Conversation();
spyOn(conversation, 'isGroup').and.returnValue(true);
- return {conversation, isSelfActivated: true, user};
+ return {conversation: () => conversation, isSelfActivated: true, user: () => user};
},
testName: 'generates actions for self user profile',
},
@@ -46,7 +46,7 @@ describe('user-actions', () => {
const user = new User();
user.is_me = true;
const conversation = new Conversation();
- return {conversation: conversation, isSelfActivated: false, user};
+ return {conversation: () => conversation, isSelfActivated: false, user: () => user};
},
testName: 'generates actions for self user profile when user is not activated',
},
@@ -57,7 +57,7 @@ describe('user-actions', () => {
const conversation = new Conversation();
user.connection().status(z.connection.ConnectionStatus.ACCEPTED);
spyOn(conversation, 'isGroup').and.returnValue(true);
- return {conversation, isSelfActivated: true, user};
+ return {conversation: () => conversation, isSelfActivated: true, user: () => user};
},
testName: 'generates actions for another user profile to which I am connected',
},