From e93aa9ff1ce0eaaf0576d376055aa89ff7829920 Mon Sep 17 00:00:00 2001 From: Ilya Bondar Date: Thu, 23 Jan 2025 15:11:51 +0100 Subject: [PATCH 1/3] refactoring --- .../src/components/Chat/TalkTo/TalkToCard.tsx | 6 ++---- .../src/components/Common/FolderContextMenu.tsx | 10 ++-------- .../src/components/Files/FileItemContextMenu.tsx | 9 ++------- .../components/Marketplace/ApplicationCard.tsx | 6 ++---- .../ApplicationDetails/ApplicationFooter.tsx | 7 ++----- .../ApplicationDetails/ApplicationHeader.tsx | 6 ++---- .../src/components/Marketplace/TabRenderer.tsx | 16 ++++++++-------- apps/chat/src/store/models/models.epics.ts | 8 ++------ apps/chat/src/utils/app/id.ts | 6 ++++++ 9 files changed, 28 insertions(+), 46 deletions(-) diff --git a/apps/chat/src/components/Chat/TalkTo/TalkToCard.tsx b/apps/chat/src/components/Chat/TalkTo/TalkToCard.tsx index f941d2b64..acd685972 100644 --- a/apps/chat/src/components/Chat/TalkTo/TalkToCard.tsx +++ b/apps/chat/src/components/Chat/TalkTo/TalkToCard.tsx @@ -23,7 +23,7 @@ import { isExecutableApp, } from '@/src/utils/app/application'; import { isOldConversationReplay } from '@/src/utils/app/conversation'; -import { getRootId } from '@/src/utils/app/id'; +import { isMyApplication } from '@/src/utils/app/id'; import { canWriteSharedWithMe } from '@/src/utils/app/share'; import { PseudoModel, isPseudoModel } from '@/src/utils/server/api'; @@ -124,9 +124,7 @@ export const TalkToCard = ({ ); const isAdmin = useAppSelector(AuthSelectors.selectIsAdmin); - const isMyEntity = entity.id.startsWith( - getRootId({ featureType: FeatureType.Application }), - ); + const isMyEntity = isMyApplication(entity); const canWrite = canWriteSharedWithMe(entity); diff --git a/apps/chat/src/components/Common/FolderContextMenu.tsx b/apps/chat/src/components/Common/FolderContextMenu.tsx index d70c7632a..4f7240d93 100644 --- a/apps/chat/src/components/Common/FolderContextMenu.tsx +++ b/apps/chat/src/components/Common/FolderContextMenu.tsx @@ -18,7 +18,7 @@ import { hasInvalidNameInPath, isEntityNameInvalid, } from '@/src/utils/app/common'; -import { getRootId, isEntityIdExternal } from '@/src/utils/app/id'; +import { isEntityIdExternal, isMyEntity } from '@/src/utils/app/id'; import { isEntityIdPublic } from '@/src/utils/app/publications'; import { AdditionalItemData, FeatureType } from '@/src/types/common'; @@ -166,13 +166,7 @@ export const FolderContextMenu = ({ { name: t('Delete'), display: - (!!onDelete && - folder.id.startsWith( - getRootId({ - featureType, - }), - )) || - !!folder.temporary, + (!!onDelete && isMyEntity(folder, featureType)) || !!folder.temporary, dataQa: 'delete', Icon: IconTrashX, onClick: onDelete, diff --git a/apps/chat/src/components/Files/FileItemContextMenu.tsx b/apps/chat/src/components/Files/FileItemContextMenu.tsx index 3e681ad1f..a1b0c6016 100644 --- a/apps/chat/src/components/Files/FileItemContextMenu.tsx +++ b/apps/chat/src/components/Files/FileItemContextMenu.tsx @@ -9,7 +9,7 @@ import { MouseEvent, MouseEventHandler, useMemo } from 'react'; import { useTranslation } from 'next-i18next'; -import { getRootId } from '@/src/utils/app/id'; +import { isMyEntity } from '@/src/utils/app/id'; import { FeatureType } from '@/src/types/common'; import { DialFile } from '@/src/types/files'; @@ -111,12 +111,7 @@ export function FileItemContextMenu({ { name: t('Delete'), dataQa: 'delete', - display: - file.id.startsWith( - getRootId({ - featureType: FeatureType.File, - }), - ) || !!file.sharedWithMe, + display: isMyEntity(file, FeatureType.File) || !!file.sharedWithMe, Icon: IconTrashX, onClick: onDelete, }, diff --git a/apps/chat/src/components/Marketplace/ApplicationCard.tsx b/apps/chat/src/components/Marketplace/ApplicationCard.tsx index 6a746ca5c..9ce75bf1a 100644 --- a/apps/chat/src/components/Marketplace/ApplicationCard.tsx +++ b/apps/chat/src/components/Marketplace/ApplicationCard.tsx @@ -24,7 +24,7 @@ import { isApplicationStatusUpdating, isExecutableApp, } from '@/src/utils/app/application'; -import { getRootId } from '@/src/utils/app/id'; +import { isMyApplication } from '@/src/utils/app/id'; import { isMediumScreen } from '@/src/utils/app/mobile'; import { isEntityIdPublic } from '@/src/utils/app/publications'; import { canWriteSharedWithMe } from '@/src/utils/app/share'; @@ -142,9 +142,7 @@ export const ApplicationCard = ({ ); const isAdmin = useAppSelector(AuthSelectors.selectIsAdmin); - const isMyApp = entity.id.startsWith( - getRootId({ featureType: FeatureType.Application }), - ); + const isMyApp = isMyApplication(entity); const canWrite = canWriteSharedWithMe(entity); diff --git a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationFooter.tsx b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationFooter.tsx index bf6b37d7b..0dd22669f 100644 --- a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationFooter.tsx +++ b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationFooter.tsx @@ -21,7 +21,7 @@ import { isApplicationStatusUpdating, isExecutableApp, } from '@/src/utils/app/application'; -import { getRootId, isApplicationId } from '@/src/utils/app/id'; +import { isApplicationId, isMyApplication } from '@/src/utils/app/id'; import { isEntityIdPublic } from '@/src/utils/app/publications'; import { canWriteSharedWithMe } from '@/src/utils/app/share'; @@ -29,7 +29,6 @@ import { ApplicationStatus, SimpleApplicationStatus, } from '@/src/types/applications'; -import { FeatureType } from '@/src/types/common'; import { DialAIEntityModel } from '@/src/types/models'; import { Translation } from '@/src/types/translation'; @@ -111,9 +110,7 @@ export const ApplicationDetailsFooter = ({ ModelsSelectors.selectInstalledModelIds, ); - const isMyApp = entity.id.startsWith( - getRootId({ featureType: FeatureType.Application }), - ); + const isMyApp = isMyApplication(entity); const isAdmin = useAppSelector(AuthSelectors.selectIsAdmin); const isPublicApp = isEntityIdPublic(entity); const Bookmark = installedModelIds.has(entity.reference) diff --git a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationHeader.tsx b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationHeader.tsx index 2948327b8..abeea518a 100644 --- a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationHeader.tsx +++ b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationHeader.tsx @@ -8,7 +8,7 @@ import classNames from 'classnames'; import { useScreenState } from '@/src/hooks/useScreenState'; import { isApplicationPublic } from '@/src/utils/app/application'; -import { getRootId } from '@/src/utils/app/id'; +import { isMyApplication } from '@/src/utils/app/id'; import { FeatureType, ScreenState } from '@/src/types/common'; import { DialAIEntityModel } from '@/src/types/models'; @@ -44,9 +44,7 @@ export const ApplicationDetailsHeader = ({ entity }: Props) => { ? MOBILE_SHARE_ICON_SIZE : DESKTOP_SHARE_ICON_SIZE; - const isMyApp = entity.id.startsWith( - getRootId({ featureType: FeatureType.Application }), - ); + const isMyApp = isMyApplication(entity); const isPublicApp = isApplicationPublic(entity); const handleOpenSharing: MouseEventHandler = useCallback(() => { diff --git a/apps/chat/src/components/Marketplace/TabRenderer.tsx b/apps/chat/src/components/Marketplace/TabRenderer.tsx index d2c3f2d41..975a284c4 100644 --- a/apps/chat/src/components/Marketplace/TabRenderer.tsx +++ b/apps/chat/src/components/Marketplace/TabRenderer.tsx @@ -3,11 +3,13 @@ import { useCallback, useMemo, useState } from 'react'; import { useTranslation } from 'next-i18next'; -import { getApplicationType } from '@/src/utils/app/application'; +import { + getApplicationType, + isApplicationPublic, +} from '@/src/utils/app/application'; import { groupModelsAndSaveOrder } from '@/src/utils/app/conversation'; import { getFolderIdFromEntityId } from '@/src/utils/app/folders'; -import { getRootId } from '@/src/utils/app/id'; -import { isEntityIdPublic } from '@/src/utils/app/publications'; +import { isMyApplication } from '@/src/utils/app/id'; import { doesEntityContainSearchTerm } from '@/src/utils/app/search'; import { translate } from '@/src/utils/app/translation'; import { ApiUtils } from '@/src/utils/server/api'; @@ -16,7 +18,7 @@ import { ApplicationActionType, ApplicationType, } from '@/src/types/applications'; -import { FeatureType, ScreenState } from '@/src/types/common'; +import { ScreenState } from '@/src/types/common'; import { DialAIEntityModel } from '@/src/types/models'; import { SharingType } from '@/src/types/share'; import { Translation } from '@/src/types/translation'; @@ -285,11 +287,9 @@ export const TabRenderer = ({ screenState }: TabRendererProps) => { (selectedFilters[FilterTypes.SOURCES].includes( SourceType.CreatedByMe, ) && - entity.id.startsWith( - getRootId({ featureType: FeatureType.Application }), - )) || + isMyApplication(entity)) || (selectedFilters[FilterTypes.SOURCES].includes(SourceType.Public) && - isEntityIdPublic(entity)) + isApplicationPublic(entity)) : true), ); diff --git a/apps/chat/src/store/models/models.epics.ts b/apps/chat/src/store/models/models.epics.ts index 64c2b5f99..53feb0d4a 100644 --- a/apps/chat/src/store/models/models.epics.ts +++ b/apps/chat/src/store/models/models.epics.ts @@ -26,7 +26,7 @@ import { combineEpics } from 'redux-observable'; import { ClientDataService } from '@/src/utils/app/data/client-data-service'; import { DataService } from '@/src/utils/app/data/data-service'; -import { getRootId } from '@/src/utils/app/id'; +import { isMyApplication } from '@/src/utils/app/id'; import { translate } from '@/src/utils/app/translation'; import { ApplicationStatus } from '@/src/types/applications'; @@ -176,11 +176,7 @@ const getInstalledModelIdsEpic: AppEpic = (action$, state$) => const allModels = ModelsSelectors.selectModels(state$.value); return allModels - .filter((model) => - model.id.startsWith( - getRootId({ featureType: FeatureType.Application }), - ), - ) + .filter((model) => isMyApplication(model)) .map((app) => app.reference); }), switchMap((myAppIds) => { diff --git a/apps/chat/src/utils/app/id.ts b/apps/chat/src/utils/app/id.ts index 67e294ac2..6657a6678 100644 --- a/apps/chat/src/utils/app/id.ts +++ b/apps/chat/src/utils/app/id.ts @@ -71,3 +71,9 @@ export const isEntityIdExternal = (entity: { id: string }) => { const bucket = getEntityBucket(entity); return bucket !== LOCAL_BUCKET && bucket !== BucketService.getBucket(); }; + +export const isMyEntity = (entity: { id: string }, featureType: FeatureType) => + entity.id.startsWith(getRootId({ featureType })); + +export const isMyApplication = (entity: { id: string }) => + isMyEntity(entity, FeatureType.Application); From 64f7ffc9ccade74ca3eb565eb3a00dddfdd5929a Mon Sep 17 00:00:00 2001 From: Ilya Bondar Date: Thu, 23 Jan 2025 16:09:08 +0100 Subject: [PATCH 2/3] feat(chat): add new application type filters (Issue #2996) --- .../Marketplace/MarketplaceFilterbar.tsx | 22 +++--- .../components/Marketplace/TabRenderer.tsx | 32 ++------- apps/chat/src/constants/marketplace.ts | 16 +++-- .../store/marketplace/marketplace.epics.ts | 11 +-- .../marketplace/marketplace.selectors.ts | 39 +++++++++++ apps/chat/src/utils/marketplace.ts | 67 +++++++++++++++++++ 6 files changed, 142 insertions(+), 45 deletions(-) create mode 100644 apps/chat/src/utils/marketplace.ts diff --git a/apps/chat/src/components/Marketplace/MarketplaceFilterbar.tsx b/apps/chat/src/components/Marketplace/MarketplaceFilterbar.tsx index 33f03c58b..ccbed786e 100644 --- a/apps/chat/src/components/Marketplace/MarketplaceFilterbar.tsx +++ b/apps/chat/src/components/Marketplace/MarketplaceFilterbar.tsx @@ -26,7 +26,6 @@ import { ENTITY_TYPES, FilterTypes, MarketplaceTabs, - SOURCE_TYPES, } from '@/src/constants/marketplace'; import Tooltip from '../Common/Tooltip'; @@ -189,6 +188,7 @@ export const MarketplaceFilterbar = () => { const selectedTab = useAppSelector(MarketplaceSelectors.selectSelectedTab); const topics = useAppSelector(ModelsSelectors.selectModelTopics); + const sourceTypes = useAppSelector(MarketplaceSelectors.selectSourceTypes); const [openedSections, setOpenedSections] = useState({ [FilterTypes.ENTITY_TYPE]: true, @@ -276,15 +276,17 @@ export const MarketplaceFilterbar = () => { onToggleFilterSection={handleToggleFilterSection} onApplyFilter={handleApplyFilter} /> - + {sourceTypes.length > 1 && ( + + )} )} diff --git a/apps/chat/src/components/Marketplace/TabRenderer.tsx b/apps/chat/src/components/Marketplace/TabRenderer.tsx index 975a284c4..06c23284b 100644 --- a/apps/chat/src/components/Marketplace/TabRenderer.tsx +++ b/apps/chat/src/components/Marketplace/TabRenderer.tsx @@ -12,6 +12,10 @@ import { getFolderIdFromEntityId } from '@/src/utils/app/folders'; import { isMyApplication } from '@/src/utils/app/id'; import { doesEntityContainSearchTerm } from '@/src/utils/app/search'; import { translate } from '@/src/utils/app/translation'; +import { + doesApplicationMatchFilters, + doesApplicationMatchSearchTerm, +} from '@/src/utils/marketplace'; import { ApiUtils } from '@/src/utils/server/api'; import { @@ -19,6 +23,7 @@ import { ApplicationType, } from '@/src/types/applications'; import { ScreenState } from '@/src/types/common'; +import { MarketplaceFilters } from '@/src/types/marketplace'; import { DialAIEntityModel } from '@/src/types/models'; import { SharingType } from '@/src/types/share'; import { Translation } from '@/src/types/translation'; @@ -266,31 +271,8 @@ export const TabRenderer = ({ screenState }: TabRendererProps) => { const displayedEntities = useMemo(() => { const filteredEntities = allModels.filter( (entity) => - (doesEntityContainSearchTerm(entity, searchTerm) || - (entity.version && - doesEntityContainSearchTerm( - { name: entity.version }, - searchTerm, - ))) && - (selectedFilters[FilterTypes.ENTITY_TYPE].length - ? selectedFilters[FilterTypes.ENTITY_TYPE].includes(entity.type) - : true) && - (selectedFilters[FilterTypes.TOPICS].length - ? intersection(selectedFilters[FilterTypes.TOPICS], entity.topics) - .length - : true) && - (selectedFilters[FilterTypes.SOURCES].length - ? (selectedFilters[FilterTypes.SOURCES].includes( - SourceType.SharedWithMe, - ) && - entity.sharedWithMe) || - (selectedFilters[FilterTypes.SOURCES].includes( - SourceType.CreatedByMe, - ) && - isMyApplication(entity)) || - (selectedFilters[FilterTypes.SOURCES].includes(SourceType.Public) && - isApplicationPublic(entity)) - : true), + doesApplicationMatchSearchTerm(entity, searchTerm) && + doesApplicationMatchFilters(entity, selectedFilters), ); const isInstalledModel = (entity: DialAIEntityModel) => diff --git a/apps/chat/src/constants/marketplace.ts b/apps/chat/src/constants/marketplace.ts index 1203fc06d..a8b4e40ce 100644 --- a/apps/chat/src/constants/marketplace.ts +++ b/apps/chat/src/constants/marketplace.ts @@ -37,11 +37,15 @@ export const ENTITY_TYPES = [ export enum SourceType { Public = 'Public', SharedWithMe = 'Shared with me', - CreatedByMe = 'Created by me', + MyCustomApps = 'My Custom Apps', + MyQuickApps = 'My Quick Apps', + MyCodeApps = 'My Code Apps', } -export const SOURCE_TYPES = [ - SourceType.Public, - SourceType.SharedWithMe, - SourceType.CreatedByMe, -]; +export const SourceTypeOrder = { + [SourceType.Public]: 1, + [SourceType.SharedWithMe]: 2, + [SourceType.MyCustomApps]: 3, + [SourceType.MyQuickApps]: 4, + [SourceType.MyCodeApps]: 5, +}; diff --git a/apps/chat/src/store/marketplace/marketplace.epics.ts b/apps/chat/src/store/marketplace/marketplace.epics.ts index 29ba4fa6a..ecddaa126 100644 --- a/apps/chat/src/store/marketplace/marketplace.epics.ts +++ b/apps/chat/src/store/marketplace/marketplace.epics.ts @@ -10,13 +10,16 @@ import { FilterTypes, MarketplaceQueryParams, MarketplaceTabs, - SOURCE_TYPES, SourceType, } from '@/src/constants/marketplace'; import { ModelsSelectors } from '../models/models.reducers'; import { UIActions } from '../ui/ui.reducers'; -import { MarketplaceActions, MarketplaceState } from './marketplace.reducers'; +import { + MarketplaceActions, + MarketplaceSelectors, + MarketplaceState, +} from './marketplace.reducers'; import { selectDetailsModel, selectSearchTerm, @@ -142,10 +145,10 @@ const initQueryParamsEpic: AppEpic = (action$, state$) => const types = ((query[MarketplaceQueryParams.types] as string) ?? '') .split(',') .filter((type) => type && ENTITY_TYPES.includes(type as EntityType)); - + const sourceTypes = MarketplaceSelectors.selectSourceTypes(state); const sources = ((query[MarketplaceQueryParams.sources] as string) ?? '') .split(',') - .filter((type) => type && SOURCE_TYPES.includes(type as SourceType)); + .filter((type) => type && sourceTypes.includes(type as SourceType)); updatedMarketplaceState.selectedFilters = { [FilterTypes.ENTITY_TYPE]: types, diff --git a/apps/chat/src/store/marketplace/marketplace.selectors.ts b/apps/chat/src/store/marketplace/marketplace.selectors.ts index ec6651aa8..c3734083d 100644 --- a/apps/chat/src/store/marketplace/marketplace.selectors.ts +++ b/apps/chat/src/store/marketplace/marketplace.selectors.ts @@ -1,6 +1,20 @@ +import { b } from 'vitest/dist/suite-IbNSsUWN'; + import { createSelector } from '@reduxjs/toolkit'; +import { + isApplicationPublic, + isExecutableApp, + isQuickApp, +} from '@/src/utils/app/application'; +import { isMyApplication } from '@/src/utils/app/id'; + +import { DialAIEntityModel } from '@/src/types/models'; + +import { SourceType, SourceTypeOrder } from '@/src/constants/marketplace'; + import { RootState } from '../index'; +import { ModelsSelectors } from '../models/models.reducers'; import { MarketplaceState } from './marketplace.reducers'; import { UploadStatus } from '@epam/ai-dial-shared'; @@ -43,3 +57,28 @@ export const selectDetailsModel = createSelector( [rootSelector], (state) => state.detailsModel, ); + +export const selectSourceTypes = createSelector( + [ModelsSelectors.selectModels], + (models: DialAIEntityModel[]) => { + const sourceTypes = new Set([SourceType.Public]); + + models.forEach((model) => { + if (isMyApplication(model)) { + if (isQuickApp(model)) { + sourceTypes.add(SourceType.MyQuickApps); + } else if (isExecutableApp(model)) { + sourceTypes.add(SourceType.MyCodeApps); + } else { + sourceTypes.add(SourceType.MyCustomApps); + } + } else if (!isApplicationPublic(model)) { + sourceTypes.add(SourceType.SharedWithMe); + } + }); + + return Array.from(sourceTypes).sort( + (a, b) => SourceTypeOrder[a] - SourceTypeOrder[b], + ); + }, +); diff --git a/apps/chat/src/utils/marketplace.ts b/apps/chat/src/utils/marketplace.ts new file mode 100644 index 000000000..57c79e7cf --- /dev/null +++ b/apps/chat/src/utils/marketplace.ts @@ -0,0 +1,67 @@ +import { + isApplicationPublic, + isExecutableApp, + isQuickApp, +} from '@/src/utils/app/application'; +import { isMyApplication } from '@/src/utils/app/id'; +import { doesEntityContainSearchTerm } from '@/src/utils/app/search'; + +import { MarketplaceFilters } from '@/src/types/marketplace'; +import { DialAIEntityModel } from '@/src/types/models'; + +import { FilterTypes, SourceType } from '@/src/constants/marketplace'; + +import intersection from 'lodash-es/intersection'; + +export const doesApplicationMatchSearchTerm = ( + model: DialAIEntityModel, + searchTerm: string, +) => { + return ( + doesEntityContainSearchTerm(model, searchTerm) || + (model.version && + doesEntityContainSearchTerm({ name: model.version }, searchTerm)) + ); +}; + +export const doesApplicationMatchFilters = ( + model: DialAIEntityModel, + selectedFilters: MarketplaceFilters, +) => { + if ( + selectedFilters[FilterTypes.ENTITY_TYPE].length && + !selectedFilters[FilterTypes.ENTITY_TYPE].includes(model.type) + ) { + return false; + } + + if ( + selectedFilters[FilterTypes.TOPICS].length && + !intersection(selectedFilters[FilterTypes.TOPICS], model.topics).length + ) { + return false; + } + + if (selectedFilters[FilterTypes.SOURCES].length) { + const sources = selectedFilters[FilterTypes.SOURCES]; + if ( + (sources.includes(SourceType.Public) && isApplicationPublic(model)) || + (sources.includes(SourceType.SharedWithMe) && model.sharedWithMe) || + (sources.includes(SourceType.MyQuickApps) && + isMyApplication(model) && + isQuickApp(model)) || + (sources.includes(SourceType.MyCodeApps) && + isMyApplication(model) && + isExecutableApp(model)) || + (sources.includes(SourceType.MyCustomApps) && + isMyApplication(model) && + !isExecutableApp(model) && + !isQuickApp(model)) + ) { + return true; + } + return false; + } + + return true; +}; From e198157abd5b926f2ae5ff8fe0fdbbe9996757ec Mon Sep 17 00:00:00 2001 From: Ilya Bondar Date: Thu, 23 Jan 2025 16:24:04 +0100 Subject: [PATCH 3/3] fix style checks --- apps/chat/src/components/Marketplace/TabRenderer.tsx | 10 +--------- .../src/store/marketplace/marketplace.selectors.ts | 2 -- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/apps/chat/src/components/Marketplace/TabRenderer.tsx b/apps/chat/src/components/Marketplace/TabRenderer.tsx index 06c23284b..c4296d5e4 100644 --- a/apps/chat/src/components/Marketplace/TabRenderer.tsx +++ b/apps/chat/src/components/Marketplace/TabRenderer.tsx @@ -3,14 +3,9 @@ import { useCallback, useMemo, useState } from 'react'; import { useTranslation } from 'next-i18next'; -import { - getApplicationType, - isApplicationPublic, -} from '@/src/utils/app/application'; +import { getApplicationType } from '@/src/utils/app/application'; import { groupModelsAndSaveOrder } from '@/src/utils/app/conversation'; import { getFolderIdFromEntityId } from '@/src/utils/app/folders'; -import { isMyApplication } from '@/src/utils/app/id'; -import { doesEntityContainSearchTerm } from '@/src/utils/app/search'; import { translate } from '@/src/utils/app/translation'; import { doesApplicationMatchFilters, @@ -23,7 +18,6 @@ import { ApplicationType, } from '@/src/types/applications'; import { ScreenState } from '@/src/types/common'; -import { MarketplaceFilters } from '@/src/types/marketplace'; import { DialAIEntityModel } from '@/src/types/models'; import { SharingType } from '@/src/types/share'; import { Translation } from '@/src/types/translation'; @@ -43,7 +37,6 @@ import { DeleteType, FilterTypes, MarketplaceTabs, - SourceType, } from '@/src/constants/marketplace'; import { PublishModal } from '@/src/components/Chat/Publish/PublishWizard'; @@ -58,7 +51,6 @@ import Magnifier from '../../../public/images/icons/search-alt.svg'; import { NoResultsFound } from '../Common/NoResultsFound'; import { PublishActions, ShareEntity } from '@epam/ai-dial-shared'; -import intersection from 'lodash-es/intersection'; interface NoAgentsFoundProps { children: React.ReactNode; diff --git a/apps/chat/src/store/marketplace/marketplace.selectors.ts b/apps/chat/src/store/marketplace/marketplace.selectors.ts index c3734083d..1fb77b01a 100644 --- a/apps/chat/src/store/marketplace/marketplace.selectors.ts +++ b/apps/chat/src/store/marketplace/marketplace.selectors.ts @@ -1,5 +1,3 @@ -import { b } from 'vitest/dist/suite-IbNSsUWN'; - import { createSelector } from '@reduxjs/toolkit'; import {