@faststore/core 3.88.6 → 3.89.0

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 (147) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +55 -55
  3. package/.next/cache/.tsbuildinfo +1 -1
  4. package/.next/cache/config.json +3 -3
  5. package/.next/cache/webpack/client-production/0.pack +0 -0
  6. package/.next/cache/webpack/client-production/index.pack +0 -0
  7. package/.next/cache/webpack/server-production/0.pack +0 -0
  8. package/.next/cache/webpack/server-production/index.pack +0 -0
  9. package/.next/prerender-manifest.js +1 -1
  10. package/.next/prerender-manifest.json +1 -1
  11. package/.next/react-loadable-manifest.json +28 -28
  12. package/.next/routes-manifest.json +1 -1
  13. package/.next/server/chunks/1607.js +1 -0
  14. package/.next/server/chunks/2570.js +1 -1
  15. package/.next/server/chunks/6886.js +1 -1
  16. package/.next/server/chunks/8071.js +1 -1
  17. package/.next/server/chunks/9563.js +1 -1
  18. package/.next/server/middleware-build-manifest.js +1 -1
  19. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  20. package/.next/server/pages/404.js.nft.json +1 -1
  21. package/.next/server/pages/500.js.nft.json +1 -1
  22. package/.next/server/pages/[...slug].js.nft.json +1 -1
  23. package/.next/server/pages/[slug]/p.js.nft.json +1 -1
  24. package/.next/server/pages/_app.js.nft.json +1 -1
  25. package/.next/server/pages/_document.js.nft.json +1 -1
  26. package/.next/server/pages/_error.js.nft.json +1 -1
  27. package/.next/server/pages/api/graphql.js +1 -1
  28. package/.next/server/pages/api/graphql.js.nft.json +1 -1
  29. package/.next/server/pages/api/health/live.js.nft.json +1 -1
  30. package/.next/server/pages/api/health/ready.js.nft.json +1 -1
  31. package/.next/server/pages/api/preview.js.nft.json +1 -1
  32. package/.next/server/pages/checkout.js.nft.json +1 -1
  33. package/.next/server/pages/en-US/404.html +1 -1
  34. package/.next/server/pages/en-US/500.html +1 -1
  35. package/.next/server/pages/en-US/checkout.html +1 -1
  36. package/.next/server/pages/en-US/login.html +1 -1
  37. package/.next/server/pages/en-US/s.html +1 -1
  38. package/.next/server/pages/en-US.html +1 -1
  39. package/.next/server/pages/index.js.nft.json +1 -1
  40. package/.next/server/pages/login.js.nft.json +1 -1
  41. package/.next/server/pages/pvt/account/403.js.nft.json +1 -1
  42. package/.next/server/pages/pvt/account/404.js.nft.json +1 -1
  43. package/.next/server/pages/pvt/account/[...unknown].js.nft.json +1 -1
  44. package/.next/server/pages/pvt/account/orders/[id].js +1 -1
  45. package/.next/server/pages/pvt/account/orders/[id].js.nft.json +1 -1
  46. package/.next/server/pages/pvt/account/orders.js +1 -1
  47. package/.next/server/pages/pvt/account/orders.js.nft.json +1 -1
  48. package/.next/server/pages/pvt/account/profile.js +1 -1
  49. package/.next/server/pages/pvt/account/profile.js.nft.json +1 -1
  50. package/.next/server/pages/pvt/account/security.js +1 -1
  51. package/.next/server/pages/pvt/account/security.js.nft.json +1 -1
  52. package/.next/server/pages/pvt/account/user-details.js +1 -1
  53. package/.next/server/pages/pvt/account/user-details.js.nft.json +1 -1
  54. package/.next/server/pages/pvt/account.js.nft.json +1 -1
  55. package/.next/server/pages/s.js.nft.json +1 -1
  56. package/.next/server/pages-manifest.json +1 -1
  57. package/.next/static/chunks/2284.be64169724492654.js +1 -0
  58. package/.next/static/chunks/pages/pvt/account/403-f2858569fde3873b.js +1 -0
  59. package/.next/static/chunks/pages/pvt/account/404-c68124bed7cb7c48.js +1 -0
  60. package/.next/static/chunks/pages/pvt/account/orders/[id]-459f6b9a86780410.js +1 -0
  61. package/.next/static/chunks/pages/pvt/account/orders-f376bbaf561ae429.js +1 -0
  62. package/.next/static/chunks/pages/pvt/account/profile-e13024f80e939a5f.js +1 -0
  63. package/.next/static/chunks/pages/pvt/account/security-e6289a40e745d3c4.js +1 -0
  64. package/.next/static/chunks/pages/pvt/account/user-details-fba1822e52e7de26.js +1 -0
  65. package/.next/static/chunks/{webpack-3230a260fda8541e.js → webpack-f16e329d9f50b79b.js} +1 -1
  66. package/.next/static/css/{5273202f7c5e5ec1.css → 02eaf202d3d11fd1.css} +1 -1
  67. package/.next/static/css/0f8f72ecdeb79402.css +1 -0
  68. package/.next/static/css/2c0f8724c01f2ab8.css +1 -0
  69. package/.next/static/css/32a4ddbf3999c2a5.css +1 -0
  70. package/.next/static/css/331f08e9d306e70b.css +1 -0
  71. package/.next/static/css/{865e30903caadb79.css → 4f0597b0bf0ef2e1.css} +1 -1
  72. package/.next/static/css/5177628438c28f74.css +1 -0
  73. package/.next/static/css/6bb0abee27fe0019.css +1 -0
  74. package/.next/static/css/84ebcfe7a63d709d.css +1 -0
  75. package/.next/static/css/8df9f9a136312210.css +1 -0
  76. package/.next/static/css/a8bcd71b15adb1ec.css +1 -0
  77. package/.next/static/css/a9328b56f3942b82.css +1 -0
  78. package/.next/static/css/{b7bba8fce075688b.css → b65e005fb943434c.css} +1 -1
  79. package/.next/static/css/{831a1f72fe4b2d80.css → bd121d85d6ceed46.css} +1 -1
  80. package/.next/static/css/{dbbb10bf2f162a58.css → be59e989720e6e50.css} +1 -1
  81. package/.next/static/css/{b1806cbafd0c1f81.css → c29fee5b9f9d48d9.css} +1 -1
  82. package/.next/static/css/{936c65069d608087.css → c34f6ea9953e2f63.css} +1 -1
  83. package/.next/static/css/{e46393a76c5d93a9.css → c53b17b6fa994508.css} +1 -1
  84. package/.next/static/css/{5347dbc8b71de47d.css → ceb410a7062740d1.css} +1 -1
  85. package/.next/static/css/da0f1f3329c5657a.css +1 -0
  86. package/.next/static/css/da5bfb1f39c54578.css +1 -0
  87. package/.next/static/css/f60366555f563deb.css +1 -0
  88. package/.next/static/css/f81198b7fe9f5f6f.css +1 -0
  89. package/.next/static/zzqNGaHXIghWiPWB3TKER/_buildManifest.js +1 -0
  90. package/.next/trace +138 -137
  91. package/.turbo/turbo-build.log +26 -26
  92. package/.turbo/turbo-test.log +6 -5
  93. package/CHANGELOG.md +12 -0
  94. package/package.json +3 -3
  95. package/src/components/account/MyAccountLayout/MyAccountLayout.tsx +3 -3
  96. package/src/components/account/MyAccountLayout/styles.scss +10 -0
  97. package/src/components/account/MyAccountMenu/styles.scss +2 -1
  98. package/src/components/account/MyAccountUserDetails/MyAccountUserDetails.tsx +18 -39
  99. package/src/components/account/MyAccountUserDetails/styles.module.scss +1 -93
  100. package/src/components/account/components/MyAccountHeader/MyAccountHeader.tsx +13 -0
  101. package/src/components/account/components/MyAccountHeader/index.ts +1 -0
  102. package/src/components/account/components/MyAccountHeader/styles.scss +13 -0
  103. package/src/components/account/components/MyAccountStatusBadge/styles.scss +4 -4
  104. package/src/components/account/components/MyAccountTable/MyAccountTable.tsx +23 -0
  105. package/src/components/account/components/MyAccountTable/index.ts +1 -0
  106. package/src/components/account/components/MyAccountTable/styles.scss +67 -0
  107. package/src/components/account/orders/MyAccountListOrders/MyAccountListOrders.tsx +131 -134
  108. package/src/components/account/orders/MyAccountListOrders/MyAccountListOrdersTable/MyAccountListOrdersTable.tsx +9 -24
  109. package/src/components/account/orders/MyAccountListOrders/MyAccountListOrdersTable/styles.scss +37 -42
  110. package/src/components/account/orders/MyAccountListOrders/styles.module.scss +4 -25
  111. package/src/components/account/orders/MyAccountOrderDetails/MyAccountOrderActions/MyAccountOrderActions.tsx +1 -6
  112. package/src/components/account/orders/MyAccountOrderDetails/MyAccountOrderDetails.tsx +1 -1
  113. package/src/components/account/orders/MyAccountOrderDetails/MyAccountStatusCard/MyAccountStatusCard.tsx +9 -11
  114. package/src/components/account/orders/MyAccountOrderDetails/MyAccountStatusCard/styles.scss +27 -11
  115. package/src/components/account/orders/MyAccountOrderDetails/MyAccountStatusCard/useConnectorPositioning.ts +0 -8
  116. package/src/components/account/orders/MyAccountOrderDetails/section.module.scss +2 -3
  117. package/src/components/account/profile/profile.module.scss +1 -85
  118. package/src/components/account/profile/profile.tsx +24 -31
  119. package/src/components/account/security/SecurityDrawer.tsx +86 -88
  120. package/src/components/account/security/SecuritySection.tsx +23 -20
  121. package/src/components/account/security/styles.module.scss +26 -150
  122. package/src/components/search/SearchDropdown/SearchDropdown.tsx +20 -8
  123. package/src/utils/userOrderStatus.ts +5 -5
  124. package/.next/static/chunks/2284.17a3e4c3af092981.js +0 -1
  125. package/.next/static/chunks/pages/pvt/account/403-e4315ace8609a7ff.js +0 -1
  126. package/.next/static/chunks/pages/pvt/account/404-1e450ae9476bbcaa.js +0 -1
  127. package/.next/static/chunks/pages/pvt/account/orders/[id]-a3e46af1be9816a4.js +0 -1
  128. package/.next/static/chunks/pages/pvt/account/orders-db7a364869130660.js +0 -1
  129. package/.next/static/chunks/pages/pvt/account/profile-e8a7ad7a7d7c60fb.js +0 -1
  130. package/.next/static/chunks/pages/pvt/account/security-cad4e4260be8b0cd.js +0 -1
  131. package/.next/static/chunks/pages/pvt/account/user-details-401f6f6e4ce4b9ce.js +0 -1
  132. package/.next/static/css/04fb2d4b8924b0c6.css +0 -1
  133. package/.next/static/css/083dc2a5b0de2439.css +0 -1
  134. package/.next/static/css/175fa823349dc534.css +0 -1
  135. package/.next/static/css/297be4be3be36ff0.css +0 -1
  136. package/.next/static/css/2a4b7072e47636f1.css +0 -1
  137. package/.next/static/css/45fac71f6411cceb.css +0 -1
  138. package/.next/static/css/6cd282d958f613bc.css +0 -1
  139. package/.next/static/css/b52f8f6500d3439e.css +0 -1
  140. package/.next/static/css/b7fc24e8f1eb011f.css +0 -1
  141. package/.next/static/css/d26cb0a54378b3d9.css +0 -1
  142. package/.next/static/css/ec7fdad03808422d.css +0 -1
  143. package/.next/static/css/f93cf36b16950027.css +0 -1
  144. package/.next/static/css/fd0a7a134ddc3d90.css +0 -1
  145. package/.next/static/css/fe0bcc13a2b68605.css +0 -1
  146. package/.next/static/gr1zvFciaZoSP1gK1c2vT/_buildManifest.js +0 -1
  147. /package/.next/static/{gr1zvFciaZoSP1gK1c2vT → zzqNGaHXIghWiPWB3TKER}/_ssgManifest.js +0 -0
