chem-generic-ui 0.1.45 → 0.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/.babelrc +11 -0
  2. package/.eslintrc +23 -0
  3. package/.tool-versions +3 -0
  4. package/chem-generic-ui-v0.1.41.tgz +0 -0
  5. package/dist/bundle.js +1 -1
  6. package/dist/bundle.js.LICENSE.txt +70 -0
  7. package/dist/ds_details.json +57 -0
  8. package/dist/ds_klass.json +102 -0
  9. package/dist/ds_props.json +54 -0
  10. package/dist/index.html +14 -0
  11. package/dist/sg_details.json +2036 -0
  12. package/dist/sg_klass.json +850 -0
  13. package/dist/units_system.json +430 -0
  14. package/package.json +3 -6
  15. package/public/ds_details.json +57 -0
  16. package/public/ds_klass.json +102 -0
  17. package/public/ds_props.json +54 -0
  18. package/public/favicon.ico +0 -0
  19. package/public/images/not_available.svg +1 -0
  20. package/public/index.html +47 -0
  21. package/public/logo192.png +0 -0
  22. package/public/logo512.png +0 -0
  23. package/public/manifest.json +25 -0
  24. package/public/robots.txt +3 -0
  25. package/public/sg_details.json +2036 -0
  26. package/public/sg_klass.json +850 -0
  27. package/public/test/ds_props.json +54 -0
  28. package/public/units_system.json +430 -0
  29. package/src/asserts/bootstrap-theme.min.css +6 -0
  30. package/src/asserts/bootstrap.min.css +6 -0
  31. package/src/asserts/main.css +458 -0
  32. package/src/asserts/main.scss +490 -0
  33. package/src/components/admin/ElementManager.js +28 -0
  34. package/src/components/details/GenDSDetails.js +164 -0
  35. package/src/components/details/GenSgDetails.js +396 -0
  36. package/src/components/dnd/DragDropItemTypes.js +13 -0
  37. package/src/components/dnd/GenericElDropTarget.js +160 -0
  38. package/src/components/dnd/GridDnD.js +42 -0
  39. package/src/components/dnd/PanelDnD.js +85 -0
  40. package/src/components/fields/ButtonConfirm.js +45 -0
  41. package/src/components/fields/ButtonTooltip.js +46 -0
  42. package/src/components/fields/FieldLabel.js +18 -0
  43. package/src/components/fields/GenDSMisType.js +20 -0
  44. package/src/components/fields/GenFormGroupCb.js +17 -0
  45. package/src/components/fields/GenProperties.js +56 -0
  46. package/src/components/fields/GenPropertiesFields.js +440 -0
  47. package/src/components/layers/GenPropertiesLayer.js +178 -0
  48. package/src/components/layers/LayerModal.js +52 -0
  49. package/src/components/layers/LayersLayout.js +68 -0
  50. package/src/components/models/Attachment.js +37 -0
  51. package/src/components/models/GenericSubField.js +10 -0
  52. package/src/components/table/DropLinkRenderer.js +35 -0
  53. package/src/components/table/DropRenderer.js +31 -0
  54. package/src/components/table/DropTextRenderer.js +25 -0
  55. package/src/components/table/GenericElTableDropTarget.js +131 -0
  56. package/src/components/table/GridBtn.js +41 -0
  57. package/src/components/table/GridEntry.js +75 -0
  58. package/src/components/table/SamOption.js +53 -0
  59. package/src/components/table/SelectRenderer.js +34 -0
  60. package/src/components/table/TableRecord.js +254 -0
  61. package/src/components/table/UConverterRenderer.js +24 -0
  62. package/src/components/tools/collate.js +65 -0
  63. package/src/components/tools/orten.js +171 -0
  64. package/src/components/tools/utils.js +414 -0
  65. package/src/data/SystemUnits.js +434 -0
  66. package/src/data/systemUnits.json +430 -0
  67. package/src/index.css +13 -0
  68. package/src/index.html +1 -0
  69. package/src/index.js +45 -0
  70. package/src/logo.svg +1 -0
  71. package/src/simulations/SimuDS.js +52 -0
  72. package/src/simulations/SimuSG.js +54 -0
  73. package/webpack.config.js +46 -0
