NamH f47bf36e70
fix(JanHub): #1158 sort model list (#1257)
Signed-off-by: James <james@jan.ai>
Co-authored-by: James <james@jan.ai>
2024-01-04 21:17:32 +07:00

59 lines
1.4 KiB
TypeScript

import { Model } from '@janhq/core'
import ExploreModelItem from '@/screens/ExploreModels/ExploreModelItem'
type Props = {
models: Model[]
}
const ExploreModelList: React.FC<Props> = ({ models }) => {
const takenModelIds: string[] = []
const featuredModels = models
.filter((m) => {
if (m.metadata.tags.includes('Featured')) {
takenModelIds.push(m.id)
return m
}
})
.sort((m1, m2) => m1.metadata.size - m2.metadata.size)
const recommendedModels = models
.filter((m) => {
if (m.metadata.tags.includes('Recommended')) {
takenModelIds.push(m.id)
return m
}
})
.sort((m1, m2) => m1.metadata.size - m2.metadata.size)
const openAiModels = models
.filter((m) => {
if (m.engine === 'openai') {
takenModelIds.push(m.id)
return m
}
})
.sort((m1: Model, m2: Model) => m1.name.localeCompare(m2.name))
const remainingModels = models
.filter((m) => !takenModelIds.includes(m.id))
.sort((m1, m2) => m1.metadata.size - m2.metadata.size)
const sortedModels: Model[] = [
...featuredModels,
...recommendedModels,
...openAiModels,
...remainingModels,
]
return (
<div className="relative h-full w-full flex-shrink-0">
{sortedModels?.map((model) => (
<ExploreModelItem key={model.id} model={model} />
))}
</div>
)
}
export default ExploreModelList