@zohodesk/components
Version:
In this Package, we Provide Some Basic Components to Build Web App
242 lines (187 loc) • 11.6 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ResponsiveReceiver = ResponsiveReceiver;
exports.ResponsiveSender = ResponsiveSender;
exports.useResponsiveReceiver = useResponsiveReceiver;
var _react = _interopRequireWildcard(require("react"));
var _defaultProps = require("./props/defaultProps");
var _propTypes = require("./props/propTypes");
var _ResizeObserver = _interopRequireDefault(require("./ResizeObserver"));
var _RefWrapper = _interopRequireDefault(require("./RefWrapper"));
var _shallowCompare = _interopRequireDefault(require("./utils/shallowCompare"));
var _sizeObservers = require("./sizeObservers");
var _ContextOptimizer = require("../utils/ContextOptimizer");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
// const commonBreakPoints = [ 480, 640, 768, 1024, 1440 ];
// const otherBreakPoints = [320, 360, 375, 720, 1280, 1600, 1920];
// defaultResponsiveId means if ResponsiveSender do not recive id This will be id
var defaultResponsiveId = 'parent_sender'; // validSizeResponsiveId means in some parent's height and with is caluclated ( readed )
var validSizeResponsiveId = 'valid_sender';
var ResponsiveContext = /*#__PURE__*/_react["default"].createContext(_defineProperty({}, validSizeResponsiveId, _sizeObservers.windowResizeObserver));
function ResponsiveSender(props) {
// variables
var children = props.children,
domRefKey = props.domRefKey,
responsiveId = props.responsiveId;
function init() {
var size = {
height: 0,
width: 0
};
function getSize() {
return size;
}
var childContext = {
resize: new _sizeObservers.Subscribale(),
getSize: getSize,
// TODO: rename isParentSize ==> isSizeReaded (or) isMySize (or) isOriginalSize
isParentSize: false
};
function onResize(newSize) {
childContext.isParentSize = true;
size = newSize;
setTimeout(function () {
childContext.resize.dispatch(newSize);
});
}
var observer = new _ResizeObserver["default"](onResize);
function containerRef(node) {
observer.replaceObservationElement(node);
}
return {
containerRef: containerRef,
childContext: childContext
};
}
var _useMemo = (0, _react.useMemo)(init, []),
containerRef = _useMemo.containerRef,
childContext = _useMemo.childContext;
function contextSelector(context) {
var totalContext = _objectSpread({}, context);
totalContext[responsiveId] = childContext; // NOTE: this for fallback of if responsive receiver id wrong or not avelable Responcive id
totalContext[defaultResponsiveId] = childContext;
if (childContext.isParentSize) {
totalContext[validSizeResponsiveId] = childContext;
}
return totalContext;
}
return /*#__PURE__*/_react["default"].createElement(_ContextOptimizer.ContextOptimizer, {
Context: ResponsiveContext,
calculation: contextSelector
}, function (totalContext) {
return /*#__PURE__*/_react["default"].createElement(ResponsiveContext.Provider, {
value: totalContext
}, /*#__PURE__*/_react["default"].createElement(_RefWrapper["default"], {
domRefKey: domRefKey,
ref: containerRef
}, children));
});
}
ResponsiveSender.defaultProps = _objectSpread(_objectSpread({}, _defaultProps.CustomResponsiveSender_defaultProps), {}, {
responsiveId: defaultResponsiveId
});
ResponsiveSender.contextType = ResponsiveContext;
ResponsiveSender.propTypes = _propTypes.CustomResponsiveSender_propTypes;
function useResponsiveReceiver() {
var responsiveId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultResponsiveId;
var query = arguments.length > 1 ? arguments[1] : undefined;
var _useState = (0, _react.useState)(),
_useState2 = _slicedToArray(_useState, 2),
forceUpdate = _useState2[1];
var totalContextData = (0, _react.useContext)(ResponsiveContext);
var validSizeContextData = totalContextData[validSizeResponsiveId];
var contextData = totalContextData[responsiveId] || totalContextData[defaultResponsiveId] || validSizeContextData; // NOTE: this for fallback of if responsive receiver id wrong
var resizeHandlerRef = (0, _react.useRef)();
var data = (0, _react.useRef)();
function updateLatestData() {
var size = contextData.isParentSize ? contextData.getSize() : validSizeContextData.getSize();
var prevData = data.current;
data.current = query({
isTouchDevice: _sizeObservers.isTouchDevice,
isParentSize: contextData.isParentSize,
currentScreenSize: size,
mediaQueryOR: function mediaQueryOR(breakPointArray) {
return breakPointArray.some(function (breakPoint) {
var _isBreackPointMatched = (0, _sizeObservers.isBreackPointMatched)(breakPoint, size),
isHeight = _isBreackPointMatched.isHeight,
isWidth = _isBreackPointMatched.isWidth;
return isHeight || isWidth;
});
},
mediaQueryAND: function mediaQueryAND(breakPointArray) {
return breakPointArray.every(function (breakPoint) {
var _isBreackPointMatched2 = (0, _sizeObservers.isBreackPointMatched)(breakPoint, size),
isHeight = _isBreackPointMatched2.isHeight,
isWidth = _isBreackPointMatched2.isWidth;
return (isHeight === undefined ? true : isHeight) && (isWidth === undefined ? true : isWidth);
});
}
});
var isSameValues = (0, _shallowCompare["default"])(data.current, prevData);
if (isSameValues) {
data.current = prevData;
}
return isSameValues;
}
resizeHandlerRef.current = updateLatestData;
(0, _react.useEffect)(function () {
function handleResize(size) {
var isSameValues = resizeHandlerRef.current(size);
!isSameValues && forceUpdate({});
}
contextData.resize.subscribe(handleResize);
return function () {
return contextData.resize.unsubscribe(handleResize);
};
}, [contextData]); // const prevContextDataRef = useRef();
// function handleResize(size) {
// const prevData = data.current;
// resizeHandlerRef.current(size);
// const isSammeValues = shallowCompare(data.current, prevData);
// !isSammeValues && forceUpdate({});
// }
// if(prevContextDataRef.current !== contextData) {
// prevContextDataRef.current = contextData;
// contextData.resize.unsubscribe(handleResize);
// windowResizeObserver.unobserve(handleResize);
// if (contextData) {
// contextData.resize.subscribe(handleResize);
// } else {
// windowResizeObserver.observe(handleResize);
// }
// }
// NOTE: this call for we must give updated value
updateLatestData();
return data.current;
}
function ResponsiveReceiver(_ref) {
var children = _ref.children,
responsiveId = _ref.responsiveId,
query = _ref.query,
eleRef = _ref.eleRef,
domRefKey = _ref.domRefKey;
var data = useResponsiveReceiver(responsiveId, query);
var child = children(data);
return eleRef ? /*#__PURE__*/_react["default"].createElement(_RefWrapper["default"], {
domRefKey: domRefKey,
ref: eleRef
}, child) : child;
}
ResponsiveReceiver.defaultProps = _objectSpread(_objectSpread({}, _defaultProps.CustomResponsiveReceiver_defaultProps), {}, {
responsiveId: defaultResponsiveId
});
ResponsiveReceiver.propTypes = _propTypes.CustomResponsiveReceiver_propTypes;