Skip to content

Commit da11050

Browse files
feat: add company logo component
1 parent ec5a04c commit da11050

File tree

3 files changed

+76
-4
lines changed

3 files changed

+76
-4
lines changed

src/pages/library/components/device-info.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { getPlatformInfo } from '@/controllers/get-platform-info.ts'
22
import { getCDNUrl } from '@/utils/cdn.ts'
3+
import { CompanyLogo } from '../platform/components/company-logo.tsx'
34

45
// todo: move to constants
56
const platformImageMap = {
@@ -54,15 +55,21 @@ export async function DeviceInfo({ platform }: { platform: string }) {
5455
<span className='icon-[mdi--chip]' />
5556
Developer
5657
</div>
57-
<div className='pl-6'>{platformInfo.developer || 'unknown'}</div>
58+
<div className='pl-6'>
59+
<CompanyLogo company={platformInfo.developer || ''} />
60+
{platformInfo.developer || 'unknown'}
61+
</div>
5862
</div>
5963

6064
<div>
6165
<div className='flex items-center gap-2 font-semibold'>
6266
<span className='icon-[mdi--factory]' />
6367
Manufacturer
6468
</div>
65-
<div className='pl-6'>{platformInfo.manufacturer || 'unknown'}</div>
69+
<div className='pl-6'>
70+
<CompanyLogo company={platformInfo.manufacturer || ''} />
71+
{platformInfo.manufacturer || 'unknown'}
72+
</div>
6673
</div>
6774
</div>
6875
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import clsx from 'clsx'
2+
import { twMerge } from 'tailwind-merge'
3+
import { getCDNUrl } from '@/utils/cdn.ts'
4+
5+
const knownCompanyMap = new Map(
6+
Object.entries({
7+
'3do': '3do.svg',
8+
atari: 'atari.png',
9+
atlus: 'atlus.svg',
10+
banpresto: 'banpresto.svg',
11+
capcom: 'capcom.svg',
12+
dataeast: 'dataeast.svg',
13+
gaelco: 'gaelco.svg',
14+
gottlieb: 'gottlieb.svg',
15+
igs: 'igs.svg',
16+
irem: 'irem.svg',
17+
jaleco: 'jaleco.svg',
18+
konami: 'konami.svg',
19+
midway: 'midway.svg',
20+
namco: 'namco.svg',
21+
nichibutsu: 'nichibutsu.svg',
22+
nintendo: 'nintendo.svg',
23+
pgm: 'pgm.png',
24+
psikyo: 'psikyo.svg',
25+
sega: 'sega.svg',
26+
seibu: 'seibu.svg',
27+
snk: 'snk.svg',
28+
taito: 'taito.svg',
29+
technos: 'technos.svg',
30+
tecmo: 'tecmo.svg',
31+
}),
32+
)
33+
34+
const repo = 'Mattersons/es-theme-neutral'
35+
function getCompanyLogo(company: string) {
36+
if (!company) {
37+
return
38+
}
39+
40+
const companyLower = company.toLowerCase()
41+
if (knownCompanyMap.has(companyLower)) {
42+
const fileName = knownCompanyMap.get(companyLower)
43+
return getCDNUrl(repo, `systems/logo/${fileName}`)
44+
}
45+
46+
for (const [knownCompany, fileName] of knownCompanyMap.entries()) {
47+
if (companyLower.includes(knownCompany)) {
48+
return getCDNUrl(repo, `systems/logo/${fileName}`)
49+
}
50+
}
51+
}
52+
53+
export function CompanyLogo({ className, company }: { className?: string; company: string }) {
54+
const companyLogo = getCompanyLogo(company)
55+
if (companyLogo) {
56+
return <img alt={company} className={clsx(twMerge('object-contain object-center', className))} src={companyLogo} />
57+
}
58+
}

src/pages/library/platform/rom/components/game-info.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { platformMap } from '@/constants/platform.ts'
2+
import { CompanyLogo } from '../../components/company-logo.tsx'
23

34
export function GameInfo({ gameInfo, rom }) {
45
return (
@@ -29,15 +30,21 @@ export function GameInfo({ gameInfo, rom }) {
2930
<span className='icon-[mdi--chip]' />
3031
Developer
3132
</div>
32-
<div className='pl-6'>{gameInfo?.developer || <span className='opacity-40'>Unknown</span>}</div>
33+
<div className='pl-6'>
34+
<CompanyLogo company={gameInfo?.developer} />
35+
{gameInfo?.developer || <span className='opacity-40'>Unknown</span>}
36+
</div>
3337
</div>
3438

3539
<div>
3640
<div className='flex items-center gap-2 font-semibold'>
3741
<span className='icon-[mdi--earth]' />
3842
Publisher
3943
</div>
40-
<div className='pl-6'>{gameInfo?.publisher || <span className='opacity-40'>Unknown</span>}</div>
44+
<div className='pl-6'>
45+
<CompanyLogo company={gameInfo?.publisher} />
46+
{gameInfo?.publisher || <span className='opacity-40'>Unknown</span>}
47+
</div>
4148
</div>
4249

4350
<div>

0 commit comments

Comments
 (0)