1
0
mirror of https://github.com/mgerb/go-discord-bot synced 2026-01-11 17:42:48 +00:00

UI Overhaul

This commit is contained in:
2018-08-19 18:17:40 -05:00
parent 5fedcd4b40
commit e593472c84
58 changed files with 633 additions and 685 deletions

View File

@@ -0,0 +1,12 @@
@import '../../scss/variables';
.sound-list__item {
display: flex;
justify-content: space-between;
align-items: center;
height: 50px;
& + .sound-list__item {
border-top: 1px solid $gray3;
}
}

View File

@@ -0,0 +1,86 @@
import React from 'react';
import './sound-list.scss';
interface Props {
soundList: SoundType[];
type: string;
}
interface State {
showAudioControls: boolean[];
}
export interface SoundType {
extension: string;
name: string;
prefix?: string;
}
export class SoundList extends React.Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = {
showAudioControls: [],
};
}
checkExtension(extension: string) {
switch (extension) {
case 'wav':
return true;
case 'mp3':
return true;
case 'mpeg':
return true;
default:
return false;
}
}
handleShowAudio(index: any) {
let temp = this.state.showAudioControls;
temp[index] = true;
this.setState({
showAudioControls: temp,
});
}
render() {
const { soundList, type } = this.props;
return (
<div className="card">
<div className="card__header" style={{ display: 'flex' }}>
<div>
<span>{type}</span>
<i className="fa fa fa-volume-up" aria-hidden="true" />
</div>
<div style={{ flex: 1 }} />
<div>({soundList.length})</div>
</div>
{soundList.length > 0
? soundList.map((sound: SoundType, index: number) => {
return (
<div key={index} className="sound-list__item">
<div className="text-wrap">{(sound.prefix || '') + sound.name}</div>
{this.checkExtension(sound.extension) && this.state.showAudioControls[index] ? (
<audio
controls
src={`/public/${type.toLowerCase()}/` + sound.name + '.' + sound.extension}
itemType={'audio/' + sound.extension}
style={{ width: '100px' }}
/>
) : (
<i className="fa fa-play link" aria-hidden="true" onClick={() => this.handleShowAudio(index)} />
)}
</div>
);
})
: null}
</div>
);
}
}