SocialShareProvider.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. "use client";
  2. /*
  3. import Script from "next/script";
  4. import {
  5. createContext,
  6. useContext,
  7. useState
  8. } from "react";
  9. type ShareToSocialName = "pinterest" | "facebook" | "teitter" | "X" | "x" | "whatsapp" | "email" | "copy_link";
  10. type SDKLoadState = "none" | "loading" | "error" | "success";
  11. type SDKName = "pinterest";
  12. interface SocialSDKState {
  13. pinterest: SDKLoadState;
  14. }
  15. interface SocialShareContextProps {
  16. loadSDKState: SocialSDKState;
  17. }
  18. const pinterestShareSDKURL = "https://assets.pinterest.com/js/pinit.js";
  19. const SocialShareContext = createContext<SocialShareContextProps|null>(null);
  20. export function SocialShareProvider({
  21. children
  22. }: {
  23. children:React.ReactNode;
  24. }){
  25. const [loadSDKState, setLoadSDKState] = useState<SocialSDKState>({
  26. pinterest: 'none', // none loading error success
  27. });
  28. const onSdkLoad = (m:SDKName) => {
  29. setLoadSDKState((prev) => {
  30. return {
  31. ...prev,
  32. [m]: 'success'
  33. }
  34. });
  35. };
  36. const onSdkError = (m:SDKName) => {
  37. setLoadSDKState((prev) => {
  38. return {
  39. ...prev,
  40. [m]: 'error'
  41. }
  42. });
  43. };
  44. const handlerShare = ({
  45. name,
  46. url,
  47. title,
  48. pic,
  49. }:{
  50. name: ShareToSocialName;
  51. url: string;
  52. title: string;
  53. pic: string;
  54. }) => {
  55. var facebook = 'https://www.facebook.com/sharer/sharer.php?u={url}&t={title}&pic={pic}';
  56. if(name === 'pinterest') {
  57. if(loadSDKState.pinterest === 'success') {
  58. // window.PinUtils.pinOne({
  59. // url: url,
  60. // media: pic,
  61. // description: title,
  62. // });
  63. }
  64. } else if(name === 'facebook') {
  65. // shareModal.simpleShare.facebook();
  66. var facebook = 'https://www.facebook.com/sharer/sharer.php?u={url}&t={title}&pic={pic}';
  67. } else if(name === 'teitter') {
  68. var twitter = 'https://twitter.com/intent/tweet?text={title}&url={url}';
  69. } else if(name === 'whatsapp') {
  70. var waShareUrl = 'https://wa.me/?text=' + window.encodeURIComponent(title + url)
  71. window.open(waShareUrl,'t','toolbar=0,resizable=1,status=0,width=640,height=528,left=500,top=300');
  72. }else if(name === 'email') {
  73. // var aDom = jQuery('<a></a>');
  74. // aDom.attr('href', 'mailto:?subject=' + window.encodeURIComponent('Share Alipearlhair Product') + '&body=' + window.encodeURIComponent(shareModal.shareInfo.url));
  75. // aDom[0].click();
  76. } else if(name === 'copy_link') {
  77. // shareModal.copyText(shareModal.shareInfo.url);
  78. }
  79. };
  80. return (
  81. <SocialShareContext.Provider
  82. value={{
  83. loadSDKState
  84. }}
  85. >
  86. <Script id="pinterest-share-sdk" strategy="lazyOnload"
  87. src={pinterestShareSDKURL}
  88. onLoad={() => onSdkLoad('pinterest')}
  89. onError={() => {
  90. onSdkError('pinterest');
  91. }}
  92. />
  93. {children}
  94. </SocialShareContext.Provider>
  95. )
  96. }
  97. export const useSocialShareContext = () => {
  98. const context = useContext(SocialShareContext);
  99. if (!context) {
  100. throw new Error("useSocialShareContext must be used within a SocialShareProvider");
  101. }
  102. return context;
  103. };
  104. */