@vtex/faststore-plugin-buyer-portal 1.1.87 → 1.1.88
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.
- package/CHANGELOG.md +39 -28
- package/package.json +1 -1
- package/src/features/addresses/components/AddressForm/AddressForm.tsx +72 -41
- package/src/features/addresses/data/USA.ts +69 -64
- package/src/features/addresses/data/countries.ts +6 -1
- package/src/features/addresses/data/states.ts +4 -2
- package/src/features/addresses/layouts/AddressDetailsLayout/AddressDetailsLayout.tsx +10 -1
- package/src/features/addresses/utils/index.ts +1 -0
- package/src/features/addresses/utils/stateUtils.ts +63 -0
- package/src/features/budgets/components/BudgetAddForm/budget-add-form.scss +9 -3
- package/src/features/budgets/components/BudgetAllocationsSelection/budget-allocations-selection.scss +2 -2
- package/src/features/budgets/components/BudgetAllocationsTable/budget-allocations-table.scss +29 -0
- package/src/features/budgets/components/BudgetDeleteDrawer/budget-delete-drawer.scss +13 -0
- package/src/features/budgets/components/BudgetRemainingBalance/BudgetRemainingBalance.tsx +5 -1
- package/src/features/budgets/components/BudgetRemainingBalance/budget-remaining-balance.scss +18 -1
- package/src/features/budgets/components/BudgetSettingsInfo/budget-settings-info.scss +19 -0
- package/src/features/budgets/components/BudgetsTable/BudgetsTable.tsx +12 -2
- package/src/features/budgets/components/BudgetsTable/budgets-table.scss +30 -1
- package/src/features/budgets/components/CreateBudgetAllocationDrawer/create-budget-allocation-drawer.scss +22 -6
- package/src/features/budgets/components/CreateBudgetDrawer/create-budget-drawer.scss +15 -6
- package/src/features/budgets/components/DeleteBudgetAllocationDrawer/delete-budget-allocations.scss +15 -1
- package/src/features/budgets/components/EditBudgetDrawer/edit-budget-drawer.scss +11 -1
- package/src/features/budgets/layouts/BudgetsDetailsLayout/BudgetsDetailsLayout.tsx +76 -75
- package/src/features/budgets/layouts/BudgetsDetailsLayout/budget-details-layout.scss +22 -19
- package/src/features/budgets/layouts/BudgetsLayout/budgets-layout.scss +6 -0
- package/src/features/buying-policies/components/BasicBuyingPolicyDrawer/basic-buying-policy-drawer.scss +4 -0
- package/src/features/buying-policies/layouts/BuyingPoliciesLayout/buying-policies-layout.scss +41 -6
- package/src/features/buying-policies/layouts/BuyingPolicyDetailsLayout/BuyingPolicyDetailsLayout.tsx +1 -1
- package/src/features/buying-policies/layouts/BuyingPolicyDetailsLayout/buying-policy-details-layout.scss +17 -1
- package/src/features/payment-methods/components/AddPaymentMethodsDrawer/AddPaymentMethodsDrawer.tsx +93 -68
- package/src/features/payment-methods/components/AddPaymentMethodsDrawer/add-payment-methods-drawer.scss +66 -30
- package/src/features/payment-methods/components/SearchPaymentMethods/SearchPaymentMethods.tsx +6 -4
- package/src/features/payment-methods/components/SearchPaymentMethods/search-payment-methods.scss +3 -0
- package/src/features/payment-methods/layouts/PaymentMethodsLayout/PaymentMethodsLayout.tsx +65 -54
- package/src/features/payment-methods/layouts/PaymentMethodsLayout/payment-methods-layout.scss +121 -103
- package/src/features/shared/components/CustomDropdown/custom-dropdown.scss +5 -0
- package/src/features/shared/components/Pagination/Pagination.tsx +18 -8
- package/src/features/shared/components/Pagination/pagination.scss +14 -0
- package/src/features/shared/layouts/BaseTabsLayout/sidebar-drawer/sidebar-drawer.scss +5 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,62 +7,73 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Added responsiveness to the Payment Methods list.
|
|
13
|
+
- Implemented responsiveness across all drawers in the Payment Methods flow.
|
|
14
|
+
- Ensured responsive behavior for toasts and empty states.
|
|
15
|
+
|
|
10
16
|
### Fixed
|
|
11
|
-
|
|
17
|
+
|
|
18
|
+
- Allow creation of user with no roles
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- Responsiviness to Buying policies page
|
|
12
23
|
|
|
13
24
|
### Added
|
|
14
25
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
26
|
+
- Credit card page responsiveness
|
|
27
|
+
- Change for the store title based on the SEO
|
|
17
28
|
|
|
18
29
|
### Added
|
|
19
30
|
|
|
20
|
-
-
|
|
31
|
+
- Standardization the sidebar menu throughout the navigation of the Organizational Account, regardless of the context.
|
|
21
32
|
|
|
22
33
|
### Fixed
|
|
23
34
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
35
|
+
- Fix geoCordinate to be geoCoordinates
|
|
36
|
+
- Adjusts in Credit Card's experience
|
|
37
|
+
- Create a custom dropdown for Buying Policy criteria
|
|
27
38
|
|
|
28
39
|
### Added
|
|
29
40
|
|
|
30
|
-
-
|
|
41
|
+
- Send credentials
|
|
31
42
|
|
|
32
43
|
### Added
|
|
33
44
|
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
45
|
+
- Roles and Role Details Screen
|
|
46
|
+
- Role Integration on Users
|
|
47
|
+
- Setup lint
|
|
48
|
+
- Add default values for Credit Cards
|
|
38
49
|
|
|
39
50
|
### changed
|
|
40
51
|
|
|
41
|
-
-
|
|
52
|
+
- BFF API URLs
|
|
42
53
|
|
|
43
54
|
### added
|
|
44
55
|
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
56
|
+
- Address Recipients Add & Delete Feature
|
|
57
|
+
- Address Recipients Edit Feature
|
|
58
|
+
- Add Buying Policy integration with BFF
|
|
59
|
+
- Add default values for Address
|
|
49
60
|
|
|
50
61
|
### Fixed
|
|
51
62
|
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
63
|
+
- UserData accepts undefined e-mail
|
|
64
|
+
- Fix styles
|
|
65
|
+
- Fix Address Recipients bff path
|
|
55
66
|
|
|
56
67
|
### Added
|
|
57
68
|
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
69
|
+
- Add Buying Policies Page
|
|
70
|
+
- Add Buying Policy Details Page
|
|
71
|
+
- Add Buying Policy Drawers
|
|
72
|
+
- Add Buying Policy Integrations
|
|
73
|
+
- Add Pagination Tools
|
|
74
|
+
- Add Address Pagination
|
|
64
75
|
|
|
65
76
|
### Added
|
|
66
77
|
|
|
67
|
-
-
|
|
68
|
-
-
|
|
78
|
+
- Add CHANGELOG file
|
|
79
|
+
- Add README file
|
package/package.json
CHANGED
|
@@ -9,10 +9,17 @@ import {
|
|
|
9
9
|
} from "../../../shared/components";
|
|
10
10
|
import { useBuyerPortal } from "../../../shared/hooks";
|
|
11
11
|
import { maskPostalCode } from "../../../shared/utils/postalCode";
|
|
12
|
-
import { CountryOptions } from "../../data/countries";
|
|
13
|
-
import { states as StateOptions } from "../../data/states";
|
|
12
|
+
import { CountryOptions, type CountryOption } from "../../data/countries";
|
|
14
13
|
import { useDebouncedSearchAddress } from "../../hooks/useDebouncedSearchAddress";
|
|
15
14
|
import { AddressData, AddressInput } from "../../types";
|
|
15
|
+
import {
|
|
16
|
+
getStateDisplayValue,
|
|
17
|
+
getStateSaveValue,
|
|
18
|
+
isStateSelected,
|
|
19
|
+
getStateDisplayOptions,
|
|
20
|
+
findStateByDisplayValue,
|
|
21
|
+
getStateDisplayFromCode,
|
|
22
|
+
} from "../../utils";
|
|
16
23
|
|
|
17
24
|
export type AddressFormProps = {
|
|
18
25
|
address: AddressInput;
|
|
@@ -42,7 +49,11 @@ export const AddressForm = ({
|
|
|
42
49
|
}: AddressFormProps) => {
|
|
43
50
|
const addressTypeOptions = ["Shipping", "Billing"];
|
|
44
51
|
const { currentOrgUnit } = useBuyerPortal();
|
|
45
|
-
|
|
52
|
+
const [selectedState, setSelectedState] = useState(
|
|
53
|
+
address.state
|
|
54
|
+
? getStateDisplayFromCode(address.countryCode || "", address.state)
|
|
55
|
+
: ""
|
|
56
|
+
);
|
|
46
57
|
const [autoCompleteAddressName, setAutoCompleteAddressName] = useState("");
|
|
47
58
|
|
|
48
59
|
const { searchedAddresses } = useDebouncedSearchAddress(
|
|
@@ -66,6 +77,16 @@ export const AddressForm = ({
|
|
|
66
77
|
|
|
67
78
|
const hideLabel = isEdit || fixedType;
|
|
68
79
|
|
|
80
|
+
const handleCountrySelect = (option: CountryOption) => {
|
|
81
|
+
setAddress({
|
|
82
|
+
...address,
|
|
83
|
+
country: option.name,
|
|
84
|
+
countryCode: option.id,
|
|
85
|
+
state: "",
|
|
86
|
+
});
|
|
87
|
+
setSelectedState("");
|
|
88
|
+
};
|
|
89
|
+
|
|
69
90
|
return (
|
|
70
91
|
<>
|
|
71
92
|
{!useExistingAddress ? (
|
|
@@ -79,26 +100,18 @@ export const AddressForm = ({
|
|
|
79
100
|
value={address.country}
|
|
80
101
|
options={CountryOptions}
|
|
81
102
|
shouldCloseOnSelect
|
|
82
|
-
onConfirmKeyPress={(option) =>
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
country: option.name,
|
|
86
|
-
countryCode: option.id,
|
|
87
|
-
})
|
|
88
|
-
}
|
|
103
|
+
onConfirmKeyPress={(option) => {
|
|
104
|
+
handleCountrySelect(option);
|
|
105
|
+
}}
|
|
89
106
|
renderOption={(option, index) => (
|
|
90
107
|
<AutocompleteDropdown.Item
|
|
91
108
|
key={option.id}
|
|
92
109
|
closeOnClick
|
|
93
110
|
index={index}
|
|
94
111
|
isSelected={address.country === option.name}
|
|
95
|
-
onClick={() =>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
country: option.name,
|
|
99
|
-
countryCode: option.id,
|
|
100
|
-
})
|
|
101
|
-
}
|
|
112
|
+
onClick={() => {
|
|
113
|
+
handleCountrySelect(option);
|
|
114
|
+
}}
|
|
102
115
|
>
|
|
103
116
|
{option?.name}
|
|
104
117
|
{address.country === option?.name && (
|
|
@@ -218,32 +231,50 @@ export const AddressForm = ({
|
|
|
218
231
|
data-fs-bp-create-address-state-selector
|
|
219
232
|
label="State"
|
|
220
233
|
className="address-state"
|
|
221
|
-
value={
|
|
222
|
-
options={
|
|
223
|
-
address.countryCode ? StateOptions[address.countryCode] : []
|
|
224
|
-
}
|
|
234
|
+
value={selectedState}
|
|
235
|
+
options={getStateDisplayOptions(address.countryCode || "")}
|
|
225
236
|
shouldCloseOnSelect
|
|
226
|
-
onConfirmKeyPress={(option) =>
|
|
227
|
-
|
|
228
|
-
|
|
237
|
+
onConfirmKeyPress={(option) => {
|
|
238
|
+
const stateData = findStateByDisplayValue(
|
|
239
|
+
address.countryCode || "",
|
|
240
|
+
option
|
|
241
|
+
);
|
|
242
|
+
if (stateData) {
|
|
243
|
+
setSelectedState(option);
|
|
244
|
+
setAddress({ ...address, state: getStateSaveValue(stateData) });
|
|
245
|
+
}
|
|
246
|
+
}}
|
|
229
247
|
disabled={!address.countryCode}
|
|
230
|
-
renderOption={(option, index) =>
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
248
|
+
renderOption={(option, index) => {
|
|
249
|
+
const stateData = findStateByDisplayValue(
|
|
250
|
+
address.countryCode || "",
|
|
251
|
+
option
|
|
252
|
+
);
|
|
253
|
+
const isSelected = stateData
|
|
254
|
+
? isStateSelected(address.state, stateData)
|
|
255
|
+
: false;
|
|
256
|
+
|
|
257
|
+
return (
|
|
258
|
+
<AutocompleteDropdown.Item
|
|
259
|
+
key={`${option}-${index}`}
|
|
260
|
+
closeOnClick
|
|
261
|
+
index={index}
|
|
262
|
+
isSelected={isSelected}
|
|
263
|
+
onClick={() => {
|
|
264
|
+
if (stateData) {
|
|
265
|
+
setSelectedState(getStateDisplayValue(stateData));
|
|
266
|
+
setAddress({
|
|
267
|
+
...address,
|
|
268
|
+
state: getStateSaveValue(stateData),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}}
|
|
272
|
+
>
|
|
273
|
+
{option}
|
|
274
|
+
{isSelected && <Icon name="Check" width={12} height={12} />}
|
|
275
|
+
</AutocompleteDropdown.Item>
|
|
276
|
+
);
|
|
277
|
+
}}
|
|
247
278
|
/>
|
|
248
279
|
|
|
249
280
|
<InputText
|
|
@@ -1,65 +1,70 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
1
|
+
export type StateOption = {
|
|
2
|
+
code: string;
|
|
3
|
+
name: string;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export const states: StateOption[] = [
|
|
7
|
+
{ code: "AL", name: "Alabama" },
|
|
8
|
+
{ code: "AK", name: "Alaska" },
|
|
9
|
+
{ code: "AS", name: "American Samoa" },
|
|
10
|
+
{ code: "AZ", name: "Arizona" },
|
|
11
|
+
{ code: "AR", name: "Arkansas" },
|
|
12
|
+
{ code: "AA", name: "Armed Forces Americas" },
|
|
13
|
+
{ code: "AE", name: "Armed Forces Europe, the Middle East, and Canada" },
|
|
14
|
+
{ code: "AP", name: "Armed Forces Pacific" },
|
|
15
|
+
{ code: "CA", name: "California" },
|
|
16
|
+
{ code: "CO", name: "Colorado" },
|
|
17
|
+
{ code: "CT", name: "Connecticut" },
|
|
18
|
+
{ code: "DE", name: "Delaware" },
|
|
19
|
+
{ code: "DC", name: "District Of Columbia (Washington, D.C.)" },
|
|
20
|
+
{ code: "FM", name: "Federated States of Micronesia" },
|
|
21
|
+
{ code: "FL", name: "Florida" },
|
|
22
|
+
{ code: "GA", name: "Georgia" },
|
|
23
|
+
{ code: "GU", name: "Guam" },
|
|
24
|
+
{ code: "HI", name: "Hawaii" },
|
|
25
|
+
{ code: "ID", name: "Idaho" },
|
|
26
|
+
{ code: "IL", name: "Illinois" },
|
|
27
|
+
{ code: "IN", name: "Indiana" },
|
|
28
|
+
{ code: "IA", name: "Iowa" },
|
|
29
|
+
{ code: "KS", name: "Kansas" },
|
|
30
|
+
{ code: "KY", name: "Kentucky" },
|
|
31
|
+
{ code: "LA", name: "Louisiana" },
|
|
32
|
+
{ code: "ME", name: "Maine" },
|
|
33
|
+
{ code: "MH", name: "Marshall Islands" },
|
|
34
|
+
{ code: "MD", name: "Maryland" },
|
|
35
|
+
{ code: "MA", name: "Massachusetts" },
|
|
36
|
+
{ code: "MI", name: "Michigan" },
|
|
37
|
+
{ code: "MN", name: "Minnesota" },
|
|
38
|
+
{ code: "MS", name: "Mississippi" },
|
|
39
|
+
{ code: "MO", name: "Missouri" },
|
|
40
|
+
{ code: "MT", name: "Montana" },
|
|
41
|
+
{ code: "NE", name: "Nebraska" },
|
|
42
|
+
{ code: "NV", name: "Nevada" },
|
|
43
|
+
{ code: "NH", name: "New Hampshire" },
|
|
44
|
+
{ code: "NJ", name: "New Jersey" },
|
|
45
|
+
{ code: "NM", name: "New Mexico" },
|
|
46
|
+
{ code: "NY", name: "New York" },
|
|
47
|
+
{ code: "NC", name: "North Carolina" },
|
|
48
|
+
{ code: "ND", name: "North Dakota" },
|
|
49
|
+
{ code: "MP", name: "Northern Mariana Islands" },
|
|
50
|
+
{ code: "OH", name: "Ohio" },
|
|
51
|
+
{ code: "OK", name: "Oklahoma" },
|
|
52
|
+
{ code: "OR", name: "Oregon" },
|
|
53
|
+
{ code: "PW", name: "Palau" },
|
|
54
|
+
{ code: "PA", name: "Pennsylvania" },
|
|
55
|
+
{ code: "PR", name: "Puerto Rico" },
|
|
56
|
+
{ code: "RI", name: "Rhode Island" },
|
|
57
|
+
{ code: "SC", name: "South Carolina" },
|
|
58
|
+
{ code: "SD", name: "South Dakota" },
|
|
59
|
+
{ code: "TN", name: "Tennessee" },
|
|
60
|
+
{ code: "TX", name: "Texas" },
|
|
61
|
+
{ code: "UM", name: "U.S. Minor Outlying Islands" },
|
|
62
|
+
{ code: "VI", name: "U.S. Virgin Islands" },
|
|
63
|
+
{ code: "UT", name: "Utah" },
|
|
64
|
+
{ code: "VT", name: "Vermont" },
|
|
65
|
+
{ code: "VA", name: "Virginia" },
|
|
66
|
+
{ code: "WA", name: "Washington" },
|
|
67
|
+
{ code: "WV", name: "West Virginia" },
|
|
68
|
+
{ code: "WI", name: "Wisconsin" },
|
|
69
|
+
{ code: "WY", name: "Wyoming" },
|
|
65
70
|
];
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type CountryOption = {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export const CountryOptions: CountryOption[] = [
|
|
2
7
|
{ id: "BRA", name: "Brazil" },
|
|
3
8
|
{ id: "USA", name: "United States of America" },
|
|
4
9
|
{ id: "CAN", name: "Canada" },
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { states as BRAStates } from "./BRA";
|
|
2
2
|
import { states as CANStates } from "./CAN";
|
|
3
3
|
import { states as MEXStates } from "./MEX";
|
|
4
|
-
import { states as USAStates } from "./USA";
|
|
4
|
+
import { states as USAStates, StateOption } from "./USA";
|
|
5
5
|
|
|
6
|
-
export
|
|
6
|
+
export type StateData = string | StateOption;
|
|
7
|
+
|
|
8
|
+
export const states: Record<string, StateData[]> = {
|
|
7
9
|
MEX: MEXStates,
|
|
8
10
|
BRA: BRAStates,
|
|
9
11
|
USA: USAStates,
|
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
} from "../../components";
|
|
23
23
|
import { AddressLocationsList } from "../../components/AddressLocationsList/AddressLocationsList";
|
|
24
24
|
import { AddressRecipientsList } from "../../components/AddressRecipientsList/AddressRecipientsList";
|
|
25
|
+
import { getStateDisplayFromCode } from "../../utils";
|
|
25
26
|
|
|
26
27
|
import type { AddressLocationsListRef } from "../../components/AddressLocationsList/AddressLocationsList";
|
|
27
28
|
import type { AddressRecipientsListRef } from "../../components/AddressRecipientsList/AddressRecipientsList";
|
|
@@ -154,6 +155,14 @@ export const AddressDetailsLayout = ({
|
|
|
154
155
|
{props
|
|
155
156
|
.filter((prop) => addressData[prop])
|
|
156
157
|
.map((prop, index) => {
|
|
158
|
+
const displayValue =
|
|
159
|
+
prop === "state"
|
|
160
|
+
? getStateDisplayFromCode(
|
|
161
|
+
addressData.country || "",
|
|
162
|
+
addressData[prop] as string
|
|
163
|
+
)
|
|
164
|
+
: addressData[prop];
|
|
165
|
+
|
|
157
166
|
return (
|
|
158
167
|
<div
|
|
159
168
|
key={prop}
|
|
@@ -164,7 +173,7 @@ export const AddressDetailsLayout = ({
|
|
|
164
173
|
{addressLabelToPropMapping[prop]}
|
|
165
174
|
</span>
|
|
166
175
|
<span data-fs-address-details-info-line-value>
|
|
167
|
-
{
|
|
176
|
+
{displayValue}
|
|
168
177
|
</span>
|
|
169
178
|
</div>
|
|
170
179
|
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./stateUtils";
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { states as StateOptions, StateData } from "../data/states";
|
|
2
|
+
import { StateOption } from "../data/USA";
|
|
3
|
+
|
|
4
|
+
export const getStateDisplayValue = (stateData: StateData): string => {
|
|
5
|
+
return typeof stateData === "string" ? stateData : stateData.name;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const getStateSaveValue = (stateData: StateData): string => {
|
|
9
|
+
return typeof stateData === "string" ? stateData : stateData.code;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const isStateSelected = (
|
|
13
|
+
currentState: string,
|
|
14
|
+
stateData: StateData
|
|
15
|
+
): boolean => {
|
|
16
|
+
const saveValue = getStateSaveValue(stateData);
|
|
17
|
+
return currentState.toLowerCase() === saveValue.toLowerCase();
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const getStateDisplayOptions = (countryCode: string): string[] => {
|
|
21
|
+
if (!countryCode || !StateOptions[countryCode]) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
return StateOptions[countryCode].map(getStateDisplayValue);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const getStateOptions = (countryCode: string): StateData[] => {
|
|
28
|
+
if (!countryCode || !StateOptions[countryCode]) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
return StateOptions[countryCode];
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const findStateByDisplayValue = (
|
|
35
|
+
countryCode: string,
|
|
36
|
+
displayValue: string
|
|
37
|
+
): StateData | undefined => {
|
|
38
|
+
const stateOptions = getStateOptions(countryCode);
|
|
39
|
+
return stateOptions.find(
|
|
40
|
+
(state) => getStateDisplayValue(state) === displayValue
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const getStateDisplayFromCode = (
|
|
45
|
+
countryCode: string,
|
|
46
|
+
stateCode: string
|
|
47
|
+
): string => {
|
|
48
|
+
if (!countryCode || !stateCode || !StateOptions[countryCode]) {
|
|
49
|
+
return stateCode;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const stateOptions = StateOptions[countryCode];
|
|
53
|
+
|
|
54
|
+
if (countryCode === "USA") {
|
|
55
|
+
const stateOption = stateOptions.find((state) => {
|
|
56
|
+
const option = state as StateOption;
|
|
57
|
+
return option.code?.toLowerCase() === stateCode.toLowerCase();
|
|
58
|
+
});
|
|
59
|
+
return stateOption ? getStateDisplayValue(stateOption) : stateCode;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return stateCode;
|
|
63
|
+
};
|
|
@@ -12,10 +12,14 @@
|
|
|
12
12
|
}
|
|
13
13
|
[data-fs-bp-create-budget-drawer-row-section] {
|
|
14
14
|
display: flex;
|
|
15
|
-
flex-direction:
|
|
15
|
+
flex-direction: column;
|
|
16
16
|
width: 100%;
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
@include media(">=notebook") {
|
|
19
|
+
align-items: center;
|
|
20
|
+
flex-direction: row;
|
|
21
|
+
gap: var(--fs-spacing-3);
|
|
22
|
+
}
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
[data-fs-bp-create-budget-drawer-data-section] {
|
|
@@ -26,6 +30,8 @@
|
|
|
26
30
|
[data-fs-bp-create-budget-renew] {
|
|
27
31
|
margin-top: var(--fs-spacing-4);
|
|
28
32
|
justify-content: space-between;
|
|
33
|
+
flex-direction: row;
|
|
34
|
+
|
|
29
35
|
[data-fs-bp-create-budget-renew-label] {
|
|
30
36
|
font-weight: var(--fs-text-weight-regular);
|
|
31
37
|
font-size: var(--fs-text-size-1);
|
package/src/features/budgets/components/BudgetAllocationsSelection/budget-allocations-selection.scss
CHANGED
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
[data-fs-table-row="true"] {
|
|
117
117
|
[data-fs-table-cell="header"] {
|
|
118
118
|
height: var(--fs-spacing-6);
|
|
119
|
-
padding: 0;
|
|
119
|
+
padding: 0 var(--fs-spacing-1);
|
|
120
120
|
|
|
121
121
|
font-weight: var(--fs-text-weight-regular);
|
|
122
122
|
color: #5c5c5c;
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
font-weight: var(--fs-text-weight-medium);
|
|
143
143
|
color: #1f1f1f;
|
|
144
144
|
font-size: var(--fs-text-size-1);
|
|
145
|
-
padding:
|
|
145
|
+
padding: var(--fs-spacing-1);
|
|
146
146
|
|
|
147
147
|
&:nth-child(1) {
|
|
148
148
|
width: var(--fs-spacing-6);
|
package/src/features/budgets/components/BudgetAllocationsTable/budget-allocations-table.scss
CHANGED
|
@@ -70,6 +70,12 @@
|
|
|
70
70
|
margin-bottom: var(--fs-spacing-4);
|
|
71
71
|
justify-content: space-between;
|
|
72
72
|
align-items: center;
|
|
73
|
+
|
|
74
|
+
@include media("<tablet") {
|
|
75
|
+
[data-fs-buyer-portal-internal-search] {
|
|
76
|
+
width: 100%;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
73
79
|
}
|
|
74
80
|
|
|
75
81
|
[data-fs-bp-pagination-span] {
|
|
@@ -111,6 +117,10 @@
|
|
|
111
117
|
font-size: var(--fs-text-size-1);
|
|
112
118
|
padding: 0;
|
|
113
119
|
|
|
120
|
+
@include media("<tablet") {
|
|
121
|
+
padding: 0 var(--fs-spacing-1);
|
|
122
|
+
}
|
|
123
|
+
|
|
114
124
|
[data-fs-icon] {
|
|
115
125
|
display: inline-block;
|
|
116
126
|
|
|
@@ -145,6 +155,20 @@
|
|
|
145
155
|
}
|
|
146
156
|
}
|
|
147
157
|
|
|
158
|
+
[data-fs-table-cell] {
|
|
159
|
+
@include media("<tablet") {
|
|
160
|
+
display: none;
|
|
161
|
+
|
|
162
|
+
&:first-child {
|
|
163
|
+
display: flex;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
&:last-child {
|
|
167
|
+
display: table-cell;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
148
172
|
[data-fs-skeleton] {
|
|
149
173
|
display: inline-block;
|
|
150
174
|
}
|
|
@@ -154,5 +178,10 @@
|
|
|
154
178
|
width: 32rem;
|
|
155
179
|
text-align: center;
|
|
156
180
|
margin: 0 auto;
|
|
181
|
+
|
|
182
|
+
@include media("<tablet") {
|
|
183
|
+
width: 100%;
|
|
184
|
+
padding: var(--fs-spacing-4);
|
|
185
|
+
}
|
|
157
186
|
}
|
|
158
187
|
}
|
|
@@ -4,6 +4,19 @@
|
|
|
4
4
|
@import "../../../shared/components/InputText/input-text.scss";
|
|
5
5
|
@import "../../../shared/components/ErrorMessage/error-message.scss";
|
|
6
6
|
|
|
7
|
+
&[data-fs-bp-basic-drawer][data-fs-slide-over-size="partial"] {
|
|
8
|
+
width: 100%;
|
|
9
|
+
max-width: none;
|
|
10
|
+
|
|
11
|
+
@include media(">=tablet") {
|
|
12
|
+
max-width: 30rem;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@include media(">=notebook") {
|
|
16
|
+
max-width: 40rem;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
7
20
|
[data-fs-bp-basic-drawer-body] {
|
|
8
21
|
overflow-y: auto;
|
|
9
22
|
}
|
|
@@ -25,8 +25,12 @@ export const BudgetRemainingBalance = ({
|
|
|
25
25
|
of {formatCurrency(remaining)} used
|
|
26
26
|
</span>
|
|
27
27
|
</span>
|
|
28
|
+
<BudgetProgressBar
|
|
29
|
+
remaining={remaining}
|
|
30
|
+
total={total}
|
|
31
|
+
fullWidth={true}
|
|
32
|
+
/>
|
|
28
33
|
</div>
|
|
29
|
-
<BudgetProgressBar remaining={remaining} total={total} fullWidth={true} />
|
|
30
34
|
</div>
|
|
31
35
|
);
|
|
32
36
|
};
|