import { clsx } from 'clsx' import { Show } from 'solid-js' import { useLocalize } from '../../../context/localize' import { MediaItem } from '../../../pages/types' import { composeMediaItems } from '../../../utils/composeMediaItems' import { AudioPlayer } from '../../Article/AudioPlayer' import { DropArea } from '../../_shared/DropArea' import styles from './AudioUploader.module.scss' try { // biome-ignore lint/style/useNodejsImportProtocol: it works like this window.Buffer = (await import('buffer')).Buffer } catch (_e) { window.Buffer = (await import('node:buffer')).Buffer } type Props = { class?: string audio: MediaItem[] baseFields?: { artist?: string date?: string genre?: string } onAudioChange: (index: number, value: MediaItem) => void onAudioAdd: (value: MediaItem[]) => void onAudioSorted: (value: MediaItem[]) => void } export const AudioUploader = (props: Props) => { const { t } = useLocalize() const handleMediaItemFieldChange = (index: number, field: keyof MediaItem, value) => { props.onAudioChange(index, { ...props.audio[index], [field]: value }) } const handleChangeIndex = (direction: 'up' | 'down', index: number) => { const media = [...props.audio] if (direction === 'up' && index > 0) { const copy = media.splice(index, 1)[0] media.splice(index - 1, 0, copy) } else if (direction === 'down' && index < media.length - 1) { const copy = media.splice(index, 1)[0] media.splice(index + 1, 0, copy) } props.onAudioSorted(media) } return (