@dcl/hooks 0.0.0-20250211214929.commit-f590aa1 → 0.0.3-20250530143135.commit-48d49bb

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.
package/README.md CHANGED
@@ -19,6 +19,7 @@ npm install @dcl/hooks
19
19
  - `usePatchState`: Partial state updates for complex objects
20
20
  - `useAsyncEffect`: Async version of useEffect
21
21
  - `useAsyncMemo`: Async version of useMemo
22
+ - `useShare`: Hook for sharing content using the Web Share API
22
23
 
23
24
  ## Examples
24
25
 
@@ -66,6 +67,38 @@ function BrowserInfo() {
66
67
  }
67
68
  ```
68
69
 
70
+ ### useShare
71
+
72
+ ```typescript
73
+ import { useShare } from '@dcl/hooks'
74
+
75
+ function ShareButton() {
76
+ const [share, shareState] = useShare()
77
+
78
+ const handleShare = async () => {
79
+ await share({
80
+ title: 'My Decentraland Experience',
81
+ text: 'Check out what I found in Decentraland!',
82
+ url: 'https://play.decentraland.org',
83
+ thumbnail: 'https://example.com/thumbnail.jpg' // optional
84
+ })
85
+ }
86
+
87
+ if (!shareState.isSupported) {
88
+ return <div>Sharing is not supported in this browser</div>
89
+ }
90
+
91
+ return (
92
+ <div>
93
+ <button onClick={handleShare} disabled={shareState.isSharing}>
94
+ {shareState.isSharing ? 'Sharing...' : 'Share'}
95
+ </button>
96
+ {shareState.error && <div>Error: {shareState.error.message}</div>}
97
+ </div>
98
+ )
99
+ }
100
+ ```
101
+
69
102
  ## License
70
103
 
71
104
  This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
@@ -7,3 +7,4 @@ export { useAsyncTasks } from "./useAsyncTasks";
7
7
  export { usePatchState } from "./usePatchState";
8
8
  export { useAsyncEffect } from "./useAsyncEffect";
9
9
  export { useAsyncMemo, createAsyncMemoState } from "./useAsyncMemo";
10
+ export { useShare } from "./useShare";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createAsyncMemoState = exports.useAsyncMemo = exports.useAsyncEffect = exports.usePatchState = exports.useAsyncTasks = exports.useAsyncTask = exports.createAsyncStateState = exports.useAsyncState = exports.useAdvancedUserAgentData = void 0;
3
+ exports.useShare = exports.createAsyncMemoState = exports.useAsyncMemo = exports.useAsyncEffect = exports.usePatchState = exports.useAsyncTasks = exports.useAsyncTask = exports.createAsyncStateState = exports.useAsyncState = exports.useAdvancedUserAgentData = void 0;
4
4
  // Hooks
5
5
  var useAdvancedUserAgentData_1 = require("./useAdvancedUserAgentData");
6
6
  Object.defineProperty(exports, "useAdvancedUserAgentData", { enumerable: true, get: function () { return useAdvancedUserAgentData_1.useAdvancedUserAgentData; } });
@@ -18,4 +18,6 @@ Object.defineProperty(exports, "useAsyncEffect", { enumerable: true, get: functi
18
18
  var useAsyncMemo_1 = require("./useAsyncMemo");
19
19
  Object.defineProperty(exports, "useAsyncMemo", { enumerable: true, get: function () { return useAsyncMemo_1.useAsyncMemo; } });
20
20
  Object.defineProperty(exports, "createAsyncMemoState", { enumerable: true, get: function () { return useAsyncMemo_1.createAsyncMemoState; } });
21
+ var useShare_1 = require("./useShare");
22
+ Object.defineProperty(exports, "useShare", { enumerable: true, get: function () { return useShare_1.useShare; } });
21
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":";;;AAIA,QAAQ;AACR,uEAAqE;AAA5D,oIAAA,wBAAwB,OAAA;AACjC,iDAAsE;AAA7D,8GAAA,aAAa,OAAA;AAAE,sHAAA,qBAAqB,OAAA;AAC7C,+CAA6C;AAApC,4GAAA,YAAY,OAAA;AACrB,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AACtB,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AACtB,mDAAiD;AAAxC,gHAAA,cAAc,OAAA;AACvB,+CAAmE;AAA1D,4GAAA,YAAY,OAAA;AAAE,oHAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":";;;AAIA,QAAQ;AACR,uEAAqE;AAA5D,oIAAA,wBAAwB,OAAA;AACjC,iDAAsE;AAA7D,8GAAA,aAAa,OAAA;AAAE,sHAAA,qBAAqB,OAAA;AAC7C,+CAA6C;AAApC,4GAAA,YAAY,OAAA;AACrB,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AACtB,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AACtB,mDAAiD;AAAxC,gHAAA,cAAc,OAAA;AACvB,+CAAmE;AAA1D,4GAAA,YAAY,OAAA;AAAE,oHAAA,oBAAoB,OAAA;AAC3C,uCAAqC;AAA5B,oGAAA,QAAQ,OAAA"}
@@ -0,0 +1,18 @@
1
+ type DCLShareData = ShareData & {
2
+ thumbnail?: string;
3
+ };
4
+ type ShareState = {
5
+ data: DCLShareData | null;
6
+ isSupported: boolean;
7
+ isSharing: boolean;
8
+ error: Error | null;
9
+ };
10
+ declare const useShare: () => readonly [(shareData: DCLShareData) => Promise<void>, {
11
+ close: () => void;
12
+ data: DCLShareData | null;
13
+ isSupported: boolean;
14
+ isSharing: boolean;
15
+ error: Error | null;
16
+ }];
17
+ export { useShare };
18
+ export type { DCLShareData, ShareState };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useShare = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = require("react");
6
+ const useShare = () => {
7
+ const [state, setState] = (0, react_1.useState)({
8
+ data: null,
9
+ isSupported: typeof navigator !== "undefined" && !!navigator.share,
10
+ isSharing: false,
11
+ error: null,
12
+ });
13
+ const share = (0, react_1.useCallback)((shareData) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
14
+ if (!state.isSupported) {
15
+ setState((prev) => (Object.assign(Object.assign({}, prev), { data: shareData })));
16
+ return;
17
+ }
18
+ try {
19
+ setState((prev) => (Object.assign(Object.assign({}, prev), { isSharing: true, error: null })));
20
+ yield navigator.share(shareData);
21
+ setState((prev) => (Object.assign(Object.assign({}, prev), { isSharing: false, data: null })));
22
+ }
23
+ catch (error) {
24
+ setState((prev) => (Object.assign(Object.assign({}, prev), { isSharing: false, error: error instanceof Error ? error : new Error("Error al compartir"), data: shareData })));
25
+ }
26
+ }), [state.isSupported]);
27
+ const close = (0, react_1.useCallback)(() => {
28
+ setState((prev) => (Object.assign(Object.assign({}, prev), { data: null, error: null })));
29
+ }, []);
30
+ const shareState = (0, react_1.useMemo)(() => (Object.assign(Object.assign({}, state), { close })), [state, close]);
31
+ return [share, shareState];
32
+ };
33
+ exports.useShare = useShare;
34
+ //# sourceMappingURL=useShare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useShare.js","sourceRoot":"","sources":["../../src/hooks/useShare.ts"],"names":[],"mappings":";;;;AAAA,iCAAsD;AAatD,MAAM,QAAQ,GAAG,GAAG,EAAE;IACpB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAa;QAC7C,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK;QAClE,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,IAAA,mBAAW,EACvB,CAAO,SAAuB,EAAE,EAAE;QAChC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACvB,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iCAAM,IAAI,KAAE,IAAI,EAAE,SAAS,IAAG,CAAC,CAAA;YAClD,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iCAAM,IAAI,KAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAG,CAAC,CAAA;YAC/D,MAAM,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAChC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iCAAM,IAAI,KAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAG,CAAC,CAAA;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iCACd,IAAI,KACP,SAAS,EAAE,KAAK,EAChB,KAAK,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,EAClE,IAAI,EAAE,SAAS,IACf,CAAC,CAAA;QACL,CAAC;IACH,CAAC,CAAA,EACD,CAAC,KAAK,CAAC,WAAW,CAAC,CACpB,CAAA;IAED,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC7B,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iCAAM,IAAI,KAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAG,CAAC,CAAA;IAC5D,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,UAAU,GAAG,IAAA,eAAO,EACxB,GAAG,EAAE,CAAC,iCACD,KAAK,KACR,KAAK,IACL,EACF,CAAC,KAAK,EAAE,KAAK,CAAC,CACf,CAAA;IAED,OAAO,CAAC,KAAK,EAAE,UAAU,CAAU,CAAA;AACrC,CAAC,CAAA;AAEQ,4BAAQ"}
@@ -7,3 +7,4 @@ export { useAsyncTasks } from "./useAsyncTasks";
7
7
  export { usePatchState } from "./usePatchState";
8
8
  export { useAsyncEffect } from "./useAsyncEffect";
9
9
  export { useAsyncMemo, createAsyncMemoState } from "./useAsyncMemo";
10
+ export { useShare } from "./useShare";
@@ -6,4 +6,5 @@ export { useAsyncTasks } from "./useAsyncTasks";
6
6
  export { usePatchState } from "./usePatchState";
7
7
  export { useAsyncEffect } from "./useAsyncEffect";
8
8
  export { useAsyncMemo, createAsyncMemoState } from "./useAsyncMemo";
9
+ export { useShare } from "./useShare";
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,QAAQ;AACR,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,QAAQ;AACR,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,18 @@
1
+ type DCLShareData = ShareData & {
2
+ thumbnail?: string;
3
+ };
4
+ type ShareState = {
5
+ data: DCLShareData | null;
6
+ isSupported: boolean;
7
+ isSharing: boolean;
8
+ error: Error | null;
9
+ };
10
+ declare const useShare: () => readonly [(shareData: DCLShareData) => Promise<void>, {
11
+ close: () => void;
12
+ data: DCLShareData | null;
13
+ isSupported: boolean;
14
+ isSharing: boolean;
15
+ error: Error | null;
16
+ }];
17
+ export { useShare };
18
+ export type { DCLShareData, ShareState };
@@ -0,0 +1,38 @@
1
+ import { useCallback, useMemo, useState } from "react";
2
+ const useShare = () => {
3
+ const [state, setState] = useState({
4
+ data: null,
5
+ isSupported: typeof navigator !== "undefined" && !!navigator.share,
6
+ isSharing: false,
7
+ error: null,
8
+ });
9
+ const share = useCallback(async (shareData) => {
10
+ if (!state.isSupported) {
11
+ setState((prev) => ({ ...prev, data: shareData }));
12
+ return;
13
+ }
14
+ try {
15
+ setState((prev) => ({ ...prev, isSharing: true, error: null }));
16
+ await navigator.share(shareData);
17
+ setState((prev) => ({ ...prev, isSharing: false, data: null }));
18
+ }
19
+ catch (error) {
20
+ setState((prev) => ({
21
+ ...prev,
22
+ isSharing: false,
23
+ error: error instanceof Error ? error : new Error("Error al compartir"),
24
+ data: shareData,
25
+ }));
26
+ }
27
+ }, [state.isSupported]);
28
+ const close = useCallback(() => {
29
+ setState((prev) => ({ ...prev, data: null, error: null }));
30
+ }, []);
31
+ const shareState = useMemo(() => ({
32
+ ...state,
33
+ close,
34
+ }), [state, close]);
35
+ return [share, shareState];
36
+ };
37
+ export { useShare };
38
+ //# sourceMappingURL=useShare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useShare.js","sourceRoot":"","sources":["../../src/hooks/useShare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAatD,MAAM,QAAQ,GAAG,GAAG,EAAE;IACpB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAa;QAC7C,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK;QAClE,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,WAAW,CACvB,KAAK,EAAE,SAAuB,EAAE,EAAE;QAChC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACvB,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;YAClD,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YAC/D,MAAM,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAChC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAClB,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK;gBAChB,KAAK,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC;gBAClE,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC,CAAA;QACL,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,WAAW,CAAC,CACpB,CAAA;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5D,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,CAAC;QACL,GAAG,KAAK;QACR,KAAK;KACN,CAAC,EACF,CAAC,KAAK,EAAE,KAAK,CAAC,CACf,CAAA;IAED,OAAO,CAAC,KAAK,EAAE,UAAU,CAAU,CAAA;AACrC,CAAC,CAAA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/hooks",
3
- "version": "0.0.0-20250211214929.commit-f590aa1",
3
+ "version": "0.0.3-20250530143135.commit-48d49bb",
4
4
  "main": "cjs/index.js",
5
5
  "module": "esm/index.js",
6
6
  "exports": {
@@ -78,5 +78,5 @@
78
78
  "^src/(.*)$": "<rootDir>/src/$1"
79
79
  }
80
80
  },
81
- "commit": "f590aa114bfb9fd1c27b7045434c6ea9ef30ca11"
81
+ "commit": "48d49bb011054675ca9cca7b5634689d97b18df3"
82
82
  }