From f03f0568cca6e341304cd330e633213364316c5e Mon Sep 17 00:00:00 2001 From: Aaron Boodman Date: Thu, 17 Apr 2014 22:35:53 -0700 Subject: [PATCH] Remove cam.reactUtil.quacksLike because React 0.10.0 has this built-in. Change-Id: Id76bfe32b52fcc3896eb57cd03c1967c6b8fbfac --- .../ui/blob_item_container_react.js | 5 ++-- server/camlistored/ui/index.js | 6 ++--- server/camlistored/ui/nav_react.js | 2 +- server/camlistored/ui/react_util.js | 24 ------------------- 4 files changed, 6 insertions(+), 31 deletions(-) diff --git a/server/camlistored/ui/blob_item_container_react.js b/server/camlistored/ui/blob_item_container_react.js index bf33c15a7..1f1a59613 100644 --- a/server/camlistored/ui/blob_item_container_react.js +++ b/server/camlistored/ui/blob_item_container_react.js @@ -26,7 +26,6 @@ goog.require('goog.math.Size'); goog.require('goog.style'); goog.require('cam.BlobItemReact'); -goog.require('cam.reactUtil'); goog.require('cam.SearchSession'); cam.BlobItemContainerReact = React.createClass({ @@ -44,9 +43,9 @@ cam.BlobItemContainerReact = React.createClass({ propTypes: { detailURL: React.PropTypes.func.isRequired, // string->string (blobref->complete detail URL) handlers: React.PropTypes.array.isRequired, - history: cam.reactUtil.quacksLike({replaceState:React.PropTypes.func.isRequired}).isRequired, + history: React.PropTypes.shape({replaceState:React.PropTypes.func.isRequired}).isRequired, onSelectionChange: React.PropTypes.func, - searchSession: cam.reactUtil.quacksLike({getCurrentResults:React.PropTypes.func.isRequired, addEventListener:React.PropTypes.func.isRequired, loadMoreResults:React.PropTypes.func.isRequired}), + searchSession: React.PropTypes.shape({getCurrentResults:React.PropTypes.func.isRequired, addEventListener:React.PropTypes.func.isRequired, loadMoreResults:React.PropTypes.func.isRequired}), selection: React.PropTypes.object.isRequired, style: React.PropTypes.object, thumbnailSize: React.PropTypes.number.isRequired, diff --git a/server/camlistored/ui/index.js b/server/camlistored/ui/index.js index d0305ba51..bf27f18c0 100644 --- a/server/camlistored/ui/index.js +++ b/server/camlistored/ui/index.js @@ -55,9 +55,9 @@ cam.IndexPage = React.createClass({ availWidth: React.PropTypes.number.isRequired, availHeight: React.PropTypes.number.isRequired, config: React.PropTypes.object.isRequired, - eventTarget: cam.reactUtil.quacksLike({addEventListener:React.PropTypes.func.isRequired}).isRequired, - history: cam.reactUtil.quacksLike({pushState:React.PropTypes.func.isRequired, replaceState:React.PropTypes.func.isRequired, go:React.PropTypes.func.isRequired, state:React.PropTypes.object}).isRequired, - location: cam.reactUtil.quacksLike({href:React.PropTypes.string.isRequired, reload:React.PropTypes.func.isRequired}).isRequired, + eventTarget: React.PropTypes.shape({addEventListener:React.PropTypes.func.isRequired}).isRequired, + history: React.PropTypes.shape({pushState:React.PropTypes.func.isRequired, replaceState:React.PropTypes.func.isRequired, go:React.PropTypes.func.isRequired, state:React.PropTypes.object}).isRequired, + location: React.PropTypes.shape({href:React.PropTypes.string.isRequired, reload:React.PropTypes.func.isRequired}).isRequired, serverConnection: React.PropTypes.instanceOf(cam.ServerConnection).isRequired, timer: cam.NavReact.originalSpec.propTypes.timer, }, diff --git a/server/camlistored/ui/nav_react.js b/server/camlistored/ui/nav_react.js index cf5e4f18c..647fd84fd 100644 --- a/server/camlistored/ui/nav_react.js +++ b/server/camlistored/ui/nav_react.js @@ -32,7 +32,7 @@ cam.NavReact = React.createClass({ onOpen: React.PropTypes.func.isRequired, onClose: React.PropTypes.func.isRequired, open: React.PropTypes.bool.isRequired, - timer: cam.reactUtil.quacksLike({setTimeout: React.PropTypes.func.isRequired, clearTimeout: React.PropTypes.func.isRequired,}).isRequired, + timer: React.PropTypes.shape({setTimeout: React.PropTypes.func.isRequired, clearTimeout: React.PropTypes.func.isRequired,}).isRequired, }, componentWillMount: function() { diff --git a/server/camlistored/ui/react_util.js b/server/camlistored/ui/react_util.js index 7faea0c13..4b8c5af55 100644 --- a/server/camlistored/ui/react_util.js +++ b/server/camlistored/ui/react_util.js @@ -36,30 +36,6 @@ cam.reactUtil.mapOf = function(validator) { return validator; }; -// A React prop validator that enforces a property has the specified duck type. -// @param Object iface An object that describes the required interface. Each property should itself be a React prop validator describing the corresponding required member. -// TODO(aa): Delete now that React has this built in. -cam.reactUtil.quacksLike = function(iface) { - var validator = function(props, propName, componentName) { - componentName += '.' + propName; - if (propName in props) { - var thing = props[propName]; - for (var p in iface) { - iface[p](thing, p, componentName); - } - } - }; - - validator.isRequired = function(props, propName, componentName) { - if (!(propName in props)) { - throw new Error(goog.string.subs('Required prop %s is not present', propName)); - } - validator(props, propName, componentName); - }; - - return validator; -}; - // Returns the appropriate vendor prefixed style property name. This is figured out by testing the presence of various property names on an actual DOM style object. // The returned property is of the form 'fooBar' (if no prefix is needed), or 'WebkitFooBar' if a prefix is needed, which is the form React expects. // @param {string} prop The property name to find.