From 4803eb872ccf429ec10b6fda9cb613c45795cb61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Iv=C3=A1n=20Vieitez=20Parra?= <3857362+corrideat@users.noreply.github.com> Date: Tue, 14 Jan 2025 16:37:29 +0000 Subject: [PATCH] Bugfixes from feedback --- frontend/controller/actions/group.js | 35 +-------------- frontend/controller/app/group.js | 43 +++++++++++++++++++ frontend/model/contracts/group.js | 9 ---- .../notifications/messageReceivePostEffect.js | 2 + frontend/model/notifications/templates.js | 8 ++-- 5 files changed, 50 insertions(+), 47 deletions(-) diff --git a/frontend/controller/actions/group.js b/frontend/controller/actions/group.js index 2def6073b..80bf3338f 100644 --- a/frontend/controller/actions/group.js +++ b/frontend/controller/actions/group.js @@ -31,9 +31,7 @@ import { JOINED_GROUP, JOINED_CHATROOM, LEFT_GROUP, - LOGOUT, - OPEN_MODAL, - REPLACE_MODAL + LOGOUT } from '@utils/events.js' import { imageUpload } from '@utils/image.js' import { GIMessage } from '~/shared/domains/chelonia/GIMessage.js' @@ -945,37 +943,6 @@ export default (sbp('sbp/selectors/register', { }) } }), - 'gi.actions/group/displayMincomeChangedPrompt': async function ({ data }: GIActionParams) { - const { withGroupCurrency } = sbp('state/vuex/getters') - const promptOptions = data.increased - ? { - heading: L('Mincome changed'), - question: L('Do you make at least {amount} per month?', { amount: withGroupCurrency(data.amount) }), - primaryButton: data.memberType === 'pledging' ? L('No') : L('Yes'), - secondaryButton: data.memberType === 'pledging' ? L('Yes') : L('No') - } - : { - heading: L('Automatically switched to pledging {zero}', { zero: withGroupCurrency(0) }), - question: L('You now make more than the mincome. Would you like to increase your pledge?'), - primaryButton: L('Yes'), - secondaryButton: L('No') - } - - const primaryButtonSelected = await sbp('gi.ui/prompt', promptOptions) - if (primaryButtonSelected) { - // NOTE: emtting 'REPLACE_MODAL' instead of 'OPEN_MODAL' here because 'Prompt' modal is open at this point (by 'gi.ui/prompt' action above). - sbp('okTurtles.events/emit', REPLACE_MODAL, 'IncomeDetails') - } - }, - 'gi.actions/group/checkAndSeeProposal': function ({ data }: GIActionParams) { - const openProposalIds = Object.keys(sbp('state/vuex/getters').currentGroupState.proposals || {}) - - if (openProposalIds.includes(data.proposalHash)) { - sbp('controller/router').push({ path: '/dashboard#proposals' }) - } else { - sbp('okTurtles.events/emit', OPEN_MODAL, 'PropositionsAllModal', { targetProposal: data.proposalHash }) - } - }, 'gi.actions/group/fixAnyoneCanJoinLink': function ({ contractID }) { // Queue ensures that the update happens as atomically as possible return sbp('chelonia/queueInvocation', `${contractID}-FIX-ANYONE-CAN-JOIN`, async () => { diff --git a/frontend/controller/app/group.js b/frontend/controller/app/group.js index 42ee014c0..94a470aff 100644 --- a/frontend/controller/app/group.js +++ b/frontend/controller/app/group.js @@ -119,5 +119,48 @@ export default (sbp('sbp/selectors/register', { } else { sbp('okTurtles.events/emit', OPEN_MODAL, 'AddMembers') } + }, + 'gi.app/group/checkAndSeeProposal': function ({ contractID, data }: GIActionParams) { + const rootGetters = sbp('state/vuex/getters') + const rootState = sbp('state/vuex/state') + if (rootState.currentGroupId !== contractID) { + sbp('state/vuex/commit', 'setCurrentGroupId', { contractID }) + } + + const openProposalIds = Object.keys(rootGetters.currentGroupState.proposals || {}) + + if (openProposalIds.includes(data.proposalHash)) { + sbp('controller/router').push({ path: '/dashboard#proposals' }) + } else { + sbp('okTurtles.events/emit', OPEN_MODAL, 'PropositionsAllModal', { targetProposal: data.proposalHash }) + } + }, + 'gi.app/group/displayMincomeChangedPrompt': async function ({ contractID, data }: GIActionParams) { + const rootGetters = sbp('state/vuex/getters') + const rootState = sbp('state/vuex/state') + if (rootState.currentGroupId !== contractID) { + sbp('state/vuex/commit', 'setCurrentGroupId', { contractID }) + } + + const { withGroupCurrency } = rootGetters + const promptOptions = data.increased + ? { + heading: L('Mincome changed'), + question: L('Do you make at least {amount} per month?', { amount: withGroupCurrency(data.amount) }), + primaryButton: data.memberType === 'pledging' ? L('No') : L('Yes'), + secondaryButton: data.memberType === 'pledging' ? L('Yes') : L('No') + } + : { + heading: L('Automatically switched to pledging {zero}', { zero: withGroupCurrency(0) }), + question: L('You now make more than the mincome. Would you like to increase your pledge?'), + primaryButton: L('Yes'), + secondaryButton: L('No') + } + + const primaryButtonSelected = await sbp('gi.ui/prompt', promptOptions) + if (primaryButtonSelected) { + // NOTE: emtting 'REPLACE_MODAL' instead of 'OPEN_MODAL' here because 'Prompt' modal is open at this point (by 'gi.ui/prompt' action above). + sbp('okTurtles.events/emit', REPLACE_MODAL, 'IncomeDetails') + } } }): string[]) diff --git a/frontend/model/contracts/group.js b/frontend/model/contracts/group.js index dd9b52507..cd8d8dfbc 100644 --- a/frontend/model/contracts/group.js +++ b/frontend/model/contracts/group.js @@ -1582,15 +1582,6 @@ sbp('chelonia/defineContract', { pledgeAmount: 0 } }) - - await sbp('gi.actions/group/displayMincomeChangedPrompt', { - contractID, - data: { - amount: toAmount, - memberType, - increased: mincomeIncreased - } - }) } sbp('gi.notifications/emit', 'MINCOME_CHANGED', { diff --git a/frontend/model/notifications/messageReceivePostEffect.js b/frontend/model/notifications/messageReceivePostEffect.js index d128128c7..8eed33e0b 100644 --- a/frontend/model/notifications/messageReceivePostEffect.js +++ b/frontend/model/notifications/messageReceivePostEffect.js @@ -66,6 +66,8 @@ async function messageReceivePostEffect ({ ? rootGetters.userDisplayNameFromID(identityContractID) : partners.map(cID => rootGetters.userDisplayNameFromID(cID)).join(', ') icon = rootGetters.ourContactProfilesById[lastJoinedPartner]?.picture + } else { + icon = rootGetters.ourContactProfilesById[memberID]?.picture } const path = `/group-chat/${contractID}` diff --git a/frontend/model/notifications/templates.js b/frontend/model/notifications/templates.js index 51f0dad4b..6f39449e1 100644 --- a/frontend/model/notifications/templates.js +++ b/frontend/model/notifications/templates.js @@ -263,7 +263,7 @@ export default ({ level: 'info', subtype: data.subtype, scope: 'group', - sbpInvocation: ['gi.actions/group/checkAndSeeProposal', { + sbpInvocation: ['gi.app/group/checkAndSeeProposal', { contractID: data.groupID, data: { proposalHash: data.proposalHash } }] @@ -297,7 +297,7 @@ export default ({ icon: 'exclamation-triangle', scope: 'group', data: { proposalId: data.proposalId }, - sbpInvocation: ['gi.actions/group/checkAndSeeProposal', { + sbpInvocation: ['gi.app/group/checkAndSeeProposal', { contractID: data.groupID, data: { proposalHash: data.proposalId } }] @@ -378,7 +378,7 @@ export default ({ icon: statusMap[status].icon, level: statusMap[status].level, scope: 'group', - sbpInvocation: ['gi.actions/group/checkAndSeeProposal', { + sbpInvocation: ['gi.app/group/checkAndSeeProposal', { contractID: data.groupID, data: { proposalHash: data.proposalHash } }] @@ -438,7 +438,7 @@ export default ({ icon: 'dollar-sign', level: 'info', scope: 'group', - sbpInvocation: ['gi.actions/group/displayMincomeChangedPrompt', { + sbpInvocation: ['gi.app/group/displayMincomeChangedPrompt', { contractID: data.groupID, data: { amount: data.to,