UNPKG

react-native-animated-stickers-chz

Version:

Animated stickers for react-native chat app or anything built by CHZAPPS INDIA!

611 lines (430 loc) β€’ 22.1 kB
## CHZ STICKER ANIMATED KEYBOARD FOR REACT NATIVE Animated sticker keyboard for react-native with customizable sticker's <!-- Place this tag where you want the button to render. --> | IMAGE 1 | IMAGE 2 | IMAGE 2 HIGH RES | |---------|---------|------------------| | <img src='https://raw.githubusercontent.com/chzappsinc/react-native-animated-stickers-chz/main/images/type1.gif' height='400' width='200' alt='example1'/>| <img src='https://raw.githubusercontent.com/chzappsinc/react-native-animated-stickers-chz/main/images/typ2.gif' height='400' width='200' alt='example2'/>| <img src='https://github.com/chzappsinc/react-native-animated-stickers-chz/blob/main/images/care.gif' height='400' width='200' alt='example3 high'/>| ###### Image show above may different from current version please refer [#changelog](https://github.com/chzappsinc/react-native-animated-stickers-chz/blob/main/CHANGELOG.md) ## READ UPDATED DOCUMENT [HERE](https://chzappsinc.github.io/react-native-animated-stickers-chz/) πŸ₯‡ **FIRST TIME IN REACT-NATIVE** - [Donate here](#donate-us) - [Change log](https://github.com/chzappsinc/react-native-animated-stickers-chz/blob/main/CHANGELOG.md) |⚠️**WARNING** : Please follow all step's for proper install! | | --- | ## STEP 1 - install these dependencies ``` npm install @react-native-async-storage/async-storage --save npm install lottie-react-native --save npm install lottie-ios --save OR yarn add @react-native-async-storage/async-storage yarn add lottie-react-native yarn add lottie-ios ``` ## πŸ”Š IOS USERS LISTEN HERE -------------------------------- If you are using this library for **IOS** then go to ios folder by running ``` cd ios ``` on terminal of your project then run this command ``` pod install``` ------------------------------------- πŸ’ƒ **Now it's time to download react-native-animated-stickers-chz** ``` yarn add react-native-animated-stickers-chz yarn react-native link react-native-animated-stickers-chz OR npm install react-native-animated-stickers-chz npx react-native link react-native-animated-stickers-chz ``` To work properly please link assets by ```npx react-native link react-native-animated-stickers-chz``` ----------------------------------- | ℹ️ **INFO** : Run your projects to link these dependencies else error with show! | | --- | ----------------------------- # STEP 2 - Initializing on App **Our keyboard want's to know our app name and also if we use external sticker So we need initialize the keyboard in App.js or on your initial screen** ```javascript import AnimatedSticker from 'react-native-animated-stickers-chz'; const StickerInit = { app_name: 'MY SWEET APP', //--> Your app name that can tag on copyright text and many more place.... use_external: true, //--> false if your are not using custom sticker } AnimatedSticker.InitialApp(StickerInit) ``` 😍 **Cool your app has been initialized** -------------------------------------- # Let's animate your chat 🀟 by chz sticker keybaord -------------------------------------- - [Import Dep](#import) - [Sticker Keyboard](#sticker-keyboard) - [onSend sticker send](#onsend-%EF%B8%8F-read-carefully) - [onBackPress keyboard backpress](#onbackpress) - [Sticker View](#sticker-view) - [Sticker View on Chat](#sticker-view-on-chat) - [Check if it is valid sticker](#check-sticker) - [Other functions / Methods ](#other-functions) - [Intialize app](#IntialApp-1) - [is it a stciker method](!#issticker-1) - [get Name of sticker](!#getname-1) - [add your custom catogery πŸ’Œ](#setextracategory-1) - [add your custom Sticker 🌼](#setextraemojis-1) - [Create custom sticker refernce](#anim-ref) ------------------ # Import ```js import AnimatedSticker from 'react-native-animated-stickers-chz'; import AnimatedStickerKeyboard from 'react-native-animated-stickers-chz/AnimatedKeyBoard' import AnimatedStickerView from 'react-native-animated-stickers-chz/AnimatedStickerView'; ``` -------------------------------- ## Sticker Keyboard Sticker Keyboard need proper space to view so place the sticker keyboard on bottom , View chart for refernce ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MAIN VIEW WITH FLEX 1 AND OTHER β”‚ β”‚ STYLES β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ SECOND VIEW WITH FLEX 1 AND β”‚ β”‚ YOUR STYLE INSIDE MAIN β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ KEYBOARD AFTER VIEW 2 BOTTOM β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` **I know that you didn't get anything πŸ˜„ Check the code below for more!!** ```js import React, { useState } from 'react'; import { View, BackHandler, Button } from 'react-native'; import AnimatedStickerKeyboard from 'react-native-animated-sticker-chz/AnimatedKeyBoard' const App = () => { const [vis, setVis] = useState(false) const handleBackButtonClick = async () => { if (vis) { setVis(false) } else { BackHandler.exitApp() //Other think when backPress on invisible keyboard return true } } return( {/* MAIN VIEW */} <View style={{ backgroundColor: 'white', flex: 1, justifyContent: 'center', alignItems: 'center', }}> {/* SECOND VIEW */} <View style={{ justifyContent: 'center', alignItems: 'center', flex: 1 }}> <Button title='GET STICKER' onPress={() => { setVis(!vis) }} /> </View> {/* KEYBOARD AFTER SECOND VIEW BOTTOM */} <AnimatedStickerKeyboard textButtonColor={'#000'} infoText={false} visibility={vis} onSend={(uri) => { console.log(uri) }} keyBoardStyle={{ backgroundColor: '#fff' }} menuButtonStyle={{ backgroundColor: '#00000010' }} onBackPress={() => { handleBackButtonClick() }} textColor={'black'} hideDes={false} hideFooter={true} placeHolderColor={'#00000010'} /> </View > ) } export default App; ``` **Let** me explain the whole code! Here we placed a view with flex 1 on top of keyboard so that View ajust size on keyboard hide/show we use state for visibility of keyboard ### onBackPress So when user press back while keyboard is shown , We want to tell keyboard what to do onBackPress so here keyboard will hide normally , But our state is not updated it means keyboard will popup again 😧 This props ``onBackPress`` will help us Hurr! πŸ‘οΈβ€πŸ—¨οΈ ```js const handleBackButtonClick = async () => { if (vis) { setVis(false) } else { BackHandler.exitApp() //Other think when backPress on invisible keyboard return true } } ``` Here ``if(vis)`` will check if keyboard is visible or not **_function work like if keyboard is visible or keyboard back press then update state to flase else do other think on backPress_** ### onSend ⚠️ read carefully When user click or swipe a stciker it need to updated in your chat or state! so this props ``Γ²nSend`` will help us , this is a callbackFunction [More about callback function](http://url.com/NUj9tF) **Here is an example** ```js <AnimatedStickerKeyboard onSend={(uri) => { sendMessage(uri) }} /> ``` here i will send message to state with arrow function ```js const sendMessage = (message) =>{ setMessageState([...messageState , {id : 100 , message : message}]) } // here we got message from our call back function props onSend <AnimatedStickerKeyboard //Other props onSend={(uri) => { sendMessage(uri) }} /> ``` ### PROPS | PROPS NAME | REQUIRED / USAGE | TYPE | |------------------|---------------------------------------------------|------------------------| | textButtonColor | No / For Category button color | String / color | | infoText | No / show info of Category [Deprecated] | Boolean | | visibility | Yes / show & hide of keyboard | Boolean | | onSend | Yes / get Uri and data of sticker | callback function | | keyBoardStyle | No / set style of keyboard like background color | ViewStyleProp / styles | | menuButtonStyle | No / Category menu button style | ViewStyleProp / styles | | onBackPress | Yes / What to do onBackPress | function | | textColor | No / Text color of description and Category name | string / color | | hideDes | No / Hide keyboard Category description | Boolean | | hideFooter | No / Hide footer of keyboard branding | Boolean | | placeHolderColor | No / Color of before sticker render | String / color | | textFont | No / Replace font | FontFamily | | onDo | Deprecated | Deprecated | ----------------------------------------- ## Sticker View Haha we succefully send sticker and we get uri which looks like `@chzapps/sticker/@render/_emoji_kiss.sticker.no.start.apps/auto/false/size=userPref,{render=true}/@data/ims` Now we need to render sticker based on uri! Sticker View will help us ? sure βœ‹ So we need to pass uri to sticker look the refernce below ```jsx import StickerView from 'react-native-animated-stickers-chz/AnimatedStickerView' <AnimatedStickerView stickerHeight={150} //--> sticker height stickerWidth={150} //--> sticker width source={'@chzapps/sticker/@render/_emoji_kiss.sticker.no.start.apps/auto/false/size=userPref,{render=true}/@data/ims'} //--> uri that we get from keyboard /> ``` ###### check-sticker here source props will convert uri to sticker if sticker uri is valid ... wait ! how can i check if it's valid or not 😰 That's why our hero is here πŸ¦Έβ€β™‚οΈ `AnimatedSticker.isSticker()` will help us! example ```js const p = '@chzapps/sticker/@render/_emoji_kiss.sticker.no.start.apps/auto/false/size=userPref,{render=true}/@data/ims' if (AnimatedSticker.isSticker(p)) { console.log('sticker' + AnimatedSticker.getName(p)) } else { console.log('It\'s not a sticker!!') } ``` you need to **import** AnimatedSticker like : ``import AnimatedSticker from 'react-native-animated-stickers-chz'`` ------------------------------------------------------- ## Sticker View on chat **Now implement sticker view on chet ** |⚠️**WARNING** : Please Read carefully! | | --- | - You need to send message uri without any space and other char - Check if it is a valid sticker ! Here is an simple example I have a flatlist and my renderItem is `` renderItem={data => renderItem(data)}`` so my code will look like ```js const renderItem = (data) => { if (AnimatedSticker.isSticker(data.item.message)) { return (<StickerView source={data.item.message} /> ) } else { return ( <View> <Text>Not a sticker</Text> </View> ) } } ``` This a simple example here if message is a sticker Uri then it will render sticker else your data You can do with another method ```js const renderItem = (data) => { return ( AnimatedSticker.isSticker(data.item.message) ? <StickerView source={data.item.message} /> : <View> <Text>Not a sticker</Text> </View> ) } ``` Here we used ternary operator which act like if else as ? : ### Props for sticker view | PROPS | REQUIRED / USAGE | TYPE | EXAMPLE | |---------------|-----------------------------------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------| | stickerWidth | No / Default is 100 and can set max of your device width | Number | stickerWidth={150} | | stcikerHeight | No / Default is 100 and can set max of your device height | Number | stickerHeight={150} | | source | Yes / Sticker uri | chzapps type URI | source={'@chzapps/sticker/@render/_emoji_kiss.sticker.no.start.apps/auto/false/size=userPref,{render=true}/@data/ims'} | ------------------------------------------------------------------ ## Other functions - #### [InitialApp](#IntialApp-1) - #### [isSticker](#issticker-1) - #### [getName](#getname-1) - #### [setExtraCategory](#setextracategory-1) - #### [setExtraEmojis](#setExtraEmojis-1) ------------------------------------- ## IntialApp 1 Let our keyboard want's to know your app name and also if you use external sticker So you need initialize the keyboard in App.js or on your initial screen ```javascript import AnimatedSticker from 'react-native-animated-stickers-chz'; const StickerInit = { app_name: 'MY SWEET APP', //--> Your app name that can tag on copyright text and many more place.... use_external: true, //--> false if your are not using custom sticker } AnimatedSticker.InitialApp(StickerInit) ``` -------------------------------------- ## isSticker Check if given uri is a valid sticker example ```js const renderItem = (data) => { if (AnimatedSticker.isSticker(data.item.message)) { return (<StickerView source={data.item.message} /> ) } else { return ( <View> <Text>Not a sticker</Text> </View> ) } } ``` This a simple example here if message is a sticker Uri then it will render sticker else your data You can do with another method ```js const renderItem = (data) => { return ( AnimatedSticker.isSticker(data.item.message) ? <StickerView source={data.item.message} /> : <View> <Text>Not a sticker</Text> </View> ) } ``` -------------------------------------------------- ## getName get name of sticker example ```js const p = '@chzapps/sticker/@render/_emoji_kiss.sticker.no.start.apps/auto/false/size=userPref,{render=true}/@data/ims' if (AnimatedSticker.isSticker(p)) { console.log('sticker' + AnimatedSticker.getName(p)) } else { console.log('It\'s not a sticker!!') } ``` ---------------------------------------------- ## setExtraCategory Cool you can create and upload your sticker see refernce for animation size and types [#ref](#anim-ref) example ```js AnimatedSticker.setExtraCategory([ { id: 101, value: 'robot_new_word', url: true, file: 'https://assets10.lottiefiles.com/packages/lf20_y8fx3fts.json', content: 'Stickers are rebuilds by Chzapps india!', username: 'Chzapps Sticker\'s' }, { id: 102, value: 'again_menu', url: true, file: 'https://assets7.lottiefiles.com/animated_stickers/lf_tgs_utvjcw5v.json', content: 'Stickers are rebuilds by Chzapps india!', username: 'Chzapps Sticker\'s' }, ]) ``` | NAME | TYPE | DES | |----------------|--------------------------------------------------|-------------------------------------------------------------------------------| | ***id*** | number must start from 101 | is your unique id and it must start from 101,102..... | | ***value*** | String not space need to use _ instated of space | is your category name | | ***url*** | Boolean always set it to true | set it to url else file will not load 🩹 | | ***file*** | Json file see below for reference | is your json file uri that you will get from [Here](https://lottiefiles.com/) | | ***content*** | String / description | is your category discerption | | ***username*** | String / username - creator name | username of creator most probarly it's you πŸ˜… | see refernce for animation size and types [#ref](#anim-ref) ----------------------------------------------------------------------- ## setExtraEmojis set extra emojis see refernce for animation size and types [#ref](#anim-ref) example : ```js AnimatedSticker.setExtraEmojis([ { id: 3001, name: "tow_lee", cat: "robot_new_word", url: "https://assets2.lottiefiles.com/animated_stickers/lf_tgs_RQdYhC.json", credit: "Sticker by Towelie", profile: 'http://github.com/chzappsinc', social_type: 'github' }, { id: 3002, name: "its_me_bull", cat: "again_menu", url: "https://assets10.lottiefiles.com/private_files/lf30_mdazblit.json", credit: "Sticker by Towelie", profile: 'https://in.linkedin.com/in/muhammed-jasim-t-k-4aaa4916a', social_type: 'linkedin' }, { id: 3003, name: "_my_robo_ohho", dark: true, cat: "again_menu", url: "https://assets10.lottiefiles.com/packages/lf20_y8fx3fts.json", credit: "Sticker by Towelie", profile: 'http://instagram.com/chzappsinc', social_type: 'whatsapp' } ]) ``` | PROPS | TYPE | DES | |-------------------|--------------------------------------------------------------|-------------------------------------------------------------------------------------------------| | ***id*** | number must start from 101 | is your unique id and it must start from 3001,3002,3003,3004..... | | ***name*** | String not space need to use _ instated of space | is your sticker name | | ***url*** | Boolean always set it to true | set it to url else file will not load 🩹 | | ***dark*** | Boolean | Set true if sticker have dark content , it help to make visible dark content in dark backgrounf | | ***cat*** | String / name of category | In which category sticker should show | | ***credit*** | String / username - creator name | username of creator most probarly it's you πŸ˜… | | ***profile*** | Url / String | url of your socail media or website | | ***social_type*** | String / instagram,whatsapp,facebook,github,twitter,linkedin | icon type of follow button | ------------------ # Anim Ref files from [here](https://lottiefiles.com/) ***Dont use space in sticker name or category name use underscore _*** **make sure that file size is not more then 100KB , Resolution: >= 512x512 if its not 512x512 keyboard may crash please always check your sticker** Here take this as refernce : [animation](https://lottiefiles.com/59642-indian-premier-league-ipl) here when you scroll down you can see <img src='https://raw.githubusercontent.com/chzappsinc/react-native-animated-stickers-chz/main/images/getLottieUrl.png' width='400' alt='GET URI'/> In the below marked with red is resulation on animation and it's okay beacuse its 512x512 but yellow marked have good size but have 30 layer's it may take delay to render (may be) <img src='https://raw.githubusercontent.com/chzappsinc/react-native-animated-stickers-chz/main/images/check_resultion.png' width='400' alt='GET RES'/> ---------------------------------------------------------------- # Donate us ## Why to donate Support our developers to make it possible [Donate UPI/GPAY/PHONEPE/ANY PAYMENT INDIA](https://rzp.io/l/chzapps) [Donate Paypal](https://paypal.me/chzapps) <img src='https://raw.githubusercontent.com/chzappsinc/react-native-animated-stickers-chz/main/files/Items/R/trans.png' alt='Total payment'/>