IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.6KB

  1. //
  2. // Copyright (C) Stanislaw Adaszewski, 2020
  3. // Contact: s.adaszewski@gmail.com
  4. // Website: https://adared.ch/wba
  5. // License: GNU Affero General Public License, Version 3
  6. //
  7. import { h, Component } from 'preact';
  8. import makeArvadosRequest from 'make-arvados-request';
  9. import { encodeURIComponentIncludingDots } from 'wb-process-misc';
  10. class WBPathDisplay extends Component {
  11. fetchData() {
  12. const { app } = this.props;
  13. const { arvHost, arvToken } = app.state;
  14. let { path } = this.props;
  15. if (path.endsWith('/'))
  16. path = path.substr(0, path.length - 1);
  17. let m;
  18. if (m = /^[0-9a-f]{32}\+[0-9]+/.exec(path));
  19. else if (m = /^[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{15}/.exec(path));
  20. else return;
  21. let prom = makeArvadosRequest(arvHost, arvToken,
  22. '/arvados/v1/collections/' + m[0]);
  23. prom = prom.then(xhr => this.setState({
  24. item: xhr.response,
  25. tail: path.substr(m[0].length)
  26. }));
  27. prom = prom.catch(() => this.setState({ 'error': 'Cannot load' }));
  28. }
  29. componentDidMount() {
  30. this.fetchData();
  31. }
  32. componentWillReceiveProps(nextProps) {
  33. this.props = nextProps;
  34. this.fetchData();
  35. }
  36. render({}, { item, tail, error }) {
  37. if (error)
  38. return error;
  39. if (!item)
  40. return 'Loading...';
  41. return (
  42. <span>
  43. <a href={ '/collection-browse/' + item.uuid }>
  44. { item.name || item.uuid }
  45. </a><a href={ '/collection-browse/' + item.uuid + '/' + encodeURIComponentIncludingDots(tail) }>
  46. { tail }
  47. </a>
  48. </span>
  49. );
  50. }
  51. }
  52. export default WBPathDisplay;