mirror of https://github.com/btahir/next-beats
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
4.7 KiB
TypeScript
120 lines
4.7 KiB
TypeScript
import React from 'react'
|
|
import { Edit2, X, Plus, Save } from 'lucide-react'
|
|
import { Channel } from '@/types/lofi'
|
|
|
|
interface ChannelManagementProps {
|
|
isAddingChannel: boolean
|
|
setIsAddingChannel: (adding: boolean) => void
|
|
newChannel: Channel
|
|
setNewChannel: (channel: Channel) => void
|
|
saveChannel: () => void
|
|
currentTheme: string
|
|
currentChannel: number
|
|
handleEditChannel: (index: number) => void
|
|
setShowDeleteConfirm: (channelIndex: number) => void
|
|
}
|
|
|
|
const ChannelManagement: React.FC<ChannelManagementProps> = ({
|
|
isAddingChannel,
|
|
setIsAddingChannel,
|
|
newChannel,
|
|
setNewChannel,
|
|
saveChannel,
|
|
currentTheme,
|
|
currentChannel,
|
|
handleEditChannel,
|
|
setShowDeleteConfirm,
|
|
}) => (
|
|
<div
|
|
className={
|
|
isAddingChannel
|
|
? 'fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4'
|
|
: 'flex items-center space-x-2'
|
|
}
|
|
>
|
|
{!isAddingChannel ? (
|
|
<div className="flex items-center space-x-2">
|
|
<button
|
|
onClick={() => handleEditChannel(currentChannel)}
|
|
className="rounded-[var(--lofi-button-radius)] bg-[var(--lofi-button-bg)] p-2 text-[var(--lofi-button-text)] shadow-[var(--lofi-card-shadow)] transition-colors hover:bg-[var(--lofi-button-hover)]"
|
|
>
|
|
<Edit2 size={16} />
|
|
</button>
|
|
<button
|
|
onClick={() => setShowDeleteConfirm(currentChannel)}
|
|
className="rounded-[var(--lofi-button-radius)] bg-[var(--lofi-button-bg)] p-2 text-[var(--lofi-button-text)] shadow-[var(--lofi-card-shadow)] transition-colors hover:bg-[var(--lofi-button-hover)]"
|
|
>
|
|
<X size={16} />
|
|
</button>
|
|
<button
|
|
onClick={() => setIsAddingChannel(true)}
|
|
className="rounded-[var(--lofi-button-radius)] bg-[var(--lofi-button-bg)] p-2 text-[var(--lofi-button-text)] shadow-[var(--lofi-card-shadow)] transition-colors hover:bg-[var(--lofi-button-hover)]"
|
|
>
|
|
<Plus size={16} />
|
|
</button>
|
|
</div>
|
|
) : (
|
|
<div className="w-full max-w-md space-y-3 rounded-[var(--lofi-card-radius)] bg-[var(--lofi-card)] p-6 shadow-[var(--lofi-card-shadow)]">
|
|
<h3 className="text-lg font-bold text-[var(--lofi-text-primary)]">
|
|
Add New Channel
|
|
</h3>
|
|
<div className="grid grid-cols-1 gap-3">
|
|
<input
|
|
type="text"
|
|
placeholder="Channel Name"
|
|
value={newChannel.name}
|
|
onChange={(e) =>
|
|
setNewChannel({ ...newChannel, name: e.target.value })
|
|
}
|
|
className="rounded-[var(--lofi-button-radius)] bg-[var(--lofi-card-hover)] px-3 py-2 text-sm text-[var(--lofi-text-primary)] placeholder:text-[var(--lofi-text-secondary)]"
|
|
/>
|
|
<input
|
|
type="text"
|
|
placeholder="YouTube URL"
|
|
value={newChannel.url}
|
|
onChange={(e) =>
|
|
setNewChannel({ ...newChannel, url: e.target.value })
|
|
}
|
|
className="rounded-[var(--lofi-button-radius)] bg-[var(--lofi-card-hover)] px-3 py-2 text-sm text-[var(--lofi-text-primary)] placeholder:text-[var(--lofi-text-secondary)]"
|
|
/>
|
|
<input
|
|
type="text"
|
|
placeholder="Description"
|
|
value={newChannel.description}
|
|
onChange={(e) =>
|
|
setNewChannel({ ...newChannel, description: e.target.value })
|
|
}
|
|
className="rounded-[var(--lofi-button-radius)] bg-[var(--lofi-card-hover)] px-3 py-2 text-sm text-[var(--lofi-text-primary)] placeholder:text-[var(--lofi-text-secondary)]"
|
|
/>
|
|
<input
|
|
type="text"
|
|
placeholder="Creator"
|
|
value={newChannel.creator}
|
|
onChange={(e) =>
|
|
setNewChannel({ ...newChannel, creator: e.target.value })
|
|
}
|
|
className="rounded-[var(--lofi-button-radius)] bg-[var(--lofi-card-hover)] px-3 py-2 text-sm text-[var(--lofi-text-primary)] placeholder:text-[var(--lofi-text-secondary)]"
|
|
/>
|
|
</div>
|
|
<div className="flex justify-end space-x-2">
|
|
<button
|
|
onClick={() => setIsAddingChannel(false)}
|
|
className="rounded-[var(--lofi-button-radius)] px-3 py-1 text-xs text-[var(--lofi-text-secondary)] hover:text-[var(--lofi-text-primary)]"
|
|
>
|
|
Cancel
|
|
</button>
|
|
<button
|
|
onClick={saveChannel}
|
|
className="flex items-center space-x-2 rounded-[var(--lofi-button-radius)] bg-[var(--lofi-accent)] px-3 py-1 text-xs text-white shadow-[var(--lofi-card-shadow)] hover:bg-[var(--lofi-accent-hover)]"
|
|
>
|
|
<Save size={14} />
|
|
<span>Save Channel</span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
)}
|
|
</div>
|
|
)
|
|
|
|
export default ChannelManagement
|