UNPKG

@hackoregon/component-library

Version:

Official repo for Hack Oregon React component library

335 lines (265 loc) 12.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = require("prop-types"); var _emotion = require("emotion"); var _PieChart = _interopRequireDefault(require("../PieChart/PieChart")); var _HorizontalBarChart = _interopRequireDefault(require("../HorizontalBarChart/HorizontalBarChart")); var _civicFormat = _interopRequireDefault(require("../utils/civicFormat")); var _styleConstants = require("../styleConstants"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _templateObject13() { var data = _taggedTemplateLiteral(["\n position: absolute;\n bottom: 35px;\n left: 28%;\n width: 50%;\n margin: auto;\n text-align: center;\n"]); _templateObject13 = function _templateObject13() { return data; }; return data; } function _templateObject12() { var data = _taggedTemplateLiteral(["\n width: 90%;\n margin: 2% 2% 2% 8%;\n padding-bottom: 25px;\n overflow-y: hidden;\n"]); _templateObject12 = function _templateObject12() { return data; }; return data; } function _templateObject11() { var data = _taggedTemplateLiteral(["\n text-align: center;\n border: 1px solid lightGray;\n background-color: #f0f0f0;\n color: #dc4556;\n font-size: 20px;\n height: 98%;\n width: 50%;\n margin: 0 auto;\n"]); _templateObject11 = function _templateObject11() { return data; }; return data; } function _templateObject10() { var data = _taggedTemplateLiteral(["\n text-align: center;\n border: 1px solid lightGray;\n background-color: #f0f0f0;\n color: dimGray;\n font-size: 20px;\n height: 98%;\n width: 50%;\n margin: 0 auto;\n"]); _templateObject10 = function _templateObject10() { return data; }; return data; } function _templateObject9() { var data = _taggedTemplateLiteral(["\n position: absolute;\n bottom: 40px;\n display: flex;\n flex-direction: row;\n width: 100%;\n"]); _templateObject9 = function _templateObject9() { return data; }; return data; } function _templateObject8() { var data = _taggedTemplateLiteral(["\n position: absolute;\n left: -1px;\n top: -1px;\n"]); _templateObject8 = function _templateObject8() { return data; }; return data; } function _templateObject7() { var data = _taggedTemplateLiteral(["\n flex: 1;\n margin 1% auto;\n font-size: 20px;\n text-align: center;\n"]); _templateObject7 = function _templateObject7() { return data; }; return data; } function _templateObject6() { var data = _taggedTemplateLiteral(["\n flex: 3;\n margin auto 20px;\n"]); _templateObject6 = function _templateObject6() { return data; }; return data; } function _templateObject5() { var data = _taggedTemplateLiteral(["\n position: relative;\n display: flex;\n flex-direction: row;\n height: 100%;\n width: 100%;\n color: #dc4556;\n z-index: 4;\n opacity: 0.9;\n border: 1px solid #ddd;\n border-radius: 2px;\n box-shadow: 5px 5px 15px -3px rgba(0, 0, 0, 0.2);\n"]); _templateObject5 = function _templateObject5() { return data; }; return data; } function _templateObject4() { var data = _taggedTemplateLiteral(["\n position: relative;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n overflow-x: hidden;\n"]); _templateObject4 = function _templateObject4() { return data; }; return data; } function _templateObject3() { var data = _taggedTemplateLiteral(["\n height: 0;\n opacity: 0;\n transition: height 750ms ease-out, opacity 0s linear;\n"]); _templateObject3 = function _templateObject3() { return data; }; return data; } function _templateObject2() { var data = _taggedTemplateLiteral(["\n height: 400px;\n overflow-y: auto;\n overflow-x: hidden;\n opacity: 0.9;\n transition: height 750ms ease-out, opacity 1.5s ease-in;\n"]); _templateObject2 = function _templateObject2() { return data; }; return data; } function _templateObject() { var data = _taggedTemplateLiteral(["\n position: absolute;\n bottom: 50px;\n left: 25px;\n display: flex;\n flex-direction: column;\n width: 500px;\n background: rgba(243, 242, 243, 0.9);\n color: rgb(85, 85, 85);\n border: 1px solid #ddd;\n border-radius: 2px;\n box-shadow: 5px 5px 15px -3px rgba(0, 0, 0, 0.2);\n @media (max-width: 900px) {\n width: 92%;\n left: 1%;\n }\n"]); _templateObject = function _templateObject() { return data; }; return data; } function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } var container = (0, _emotion.css)(_templateObject()); var dashboardOpen = (0, _emotion.css)(_templateObject2()); var dashboardClosed = (0, _emotion.css)(_templateObject3()); var contentContainer = (0, _emotion.css)(_templateObject4()); var toggleContainer = (0, _emotion.css)(_templateObject5()); var toggleTitle = (0, _emotion.css)(_templateObject6()); var toggleArrow = (0, _emotion.css)(_templateObject7()); var watermarkContainer = (0, _emotion.css)(_templateObject8()); var buttonContainer = (0, _emotion.css)(_templateObject9()); var icon = (0, _emotion.css)(_templateObject10()); var iconActive = (0, _emotion.css)(_templateObject11()); var viz = (0, _emotion.css)(_templateObject12()); var donutPercent = (0, _emotion.css)(_templateObject13()); var createTextViz = function createTextViz(text, index) { return _react["default"].createElement("div", { className: viz, key: index }, _react["default"].createElement("h2", null, text.title), _react["default"].createElement("h3", null, text.data.toLocaleString())); }; var createDonutViz = function createDonutViz(donut, index) { var _donut$data = _slicedToArray(donut.data, 1), percentValue = _donut$data[0]; var salmon = "#EE495C"; var gray = "#a9a9a9"; return _react["default"].createElement("div", { className: viz, key: index }, _react["default"].createElement("h2", null, donut.title), _react["default"].createElement("h2", { className: donutPercent }, percentValue.y < 1 ? _civicFormat["default"].percentage(percentValue.y) : "".concat(percentValue.y.toFixed(1), "%")), _react["default"].createElement(_PieChart["default"], { data: donut.data, colors: [salmon, gray], width: 400, height: 400, innerRadius: 110, halfDoughnut: true })); }; var createBarsViz = function createBarsViz(bars, index) { return _react["default"].createElement("div", { className: viz, key: index }, _react["default"].createElement("h2", null, bars.title), _react["default"].createElement(_HorizontalBarChart["default"], { minimalist: bars.minimalist, data: bars.data, sortOrder: bars.sortOrder, dataValue: bars.dataValue, dataLabel: bars.dataLabel, dataKeyLabel: "", title: "", subtitle: "", xLabel: "", yLabel: "" })); }; var placeholder = _react["default"].createElement("div", { className: viz }, _react["default"].createElement("h2", null, "Please select a polygon")); var CivicDashboard = function CivicDashboard(props) { var data = props.data, children = props.children, isDashboardOpen = props.isDashboardOpen, _onClick = props.onClick; var _useState = (0, _react.useState)("visualizations"), _useState2 = _slicedToArray(_useState, 2), display = _useState2[0], setDisplay = _useState2[1]; var createVisualizations = data.map(function (object, index) { var vizType = object.visualizationType; return vizType === "Text" ? createTextViz(object, index) : vizType === "PercentDonut" ? createDonutViz(object, index) : vizType === "ComparisonBar" ? createBarsViz(object, index) : null; }); var _createVisualizations = _slicedToArray(createVisualizations, 1), hasVisualizations = _createVisualizations[0]; var visualizations = hasVisualizations ? createVisualizations : placeholder; var civicWatermark = _react["default"].createElement("div", { className: watermarkContainer }, _react["default"].createElement("svg", { width: "134", height: "135", xmlns: "http://www.w3.org/2000/svg" }, _react["default"].createElement("g", { fill: "none", fillRule: "evenodd" }, _react["default"].createElement("path", { d: "M0 134.658V0l11.566 11.597v123.061H0z", fill: "#191119" }), _react["default"].createElement("path", { d: "M133.864 0v11.597H11.566v.008L0 .008V0h133.864z", fill: "#DC4556" })))); var visualizationButtons = _react["default"].createElement("div", { className: buttonContainer }, _react["default"].createElement("div", { className: display === "description" ? iconActive : icon, onClick: function onClick() { return setDisplay("description"); }, onKeyPress: function onKeyPress() { return setDisplay("description"); }, tabIndex: 0, role: "button" }, _react["default"].createElement("div", { className: _styleConstants.ICONS.info })), _react["default"].createElement("div", { className: display === "visualizations" ? iconActive : icon, onClick: function onClick() { return setDisplay("visualizations"); }, onKeyPress: function onKeyPress() { return setDisplay("visualizations"); }, tabIndex: 0, role: "button" }, _react["default"].createElement("div", { className: _styleConstants.ICONS.eye }))); var dashboardToggleButton = _react["default"].createElement("div", { className: toggleContainer, onClick: function onClick() { return _onClick(); }, onKeyPress: function onKeyPress() { return _onClick(); }, tabIndex: 0, role: "button" }, _react["default"].createElement("div", { className: toggleTitle }, isDashboardOpen ? "" : "Please select a polygon"), _react["default"].createElement("div", { className: toggleArrow }, _react["default"].createElement("div", { className: isDashboardOpen ? _styleConstants.ICONS.arrowDown : _styleConstants.ICONS.arrowUp }))); return _react["default"].createElement("div", { className: container }, _react["default"].createElement("div", { className: isDashboardOpen ? dashboardOpen : dashboardClosed }, _react["default"].createElement("div", { className: contentContainer }, display === "description" ? children : visualizations), civicWatermark, children ? visualizationButtons : null), dashboardToggleButton); }; CivicDashboard.propTypes = { data: (0, _propTypes.arrayOf)((0, _propTypes.shape)({ data: (0, _propTypes.oneOfType)([(0, _propTypes.arrayOf)((0, _propTypes.shape)({})), _propTypes.number, _propTypes.string]), id: (0, _propTypes.oneOfType)([_propTypes.number, _propTypes.string]), title: _propTypes.string, visualizationType: _propTypes.string })), children: _propTypes.node, isDashboardOpen: _propTypes.bool, onClick: _propTypes.func }; var _default = CivicDashboard; exports["default"] = _default;