fix: avoid misleading skill card preview badge

This commit is contained in:
程序员阿江(Relakkes) 2026-07-04 22:14:03 +08:00
parent 8405314761
commit 3fc6b7f7df
7 changed files with 13 additions and 26 deletions

View File

@ -2056,8 +2056,7 @@ export const en = {
'skillCenter.marketplace.sort.updated': 'Updated', 'skillCenter.marketplace.sort.updated': 'Updated',
'skillCenter.marketplace.sort.trending': 'Trending', 'skillCenter.marketplace.sort.trending': 'Trending',
'skillCenter.marketplace.installedBadge': 'Installed', 'skillCenter.marketplace.installedBadge': 'Installed',
'skillCenter.marketplace.previewAvailable': 'Preview', 'skillCenter.marketplace.detailsBadge': 'Details',
'skillCenter.marketplace.noPreviewBadge': 'No preview',
'skillCenter.marketplace.cardMeta.downloads': '{count} downloads', 'skillCenter.marketplace.cardMeta.downloads': '{count} downloads',
'skillCenter.marketplace.cardMeta.stars': '{count} stars', 'skillCenter.marketplace.cardMeta.stars': '{count} stars',
'skillCenter.marketplace.trust.clean': 'Clean', 'skillCenter.marketplace.trust.clean': 'Clean',

View File

@ -2058,8 +2058,7 @@ export const jp: Record<TranslationKey, string> = {
'skillCenter.marketplace.sort.updated': '更新日時', 'skillCenter.marketplace.sort.updated': '更新日時',
'skillCenter.marketplace.sort.trending': '人気', 'skillCenter.marketplace.sort.trending': '人気',
'skillCenter.marketplace.installedBadge': 'インストール済み', 'skillCenter.marketplace.installedBadge': 'インストール済み',
'skillCenter.marketplace.previewAvailable': 'プレビュー', 'skillCenter.marketplace.detailsBadge': '詳細',
'skillCenter.marketplace.noPreviewBadge': 'プレビューなし',
'skillCenter.marketplace.cardMeta.downloads': '{count} ダウンロード', 'skillCenter.marketplace.cardMeta.downloads': '{count} ダウンロード',
'skillCenter.marketplace.cardMeta.stars': '{count} スター', 'skillCenter.marketplace.cardMeta.stars': '{count} スター',
'skillCenter.marketplace.trust.clean': '安全', 'skillCenter.marketplace.trust.clean': '安全',

View File

@ -2058,8 +2058,7 @@ export const kr: Record<TranslationKey, string> = {
'skillCenter.marketplace.sort.updated': '업데이트', 'skillCenter.marketplace.sort.updated': '업데이트',
'skillCenter.marketplace.sort.trending': '인기', 'skillCenter.marketplace.sort.trending': '인기',
'skillCenter.marketplace.installedBadge': '설치됨', 'skillCenter.marketplace.installedBadge': '설치됨',
'skillCenter.marketplace.previewAvailable': '미리보기', 'skillCenter.marketplace.detailsBadge': '세부 정보',
'skillCenter.marketplace.noPreviewBadge': '미리보기 없음',
'skillCenter.marketplace.cardMeta.downloads': '{count} 다운로드', 'skillCenter.marketplace.cardMeta.downloads': '{count} 다운로드',
'skillCenter.marketplace.cardMeta.stars': '{count} 스타', 'skillCenter.marketplace.cardMeta.stars': '{count} 스타',
'skillCenter.marketplace.trust.clean': '안전', 'skillCenter.marketplace.trust.clean': '안전',

View File

@ -2058,8 +2058,7 @@ export const zh: Record<TranslationKey, string> = {
'skillCenter.marketplace.sort.updated': '最近更新', 'skillCenter.marketplace.sort.updated': '最近更新',
'skillCenter.marketplace.sort.trending': '熱門', 'skillCenter.marketplace.sort.trending': '熱門',
'skillCenter.marketplace.installedBadge': '已安裝', 'skillCenter.marketplace.installedBadge': '已安裝',
'skillCenter.marketplace.previewAvailable': '可預覽', 'skillCenter.marketplace.detailsBadge': '檢視詳情',
'skillCenter.marketplace.noPreviewBadge': '無預覽',
'skillCenter.marketplace.cardMeta.downloads': '{count} 次下載', 'skillCenter.marketplace.cardMeta.downloads': '{count} 次下載',
'skillCenter.marketplace.cardMeta.stars': '{count} 星標', 'skillCenter.marketplace.cardMeta.stars': '{count} 星標',
'skillCenter.marketplace.trust.clean': '安全', 'skillCenter.marketplace.trust.clean': '安全',

View File

@ -2058,8 +2058,7 @@ export const zh: Record<TranslationKey, string> = {
'skillCenter.marketplace.sort.updated': '最近更新', 'skillCenter.marketplace.sort.updated': '最近更新',
'skillCenter.marketplace.sort.trending': '热门', 'skillCenter.marketplace.sort.trending': '热门',
'skillCenter.marketplace.installedBadge': '已安装', 'skillCenter.marketplace.installedBadge': '已安装',
'skillCenter.marketplace.previewAvailable': '可预览', 'skillCenter.marketplace.detailsBadge': '查看详情',
'skillCenter.marketplace.noPreviewBadge': '无预览',
'skillCenter.marketplace.cardMeta.downloads': '{count} 次下载', 'skillCenter.marketplace.cardMeta.downloads': '{count} 次下载',
'skillCenter.marketplace.cardMeta.stars': '{count} 星标', 'skillCenter.marketplace.cardMeta.stars': '{count} 星标',
'skillCenter.marketplace.trust.clean': '安全', 'skillCenter.marketplace.trust.clean': '安全',

View File

@ -185,7 +185,7 @@ describe('SkillCenter', () => {
}) })
}) })
it('renders marketplace cards with trust, preview, install, API key, and popularity signals', async () => { it('renders marketplace cards with trust, details, install, API key, and popularity signals', async () => {
mockedSkillMarketApi.list.mockResolvedValue({ mockedSkillMarketApi.list.mockResolvedValue({
items: [ items: [
makeItem({ makeItem({
@ -227,7 +227,8 @@ describe('SkillCenter', () => {
const crmCard = within(market).getByRole('button', { name: 'CRM Sync' }) const crmCard = within(market).getByRole('button', { name: 'CRM Sync' })
expect(vetterCard).toBeInTheDocument() expect(vetterCard).toBeInTheDocument()
expect(within(market).getAllByText('Clean').length).toBeGreaterThan(0) expect(within(market).getAllByText('Clean').length).toBeGreaterThan(0)
expect(within(market).getAllByText('Preview').length).toBeGreaterThan(0) expect(within(market).queryByText('Preview')).not.toBeInTheDocument()
expect(within(vetterCard).getByText('Details')).toBeInTheDocument()
expect(within(weatherCard).getByText('Installed')).toBeInTheDocument() expect(within(weatherCard).getByText('Installed')).toBeInTheDocument()
expect(within(crmCard).getByText('API key')).toBeInTheDocument() expect(within(crmCard).getByText('API key')).toBeInTheDocument()
expect(within(vetterCard).getByText(/260\.9K|260,960/)).toBeInTheDocument() expect(within(vetterCard).getByText(/260\.9K|260,960/)).toBeInTheDocument()

View File

@ -582,7 +582,6 @@ function SkillMarketCard({
const stats = formatStats(item, t) const stats = formatStats(item, t)
const sourceLabel = t(`skillCenter.marketplace.source.${item.source}`) const sourceLabel = t(`skillCenter.marketplace.source.${item.source}`)
const summary = item.summaryZh || item.summary const summary = item.summaryZh || item.summary
const hasPreview = Boolean(item.trustSummary || item.summary || item.summaryZh)
return ( return (
<button <button
@ -635,19 +634,11 @@ function SkillMarketCard({
label={t('skillCenter.marketplace.installedBadge')} label={t('skillCenter.marketplace.installedBadge')}
/> />
) : null} ) : null}
{hasPreview ? ( <StateBadge
<StateBadge tone="neutral"
tone="neutral" icon={<FileText size={12} aria-hidden="true" />}
icon={<FileText size={12} aria-hidden="true" />} label={t('skillCenter.marketplace.detailsBadge')}
label={t('skillCenter.marketplace.previewAvailable')} />
/>
) : (
<StateBadge
tone="neutral"
icon={<FileText size={12} aria-hidden="true" />}
label={t('skillCenter.marketplace.noPreviewBadge')}
/>
)}
{item.requiresApiKey ? ( {item.requiresApiKey ? (
<StateBadge <StateBadge
tone="neutral" tone="neutral"