@@ -6,7 +6,7 @@
6
6
  // Default properties
7
7
  --fs-order-status-card-gap : var(--fs-spacing-1);
8
8
  --fs-order-status-card-padding : var(--fs-spacing-3) var(--fs-spacing-2);
9
- --fs-order-status-card-bkg-color : var(--fs-color-neutral-1);
9
+ --fs-order-status-card-bkg-color : rgb(0 0 0 / 3%);
10
10
  --fs-order-status-card-border-radius : var(--fs-border-radius-medium);
11
11
 
12
12
  // Step Icon
@@ -17,8 +17,8 @@
17
17
  --fs-order-status-step-icon-margin : var(--fs-spacing-0);
18
18
 
19
19
  // Step Icon States
20
- --fs-order-status-step-icon-completed-color : #08a822;
21
- --fs-order-status-step-icon-failed-color : #5c5c5c;
20
+ --fs-order-status-step-icon-completed-color : var(--fs-color-success-2);
21
+ --fs-order-status-step-icon-failed-color : var(--fs-color-neutral-5);
22
22
  --fs-order-status-step-icon-canceled-color : var(--fs-color-neutral-1);
23
23
  --fs-order-status-step-icon-loading-color : var(--fs-color-neutral-4);
24
24
  --fs-order-status-step-icon-text-color : var(--fs-color-neutral-0);
