UNPKG

rn-url-preview

Version:
94 lines (93 loc) 4.28 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = __importStar(require("react")); const react_2 = require("react"); const react_native_1 = require("react-native"); const utils_1 = require("./utils"); var EUrlPreview; (function (EUrlPreview) { EUrlPreview["Title"] = "UrlPreview.Title"; EUrlPreview["Description"] = "UrlPreview.Description"; EUrlPreview["Image"] = "UrlPreview.Image"; })(EUrlPreview || (EUrlPreview = {})); const UrlPreviewComponent = (0, react_1.memo)(({ onPreviewDataFetched, requestTimeout = 15000, url, children, onPress, ...props }) => { const [data, setData] = (0, react_1.useState)(); (0, react_1.useEffect)(() => { let isCancelled = false; const fetchData = async () => { setData(undefined); const newData = await (0, utils_1.getPreviewDataHelper)(url, requestTimeout); // Set data only if component is still mounted /* istanbul ignore next */ if (!isCancelled) { // No need to cover LayoutAnimation /* istanbul ignore next */ setData(newData); onPreviewDataFetched === null || onPreviewDataFetched === void 0 ? void 0 : onPreviewDataFetched(newData); } }; fetchData(); return () => { isCancelled = true; }; }, [onPreviewDataFetched, requestTimeout, url]); const handlePress = (event) => { if (typeof onPress === "function") { onPress(data, event); } else { if (data === null || data === void 0 ? void 0 : data.link) react_native_1.Linking.openURL(data.link).catch(() => console.log("ljafn")); } }; const ContentPreview = (0, react_2.useMemo)(() => (0, utils_1.renderSpecialElementHelper)({ children: typeof children === "function" ? children({ pressed: false }) : children, props: { [EUrlPreview.Title]: { children: (data === null || data === void 0 ? void 0 : data.title) || "" }, [EUrlPreview.Description]: { children: (data === null || data === void 0 ? void 0 : data.description) || "" }, [EUrlPreview.Image]: { source: (data === null || data === void 0 ? void 0 : data.image) ? { uri: data.image } : "", }, }, }), [data, children]); return (<react_native_1.Pressable {...props} onPress={handlePress}> {ContentPreview} </react_native_1.Pressable>); }); const Title = ({ placeholder, children, ...props }) => (<react_native_1.Text children={children || placeholder || ""} {...props}/>); Title.displayName = EUrlPreview.Title; const Description = ({ placeholder, children, ...props }) => (<react_native_1.Text children={children || placeholder || ""} {...props}/>); Description.displayName = EUrlPreview.Description; const Image = ({ source, placeholder, ...props }) => (<react_native_1.Image source={source || placeholder || undefined} {...props}/>); Image.displayName = EUrlPreview.Image; const UrlPreview = Object.assign(UrlPreviewComponent, { Title: Title, Description: Description, Image: Image, }); exports.default = UrlPreview;