@zero-bits/react-native-hot-update 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +159 -0
  2. package/es/constants.d.ts +20 -0
  3. package/es/constants.js +20 -0
  4. package/es/index.d.ts +4 -0
  5. package/es/index.js +3 -0
  6. package/es/initialize.d.ts +14 -0
  7. package/es/initialize.js +32 -0
  8. package/es/updateProvider.d.ts +75 -0
  9. package/es/updateProvider.js +74 -0
  10. package/es/updateState.d.ts +25 -0
  11. package/es/updateState.js +166 -0
  12. package/es/usePushyUpdate.d.ts +17 -0
  13. package/es/usePushyUpdate.js +108 -0
  14. package/es/widget/animated.overlay.d.ts +12 -0
  15. package/es/widget/animated.overlay.js +96 -0
  16. package/es/widget/content.widget.d.ts +5 -0
  17. package/es/widget/content.widget.js +55 -0
  18. package/es/widget/description.widget.d.ts +5 -0
  19. package/es/widget/description.widget.js +33 -0
  20. package/es/widget/download.modal.widget.d.ts +5 -0
  21. package/es/widget/download.modal.widget.js +130 -0
  22. package/es/widget/footer.widget.d.ts +5 -0
  23. package/es/widget/footer.widget.js +153 -0
  24. package/es/widget/title.widget.d.ts +5 -0
  25. package/es/widget/title.widget.js +27 -0
  26. package/es/widget/update.modal.widget.d.ts +5 -0
  27. package/es/widget/update.modal.widget.js +50 -0
  28. package/lib/constants.d.ts +20 -0
  29. package/lib/constants.js +26 -0
  30. package/lib/index.d.ts +4 -0
  31. package/lib/index.js +36 -0
  32. package/lib/initialize.d.ts +14 -0
  33. package/lib/initialize.js +38 -0
  34. package/lib/updateProvider.d.ts +75 -0
  35. package/lib/updateProvider.js +83 -0
  36. package/lib/updateState.d.ts +25 -0
  37. package/lib/updateState.js +176 -0
  38. package/lib/usePushyUpdate.d.ts +17 -0
  39. package/lib/usePushyUpdate.js +114 -0
  40. package/lib/widget/animated.overlay.d.ts +12 -0
  41. package/lib/widget/animated.overlay.js +104 -0
  42. package/lib/widget/content.widget.d.ts +5 -0
  43. package/lib/widget/content.widget.js +63 -0
  44. package/lib/widget/description.widget.d.ts +5 -0
  45. package/lib/widget/description.widget.js +41 -0
  46. package/lib/widget/download.modal.widget.d.ts +5 -0
  47. package/lib/widget/download.modal.widget.js +138 -0
  48. package/lib/widget/footer.widget.d.ts +5 -0
  49. package/lib/widget/footer.widget.js +161 -0
  50. package/lib/widget/title.widget.d.ts +5 -0
  51. package/lib/widget/title.widget.js +35 -0
  52. package/lib/widget/update.modal.widget.d.ts +5 -0
  53. package/lib/widget/update.modal.widget.js +59 -0
  54. package/package.json +30 -0
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = FooterWidget;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactNative = require("react-native");
10
+ var _reactNativeUpdate = require("react-native-update");
11
+ var _updateState = require("../updateState");
12
+ var _reactNativeMarketLinking = require("react-native-market-linking");
13
+ var _updateProvider = require("../updateProvider");
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ /**
17
+ * @description 更新弹窗底部操作按钮组件
18
+ * @returns 更新弹窗底部操作按钮组件
19
+ */
20
+ function FooterWidget() {
21
+ var isAndroid = _reactNative.Platform.OS === 'android';
22
+ var _useUpdate = (0, _reactNativeUpdate.useUpdate)(),
23
+ updateInfo = _useUpdate.updateInfo;
24
+ var _useUpdateState = (0, _updateState.useUpdateState)(),
25
+ hideUpdateModal = _useUpdateState.hideUpdateModal,
26
+ startDownloadFlow = _useUpdateState.startDownloadFlow;
27
+ var config = (0, _react.useContext)(_updateProvider.HotUpdateContext);
28
+ var locale = config.localeText;
29
+ var primaryColor = config.themeColor || 'rgba(52,92,255,1)';
30
+ var isForceUpdate = (0, _react.useMemo)(function () {
31
+ try {
32
+ if (!(updateInfo !== null && updateInfo !== void 0 && updateInfo.metaInfo)) return false;
33
+ var meta = JSON.parse(updateInfo.metaInfo);
34
+ return meta.force === true || meta.forceUpdate === true;
35
+ } catch (_unused) {
36
+ return false;
37
+ }
38
+ }, [updateInfo === null || updateInfo === void 0 ? void 0 : updateInfo.metaInfo]);
39
+ function appStoreUpdate() {
40
+ if (!isForceUpdate) hideUpdateModal();
41
+ if (config.iosAppId) {
42
+ (0, _reactNativeMarketLinking.openAppStore)(config.iosAppId);
43
+ } else {
44
+ _reactNative.Alert.alert('提示', locale.alertMissingAppId);
45
+ }
46
+ }
47
+ function openH5ApkDownloadPage() {
48
+ if (!isForceUpdate) hideUpdateModal();
49
+ if (!(updateInfo !== null && updateInfo !== void 0 && updateInfo.downloadUrl)) {
50
+ _reactNative.Alert.alert('提示', locale.alertMissingDownloadUrl);
51
+ return;
52
+ }
53
+ _reactNative.Linking.canOpenURL(updateInfo === null || updateInfo === void 0 ? void 0 : updateInfo.downloadUrl).then(function (supported) {
54
+ if (supported) return _reactNative.Linking.openURL(updateInfo === null || updateInfo === void 0 ? void 0 : updateInfo.downloadUrl);
55
+ _reactNative.Alert.alert('提示', locale.alertCantOpenDownloadUrl);
56
+ }).catch(function () {
57
+ _reactNative.Alert.alert('提示', locale.alertDownloadUrlFailed);
58
+ });
59
+ }
60
+ var PrimaryBtn = function PrimaryBtn(_ref) {
61
+ var title = _ref.title,
62
+ onPress = _ref.onPress,
63
+ style = _ref.style;
64
+ return /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
65
+ style: [Style.button, {
66
+ backgroundColor: primaryColor
67
+ }, style],
68
+ onPress: onPress
69
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
70
+ style: Style.primaryText
71
+ }, title));
72
+ };
73
+ var GhostBtn = function GhostBtn(_ref2) {
74
+ var title = _ref2.title,
75
+ onPress = _ref2.onPress,
76
+ style = _ref2.style;
77
+ return /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
78
+ style: [Style.button, Style.ghostButton, {
79
+ borderColor: primaryColor
80
+ }, style],
81
+ onPress: onPress
82
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
83
+ style: [Style.ghostText, {
84
+ color: primaryColor
85
+ }]
86
+ }, title));
87
+ };
88
+ function renderActionButton() {
89
+ if (updateInfo !== null && updateInfo !== void 0 && updateInfo.upToDate) return /*#__PURE__*/_react.default.createElement(PrimaryBtn, {
90
+ title: locale.btnGotIt,
91
+ onPress: hideUpdateModal
92
+ });
93
+ if (updateInfo !== null && updateInfo !== void 0 && updateInfo.update) return [!isForceUpdate && /*#__PURE__*/_react.default.createElement(GhostBtn, {
94
+ key: "plus",
95
+ title: locale.btnUpdateLater,
96
+ onPress: hideUpdateModal,
97
+ style: {
98
+ marginRight: 15
99
+ }
100
+ }), /*#__PURE__*/_react.default.createElement(PrimaryBtn, {
101
+ key: "submit",
102
+ title: locale.btnUpdateNow,
103
+ onPress: startDownloadFlow
104
+ })];
105
+ if (updateInfo !== null && updateInfo !== void 0 && updateInfo.expired) return [!isForceUpdate && /*#__PURE__*/_react.default.createElement(GhostBtn, {
106
+ key: "unable",
107
+ title: locale.btnUpdateLater,
108
+ onPress: hideUpdateModal,
109
+ style: {
110
+ marginRight: 10
111
+ }
112
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
113
+ key: "store",
114
+ style: [Style.button, isAndroid ? [Style.ghostButton, {
115
+ borderColor: primaryColor
116
+ }] : {
117
+ backgroundColor: primaryColor
118
+ }],
119
+ onPress: appStoreUpdate
120
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
121
+ style: isAndroid ? [Style.ghostText, {
122
+ color: primaryColor
123
+ }] : Style.primaryText
124
+ }, locale.btnAppStore)), isAndroid && /*#__PURE__*/_react.default.createElement(PrimaryBtn, {
125
+ key: "install",
126
+ title: locale.btnDownload,
127
+ onPress: openH5ApkDownloadPage,
128
+ style: {
129
+ marginLeft: 10
130
+ }
131
+ })];
132
+ }
133
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
134
+ style: Style.container
135
+ }, renderActionButton());
136
+ }
137
+ var Style = _reactNative.StyleSheet.create({
138
+ container: {
139
+ marginHorizontal: 15,
140
+ flexDirection: 'row',
141
+ marginTop: 20
142
+ },
143
+ button: {
144
+ flex: 1,
145
+ height: 40,
146
+ borderRadius: 4,
147
+ justifyContent: 'center',
148
+ alignItems: 'center'
149
+ },
150
+ ghostButton: {
151
+ backgroundColor: 'transparent',
152
+ borderWidth: 1
153
+ },
154
+ primaryText: {
155
+ color: '#fff',
156
+ fontSize: 14
157
+ },
158
+ ghostText: {
159
+ fontSize: 14
160
+ }
161
+ });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @description 更新标题原子组件
3
+ * @returns 标题展示原子组件
4
+ */
5
+ export default function TitleWidget(): any;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = TitleWidget;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactNative = require("react-native");
10
+ var _updateProvider = require("../updateProvider");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ /**
14
+ * @description 更新标题原子组件
15
+ * @returns 标题展示原子组件
16
+ */
17
+ function TitleWidget() {
18
+ var config = (0, _react.useContext)(_updateProvider.HotUpdateContext);
19
+ var locale = config.localeText;
20
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
21
+ style: Style.container
22
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
23
+ style: Style.title
24
+ }, locale.updateTitle));
25
+ }
26
+ var Style = _reactNative.StyleSheet.create({
27
+ container: {
28
+ alignItems: 'center',
29
+ justifyContent: 'center'
30
+ },
31
+ title: {
32
+ fontSize: 18,
33
+ fontWeight: 'bold'
34
+ }
35
+ });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @description 更新弹窗组件
3
+ * @returns 更新弹窗组件
4
+ */
5
+ export default function UpdateModalWidget(): any;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = UpdateModalWidget;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactNative = require("react-native");
10
+ var _reactNativeUpdate = require("react-native-update");
11
+ var _title = _interopRequireDefault(require("./title.widget"));
12
+ var _description = _interopRequireDefault(require("./description.widget"));
13
+ var _content = _interopRequireDefault(require("./content.widget"));
14
+ var _footer = _interopRequireDefault(require("./footer.widget"));
15
+ var _updateProvider = require("../updateProvider");
16
+ var _updateState = require("../updateState");
17
+ var _animated = _interopRequireDefault(require("./animated.overlay"));
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
20
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
+ /**
22
+ * @description 更新弹窗组件
23
+ * @returns 更新弹窗组件
24
+ */
25
+ function UpdateModalWidget() {
26
+ var config = (0, _react.useContext)(_updateProvider.HotUpdateContext);
27
+ var _useUpdate = (0, _reactNativeUpdate.useUpdate)(),
28
+ updateInfo = _useUpdate.updateInfo;
29
+ var _useUpdateState = (0, _updateState.useUpdateState)(),
30
+ isUpdateVisible = _useUpdateState.isUpdateVisible,
31
+ hideUpdateModal = _useUpdateState.hideUpdateModal,
32
+ startDownloadFlow = _useUpdateState.startDownloadFlow;
33
+ var content = null;
34
+ if (config.renderUpdateModal) {
35
+ content = config.renderUpdateModal(updateInfo, {
36
+ hideModal: hideUpdateModal,
37
+ doUpdate: startDownloadFlow
38
+ });
39
+ } else {
40
+ content = /*#__PURE__*/_react.default.createElement(_reactNative.View, {
41
+ style: Style.content
42
+ }, /*#__PURE__*/_react.default.createElement(_title.default, null), /*#__PURE__*/_react.default.createElement(_description.default, null), /*#__PURE__*/_react.default.createElement(_content.default, null), /*#__PURE__*/_react.default.createElement(_footer.default, null));
43
+ }
44
+ return /*#__PURE__*/_react.default.createElement(_animated.default, {
45
+ visible: isUpdateVisible,
46
+ onAnimationComplete: function onAnimationComplete() {}
47
+ }, content);
48
+ }
49
+ var Style = _reactNative.StyleSheet.create({
50
+ content: {
51
+ backgroundColor: 'white',
52
+ marginHorizontal: 20,
53
+ borderRadius: 8,
54
+ paddingVertical: 20,
55
+ flexDirection: 'column',
56
+ width: '90%',
57
+ maxWidth: 400
58
+ }
59
+ });
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@zero-bits/react-native-hot-update",
3
+ "version": "1.0.0",
4
+ "description": "react-native热更新展示组件",
5
+ "main": "lib/index.js",
6
+ "types": "lib/index.d.ts",
7
+ "publishConfig": {
8
+ "access": "public",
9
+ "registry": "https://registry.npmjs.org/"
10
+ },
11
+ "module": "es/index.js",
12
+ "keywords": [
13
+ "react-native",
14
+ "hot-update",
15
+ "pushy",
16
+ "react-native-update"
17
+ ],
18
+ "files": [
19
+ "lib",
20
+ "es"
21
+ ],
22
+ "author": "641261604@qq.com",
23
+ "license": "ISC",
24
+ "peerDependencies": {
25
+ "react": ">=16.13.1",
26
+ "react-native": ">=0.63.4",
27
+ "react-native-market-linking": ">=0.0.8",
28
+ "react-native-update": ">=10.34.0"
29
+ }
30
+ }