@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 +33 -0
- package/cjs/hooks/index.d.ts +1 -0
- package/cjs/hooks/index.js +3 -1
- package/cjs/hooks/index.js.map +1 -1
- package/cjs/hooks/useShare.d.ts +18 -0
- package/cjs/hooks/useShare.js +34 -0
- package/cjs/hooks/useShare.js.map +1 -0
- package/esm/hooks/index.d.ts +1 -0
- package/esm/hooks/index.js +1 -0
- package/esm/hooks/index.js.map +1 -1
- package/esm/hooks/useShare.d.ts +18 -0
- package/esm/hooks/useShare.js +38 -0
- package/esm/hooks/useShare.js.map +1 -0
- package/package.json +2 -2
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.
|
package/cjs/hooks/index.d.ts
CHANGED
package/cjs/hooks/index.js
CHANGED
|
@@ -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
|
package/cjs/hooks/index.js.map
CHANGED
|
@@ -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"}
|
package/esm/hooks/index.d.ts
CHANGED
package/esm/hooks/index.js
CHANGED
|
@@ -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
|
package/esm/hooks/index.js.map
CHANGED
|
@@ -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.
|
|
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": "
|
|
81
|
+
"commit": "48d49bb011054675ca9cca7b5634689d97b18df3"
|
|
82
82
|
}
|