refactor(providers): share the brand logo map

ProviderCategoryList and ProviderResourcePanel each kept an identical brand-to-logo table; move it to a single module.
This commit is contained in:
LTbinglingfeng
2026-06-13 02:14:00 +08:00
Unverified
parent d268be1400
commit f62b09a57b
3 changed files with 25 additions and 32 deletions
+21
View File
@@ -0,0 +1,21 @@
import ampcodeLogo from '@/assets/icons/amp.svg';
import claudeLogo from '@/assets/icons/claude.svg';
import codexLogo from '@/assets/icons/codex.svg';
import geminiLogo from '@/assets/icons/gemini.svg';
import openaiLogo from '@/assets/icons/openai-light.svg';
import vertexLogo from '@/assets/icons/vertex.svg';
import type { ProviderBrand } from './types';
export interface ProviderBrandLogo {
src: string;
invertOnDark?: boolean;
}
export const PROVIDER_LOGOS: Record<ProviderBrand, ProviderBrandLogo> = {
gemini: { src: geminiLogo },
claude: { src: claudeLogo },
codex: { src: codexLogo },
vertex: { src: vertexLogo },
openaiCompatibility: { src: openaiLogo, invertOnDark: true },
ampcode: { src: ampcodeLogo },
};
@@ -1,22 +1,8 @@
import { useTranslation } from 'react-i18next';
import ampcodeLogo from '@/assets/icons/amp.svg';
import claudeLogo from '@/assets/icons/claude.svg';
import codexLogo from '@/assets/icons/codex.svg';
import geminiLogo from '@/assets/icons/gemini.svg';
import openaiLogo from '@/assets/icons/openai-light.svg';
import vertexLogo from '@/assets/icons/vertex.svg';
import { PROVIDER_LOGOS } from '../brandLogos';
import type { ProviderBrand, ProviderGroup } from '../types';
import styles from './ProviderCategoryList.module.scss';
const PROVIDER_LOGOS: Record<ProviderBrand, { src: string; invertOnDark?: boolean }> = {
gemini: { src: geminiLogo },
claude: { src: claudeLogo },
codex: { src: codexLogo },
vertex: { src: vertexLogo },
openaiCompatibility: { src: openaiLogo, invertOnDark: true },
ampcode: { src: ampcodeLogo },
};
interface ProviderCategoryListProps {
groups: ProviderGroup[];
activeBrand: ProviderBrand;
@@ -1,27 +1,13 @@
import { useTranslation } from 'react-i18next';
import ampcodeLogo from '@/assets/icons/amp.svg';
import claudeLogo from '@/assets/icons/claude.svg';
import codexLogo from '@/assets/icons/codex.svg';
import geminiLogo from '@/assets/icons/gemini.svg';
import openaiLogo from '@/assets/icons/openai-light.svg';
import vertexLogo from '@/assets/icons/vertex.svg';
import { IconPlus, IconSearch } from '@/components/ui/icons';
import type { ProviderRecentUsageMap } from '@/components/providers/utils';
import type { ProviderBrand, ProviderGroup, ProviderResource } from '../types';
import { PROVIDER_LOGOS } from '../brandLogos';
import type { ProviderGroup, ProviderResource } from '../types';
import { ProviderResourceTable } from './ProviderResourceTable';
import { ProviderResourceToolbar } from './ProviderResourceToolbar';
import type { ProviderSortBy, SortDir } from '../types';
import styles from './ProviderResourcePanel.module.scss';
const LOGOS: Record<ProviderBrand, { src: string; invertOnDark?: boolean }> = {
gemini: { src: geminiLogo },
claude: { src: claudeLogo },
codex: { src: codexLogo },
vertex: { src: vertexLogo },
openaiCompatibility: { src: openaiLogo, invertOnDark: true },
ampcode: { src: ampcodeLogo },
};
export interface ProviderPanelControls {
sortBy: ProviderSortBy;
sortDir: SortDir;
@@ -64,7 +50,7 @@ export function ProviderResourcePanel({
onCreate,
}: ProviderResourcePanelProps) {
const { t } = useTranslation();
const logo = LOGOS[group.id];
const logo = PROVIDER_LOGOS[group.id];
const realResources = filteredResources.filter((r) => !r.flags.isPlaceholder);