diff --git a/packages/frontend-2/components/settings/workspaces/billing/AddOns.vue b/packages/frontend-2/components/settings/workspaces/billing/AddOns.vue deleted file mode 100644 index 4f8dc543d..000000000 --- a/packages/frontend-2/components/settings/workspaces/billing/AddOns.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - diff --git a/packages/frontend-2/components/settings/workspaces/billing/addOns/AddOns.vue b/packages/frontend-2/components/settings/workspaces/billing/addOns/AddOns.vue new file mode 100644 index 000000000..47bd144ce --- /dev/null +++ b/packages/frontend-2/components/settings/workspaces/billing/addOns/AddOns.vue @@ -0,0 +1,85 @@ + + + diff --git a/packages/frontend-2/components/settings/workspaces/billing/addOns/Card.vue b/packages/frontend-2/components/settings/workspaces/billing/addOns/Card.vue new file mode 100644 index 000000000..51c71d52d --- /dev/null +++ b/packages/frontend-2/components/settings/workspaces/billing/addOns/Card.vue @@ -0,0 +1,45 @@ + + + diff --git a/packages/frontend-2/lib/workspaces/composables/plan.ts b/packages/frontend-2/lib/workspaces/composables/plan.ts index d17ec85da..f21a5cd09 100644 --- a/packages/frontend-2/lib/workspaces/composables/plan.ts +++ b/packages/frontend-2/lib/workspaces/composables/plan.ts @@ -62,6 +62,11 @@ export const useWorkspacePlan = (slug: string) => { const plan = computed(() => result.value?.workspaceBySlug?.plan) const isFreePlan = computed(() => plan.value?.name === UnpaidWorkspacePlans.Free) + const isBusinessPlan = computed( + () => + plan.value?.name === PaidWorkspacePlansNew.Pro || + plan.value?.name === PaidWorkspacePlansNew.ProUnlimited + ) const isUnlimitedPlan = computed( () => plan.value?.name === UnpaidWorkspacePlans.Unlimited ) @@ -129,6 +134,7 @@ export const useWorkspacePlan = (slug: string) => { seats, hasAvailableEditorSeats, editorSeatPriceFormatted, - isUnlimitedPlan + isUnlimitedPlan, + isBusinessPlan } } diff --git a/packages/shared/src/authz/policies/project/canUpdate.spec.ts b/packages/shared/src/authz/policies/project/canUpdate.spec.ts index 26e50e84e..0c4fdd86b 100644 --- a/packages/shared/src/authz/policies/project/canUpdate.spec.ts +++ b/packages/shared/src/authz/policies/project/canUpdate.spec.ts @@ -48,11 +48,15 @@ const buildWorkspaceSUT = ( getWorkspaceSsoProvider: async () => ({ providerId: 'provider-id' }), - getWorkspaceSsoSession: async () => ({ - userId: 'user-id', - providerId: 'provider-id', - validUntil: new Date() - }), + getWorkspaceSsoSession: async () => { + const validUntil = new Date() + validUntil.setDate(validUntil.getDate() + 7) + return { + userId: 'user-id', + providerId: 'provider-id', + validUntil + } + }, ...overrides }) diff --git a/packages/shared/src/workspaces/helpers/plans.ts b/packages/shared/src/workspaces/helpers/plans.ts index 42f09a458..076b38e57 100644 --- a/packages/shared/src/workspaces/helpers/plans.ts +++ b/packages/shared/src/workspaces/helpers/plans.ts @@ -146,6 +146,31 @@ export const isSelfServeAvailablePlan = (plan: WorkspacePlans): boolean => { } } +export const isPaidPlan = (plan: WorkspacePlans): boolean => { + switch (plan) { + case 'team': + case 'teamUnlimited': + case 'pro': + case 'proUnlimited': + return true + case 'free': + case 'starter': + case 'plus': + case 'business': + case 'starterInvoiced': + case 'plusInvoiced': + case 'businessInvoiced': + case 'teamUnlimitedInvoiced': + case 'proUnlimitedInvoiced': + case 'unlimited': + case 'academia': + return false + + default: + throwUncoveredError(plan) + } +} + /** * BILLING INTERVALS */