// // Copyright (C) Stanislaw Adaszewski, 2020 // Contact: s.adaszewski@gmail.com // Website: https://adared.ch/wba // License: GNU Affero General Public License, Version 3 // import { h, Component } from 'preact'; import WBIdTools from 'wb-id-tools'; import urlForObject from 'url-for-object'; import makeArvadosRequest from 'make-arvados-request'; import arvadosObjectName from 'arvados-object-name'; import WBLazyInlineName from 'wb-lazy-inline-name'; function detectIds(value, app) { const matches = WBIdTools.detectIdentifiers(value); matches.sort((a, b) => (a.index - b.index)); const res = []; let ofs = 0; for (let i = 0; i < matches.length; i++) { const { index } = matches[i]; const id = matches[i][0]; const typeName = WBIdTools.typeName(id); const url = (typeName === 'group' ? '/browse/' + id : typeName === 'collection' ? '/collection-browse/' + id : urlForObject({ uuid: id })); res.push(value.substring(ofs, index)); res.push(h(WBLazyInlineName, { identifier: id, app }, id)); ofs = index + id.length; } res.push(value.substring(ofs)); return res; } class WBJsonViewer extends Component { render({ value, stringify, app, pretty }) { if (stringify) value = pretty ? JSON.stringify(value, null, 2) : JSON.stringify(value); return (
{ detectIds(value, app) }
); } } WBJsonViewer.defaultProps = { stringify: true, pretty: true }; export default WBJsonViewer;