@automattic/plans-grid-next 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/dist/cjs/__mocks__/wpcom-proxy-request.js +3 -4
  2. package/dist/cjs/__mocks__/wpcom-proxy-request.js.map +1 -1
  3. package/dist/cjs/_shared.scss +9 -4
  4. package/dist/cjs/components/comparison-grid/index.js +18 -29
  5. package/dist/cjs/components/comparison-grid/index.js.map +1 -1
  6. package/dist/cjs/components/comparison-grid/index.stories.js +1 -0
  7. package/dist/cjs/components/comparison-grid/index.stories.js.map +1 -1
  8. package/dist/cjs/components/comparison-grid/style.scss +0 -17
  9. package/dist/cjs/components/dropdown-option.js +1 -1
  10. package/dist/cjs/components/features-grid/index.js +21 -6
  11. package/dist/cjs/components/features-grid/index.js.map +1 -1
  12. package/dist/cjs/components/features-grid/index.stories.js +1 -0
  13. package/dist/cjs/components/features-grid/index.stories.js.map +1 -1
  14. package/dist/cjs/components/features-grid/style.scss +2 -19
  15. package/dist/cjs/components/item.js +1 -2
  16. package/dist/cjs/components/item.js.map +1 -1
  17. package/dist/cjs/components/plan-button/style.scss +8 -7
  18. package/dist/cjs/components/plan-type-selector/hooks/use-interval-options.js +1 -1
  19. package/dist/cjs/components/plan-type-selector/hooks/use-interval-options.js.map +1 -1
  20. package/dist/cjs/components/plan-type-selector/hooks/use-max-discount.js +1 -1
  21. package/dist/cjs/components/plan-type-selector/hooks/use-max-discount.js.map +1 -1
  22. package/dist/cjs/components/plan-type-selector/hooks/use-max-discounts-for-plan-terms.js +1 -1
  23. package/dist/cjs/components/plan-type-selector/hooks/use-max-discounts-for-plan-terms.js.map +1 -1
  24. package/dist/cjs/components/plan-type-selector/style.scss +3 -1
  25. package/dist/cjs/components/shared/billing-timeframe/index.js +13 -5
  26. package/dist/cjs/components/shared/billing-timeframe/index.js.map +1 -1
  27. package/dist/cjs/components/shared/header-price/style.scss +2 -2
  28. package/dist/cjs/components/shared/storage/hooks/use-default-storage-option.js +1 -1
  29. package/dist/cjs/components/shared/storage/hooks/use-default-storage-option.js.map +1 -1
  30. package/dist/cjs/components/shared/storage/hooks/use-purchased-storage-add-on.js +1 -1
  31. package/dist/cjs/components/shared/storage/hooks/use-purchased-storage-add-on.js.map +1 -1
  32. package/dist/cjs/components/shared/storage/index.js +3 -2
  33. package/dist/cjs/components/shared/storage/index.js.map +1 -1
  34. package/dist/cjs/components/sticky-container.js +66 -6
  35. package/dist/cjs/components/sticky-container.js.map +1 -1
  36. package/dist/cjs/hooks/data-store/is-popular-plan.js +1 -2
  37. package/dist/cjs/hooks/data-store/is-popular-plan.js.map +1 -1
  38. package/dist/cjs/hooks/data-store/use-grid-plans-for-features-grid.js +14 -11
  39. package/dist/cjs/hooks/data-store/use-grid-plans-for-features-grid.js.map +1 -1
  40. package/dist/cjs/hooks/data-store/use-plan-billing-description.js +2 -2
  41. package/dist/cjs/hooks/data-store/use-plan-billing-description.js.map +1 -1
  42. package/dist/cjs/hooks/use-grid-size.js +2 -4
  43. package/dist/cjs/hooks/use-grid-size.js.map +1 -1
  44. package/dist/cjs/hooks/use-is-large-currency.js +1 -1
  45. package/dist/cjs/hooks/use-is-large-currency.js.map +1 -1
  46. package/dist/cjs/hooks/use-manage-tooltip-toggle.js +1 -2
  47. package/dist/cjs/hooks/use-manage-tooltip-toggle.js.map +1 -1
  48. package/dist/cjs/hooks/use-plan-pricing-info-from-grid-plans.js +1 -2
  49. package/dist/cjs/hooks/use-plan-pricing-info-from-grid-plans.js.map +1 -1
  50. package/dist/cjs/lib/get-plan-pricing-info-from-grid-plans.js +1 -2
  51. package/dist/cjs/lib/get-plan-pricing-info-from-grid-plans.js.map +1 -1
  52. package/dist/cjs/lib/is-same-plan.js +1 -2
  53. package/dist/cjs/lib/is-same-plan.js.map +1 -1
  54. package/dist/cjs/lib/sort-plan-properties.js +19 -32
  55. package/dist/cjs/lib/sort-plan-properties.js.map +1 -1
  56. package/dist/cjs/lib/touch-detect/index.js +1 -2
  57. package/dist/cjs/lib/touch-detect/index.js.map +1 -1
  58. package/dist/esm/_shared.scss +9 -4
  59. package/dist/esm/components/comparison-grid/index.js +18 -29
  60. package/dist/esm/components/comparison-grid/index.js.map +1 -1
  61. package/dist/esm/components/comparison-grid/index.stories.js +1 -0
  62. package/dist/esm/components/comparison-grid/index.stories.js.map +1 -1
  63. package/dist/esm/components/comparison-grid/style.scss +0 -17
  64. package/dist/esm/components/dropdown-option.js +1 -1
  65. package/dist/esm/components/features-grid/index.js +21 -6
  66. package/dist/esm/components/features-grid/index.js.map +1 -1
  67. package/dist/esm/components/features-grid/index.stories.js +1 -0
  68. package/dist/esm/components/features-grid/index.stories.js.map +1 -1
  69. package/dist/esm/components/features-grid/style.scss +2 -19
  70. package/dist/esm/components/plan-button/style.scss +8 -7
  71. package/dist/esm/components/plan-type-selector/style.scss +3 -1
  72. package/dist/esm/components/shared/billing-timeframe/index.js +14 -6
  73. package/dist/esm/components/shared/billing-timeframe/index.js.map +1 -1
  74. package/dist/esm/components/shared/header-price/style.scss +2 -2
  75. package/dist/esm/components/sticky-container.js +66 -5
  76. package/dist/esm/components/sticky-container.js.map +1 -1
  77. package/dist/esm/hooks/data-store/use-grid-plans-for-features-grid.js +14 -11
  78. package/dist/esm/hooks/data-store/use-grid-plans-for-features-grid.js.map +1 -1
  79. package/dist/esm/hooks/data-store/use-plan-billing-description.js +1 -1
  80. package/dist/esm/hooks/use-grid-size.js +0 -1
  81. package/dist/esm/hooks/use-grid-size.js.map +1 -1
  82. package/dist/esm/lib/sort-plan-properties.js +18 -30
  83. package/dist/esm/lib/sort-plan-properties.js.map +1 -1
  84. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  85. package/dist/tsconfig.tsbuildinfo +1 -1
  86. package/dist/types/components/comparison-grid/index.d.ts +1 -1
  87. package/dist/types/components/comparison-grid/index.d.ts.map +1 -1
  88. package/dist/types/components/comparison-grid/index.stories.d.ts +3 -1
  89. package/dist/types/components/comparison-grid/index.stories.d.ts.map +1 -1
  90. package/dist/types/components/dropdown-option.d.ts +0 -1
  91. package/dist/types/components/dropdown-option.d.ts.map +1 -1
  92. package/dist/types/components/features-grid/client-logo-list/client-list.d.ts +0 -1
  93. package/dist/types/components/features-grid/client-logo-list/client-list.d.ts.map +1 -1
  94. package/dist/types/components/features-grid/client-logo-list/index.d.ts.map +1 -1
  95. package/dist/types/components/features-grid/index.d.ts.map +1 -1
  96. package/dist/types/components/features-grid/index.stories.d.ts +5 -1
  97. package/dist/types/components/features-grid/index.stories.d.ts.map +1 -1
  98. package/dist/types/components/plan-button/index.d.ts +10 -10
  99. package/dist/types/components/plan-button/index.d.ts.map +1 -1
  100. package/dist/types/components/plan-div-td-container.d.ts +0 -1
  101. package/dist/types/components/plan-div-td-container.d.ts.map +1 -1
  102. package/dist/types/components/plan-logo.d.ts +0 -1
  103. package/dist/types/components/plan-logo.d.ts.map +1 -1
  104. package/dist/types/components/plan-type-selector/components/interval-type-dropdown.d.ts +0 -1
  105. package/dist/types/components/plan-type-selector/components/interval-type-dropdown.d.ts.map +1 -1
  106. package/dist/types/components/plan-type-selector/components/interval-type-selector.d.ts +0 -1
  107. package/dist/types/components/plan-type-selector/components/interval-type-selector.d.ts.map +1 -1
  108. package/dist/types/components/plan-type-selector/hooks/use-max-discounts-for-plan-terms.d.ts.map +1 -1
  109. package/dist/types/components/popular-badge.d.ts +0 -1
  110. package/dist/types/components/popular-badge.d.ts.map +1 -1
  111. package/dist/types/components/shared/billing-timeframe/index.d.ts.map +1 -1
  112. package/dist/types/components/shared/header-price/header-price-context.d.ts +0 -1
  113. package/dist/types/components/shared/header-price/header-price-context.d.ts.map +1 -1
  114. package/dist/types/components/shared/storage/hooks/use-storage-string.d.ts +0 -1
  115. package/dist/types/components/shared/storage/hooks/use-storage-string.d.ts.map +1 -1
  116. package/dist/types/components/sticky-container.d.ts +22 -0
  117. package/dist/types/components/sticky-container.d.ts.map +1 -1
  118. package/dist/types/grid-context.d.ts +0 -1
  119. package/dist/types/grid-context.d.ts.map +1 -1
  120. package/dist/types/hooks/data-store/types.d.ts +1 -0
  121. package/dist/types/hooks/data-store/types.d.ts.map +1 -1
  122. package/dist/types/hooks/data-store/use-grid-plans-for-features-grid.d.ts +1 -1
  123. package/dist/types/hooks/data-store/use-grid-plans-for-features-grid.d.ts.map +1 -1
  124. package/dist/types/hooks/data-store/use-grid-plans.d.ts +1 -1
  125. package/dist/types/hooks/data-store/use-grid-plans.d.ts.map +1 -1
  126. package/dist/types/hooks/data-store/use-highlight-labels.d.ts +0 -1
  127. package/dist/types/hooks/data-store/use-highlight-labels.d.ts.map +1 -1
  128. package/dist/types/hooks/data-store/use-plan-billing-description.d.ts +0 -1
  129. package/dist/types/hooks/data-store/use-plan-billing-description.d.ts.map +1 -1
  130. package/dist/types/hooks/use-grid-size.d.ts +0 -1
  131. package/dist/types/hooks/use-grid-size.d.ts.map +1 -1
  132. package/dist/types/lib/get-plan-features-object.d.ts.map +1 -1
  133. package/dist/types/lib/sort-plan-properties.d.ts +1 -1
  134. package/dist/types/lib/sort-plan-properties.d.ts.map +1 -1
  135. package/dist/types/types.d.ts +1 -1
  136. package/dist/types/types.d.ts.map +1 -1
  137. package/package.json +14 -14
  138. package/src/_shared.scss +9 -4
  139. package/src/components/comparison-grid/index.stories.tsx +1 -0
  140. package/src/components/comparison-grid/index.tsx +19 -33
  141. package/src/components/comparison-grid/style.scss +0 -17
  142. package/src/components/dropdown-option.tsx +1 -1
  143. package/src/components/features-grid/index.stories.tsx +1 -0
  144. package/src/components/features-grid/index.tsx +21 -9
  145. package/src/components/features-grid/style.scss +2 -19
  146. package/src/components/plan-button/style.scss +8 -7
  147. package/src/components/plan-type-selector/style.scss +3 -1
  148. package/src/components/shared/billing-timeframe/index.tsx +15 -7
  149. package/src/components/shared/header-price/style.scss +2 -2
  150. package/src/components/sticky-container.tsx +74 -3
  151. package/src/components/test/billing-timeframe.tsx +2 -2
  152. package/src/hooks/data-store/types.ts +1 -0
  153. package/src/hooks/data-store/use-grid-plans-for-features-grid.ts +14 -10
  154. package/src/hooks/data-store/use-plan-billing-description.tsx +1 -1
  155. package/src/hooks/use-grid-size.ts +0 -1
  156. package/src/lib/sort-plan-properties.ts +18 -37
  157. package/src/lib/test/sort-plan-properties.ts +50 -32
  158. package/src/types.ts +1 -0
