diff --git a/assets/js/src/common/key_value_table.jsx b/assets/js/src/common/key_value_table.jsx index 3293dd4a41..202d39321c 100644 --- a/assets/js/src/common/key_value_table.jsx +++ b/assets/js/src/common/key_value_table.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; const KeyValueTable = props => ( @@ -13,13 +14,13 @@ const KeyValueTable = props => ( ); KeyValueTable.propTypes = { - max_width: React.PropTypes.string, - rows: React.PropTypes.arrayOf(React.PropTypes.shape({ - key: React.PropTypes.string.isRequired, - value: React.PropTypes.oneOfType([ - React.PropTypes.string, - React.PropTypes.number, - React.PropTypes.element, + max_width: PropTypes.string, + rows: PropTypes.arrayOf(PropTypes.shape({ + key: PropTypes.string.isRequired, + value: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + PropTypes.element, ]).isRequired, })).isRequired, }; diff --git a/assets/js/src/common/print_boolean.jsx b/assets/js/src/common/print_boolean.jsx index fd4956b77a..c2719a5e21 100644 --- a/assets/js/src/common/print_boolean.jsx +++ b/assets/js/src/common/print_boolean.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; @@ -10,10 +11,10 @@ const PrintBoolean = props => ( ); PrintBoolean.propTypes = { - truthy: React.PropTypes.string, - falsy: React.PropTypes.string, - unknown: React.PropTypes.string, - children: React.PropTypes.bool, + truthy: PropTypes.string, + falsy: PropTypes.string, + unknown: PropTypes.string, + children: PropTypes.bool, }; PrintBoolean.defaultProps = { diff --git a/assets/js/src/common/stepped_progess_bar.jsx b/assets/js/src/common/stepped_progess_bar.jsx index ce1f6906d3..d6e2cf2e8a 100644 --- a/assets/js/src/common/stepped_progess_bar.jsx +++ b/assets/js/src/common/stepped_progess_bar.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; const SteppedProgressBar = (props) => { @@ -20,8 +21,8 @@ const SteppedProgressBar = (props) => { }; SteppedProgressBar.propTypes = { - steps_count: React.PropTypes.number.isRequired, - step: React.PropTypes.number.isRequired, + steps_count: PropTypes.number.isRequired, + step: PropTypes.number.isRequired, }; module.exports = SteppedProgressBar; diff --git a/assets/js/src/form/form.jsx b/assets/js/src/form/form.jsx index 856978f560..b856ac70aa 100644 --- a/assets/js/src/form/form.jsx +++ b/assets/js/src/form/form.jsx @@ -7,7 +7,7 @@ import PropTypes from 'prop-types'; class Form extends React.Component { static contextTypes = { - router: React.PropTypes.object.isRequired, + router: PropTypes.object.isRequired, }; static defaultProps = { diff --git a/assets/js/src/help-tooltip.jsx b/assets/js/src/help-tooltip.jsx index bb2ada2d26..a531749bb6 100644 --- a/assets/js/src/help-tooltip.jsx +++ b/assets/js/src/help-tooltip.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import ReactTooltip from 'react-tooltip'; import ReactHtmlParser from 'react-html-parser'; @@ -47,10 +48,10 @@ function Tooltip(props) { } Tooltip.propTypes = { - tooltipId: React.PropTypes.string, - tooltip: React.PropTypes.node.isRequired, - place: React.PropTypes.string, - className: React.PropTypes.string, + tooltipId: PropTypes.string, + tooltip: PropTypes.node.isRequired, + place: PropTypes.string, + className: PropTypes.string, }; Tooltip.defaultProps = { diff --git a/assets/js/src/help/cron_status.jsx b/assets/js/src/help/cron_status.jsx index 04b446cdde..c2d06117cf 100644 --- a/assets/js/src/help/cron_status.jsx +++ b/assets/js/src/help/cron_status.jsx @@ -1,4 +1,5 @@ import MailPoet from 'mailpoet'; +import PropTypes from 'prop-types'; import React from 'react'; import KeyValueTable from 'common/key_value_table.jsx'; import PrintBoolean from 'common/print_boolean.jsx'; @@ -46,12 +47,12 @@ const CronStatus = (props) => { }; CronStatus.propTypes = { - status_data: React.PropTypes.shape({ - accessible: React.PropTypes.bool, - status: React.PropTypes.string, - updated_at: React.PropTypes.number, - run_accessed_at: React.PropTypes.number, - run_completed_at: React.PropTypes.number, + status_data: PropTypes.shape({ + accessible: PropTypes.bool, + status: PropTypes.string, + updated_at: PropTypes.number, + run_accessed_at: PropTypes.number, + run_completed_at: PropTypes.number, }).isRequired, }; diff --git a/assets/js/src/help/queue_status.jsx b/assets/js/src/help/queue_status.jsx index 649849cf48..5771c2674f 100644 --- a/assets/js/src/help/queue_status.jsx +++ b/assets/js/src/help/queue_status.jsx @@ -1,4 +1,5 @@ import MailPoet from 'mailpoet'; +import PropTypes from 'prop-types'; import React from 'react'; import KeyValueTable from 'common/key_value_table.jsx'; import TasksList from './tasks_list/tasks_list.jsx'; @@ -58,23 +59,23 @@ const QueueStatus = (props) => { }; QueueStatus.propTypes = { - status_data: React.PropTypes.shape({ - status: React.PropTypes.string, - started: React.PropTypes.number, - sent: React.PropTypes.number, - retry_attempt: React.PropTypes.number, - retry_at: React.PropTypes.number, - error: React.PropTypes.shape({ - operation: React.PropTypes.string, - error_message: React.PropTypes.string, + status_data: PropTypes.shape({ + status: PropTypes.string, + started: PropTypes.number, + sent: PropTypes.number, + retry_attempt: PropTypes.number, + retry_at: PropTypes.number, + error: PropTypes.shape({ + operation: PropTypes.string, + error_message: PropTypes.string, }), - tasksStatusCounts: React.PropTypes.shape({ - completed: React.PropTypes.number.isRequired, - running: React.PropTypes.number.isRequired, - paused: React.PropTypes.number.isRequired, - scheduled: React.PropTypes.number.isRequired, + tasksStatusCounts: PropTypes.shape({ + completed: PropTypes.number.isRequired, + running: PropTypes.number.isRequired, + paused: PropTypes.number.isRequired, + scheduled: PropTypes.number.isRequired, }).isRequired, - latestTasks: React.PropTypes.arrayOf(TasksListDataRow.propTypes.task).isRequired, + latestTasks: PropTypes.arrayOf(TasksListDataRow.propTypes.task).isRequired, }).isRequired, }; diff --git a/assets/js/src/help/tabs.jsx b/assets/js/src/help/tabs.jsx index 6d258b6817..cc6d01ce3b 100644 --- a/assets/js/src/help/tabs.jsx +++ b/assets/js/src/help/tabs.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import { Link } from 'react-router'; import classNames from 'classnames'; @@ -44,7 +45,7 @@ function Tabs(props) { ); } -Tabs.propTypes = { tab: React.PropTypes.string }; +Tabs.propTypes = { tab: PropTypes.string }; Tabs.defaultProps = { tab: 'knowledgeBase' }; module.exports = Tabs; diff --git a/assets/js/src/help/tasks_list/tasks_list.jsx b/assets/js/src/help/tasks_list/tasks_list.jsx index 0e900c0e0d..cef526144e 100644 --- a/assets/js/src/help/tasks_list/tasks_list.jsx +++ b/assets/js/src/help/tasks_list/tasks_list.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import TaskListDataRow from './tasks_list_data_row.jsx'; @@ -30,8 +31,8 @@ const TasksList = (props) => { }; TasksList.propTypes = { - show_scheduled_at: React.PropTypes.bool, - tasks: React.PropTypes.arrayOf(TaskListDataRow.propTypes.task).isRequired, + show_scheduled_at: PropTypes.bool, + tasks: PropTypes.arrayOf(TaskListDataRow.propTypes.task).isRequired, }; TasksList.defaultProps = { diff --git a/assets/js/src/help/tasks_list/tasks_list_data_row.jsx b/assets/js/src/help/tasks_list/tasks_list_data_row.jsx index a06e13d6f0..81434d5453 100644 --- a/assets/js/src/help/tasks_list/tasks_list_data_row.jsx +++ b/assets/js/src/help/tasks_list/tasks_list_data_row.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; @@ -36,19 +37,19 @@ const TasksListDataRow = props => ( ); TasksListDataRow.propTypes = { - show_scheduled_at: React.PropTypes.bool, - task: React.PropTypes.shape({ - id: React.PropTypes.number.isRequired, - type: React.PropTypes.string.isRequired, - priority: React.PropTypes.number.isRequired, - updated_at: React.PropTypes.number.isRequired, - scheduled_at: React.PropTypes.number, - status: React.PropTypes.string, - newsletter: React.PropTypes.shape({ - newsletter_id: React.PropTypes.number.isRequired, - queue_id: React.PropTypes.number.isRequired, - preview_url: React.PropTypes.string.isRequired, - subject: React.PropTypes.string, + show_scheduled_at: PropTypes.bool, + task: PropTypes.shape({ + id: PropTypes.number.isRequired, + type: PropTypes.string.isRequired, + priority: PropTypes.number.isRequired, + updated_at: PropTypes.number.isRequired, + scheduled_at: PropTypes.number, + status: PropTypes.string, + newsletter: PropTypes.shape({ + newsletter_id: PropTypes.number.isRequired, + queue_id: PropTypes.number.isRequired, + preview_url: PropTypes.string.isRequired, + subject: PropTypes.string, }), }).isRequired, }; diff --git a/assets/js/src/help/tasks_list/tasks_list_labels_row.jsx b/assets/js/src/help/tasks_list/tasks_list_labels_row.jsx index b03c06bf5a..55c2979ecd 100644 --- a/assets/js/src/help/tasks_list/tasks_list_labels_row.jsx +++ b/assets/js/src/help/tasks_list/tasks_list_labels_row.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; @@ -13,7 +14,7 @@ const TasksListLabelsRow = props => ( ); TasksListLabelsRow.propTypes = { - show_scheduled_at: React.PropTypes.bool, + show_scheduled_at: PropTypes.bool, }; TasksListLabelsRow.defaultProps = { diff --git a/assets/js/src/in_app_announcements/in_app_announcement.jsx b/assets/js/src/in_app_announcements/in_app_announcement.jsx index 96832b0a42..6e09a4dfe6 100644 --- a/assets/js/src/in_app_announcements/in_app_announcement.jsx +++ b/assets/js/src/in_app_announcements/in_app_announcement.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import InAppAnnouncementDot from './in_app_announcement_dot.jsx'; @@ -78,11 +79,11 @@ const validateBooleanWithWindowDependency = (props, propName, componentName, win }; InAppAnnouncement.propTypes = { - width: React.PropTypes.string, - height: React.PropTypes.string, - className: React.PropTypes.string, - children: React.PropTypes.element.isRequired, - validUntil: React.PropTypes.instanceOf(Date), + width: PropTypes.string, + height: PropTypes.string, + className: PropTypes.string, + children: PropTypes.element.isRequired, + validUntil: PropTypes.instanceOf(Date), showToNewUser: (props, propName, componentName) => ( validateBooleanWithWindowDependency(props, propName, componentName, 'mailpoet_is_new_user') ), diff --git a/assets/js/src/in_app_announcements/in_app_announcement_dot.jsx b/assets/js/src/in_app_announcements/in_app_announcement_dot.jsx index 8241efc448..2cf9e00ebe 100644 --- a/assets/js/src/in_app_announcements/in_app_announcement_dot.jsx +++ b/assets/js/src/in_app_announcements/in_app_announcement_dot.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import ReactDOMServer from 'react-dom/server'; import classNames from 'classnames'; @@ -20,11 +21,11 @@ const InAppAnnouncementDot = props => ( ); InAppAnnouncementDot.propTypes = { - children: React.PropTypes.element.isRequired, - width: React.PropTypes.string, - height: React.PropTypes.string, - className: React.PropTypes.string, - onUserTrigger: React.PropTypes.func, + children: PropTypes.element.isRequired, + width: PropTypes.string, + height: PropTypes.string, + className: PropTypes.string, + onUserTrigger: PropTypes.func, }; InAppAnnouncementDot.defaultProps = { diff --git a/assets/js/src/listing/listing.jsx b/assets/js/src/listing/listing.jsx index 36210a1831..064d91dc71 100644 --- a/assets/js/src/listing/listing.jsx +++ b/assets/js/src/listing/listing.jsx @@ -48,7 +48,7 @@ const Listing = createReactClass({ // eslint-disable-line react/prefer-es6-class /* eslint-enable react/require-default-props */ contextTypes: { - router: React.PropTypes.object.isRequired, + router: PropTypes.object.isRequired, }, getDefaultProps: () => ({ diff --git a/assets/js/src/newsletter_editor/background_image_announcement.jsx b/assets/js/src/newsletter_editor/background_image_announcement.jsx index a5fcc76138..a27367d318 100644 --- a/assets/js/src/newsletter_editor/background_image_announcement.jsx +++ b/assets/js/src/newsletter_editor/background_image_announcement.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import InAppAnnouncement from 'in_app_announcements/in_app_announcement.jsx'; @@ -19,8 +20,8 @@ const BackgroundImageAnnouncement = props => ( ); BackgroundImageAnnouncement.propTypes = { - username: React.PropTypes.string.isRequired, - videoUrl: React.PropTypes.string.isRequired, + username: PropTypes.string.isRequired, + videoUrl: PropTypes.string.isRequired, }; module.exports = BackgroundImageAnnouncement; diff --git a/assets/js/src/newsletters/send.jsx b/assets/js/src/newsletters/send.jsx index ee368f4c79..c60013bab8 100644 --- a/assets/js/src/newsletters/send.jsx +++ b/assets/js/src/newsletters/send.jsx @@ -23,7 +23,7 @@ const NewsletterSend = createReactClass({ // eslint-disable-line react/prefer-es }, contextTypes: { - router: React.PropTypes.object.isRequired, + router: PropTypes.object.isRequired, }, getInitialState: function getInitialState() { diff --git a/assets/js/src/newsletters/types.jsx b/assets/js/src/newsletters/types.jsx index 1d846c694a..dfc1e835d8 100644 --- a/assets/js/src/newsletters/types.jsx +++ b/assets/js/src/newsletters/types.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import Breadcrumb from 'newsletters/breadcrumb.jsx'; @@ -7,7 +8,7 @@ import 'react-router'; class NewsletterTypes extends React.Component { static contextTypes = { - router: React.PropTypes.object.isRequired, + router: PropTypes.object.isRequired, }; setupNewsletter = (type) => { diff --git a/assets/js/src/newsletters/types/notification/notification.jsx b/assets/js/src/newsletters/types/notification/notification.jsx index 70540ca1f7..cf794aabc2 100644 --- a/assets/js/src/newsletters/types/notification/notification.jsx +++ b/assets/js/src/newsletters/types/notification/notification.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import Breadcrumb from 'newsletters/breadcrumb.jsx'; @@ -12,7 +13,7 @@ const field = { class NewsletterNotification extends React.Component { static contextTypes = { - router: React.PropTypes.object.isRequired, + router: PropTypes.object.isRequired, }; state = { diff --git a/assets/js/src/newsletters/types/standard.jsx b/assets/js/src/newsletters/types/standard.jsx index 4ab453ff37..532aab9cbb 100644 --- a/assets/js/src/newsletters/types/standard.jsx +++ b/assets/js/src/newsletters/types/standard.jsx @@ -1,10 +1,11 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import Breadcrumb from 'newsletters/breadcrumb.jsx'; class NewsletterStandard extends React.Component { static contextTypes = { - router: React.PropTypes.object.isRequired, + router: PropTypes.object.isRequired, }; componentDidMount() { diff --git a/assets/js/src/newsletters/types/welcome/scheduling.jsx b/assets/js/src/newsletters/types/welcome/scheduling.jsx index 6d3b2dfd04..978e4100c2 100644 --- a/assets/js/src/newsletters/types/welcome/scheduling.jsx +++ b/assets/js/src/newsletters/types/welcome/scheduling.jsx @@ -50,7 +50,7 @@ const afterTimeTypeField = { class WelcomeScheduling extends React.Component { static contextTypes = { - router: React.PropTypes.object.isRequired, + router: PropTypes.object.isRequired, }; getCurrentValue = () => this.props.item[this.props.field.name] || {}; diff --git a/assets/js/src/welcome_wizard/header.jsx b/assets/js/src/welcome_wizard/header.jsx index 45cfa0a48d..b6ef1be4f9 100644 --- a/assets/js/src/welcome_wizard/header.jsx +++ b/assets/js/src/welcome_wizard/header.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import SteppedProgressBar from '../common/stepped_progess_bar.jsx'; @@ -13,9 +14,9 @@ const WelcomeWizardHeader = props => ( ); WelcomeWizardHeader.propTypes = { - current_step: React.PropTypes.number.isRequired, - steps_count: React.PropTypes.number.isRequired, - logo_src: React.PropTypes.string.isRequired, + current_step: PropTypes.number.isRequired, + steps_count: PropTypes.number.isRequired, + logo_src: PropTypes.string.isRequired, }; module.exports = WelcomeWizardHeader; diff --git a/assets/js/src/welcome_wizard/steps/help_info_step.jsx b/assets/js/src/welcome_wizard/steps/help_info_step.jsx index d5d6e05eab..cf4f1c104d 100644 --- a/assets/js/src/welcome_wizard/steps/help_info_step.jsx +++ b/assets/js/src/welcome_wizard/steps/help_info_step.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import ReactStringReplace from 'react-string-replace'; @@ -62,7 +63,7 @@ const WelcomeWizardHelpInfoStep = props => ( module.exports = WelcomeWizardHelpInfoStep; WelcomeWizardHelpInfoStep.propTypes = { - next: React.PropTypes.func.isRequired, + next: PropTypes.func.isRequired, }; module.exports = WelcomeWizardHelpInfoStep; diff --git a/assets/js/src/welcome_wizard/steps/migrated_user_step.jsx b/assets/js/src/welcome_wizard/steps/migrated_user_step.jsx index 75709108de..2e6247ee15 100644 --- a/assets/js/src/welcome_wizard/steps/migrated_user_step.jsx +++ b/assets/js/src/welcome_wizard/steps/migrated_user_step.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; @@ -12,7 +13,7 @@ const WelcomeWizardMigratedUserStep = props => ( ); WelcomeWizardMigratedUserStep.propTypes = { - next: React.PropTypes.func.isRequired, + next: PropTypes.func.isRequired, }; module.exports = WelcomeWizardMigratedUserStep; diff --git a/assets/js/src/welcome_wizard/steps/sender_step.jsx b/assets/js/src/welcome_wizard/steps/sender_step.jsx index 8db527b2b5..d227f3c017 100644 --- a/assets/js/src/welcome_wizard/steps/sender_step.jsx +++ b/assets/js/src/welcome_wizard/steps/sender_step.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import jQuery from 'jquery'; @@ -47,13 +48,13 @@ const WelcomeWizardSenderStep = props => ( ); WelcomeWizardSenderStep.propTypes = { - finish: React.PropTypes.func.isRequired, - loading: React.PropTypes.bool.isRequired, - update_sender: React.PropTypes.func.isRequired, - submit_sender: React.PropTypes.func.isRequired, - sender: React.PropTypes.shape({ - name: React.PropTypes.string, - address: React.PropTypes.string, + finish: PropTypes.func.isRequired, + loading: PropTypes.bool.isRequired, + update_sender: PropTypes.func.isRequired, + submit_sender: PropTypes.func.isRequired, + sender: PropTypes.shape({ + name: PropTypes.string, + address: PropTypes.string, }), }; diff --git a/assets/js/src/welcome_wizard/steps/usage_tracking_step.jsx b/assets/js/src/welcome_wizard/steps/usage_tracking_step.jsx index c823ed646d..ae66b66dc1 100644 --- a/assets/js/src/welcome_wizard/steps/usage_tracking_step.jsx +++ b/assets/js/src/welcome_wizard/steps/usage_tracking_step.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import ReactStringReplace from 'react-string-replace'; @@ -48,8 +49,8 @@ const WelcomeWizardUsageTrackingStep = props => ( module.exports = WelcomeWizardUsageTrackingStep; WelcomeWizardUsageTrackingStep.propTypes = { - allow_action: React.PropTypes.func.isRequired, - allow_text: React.PropTypes.string.isRequired, - skip_action: React.PropTypes.func.isRequired, - loading: React.PropTypes.bool.isRequired, + allow_action: PropTypes.func.isRequired, + allow_text: PropTypes.string.isRequired, + skip_action: PropTypes.func.isRequired, + loading: PropTypes.bool.isRequired, }; diff --git a/assets/js/src/welcome_wizard/steps/woo_commerce_step.jsx b/assets/js/src/welcome_wizard/steps/woo_commerce_step.jsx index d16e45ffd1..bce8ff212f 100644 --- a/assets/js/src/welcome_wizard/steps/woo_commerce_step.jsx +++ b/assets/js/src/welcome_wizard/steps/woo_commerce_step.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; @@ -35,7 +36,7 @@ const WelcomeWizardWooCommerceStep = props => ( module.exports = WelcomeWizardWooCommerceStep; WelcomeWizardWooCommerceStep.propTypes = { - next: React.PropTypes.func.isRequired, - screenshot_src: React.PropTypes.string.isRequired, - loading: React.PropTypes.bool.isRequired, + next: PropTypes.func.isRequired, + screenshot_src: PropTypes.string.isRequired, + loading: PropTypes.bool.isRequired, }; diff --git a/assets/js/src/welcome_wizard/steps_controller.jsx b/assets/js/src/welcome_wizard/steps_controller.jsx index 9a9418ffad..c427b08563 100644 --- a/assets/js/src/welcome_wizard/steps_controller.jsx +++ b/assets/js/src/welcome_wizard/steps_controller.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; import MailPoet from 'mailpoet'; import WelcomeWizardHeader from './header.jsx'; @@ -136,11 +137,11 @@ class WelcomeWizardStepsController extends React.Component { } WelcomeWizardStepsController.propTypes = { - params: React.PropTypes.shape({ - step: React.PropTypes.string.isRequired, + params: PropTypes.shape({ + step: PropTypes.string.isRequired, }).isRequired, - router: React.PropTypes.shape({ - push: React.PropTypes.func.isRequired, + router: PropTypes.shape({ + push: PropTypes.func.isRequired, }).isRequired, };