* feat: 🎸 Load spinner when selecting gcloud store. Add key on td * feat: 🎸 Code review. Translate loading study status * feat: 🎸 Code review. Minor code refactoring * fix: add missing study and index declerations * Newer version of react-dates (calendar input component) * Add useMedia hook * Add useDebounce hook * Export hooks for consumption * Pull search filter into own component * StudyListWithData to StudyListRoute * Rename pagination component * Rename Toolbar * CustomeDateRangePicker to plain ol' css * Remove unused styles * Misc * Magic to make our "OR" filters work * Play w/ Mobile styles * Fix pagination pushing out max width for viewport * Tidy up small and medium templates * Remove unecessary nesting * Better mobile header and logo styles * Fix studyList font size * Remove unused code * hookup on click * Fix table search selectors * Cypress uses medium width * Remove irrelevant test * Fix primary sort * Fix sort for our smaller displays * fix study list sometimes longer than specified rowsPerPage * Simplify date picker styles * restore study date filters * Fix about table styling * fix take value for search * Fix header sizing for viewer and list route * Remove dead code * Restore isLoading * Update platform/ui/src/components/studyList/StudyList.styl Co-Authored-By: Rodrigo Antinarelli <rodrigoantinarelli@gmail.com> * Attempt first usage of translations w/ hooks * Pull from react-i18n library * Fit presets on to a single line * add no results message * Show error message in studyList table * Update input selectors for e2e tests * Make sure messages span all columns * fix test selector for table results * Skip hover for result rows * fix imports * Date filtering w/ config * Default export * Pushed to PageComponent * Remove DropZone This previously only worked for null/undefined studies. I'm unable to trigger the state by testing the data. This "might" have happened when using a fresh/empty PACS; but even an empty array of studies would not show
144 lines
3.8 KiB
JavaScript
144 lines
3.8 KiB
JavaScript
import React, { Component } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import Modal from 'react-bootstrap-modal';
|
|
import detect from 'browser-detect';
|
|
import './AboutModal.styl';
|
|
import { withTranslation } from '../../utils/LanguageProvider';
|
|
|
|
import 'react-bootstrap-modal/lib/css/rbm-patch.css';
|
|
|
|
// TODO: Is this the only component importing these?
|
|
import './../../design/styles/common/modal.styl';
|
|
|
|
class AboutModal extends Component {
|
|
constructor(props) {
|
|
super(props);
|
|
}
|
|
// TODO: Make this component more generic to allow things other than W/L and hotkeys...
|
|
static propTypes = {
|
|
isOpen: PropTypes.bool.isRequired,
|
|
onCancel: PropTypes.func,
|
|
};
|
|
|
|
itemsPreset() {
|
|
const { t } = this.props;
|
|
const browser = detect();
|
|
const capitalize = s =>
|
|
s.substr(0, 1).toUpperCase() + s.substr(1).toLowerCase();
|
|
|
|
return [
|
|
{
|
|
name: t('Repository URL'),
|
|
value: 'https://github.com/OHIF/Viewers/',
|
|
link: 'https://github.com/OHIF/Viewers/',
|
|
},
|
|
{
|
|
name: t('Latest Master Commits'),
|
|
value: 'https://github.com/OHIF/Viewers/commits/master',
|
|
link: 'https://github.com/OHIF/Viewers/commits/master',
|
|
},
|
|
{
|
|
name: 'Version Number',
|
|
value: process.env.VERSION_NUMBER,
|
|
},
|
|
{
|
|
name: t('Build Number'),
|
|
value: process.env.BUILD_NUM,
|
|
},
|
|
{
|
|
name: t('Browser'),
|
|
value: `${capitalize(browser.name)} ${browser.version}`,
|
|
},
|
|
{
|
|
name: t('OS'),
|
|
value: browser.os,
|
|
},
|
|
];
|
|
}
|
|
|
|
static defaultProps = {
|
|
isOpen: false,
|
|
};
|
|
|
|
renderTableRow(item) {
|
|
return (
|
|
<tr key={item.name} style={{ backgroundColor: 'transparent' }}>
|
|
<td>{item.name}</td>
|
|
<td>
|
|
{item.link ? (
|
|
<a target="_blank" href={item.link}>
|
|
{item.value}
|
|
</a>
|
|
) : (
|
|
item.value
|
|
)}
|
|
</td>
|
|
</tr>
|
|
);
|
|
}
|
|
|
|
render() {
|
|
const { t } = this.props;
|
|
return (
|
|
<Modal
|
|
show={this.props.isOpen}
|
|
onHide={this.props.onCancel}
|
|
aria-labelledby="ModalHeader"
|
|
className="AboutModal modal fade themed in"
|
|
backdrop={false}
|
|
large={true}
|
|
keyboard={false}
|
|
>
|
|
<Modal.Header closeButton>
|
|
<Modal.Title>{t('OHIF Viewer - About')}</Modal.Title>
|
|
</Modal.Header>
|
|
<Modal.Body data-cy="about-modal">
|
|
<div className="btn-group">
|
|
<a
|
|
className="btn btn-default"
|
|
target="_blank"
|
|
href="https://groups.google.com/forum/#!forum/cornerstone-platform"
|
|
>
|
|
{t('Visit the forum')}
|
|
</a>
|
|
{` `}
|
|
<a
|
|
className="btn btn-default"
|
|
target="_blank"
|
|
href="https://github.com/OHIF/Viewers/issues/new/choose"
|
|
>
|
|
{t('Report an issue')}
|
|
</a>
|
|
{` `}
|
|
<a
|
|
className="btn btn-default"
|
|
target="_blank"
|
|
href="http://ohif.org"
|
|
>
|
|
{t('More details')}
|
|
</a>
|
|
</div>
|
|
<div>
|
|
<h3>{t('Version Information')}</h3>
|
|
<table className="table table-responsive">
|
|
<thead>
|
|
<tr>
|
|
<th>{t('Name')}</th>
|
|
<th>{t('Value')}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{this.itemsPreset().map(item => this.renderTableRow(item))}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</Modal.Body>
|
|
</Modal>
|
|
);
|
|
}
|
|
}
|
|
|
|
const connectedComponent = withTranslation('AboutModal')(AboutModal);
|
|
export { connectedComponent as AboutModal };
|
|
export default connectedComponent;
|