@weareconceptstudio/account 0.0.7 → 0.0.9
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/dist/AccountProvider.d.ts +4 -1
- package/dist/AccountProvider.js +9 -7
- package/dist/components/EmptyOrders/index.js +5 -4
- package/dist/components/OrderedItems/index.d.ts +1 -1
- package/dist/components/OrderedItems/index.js +4 -37
- package/dist/components/TotalCheckout/index.js +13 -18
- package/dist/components/TotalCheckout/style.js +0 -7
- package/dist/components/cart/EmptyCart/index.js +3 -3
- package/dist/components/cart/EmptyCart/style.js +1 -1
- package/dist/components/cart/Items/Simple/Item/index.js +12 -20
- package/dist/components/cart/Items/Simple/ItemMobile/index.js +13 -36
- package/dist/components/cart/Items/Simple/index.js +10 -9
- package/dist/components/cart/Items/Simple/style.js +14 -7
- package/dist/components/index.d.ts +0 -6
- package/dist/components/index.js +0 -6
- package/dist/components/ui/AccountButton/index.js +5 -2
- package/dist/components/ui/AccountButton/style.js +3 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/modules/address/AddressForm/index.js +44 -0
- package/dist/{components → modules/address}/AddressItem/index.d.ts +2 -4
- package/dist/{components → modules/address}/AddressItem/index.js +11 -11
- package/dist/modules/address/AddressProvider.d.ts +7 -0
- package/dist/modules/address/AddressProvider.js +57 -0
- package/dist/{components → modules/address}/AddressWrap/index.d.ts +3 -2
- package/dist/{components → modules/address}/AddressWrap/index.js +7 -7
- package/dist/modules/address/AddressesTemplate/index.d.ts +3 -0
- package/dist/modules/address/AddressesTemplate/index.js +11 -0
- package/dist/modules/address/SelectAddress/index.d.ts +6 -0
- package/dist/modules/address/SelectAddress/index.js +22 -0
- package/dist/modules/address/SelectAddress/style.d.ts +2 -0
- package/dist/modules/address/SelectAddress/style.js +68 -0
- package/dist/modules/address/SelectShippingBilling/index.d.ts +3 -0
- package/dist/modules/address/SelectShippingBilling/index.js +29 -0
- package/dist/modules/address/SelectShippingBillingPopup/index.d.ts +3 -0
- package/dist/modules/address/SelectShippingBillingPopup/index.js +25 -0
- package/dist/{components/SelectShippingBilling → modules/address/SelectShippingBillingPopup}/style.js +0 -43
- package/dist/modules/address/ShippingBillingForm/index.js +15 -0
- package/dist/modules/address/index.d.ts +9 -0
- package/dist/modules/address/index.js +9 -0
- package/dist/modules/index.d.ts +1 -0
- package/dist/modules/index.js +1 -0
- package/dist/templates/AccountSettingsTemplate/AccountInfo/index.js +1 -1
- package/dist/templates/AccountTemplate/index.js +1 -1
- package/dist/templates/AccountTemplate/style.js +0 -6
- package/dist/templates/CartTemplate/index.d.ts +1 -2
- package/dist/templates/CartTemplate/index.js +11 -8
- package/dist/templates/CheckoutTemplate/StepReview/index.d.ts +5 -0
- package/dist/templates/CheckoutTemplate/StepReview/index.js +16 -0
- package/dist/templates/CheckoutTemplate/StepShipping/index.d.ts +5 -0
- package/dist/templates/CheckoutTemplate/StepShipping/index.js +9 -0
- package/dist/templates/CheckoutTemplate/index.d.ts +2 -1
- package/dist/templates/CheckoutTemplate/index.js +29 -149
- package/dist/templates/CheckoutTemplate/style.js +9 -9
- package/dist/templates/OrderIndividualTemplate/index.js +1 -1
- package/dist/templates/index.d.ts +0 -1
- package/dist/templates/index.js +0 -1
- package/dist/translations/en.d.ts +72 -133
- package/dist/translations/en.js +84 -133
- package/dist/translations/hy.d.ts +74 -64
- package/dist/translations/hy.js +177 -155
- package/dist/translations/index.d.ts +218 -289
- package/dist/translations/ru.d.ts +72 -92
- package/dist/translations/ru.js +177 -185
- package/dist/utils/_functions.d.ts +0 -3
- package/dist/utils/_functions.js +0 -10
- package/package.json +1 -1
- package/dist/components/AddressForm/index.js +0 -99
- package/dist/components/FavoriteButton/index.d.ts +0 -3
- package/dist/components/FavoriteButton/index.js +0 -42
- package/dist/components/OrderedItems/ReviewPopup/index.d.ts +0 -0
- package/dist/components/OrderedItems/ReviewPopup/index.js +0 -202
- package/dist/components/OrderedItems/ReviewPopup/style.d.ts +0 -2
- package/dist/components/OrderedItems/ReviewPopup/style.js +0 -329
- package/dist/components/SelectShippingBilling/index.d.ts +0 -3
- package/dist/components/SelectShippingBilling/index.js +0 -31
- package/dist/components/ShippingBillingForm/index.js +0 -96
- package/dist/templates/AddressesTemplate/index.d.ts +0 -6
- package/dist/templates/AddressesTemplate/index.js +0 -9
- /package/dist/{components → modules/address}/AddressForm/index.d.ts +0 -0
- /package/dist/{components → modules/address}/AddressForm/style.d.ts +0 -0
- /package/dist/{components → modules/address}/AddressForm/style.js +0 -0
- /package/dist/{components → modules/address}/AddressItem/style.d.ts +0 -0
- /package/dist/{components → modules/address}/AddressItem/style.js +0 -0
- /package/dist/{templates → modules/address}/AddressesTemplate/style.d.ts +0 -0
- /package/dist/{templates → modules/address}/AddressesTemplate/style.js +0 -0
- /package/dist/{components → modules/address}/EmptyAddress/index.d.ts +0 -0
- /package/dist/{components → modules/address}/EmptyAddress/index.js +0 -0
- /package/dist/{components/SelectShippingBilling → modules/address/SelectShippingBillingPopup}/style.d.ts +0 -0
- /package/dist/{components → modules/address}/ShippingBillingForm/index.d.ts +0 -0
- /package/dist/{components → modules/address}/ShippingBillingForm/style.d.ts +0 -0
- /package/dist/{components → modules/address}/ShippingBillingForm/style.js +0 -0
- /package/dist/{components → modules/address}/ShippingBillingInfo/index.d.ts +0 -0
- /package/dist/{components → modules/address}/ShippingBillingInfo/index.js +0 -0
- /package/dist/{components → modules/address}/ShippingBillingInfo/style.d.ts +0 -0
- /package/dist/{components → modules/address}/ShippingBillingInfo/style.js +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React, { memo as Memo, useState, useCallback } from 'react';
|
|
2
|
+
import { useUi, Text } from '@weareconceptstudio/core';
|
|
3
|
+
import { FormBuilder } from '@weareconceptstudio/form';
|
|
4
|
+
import AccountButton from '../../../components/ui/AccountButton';
|
|
5
|
+
import { useTheme } from 'styled-components';
|
|
6
|
+
import theme from '../../../styles/theme';
|
|
7
|
+
//* Icons
|
|
8
|
+
import { CheckboxIcon, CheckboxCheckedIcon } from '../../../utils/icons';
|
|
9
|
+
//* Style
|
|
10
|
+
import AddressFormStyle from './style';
|
|
11
|
+
const AddressForm = Memo(({ title, data, formFields, type, createAddress, updateAddress }) => {
|
|
12
|
+
const globalTheme = useTheme();
|
|
13
|
+
const { closePopup } = useUi();
|
|
14
|
+
//! States
|
|
15
|
+
const [isChecked, setIsChecked] = useState(data?.is_default || false);
|
|
16
|
+
const [isDisabled, setIsDisabled] = useState(false);
|
|
17
|
+
//! On Finish
|
|
18
|
+
const onFinish = useCallback((values) => {
|
|
19
|
+
const newData = {
|
|
20
|
+
...values,
|
|
21
|
+
is_default: isChecked,
|
|
22
|
+
type,
|
|
23
|
+
};
|
|
24
|
+
setIsDisabled(true);
|
|
25
|
+
return (!isDisabled &&
|
|
26
|
+
eval(data?.id ? `updateAddress(newData, data.id)` : `createAddress(newData)`).then(() => {
|
|
27
|
+
closePopup();
|
|
28
|
+
}));
|
|
29
|
+
}, [data, isChecked, createAddress, updateAddress, isDisabled]);
|
|
30
|
+
return (React.createElement(AddressFormStyle, { theme: theme(globalTheme), className: 'address-form-block' },
|
|
31
|
+
React.createElement(Text, { tag: `h6`, text: title, className: `account-h6 account-font-bold account-primary-color1 address-form-block-title` }),
|
|
32
|
+
React.createElement(FormBuilder, { formOptions: {
|
|
33
|
+
initialValues: data,
|
|
34
|
+
}, onSubmit: onFinish, fields: formFields, className: 'form-wrapper' },
|
|
35
|
+
React.createElement("div", { className: `default-info-wrap` }, !data?.is_default ? (React.createElement("div", { className: `banner-wrap cursor-pointer`, onClick: () => setIsChecked(!isChecked) },
|
|
36
|
+
isChecked ? (React.createElement("div", { className: 'checkbox-wrap', role: 'button' },
|
|
37
|
+
React.createElement(CheckboxCheckedIcon, null))) : (React.createElement("div", { className: 'checkbox-wrap', role: 'button' },
|
|
38
|
+
React.createElement(CheckboxIcon, null))),
|
|
39
|
+
React.createElement(Text, { className: `account-p account-p2 account-font-medium account-primary-color1 address-form-is-default-checkbox`, text: `${type === 'shipping' ? 'makeYourDefaultShippingAddress' : type == 'billing' ? 'makeYourDefaultBillingAddress' : 'makeYourDefaultAddress'}` }))) : (React.createElement(Text, { className: `account-p account-p2 account-font-medium account-primary-color1 address-form-is-default`, text: `${type === 'shipping' ? 'thisYourDefaultShippingAddress' : type == 'billing' ? 'thisYourDefaultBillingAddress' : 'thisYourDefaultAddress'}` }))),
|
|
40
|
+
React.createElement("div", { className: `cancel-and-save-wrap` },
|
|
41
|
+
React.createElement(AccountButton, { text: `cancel`, onClick: closePopup, btnType: `green-large-text`, className: `address-form-cancel-btn` }),
|
|
42
|
+
React.createElement(AccountButton, { type: 'submit', text: `saveAndApply`, btnType: `full-width`, className: `address-form-cancel-submit ${isDisabled ? 'disabled' : ''}` })))));
|
|
43
|
+
});
|
|
44
|
+
export default AddressForm;
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
export default AddressItem;
|
|
2
|
-
declare function AddressItem({ title, data, checkout_review, select_address,
|
|
2
|
+
declare function AddressItem({ type, title, data, checkout_review, select_address, onClick }: {
|
|
3
|
+
type: any;
|
|
3
4
|
title: any;
|
|
4
5
|
data: any;
|
|
5
6
|
checkout_review: any;
|
|
6
7
|
select_address: any;
|
|
7
|
-
type: any;
|
|
8
8
|
onClick: any;
|
|
9
|
-
checkedId: any;
|
|
10
|
-
setCheckedId: any;
|
|
11
9
|
}): React.JSX.Element;
|
|
12
10
|
import React from 'react';
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import React, { useCallback } from 'react';
|
|
2
2
|
import { Text, useUi } from '@weareconceptstudio/core';
|
|
3
|
+
import { useAddressContext } from '../AddressProvider';
|
|
3
4
|
//* Components
|
|
4
5
|
import AddressForm from '../AddressForm';
|
|
5
|
-
import AccountButton from '
|
|
6
|
-
import WarningMessageForPopup from '
|
|
6
|
+
import AccountButton from '../../../components/ui/AccountButton';
|
|
7
|
+
import WarningMessageForPopup from '../../../components/ui/WarningMessageForPopup';
|
|
7
8
|
//* Style
|
|
8
9
|
import AddressItemStyle from './style';
|
|
9
|
-
const AddressItem = ({ title, data, checkout_review, select_address,
|
|
10
|
+
const AddressItem = ({ type, title, data, checkout_review, select_address, onClick }) => {
|
|
10
11
|
const { openPopup } = useUi();
|
|
12
|
+
const { formFields, createAddress, updateAddress, deleteAddress, selectedAddresses, setSelectedAddresses } = useAddressContext();
|
|
11
13
|
//! Handle Popups
|
|
12
14
|
const handleDeletePopup = useCallback(() => {
|
|
13
15
|
openPopup(React.createElement(WarningMessageForPopup, { isDelete: true, title: 'deleteAddressMessage', description: 'confirmDeleteAddress', onRemove: () => deleteAddress(data.id, data.type) }), { className: 'messagePopup' });
|
|
14
16
|
}, [data]);
|
|
15
17
|
const handleEditAddressPopup = useCallback(() => {
|
|
16
|
-
openPopup(React.createElement(AddressForm, {
|
|
18
|
+
openPopup(React.createElement(AddressForm, { title: type === 'billing' ? `updateYourBillingAddress` : type == 'shipping' ? `updateYourShippingAddress` : 'updateYourAddress', data: data, formFields: formFields, createAddress: createAddress, updateAddress: updateAddress }));
|
|
17
19
|
}, [data]);
|
|
18
|
-
//TODO:
|
|
19
|
-
const deleteAddress = () => { };
|
|
20
20
|
return (data && (React.createElement(AddressItemStyle, { className: `item-container` },
|
|
21
21
|
checkout_review && (React.createElement("div", { className: `change-address-wrap` },
|
|
22
22
|
React.createElement(Text, { className: `account-p account-p2 account-font-bold account-primary-color1`, text: title }),
|
|
@@ -26,11 +26,11 @@ const AddressItem = ({ title, data, checkout_review, select_address, type, onCli
|
|
|
26
26
|
React.createElement("div", { className: `personal-data-wrap` },
|
|
27
27
|
React.createElement(Text, { className: `account-p account-p3 account-font-bold account-primary-color1`, text: `${data.first_name} ${data.last_name}` }),
|
|
28
28
|
React.createElement(Text, { className: `account-p account-p3 account-font-regular account-primary-color1 col-wrap`, text: `${data.address_1}, ${data.address_2 ? data.address_2 + ',' : ''}` }),
|
|
29
|
-
React.createElement(Text, { className: `account-p account-p3 account-font-regular account-primary-color1`, text: `${data.
|
|
30
|
-
React.createElement(Text, { className: `account-p account-p3 account-font-regular account-primary-color1 phone col-wrap`, text: `${data.
|
|
31
|
-
data.is_default ? (React.createElement(Text, { className: `account-p account-p3 account-font-bold account-primary-color1 margin-style is-default`, text: `${type === 'shipping' ? 'defaultShippingAddress' : 'defaultBillingAddress'}` })) : (React.createElement(Text, { className: `account-p account-p3 account-font-bold account-primary-color1 margin-style opacity-zero`, text: `empty` })),
|
|
32
|
-
select_address && (React.createElement("div", { className: `circle-selected-wrap cursor-pointer ${
|
|
33
|
-
React.createElement("svg", { version: '1.1', viewBox: '0 0 32 32', xmlns: 'http://www.w3.org/2000/svg', className: `checkbox-icon ${
|
|
29
|
+
React.createElement(Text, { className: `account-p account-p3 account-font-regular account-primary-color1`, text: `${data.city}` }),
|
|
30
|
+
React.createElement(Text, { className: `account-p account-p3 account-font-regular account-primary-color1 phone col-wrap`, text: `${data.phone}` })),
|
|
31
|
+
data.is_default ? (React.createElement(Text, { className: `account-p account-p3 account-font-bold account-primary-color1 margin-style is-default`, text: `${type === 'shipping' ? 'defaultShippingAddress' : type == 'billing' ? 'defaultBillingAddress' : 'defaultAddress'}` })) : (React.createElement(Text, { className: `account-p account-p3 account-font-bold account-primary-color1 margin-style opacity-zero`, text: `empty` })),
|
|
32
|
+
select_address && (React.createElement("div", { className: `circle-selected-wrap cursor-pointer ${selectedAddresses?.id === data.id ? 'active' : ''}`, onClick: () => setSelectedAddresses(data) },
|
|
33
|
+
React.createElement("svg", { version: '1.1', viewBox: '0 0 32 32', xmlns: 'http://www.w3.org/2000/svg', className: `checkbox-icon ${selectedAddresses?.id === data.id ? 'selected' : 'note-selected'}` },
|
|
34
34
|
React.createElement("path", { d: 'M13.345 30.462c-1.062 0-1.859-0.531-2.39-1.328l-9.56-16.996c-0.797-1.328-0.266-2.921 1.062-3.718 1.328-0.531 2.921 0 3.718 1.328l7.436 13.012 12.481-20.183c0.797-1.328 2.39-1.593 3.718-0.797s1.593 2.39 0.797 3.718l-14.871 23.635c-0.531 0.797-1.328 1.328-2.39 1.328z' }))))),
|
|
35
35
|
!checkout_review && (React.createElement("div", { className: `edit-remove-wrapper` },
|
|
36
36
|
React.createElement(AccountButton, { text: `edit`, btnType: `green-small-text`, onClick: handleEditAddressPopup, className: 'btn-one-address-version' }),
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { api } from '@weareconceptstudio/core';
|
|
3
|
+
const AddressContext = createContext(null);
|
|
4
|
+
export const useAddressContext = () => {
|
|
5
|
+
const context = useContext(AddressContext);
|
|
6
|
+
return context;
|
|
7
|
+
};
|
|
8
|
+
export const AddressProvider = ({ addressType, addressFormFields = [], children }) => {
|
|
9
|
+
const [addresses, setAddresses] = useState(addressType ? { billing: [], shipping: [] } : []);
|
|
10
|
+
const [selectedAddresses, setSelectedAddresses] = useState(addressType ? { billing: {}, shipping: {} } : {});
|
|
11
|
+
const hasAddressType = useMemo(() => {
|
|
12
|
+
return !!addressType;
|
|
13
|
+
}, [addressType]);
|
|
14
|
+
const hasCheckoutAddress = useMemo(() => {
|
|
15
|
+
if (hasAddressType) {
|
|
16
|
+
return !(addresses.shipping.length > 0 && addresses.billing.length > 0);
|
|
17
|
+
}
|
|
18
|
+
return !(addresses.length > 0);
|
|
19
|
+
}, [hasAddressType, addresses]);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
api.get({ url: 'addresses' }).then((res) => {
|
|
22
|
+
setAddresses(res.data);
|
|
23
|
+
setSelectedAddresses(addressType
|
|
24
|
+
? {
|
|
25
|
+
shipping: res.data[0],
|
|
26
|
+
billing: res.data[0],
|
|
27
|
+
}
|
|
28
|
+
: res.data[0]);
|
|
29
|
+
});
|
|
30
|
+
}, []);
|
|
31
|
+
const createAddress = async (data) => {
|
|
32
|
+
return await api.post('addresses', data).then((res) => {
|
|
33
|
+
setAddresses(res.data);
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
const updateAddress = async (data, addressId) => {
|
|
37
|
+
return await api.put(`addresses/${addressId}`, data).then((res) => {
|
|
38
|
+
setAddresses(res.data);
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
const deleteAddress = async (addressId) => {
|
|
42
|
+
return await api.delete(`addresses/${addressId}`).then((res) => {
|
|
43
|
+
setAddresses(res.data);
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
return (React.createElement(AddressContext.Provider, { value: {
|
|
47
|
+
hasAddressType,
|
|
48
|
+
formFields: addressFormFields,
|
|
49
|
+
createAddress,
|
|
50
|
+
updateAddress,
|
|
51
|
+
deleteAddress,
|
|
52
|
+
addresses,
|
|
53
|
+
selectedAddresses,
|
|
54
|
+
setSelectedAddresses,
|
|
55
|
+
hasCheckoutAddress,
|
|
56
|
+
} }, children));
|
|
57
|
+
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export default AddressWrap;
|
|
2
|
-
declare function AddressWrap({ title,
|
|
2
|
+
declare function AddressWrap({ title, addNewText, type, className }: {
|
|
3
3
|
title?: string;
|
|
4
|
-
|
|
4
|
+
addNewText?: string;
|
|
5
|
+
type: any;
|
|
5
6
|
className: any;
|
|
6
7
|
}): React.JSX.Element;
|
|
7
8
|
import React from 'react';
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import classNames from 'classnames';
|
|
3
|
+
import { useAddressContext } from '../AddressProvider';
|
|
3
4
|
import { Text, useUi } from '@weareconceptstudio/core';
|
|
4
|
-
import AccountButton from '
|
|
5
|
+
import AccountButton from '../../../components/ui/AccountButton';
|
|
5
6
|
import EmptyAddress from '../EmptyAddress';
|
|
6
7
|
import AddressItem from '../AddressItem';
|
|
7
8
|
import AddressForm from '../AddressForm';
|
|
8
|
-
const AddressWrap = ({ title = 'addresses',
|
|
9
|
+
const AddressWrap = ({ title = 'addresses', addNewText = 'addNewAdd', type, className }) => {
|
|
9
10
|
const { openPopup } = useUi();
|
|
11
|
+
const { formFields, createAddress, updateAddress, addresses } = useAddressContext();
|
|
10
12
|
const classString = classNames('address-wrap', {
|
|
11
13
|
[className]: className,
|
|
12
14
|
});
|
|
13
15
|
const handleAddNewAddressPopup = () => {
|
|
14
|
-
openPopup(React.createElement(AddressForm,
|
|
16
|
+
openPopup(React.createElement(AddressForm, { type: type, title: 'addNewAddress', formFields: formFields, createAddress: createAddress, updateAddress: updateAddress }));
|
|
15
17
|
};
|
|
16
18
|
return (React.createElement("div", { className: classString },
|
|
17
19
|
React.createElement("div", { className: `address-title-container` },
|
|
18
20
|
React.createElement(Text, { className: `account-p account-p1 account-font-bold account-primary-color1`, text: title }),
|
|
19
|
-
React.createElement(AccountButton, { text:
|
|
20
|
-
addresses.length > 0 ? (React.createElement("div", { className: `flex-wrapper` }, addresses.map((item, index) => {
|
|
21
|
-
return (React.createElement(AddressItem, { key: index, data: item }));
|
|
22
|
-
}))) : (React.createElement(EmptyAddress, null))));
|
|
21
|
+
React.createElement(AccountButton, { text: addNewText, btnType: `purple-text`, onClick: handleAddNewAddressPopup })),
|
|
22
|
+
addresses.length > 0 ? (React.createElement("div", { className: `flex-wrapper` }, addresses.map((item, index) => (React.createElement(AddressItem, { key: index, type: type, data: item }))))) : (React.createElement(EmptyAddress, null))));
|
|
23
23
|
};
|
|
24
24
|
export default AddressWrap;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useAddressContext } from '../AddressProvider';
|
|
3
|
+
import AddressWrap from '../AddressWrap';
|
|
4
|
+
import AddressesTemplateStyle from './style';
|
|
5
|
+
const AddressesTemplate = () => {
|
|
6
|
+
const { hasAddressType } = useAddressContext();
|
|
7
|
+
return (React.createElement(AddressesTemplateStyle, null, hasAddressType ? (React.createElement(React.Fragment, null,
|
|
8
|
+
React.createElement(AddressWrap, { type: 'shipping', title: 'shippingAddress', addNewText: 'addNewShippingAddress' }),
|
|
9
|
+
React.createElement(AddressWrap, { type: 'billing', title: 'billingAddress', addNewText: 'addNewBillingAddress' }))) : (React.createElement(AddressWrap, null))));
|
|
10
|
+
};
|
|
11
|
+
export default AddressesTemplate;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { useAddressContext } from '../AddressProvider';
|
|
3
|
+
import { Text, useUi } from '@weareconceptstudio/core';
|
|
4
|
+
import AddressForm from '../AddressForm';
|
|
5
|
+
import AddressItem from '../AddressItem';
|
|
6
|
+
import AccountButton from '../../../components/ui/AccountButton';
|
|
7
|
+
import SelectAddressStyle from './style';
|
|
8
|
+
const SelectAddress = ({ type, title }) => {
|
|
9
|
+
const { openPopup } = useUi();
|
|
10
|
+
const { addresses, formFields, hasAddressType, createAddress } = useAddressContext();
|
|
11
|
+
const handleNewAddressPopup = () => {
|
|
12
|
+
openPopup(React.createElement(AddressForm, { title: `addNewShippingAddress`, formFields: formFields, createAddress: createAddress, selected: { value: false, type: 'shipping' } }));
|
|
13
|
+
};
|
|
14
|
+
return (React.createElement(SelectAddressStyle, null,
|
|
15
|
+
React.createElement("div", { className: `select-address-wrap` },
|
|
16
|
+
React.createElement(Text, { tag: `h6`, className: hasAddressType ? `account-h6 account-font-bold account-primary-color1` : 'account-p account-p2 account-font-bold account-primary-color1', text: title }),
|
|
17
|
+
React.createElement(AccountButton, { onClick: handleNewAddressPopup, text: `addNewAdd`, btnType: hasAddressType ? `purple-text` : 'green-small-text' })),
|
|
18
|
+
addresses?.length > 0 ? (React.createElement("div", { className: `flex-wrapper` }, addresses.map((item, index) => {
|
|
19
|
+
return (React.createElement(AddressItem, { id: item.id, type: type, data: item, key: index, select_address: true, checkout_review: false }));
|
|
20
|
+
}))) : null));
|
|
21
|
+
};
|
|
22
|
+
export default SelectAddress;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export default SelectAddressStyle;
|
|
2
|
+
declare const SelectAddressStyle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
const SelectAddressStyle = styled.div `
|
|
3
|
+
--account_selectAddressWrapMBot: var(--sp5x);
|
|
4
|
+
--account_itemDistance: var(--sp3x);
|
|
5
|
+
|
|
6
|
+
.select-address-wrap {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-wrap: wrap;
|
|
9
|
+
justify-content: space-between;
|
|
10
|
+
align-items: center;
|
|
11
|
+
margin-bottom: var(--account_selectAddressWrapMBot);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.flex-wrapper {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-wrap: wrap;
|
|
17
|
+
margin-left: calc(-1 * calc(var(--account_itemDistance) / 2));
|
|
18
|
+
margin-right: calc(-1 * calc(var(--account_itemDistance) / 2));
|
|
19
|
+
|
|
20
|
+
.item-container {
|
|
21
|
+
&:not(:nth-child(1), :nth-child(2)) {
|
|
22
|
+
margin-top: var(--account_itemDistance) !important;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeL}) {
|
|
28
|
+
--account_selectAddressWrapMBot: var(--sp4x);
|
|
29
|
+
--account_itemDistance: var(--sp3x);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeM}) {
|
|
33
|
+
--account_selectAddressWrapMBot: var(--sp3x);
|
|
34
|
+
--account_itemDistance: var(--sp2x);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeMMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeS}) {
|
|
38
|
+
--account_selectAddressWrapMBot: var(--sp3x);
|
|
39
|
+
--account_itemDistance: var(--sp2x);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXS}) {
|
|
43
|
+
--account_selectAddressWrapMBot: var(--sp3x);
|
|
44
|
+
--account_itemDistance: var(--sp2x);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSize}) {
|
|
48
|
+
--account_selectAddressWrapMBot: var(--sp3x);
|
|
49
|
+
--account_itemDistance: var(--sp2x);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeS}) {
|
|
53
|
+
--account_selectAddressWrapMBot: var(--sp3x);
|
|
54
|
+
--account_itemDistance: var(--sp2x);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeSMin}) {
|
|
58
|
+
--account_selectAddressWrapMBot: var(--sp3x);
|
|
59
|
+
--account_itemDistance: var(--sp2x);
|
|
60
|
+
|
|
61
|
+
.select-address-wrap {
|
|
62
|
+
.btn-wrap {
|
|
63
|
+
margin-top: var(--sp1x);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
export default SelectAddressStyle;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
|
+
import { useUi } from '@weareconceptstudio/core';
|
|
3
|
+
import { useAddressContext, AddressProvider } from '../AddressProvider';
|
|
4
|
+
import SelectShippingBillingPopup from '../SelectShippingBillingPopup';
|
|
5
|
+
import AddressItem from '../AddressItem';
|
|
6
|
+
const SelectShippingBilling = () => {
|
|
7
|
+
const { openPopup } = useUi();
|
|
8
|
+
const addressContext = useAddressContext();
|
|
9
|
+
const { selectedAddresses, setSelectedAddresses, addresses } = addressContext;
|
|
10
|
+
//! Handle Popups
|
|
11
|
+
const handleAddNewShippingAddressPopup = useCallback(() => {
|
|
12
|
+
openPopup(React.createElement(AddressForm, { title: `addNewShippingAddress`, selected: { value: false, type: 'shipping' } }));
|
|
13
|
+
}, []);
|
|
14
|
+
const handleAddNewBillingAddressPopup = useCallback(() => {
|
|
15
|
+
openPopup(React.createElement(AddressForm, { title: `addNewBillingAddress`, selected: { value: false, type: 'billing' } }));
|
|
16
|
+
}, []);
|
|
17
|
+
const handleShippingChangePopup = useCallback(() => {
|
|
18
|
+
openPopup(React.createElement(AddressProvider, { ...addressContext },
|
|
19
|
+
React.createElement(SelectShippingBillingPopup, { type: 'shipping', data: addresses, title: 'selectShippingAddress', selectedAddresses: selectedAddresses, setSelectedAddresses: setSelectedAddresses, handleClick: handleAddNewShippingAddressPopup })));
|
|
20
|
+
}, [addresses, selectedAddresses]);
|
|
21
|
+
const handleBillingChangePopup = useCallback(() => {
|
|
22
|
+
openPopup(React.createElement(AddressProvider, { ...addressContext },
|
|
23
|
+
React.createElement(SelectShippingBillingPopup, { type: 'billing', data: addresses, title: 'selectBillingAddress', selectedAddresses: selectedAddresses, setSelectedAddresses: setSelectedAddresses, handleClick: handleAddNewBillingAddressPopup })));
|
|
24
|
+
}, [addresses, selectedAddresses]);
|
|
25
|
+
return (React.createElement("div", { style: { marginTop: 50 }, className: 'shipping-billing-change-wrapper' },
|
|
26
|
+
React.createElement(AddressItem, { checkout_review: true, type: 'shipping', select_address: false, title: 'shippingAddress', data: selectedAddresses.shipping, onClick: handleShippingChangePopup, setSelectedAddresses: setSelectedAddresses }),
|
|
27
|
+
React.createElement(AddressItem, { checkout_review: true, type: 'billing', select_address: false, title: 'billingAddress', data: selectedAddresses.billing, onClick: handleBillingChangePopup, setSelectedAddresses: setSelectedAddresses })));
|
|
28
|
+
};
|
|
29
|
+
export default SelectShippingBilling;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React, { memo as Memo, useState, useCallback } from 'react';
|
|
2
|
+
import { Text, useUi } from '@weareconceptstudio/core';
|
|
3
|
+
import { useTheme } from 'styled-components';
|
|
4
|
+
import theme from '../../../styles/theme';
|
|
5
|
+
//* Components
|
|
6
|
+
import SelectAddress from '../SelectAddress';
|
|
7
|
+
import AccountButton from '../../../components/ui/AccountButton';
|
|
8
|
+
//* Style
|
|
9
|
+
import SelectShippingBillingStyle from './style';
|
|
10
|
+
const SelectShippingBillingPopup = Memo(({ title, type }) => {
|
|
11
|
+
const { closePopup } = useUi();
|
|
12
|
+
const globalTheme = useTheme();
|
|
13
|
+
// const handleAddressChangeSubmit = useCallback(() => {
|
|
14
|
+
// let findItem = data.find((item) => item.id === checkedId);
|
|
15
|
+
// setSelectedAddresses({ ...selectedAddresses, [findItem?.type]: { ...findItem } });
|
|
16
|
+
// // getCart({ addressId: checkedId });
|
|
17
|
+
// closePopup();
|
|
18
|
+
// }, [data, selectedAddresses, checkedId]);
|
|
19
|
+
return (React.createElement(SelectShippingBillingStyle, { theme: theme(globalTheme) },
|
|
20
|
+
React.createElement(SelectAddress, { type: type, title: title }),
|
|
21
|
+
React.createElement("div", { className: `cancel-and-save-wrap` },
|
|
22
|
+
React.createElement(AccountButton, { btnType: `green-large-text`, text: `cancel`, onClick: closePopup }),
|
|
23
|
+
React.createElement(AccountButton, { btnType: `full-width`, text: `saveAndApply` }))));
|
|
24
|
+
});
|
|
25
|
+
export default SelectShippingBillingPopup;
|
|
@@ -1,31 +1,8 @@
|
|
|
1
1
|
import styled from 'styled-components';
|
|
2
2
|
const SelectShippingBillingAddressStyle = styled.section `
|
|
3
|
-
--account_selectAddressWrapMBot: var(--sp5x);
|
|
4
|
-
--account_itemDistance: var(--sp3x);
|
|
5
3
|
--account_cancelAndSaveWrapMTop: var(--sp5x);
|
|
6
4
|
--account_cancelDistance: var(--sp5x);
|
|
7
5
|
|
|
8
|
-
.select-address-wrap {
|
|
9
|
-
display: flex;
|
|
10
|
-
flex-wrap: wrap;
|
|
11
|
-
justify-content: space-between;
|
|
12
|
-
align-items: center;
|
|
13
|
-
margin-bottom: var(--account_selectAddressWrapMBot);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
.flex-wrapper {
|
|
17
|
-
display: flex;
|
|
18
|
-
flex-wrap: wrap;
|
|
19
|
-
margin-left: calc(-1 * calc(var(--account_itemDistance) / 2));
|
|
20
|
-
margin-right: calc(-1 * calc(var(--account_itemDistance) / 2));
|
|
21
|
-
|
|
22
|
-
.item-container {
|
|
23
|
-
&:not(:nth-child(1), :nth-child(2)) {
|
|
24
|
-
margin-top: var(--account_itemDistance) !important;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
6
|
.cancel-and-save-wrap {
|
|
30
7
|
display: flex;
|
|
31
8
|
justify-content: flex-end;
|
|
@@ -40,50 +17,36 @@ const SelectShippingBillingAddressStyle = styled.section `
|
|
|
40
17
|
}
|
|
41
18
|
|
|
42
19
|
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeL}) {
|
|
43
|
-
--account_selectAddressWrapMBot: var(--sp4x);
|
|
44
|
-
--account_itemDistance: var(--sp3x);
|
|
45
20
|
--account_cancelAndSaveWrapMTop: var(--sp4x);
|
|
46
21
|
--account_cancelDistance: var(--sp3x);
|
|
47
22
|
}
|
|
48
23
|
|
|
49
24
|
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeM}) {
|
|
50
|
-
--account_selectAddressWrapMBot: var(--sp3x);
|
|
51
|
-
--account_itemDistance: var(--sp2x);
|
|
52
25
|
--account_cancelAndSaveWrapMTop: var(--sp3x);
|
|
53
26
|
--account_cancelDistance: var(--sp3x);
|
|
54
27
|
}
|
|
55
28
|
|
|
56
29
|
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeMMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeS}) {
|
|
57
|
-
--account_selectAddressWrapMBot: var(--sp3x);
|
|
58
|
-
--account_itemDistance: var(--sp2x);
|
|
59
30
|
--account_cancelAndSaveWrapMTop: var(--sp3x);
|
|
60
31
|
--account_cancelDistance: var(--sp3x);
|
|
61
32
|
}
|
|
62
33
|
|
|
63
34
|
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXS}) {
|
|
64
|
-
--account_selectAddressWrapMBot: var(--sp3x);
|
|
65
|
-
--account_itemDistance: var(--sp2x);
|
|
66
35
|
--account_cancelAndSaveWrapMTop: var(--sp3x);
|
|
67
36
|
--account_cancelDistance: var(--sp2-5x);
|
|
68
37
|
}
|
|
69
38
|
|
|
70
39
|
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSize}) {
|
|
71
|
-
--account_selectAddressWrapMBot: var(--sp3x);
|
|
72
|
-
--account_itemDistance: var(--sp2x);
|
|
73
40
|
--account_cancelAndSaveWrapMTop: var(--sp3x);
|
|
74
41
|
--account_cancelDistance: var(--sp2-5x);
|
|
75
42
|
}
|
|
76
43
|
|
|
77
44
|
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeS}) {
|
|
78
|
-
--account_selectAddressWrapMBot: var(--sp3x);
|
|
79
|
-
--account_itemDistance: var(--sp2x);
|
|
80
45
|
--account_cancelAndSaveWrapMTop: var(--sp3x);
|
|
81
46
|
--account_cancelDistance: var(--sp2-5x);
|
|
82
47
|
}
|
|
83
48
|
|
|
84
49
|
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeSMin}) {
|
|
85
|
-
--account_selectAddressWrapMBot: var(--sp3x);
|
|
86
|
-
--account_itemDistance: var(--sp2x);
|
|
87
50
|
--account_cancelAndSaveWrapMTop: var(--sp3x);
|
|
88
51
|
--account_cancelDistance: var(--sp2x);
|
|
89
52
|
|
|
@@ -101,12 +64,6 @@ const SelectShippingBillingAddressStyle = styled.section `
|
|
|
101
64
|
}
|
|
102
65
|
}
|
|
103
66
|
}
|
|
104
|
-
|
|
105
|
-
.select-address-wrap {
|
|
106
|
-
.btn-wrap {
|
|
107
|
-
margin-top: var(--sp1x);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
67
|
}
|
|
111
68
|
`;
|
|
112
69
|
export default SelectShippingBillingAddressStyle;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React, { memo as Memo } from 'react';
|
|
2
|
+
import { useAddressContext } from '../AddressProvider';
|
|
3
|
+
import { Text } from '@weareconceptstudio/core';
|
|
4
|
+
import { FormBuilder } from '@weareconceptstudio/form';
|
|
5
|
+
//* Style
|
|
6
|
+
import ShippingBillingFormStyle from './style';
|
|
7
|
+
const ShippingBillingForm = Memo(({ firstStepFormRef, title, className }) => {
|
|
8
|
+
const { createAddress, formFields } = useAddressContext();
|
|
9
|
+
return (React.createElement(ShippingBillingFormStyle, { className: className || '' },
|
|
10
|
+
React.createElement(Text, { text: title, className: `account-p account-p2 account-font-bold account-primary-color1 title` }),
|
|
11
|
+
React.createElement(FormBuilder, { formOptions: {
|
|
12
|
+
ref: firstStepFormRef,
|
|
13
|
+
}, onSubmit: createAddress, fields: formFields, className: 'form-wrapper' })));
|
|
14
|
+
});
|
|
15
|
+
export default ShippingBillingForm;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./AddressProvider";
|
|
2
|
+
export { default as AddressesTemplate } from "./AddressesTemplate";
|
|
3
|
+
export { default as AddressWrap } from "./AddressWrap";
|
|
4
|
+
export { default as AddressForm } from "./AddressForm";
|
|
5
|
+
export { default as AddressItem } from "./AddressItem";
|
|
6
|
+
export { default as ShippingBillingInfo } from "./ShippingBillingInfo";
|
|
7
|
+
export { default as ShippingBillingForm } from "./ShippingBillingForm";
|
|
8
|
+
export { default as SelectShippingBilling } from "./SelectShippingBilling";
|
|
9
|
+
export { default as SelectShippingBillingPopup } from "./SelectShippingBillingPopup";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './AddressProvider';
|
|
2
|
+
export { default as AddressesTemplate } from './AddressesTemplate';
|
|
3
|
+
export { default as AddressWrap } from './AddressWrap';
|
|
4
|
+
export { default as AddressForm } from './AddressForm';
|
|
5
|
+
export { default as AddressItem } from './AddressItem';
|
|
6
|
+
export { default as ShippingBillingInfo } from './ShippingBillingInfo';
|
|
7
|
+
export { default as ShippingBillingForm } from './ShippingBillingForm';
|
|
8
|
+
export { default as SelectShippingBilling } from './SelectShippingBilling';
|
|
9
|
+
export { default as SelectShippingBillingPopup } from './SelectShippingBillingPopup';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./address";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './address';
|
|
@@ -10,7 +10,7 @@ const AccountInfo = ({ user, onAccountUpdate, displayFields = defaultDisplayFiel
|
|
|
10
10
|
const [edit, setEdit] = useState(false);
|
|
11
11
|
//! Handle Popup
|
|
12
12
|
const handleSuccessPopup = useCallback(() => {
|
|
13
|
-
openPopup(React.createElement(WarningMessageForPopup, { title: '
|
|
13
|
+
openPopup(React.createElement(WarningMessageForPopup, { title: 'yourSettingsHaveBeenSaved', description: 'yourSettingsHaveBeenSaved' }), { className: 'messagePopup' });
|
|
14
14
|
}, []);
|
|
15
15
|
//! On Finish
|
|
16
16
|
const onFinish = useCallback((values) => {
|
|
@@ -16,7 +16,7 @@ const AccountTemplate = ({ isFullWidth = false, menuOptions = [], children, onSi
|
|
|
16
16
|
React.createElement(Text, { tag: `span`, className: `account-p account-p1 account-font-bold sidebar-item`, text: menuItem.name }))));
|
|
17
17
|
}, [menuOptions]);
|
|
18
18
|
return (React.createElement(Page, { className: 'account use-account' },
|
|
19
|
-
React.createElement(AccountStyle,
|
|
19
|
+
React.createElement(AccountStyle, { className: 'account-container' },
|
|
20
20
|
React.createElement("div", { className: 'account-wrap' },
|
|
21
21
|
React.createElement("aside", { className: 'sidebar' },
|
|
22
22
|
React.createElement("div", { className: `sidebar-inner-wrap` },
|
|
@@ -33,12 +33,6 @@ const AccountStyle = styled.section `
|
|
|
33
33
|
width: var(--account_sidebarWidth);
|
|
34
34
|
padding: 0 calc(var(--account_colDistance) / 2);
|
|
35
35
|
|
|
36
|
-
//! Sticky Styles
|
|
37
|
-
.sidebar-inner-wrap {
|
|
38
|
-
position: sticky;
|
|
39
|
-
top: calc(var(--account_accountPadT) + ${(props) => props.$headerHeight}px);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
36
|
.my-acc-wrap {
|
|
43
37
|
.account-line {
|
|
44
38
|
width: var(--account_accountLineWidth);
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
export default CartTemplate;
|
|
2
|
-
declare function CartTemplate({ items, itemsCount, shippingCost, loading, children,
|
|
2
|
+
declare function CartTemplate({ items, itemsCount, shippingCost, loading, children, subtotal, total, actions, btnDisabled, checkoutUrl }: {
|
|
3
3
|
items: any;
|
|
4
4
|
itemsCount: any;
|
|
5
5
|
shippingCost: any;
|
|
6
6
|
loading: any;
|
|
7
7
|
children: any;
|
|
8
|
-
shoppingUrl: any;
|
|
9
8
|
subtotal: any;
|
|
10
9
|
total: any;
|
|
11
10
|
actions: any;
|