@@ -42,63 +42,81 @@ const planEcommerce = {
42
42
  const plansInDefaultOrder = [ planFree, planPersonal, planPremium, planBusiness, planEcommerce ];
43
43
 
44
44
  describe( 'sortPlans', () => {
45
- it( 'should sort plans in descending order of value when current plan slug is personal', () => {
45
+ it( 'should return an empty array if no plans are provided', () => {
46
+ expect( sortPlans( [] ) ).toEqual( [] );
47
+ } );
48
+
49
+ it( 'should return the original order if no current plan is specified', () => {
50
+ expect( sortPlans( plansInDefaultOrder ) ).toEqual( plansInDefaultOrder );
51
+ } );
52
+
53
+ it( 'should return the original order if current plan is null', () => {
54
+ expect( sortPlans( plansInDefaultOrder, null ) ).toEqual( plansInDefaultOrder );
55
+ } );
56
+
57
+ it( 'should return the original order if current plan is undefined', () => {
58
+ expect( sortPlans( plansInDefaultOrder, undefined ) ).toEqual( plansInDefaultOrder );
59
+ } );
60
+
61
+ it( 'should return the original order if current plan is not found in the plans array', () => {
62
+ expect( sortPlans( plansInDefaultOrder, 'non-existent-plan' ) ).toEqual( plansInDefaultOrder );
63
+ } );
64
+
65
+ it( 'should prioritize the current plan when specified', () => {
66
+ // When personal plan is current
46
67
  expect( sortPlans( plansInDefaultOrder, 'personal-bundle' ) ).toEqual( [
47
68
  planPersonal,
69
+ planFree,
48
70
  planPremium,
49
71
  planBusiness,
50
72
  planEcommerce,
51
- planFree,
52
73
  ] );
53
- } );
54
74
 
55
- it( 'should sort plans in descending order of value when current plan slug is ecommerce', () => {
56
- expect( sortPlans( plansInDefaultOrder, 'ecommerce-bundle' ) ).toEqual( [
57
- planEcommerce,
58
- planBusiness,
75
+ // When premium plan is current
76
+ expect( sortPlans( plansInDefaultOrder, 'value_bundle' ) ).toEqual( [
59
77
  planPremium,
60
- planPersonal,
61
78
  planFree,
62
- ] );
63
- } );
64
-
65
- it( 'should show the popular plan first if current plan slug is empty', () => {
66
- expect( sortPlans( plansInDefaultOrder ) ).toEqual( [
67
- planPremium,
79
+ planPersonal,
68
80
  planBusiness,
69
81
  planEcommerce,
70
- planPersonal,
71
- planFree,
72
82
  ] );
73
- } );
74
83
 
75
- it( 'should show the popular plan first when current plan slug is empty', () => {
76
- expect( sortPlans( plansInDefaultOrder ) ).toEqual( [
77
- planPremium,
84
+ // When business plan is current
85
+ expect( sortPlans( plansInDefaultOrder, 'business-bundle' ) ).toEqual( [
78
86
  planBusiness,
79
- planEcommerce,
80
- planPersonal,
81
87
  planFree,
88
+ planPersonal,
89
+ planPremium,
90
+ planEcommerce,
82
91
  ] );
83
- } );
84
92
 
85
- it( 'should show the popular plan first if current plan slug is the free plan', () => {
86
- expect( sortPlans( plansInDefaultOrder, 'free_plan' ) ).toEqual( [
87
- planPremium,
88
- planBusiness,
93
+ // When ecommerce plan is current
94
+ expect( sortPlans( plansInDefaultOrder, 'ecommerce-bundle' ) ).toEqual( [
89
95
  planEcommerce,
90
- planPersonal,
91
96
  planFree,
97
+ planPersonal,
98
+ planPremium,
99
+ planBusiness,
92
100
  ] );
93
- } );
94
101
 
95
- it( 'should show the popular plan second if current plan slug is empty/free and user is on mobile', () => {
96
- expect( sortPlans( plansInDefaultOrder, 'free_plan', true ) ).toEqual( [
102
+ // When free plan is current
103
+ expect( sortPlans( plansInDefaultOrder, 'free_plan' ) ).toEqual( [
104
+ planFree,
97
105
  planPersonal,
98
106
  planPremium,
99
107
  planBusiness,
100
108
  planEcommerce,
101
- planFree,
102
109
  ] );
103
110
  } );
111
+
112
+ it( 'should work with a single plan', () => {
113
+ const singlePlan = [ planFree ];
114
+ expect( sortPlans( singlePlan, 'free_plan' ) ).toEqual( [ planFree ] );
115
+ } );
116
+
117
+ it( 'should preserve the original array', () => {
118
+ const originalArray = [ ...plansInDefaultOrder ];
119
+ sortPlans( plansInDefaultOrder, 'personal-bundle' );
120
+ expect( plansInDefaultOrder ).toEqual( originalArray );
121
+ } );
104
122
  } );
package/src/types.ts CHANGED
@@ -104,6 +104,7 @@ export interface CommonGridProps {
104
104
  siteId?: number | null;
105
105
  isInSignup: boolean;
106
106
  isInAdmin: boolean;
107
+ isInSiteDashboard: boolean;
107
108
  onStorageAddOnClick?: ( addOnSlug: AddOns.StorageAddOnSlug ) => void;
108
109
  currentSitePlanSlug?: string | null;
109
110
  hideUnavailableFeatures?: boolean; // used to hide features that are not available, instead of strike-through as explained in #76206