{"id":13678257,"url":"https://github.com/Expensify/react-native-share-menu","last_synced_at":"2025-04-29T12:34:42.253Z","repository":{"id":37706101,"uuid":"53823229","full_name":"Expensify/react-native-share-menu","owner":"Expensify","description":"A module for React Native that adds your app to the share menu of the device","archived":false,"fork":false,"pushed_at":"2024-03-16T21:47:32.000Z","size":9952,"stargazers_count":605,"open_issues_count":171,"forks_count":233,"subscribers_count":62,"default_branch":"master","last_synced_at":"2024-05-13T19:29:15.729Z","etag":null,"topics":["react-native","share-intent"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Expensify.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-03-14T03:12:34.000Z","updated_at":"2024-06-19T00:04:40.508Z","dependencies_parsed_at":"2024-01-13T07:47:47.993Z","dependency_job_id":"94a3e4ba-e694-4d59-9718-00539eeda49c","html_url":"https://github.com/Expensify/react-native-share-menu","commit_stats":null,"previous_names":["expensify/react-native-share-menu","meedan/react-native-share-menu"],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Expensify%2Freact-native-share-menu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Expensify%2Freact-native-share-menu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Expensify%2Freact-native-share-menu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Expensify%2Freact-native-share-menu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Expensify","download_url":"https://codeload.github.com/Expensify/react-native-share-menu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222828133,"owners_count":17043703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["react-native","share-intent"],"created_at":"2024-08-02T13:00:51.618Z","updated_at":"2024-11-11T20:31:16.230Z","avatar_url":"https://github.com/Expensify.png","language":"Swift","funding_links":[],"categories":["Swift"],"sub_categories":[],"readme":"# react-native-share-menu\n\n[![npm version](https://badge.fury.io/js/react-native-share-menu.svg)](https://www.npmjs.com/package/react-native-share-menu)\n\nAdd your app as a target for sharing from other apps and write iOS Share Extensions in React Native.\n\n## Installation\n\n```bash\nnpm i --save react-native-share-menu\n```\n\n### Automatic Linking (React Native 0.60+)\n\nAt the command line, in the ios directory:\n\n```bash\npod install\n```\n\n### Manual Linking (React Native 0.36+)\n\nAt the command line, in the project directory:\n\n```bash\nreact-native link\n```\n\n## [Android Instructions](ANDROID_INSTRUCTIONS.md)\n\n## [iOS Instructions](IOS_INSTRUCTIONS.md)\n\n## [Custom iOS Share View (optional)](SHARE_EXTENSION_VIEW.md)\n\n## [API Docs](API_DOCS.md)\n\n## [Example Project](example/)\n\n### Example Usage\n\n```javascript\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport { AppRegistry, Text, View, Image, Button } from \"react-native\";\nimport ShareMenu, { ShareMenuReactView } from \"react-native-share-menu\";\n\ntype SharedItem = {\n  mimeType: string,\n  data: string,\n  extraData: any,\n};\n\nconst Test = () =\u003e {\n  const [sharedData, setSharedData] = useState(null);\n  const [sharedMimeType, setSharedMimeType] = useState(null);\n\n  const handleShare = useCallback((item: ?SharedItem) =\u003e {\n    if (!item) {\n      return;\n    }\n\n    const { mimeType, data, extraData } = item;\n\n    setSharedData(data);\n    setSharedMimeType(mimeType);\n    // You can receive extra data from your custom Share View\n    console.log(extraData);\n  }, []);\n\n  useEffect(() =\u003e {\n    ShareMenu.getInitialShare(handleShare);\n  }, []);\n\n  useEffect(() =\u003e {\n    const listener = ShareMenu.addNewShareListener(handleShare);\n\n    return () =\u003e {\n      listener.remove();\n    };\n  }, []);\n\n  if (!sharedMimeType \u0026\u0026 !sharedData) {\n    // The user hasn't shared anything yet\n    return null;\n  }\n\n  if (sharedMimeType === \"text/plain\") {\n    // The user shared text\n    return \u003cText\u003eShared text: {sharedData}\u003c/Text\u003e;\n  }\n\n  if (sharedMimeType.startsWith(\"image/\")) {\n    // The user shared an image\n    return (\n      \u003cView\u003e\n        \u003cText\u003eShared image:\u003c/Text\u003e\n        \u003cImage source={{ uri: sharedData }} /\u003e\n      \u003c/View\u003e\n    );\n  }\n\n  // The user shared a file in general\n  return (\n    \u003cView\u003e\n      \u003cText\u003eShared mime type: {sharedMimeType}\u003c/Text\u003e\n      \u003cText\u003eShared file location: {sharedData}\u003c/Text\u003e\n    \u003c/View\u003e\n  );\n};\n\nconst Share = () =\u003e {\n  const [sharedData, setSharedData] = useState(\"\");\n  const [sharedMimeType, setSharedMimeType] = useState(\"\");\n\n  useEffect(() =\u003e {\n    ShareMenuReactView.data().then(({ mimeType, data }) =\u003e {\n      setSharedData(data);\n      setSharedMimeType(mimeType);\n    });\n  }, []);\n\n  return (\n    \u003cView\u003e\n      \u003cButton\n        title=\"Dismiss\"\n        onPress={() =\u003e {\n          ShareMenuReactView.dismissExtension();\n        }}\n      /\u003e\n      \u003cButton\n        title=\"Send\"\n        onPress={() =\u003e {\n          // Share something before dismissing\n          ShareMenuReactView.dismissExtension();\n        }}\n      /\u003e\n      \u003cButton\n        title=\"Dismiss with Error\"\n        onPress={() =\u003e {\n          ShareMenuReactView.dismissExtension(\"Something went wrong!\");\n        }}\n      /\u003e\n      \u003cButton\n        title=\"Continue In App\"\n        onPress={() =\u003e {\n          ShareMenuReactView.continueInApp();\n        }}\n      /\u003e\n      \u003cButton\n        title=\"Continue In App With Extra Data\"\n        onPress={() =\u003e {\n          ShareMenuReactView.continueInApp({ hello: \"from the other side\" });\n        }}\n      /\u003e\n      {sharedMimeType === \"text/plain\" \u0026\u0026 \u003cText\u003e{sharedData}\u003c/Text\u003e}\n      {sharedMimeType.startsWith(\"image/\") \u0026\u0026 (\n        \u003cImage source={{ uri: sharedData }} /\u003e\n      )}\n    \u003c/View\u003e\n  );\n};\n\nAppRegistry.registerComponent(\"Test\", () =\u003e Test);\nAppRegistry.registerComponent(\"ShareMenuModuleComponent\", () =\u003e Share);\n```\n\nOr check the \"example\" directory for an example application.\n\n## How it looks\n\n### Android\n\n\u003cimg src=\"screenshots/android-menu.png\" width=\"47%\"\u003e \u003cimg src=\"screenshots/android-app.png\" width=\"47%\"\u003e\n\n### iOS\n\n\u003cimg src=\"screenshots/ios-share-view.gif\" width=\"47%\"\u003e\n\n## Releasing a new version\n\n`$ npm version \u003cminor|major|patch\u003e \u0026\u0026 npm publish`\n\n## Credits\n\n\u003c!-- Please just append to this section instead of deleting --\u003e\n\n* Between 2016 and 2023, sponsored by [Meedan](https://meedan.com) and created and developed by [Caio Almeida](https://ca.ios.ba)\n* iOS version supported by [Gustavo Parreira](https://github.com/Gustash)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FExpensify%2Freact-native-share-menu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FExpensify%2Freact-native-share-menu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FExpensify%2Freact-native-share-menu/lists"}