|
- 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 }) {
- if (stringify)
- value = JSON.stringify(value, null, 2);
- return (
- <div class="wb-json-viewer">{ detectIds(value, app) }</div>
- );
- }
- }
-
- WBJsonViewer.defaultProps = {
- stringify: true
- };
-
- export default WBJsonViewer;
|