Skip to content

Commit

Permalink
feat(FusionTablesLayer): add component
Browse files Browse the repository at this point in the history
* Original commit: fd01d44
* Original author: @RishabhJain96
* Closes #370
  • Loading branch information
RishabhJain96 authored and tomchentw committed Apr 20, 2017
1 parent 83b1e1b commit 1d8e478
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 0 deletions.
98 changes: 98 additions & 0 deletions src/lib/FusionTablesLayer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/* global google */
import _ from 'lodash';

import {
default as React,
PropTypes,
} from 'react';

import {
MAP,
FUSION_TABLES_LAYER,
} from './constants';

import {
addDefaultPrefixToPropTypes,
collectUncontrolledAndControlledProps,
default as enhanceElement,
} from './enhanceElement';

const controlledPropTypes = {
// NOTICE!!!!!!
//
// Only expose those with getters & setters in the table as controlled props.
//
// [].map.call($0.querySelectorAll("tr>td>code", function(it){ return it.textContent; })
// .filter(function(it){ return it.match(/^set/) && !it.match(/^setMap/); })
//
// https://developers.google.com/maps/documentation/javascript/3.exp/reference#FusionTablesLayer
options: PropTypes.object,
}

const defaultUncontrolledPropTypes = addDefaultPrefixToPropTypes(controlledPropTypes);

const eventMap = {
// https://developers.google.com/maps/documentation/javascript/3.exp/reference#FusionTablesLayer
// [].map.call($0.querySelectorAll("tr>td>code"), function(it){ return it.textContent; })
onClick: `click`,
};

const publicMethodMap = {
// Public APIs
//
// https://developers.google.com/maps/documentation/javascript/3.exp/reference#FusionTablesLayer
//
// [].map.call($0.querySelectorAll("tr>td>code"), function(it){ return it.textContent; })
// .filter(function(it){ return it.match(/^get/) && !it.match(/Map$/); })
// END - Public APIs
}

const controlledPropUpdaterMap = {
options(fusionTablesLayer, options) { fusionTablesLayer.setOptions(options); },
};

function getInstanceFromComponent(component) {
return component.state[FUSION_TABLES_LAYER];
}

export default _.flowRight(
React.createClass,
enhanceElement(getInstanceFromComponent, publicMethodMap, eventMap, controlledPropUpdaterMap),
)({
displayName: `FusionTablesLayer`,

propTypes: {
...controlledPropTypes,
...defaultUncontrolledPropTypes,
},

contextTypes: {
[MAP]: PropTypes.object,
},

getInitialState() {
const fusionTablesLayer = new google.maps.FusionTablesLayer({
map: this.context[MAP],
...collectUncontrolledAndControlledProps(
defaultUncontrolledPropTypes,
controlledPropTypes,
this.props
),
});

return {
[FUSION_TABLES_LAYER]: fusionTablesLayer,
};
},

componentWillUnmount() {
const fusionTablesLayer = getInstanceFromComponent(this);
if (fusionTablesLayer) {
fusionTablesLayer.setMap(null);
}
},

render() {
return false;
},
});
2 changes: 2 additions & 0 deletions src/lib/__tests__/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
HeatmapLayer,
InfoWindow,
KmlLayer,
FusionTablesLayer,
Marker,
OverlayView,
Polygon,
Expand All @@ -24,6 +25,7 @@ describe(`index`, () => {
expect(HeatmapLayer).toBeDefined();
expect(InfoWindow).toBeDefined();
expect(KmlLayer).toBeDefined();
expect(FusionTablesLayer).toBeDefined();
expect(Marker).toBeDefined();
expect(OverlayView).toBeDefined();
expect(Polygon).toBeDefined();
Expand Down
2 changes: 2 additions & 0 deletions src/lib/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ export const DIRECTIONS_RENDERER = `__SECRET_DIRECTIONS_RENDERER_DO_NOT_USE_OR_Y

export const HEATMAP_LAYER = `__SECRET_HEATMAP_LAYER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`;

export const FUSION_TABLES_LAYER = `__SECRET_FUSION_TABLES_LAYER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`;

export const ANCHOR = `__SECRET_ANCHOR_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`;

export const INFO_WINDOW = `__SECRET_INFO_WINDOW_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`;
Expand Down
4 changes: 4 additions & 0 deletions src/lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ export {
default as KmlLayer,
} from "./KmlLayer";

export {
default as FusionTablesLayer,
} from "./FusionTablesLayer";

export {
default as DirectionsRenderer,
} from "./DirectionsRenderer";
Expand Down

0 comments on commit 1d8e478

Please sign in to comment.