diff --git a/packages/components/src/components/icon/common/ic-no-data.svg b/packages/components/src/components/icon/common/ic-no-data.svg new file mode 100644 index 000000000000..8654e411ad75 --- /dev/null +++ b/packages/components/src/components/icon/common/ic-no-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/components/src/components/icon/icons.js b/packages/components/src/components/icon/icons.js index 7d68536c883c..6952e07ed18b 100644 --- a/packages/components/src/components/icon/icons.js +++ b/packages/components/src/components/icon/icons.js @@ -439,6 +439,7 @@ import './common/ic-neteller-dark.svg'; import './common/ic-neteller-light.svg'; import './common/ic-new-file.svg'; import './common/ic-no-ad.svg'; +import './common/ic-no-data.svg'; import './common/ic-no-order.svg'; import './common/ic-notification-clear.svg'; import './common/ic-notification.svg'; @@ -600,6 +601,7 @@ import './currency/ic-currency-usdc.svg'; import './currency/ic-currency-usdk.svg'; import './currency/ic-currency-ust.svg'; import './currency/ic-currency-virtual.svg'; +import './derivez/ic-derivez.svg'; import './dxtrade/ic-dxtrade-deriv-x.svg'; import './dxtrade/ic-dxtrade-derived.svg'; import './dxtrade/ic-dxtrade-derivx-platform.svg'; diff --git a/packages/p2p/src/components/advertiser-page/advertiser-page-adverts.jsx b/packages/p2p/src/components/advertiser-page/advertiser-page-adverts.jsx index a67e2da7a058..098e8803d90a 100644 --- a/packages/p2p/src/components/advertiser-page/advertiser-page-adverts.jsx +++ b/packages/p2p/src/components/advertiser-page/advertiser-page-adverts.jsx @@ -67,8 +67,8 @@ const AdvertiserPageAdverts = () => { ) : ( )} diff --git a/packages/p2p/src/components/advertiser-page/advertiser-page.jsx b/packages/p2p/src/components/advertiser-page/advertiser-page.jsx index b4d6a055863d..aed006b4cfcb 100644 --- a/packages/p2p/src/components/advertiser-page/advertiser-page.jsx +++ b/packages/p2p/src/components/advertiser-page/advertiser-page.jsx @@ -6,6 +6,7 @@ import { observer } from 'mobx-react-lite'; import { useStores } from 'Stores'; import { Localize, localize } from 'Components/i18next'; import { buy_sell } from 'Constants/buy-sell'; +import { my_profile_tabs } from 'Constants/my-profile-tabs'; import RateChangeModal from 'Components/buy-sell/rate-change-modal.jsx'; import BuySellModal from 'Components/buy-sell/buy-sell-modal.jsx'; import PageReturn from 'Components/page-return/page-return.jsx'; @@ -24,11 +25,12 @@ import { OnlineStatusIcon, OnlineStatusLabel } from 'Components/online-status'; import './advertiser-page.scss'; const AdvertiserPage = () => { - const { general_store, advertiser_page_store, buy_sell_store } = useStores(); + const { general_store, advertiser_page_store, buy_sell_store, my_profile_store } = useStores(); const is_my_advert = advertiser_page_store.advertiser_details_id === general_store.advertiser_id; // Use general_store.advertiser_info since resubscribing to the same id from advertiser page returns error const info = is_my_advert ? general_store.advertiser_info : advertiser_page_store.counterparty_advertiser_info; + const { basic_verification, buy_orders_count, @@ -94,6 +96,8 @@ const AdvertiserPage = () => { is_error_modal_open={is_error_modal_open} setIsErrorModalOpen={is_open => { if (!is_open) buy_sell_store.hideAdvertiserPage(); + if (general_store.active_index !== 0) + my_profile_store.setActiveTab(my_profile_tabs.MY_COUNTERPARTIES); advertiser_page_store.onCancel(); general_store.setBlockUnblockUserError(''); }} @@ -117,7 +121,11 @@ const AdvertiserPage = () => {
{ + buy_sell_store.hideAdvertiserPage(); + if (general_store.active_index === general_store.path.my_profile) + my_profile_store.setActiveTab(my_profile_tabs.MY_COUNTERPARTIES); + }} page_title={localize("Advertiser's page")} /> {!is_my_advert && ( @@ -175,7 +183,6 @@ const AdvertiserPage = () => {
-
diff --git a/packages/p2p/src/components/block-user/block-user-empty/block-user-empty.jsx b/packages/p2p/src/components/block-user/block-user-empty/block-user-empty.jsx index 78fa00b8b210..0b6629b98b21 100644 --- a/packages/p2p/src/components/block-user/block-user-empty/block-user-empty.jsx +++ b/packages/p2p/src/components/block-user/block-user-empty/block-user-empty.jsx @@ -19,7 +19,7 @@ const BlockUserEmpty = () => { width={128} /> - +
@@ -28,7 +28,7 @@ const BlockUserEmpty = () => { body_className='block-user-empty' height_offset='80px' is_modal_open - page_header_text={localize('Blocked advertisers')} + page_header_text={localize('My counterparties')} pageHeaderReturnFn={() => my_profile_store.setActiveTab(my_profile_tabs.MY_STATS)} > { width={128} /> - + diff --git a/packages/p2p/src/components/block-user/block-user-empty/block-user-empty.scss b/packages/p2p/src/components/block-user/block-user-empty/block-user-empty.scss index dd67de69a806..f9320b9ffbcd 100644 --- a/packages/p2p/src/components/block-user/block-user-empty/block-user-empty.scss +++ b/packages/p2p/src/components/block-user/block-user-empty/block-user-empty.scss @@ -3,6 +3,10 @@ display: flex; flex-direction: column; + @include mobile { + margin-top: 16rem; + } + &__icon { margin-top: 2.2rem; } diff --git a/packages/p2p/src/components/block-user/block-user-modal/block-user-modal.scss b/packages/p2p/src/components/block-user/block-user-modal/block-user-modal.scss index 84d470158208..a7999bd128af 100644 --- a/packages/p2p/src/components/block-user/block-user-modal/block-user-modal.scss +++ b/packages/p2p/src/components/block-user/block-user-modal/block-user-modal.scss @@ -1,5 +1,9 @@ .block-user-modal { &__body { padding: 0 2.4rem; + + @include mobile { + padding: 0 1.6rem; + } } } diff --git a/packages/p2p/src/components/buy-sell/buy-sell-row.jsx b/packages/p2p/src/components/buy-sell/buy-sell-row.jsx index 3b04979dd909..663d1960f055 100644 --- a/packages/p2p/src/components/buy-sell/buy-sell-row.jsx +++ b/packages/p2p/src/components/buy-sell/buy-sell-row.jsx @@ -60,18 +60,18 @@ const BuySellRow = ({ row: advert }) => { exchange_rate: floating_rate_store.exchange_rate, market_rate: effective_rate, }); + const onClickRow = () => { + if (!general_store.is_advertiser) { + buy_sell_store.setShouldShowVerification(true); + } else if (!general_store.is_barred) { + buy_sell_store.showAdvertiserPage(advert); + } + }; if (isMobile()) { return (
-
- general_store.is_barred || !general_store.is_advertiser - ? undefined - : buy_sell_store.showAdvertiserPage(advert) - } - > +
onClickRow()}> {
- general_store.is_barred || !general_store.is_advertiser - ? undefined - : buy_sell_store.showAdvertiserPage(advert) - } + onClick={() => onClickRow()} > { if (buy_sell_store.should_show_verification) { return ( - + ); diff --git a/packages/p2p/src/components/buy-sell/buy-sell.scss b/packages/p2p/src/components/buy-sell/buy-sell.scss index f9fdd2c8b38e..5857e198168a 100644 --- a/packages/p2p/src/components/buy-sell/buy-sell.scss +++ b/packages/p2p/src/components/buy-sell/buy-sell.scss @@ -73,6 +73,10 @@ } } + &__page-return { + margin: 2rem; + } + &__table-header { display: grid; grid-template-columns: 2fr 1.5fr 1fr 1.5fr 1fr; diff --git a/packages/p2p/src/components/error-modal/error-modal.scss b/packages/p2p/src/components/error-modal/error-modal.scss index eb26b69cd033..5e521fcc3fa4 100644 --- a/packages/p2p/src/components/error-modal/error-modal.scss +++ b/packages/p2p/src/components/error-modal/error-modal.scss @@ -1,5 +1,9 @@ .error-modal { &__body { padding: 0 2.4rem; + + @include mobile { + padding: 0 1.6rem; + } } } diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-dropdown/block-user-dropdown.jsx b/packages/p2p/src/components/my-profile/block-user/block-user-dropdown/block-user-dropdown.jsx new file mode 100644 index 000000000000..a413df12641e --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-dropdown/block-user-dropdown.jsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { Dropdown, Icon } from '@deriv/components'; +import { isMobile } from '@deriv/shared'; +import { observer } from 'mobx-react-lite'; +import { localize } from 'Components/i18next'; +import { useStores } from 'Stores'; +import './block-user-dropdown.scss'; + +const BlockUserDropdown = () => { + const { my_profile_store } = useStores(); + + if (isMobile()) { + return ( +
{ + my_profile_store.setIsFilterModalOpen(true); + }} + > + +
+ ); + } + + return ( + + ); +}; + +export default observer(BlockUserDropdown); diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-dropdown/block-user-dropdown.scss b/packages/p2p/src/components/my-profile/block-user/block-user-dropdown/block-user-dropdown.scss new file mode 100644 index 000000000000..cd29dc4ad0d1 --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-dropdown/block-user-dropdown.scss @@ -0,0 +1,15 @@ +.block-user-dropdown { + margin-left: 1rem; + width: 20rem; + + @include mobile { + display: flex; + align-items: center; + justify-content: center; + border: 1px solid var(--border-normal); + border-radius: 4px; + padding: 0.8rem; + height: 4rem; + width: 4rem; + } +} diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-dropdown/index.js b/packages/p2p/src/components/my-profile/block-user/block-user-dropdown/index.js new file mode 100644 index 000000000000..846c7e204170 --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-dropdown/index.js @@ -0,0 +1,3 @@ +import BlockUserDropdown from './block-user-dropdown.jsx'; + +export default BlockUserDropdown; diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-filter-modal/block-user-filter-modal.jsx b/packages/p2p/src/components/my-profile/block-user/block-user-filter-modal/block-user-filter-modal.jsx new file mode 100644 index 000000000000..a5b40d343031 --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-filter-modal/block-user-filter-modal.jsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { observer } from 'mobx-react-lite'; +import { Modal, RadioGroup, Text } from '@deriv/components'; +import { useStores } from 'Stores'; + +const BlockUserFilterModal = () => { + const { my_profile_store } = useStores(); + + return ( + my_profile_store.setIsFilterModalOpen(false)} + width='80vw' + > + + {my_profile_store.block_user_sort_list.map((list_item, key) => { + return ( + + {list_item.text} + + } + /> + ); + })} + + + ); +}; + +export default observer(BlockUserFilterModal); diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-filter-modal/index.js b/packages/p2p/src/components/my-profile/block-user/block-user-filter-modal/index.js new file mode 100644 index 000000000000..7da3e2b9c1e8 --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-filter-modal/index.js @@ -0,0 +1,3 @@ +import BlockUserFilterModal from './block-user-filter-modal.jsx'; + +export default BlockUserFilterModal; diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-list/block-user-list.jsx b/packages/p2p/src/components/my-profile/block-user/block-user-list/block-user-list.jsx new file mode 100644 index 000000000000..bba999ac149a --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-list/block-user-list.jsx @@ -0,0 +1,62 @@ +import React from 'react'; +import { observer } from 'mobx-react-lite'; +import { useStores } from 'Stores'; +import { Text, Loading } from '@deriv/components'; +import { isMobile } from '@deriv/shared'; +import BlockUserDropdown from '../block-user-dropdown'; +import BlockUserTable from '../block-user-table'; +import BlockUserTableError from '../block-user-table/block-user-table-error'; +import SearchBox from 'Components/search-box'; +import debounce from 'lodash.debounce'; +import { localize } from 'Components/i18next'; +import './block-user-list.scss'; + +const BlockUserList = observer(() => { + const { general_store, my_profile_store } = useStores(); + + const debouncedGetSearchedTradePartners = debounce(search => { + my_profile_store.setSearchTerm(search.trim()); + my_profile_store.getSearchedTradePartners(); + }, 200); + + const onSearch = search => { + // Ensures that trade partners list is not reloaded if search term entered is the same + if (my_profile_store.search_term !== search.trim()) { + my_profile_store.setIsBlockUserTableLoading(true); + debouncedGetSearchedTradePartners(search); + } + }; + + if (general_store.is_barred && general_store.block_unblock_user_error) { + return ; + } + + if (my_profile_store.is_loading) { + return ; + } + + return ( +
+ {my_profile_store.trade_partners_list.length > 0 && ( + + + {localize( + "When you block someone, you won't see their ads, and they can't see yours. Your ads will be hidden from their search results, too." + )} + +
+ + +
+
+ )} + +
+ ); +}); + +export default BlockUserList; diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-list/block-user-list.scss b/packages/p2p/src/components/my-profile/block-user/block-user-list/block-user-list.scss new file mode 100644 index 000000000000..75691c5f050e --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-list/block-user-list.scss @@ -0,0 +1,35 @@ +.block-user-list { + display: flex; + flex: 1; + flex-direction: column; + height: 100%; + + & .search-box { + margin: 0rem 0.8rem 2.4rem; + width: 20rem; + + @include mobile { + width: 15rem; + } + } + + &__header { + display: flex; + flex-direction: row; + + @include mobile { + align-items: center; + margin: 0 1.6rem; + z-index: 7; + } + } + + &__text { + margin: 0 0.8rem 2rem; + + @include mobile { + margin: 1.6rem; + z-index: 7; + } + } +} diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-list/index.js b/packages/p2p/src/components/my-profile/block-user/block-user-list/index.js new file mode 100644 index 000000000000..72269ee1bcb8 --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-list/index.js @@ -0,0 +1,3 @@ +import BlockUserList from './block-user-list.jsx'; + +export default BlockUserList; diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row.jsx b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row.jsx deleted file mode 100644 index c4c40c49c1bb..000000000000 --- a/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { observer } from 'mobx-react-lite'; -import { useStores } from 'Stores'; -import { Button, Table, Text } from '@deriv/components'; -import UserAvatar from 'Components/user/user-avatar'; -import { localize } from 'Components/i18next'; -import '../block-user.scss'; - -const BlockUserRow = ({ row: advertiser }) => { - const { my_profile_store } = useStores(); - return ( - - -
- -
- - {advertiser.name} - -
-
-
- - - -
- ); -}; - -BlockUserRow.propTypes = { - advertiser: PropTypes.object, -}; - -export default observer(BlockUserRow); diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row/block-user-row.jsx b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row/block-user-row.jsx new file mode 100644 index 000000000000..f907e5160364 --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row/block-user-row.jsx @@ -0,0 +1,68 @@ +/* eslint-disable react/prop-types */ +import React from 'react'; +import PropTypes from 'prop-types'; +import { observer } from 'mobx-react-lite'; +import { useStores } from 'Stores'; +import classNames from 'classnames'; +import { Button, Table, Text } from '@deriv/components'; +import { localize } from 'Components/i18next'; +import UserAvatar from 'Components/user/user-avatar'; + +const BlockUserRow = ({ row: advertiser }) => { + const { buy_sell_store, general_store, my_profile_store } = useStores(); + const { id, is_blocked, name } = advertiser; + + return ( + + +
{ + if (!general_store.is_barred) { + my_profile_store.getCounterpartyAdvertiserInfo(id); + buy_sell_store.setSelectedAdState({ + advertiser_details: { id, name }, + }); + } + }} + > + +
+ + {name} + +
+
+
+ + {is_blocked ? ( + + ) : ( + + )} + +
+ ); +}; + +BlockUserRow.propTypes = { + advertiser: PropTypes.object, +}; + +export default observer(BlockUserRow); diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row/block-user-row.scss b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row/block-user-row.scss new file mode 100644 index 000000000000..e45e609aa321 --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row/block-user-row.scss @@ -0,0 +1,61 @@ +.block-user-row { + display: grid; + padding: 1.6rem; + grid-template-columns: 1fr 1fr; + + &:hover { + background-color: var(--general-hover); + + @include mobile { + background-color: inherit; + } + } + + &__button-group { + display: flex; + justify-content: flex-end; + align-items: center; + + & button { + min-width: 9rem; + } + + &__unblock-button { + // Needed to override sticky hover in mobile + @include mobile { + &:hover { + background: transparent !important; + } + } + } + + &__block-button { + // Needed to override sticky hover in mobile + @include mobile { + &:hover { + background: transparent !important; + } + + & > span { + color: var(--brand-red-coral) !important; + } + } + } + } + + &__cell { + align-items: center; + display: flex; + cursor: pointer; + + &--barred { + cursor: not-allowed; + } + + &-container { + display: flex; + flex-direction: column; + margin-left: 0.8rem; + } + } +} diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row/index.js b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row/index.js new file mode 100644 index 000000000000..eb2f119c1a66 --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-row/index.js @@ -0,0 +1,4 @@ +import BlockUserRow from './block-user-row.jsx'; +import './block-user-row.scss'; + +export default BlockUserRow; diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-table-error.jsx b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-table-error/block-user-table-error.jsx similarity index 84% rename from packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-table-error.jsx rename to packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-table-error/block-user-table-error.jsx index d76941b3e5d1..63811a0a9b67 100644 --- a/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-table-error.jsx +++ b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-table-error/block-user-table-error.jsx @@ -12,16 +12,16 @@ const BlockUserTableError = ({ error_message }) => { return ( -
+
{ { > { const { general_store, my_profile_store } = useStores(); React.useEffect(() => { - my_profile_store.setBlockedAdvertisersList([]); - my_profile_store.getBlockedAdvertisersList(); + my_profile_store.setTradePartnersList([]); + my_profile_store.getTradePartnersList(true); my_profile_store.setSearchTerm(''); reaction( () => general_store.is_barred, () => { if (!general_store.is_barred) general_store.setBlockUnblockUserError(''); - my_profile_store.getBlockedAdvertisersList(); my_profile_store.setSearchTerm(''); + my_profile_store.getTradePartnersList(true); } ); + return () => { + my_profile_store.setTradePartnersList([]); + my_profile_store.setSearchTerm(''); + my_profile_store.setSearchResults([]); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - if (my_profile_store.is_loading) { + if (my_profile_store.is_block_user_table_loading) { return ; } - if (general_store.block_unblock_user_error && general_store.is_barred) { - return ; - } - - if (my_profile_store.search_term && my_profile_store.search_results.length === 0) { + if (my_profile_store.search_term && my_profile_store.rendered_trade_partners_list.length === 0) { return ( - + {localize('There are no matching name.')} ); } - if (my_profile_store.blocked_advertisers_list.length) { + if (my_profile_store.rendered_trade_partners_list.length) { return ( - - +
+ item.id} loadMoreRowsFn={() => {}} rowRenderer={props => } diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-table.scss b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-table.scss new file mode 100644 index 000000000000..5e3d20a675f1 --- /dev/null +++ b/packages/p2p/src/components/my-profile/block-user/block-user-table/block-user-table.scss @@ -0,0 +1,21 @@ +.block-user-table { + display: flex; + flex: 1; + flex-direction: column; + + @include mobile { + height: 100%; + } + + &__body { + flex: 1; + display: flex; + flex-direction: column; + } + + &__text { + display: inline-block; + padding-top: 3rem; + width: 100%; + } +} diff --git a/packages/p2p/src/components/my-profile/block-user/block-user-table/index.js b/packages/p2p/src/components/my-profile/block-user/block-user-table/index.js index 65c74e1007ef..0cd00faba6ef 100644 --- a/packages/p2p/src/components/my-profile/block-user/block-user-table/index.js +++ b/packages/p2p/src/components/my-profile/block-user/block-user-table/index.js @@ -1,4 +1,3 @@ import BlockUserTable from './block-user-table.jsx'; -import '../block-user.scss'; export default BlockUserTable; diff --git a/packages/p2p/src/components/my-profile/block-user/block-user.jsx b/packages/p2p/src/components/my-profile/block-user/block-user.jsx index b904aefddc5b..62a04e6046ca 100644 --- a/packages/p2p/src/components/my-profile/block-user/block-user.jsx +++ b/packages/p2p/src/components/my-profile/block-user/block-user.jsx @@ -2,43 +2,14 @@ import React from 'react'; import { observer } from 'mobx-react-lite'; import { useStores } from 'Stores'; import { DesktopWrapper, MobileFullPageModal, MobileWrapper } from '@deriv/components'; -import BlockUserModal from 'Components/block-user/block-user-modal'; -import BlockUserTable from 'Components/my-profile/block-user/block-user-table/block-user-table'; -import SearchBox from 'Components/search-box'; +import { isMobile } from '@deriv/shared'; import { my_profile_tabs } from 'Constants/my-profile-tabs'; -import debounce from 'lodash.debounce'; import { localize } from 'Components/i18next'; - -const BlockUserList = observer(() => { - const { general_store, my_profile_store } = useStores(); - - const loadBlockedAdvertisers = debounce(search => { - my_profile_store.setSearchTerm(search.trim()); - my_profile_store.loadMoreBlockedAdvertisers(); - }, 200); - - const onSearch = search => { - // Ensures that blocked advertisers list is not reloaded if search term entered is the same - if (my_profile_store.search_term !== search.trim()) { - my_profile_store.setIsLoading(true); - loadBlockedAdvertisers(search); - } - }; - - const onClear = () => { - my_profile_store.setSearchTerm(''); - my_profile_store.setSearchResults([]); - }; - - return ( -
- {my_profile_store.blocked_advertisers_list.length > 0 && !general_store.is_barred && ( - - )} - -
- ); -}); +import BlockUserModal from 'Components/block-user/block-user-modal'; +import BlockUserList from './block-user-list'; +import BlockUserFilterModal from './block-user-filter-modal'; +import ErrorModal from 'Components/error-modal/error-modal'; +import './block-user.scss'; const BlockUser = () => { const { general_store, my_profile_store } = useStores(); @@ -46,23 +17,32 @@ const BlockUser = () => { return ( general_store.setIsBlockUserModalOpen(false)} onSubmit={my_profile_store.onSubmit} /> + general_store.setBlockUnblockUserError('')} + width={isMobile() ? '90rem' : '40rem'} + /> + my_profile_store.setActiveTab(my_profile_tabs.MY_STATS)} > diff --git a/packages/p2p/src/components/my-profile/block-user/block-user.scss b/packages/p2p/src/components/my-profile/block-user/block-user.scss index 73e701d803a2..e2cde37cd9ce 100644 --- a/packages/p2p/src/components/my-profile/block-user/block-user.scss +++ b/packages/p2p/src/components/my-profile/block-user/block-user.scss @@ -1,27 +1,4 @@ .block-user { - &__data-list { - flex: 1; - - &__data-list-body { - flex: 1; - } - - .data-list__body-wrapper { - flex: 1; - } - } - - &__list { - display: flex; - flex: 1; - flex-direction: column; - height: 100%; - - & .search-box { - margin: 0rem 0.8rem 2.4rem; - } - } - &__modal { @include mobile { display: flex; @@ -37,84 +14,4 @@ } } } - - &__table { - display: flex; - flex: 1; - flex-direction: column; - - @include mobile { - height: 100%; - } - - &-body { - flex: 1; - display: flex; - flex-direction: column; - } - - &--error { - align-items: center; - display: flex; - flex-direction: column; - - &-icon { - margin-top: 2.2rem; - } - - &-text { - margin: 3rem 11rem; - - @include mobile { - margin: 3rem 2rem; - } - } - } - - &-header { - display: grid; - grid-template-columns: 1fr; - - > .dc-table__head:first-child { - margin-left: 1.6rem; - } - } - } - - &__text { - display: inline-block; - padding-top: 3rem; - width: 100%; - } - - &__row { - display: grid; - padding: 1.6rem; - grid-template-columns: 1fr 1fr; - - &:hover { - background-color: var(--general-hover); - - @include mobile { - background-color: inherit; - } - } - - &-button { - display: flex; - justify-content: flex-end; - align-items: center; - } - - &-cell { - align-items: center; - display: flex; - - &--container { - display: flex; - flex-direction: column; - margin-left: 0.8rem; - } - } - } } diff --git a/packages/p2p/src/components/my-profile/my-profile-content.jsx b/packages/p2p/src/components/my-profile/my-profile-content.jsx index 8fd8b6a7d2dd..4392d69f55e1 100644 --- a/packages/p2p/src/components/my-profile/my-profile-content.jsx +++ b/packages/p2p/src/components/my-profile/my-profile-content.jsx @@ -52,7 +52,7 @@ const MyProfileContent = () => { ); - } else if (my_profile_store.active_tab === my_profile_tabs.BLOCKED_ADVERTISERS) { + } else if (my_profile_store.active_tab === my_profile_tabs.MY_COUNTERPARTIES) { return ; } return ; diff --git a/packages/p2p/src/components/my-profile/my-profile-header/my-profile-header.jsx b/packages/p2p/src/components/my-profile/my-profile-header/my-profile-header.jsx index 0c43797046eb..d325cddaa315 100644 --- a/packages/p2p/src/components/my-profile/my-profile-header/my-profile-header.jsx +++ b/packages/p2p/src/components/my-profile/my-profile-header/my-profile-header.jsx @@ -23,8 +23,8 @@ const MyProfileHeader = () => { value: my_profile_tabs.AD_TEMPLATE, }, { - text: localize('Blocked advertisers'), - value: my_profile_tabs.BLOCKED_ADVERTISERS, + text: localize('My counterparties'), + value: my_profile_tabs.MY_COUNTERPARTIES, }, ]; diff --git a/packages/p2p/src/components/my-profile/my-profile-stats/my-profile-stats-table/my-profile-stats-table.scss b/packages/p2p/src/components/my-profile/my-profile-stats/my-profile-stats-table/my-profile-stats-table.scss index 23c6bfe58cc7..cb8dfb5aa5a6 100644 --- a/packages/p2p/src/components/my-profile/my-profile-stats/my-profile-stats-table/my-profile-stats-table.scss +++ b/packages/p2p/src/components/my-profile/my-profile-stats/my-profile-stats-table/my-profile-stats-table.scss @@ -2,7 +2,6 @@ border-bottom: none; grid-template-columns: repeat(4, 1fr); margin: 1.4rem 0; - overflow: auto; &.dc-table__row { height: unset; diff --git a/packages/p2p/src/components/my-profile/my-profile-stats/my-profile-stats.jsx b/packages/p2p/src/components/my-profile/my-profile-stats/my-profile-stats.jsx index eddecc10b5e8..c2857cb88ea7 100644 --- a/packages/p2p/src/components/my-profile/my-profile-stats/my-profile-stats.jsx +++ b/packages/p2p/src/components/my-profile/my-profile-stats/my-profile-stats.jsx @@ -25,8 +25,8 @@ const MyStats = () => { onClick: () => my_profile_store.setActiveTab(my_profile_tabs.AD_TEMPLATE), }, { - default_text: 'Blocked advertisers', - onClick: () => my_profile_store.setActiveTab(my_profile_tabs.BLOCKED_ADVERTISERS), + default_text: 'My counterparties', + onClick: () => my_profile_store.setActiveTab(my_profile_tabs.MY_COUNTERPARTIES), }, ]; diff --git a/packages/p2p/src/constants/my-profile-tabs.js b/packages/p2p/src/constants/my-profile-tabs.js index d36db86c19b9..2df37daa4a52 100644 --- a/packages/p2p/src/constants/my-profile-tabs.js +++ b/packages/p2p/src/constants/my-profile-tabs.js @@ -2,5 +2,5 @@ export const my_profile_tabs = Object.freeze({ MY_STATS: 'my_stats', PAYMENT_METHODS: 'payment_methods', AD_TEMPLATE: 'ad_template', - BLOCKED_ADVERTISERS: 'blocked_advertisers', + MY_COUNTERPARTIES: 'my_counterparties', }); diff --git a/packages/p2p/src/stores/advertiser-page-store.js b/packages/p2p/src/stores/advertiser-page-store.js index c2714cffc87e..d0494e15b80b 100644 --- a/packages/p2p/src/stores/advertiser-page-store.js +++ b/packages/p2p/src/stores/advertiser-page-store.js @@ -43,6 +43,7 @@ export default class AdvertiserPageStore extends BaseStore { advertiser_details: computed, advertiser_details_id: computed, advertiser_details_name: computed, + getCounterpartyAdvertiserList: action.bound, handleTabItemClick: action.bound, onCancel: action.bound, onCancelClick: action.bound, @@ -126,17 +127,46 @@ export default class AdvertiserPageStore extends BaseStore { } setAdvertiserInfo(response) { + const { general_store } = this.root_store; + if (response.error) { this.setErrorMessage(response.error); } else { const { p2p_advertiser_info } = response; this.setCounterpartyAdvertiserInfo(p2p_advertiser_info); - this.setIsCounterpartyAdvertiserBlocked(!!p2p_advertiser_info.is_blocked); + + // TODO: uncomment this when BE has fixed is_blocked flag issue for block user overlay + // this.setIsCounterpartyAdvertiserBlocked(!!p2p_advertiser_info.is_blocked); + + // TODO: remove this when above issue is fixed + this.setIsCounterpartyAdvertiserBlocked( + general_store.advertiser_relations_response.some( + advertiser => p2p_advertiser_info.id === advertiser.id + ) || !!p2p_advertiser_info.is_blocked + ); } this.setIsLoading(false); } + getCounterpartyAdvertiserList(advertiser_id) { + this.setIsLoading(true); + requestWS({ + p2p_advert_list: 1, + advertiser_id, + }).then(response => { + if (response) { + if (!response.error) { + const { list } = response.p2p_advert_list; + this.setAdverts(list.filter(advert => advert.counterparty_type === this.counterparty_type)); + } else { + this.setErrorMessage(response.error); + } + } + this.setIsLoading(false); + }); + } + handleTabItemClick(idx) { this.setActiveIndex(idx); if (idx === 0) { @@ -178,6 +208,7 @@ export default class AdvertiserPageStore extends BaseStore { !this.is_counterparty_advertiser_blocked, this.advertiser_details_id ); + if (this.is_counterparty_advertiser_blocked) this.getCounterpartyAdvertiserList(this.advertiser_details_id); this.setIsDropdownMenuVisible(false); } diff --git a/packages/p2p/src/stores/general-store.js b/packages/p2p/src/stores/general-store.js index 8bbc27edc31f..f07832388f9a 100644 --- a/packages/p2p/src/stores/general-store.js +++ b/packages/p2p/src/stores/general-store.js @@ -17,6 +17,7 @@ export default class GeneralStore extends BaseStore { advertiser_id = null; advertiser_info = {}; advertiser_sell_limit = null; + advertiser_relations_response = []; //TODO: Remove this when backend has fixed is_blocked flag issue block_unblock_user_error = ''; balance; cancels_remaining = null; @@ -69,6 +70,7 @@ export default class GeneralStore extends BaseStore { advertiser_id: observable, advertiser_buy_limit: observable, advertiser_sell_limit: observable, + advertiser_relations_response: observable, //TODO: Remove this when backend has fixed is_blocked flag issue block_unblock_user_error: observable, balance: observable, feature_level: observable, @@ -124,6 +126,7 @@ export default class GeneralStore extends BaseStore { setAdvertiserBuyLimit: action.bound, setAdvertiserSellLimit: action.bound, setAppProps: action.bound, + setAdvertiserRelationsResponse: action.bound, //TODO: Remove this when backend has fixed is_blocked flag issue setFeatureLevel: action.bound, setInactiveNotificationCount: action.bound, setIsAdvertiser: action.bound, @@ -202,6 +205,10 @@ export default class GeneralStore extends BaseStore { this.setIsBlockUserModalOpen(false); if (should_set_is_counterparty_blocked) { const { p2p_advertiser_relations } = response; + + //TODO: Remove this when backend has fixed is_blocked flag issue + this.setAdvertiserRelationsResponse(p2p_advertiser_relations.blocked_advertisers); + advertiser_page_store.setIsCounterpartyAdvertiserBlocked( p2p_advertiser_relations.blocked_advertisers.some(ad => ad.id === advertiser_id) ); @@ -585,6 +592,11 @@ export default class GeneralStore extends BaseStore { this.props = props; } + //TODO: Remove this when backend has fixed is_blocked flag issue + setAdvertiserRelationsResponse(advertiser_relations_response) { + this.advertiser_relations_response = advertiser_relations_response; + } + setBlockUnblockUserError(block_unblock_user_error) { this.block_unblock_user_error = block_unblock_user_error; } diff --git a/packages/p2p/src/stores/my-profile-store.js b/packages/p2p/src/stores/my-profile-store.js index e9d5ff68df01..90e70a316e61 100644 --- a/packages/p2p/src/stores/my-profile-store.js +++ b/packages/p2p/src/stores/my-profile-store.js @@ -4,6 +4,7 @@ import { localize } from 'Components/i18next'; import { textValidator } from 'Utils/validations'; import BaseStore from 'Stores/base_store'; import { my_profile_tabs } from 'Constants/my-profile-tabs'; +import { isMobile } from '@deriv/shared'; export default class MyProfileStore extends BaseStore { active_tab = my_profile_tabs.MY_STATS; @@ -11,16 +12,17 @@ export default class MyProfileStore extends BaseStore { advertiser_payment_methods = {}; advertiser_payment_methods_error = ''; available_payment_methods = {}; - blocked_advertisers_list = []; delete_error_message = ''; error_message = ''; form_error = ''; full_name = ''; + is_block_user_table_loading = false; is_button_loading = false; is_cancel_add_payment_method_modal_open = false; is_cancel_edit_payment_method_modal_open = false; is_confirm_delete_modal_open = false; is_delete_payment_method_error_modal_open = false; + is_filter_modal_open = false; is_loading = false; is_submit_success = false; payment_method_value = undefined; @@ -29,15 +31,17 @@ export default class MyProfileStore extends BaseStore { payment_method_to_edit = {}; search_results = []; search_term = ''; - selected_blocked_user = {}; selected_payment_method = ''; selected_payment_method_display_name = ''; selected_payment_method_fields = []; selected_payment_method_type = ''; + selected_sort_value = 'all_users'; + selected_trade_partner = {}; should_hide_my_profile_tab = false; should_show_add_payment_method_error_modal = false; should_show_add_payment_method_form = false; should_show_edit_payment_method_form = false; + trade_partners_list = []; // TODO: Refactor this out once modal management refactoring is completed MODAL_TRANSITION_DURATION = 280; @@ -52,16 +56,17 @@ export default class MyProfileStore extends BaseStore { advertiser_payment_methods: observable, advertiser_payment_methods_error: observable, available_payment_methods: observable, - blocked_advertisers_list: observable, delete_error_message: observable, error_message: observable, form_error: observable, full_name: observable, + is_block_user_table_loading: observable, is_button_loading: observable, is_cancel_add_payment_method_modal_open: observable, is_cancel_edit_payment_method_modal_open: observable, is_confirm_delete_modal_open: observable, is_delete_payment_method_error_modal_open: observable, + is_filter_modal_open: observable, is_loading: observable, is_submit_success: observable, payment_method_value: observable, @@ -70,36 +75,43 @@ export default class MyProfileStore extends BaseStore { payment_method_to_edit: observable, search_results: observable, search_term: observable, - selected_blocked_user: observable, selected_payment_method: observable, selected_payment_method_display_name: observable, selected_payment_method_fields: observable, selected_payment_method_type: observable, + selected_sort_value: observable, + selected_trade_partner: observable, should_hide_my_profile_tab: observable, should_show_add_payment_method_error_modal: observable, should_show_add_payment_method_form: observable, should_show_edit_payment_method_form: observable, + trade_partners_list: observable, advertiser_has_payment_methods: computed, advertiser_payment_methods_list: computed, + block_user_sort_list: computed, payment_method_field_set: computed, initial_values: computed, payment_method_info: computed, payment_methods_list_items: computed, payment_methods_list_methods: computed, payment_methods_list_values: computed, - rendered_blocked_advertisers_list: computed, + rendered_trade_partners_list: computed, + trade_partner_dropdown_list: computed, createPaymentMethod: action.bound, - getBlockedAdvertisersList: action.bound, getAdvertiserPaymentMethods: action.bound, + getCounterpartyAdvertiserInfo: action.bound, getPaymentMethodsList: action.bound, getPaymentMethodDisplayName: action.bound, getPaymentMethodValue: action.bound, + getSearchedTradePartners: action.bound, getSelectedPaymentMethodDetails: action.bound, + getTradePartnersList: action.bound, + handleChange: action.bound, handleSubmit: action.bound, handleToggle: action.bound, hideAddPaymentMethodForm: action.bound, - loadMoreBlockedAdvertisers: action.bound, onClickDelete: action.bound, + onClear: action.bound, validatePaymentMethodFields: action.bound, updatePaymentMethod: action.bound, showAddPaymentMethodForm: action.bound, @@ -111,16 +123,17 @@ export default class MyProfileStore extends BaseStore { setAdvertiserPaymentMethods: action.bound, setAdvertiserPaymentMethodsError: action.bound, setAvailablePaymentMethods: action.bound, - setBlockedAdvertisersList: action.bound, setDefaultAdvertDescription: action.bound, setDeleteErrorMessage: action.bound, setErrorMessage: action.bound, setFormError: action.bound, setFullName: action.bound, + setIsBlockUserTableLoading: action.bound, setIsCancelAddPaymentMethodModalOpen: action.bound, setIsCancelEditPaymentMethodModalOpen: action.bound, setIsConfirmDeleteModalOpen: action.bound, setIsDeletePaymentMethodErrorModalOpen: action.bound, + setIsFilterModalOpen: action.bound, setIsLoading: action.bound, setIsSubmitSuccess: action.bound, setPaymentMethodValue: action.bound, @@ -129,15 +142,17 @@ export default class MyProfileStore extends BaseStore { setPaymentMethodToEdit: action.bound, setSearchResults: action.bound, setSearchTerm: action.bound, - setSelectedBlockedUser: action.bound, setSelectedPaymentMethod: action.bound, setSelectedPaymentMethodDisplayName: action.bound, setSelectedPaymentMethodFields: action.bound, setSelectedPaymentMethodType: action.bound, + setSelectedSortValue: action.bound, + setSelectedTradePartner: action.bound, setShouldHideMyProfileTab: action.bound, setShouldShowAddPaymentMethodErrorModal: action.bound, setShouldShowAddPaymentMethodForm: action.bound, setShouldShowEditPaymentMethodForm: action.bound, + setTradePartnersList: action.bound, }); } @@ -161,6 +176,25 @@ export default class MyProfileStore extends BaseStore { return list; } + get block_user_sort_list() { + return [ + { + text: localize('All ({{list_value}})', { + list_value: this.is_block_user_table_loading ? '...' : this.trade_partner_dropdown_list.length, + }), + value: 'all_users', + }, + { + text: localize('Blocked ({{list_value}})', { + list_value: this.is_block_user_table_loading + ? '...' + : this.trade_partner_dropdown_list.filter(partner => partner.is_blocked === 1).length, + }), + value: 'blocked_users', + }, + ]; + } + get payment_method_field_set() { // The fields are rendered dynamically based on the response. This variable will hold a dictionary of field id and its name/required properties return this.selected_payment_method_fields.reduce((dict, field_data) => { @@ -230,16 +264,29 @@ export default class MyProfileStore extends BaseStore { } /** - * Evaluates a new blocked_advertiser_list based on if the user has searched a blocked advertiser - * By default it returns the blocked_advertisers_list when there are no searches + * Evaluates a new trade_partners_list based on if the user has searched an advertiser + * By default it returns the trade_partners_list when there are no searches * - * @returns {Array} Either the entire blocked advertisers list or filtered advertisers list by search term + * @returns {Array} Returns the entire trade partners list or filtered list of searched trade partners */ - get rendered_blocked_advertisers_list() { + get rendered_trade_partners_list() { if (this.search_term) { - return this.search_results; + return this.selected_sort_value === 'all_users' + ? this.search_results + : this.search_results.filter(partner => partner.is_blocked === 1); } - return this.blocked_advertisers_list; + return this.selected_sort_value === 'all_users' + ? this.trade_partners_list + : this.trade_partners_list.filter(partner => partner.is_blocked === 1); + } + + get trade_partner_dropdown_list() { + if (this.search_term) { + if (this.search_results.length) return this.search_results; + else if (this.search_results.length === 0) return []; + } + + return this.trade_partners_list; } createPaymentMethod(values, { setSubmitting }) { @@ -282,23 +329,6 @@ export default class MyProfileStore extends BaseStore { }); } - getBlockedAdvertisersList() { - this.setIsLoading(true); - requestWS({ - p2p_advertiser_relations: 1, - }).then(response => { - if (response) { - if (!response.error) { - this.setBlockedAdvertisersList(response.p2p_advertiser_relations?.blocked_advertisers); - this.loadMoreBlockedAdvertisers(); - } else { - this.root_store.general_store.setBlockUnblockUserError(response.error.message); - } - } - this.setIsLoading(false); - }); - } - getAdvertiserPaymentMethods() { this.setIsLoading(true); requestWS({ @@ -313,6 +343,23 @@ export default class MyProfileStore extends BaseStore { }); } + getCounterpartyAdvertiserInfo(advertiser_id) { + const { advertiser_page_store, buy_sell_store, general_store } = this.root_store; + requestWS({ + p2p_advertiser_info: 1, + id: advertiser_id, + }).then(response => { + if (response) { + if (!response.error) { + advertiser_page_store.setCounterpartyAdvertiserInfo(response.p2p_advertiser_info); + buy_sell_store.setShowAdvertiserPage(true); + } else { + general_store.setBlockUnblockUserError(response.error.message); + } + } + }); + } + getPaymentMethodsList() { requestWS({ p2p_payment_methods: 1, @@ -394,6 +441,40 @@ export default class MyProfileStore extends BaseStore { } }); } + + getTradePartnersList(is_initial_load = false) { + const { general_store } = this.root_store; + + if (is_initial_load) this.setIsBlockUserTableLoading(true); + + requestWS({ + p2p_advertiser_list: 1, + trade_partners: 1, + ...(this.search_term ? { advertiser_name: this.search_term } : {}), + }).then(response => { + if (response) { + if (!response.error) { + const { list } = response.p2p_advertiser_list; + + if (this.search_term) this.setSearchResults(list); + else this.setTradePartnersList(list); + } else { + general_store.setBlockUnblockUserError(response.error.message); + } + } + this.setIsBlockUserTableLoading(false); + }); + } + + handleChange(e) { + this.setSelectedSortValue(e.target.value); + this.getTradePartnersList(true); + + if (isMobile()) { + this.setIsFilterModalOpen(false); + } + } + handleSubmit(values) { requestWS({ p2p_advertiser_update: 1, @@ -411,6 +492,7 @@ export default class MyProfileStore extends BaseStore { }, 3000); }); } + handleToggle() { this.root_store.general_store.setShouldShowRealName(!this.root_store?.general_store?.should_show_real_name); requestWS({ @@ -431,23 +513,12 @@ export default class MyProfileStore extends BaseStore { } /** - * This function loads more blocked advertisers as necessary if the user is searching for a blocked advertiser - * It updates the search_results based on the searched advertiser + * This function updates the search_results based on the searched advertiser */ - loadMoreBlockedAdvertisers() { + getSearchedTradePartners() { if (this.search_term) { - const search_results = this.blocked_advertisers_list.filter(blocked_advertiser => - blocked_advertiser.name.toLowerCase().includes(this.search_term.toLowerCase().trim()) - ); - - // if user deletes the last blocked advertiser while searching, display 'You have no blocked advertisers' message condition - if (this.search_term && search_results.length === 0 && this.blocked_advertisers_list.length === 0) { - this.setSearchTerm(''); - } - - this.setSearchResults(search_results); + this.getTradePartnersList(true); } - this.setIsLoading(false); } onClickDelete() { @@ -468,11 +539,19 @@ export default class MyProfileStore extends BaseStore { }); } + onClear() { + if (this.search_term) { + this.setSearchTerm(''); + this.setSearchResults([]); + this.getTradePartnersList(true); + } + } + onClickUnblock(advertiser) { const { general_store } = this.root_store; general_store.setIsBlockUserModalOpen(true); - this.setSelectedBlockedUser(advertiser); + this.setSelectedTradePartner(advertiser); } onEditDeletePaymentMethodCard(event, payment_method) { @@ -492,8 +571,8 @@ export default class MyProfileStore extends BaseStore { clearTimeout(delay); general_store.setIsBlockUserModalOpen(false); - general_store.blockUnblockUser(false, this.selected_blocked_user.id); - const delay = setTimeout(() => this.getBlockedAdvertisersList(), 250); + general_store.blockUnblockUser(!this.selected_trade_partner.is_blocked, this.selected_trade_partner.id); + const delay = setTimeout(() => this.getTradePartnersList(), 250); } showAddPaymentMethodForm() { @@ -615,10 +694,6 @@ export default class MyProfileStore extends BaseStore { this.available_payment_methods = available_payment_methods; } - setBlockedAdvertisersList(blocked_advertisers_list) { - this.blocked_advertisers_list = blocked_advertisers_list; - } - setDefaultAdvertDescription(default_advert_description) { this.default_advert_description = default_advert_description; } @@ -639,6 +714,10 @@ export default class MyProfileStore extends BaseStore { this.full_name = full_name; } + setIsBlockUserTableLoading(is_block_user_table_loading) { + this.is_block_user_table_loading = is_block_user_table_loading; + } + setIsCancelAddPaymentMethodModalOpen(is_cancel_add_payment_method_modal_open) { this.is_cancel_add_payment_method_modal_open = is_cancel_add_payment_method_modal_open; } @@ -655,6 +734,10 @@ export default class MyProfileStore extends BaseStore { this.is_delete_payment_method_error_modal_open = is_delete_payment_method_error_modal_open; } + setIsFilterModalOpen(is_filter_modal_open) { + this.is_filter_modal_open = is_filter_modal_open; + } + setIsLoading(is_loading) { this.is_loading = is_loading; } @@ -687,10 +770,6 @@ export default class MyProfileStore extends BaseStore { this.search_term = search_term; } - setSelectedBlockedUser(selected_blocked_user) { - this.selected_blocked_user = selected_blocked_user; - } - setSelectedPaymentMethod(selected_payment_method) { this.selected_payment_method = selected_payment_method; } @@ -707,6 +786,14 @@ export default class MyProfileStore extends BaseStore { this.selected_payment_method_type = selected_payment_method_type; } + setSelectedSortValue(selected_sort_value) { + this.selected_sort_value = selected_sort_value; + } + + setSelectedTradePartner(selected_trade_partner) { + this.selected_trade_partner = selected_trade_partner; + } + setShouldHideMyProfileTab(should_hide_my_profile_tab) { this.should_hide_my_profile_tab = should_hide_my_profile_tab; } @@ -722,4 +809,8 @@ export default class MyProfileStore extends BaseStore { setShouldShowEditPaymentMethodForm(should_show_edit_payment_method_form) { this.should_show_edit_payment_method_form = should_show_edit_payment_method_form; } + + setTradePartnersList(trade_partners_list) { + this.trade_partners_list = trade_partners_list; + } }