diff --git a/package-lock.json b/package-lock.json index 3eada999..ca09a9fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,6 +71,7 @@ "@types/lodash.isequal": "^4.5.8", "@types/lodash.throttle": "^4.1.9", "@types/react": "^16.14.52", + "@types/react-aria-modal": "^4.0.9", "@types/react-dom": "^16.9.24", "@types/uuid": "^9.0.7", "@vitejs/plugin-react": "^4.2.0", @@ -4831,6 +4832,15 @@ "csstype": "^3.0.2" } }, + "node_modules/@types/react-aria-modal": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/react-aria-modal/-/react-aria-modal-4.0.9.tgz", + "integrity": "sha512-H8SU5QoB+1ldMGYRHNm1MXfzD5oD+ZdYTrwVzT+KEiFrkTqQG2QdwVc6Ro4/RixnU4LNtMpvF5HKAIfzzGJGjw==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-dom": { "version": "16.9.24", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.24.tgz", diff --git a/package.json b/package.json index 75b11d12..7dc1709b 100644 --- a/package.json +++ b/package.json @@ -100,6 +100,7 @@ "@types/lodash.isequal": "^4.5.8", "@types/lodash.throttle": "^4.1.9", "@types/react": "^16.14.52", + "@types/react-aria-modal": "^4.0.9", "@types/react-dom": "^16.9.24", "@types/uuid": "^9.0.7", "@vitejs/plugin-react": "^4.2.0", diff --git a/src/components/FieldDocLabel.jsx b/src/components/FieldDocLabel.tsx similarity index 76% rename from src/components/FieldDocLabel.jsx rename to src/components/FieldDocLabel.tsx index fa4096b5..2bd5b597 100644 --- a/src/components/FieldDocLabel.jsx +++ b/src/components/FieldDocLabel.tsx @@ -1,26 +1,27 @@ import React from 'react' -import PropTypes from 'prop-types' - import {MdInfoOutline, MdHighlightOff} from 'react-icons/md' -export default class FieldDocLabel extends React.Component { - static propTypes = { - label: PropTypes.oneOfType([ - PropTypes.object, - PropTypes.string - ]).isRequired, - fieldSpec: PropTypes.object, - onToggleDoc: PropTypes.func, +type FieldDocLabelProps = { + label: object | string + fieldSpec?: { + doc?: string } + onToggleDoc?(...args: unknown[]): unknown +}; - constructor (props) { +type FieldDocLabelState = { + open: boolean +}; + +export default class FieldDocLabel extends React.Component { + constructor (props: FieldDocLabelProps) { super(props); this.state = { open: false, } } - onToggleDoc = (open) => { + onToggleDoc = (open: boolean) => { this.setState({ open, }, () => { diff --git a/src/components/Fieldset.jsx b/src/components/Fieldset.tsx similarity index 75% rename from src/components/Fieldset.jsx rename to src/components/Fieldset.tsx index e6308b9b..3b314e37 100644 --- a/src/components/Fieldset.jsx +++ b/src/components/Fieldset.tsx @@ -1,13 +1,23 @@ import React from 'react' -import PropTypes from 'prop-types' import FieldDocLabel from './FieldDocLabel' import Doc from './Doc' +type FieldsetProps = { + label: string, + fieldSpec?: { doc?: string }, + action?: string, +}; + +type FieldsetState = { + showDoc: boolean +}; let IDX = 0; -export default class Fieldset extends React.Component { - constructor (props) { +export default class Fieldset extends React.Component { + _labelId: string; + + constructor (props: FieldsetProps) { super(props); this._labelId = `fieldset_label_${(IDX++)}`; this.state = { @@ -15,15 +25,13 @@ export default class Fieldset extends React.Component { } } - onToggleDoc = (val) => { + onToggleDoc = (val: boolean) => { this.setState({ showDoc: val }); } render () { - const {props} = this; - return
{this.props.fieldSpec &&
@@ -36,14 +44,14 @@ export default class Fieldset extends React.Component { } {!this.props.fieldSpec &&
- {props.label} + {this.props.label}
}
{this.props.action}
- {props.children} + {this.props.children}
{this.props.fieldSpec &&
{ static defaultProps = { underlayClickExits: true } @@ -24,7 +23,7 @@ export default class Modal extends React.Component { // See onClose = () => { if (document.activeElement) { - document.activeElement.blur(); + (document.activeElement as HTMLElement).blur(); } setTimeout(() => { @@ -37,6 +36,7 @@ export default class Modal extends React.Component { return - {this.props.children} -
- } -} - diff --git a/src/components/ScrollContainer.tsx b/src/components/ScrollContainer.tsx new file mode 100644 index 00000000..cbff77a9 --- /dev/null +++ b/src/components/ScrollContainer.tsx @@ -0,0 +1,14 @@ +import React from 'react' + +type ScrollContainerProps = { + children?: React.ReactNode +}; + +export default class ScrollContainer extends React.Component { + render() { + return
+ {this.props.children} +
+ } +} +