@@ -2,7 +2,7 @@ import React from 'react';
22import { SubscriptionTable } from 'react-components' ;
33import PropTypes from 'prop-types' ;
44import { PLAN_NAMES , PLANS , CYCLE } from 'proton-shared/lib/constants' ;
5- import { getPlan } from 'proton-shared/lib/helpers/subscription ' ;
5+ import { toMap } from 'proton-shared/lib/helpers/object ' ;
66import { c } from 'ttag' ;
77import freePlanSvg from 'design-system/assets/img/pm-images/free-plan.svg' ;
88import plusPlanSvg from 'design-system/assets/img/pm-images/plus-plan.svg' ;
@@ -25,10 +25,11 @@ const FREE_PLAN = {
2525 }
2626} ;
2727
28- const MailSubscriptionTable = ( { subscription = { } , plans : apiPlans = [ ] , cycle, currency, onSelect } ) => {
29- const plusPlan = apiPlans . find ( ( { Name } ) => Name === PLANS . PLUS ) ;
30- const professionalPlan = apiPlans . find ( ( { Name } ) => Name === PLANS . PROFESSIONAL ) ;
31- const visionaryPlan = apiPlans . find ( ( { Name } ) => Name === PLANS . VISIONARY ) ;
28+ const MailSubscriptionTable = ( { planNameSelected, plans : apiPlans = [ ] , cycle, currency, onSelect } ) => {
29+ const plansMap = toMap ( apiPlans , 'Name' ) ;
30+ const plusPlan = plansMap [ PLANS . PLUS ] ;
31+ const professionalPlan = plansMap [ PLANS . PROFESSIONAL ] ;
32+ const visionaryPlan = plansMap [ PLANS . VISIONARY ] ;
3233 const plans = [
3334 {
3435 planName : 'Free' ,
@@ -63,6 +64,7 @@ const MailSubscriptionTable = ({ subscription = {}, plans: apiPlans = [], cycle,
6364 ]
6465 } ,
6566 plusPlan && {
67+ planID : plusPlan . ID ,
6668 planName : PLAN_NAMES [ PLANS . PLUS ] ,
6769 canCustomize : true ,
6870 price : < SubscriptionPrices cycle = { cycle } currency = { currency } plan = { plusPlan } /> ,
@@ -95,9 +97,17 @@ const MailSubscriptionTable = ({ subscription = {}, plans: apiPlans = [], cycle,
9597 ]
9698 } ,
9799 professionalPlan && {
100+ planID : professionalPlan . ID ,
98101 planName : PLAN_NAMES [ PLANS . PROFESSIONAL ] ,
99102 canCustomize : true ,
100- price : < SubscriptionPrices cycle = { cycle } currency = { currency } plan = { professionalPlan } suffix = { c ( 'Suffix' ) . t `/month/user` } /> ,
103+ price : (
104+ < SubscriptionPrices
105+ cycle = { cycle }
106+ currency = { currency }
107+ plan = { professionalPlan }
108+ suffix = { c ( 'Suffix' ) . t `/month/user` }
109+ />
110+ ) ,
101111 imageSrc : professionalPlanSvg ,
102112 description : c ( 'Description' ) . t `For large organizations and businesses` ,
103113 features : [
@@ -127,6 +137,7 @@ const MailSubscriptionTable = ({ subscription = {}, plans: apiPlans = [], cycle,
127137 ]
128138 } ,
129139 visionaryPlan && {
140+ planID : visionaryPlan . ID ,
130141 planName : PLAN_NAMES [ PLANS . VISIONARY ] ,
131142 canCustomize : false ,
132143 price : < SubscriptionPrices cycle = { cycle } currency = { currency } plan = { visionaryPlan } /> ,
@@ -159,24 +170,27 @@ const MailSubscriptionTable = ({ subscription = {}, plans: apiPlans = [], cycle,
159170 ]
160171 }
161172 ] ;
162- const { Name } = getPlan ( subscription ) ;
163173
164174 return (
165175 < >
166176 < SubscriptionTable
167- currentPlanIndex = { INDEXES [ Name ] || 0 }
177+ currentPlanIndex = { INDEXES [ planNameSelected ] || 0 }
168178 mostPopularIndex = { 1 }
169179 plans = { plans }
170- onSelect = { onSelect }
180+ onSelect = { ( index ) => onSelect ( plans [ index ] . planID ) }
171181 />
172182 < p className = "small mt1 mb0" > * { c ( 'Info concerning plan features' ) . t `Customizable features` } </ p >
173- < p className = "small mt0 mb0" > ** { c ( 'Info concerning plan features' ) . t `ProtonMail cannot be used for mass emailing or spamming. Legitimate emails are unlimited.` } </ p >
183+ < p className = "small mt0 mb0" >
184+ **{ ' ' }
185+ { c ( 'Info concerning plan features' )
186+ . t `ProtonMail cannot be used for mass emailing or spamming. Legitimate emails are unlimited.` }
187+ </ p >
174188 </ >
175189 ) ;
176190} ;
177191
178192MailSubscriptionTable . propTypes = {
179- subscription : PropTypes . object ,
193+ planNameSelected : PropTypes . string ,
180194 plans : PropTypes . arrayOf ( PropTypes . object ) ,
181195 onSelect : PropTypes . func . isRequired ,
182196 cycle : PropTypes . oneOf ( [ CYCLE . MONTHLY , CYCLE . YEARLY , CYCLE . TWO_YEARS ] ) . isRequired ,
0 commit comments