fileButtonLineComponent.tsx 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import * as React from "react";
  2. interface IFileButtonLineComponentProps {
  3. label: string;
  4. onClick: (file: File) => void;
  5. accept: string;
  6. }
  7. export class FileButtonLineComponent extends React.Component<IFileButtonLineComponentProps> {
  8. private uploadRef: React.RefObject<HTMLInputElement>;
  9. constructor(props: IFileButtonLineComponentProps) {
  10. super(props);
  11. this.uploadRef = React.createRef();
  12. }
  13. onChange(evt: any) {
  14. var files: File[] = evt.target.files;
  15. if (files && files.length) {
  16. this.props.onClick(files[0]);
  17. }
  18. evt.target.value = "";
  19. }
  20. render() {
  21. return (
  22. <div className="buttonLine">
  23. <label htmlFor="file-upload" className="file-upload">
  24. {this.props.label}
  25. </label>
  26. <input ref={this.uploadRef} id="file-upload" type="file" accept={this.props.accept} onChange={evt => this.onChange(evt)} />
  27. </div>
  28. );
  29. }
  30. }