Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(chat): refactoring source filters (Issue #2994, #3009) #3006

Merged
merged 7 commits into from
Jan 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,11 @@ export const ConversationSettings = Inversify.register(
const isPlayback = !!conversation.playback?.isPlayback;

if (!model) {
return <SettingContainer>{t('Agent is not available')}</SettingContainer>;
return (
<SettingContainer>
<FieldContainer>{t('Agent is not available')}</FieldContainer>
</SettingContainer>
);
}

if (!doesModelHaveSettings(model)) {
Expand Down
12 changes: 11 additions & 1 deletion apps/chat/src/constants/marketplace.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { ApplicationType } from '../types/applications';
import { EntityType } from '../types/common';

export enum MarketplaceQueryParams {
Expand Down Expand Up @@ -40,12 +41,21 @@ export enum SourceType {
MyCustomApps = 'My Custom Apps',
MyQuickApps = 'My Quick Apps',
MyCodeApps = 'My Code Apps',
MyMindMaps = 'My Mindmaps',
}

export const SourceTypeOrder = {
export const SourceTypeFilterOrder = {
[SourceType.Public]: 1,
[SourceType.SharedWithMe]: 2,
[SourceType.MyCustomApps]: 3,
[SourceType.MyQuickApps]: 4,
[SourceType.MyCodeApps]: 5,
[SourceType.MyMindMaps]: 6,
};

export const ApplicationTypeToSourceType = {
[ApplicationType.CODE_APP]: SourceType.MyCodeApps,
[ApplicationType.QUICK_APP]: SourceType.MyQuickApps,
[ApplicationType.CUSTOM_APP]: SourceType.MyCustomApps,
[ApplicationType.MINDMAP]: SourceType.MyMindMaps,
};
20 changes: 9 additions & 11 deletions apps/chat/src/store/marketplace/marketplace.selectors.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import { createSelector } from '@reduxjs/toolkit';

import {
getApplicationType,
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 {
ApplicationTypeToSourceType,
SourceType,
SourceTypeFilterOrder,
} from '@/src/constants/marketplace';

import { RootState } from '../index';
import { ModelsSelectors } from '../models/models.reducers';
Expand Down Expand Up @@ -63,20 +66,15 @@ export const selectSourceTypes = createSelector(

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);
}
const applicationType = getApplicationType(model);
sourceTypes.add(ApplicationTypeToSourceType[applicationType]);
} else if (!isApplicationPublic(model)) {
sourceTypes.add(SourceType.SharedWithMe);
}
});

return Array.from(sourceTypes).sort(
(a, b) => SourceTypeOrder[a] - SourceTypeOrder[b],
(a, b) => SourceTypeFilterOrder[a] - SourceTypeFilterOrder[b],
);
},
);
1 change: 1 addition & 0 deletions apps/chat/src/types/applications.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,5 @@ export enum ApplicationType {
CUSTOM_APP = 'application',
QUICK_APP = 'quick app',
CODE_APP = 'code app',
MINDMAP = 'mindmap',
}
2 changes: 1 addition & 1 deletion apps/chat/src/utils/app/application.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ export const isExecutableApp = (entity: DialAIEntityModel) =>
export const getApplicationType = (entity: DialAIEntityModel) => {
if (isQuickApp(entity)) return ApplicationType.QUICK_APP;
if (isExecutableApp(entity)) return ApplicationType.CODE_APP;

// TODO: Add mindmap type check in future
return ApplicationType.CUSTOM_APP;
};

Expand Down
22 changes: 9 additions & 13 deletions apps/chat/src/utils/marketplace.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import {
getApplicationType,
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 {
ApplicationTypeToSourceType,
FilterTypes,
SourceType,
} from '@/src/constants/marketplace';

import intersection from 'lodash-es/intersection';

Expand Down Expand Up @@ -44,19 +47,12 @@ export const doesApplicationMatchFilters = (

if (selectedFilters[FilterTypes.SOURCES].length) {
const sources = selectedFilters[FilterTypes.SOURCES];
const applicationType = getApplicationType(model);
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))
(isMyApplication(model) &&
sources.includes(ApplicationTypeToSourceType[applicationType]))
) {
return true;
}
Expand Down
Loading