@@ -77,6 +77,10 @@
77
77
  width: 100%;
78
78
  padding: var(--fs-order-status-card-padding);
79
79
 
80
+ &:first-child [data-fs-shipping-connector] {
81
+ display: none;
82
+ }
83
+
80
84
  &[data-fs-shipping-status="loading"] {
81
85
  z-index: -1;
82
86
  background-color: var(--fs-order-status-card-bkg-color);
@@ -104,6 +108,7 @@
104
108
  width: var(--fs-order-status-step-icon-size);
105
109
  height: var(--fs-order-status-step-icon-size);
106
110
  margin: var(--fs-order-status-step-icon-margin);
111
+ border-radius: var(--fs-order-status-step-icon-border-radius);
107
112
 
108
113
  [data-fs-icon] {
109
114
  color: var(--fs-color-neutral-0);
@@ -111,7 +116,6 @@
111
116
 
112
117
  &[data-fs-shipping-step-completed] {
113
118
  background-color: var(--fs-order-status-step-icon-completed-color);
114
- border-radius: var(--fs-order-status-step-icon-border-radius);
115
119
 
116
120
  [class*="icon"] {
117
121
  color: var(--fs-order-status-step-icon-text-color);
@@ -120,7 +124,6 @@
120
124
 
121
125
  &[data-fs-shipping-step-failed] {
122
126
  background-color: var(--fs-order-status-step-icon-failed-color);
123
- border-radius: var(--fs-order-status-step-icon-border-radius);
124
127
 
125
128
  [class*="icon"] {
126
129
  color: var(--fs-order-status-step-icon-text-color);
@@ -133,17 +136,11 @@
133
136
 
134
137
  &[data-fs-shipping-step-loading] {
135
138
  background-color: var(--fs-order-status-step-icon-loading-color);
136
- border-radius: var(--fs-order-status-step-icon-border-radius);
137
139
 
138
140
  [class*="icon"] {
139
141
  color: var(--fs-order-status-step-icon-text-color);
140
142
  }
141
143
  }
142
-
143
- &:not([data-fs-shipping-step-completed]):not([data-fs-shipping-step-loading]) {
144
- border: var(--fs-order-status-step-icon-border);
145
- border-radius: var(--fs-order-status-step-icon-border-radius);
146
- }
147
144
  }
148
145
 
149
146
  [data-fs-shipping-step-content] {
@@ -193,8 +190,19 @@
193
190
 
194
191
  [data-fs-shipping-connector] {
195
192
  position: absolute;
193
+ bottom: calc(50% + var(--fs-order-status-step-icon-half-size) + var(--fs-order-status-connector-spacing));
194
+ left: calc(var(--fs-spacing-2) + var(--fs-order-status-step-icon-half-size) + var(--fs-order-status-step-icon-margin));
196
195
  background-color: var(--fs-order-status-connector-color);
197
196
 
197
+ @include media(">=notebook") {
198
+ top: calc(1rem + var(--fs-order-status-step-icon-margin) + var(--fs-order-status-step-icon-half-size));
199
+ right: calc(50% + var(--fs-order-status-step-icon-half-size) + var(--fs-order-status-card-gap));
200
+ bottom: auto;
201
+ left: auto;
202
+ width: 100%;
203
+ height: var(--fs-border-width);
204
+ }
205
+
198
206
  &[data-fs-shipping-connector-status="completed"] {
199
207
  background-color: var(--fs-order-status-connector-completed-color);
200
208
  }
@@ -213,7 +221,15 @@
213
221
  }
214
222
  }
215
223
 
224
+ [data-fs-shipping-status="completed"] + [data-fs-shipping-step]:not([data-fs-shipping-status="completed"]) {
225
+ [data-fs-shipping-connector] { background-color: var(--fs-color-neutral-4); }
226
+ }
227
+
216
228
  [data-fs-shipping-status="not-started"] {
229
+ [data-fs-shipping-step-icon]:not([data-fs-shipping-step-canceled]) {
230
+ border: var(--fs-order-status-step-icon-border);
231
+ }
232
+
217
233
  [data-fs-shipping-step-label] {
218
234
  color: var(--fs-order-status-step-not-started-color);
219
235
  }
@@ -45,19 +45,11 @@ export function useConnectorPositioning(
45
45
  if (isDesktop) {
46
46
  const containerGap = calculateContainerGap()
47
47
  connectors.forEach((connector) => {
48
- connector.style.top =
49
- 'calc(1rem + var(--fs-order-status-step-icon-margin) + var(--fs-order-status-step-icon-half-size))'
50
- connector.style.left =
51
- 'calc(50% + var(--fs-order-status-step-icon-half-size) + var(--fs-order-status-card-gap))'
52
48
  connector.style.width = `calc(((50% - var(--fs-order-status-step-icon-half-size) - var(--fs-order-status-card-gap)) * 2) + ${containerGap}px)`
53
49
  connector.style.height = 'var(--fs-border-width)'
54
50
  })
55
51
  } else {
56
52
  connectors.forEach((connector) => {
57
- connector.style.top =
58
- 'calc(50% + var(--fs-order-status-step-icon-half-size) + var(--fs-order-status-connector-spacing))'
59
- connector.style.left =
60
- 'calc(var(--fs-spacing-2) + var(--fs-order-status-step-icon-half-size) + var(--fs-order-status-step-icon-margin))'
61
53
  connector.style.width = 'var(--fs-border-width)'
62
54
  connector.style.height =
63
55
  'calc((50% - var(--fs-order-status-step-icon-half-size)) + var(--fs-order-status-card-gap) + (50% - var(--fs-order-status-step-icon-half-size)) - (var(--fs-order-status-connector-spacing) * 2))'
@@ -40,8 +40,6 @@
40
40
  // Structural Styles
41
41
  // --------------------------------------------------------
42
42
 
43
- padding: var(--fs-order-details-padding);
44
-
45
43
  @include media (">=notebook") {
46
44
  --fs-order-details-padding : 0;
47
45
  }
@@ -73,6 +71,7 @@
73
71
  [data-fs-order-details-header-back-button] {
74
72
  flex-shrink: 0;
75
73
  margin-top: calc(var(--fs-spacing-2) * -1); // Align the back button with the title
74
+ margin-left: calc(var(--fs-spacing-2) * -1); // Align the back button with the content
76
75
 
77
76
  @include media(">=notebook") {
78
77
  margin-top: calc(var(--fs-spacing-1) * -1); // Align the back button with the title
@@ -96,7 +95,7 @@
96
95
  font-weight: var(--fs-order-details-header-weight);
97
96
  line-height: var(--fs-order-details-header-line-height);
98
97
 
99
- @include truncate-title(1);
98
+ @include truncate-title(2);
100
99
  }
101
100
  }
102
101
  }
@@ -1,89 +1,5 @@
1
1
  @layer components {
2
2
  .section {
3
- [data-fs-account-profile-header] {
4
- padding-block: var(--fs-spacing-6);
5
- padding-inline: var(--fs-spacing-11);
6
- }
7
-
8
- [data-fs-account-profile-body] {
9
- padding-inline: var(--fs-spacing-11);
10
- }
11
-
12
- [data-fs-account-profile-title] {
13
- font-family: var(--fs-text-face-title);
14
- font-size: var(--fs-text-size-4);
15
- font-weight: var(--fs-text-weight-semibold);
16
- }
17
-
18
- [data-fs-account-profile-table] {
19
- display: grid;
20
- grid-template-columns: minmax(11.25rem, auto) 1fr;
21
- width: 100%;
22
- border-spacing: 0;
23
- border-collapse: collapse;
24
- }
25
-
26
- [data-fs-account-profile-table-body] {
27
- display: contents;
28
- gap: var(--fs-spacing-1);
29
- }
30
-
31
- [data-fs-account-profile-table-row] {
32
- display: contents;
33
-
34
- &:last-child {
35
- > [data-fs-account-profile-table-heading] {
36
- border-bottom: none;
37
- }
38
-
39
- > [data-fs-account-profile-table-data] {
40
- border-bottom: none;
41
- }
42
- }
43
- }
44
-
45
- [data-fs-account-profile-table-heading] {
46
- padding-block: var(--fs-spacing-4);
47
- font-family: var(--fs-text-face-body);
48
- font-size: var(--fs-text-size-2);
49
- font-weight: var(--fs-text-weight-regular);
50
- color: var(--fs-color-text-light);
51
- text-align: left;
52
- border-bottom: var(--fs-border-width) solid var(--fs-border-color-light);
53
- }
54
-
55
- [data-fs-account-profile-table-data] {
56
- padding-block: var(--fs-spacing-4);
57
- padding-inline: var(--fs-spacing-1);
58
- font-family: var(--fs-text-face-body);
59
- font-size: var(--fs-text-size-2);
60
- font-weight: var(--fs-text-weight-regular);
61
- color: var(--fs-color-text);
62
- border-bottom: var(--fs-border-width) solid var(--fs-border-color-light);
63
- }
64
-
65
- @include media("<notebook") {
66
- [data-fs-account-profile-header] {
67
- padding-inline: var(--fs-spacing-4);
68
- }
69
-
70
- [data-fs-account-profile-body] {
71
- padding-inline: var(--fs-spacing-4);
72
- }
73
-
74
- [data-fs-account-profile-table] {
75
- grid-template-columns: 1fr;
76
- }
77
-
78
- [data-fs-account-profile-table-heading] {
79
- padding-block: var(--fs-spacing-4) 0;
80
- border-bottom: none;
81
- }
82
-
83
- [data-fs-account-profile-table-data] {
84
- padding-block: var(--fs-spacing-1) var(--fs-spacing-4);
85
- padding-inline: 0;
86
- }
87
- }
3
+ @import "../components/MyAccountTable/styles.scss";
88
4
  }
89
5
  }
@@ -1,3 +1,6 @@
1
+ import { Link } from '@faststore/ui'
2
+ import AccountTable from '../components/MyAccountTable'
3
+ import AccountHeader from '../components/MyAccountHeader'
1
4
  import { strings } from './i18n'
2
5
  import styles from './profile.module.scss'
3
6
  import { useDateFormatter } from './use-date-formatter'
@@ -25,38 +28,28 @@ export function ProfileSection({
25
28
 
26
29
  return (
27
30
  <div data-fs-account-profile-section className={styles.section}>
28
- <header data-fs-account-profile-header>
29
- <h1 data-fs-account-profile-title>{strings.profile}</h1>
30
- </header>
31
+ <AccountHeader pageTitle={strings.profile} />
31
32
  <section data-fs-account-profile-body>
32
- <table data-fs-account-profile-table>
33
- <tbody data-fs-account-profile-table-body>
34
- <tr data-fs-account-profile-table-row>
35
- <th data-fs-account-profile-table-heading>{strings.name}</th>
36
- <td data-fs-account-profile-table-data>{profile?.name}</td>
37
- </tr>
38
- <tr data-fs-account-profile-table-row>
39
- <th data-fs-account-profile-table-heading>{strings.email}</th>
40
- <td data-fs-account-profile-table-data>
41
- <a href={`mailto:${profile?.email}`}>{profile?.email}</a>
42
- </td>
43
- </tr>
44
- <tr data-fs-account-profile-table-row>
45
- <th data-fs-account-profile-table-heading>{strings.id}</th>
46
- <td data-fs-account-profile-table-data>{profile?.id}</td>
47
- </tr>
48
- {profile.createdDate && (
49
- <tr data-fs-account-profile-table-row>
50
- <th data-fs-account-profile-table-heading>
51
- {strings.createdDate}
52
- </th>
53
- <td data-fs-account-profile-table-data>
54
- {formatStringDate(profile.createdDate)}
55
- </td>
56
- </tr>
57
- )}
58
- </tbody>
59
- </table>
33
+ <AccountTable
34
+ rows={[
35
+ { heading: strings.name, data: profile?.name },
36
+ {
37
+ heading: strings.email,
38
+ data: (
39
+ <Link href={`mailto:${profile?.email}`}>{profile?.email}</Link>
40
+ ),
41
+ },
42
+ { heading: strings.id, data: profile?.id },
43
+ ...(profile?.createdDate
44
+ ? [
45
+ {
46
+ heading: strings.createdDate,
47
+ data: formatStringDate(profile.createdDate),
48
+ },
49
+ ]
50
+ : []),
51
+ ]}
52
+ />
60
53
  </section>
61
54
  </div>
62
55
  )
@@ -133,100 +133,98 @@ export const SecurityDrawer = ({
133
133
  </SlideOverHeader>
134
134
 
135
135
  <div data-fs-security-drawer-body>
136
- <div data-fs-security-drawer-body-form>
137
- <div data-fs-security-drawer-body-current-password>
138
- <Input
139
- data-fs-security-drawer-input
140
- id="security-drawer-input-current-password"
141
- type={showCurrentPassword ? 'text' : 'password'}
142
- placeholder="Current Password"
143
- inputMode="text"
144
- value={currentPassword}
145
- onChange={(e) => {
146
- setFormError(null)
147
- setCurrentPassword(e.target.value)
148
- }}
149
- />
150
- <IconButton
151
- data-fs-security-drawer-input-password-toggle
152
- size="small"
153
- aria-label="Show Password"
154
- onClick={() => setShowCurrentPassword((prev) => !prev)}
155
- icon={
156
- showCurrentPassword ? (
157
- <Icon name="EyeSlash" />
158
- ) : (
159
- <Icon name="Eye" />
160
- )
161
- }
162
- />
163
- </div>
136
+ <div data-fs-security-drawer-body-password>
137
+ <Input
138
+ data-fs-security-drawer-input
139
+ id="security-drawer-input-current-password"
140
+ type={showCurrentPassword ? 'text' : 'password'}
141
+ placeholder="Current Password"
142
+ inputMode="text"
143
+ value={currentPassword}
144
+ onChange={(e) => {
145
+ setFormError(null)
146
+ setCurrentPassword(e.target.value)
147
+ }}
148
+ />
149
+ <IconButton
150
+ data-fs-security-drawer-input-password-toggle
151
+ size="small"
152
+ aria-label="Show Password"
153
+ onClick={() => setShowCurrentPassword((prev) => !prev)}
154
+ icon={
155
+ showCurrentPassword ? (
156
+ <Icon name="EyeSlash" />
157
+ ) : (
158
+ <Icon name="Eye" />
159
+ )
160
+ }
161
+ />
162
+ </div>
164
163
 
165
- <div data-fs-security-drawer-body-new-password>
166
- <Input
167
- data-fs-security-drawer-input
168
- id="security-drawer-input-new-password"
169
- type={showNewPassword ? 'text' : 'password'}
170
- placeholder="New Password"
171
- inputMode="text"
172
- value={newPassword}
173
- onChange={(e) => {
174
- setFormError(null)
175
- setNewPassword(e.target.value)
176
- }}
177
- />
178
- <IconButton
179
- data-fs-security-drawer-input-password-toggle
180
- size="small"
181
- aria-label="Show Password"
182
- onClick={() => setShowNewPassword((prev) => !prev)}
183
- icon={
184
- showNewPassword ? <Icon name="EyeSlash" /> : <Icon name="Eye" />
185
- }
164
+ <div data-fs-security-drawer-body-password>
165
+ <Input
166
+ data-fs-security-drawer-input
167
+ id="security-drawer-input-new-password"
168
+ type={showNewPassword ? 'text' : 'password'}
169
+ placeholder="New Password"
170
+ inputMode="text"
171
+ value={newPassword}
172
+ onChange={(e) => {
173
+ setFormError(null)
174
+ setNewPassword(e.target.value)
175
+ }}
176
+ />
177
+ <IconButton
178
+ data-fs-security-drawer-input-password-toggle
179
+ size="small"
180
+ aria-label="Show Password"
181
+ onClick={() => setShowNewPassword((prev) => !prev)}
182
+ icon={
183
+ showNewPassword ? <Icon name="EyeSlash" /> : <Icon name="Eye" />
184
+ }
185
+ />
186
+ </div>
187
+
188
+ {formError && (
189
+ <div data-fs-security-drawer-error>
190
+ <Icon
191
+ width={20}
192
+ height={20}
193
+ name="CircleWavyWarning"
194
+ data-fs-security-drawer-error-icon
186
195
  />
196
+ <span>{formError}</span>
187
197
  </div>
188
-
189
- {formError && (
190
- <div data-fs-security-drawer-error>
191
- <Icon
192
- width={20}
193
- height={20}
194
- name="CircleWavyWarning"
195
- data-fs-security-drawer-error-icon
196
- />
197
- <span>{formError}</span>
198
- </div>
199
- )}
200
-
201
- {newPassword.length > 0 && (
202
- <div data-fs-security-drawer-input-password-rules-container>
203
- <p data-fs-security-drawer-input-password-rules-title>
204
- Your password must have at least:
205
- </p>
206
-
207
- <ul data-fs-security-drawer-input-password-rules-list>
208
- {newPasswordValidations.map((rule, index) => (
209
- <li
210
- key={index}
211
- data-fs-security-drawer-input-password-rule-item
212
- data-status={rule.isValid ? 'success' : 'error'}
213
- >
214
- <Icon
215
- name={rule.isValid ? 'CheckCircle' : 'XCircle'}
216
- width={20}
217
- height={20}
218
- />
219
- {rule.label}
220
- </li>
221
- ))}
222
- </ul>
223
- </div>
224
- )}
225
- </div>
198
+ )}
199
+
200
+ {newPassword.length > 0 && (
201
+ <div data-fs-security-drawer-password-rules-container>
202
+ <p data-fs-security-drawer-password-rules-title>
203
+ Your password must have at least:
204
+ </p>
205
+
206
+ <ul data-fs-security-drawer-password-rules-list>
207
+ {newPasswordValidations.map((rule, index) => (
208
+ <li
209
+ key={index}
210
+ data-fs-security-drawer-password-rule-item
211
+ data-status={rule.isValid ? 'success' : 'error'}
212
+ >
213
+ <Icon
214
+ name={rule.isValid ? 'CheckCircle' : 'XCircle'}
215
+ width={20}
216
+ height={20}
217
+ />
218
+ {rule.label}
219
+ </li>
220
+ ))}
221
+ </ul>
222
+ </div>
223
+ )}
226
224
  </div>
227
225
 
228
226
  <footer data-fs-security-drawer-footer>
229
- <Button variant="tertiary" onClick={handleClose}>
227
+ <Button variant="secondary" onClick={handleClose}>
230
228
  Cancel
231
229
  </Button>
232
230
 
@@ -1,6 +1,9 @@
1
1
  import { useState } from 'react'
2
2
  import { Button } from '@faststore/ui'
3
3
 
4
+ import AccountTable from '../components/MyAccountTable'
5
+ import AccountHeader from '../components/MyAccountHeader'
6
+
4
7
  import { SecurityDrawer } from './SecurityDrawer'
5
8
  import styles from './styles.module.scss'
6
9
 
@@ -23,28 +26,28 @@ export const SecuritySection = ({
23
26
  )}
24
27
 
25
28
  <section data-fs-securiry-section className={styles.section}>
26
- <header data-fs-security-header>
27
- <h1 data-fs-security-title>Security</h1>
28
- </header>
29
+ <AccountHeader pageTitle="Security" />
29
30
 
30
31
  <div data-fs-security-container>
31
- <table data-fs-security-table>
32
- <tbody data-fs-security-table-body>
33
- <tr data-fs-security-table-row>
34
- <th data-fs-security-table-heading>Password</th>
35
- <td data-fs-security-table-data>
36
- <span data-fs-security-table-data-text>••••••••••</span>
37
- <Button
38
- variant="tertiary"
39
- data-fs-security-table-action-button
40
- onClick={() => setIsDrawerOpen(true)}
41
- >
42
- Reset password
43
- </Button>
44
- </td>
45
- </tr>
46
- </tbody>
47
- </table>
32
+ <AccountTable
33
+ rows={[
34
+ {
35
+ heading: 'Password',
36
+ data: (
37
+ <>
38
+ <span data-fs-security-table-data-text>••••••••••</span>
39
+ <Button
40
+ variant="tertiary"
41
+ data-fs-security-table-action-button
42
+ onClick={() => setIsDrawerOpen(true)}
43
+ >
44
+ Reset password
45
+ </Button>
46
+ </>
47
+ ),
48
+ },
49
+ ]}
50
+ />
48
51
  </div>
49
52
  </section>
50
53
  </>