8991edabb5
Turn the KOL prompt platform hint into a multi-select backed by the media platforms API, persist hints as a 、-joined string, and add a reusable KolPlatformTags component so manage/generate/package/template/ workspace views and the generate-task drawer all render the hints consistently with truncation and overflow handling. Also auto-select the first available subscription prompt in GenerateTaskDrawer when switching to the subscription-prompt target so users land on a usable option without an extra click. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import type { MediaPlatform } from '@geo/shared-types'
|
||
|
||
export interface KolPlatformOption {
|
||
label: string
|
||
value: string
|
||
disabled?: boolean
|
||
}
|
||
|
||
export const KOL_PLATFORM_HINT_DEFAULT = '通用'
|
||
|
||
export function buildKolPlatformOptions(
|
||
defaultLabel: string,
|
||
platforms: MediaPlatform[] = [],
|
||
selectedValues: string[] = [],
|
||
): KolPlatformOption[] {
|
||
const defaultSelected = selectedValues.includes(KOL_PLATFORM_HINT_DEFAULT)
|
||
const options = [
|
||
{ label: defaultLabel, value: '通用' },
|
||
...platforms.map((item) => ({
|
||
label: item.name,
|
||
value: item.name,
|
||
disabled: defaultSelected,
|
||
})),
|
||
]
|
||
const knownValues = new Set(options.map((item) => item.value))
|
||
const customOptions = normalizeKolPlatformHints(selectedValues)
|
||
.filter((value) => !knownValues.has(value))
|
||
.map((value) => ({ label: value, value }))
|
||
|
||
return [...customOptions, ...options]
|
||
}
|
||
|
||
export function parseKolPlatformHints(value?: string | null): string[] {
|
||
return normalizeKolPlatformHints(String(value ?? '').split(/[、,,;\n]+/))
|
||
}
|
||
|
||
export function normalizeKolPlatformHints(values?: Array<string | null | undefined>): string[] {
|
||
const next = Array.from(
|
||
new Set((values ?? []).map((item) => String(item ?? '').trim()).filter(Boolean)),
|
||
)
|
||
|
||
if (next.includes(KOL_PLATFORM_HINT_DEFAULT)) {
|
||
return [KOL_PLATFORM_HINT_DEFAULT]
|
||
}
|
||
|
||
return next
|
||
}
|
||
|
||
export function serializeKolPlatformHints(values?: Array<string | null | undefined>): string {
|
||
return normalizeKolPlatformHints(values).join('、')
|
||
}
|