diff --git a/frontend/src/components/orgs-list.ts b/frontend/src/components/orgs-list.ts
index 75c8202315..a49aba26a1 100644
--- a/frontend/src/components/orgs-list.ts
+++ b/frontend/src/components/orgs-list.ts
@@ -33,6 +33,7 @@ enum OrgFilter {
Inactive = "inactive",
Trialing = "trialing",
ScheduledCancel = "scheduled-cancel",
+ BadStates = "bad-states",
}
const none = html`
@@ -180,6 +181,11 @@ export class OrgsList extends BtrixElement {
icon: "calendar2-x",
filter: OrgFilter.ScheduledCancel,
},
+ {
+ label: msg("Unexpected States"),
+ icon: "exclamation-triangle",
+ filter: OrgFilter.BadStates,
+ },
].map((options) => this.renderFilterButton(searchResults, options))}
@@ -257,22 +263,54 @@ export class OrgsList extends BtrixElement {
!!org.subscription &&
!(
org.subscription.status === SubscriptionStatus.Active ||
- org.subscription.status === SubscriptionStatus.Trialing
+ org.subscription.status === SubscriptionStatus.Trialing ||
+ org.subscription.status === SubscriptionStatus.TrialingCanceled
)
);
case OrgFilter.Trialing:
return (
!!org.subscription &&
- org.subscription.status === SubscriptionStatus.Trialing
+ (org.subscription.status === SubscriptionStatus.Trialing ||
+ org.subscription.status === SubscriptionStatus.TrialingCanceled)
);
case OrgFilter.ScheduledCancel:
return (
!!org.subscription &&
- org.subscription.status === SubscriptionStatus.Active &&
- !!org.subscription.futureCancelDate
+ ((org.subscription.status === SubscriptionStatus.Active &&
+ !!org.subscription.futureCancelDate) ||
+ org.subscription.status === SubscriptionStatus.TrialingCanceled)
);
case OrgFilter.All:
return true;
+ case OrgFilter.BadStates:
+ // Check if org should be disabled but isn't
+ if (
+ !org.readOnly &&
+ org.subscription &&
+ [
+ SubscriptionStatus.Cancelled,
+ SubscriptionStatus.PausedPaymentFailed,
+ ].includes(org.subscription.status)
+ ) {
+ return true;
+ }
+
+ // Check if org is scheduled to cancel in the past
+ if (
+ org.subscription?.futureCancelDate &&
+ new Date(org.subscription.futureCancelDate).getTime() -
+ new Date().getTime() <
+ 0
+ ) {
+ return true;
+ }
+
+ // Check if org has empty subscription id
+ if (org.subscription && !org.subscription.subId) {
+ return true;
+ }
+
+ return false;
}
}
@@ -740,9 +778,10 @@ export class OrgsList extends BtrixElement {
if (org.storageQuotaReached || org.execMinutesQuotaReached) {
status = {
icon: html`