Skip to content
4 changes: 0 additions & 4 deletions src/ONYXKEYS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -519,10 +519,8 @@ const ONYXKEYS = {
RAM_ONLY_IS_LOADING_SEARCH_FILTERS_CATEGORY_DATA: 'isLoadingSearchFiltersCategoryData',

/** Set whether the search filters vendor data has loaded */
IS_SEARCH_FILTERS_VENDOR_DATA_LOADED: 'isSearchFiltersVendorDataLoaded',

/** Set while search filter vendor data is loading */
RAM_ONLY_IS_LOADING_SEARCH_FILTERS_VENDOR_DATA: 'isLoadingSearchFiltersVendorData',

HAS_LOADED_APP: 'hasLoadedApp',

Expand Down Expand Up @@ -1792,8 +1790,6 @@ type OnyxValuesMapping = {
[ONYXKEYS.RAM_ONLY_HAS_RULES_DATA_BEEN_FETCHED]: boolean;
[ONYXKEYS.RAM_ONLY_IS_LOADING_RULES]: boolean;
[ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_CATEGORY_DATA]: boolean;
[ONYXKEYS.IS_SEARCH_FILTERS_VENDOR_DATA_LOADED]: boolean;
[ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_VENDOR_DATA]: boolean;
[ONYXKEYS.IS_LOADING_SUBSCRIPTION_DATA]: boolean;
[ONYXKEYS.IS_PENDING_UPDATE_PERSONAL_KARMA]: boolean;
[ONYXKEYS.IS_TEST_TOOLS_MODAL_OPEN]: boolean;
Expand Down
58 changes: 16 additions & 42 deletions src/components/Search/FilterComponents/VendorSelector.tsx
Original file line number Diff line number Diff line change
@@ -1,25 +1,16 @@
import ActivityIndicator from '@components/ActivityIndicator';
import type {Filter, SearchFilterCommonProps} from '@components/Search/types';

import useLoadSearchVendorData from '@hooks/useLoadSearchVendorData';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import usePermissions from '@hooks/usePermissions';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';

import {getVendorFeaturePolicyIDs} from '@libs/PolicyUtils';
import {getAllPolicyValues, sortOptionsWithEmptyValue} from '@libs/SearchQueryUtils';
import {getMatchingVendors, getVendorFeaturePolicyIDs} from '@libs/PolicyUtils';
import {sortOptionsWithEmptyValue} from '@libs/SearchQueryUtils';

import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {Policy, PolicyVendors} from '@src/types/onyx';
import {getEmptyObject} from '@src/types/utils/EmptyObject';

import type {OnyxCollection} from 'react-native-onyx';

import React, {useCallback} from 'react';
import {View} from 'react-native';
import React from 'react';

import MultiSelect from './MultiSelect';

Expand All @@ -31,15 +22,16 @@ function VendorSelector({value = [], policyID, selectionListTextInputStyle, sele
const {translate, localeCompare} = useLocalize();
const {isBetaEnabled} = usePermissions();
const isVendorMatchingBetaEnabled = isBetaEnabled(CONST.BETAS.VENDOR_MATCHING);
const {isLoadingInitialVendors} = useLoadSearchVendorData({shouldRefresh: true});
const theme = useTheme();
const styles = useThemeStyles();
const vendorFeaturePolicyIDsSelector = useCallback(
(allPolicies: OnyxCollection<Policy>) => getVendorFeaturePolicyIDs(allPolicies, isVendorMatchingBetaEnabled),
[isVendorMatchingBetaEnabled],

const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);

// Uses the same synced vendors the expense Vendor field offers.
const vendorNamesByPolicyID = Object.fromEntries(
getVendorFeaturePolicyIDs(allPolicies, isVendorMatchingBetaEnabled).map((id) => [
id,
getMatchingVendors(allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${id}`]).map((vendor) => vendor.name),
]),
);
const [vendorFeaturePolicyIDs] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: vendorFeaturePolicyIDsSelector});
const [allPolicyVendors = getEmptyObject<NonNullable<OnyxCollection<PolicyVendors>>>()] = useOnyx(ONYXKEYS.COLLECTION.POLICY_VENDORS);

const noVendorLabel = translate('search.noVendor');
const selectedVendorItems = value.map((vendor) => {
Expand All @@ -49,18 +41,12 @@ function VendorSelector({value = [], policyID, selectionListTextInputStyle, sele
return {text: vendor, value: vendor};
});

// Vendor lists are only offered for the workspaces where the vendor feature is on, so stale lists left behind by a
// disconnected integration never surface in the picker.
const eligiblePolicyIDs = new Set(vendorFeaturePolicyIDs);
const eligiblePolicyVendors: OnyxCollection<PolicyVendors> = Object.fromEntries(
Object.entries(allPolicyVendors).filter(([key]) => eligiblePolicyIDs.has(key.replace(ONYXKEYS.COLLECTION.POLICY_VENDORS, ''))),
);

const isPolicySelected = (id: string) => !policyID?.value?.length || policyID.isNegated !== policyID.value.includes(id);
const vendorItems = [{text: noVendorLabel, value: CONST.SEARCH.VENDOR_EMPTY_VALUE as string}];
const uniqueVendorNames = new Set<string>(
getAllPolicyValues(policyID?.value?.length ? policyID : undefined, ONYXKEYS.COLLECTION.POLICY_VENDORS, eligiblePolicyVendors).flatMap((policyVendors) =>
Object.values(policyVendors ?? {}).map((vendor) => vendor.name),
),
Object.entries(vendorNamesByPolicyID)
.filter(([id]) => isPolicySelected(id))
.flatMap(([, vendorNames]) => vendorNames),
);
vendorItems.push(
...Array.from(uniqueVendorNames)
Expand All @@ -69,18 +55,6 @@ function VendorSelector({value = [], policyID, selectionListTextInputStyle, sele
.toSorted((a, b) => sortOptionsWithEmptyValue(a.text, b.text, localeCompare)),
);

if (isLoadingInitialVendors) {
return (
<View style={[styles.flex1, styles.flexColumn, styles.justifyContentCenter, styles.alignItemsCenter]}>
<ActivityIndicator
color={theme.spinner}
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
style={[styles.pl3]}
/>
</View>
);
}

return (
<MultiSelect
value={selectedVendorItems}
Expand Down
59 changes: 0 additions & 59 deletions src/hooks/useLoadSearchVendorData.ts

This file was deleted.

2 changes: 0 additions & 2 deletions src/libs/API/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1561,7 +1561,6 @@ const READ_COMMANDS = {
OPEN_SEARCH_PAGE: 'OpenSearchPage',
OPEN_SEARCH_CARD_FILTERS_PAGE: 'OpenSearchCardFiltersPage',
OPEN_SEARCH_CATEGORY_FILTERS_PAGE: 'OpenSearchCategoryFiltersPage',
OPEN_SEARCH_VENDOR_FILTERS_PAGE: 'OpenSearchVendorFiltersPage',
SEARCH: 'Search',
GET_INSIGHTS: 'GetInsights',
GET_TRANSACTIONS_CONVERTED_AMOUNT: 'GetTransactionsConvertedAmount',
Expand Down Expand Up @@ -1743,7 +1742,6 @@ type ReadCommandParameters = {
[READ_COMMANDS.OPEN_DRAFT_DISTANCE_EXPENSE]: null;
[READ_COMMANDS.OPEN_SEARCH_CARD_FILTERS_PAGE]: null;
[READ_COMMANDS.OPEN_SEARCH_CATEGORY_FILTERS_PAGE]: null;
[READ_COMMANDS.OPEN_SEARCH_VENDOR_FILTERS_PAGE]: null;
[READ_COMMANDS.START_ISSUE_NEW_CARD_FLOW]: Parameters.StartIssueNewCardFlowParams;
[READ_COMMANDS.OPEN_CARD_DETAILS_PAGE]: Parameters.OpenCardDetailsPageParams;
[READ_COMMANDS.GET_CORPAY_ONBOARDING_FIELDS]: Parameters.GetCorpayOnboardingFieldsParams;
Expand Down
2 changes: 0 additions & 2 deletions src/libs/ExportOnyxState/masking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,6 @@ const safeOnyxKeys = new Set<string>([
ONYXKEYS.IS_PLAID_DISABLED,
ONYXKEYS.IS_SEARCH_FILTERS_CARD_DATA_LOADED,
ONYXKEYS.IS_SEARCH_FILTERS_CATEGORY_DATA_LOADED,
ONYXKEYS.IS_SEARCH_FILTERS_VENDOR_DATA_LOADED,
ONYXKEYS.IS_SENTRY_DEBUG_ENABLED,
ONYXKEYS.IS_SENTRY_SEND_ENABLED,
ONYXKEYS.IS_SWITCHING_TO_DELEGATOR,
Expand Down Expand Up @@ -504,7 +503,6 @@ const onyxKeysToMaskFragileData = new Set<string>([
ONYXKEYS.RAM_ONLY_HAS_DISMISSED_CONCIERGE_NOTIFICATION_BANNER,
ONYXKEYS.RAM_ONLY_HAS_FRESH_WALLET_DATA,
ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_CATEGORY_DATA,
ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_VENDOR_DATA,
ONYXKEYS.RAM_ONLY_SEARCH_TAG_FILTERS_PAGINATION,
ONYXKEYS.RAM_ONLY_SEARCH_TAG_FILTERS_RESULTS,
ONYXKEYS.RAM_ONLY_WALLET_ONFIDO,
Expand Down
29 changes: 0 additions & 29 deletions src/libs/actions/Search.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1078,34 +1078,6 @@ function openSearchCategoryFiltersPage() {
read(READ_COMMANDS.OPEN_SEARCH_CATEGORY_FILTERS_PAGE, null, {optimisticData, successData, finallyData});
}

function openSearchVendorFiltersPage() {
const optimisticData: Array<OnyxUpdate<typeof ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_VENDOR_DATA>> = [
{
onyxMethod: Onyx.METHOD.MERGE,
key: ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_VENDOR_DATA,
value: true,
},
];

const successData: Array<OnyxUpdate<typeof ONYXKEYS.IS_SEARCH_FILTERS_VENDOR_DATA_LOADED>> = [
{
onyxMethod: Onyx.METHOD.MERGE,
key: ONYXKEYS.IS_SEARCH_FILTERS_VENDOR_DATA_LOADED,
value: true,
},
];

const finallyData: Array<OnyxUpdate<typeof ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_VENDOR_DATA>> = [
{
onyxMethod: Onyx.METHOD.MERGE,
key: ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_VENDOR_DATA,
value: false,
},
];

read(READ_COMMANDS.OPEN_SEARCH_VENDOR_FILTERS_PAGE, null, {optimisticData, successData, finallyData});
}

/**
* Fetches a page of tag filter search results from the server.
* Returns pagination metadata (hasMore, nextCursor) for infinite scroll.
Expand Down Expand Up @@ -2657,7 +2629,6 @@ export {
handlePreventSearchAPI,
openSearchCardFiltersPage,
openSearchCategoryFiltersPage,
openSearchVendorFiltersPage,
openSearchTagFiltersPage,
setSearchTagFiltersPagination,
clearSearchTagFiltersState,
Expand Down
1 change: 0 additions & 1 deletion src/setup/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ export default function () {
ONYXKEYS.RAM_ONLY_HAS_RULES_DATA_BEEN_FETCHED,
ONYXKEYS.RAM_ONLY_IS_LOADING_RULES,
ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_CATEGORY_DATA,
ONYXKEYS.RAM_ONLY_IS_LOADING_SEARCH_FILTERS_VENDOR_DATA,
ONYXKEYS.RAM_ONLY_SEARCH_TAG_FILTERS_PAGINATION,
ONYXKEYS.RAM_ONLY_SEARCH_TAG_FILTERS_RESULTS,
ONYXKEYS.COLLECTION.RAM_ONLY_REPORT_LOADING_STATE,
Expand Down
Loading
Loading