@arcblock/ux 2.7.7 → 2.7.9

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.
@@ -0,0 +1,61 @@
1
+ import PropTypes from 'prop-types';
2
+ import { useMemoizedFn, useAsyncEffect } from 'ahooks';
3
+ import { createContext, useContext, useState } from 'react';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ const BlockletContext = /*#__PURE__*/createContext();
6
+ const {
7
+ Provider,
8
+ Consumer
9
+ } = BlockletContext;
10
+
11
+ /**
12
+ *
13
+ * @param {object} props
14
+ * @param {string} props.baseUrl baseUrl 为 blocklet origin + blocklet prefix
15
+ * @param {any} props.children
16
+ * @returns
17
+ */
18
+ function BlockletProvider({
19
+ children,
20
+ baseUrl
21
+ }) {
22
+ const [blockletData, setBlockletData] = useState(null);
23
+ const getBlockleData = useMemoizedFn(async () => {
24
+ if (!baseUrl || window.location.href.startsWith(baseUrl)) {
25
+ return window.blocklet;
26
+ }
27
+ const url = new URL('__blocklet__.js', baseUrl);
28
+ url.searchParams.set('type', 'json');
29
+ const res = await fetch(url.href);
30
+ const jsonData = await res.json();
31
+ return jsonData;
32
+ });
33
+ useAsyncEffect(async () => {
34
+ try {
35
+ const data = await getBlockleData();
36
+ setBlockletData(data);
37
+ } catch {
38
+ // NOTICE: 如果获取指定 blockletData 失败,则使用 window.blocklet
39
+ setBlockletData(window.blocklet);
40
+ }
41
+ // eslint-disable-next-line react-hooks/exhaustive-deps
42
+ }, [baseUrl]);
43
+ return /*#__PURE__*/_jsx(Provider, {
44
+ value: blockletData,
45
+ children: blockletData ? children : null
46
+ });
47
+ }
48
+ function useBlockletContext() {
49
+ const blocklet = useContext(BlockletContext);
50
+ return {
51
+ blocklet
52
+ };
53
+ }
54
+ BlockletProvider.propTypes = {
55
+ baseUrl: PropTypes.string,
56
+ children: PropTypes.any.isRequired
57
+ };
58
+ BlockletProvider.defaultProps = {
59
+ baseUrl: ''
60
+ };
61
+ export { BlockletContext, BlockletProvider, Consumer as BlockletConsumer, useBlockletContext };
@@ -75,7 +75,7 @@ function LocaleProvider({
75
75
  useEffect(() => {
76
76
  const tmpLocale = locale || getLocale(langs);
77
77
  if (tmpLocale !== currentLocale) {
78
- changeLocale(locale);
78
+ changeLocale(tmpLocale);
79
79
  }
80
80
  // eslint-disable-next-line react-hooks/exhaustive-deps
81
81
  }, [locale]);
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BlockletContext = exports.BlockletConsumer = void 0;
7
+ exports.BlockletProvider = BlockletProvider;
8
+ exports.useBlockletContext = useBlockletContext;
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _ahooks = require("ahooks");
11
+ var _react = require("react");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ const BlockletContext = /*#__PURE__*/(0, _react.createContext)();
15
+ exports.BlockletContext = BlockletContext;
16
+ const {
17
+ Provider,
18
+ Consumer
19
+ } = BlockletContext;
20
+
21
+ /**
22
+ *
23
+ * @param {object} props
24
+ * @param {string} props.baseUrl baseUrl 为 blocklet origin + blocklet prefix
25
+ * @param {any} props.children
26
+ * @returns
27
+ */
28
+ exports.BlockletConsumer = Consumer;
29
+ function BlockletProvider(_ref) {
30
+ let {
31
+ children,
32
+ baseUrl
33
+ } = _ref;
34
+ const [blockletData, setBlockletData] = (0, _react.useState)(null);
35
+ const getBlockleData = (0, _ahooks.useMemoizedFn)(async () => {
36
+ if (!baseUrl || window.location.href.startsWith(baseUrl)) {
37
+ return window.blocklet;
38
+ }
39
+ const url = new URL('__blocklet__.js', baseUrl);
40
+ url.searchParams.set('type', 'json');
41
+ const res = await fetch(url.href);
42
+ const jsonData = await res.json();
43
+ return jsonData;
44
+ });
45
+ (0, _ahooks.useAsyncEffect)(async () => {
46
+ try {
47
+ const data = await getBlockleData();
48
+ setBlockletData(data);
49
+ } catch (_unused) {
50
+ // NOTICE: 如果获取指定 blockletData 失败,则使用 window.blocklet
51
+ setBlockletData(window.blocklet);
52
+ }
53
+ // eslint-disable-next-line react-hooks/exhaustive-deps
54
+ }, [baseUrl]);
55
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Provider, {
56
+ value: blockletData,
57
+ children: blockletData ? children : null
58
+ });
59
+ }
60
+ function useBlockletContext() {
61
+ const blocklet = (0, _react.useContext)(BlockletContext);
62
+ return {
63
+ blocklet
64
+ };
65
+ }
66
+ BlockletProvider.propTypes = {
67
+ baseUrl: _propTypes.default.string,
68
+ children: _propTypes.default.any.isRequired
69
+ };
70
+ BlockletProvider.defaultProps = {
71
+ baseUrl: ''
72
+ };
@@ -102,7 +102,7 @@ function LocaleProvider(_ref) {
102
102
  (0, _react.useEffect)(() => {
103
103
  const tmpLocale = locale || getLocale(langs);
104
104
  if (tmpLocale !== currentLocale) {
105
- changeLocale(locale);
105
+ changeLocale(tmpLocale);
106
106
  }
107
107
  // eslint-disable-next-line react-hooks/exhaustive-deps
108
108
  }, [locale]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ux",
3
- "version": "2.7.7",
3
+ "version": "2.7.9",
4
4
  "description": "Common used react components for arcblock products",
5
5
  "keywords": [
6
6
  "react",
@@ -81,6 +81,10 @@
81
81
  "import": "./es/Blocklet/index.js",
82
82
  "require": "./lib/Blocklet/index.js"
83
83
  },
84
+ "./lib/BlockletContext": {
85
+ "import": "./es/BlockletContext/index.js",
86
+ "require": "./lib/BlockletContext/index.js"
87
+ },
84
88
  "./lib/BlockletNFT": {
85
89
  "import": "./es/BlockletNFT/index.js",
86
90
  "require": "./lib/BlockletNFT/index.js"
@@ -314,11 +318,11 @@
314
318
  "peerDependencies": {
315
319
  "react": ">=18.1.0"
316
320
  },
317
- "gitHead": "d19cd8e69d486c96874c72218037d972322ffacc",
321
+ "gitHead": "169697a7db454ad878d480dc86e90d049f510536",
318
322
  "dependencies": {
319
323
  "@arcblock/did-motif": "^1.1.13",
320
- "@arcblock/icons": "^2.7.7",
321
- "@arcblock/react-hooks": "^2.7.7",
324
+ "@arcblock/icons": "^2.7.9",
325
+ "@arcblock/react-hooks": "^2.7.9",
322
326
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
323
327
  "@emotion/react": "^11.10.4",
324
328
  "@emotion/styled": "^11.10.4",
@@ -0,0 +1,55 @@
1
+ import PropTypes from 'prop-types';
2
+ import { useMemoizedFn, useAsyncEffect } from 'ahooks';
3
+ import { createContext, useContext, useState } from 'react';
4
+
5
+ const BlockletContext = createContext();
6
+
7
+ const { Provider, Consumer } = BlockletContext;
8
+
9
+ /**
10
+ *
11
+ * @param {object} props
12
+ * @param {string} props.baseUrl baseUrl 为 blocklet origin + blocklet prefix
13
+ * @param {any} props.children
14
+ * @returns
15
+ */
16
+ function BlockletProvider({ children, baseUrl }) {
17
+ const [blockletData, setBlockletData] = useState(null);
18
+ const getBlockleData = useMemoizedFn(async () => {
19
+ if (!baseUrl || window.location.href.startsWith(baseUrl)) {
20
+ return window.blocklet;
21
+ }
22
+
23
+ const url = new URL('__blocklet__.js', baseUrl);
24
+ url.searchParams.set('type', 'json');
25
+ const res = await fetch(url.href);
26
+ const jsonData = await res.json();
27
+ return jsonData;
28
+ });
29
+ useAsyncEffect(async () => {
30
+ try {
31
+ const data = await getBlockleData();
32
+ setBlockletData(data);
33
+ } catch {
34
+ // NOTICE: 如果获取指定 blockletData 失败,则使用 window.blocklet
35
+ setBlockletData(window.blocklet);
36
+ }
37
+ // eslint-disable-next-line react-hooks/exhaustive-deps
38
+ }, [baseUrl]);
39
+ return <Provider value={blockletData}>{blockletData ? children : null}</Provider>;
40
+ }
41
+
42
+ function useBlockletContext() {
43
+ const blocklet = useContext(BlockletContext);
44
+ return { blocklet };
45
+ }
46
+
47
+ BlockletProvider.propTypes = {
48
+ baseUrl: PropTypes.string,
49
+ children: PropTypes.any.isRequired,
50
+ };
51
+ BlockletProvider.defaultProps = {
52
+ baseUrl: '',
53
+ };
54
+
55
+ export { BlockletContext, BlockletProvider, Consumer as BlockletConsumer, useBlockletContext };
@@ -73,7 +73,7 @@ function LocaleProvider({ children, locale, fallbackLocale, translations, langua
73
73
  useEffect(() => {
74
74
  const tmpLocale = locale || getLocale(langs);
75
75
  if (tmpLocale !== currentLocale) {
76
- changeLocale(locale);
76
+ changeLocale(tmpLocale);
77
77
  }
78
78
  // eslint-disable-next-line react-hooks/exhaustive-deps
79
79
  }, [locale]);