Skip to content

Commit 5a92e06

Browse files
committed
Reload alias count after user upgrades from more aliases prompt
Fix #2464
1 parent d95b548 commit 5a92e06

File tree

5 files changed

+32
-14
lines changed

5 files changed

+32
-14
lines changed

src/common/misc/SubscriptionDialogs.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ let upgradeDialogShowing = false
1414
/**
1515
* Opens a dialog which states that the function is not available in the Free subscription and provides an option to upgrade.
1616
*/
17-
export async function showNotAvailableForFreeDialog(acceptedPlans: readonly AvailablePlanType[] = NewPaidPlans) {
17+
export async function showNotAvailableForFreeDialog(acceptedPlans: readonly AvailablePlanType[] = NewPaidPlans): Promise<void> {
1818
// upgradeDialogShowing prevents the dialog from being opened multiple times, as could happen when waiting for the wizard to import
1919
if (!upgradeDialogShowing) {
2020
upgradeDialogShowing = true
@@ -99,8 +99,7 @@ export async function showPlanUpgradeRequiredDialog(acceptedPlans: readonly Avai
9999
}
100100
const userController = locator.logins.getUserController()
101101
if (userController.isFreeAccount()) {
102-
showNotAvailableForFreeDialog(acceptedPlans)
103-
return false
102+
await showNotAvailableForFreeDialog(acceptedPlans)
104103
} else if (!userController.isGlobalAdmin()) {
105104
Dialog.message("contactAdmin_msg")
106105
return false
@@ -114,8 +113,8 @@ export async function showPlanUpgradeRequiredDialog(acceptedPlans: readonly Avai
114113
reason = businessPlanRequired ? "pricing.notSupportedByPersonalPlan_msg" : "newPaidPlanRequired_msg"
115114
}
116115
await showSwitchPlanDialog(userController, acceptedPlans, reason)
117-
return acceptedPlans.includes(downcast<AvailablePlanType>(await userController.getPlanType()))
118116
}
117+
return acceptedPlans.includes(downcast<AvailablePlanType>(await userController.getPlanType()))
119118
}
120119

121120
export async function showUpgradeWizardOrSwitchSubscriptionDialog(

src/common/settings/mailaddress/AddAliasDialog.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,14 @@ export function showAddAliasDialog(model: MailAddressTableModel, isNewPaidPlan:
1919
const hasCustomDomains = domains.some((domain) => !TUTA_MAIL_ADDRESS_DOMAINS.includes(domain.domain))
2020
if (model.aliasCount && filterInt(model.aliasCount.usedAliases) >= filterInt(model.aliasCount.totalAliases)) {
2121
if (!(isNewPaidPlan && hasCustomDomains)) {
22-
model.handleTooManyAliases().catch(ofClass(UpgradeRequiredError, (e) => showPlanUpgradeRequiredDialog(e.plans, e.message)))
22+
model.handleTooManyAliases().catch(
23+
ofClass(UpgradeRequiredError, async (e) => {
24+
const upgraded = await showPlanUpgradeRequiredDialog(e.plans, e.message)
25+
if (upgraded) {
26+
await model.loadAliasCount()
27+
}
28+
}),
29+
)
2330
return
2431
}
2532
}
@@ -71,7 +78,10 @@ export function showAddAliasDialog(model: MailAddressTableModel, isNewPaidPlan:
7178
lang.makeTranslation("confirm_msg", `${lang.get("paidEmailDomainLegacy_msg")}\n${lang.get("changePaidPlan_msg")}`),
7279
).then(async (confirmed) => {
7380
if (confirmed) {
74-
isNewPaidPlan = await showPlanUpgradeRequiredDialog(NewPaidPlans)
81+
const upgraded = await showPlanUpgradeRequiredDialog(NewPaidPlans)
82+
if (upgraded) {
83+
await model.loadAliasCount()
84+
}
7585
}
7686
})
7787
}
@@ -114,7 +124,10 @@ async function addAlias(model: MailAddressTableModel, alias: string, senderName:
114124

115125
return Dialog.message(lang.makeTranslation("confirm_msg", errorMsg))
116126
} else if (error instanceof UpgradeRequiredError) {
117-
showPlanUpgradeRequiredDialog(error.plans, error.message)
127+
const upgraded = await showPlanUpgradeRequiredDialog(error.plans, error.message)
128+
if (upgraded) {
129+
await model.loadAliasCount()
130+
}
118131
} else {
119132
throw error
120133
}

src/common/settings/mailaddress/MailAddressTable.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ import { Icons } from "../../gui/base/icons/Icons.js"
99
import { showProgressDialog } from "../../gui/dialogs/ProgressDialog.js"
1010
import { ExpanderButton, ExpanderPanel } from "../../gui/base/Expander.js"
1111
import { attachDropdown, DropdownButtonAttrs } from "../../gui/base/Dropdown.js"
12-
import { showNotAvailableForFreeDialog, showPlanUpgradeRequiredDialog } from "../../misc/SubscriptionDialogs.js"
12+
import { showPlanUpgradeRequiredDialog } from "../../misc/SubscriptionDialogs.js"
1313
import { assertMainOrNode } from "../../api/common/Env.js"
1414
import { IconButtonAttrs } from "../../gui/base/IconButton.js"
1515
import { ButtonSize } from "../../gui/base/ButtonSize.js"
1616
import { AddressInfo, AddressStatus, MailAddressTableModel } from "./MailAddressTableModel.js"
1717
import { showAddAliasDialog } from "./AddAliasDialog.js"
1818
import { locator } from "../../api/main/CommonLocator.js"
1919
import { UpgradeRequiredError } from "../../api/main/UpgradeRequiredError.js"
20-
import { UnsubscribeFailureReason } from "../../api/common/TutanotaConstants"
20+
import { NewPaidPlans, UnsubscribeFailureReason } from "../../api/common/TutanotaConstants"
2121

2222
assertMainOrNode()
2323

@@ -87,7 +87,11 @@ export class MailAddressTable implements Component<MailAddressTableAttrs> {
8787
private async onAddAlias(attrs: MailAddressTableAttrs) {
8888
const userController = locator.logins.getUserController()
8989
if (userController.isFreeAccount()) {
90-
showNotAvailableForFreeDialog()
90+
await showPlanUpgradeRequiredDialog(NewPaidPlans).then((upgraded) => {
91+
if (upgraded) {
92+
attrs.model.loadAliasCount()
93+
}
94+
})
9195
} else {
9296
const isNewPaidPlan = await userController.isNewPaidPlan()
9397
showAddAliasDialog(attrs.model, isNewPaidPlan)

src/common/settings/mailaddress/MailAddressTableModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ export class MailAddressTableModel {
179179
this.nameMappings = await this.nameChanger.getSenderNames()
180180
}
181181

182-
private async loadAliasCount() {
182+
async loadAliasCount() {
183183
this.aliasCount = await this.mailAddressFacade.getAliasCounters(this.userInfo.userGroupInfo.group)
184184
}
185185

src/common/subscription/SwitchSubscriptionDialog.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { locator } from "../api/main/CommonLocator"
2828
import { SwitchAccountTypeService } from "../api/entities/sys/Services.js"
2929
import { BadRequestError, InvalidDataError, PreconditionFailedError } from "../api/common/error/RestError.js"
3030
import { PaymentInterval, PriceAndConfigProvider } from "./utils/PriceUtils"
31-
import { assertNotNull, base64ExtToBase64, base64ToUint8Array, delay, downcast, lazy } from "@tutao/tutanota-utils"
31+
import { assertNotNull, base64ExtToBase64, base64ToUint8Array, defer, delay, downcast, lazy } from "@tutao/tutanota-utils"
3232
import { showSwitchToBusinessInvoiceDataDialog } from "./SwitchToBusinessInvoiceDataDialog.js"
3333
import { getByAbbreviation } from "../api/common/CountryList.js"
3434
import { formatNameAndAddress } from "../api/common/utils/CommonFormatter.js"
@@ -83,7 +83,9 @@ export async function showSwitchDialog({
8383
PriceAndConfigProvider.getInitializedInstance(null, locator.serviceExecutor, null),
8484
)
8585
const model = new SwitchSubscriptionDialogModel(customer, accountingInfo, await locator.logins.getUserController().getPlanType(), lastBooking)
86+
const deferred = defer<void>()
8687
const cancelAction = () => {
88+
deferred.resolve()
8789
dialog.close()
8890
}
8991

@@ -199,7 +201,7 @@ export async function showSwitchDialog({
199201
[PlanType.Unlimited]: createPlanButton(dialog, PlanType.Unlimited, currentPlanInfo, paymentInterval, accountingInfo),
200202
}
201203
dialog.show()
202-
return
204+
return deferred.promise
203205
}
204206

205207
async function onSwitchToFree(customer: Customer, dialog: Dialog, currentPlanInfo: CurrentPlanInfo) {
@@ -505,6 +507,6 @@ async function switchSubscription(targetSubscription: PlanType, dialog: Dialog,
505507
throw e
506508
}
507509
} finally {
508-
dialog.close()
510+
dialog.onClose()
509511
}
510512
}

0 commit comments

Comments
 (0)