@arcblock/ux 2.7.7 → 2.7.8

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,53 @@
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
+ function BlockletProvider({
11
+ children,
12
+ baseUrl
13
+ }) {
14
+ const [blockletData, setBlockletData] = useState(null);
15
+ const getBlockleData = useMemoizedFn(async () => {
16
+ if (!baseUrl || window.location.href.startsWith(baseUrl)) {
17
+ return window.blocklet;
18
+ }
19
+ const url = new URL('__blocklet__.js', baseUrl);
20
+ url.searchParams.set('type', 'json');
21
+ const res = await fetch(url.href);
22
+ const jsonData = await res.json();
23
+ return jsonData;
24
+ });
25
+ useAsyncEffect(async () => {
26
+ try {
27
+ const data = await getBlockleData();
28
+ setBlockletData(data);
29
+ } catch {
30
+ // NOTICE: 如果获取指定 blockletData 失败,则使用 window.blocklet
31
+ setBlockletData(window.blocklet);
32
+ }
33
+ // eslint-disable-next-line react-hooks/exhaustive-deps
34
+ }, [baseUrl]);
35
+ return /*#__PURE__*/_jsx(Provider, {
36
+ value: blockletData,
37
+ children: blockletData ? children : null
38
+ });
39
+ }
40
+ function useBlockletContext() {
41
+ const blocklet = useContext(BlockletContext);
42
+ return {
43
+ blocklet
44
+ };
45
+ }
46
+ BlockletProvider.propTypes = {
47
+ baseUrl: PropTypes.string,
48
+ children: PropTypes.any.isRequired
49
+ };
50
+ BlockletProvider.defaultProps = {
51
+ baseUrl: ''
52
+ };
53
+ 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,64 @@
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
+ exports.BlockletConsumer = Consumer;
21
+ function BlockletProvider(_ref) {
22
+ let {
23
+ children,
24
+ baseUrl
25
+ } = _ref;
26
+ const [blockletData, setBlockletData] = (0, _react.useState)(null);
27
+ const getBlockleData = (0, _ahooks.useMemoizedFn)(async () => {
28
+ if (!baseUrl || window.location.href.startsWith(baseUrl)) {
29
+ return window.blocklet;
30
+ }
31
+ const url = new URL('__blocklet__.js', baseUrl);
32
+ url.searchParams.set('type', 'json');
33
+ const res = await fetch(url.href);
34
+ const jsonData = await res.json();
35
+ return jsonData;
36
+ });
37
+ (0, _ahooks.useAsyncEffect)(async () => {
38
+ try {
39
+ const data = await getBlockleData();
40
+ setBlockletData(data);
41
+ } catch (_unused) {
42
+ // NOTICE: 如果获取指定 blockletData 失败,则使用 window.blocklet
43
+ setBlockletData(window.blocklet);
44
+ }
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, [baseUrl]);
47
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Provider, {
48
+ value: blockletData,
49
+ children: blockletData ? children : null
50
+ });
51
+ }
52
+ function useBlockletContext() {
53
+ const blocklet = (0, _react.useContext)(BlockletContext);
54
+ return {
55
+ blocklet
56
+ };
57
+ }
58
+ BlockletProvider.propTypes = {
59
+ baseUrl: _propTypes.default.string,
60
+ children: _propTypes.default.any.isRequired
61
+ };
62
+ BlockletProvider.defaultProps = {
63
+ baseUrl: ''
64
+ };
@@ -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.8",
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": "3519d637481ef3ad3b90c7fccfbaa4e8f83576bc",
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.8",
325
+ "@arcblock/react-hooks": "^2.7.8",
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,48 @@
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
+ function BlockletProvider({ children, baseUrl }) {
10
+ const [blockletData, setBlockletData] = useState(null);
11
+ const getBlockleData = useMemoizedFn(async () => {
12
+ if (!baseUrl || window.location.href.startsWith(baseUrl)) {
13
+ return window.blocklet;
14
+ }
15
+
16
+ const url = new URL('__blocklet__.js', baseUrl);
17
+ url.searchParams.set('type', 'json');
18
+ const res = await fetch(url.href);
19
+ const jsonData = await res.json();
20
+ return jsonData;
21
+ });
22
+ useAsyncEffect(async () => {
23
+ try {
24
+ const data = await getBlockleData();
25
+ setBlockletData(data);
26
+ } catch {
27
+ // NOTICE: 如果获取指定 blockletData 失败,则使用 window.blocklet
28
+ setBlockletData(window.blocklet);
29
+ }
30
+ // eslint-disable-next-line react-hooks/exhaustive-deps
31
+ }, [baseUrl]);
32
+ return <Provider value={blockletData}>{blockletData ? children : null}</Provider>;
33
+ }
34
+
35
+ function useBlockletContext() {
36
+ const blocklet = useContext(BlockletContext);
37
+ return { blocklet };
38
+ }
39
+
40
+ BlockletProvider.propTypes = {
41
+ baseUrl: PropTypes.string,
42
+ children: PropTypes.any.isRequired,
43
+ };
44
+ BlockletProvider.defaultProps = {
45
+ baseUrl: '',
46
+ };
47
+
48
+ 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]);