UNPKG

@ant-design/react-native

Version:

基于蚂蚁金服移动设计规范的 React Native 组件库

1 lines 2.4 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.WithTheme=WithTheme;exports.useTheme=exports.ThemeProvider=exports.ThemeContext=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireDefault(require("react"));var _shallowequal=_interopRequireDefault(require("shallowequal"));var _default=_interopRequireDefault(require("./themes/default"));var ThemeContext=_react["default"].createContext(_default["default"]);exports.ThemeContext=ThemeContext;var ThemeProvider=function ThemeProvider(props){var value=props.value,children=props.children;var theme=_react["default"].useMemo(function(){return(0,_extends2["default"])((0,_extends2["default"])({},_default["default"]),value);},[value]);return _react["default"].createElement(ThemeContext.Provider,{value:theme},children);};exports.ThemeProvider=ThemeProvider;var useTheme=function useTheme(props){var theme=_react["default"].useContext(ThemeContext);var themeStyles=props.themeStyles,styles=props.styles;var stylesRef=_react["default"].useRef(undefined);var cache=_react["default"].useRef(undefined);var getStyles=_react["default"].useCallback(function(){if(themeStyles&&cache.current===undefined){cache.current=themeStyles(theme);}if(styles&&!(0,_shallowequal["default"])(stylesRef.current,styles)){stylesRef.current=styles;styles&&Object.keys(styles).forEach(function(key){if(cache.current[key]){cache.current[key]=[cache.current[key],styles[key]];}});}return cache.current||{};},[theme,themeStyles,styles]);return getStyles();};exports.useTheme=useTheme;function WithTheme(props){var children=props.children,themeStyles=props.themeStyles,styles=props.styles;var stylesRef=_react["default"].useRef(undefined);var cache=_react["default"].useRef(undefined);var getStyles=_react["default"].useCallback(function(theme){if(themeStyles&&cache.current===undefined){cache.current=themeStyles(theme);}if(styles&&!(0,_shallowequal["default"])(stylesRef.current,styles)){stylesRef.current=styles;styles&&Object.keys(styles).forEach(function(key){if(cache.current[key]){cache.current[key]=[cache.current[key],styles[key]];}});}return cache.current||{};},[themeStyles,styles]);return _react["default"].createElement(ThemeContext.Consumer,null,function(theme){return children(getStyles(theme),theme);});}