@@ -0,0 +1,85 @@
1
+ /* eslint-disable max-len */
2
+ import React from 'react';
3
+ import { DragSource, DropTarget } from 'react-dnd';
4
+ import { compose } from 'redux';
5
+ import { Panel, ButtonGroup, OverlayTrigger, Tooltip, Button } from 'react-bootstrap';
6
+ import { v4 as uuid } from 'uuid';
7
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
8
+
9
+ const orderSource = {
10
+ canDrag(props) {
11
+ return !props.layer.wf;
12
+ },
13
+ beginDrag(props) {
14
+ const { layer, field, rowValue } = props;
15
+ return { wf: layer.wf, fid: field, rId: rowValue.id };
16
+ },
17
+ };
18
+
19
+ const orderTarget = {
20
+ canDrop(props, monitor) {
21
+ const src = monitor.getItem();
22
+ return !props.layer.wf || !src.wf;
23
+ },
24
+ drop(props, monitor) {
25
+ const {
26
+ layer, field, rowValue, handleMove
27
+ } = props;
28
+ const tar = { wf: layer.wf, fid: field, rId: rowValue.id };
29
+ const src = monitor.getItem();
30
+ if (tar.fid === src.fid && tar.rId !== src.rId) handleMove(src.rId, tar.rId);
31
+ },
32
+ };
33
+
34
+ const orderDragCollect = (connect, monitor) => ({
35
+ connectDragSource: connect.dragSource(),
36
+ isDragging: monitor.isDragging(),
37
+ });
38
+
39
+ const orderDropCollect = (connect, monitor) => ({
40
+ connectDropTarget: connect.dropTarget(),
41
+ isOver: monitor.isOver(),
42
+ canDrop: monitor.canDrop(),
43
+ });
44
+
45
+ const PanelDnD = ({
46
+ connectDragSource, connectDropTarget, isDragging, isOver, canDrop,
47
+ layer, id, handleChange, bs
48
+ }) => {
49
+ const className = `generic_grid_dnd${isOver ? ' is-over' : ''}${canDrop ? ' can-drop' : ''}${isDragging ? ' is-dragging' : ''}`;
50
+ const {
51
+ style, label, wf, key
52
+ } = layer;
53
+ const klz = (style || 'panel_generic_heading').replace('panel_generic_heading', 'panel_generic_heading_slim');
54
+ const btnAdd = (
55
+ <OverlayTrigger delayShow={1000} placement="top" overlay={<Tooltip id="_tooltip_add_layer">add layer</Tooltip>}>
56
+ <Button bsSize="xsmall" onClick={event => handleChange(event, id, layer, 'layer-modal')}><FontAwesomeIcon icon="fas fa-plus" /></Button>
57
+ </OverlayTrigger>
58
+ );
59
+ const btnRemove = (
60
+ <OverlayTrigger delayShow={1000} placement="top" overlay={<Tooltip id="_tooltip_remove_layer">remove layer</Tooltip>}>
61
+ <Button bsSize="xsmall" onClick={event => handleChange(event, id, layer, 'layer-remove')}><FontAwesomeIcon icon="fas fa-minus" /></Button>
62
+ </OverlayTrigger>
63
+ );
64
+ const wfIcon = wf ? (<span>&nbsp;<FontAwesomeIcon icon="fas fa-sitemap" /></span>) : null;
65
+ const moveIcon = (
66
+ <OverlayTrigger delayShow={1000} placement="top" overlay={<Tooltip id={uuid()}>drag and drop to move position</Tooltip>}>
67
+ <Button onClick={() => {}} bsSize="xsmall"><FontAwesomeIcon icon="fas fa-arrows-alt" /></Button>
68
+ </OverlayTrigger>);
69
+ const btnLayer = wf ? (<ButtonGroup className="pull-right" >{btnAdd}</ButtonGroup>) : (<ButtonGroup className="pull-right" >{btnAdd}{btnRemove}{moveIcon}</ButtonGroup>);
70
+ const extHead = (/\./g.test(key)) ? <>({key}{wfIcon})</> : null;
71
+ const panelHeader = (
72
+ <Panel.Heading className={klz}>
73
+ <Panel.Title toggle style={{ float: 'left', lineHeight: 'normal' }}>{label}&nbsp;{extHead}</Panel.Title>{btnLayer}
74
+ <div className="clearfix" />
75
+ </Panel.Heading>
76
+ );
77
+ const panelHColor = bs !== 'none' ? `panel-${bs}` : '';
78
+ const dndKlz = wf ? `dnd-none ${panelHColor}` : `dnd ${panelHColor}`;
79
+ return compose(connectDragSource, connectDropTarget)(<div className={className}><div className={dndKlz}>{panelHeader}</div></div>);
80
+ };
81
+
82
+ export default compose(
83
+ DragSource(s => s.type, orderSource, orderDragCollect),
84
+ DropTarget(s => s.type, orderTarget, orderDropCollect)
85
+ )(PanelDnD);
@@ -0,0 +1,45 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Button, OverlayTrigger, Popover } from 'react-bootstrap';
4
+
5
+ const ButtonConfirm = (props) => {
6
+ const {
7
+ msg, size, bs, fnClick, fnParams, place, fa, disabled
8
+ } = props;
9
+ const popover = (
10
+ <Popover id="popover-button-confirm">
11
+ {msg} <br />
12
+ <div className="btn-toolbar">
13
+ <Button bsSize="xsmall" bsStyle="danger" aria-hidden="true" onClick={() => fnClick(fnParams)}>
14
+ Yes
15
+ </Button><span>&nbsp;&nbsp;</span>
16
+ <Button bsSize="xsmall" bsStyle="warning">No</Button>
17
+ </div>
18
+ </Popover>
19
+ );
20
+
21
+ return (
22
+ <OverlayTrigger animation placement={place} root trigger="focus" overlay={popover}>
23
+ <Button bsSize={size} bsStyle={bs} disabled={disabled}>
24
+ <i className={`fa ${fa}`} aria-hidden="true" />
25
+ </Button>
26
+ </OverlayTrigger>
27
+ );
28
+ };
29
+
30
+ ButtonConfirm.propTypes = {
31
+ msg: PropTypes.string.isRequired,
32
+ fnParams: PropTypes.object.isRequired,
33
+ fnClick: PropTypes.func.isRequired,
34
+ bs: PropTypes.string,
35
+ size: PropTypes.string,
36
+ place: PropTypes.string,
37
+ fa: PropTypes.string,
38
+ disabled: PropTypes.bool,
39
+ };
40
+
41
+ ButtonConfirm.defaultProps = {
42
+ bs: 'danger', size: 'xs', place: 'right', fa: 'fa-trash-o', disabled: false
43
+ };
44
+
45
+ export default ButtonConfirm;
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';
4
+ import { v4 as uuid } from 'uuid';
5
+
6
+ const ButtonTooltip = (props) => {
7
+ const tip = <Tooltip id={uuid()}>{props.tip}</Tooltip>;
8
+ const {
9
+ size, bs, fnClick, element, place, fa, disabled, txt
10
+ } = props;
11
+ const content = txt ? (<span>{txt}&nbsp;</span>) : '';
12
+ if (bs === '') {
13
+ return (
14
+ <OverlayTrigger delayShow={1000} placement={place} overlay={tip} >
15
+ <Button bsSize={size} onClick={() => fnClick(element)} disabled={disabled}>
16
+ {content}<i className={`fa ${fa}`} aria-hidden="true" />
17
+ </Button>
18
+ </OverlayTrigger>
19
+ );
20
+ }
21
+ return (
22
+ <OverlayTrigger delayShow={1000} placement={place} overlay={tip} >
23
+ <Button bsSize={size} bsStyle={bs} onClick={() => fnClick(element)} disabled={disabled}>
24
+ {content}<i className={`fa ${fa}`} aria-hidden="true" />
25
+ </Button>
26
+ </OverlayTrigger>
27
+ );
28
+ };
29
+
30
+ ButtonTooltip.propTypes = {
31
+ tip: PropTypes.string.isRequired,
32
+ element: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
33
+ fnClick: PropTypes.func.isRequired,
34
+ bs: PropTypes.string,
35
+ size: PropTypes.string,
36
+ place: PropTypes.string,
37
+ fa: PropTypes.string,
38
+ disabled: PropTypes.bool,
39
+ txt: PropTypes.string,
40
+ };
41
+
42
+ ButtonTooltip.defaultProps = {
43
+ bs: '', size: 'xs', place: 'right', fa: 'fa-pencil-square-o', disabled: false, txt: null, element: {}
44
+ };
45
+
46
+ export default ButtonTooltip;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { OverlayTrigger, Tooltip } from 'react-bootstrap';
4
+ import { v4 as uuid } from 'uuid';
5
+
6
+ const FieldLabel = (props) => {
7
+ const { label, desc } = props;
8
+ return (desc && desc !== '') ? (
9
+ <OverlayTrigger placement="top" delayShow={1000} overlay={<Tooltip id={uuid()}>{desc}</Tooltip>}>
10
+ <span>{label}</span>
11
+ </OverlayTrigger>
12
+ ) : <span>{label}</span>;
13
+ };
14
+
15
+ FieldLabel.propTypes = { label: PropTypes.string.isRequired, desc: PropTypes.string };
16
+ FieldLabel.defaultProps = { desc: '' };
17
+
18
+ export default FieldLabel;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { OverlayTrigger, Tooltip } from 'react-bootstrap';
4
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
+
6
+ const GenDSMisType = (props) => {
7
+ const { uiCtrl } = props;
8
+ if (uiCtrl) {
9
+ return (
10
+ <OverlayTrigger placement="top" delay={300} overlay={<Tooltip id="tooltip">Type (Chemical Methods Ontology) has been changed. <br />Please review this Dataset content.</Tooltip>}>
11
+ <span style={{ color: 'red' }}><FontAwesomeIcon icon="fas fa-exclamation-circle" />&nbsp;</span>
12
+ </OverlayTrigger>
13
+ );
14
+ }
15
+ return null;
16
+ };
17
+
18
+ GenDSMisType.propTypes = { uiCtrl: PropTypes.bool.isRequired };
19
+
20
+ export default GenDSMisType;
@@ -0,0 +1,17 @@
1
+ /* eslint-disable react/prop-types */
2
+ import React from 'react';
3
+ import { Checkbox, FormGroup } from 'react-bootstrap';
4
+
5
+ const GenFormGroupCb = (props) => {
6
+ const {
7
+ label, value, name, onChange
8
+ } = props;
9
+ return (
10
+ <FormGroup className="text_generic_properties">
11
+ {label || '' }
12
+ <Checkbox checked={value} onChange={e => onChange(e, name)} />
13
+ </FormGroup>
14
+ );
15
+ };
16
+
17
+ export default GenFormGroupCb;
@@ -0,0 +1,56 @@
1
+ import {
2
+ GenPropertiesCheckbox,
3
+ GenPropertiesCalculate,
4
+ GenPropertiesSelect,
5
+ GenPropertiesDrop,
6
+ GenPropertiesNumber,
7
+ GenPropertiesSystemDefined,
8
+ GenPropertiesInputGroup,
9
+ GenPropertiesTextArea,
10
+ GenPropertiesUpload,
11
+ GenDummy,
12
+ GenPropertiesTable,
13
+ GenTextFormula,
14
+ GenWFNext,
15
+ GenPropertiesText
16
+ } from './GenPropertiesFields';
17
+
18
+ const GenProperties = (opt) => {
19
+ const fieldProps = { ...opt, dndItems: [] };
20
+ const type = fieldProps.type.split('_');
21
+ if (opt.isSearchCriteria && type[0] === 'drag') type[0] = 'text';
22
+ // if (opt.isPreview && (type[0] === 'drag' || type[0] === 'upload')) type[0] = 'text';
23
+ switch (type[0]) {
24
+ case 'checkbox':
25
+ return GenPropertiesCheckbox(fieldProps);
26
+ case 'formula-field':
27
+ return GenPropertiesCalculate(fieldProps);
28
+ case 'select':
29
+ return GenPropertiesSelect(fieldProps);
30
+ case 'drag':
31
+ fieldProps.dndItems = [...fieldProps.dndItems, type[1]];
32
+ return GenPropertiesDrop(fieldProps);
33
+ case 'integer':
34
+ return GenPropertiesNumber(fieldProps);
35
+ case 'system-defined':
36
+ return GenPropertiesSystemDefined(fieldProps);
37
+ case 'input-group':
38
+ return GenPropertiesInputGroup(fieldProps);
39
+ case 'textarea':
40
+ return GenPropertiesTextArea(fieldProps);
41
+ case 'upload':
42
+ return GenPropertiesUpload(fieldProps);
43
+ case 'dummy':
44
+ return GenDummy();
45
+ case 'table':
46
+ return GenPropertiesTable(fieldProps);
47
+ case 'text-formula':
48
+ return GenTextFormula(fieldProps);
49
+ case 'wf-next':
50
+ return GenWFNext(fieldProps);
51
+ default:
52
+ return GenPropertiesText(fieldProps);
53
+ }
54
+ };
55
+
56
+ export default GenProperties;