in apps/chat/src/components/Marketplace/TabRenderer.tsx [198:294]
description: translate(
'Are you sure you want to remove the {{modelName}}{{modelVersion}} from My workspace?',
translationVariables,
),
confirmLabel: translate('Remove'),
},
};
return deleteConfirmationText[action];
};
interface TabRendererProps {
screenState: ScreenState;
}
export const TabRenderer = ({ screenState }: TabRendererProps) => {
const { t } = useTranslation(Translation.Marketplace);
const dispatch = useAppDispatch();
const installedModelIds = useAppSelector(
ModelsSelectors.selectInstalledModelIds,
);
const selectedTab = useAppSelector(MarketplaceSelectors.selectSelectedTab);
const selectedFilters = useAppSelector(
MarketplaceSelectors.selectSelectedFilters,
);
const searchTerm = useAppSelector(
MarketplaceSelectors.selectTrimmedSearchTerm,
);
const allModels = useAppSelector(ModelsSelectors.selectModels);
const detailsModel = useAppSelector(MarketplaceSelectors.selectDetailsModel);
const modelsMap = useAppSelector(ModelsSelectors.selectModelsMap);
const [suggestedResults, setSuggestedResults] = useState<DialAIEntityModel[]>(
[],
);
const [applicationModel, setApplicationModel] = useState<{
action: ApplicationActionType;
type: ApplicationType;
entity?: DialAIEntityModel;
}>();
const [deleteModel, setDeleteModel] = useState<{
action: DeleteType;
entity: DialAIEntityModel;
}>();
const [publishModel, setPublishModel] = useState<{
entity: ShareEntity & { iconUrl?: string };
action: PublishActions;
}>();
const isSomeFilterNotEmpty =
searchTerm.length ||
selectedFilters[FilterTypes.ENTITY_TYPE].length ||
selectedFilters[FilterTypes.TOPICS].length;
const areAllFiltersEmpty =
!searchTerm.length &&
!selectedFilters[FilterTypes.ENTITY_TYPE].length &&
!selectedFilters[FilterTypes.TOPICS].length;
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),
);
const isInstalledModel = (entity: DialAIEntityModel) =>
installedModelIds.has(entity.reference);
const entitiesForTab =
selectedTab === MarketplaceTabs.MY_APPLICATIONS
? filteredEntities.filter(isInstalledModel)
: filteredEntities;
const shouldSuggest =
selectedTab === MarketplaceTabs.MY_APPLICATIONS && isSomeFilterNotEmpty;
const groupedEntities = groupModelsAndSaveOrder(
entitiesForTab.concat(shouldSuggest ? filteredEntities : []),
);
let orderedEntities = groupedEntities.map(({ entities }) => entities[0]);
if (shouldSuggest) {