fix: onboarding screen should show persisted cloud providers (#4738)

This commit is contained in:
Louis 2025-02-26 14:29:36 +07:00 committed by GitHub
parent 053604ec28
commit 916b28044d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 60 additions and 66 deletions

View File

@ -35,5 +35,12 @@ module.exports = {
{ name: 'Link', linkAttribute: 'to' },
],
},
ignorePatterns: ['build', 'renderer', 'node_modules', '@global', 'playwright-report'],
ignorePatterns: [
'build',
'renderer',
'node_modules',
'@global',
'playwright-report',
'test-data',
],
}

View File

@ -19,5 +19,5 @@
"esm": true
},
"include": ["./**/*.ts"],
"exclude": ["core", "build", "dist", "tests", "node_modules"]
"exclude": ["core", "build", "dist", "tests", "node_modules", "test-data"]
}

View File

@ -266,7 +266,9 @@ export default class JanEngineManagementExtension extends EngineManagementExtens
.get(`${API_URL}/healthz`, {
retry: { limit: 20, delay: () => 500, methods: ['get'] },
})
.then(() => {})
.then(() => {
this.queue.concurrency = Infinity
})
}
/**

View File

@ -1 +1 @@
1.0.11-rc2
1.0.11-rc3

View File

@ -1,7 +1,7 @@
import React from 'react'
import { render, screen, fireEvent } from '@testing-library/react'
import { Provider } from 'jotai'
import OnDeviceStarterScreen from './index'
import OnboardingScreen from './index'
import * as jotai from 'jotai'
import '@testing-library/jest-dom'
@ -74,7 +74,7 @@ describe('OnDeviceStarterScreen', () => {
})
render(
<Provider>
<OnDeviceStarterScreen isShowStarterScreen={true} />
<OnboardingScreen isShowStarterScreen={true} />
</Provider>
)
@ -90,7 +90,7 @@ describe('OnDeviceStarterScreen', () => {
})
render(
<Provider>
<OnDeviceStarterScreen isShowStarterScreen={true} />
<OnboardingScreen isShowStarterScreen={true} />
</Provider>
)
@ -110,7 +110,7 @@ describe('OnDeviceStarterScreen', () => {
})
render(
<Provider>
<OnDeviceStarterScreen isShowStarterScreen={true} />
<OnboardingScreen isShowStarterScreen={true} />
</Provider>
)
@ -164,7 +164,7 @@ describe('OnDeviceStarterScreen', () => {
render(
<Provider>
<OnDeviceStarterScreen isShowStarterScreen={true} />
<OnboardingScreen isShowStarterScreen={true} />
</Provider>
)
@ -191,7 +191,7 @@ describe('OnDeviceStarterScreen', () => {
render(
<Provider>
<OnDeviceStarterScreen isShowStarterScreen={true} />
<OnboardingScreen isShowStarterScreen={true} />
</Provider>
)

View File

@ -52,7 +52,7 @@ type Props = {
isShowStarterScreen?: boolean
}
const OnDeviceStarterScreen = ({ isShowStarterScreen }: Props) => {
function OnboardingScreen({ isShowStarterScreen }: Props) {
const [searchValue, setSearchValue] = useState('')
const [isOpen, setIsOpen] = useState(Boolean(searchValue.length))
const downloadingModels = useAtomValue(getDownloadingModelAtom)
@ -62,7 +62,6 @@ const OnDeviceStarterScreen = ({ isShowStarterScreen }: Props) => {
const { engines } = useGetEngines()
const showScrollBar = useAtomValue(showScrollBarAtom)
const configuredModels = useAtomValue(configuredModelsAtom)
const { sources } = useGetModelSources()
const setMainViewState = useSetAtom(mainViewStateAtom)
@ -78,16 +77,6 @@ const OnDeviceStarterScreen = ({ isShowStarterScreen }: Props) => {
[sources, searchValue]
)
const remoteModel = configuredModels.filter(
(x) => !isLocalEngine(engines, x.engine)
)
const remoteModelEngine = remoteModel.map((x) => x.engine)
const groupByEngine = remoteModelEngine.filter(function (item, index) {
if (remoteModelEngine.indexOf(item) === index) return item
})
const itemsPerRow = 5
const getRows = (array: string[], itemsPerRow: number) => {
@ -98,8 +87,10 @@ const OnDeviceStarterScreen = ({ isShowStarterScreen }: Props) => {
return rows
}
const rows = getRows(
groupByEngine.sort((a, b) => a.localeCompare(b)),
const cloudProviders = getRows(
Object.keys(engines ?? {})
.filter((e) => engines?.[e as InferenceEngine]?.[0]?.type === 'remote')
.sort((a, b) => a.localeCompare(b)),
itemsPerRow
)
@ -297,57 +288,51 @@ const OnDeviceStarterScreen = ({ isShowStarterScreen }: Props) => {
</div>
<div className="flex flex-col justify-center gap-6">
{rows.slice(0, visibleRows).map((row, rowIndex) => {
{cloudProviders.slice(0, visibleRows).map((row, rowIndex) => {
return (
<div
key={rowIndex}
className="my-2 flex items-center gap-4 md:gap-10"
>
{row
.filter(
(e) =>
engines?.[e as InferenceEngine]?.[0]?.type ===
'remote'
{row.map((remoteEngine) => {
const engineLogo = getLogoEngine(
remoteEngine as InferenceEngine
)
.map((remoteEngine) => {
const engineLogo = getLogoEngine(
remoteEngine as InferenceEngine
)
return (
<div
className="flex cursor-pointer flex-col items-center justify-center gap-4"
key={remoteEngine}
onClick={() => {
setMainViewState(MainViewState.Settings)
setSelectedSetting(
remoteEngine as InferenceEngine
)
}}
>
{engineLogo && (
<Image
width={48}
height={48}
src={engineLogo}
alt="Engine logo"
className="h-10 w-10 flex-shrink-0"
/>
return (
<div
className="flex cursor-pointer flex-col items-center justify-center gap-4"
key={remoteEngine}
onClick={() => {
setMainViewState(MainViewState.Settings)
setSelectedSetting(
remoteEngine as InferenceEngine
)
}}
>
{engineLogo && (
<Image
width={48}
height={48}
src={engineLogo}
alt="Engine logo"
className="h-10 w-10 flex-shrink-0"
/>
)}
<p className="font-medium">
{getTitleByEngine(
remoteEngine as InferenceEngine
)}
<p className="font-medium">
{getTitleByEngine(
remoteEngine as InferenceEngine
)}
</p>
</div>
)
})}
</p>
</div>
)
})}
</div>
)
})}
</div>
{visibleRows < rows.length && (
{visibleRows < cloudProviders.length && (
<button
onClick={() => setVisibleRows(visibleRows + 1)}
className="mt-4 text-[hsla(var(--text-secondary))]"
@ -364,4 +349,4 @@ const OnDeviceStarterScreen = ({ isShowStarterScreen }: Props) => {
)
}
export default OnDeviceStarterScreen
export default OnboardingScreen

View File

@ -5,7 +5,7 @@ import { useStarterScreen } from '@/hooks/useStarterScreen'
import ThreadLeftPanel from '@/screens/Thread/ThreadLeftPanel'
import ThreadCenterPanel from './ThreadCenterPanel'
import OnDeviceStarterScreen from './ThreadCenterPanel/ChatBody/OnDeviceStarterScreen'
import OnboardingScreen from './ThreadCenterPanel/ChatBody/OnboardingScreen'
import ModalCleanThread from './ThreadLeftPanel/ModalCleanThread'
import ModalDeleteThread from './ThreadLeftPanel/ModalDeleteThread'
import ModalEditTitleThread from './ThreadLeftPanel/ModalEditTitleThread'
@ -17,7 +17,7 @@ type Props = {
const ThreadPanels = memo(({ isShowStarterScreen }: Props) => {
return isShowStarterScreen ? (
<OnDeviceStarterScreen isShowStarterScreen={isShowStarterScreen} />
<OnboardingScreen isShowStarterScreen={isShowStarterScreen} />
) : (
<>
<ThreadLeftPanel />