diff --git a/packages/ui/src/components/sections/skills/catalog/AddCatalogDialog.tsx b/packages/ui/src/components/sections/skills/catalog/AddCatalogDialog.tsx index b85241f3..37b2aab6 100644 --- a/packages/ui/src/components/sections/skills/catalog/AddCatalogDialog.tsx +++ b/packages/ui/src/components/sections/skills/catalog/AddCatalogDialog.tsx @@ -96,10 +96,22 @@ export const AddCatalogDialog: React.FC = ({ open, onOpen const [identityOptions, setIdentityOptions] = React.useState([]); const [gitIdentityId, setGitIdentityId] = React.useState(null); + const scanRequestIdRef = React.useRef(0); + + const invalidateScan = React.useCallback((options?: { clearIdentity?: boolean }) => { + scanRequestIdRef.current += 1; + setScanOk(false); + setScanCount(null); + if (options?.clearIdentity) { + setIdentityOptions([]); + setGitIdentityId(null); + } + }, []); React.useEffect(() => { if (!open) return; + scanRequestIdRef.current += 1; setLabel(''); setSource(''); setSubpath(''); @@ -140,6 +152,8 @@ export const AddCatalogDialog: React.FC = ({ open, onOpen setScanOk(false); setScanCount(null); + const requestId = scanRequestIdRef.current + 1; + scanRequestIdRef.current = requestId; const result = await scanRepo({ source: trimmedSource, @@ -147,6 +161,10 @@ export const AddCatalogDialog: React.FC = ({ open, onOpen gitIdentityId: gitIdentityId || undefined, }); + if (scanRequestIdRef.current !== requestId) { + return; + } + if (!result.ok) { if (result.error?.kind === 'authRequired') { if (isVSCodeRuntime()) { @@ -257,8 +275,7 @@ export const AddCatalogDialog: React.FC = ({ open, onOpen value={source} onChange={(e) => { setSource(e.target.value); - setScanOk(false); - setScanCount(null); + invalidateScan({ clearIdentity: true }); }} placeholder={t('settings.skills.catalog.shared.field.repositoryPlaceholder')} /> @@ -273,8 +290,7 @@ export const AddCatalogDialog: React.FC = ({ open, onOpen value={subpath} onChange={(e) => { setSubpath(e.target.value); - setScanOk(false); - setScanCount(null); + invalidateScan({ clearIdentity: true }); }} placeholder={t('settings.skills.catalog.shared.field.subpathPlaceholder')} /> @@ -286,7 +302,13 @@ export const AddCatalogDialog: React.FC = ({ open, onOpen {t('settings.skills.catalog.shared.auth.title')} {t('settings.skills.catalog.shared.auth.description')} - { + setGitIdentityId(v); + invalidateScan(); + }} + > {identityOptions.find((i) => i.id === gitIdentityId)?.name || t('settings.skills.catalog.shared.auth.chooseIdentity')}