<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Manoj Kumar Mishra</title>
    <description>The latest articles on DEV Community by Manoj Kumar Mishra (@manojkmishra).</description>
    <link>https://dev.to/manojkmishra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F378934%2Fd4f79a63-51b3-4691-b570-224140a84123.png</url>
      <title>DEV Community: Manoj Kumar Mishra</title>
      <link>https://dev.to/manojkmishra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manojkmishra"/>
    <language>en</language>
    <item>
      <title>Oracle ERP cloud GUI in VueJS</title>
      <dc:creator>Manoj Kumar Mishra</dc:creator>
      <pubDate>Tue, 02 Aug 2022 07:37:00 +0000</pubDate>
      <link>https://dev.to/manojkmishra/access-oracle-erp-cloud-rest-apis-to-create-dashboard-in-laravelvuejs-3hgo</link>
      <guid>https://dev.to/manojkmishra/access-oracle-erp-cloud-rest-apis-to-create-dashboard-in-laravelvuejs-3hgo</guid>
      <description>&lt;p&gt;Few months back Oracle ERP cloud was introduced in my work place for handling internal processes. I tried to find ways to connect JavaScript front-end frameworks like React/Vue to access oracle cloud erp data but could not find much on internet. In this post we will try to explore a way of accessing Oracle Fusion Cloud REST APIs using Vuejs/Laravel for creating a Dashboard. We will be using Veutify css framework to show the data in tables and use pagination and search features. &lt;a href="https://github.com/manojkmishra/dowell-erp-api-front" rel="noopener noreferrer"&gt;Link to github repo&lt;/a&gt; and &lt;a href="https://github.com/manojkmishra/dowell-erp-api-front/blob/main/src/components/Orders/JobList.vue" rel="noopener noreferrer"&gt;specific code&lt;/a&gt; for and an example api -  &lt;a href="https://docs.oracle.com/en/cloud/saas/supply-chain-management/21d/fasrp/op-fscmrestapi-resources-11.13.18.05-salesordersfororderhub-get.html" rel="noopener noreferrer"&gt;salesOrdersForOrderHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Oracle ERP provides a GUI like below for users, but in case we want to use ERP data for another web application we need to use REST APIs provided by Oracle cloud. Oracle REST APIs allow all the options of REST APIs like CRUD depending on the API type. We can read more about oracle REST APIs &lt;a href="https://docs.oracle.com/en/cloud/saas/supply-chain-management/21d/fasrp/op-fscmrestapi-resources-11.13.18.05-salesordersfororderhub-get.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkm8da0tnpybax4ftdsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkm8da0tnpybax4ftdsl.png" alt="APIs" width="378" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To trigger the APIs via JavaScript in browser eg Vuejs, we need to allow CORS from Oracle Erp end. If we run JavaScript from CLI eg nodeJS/expressJS, we do not need to allow CORS and it will work. As per Oracle Docs, CORS can be allowed for any origin[from browser], but depending on your organization policy, this might or might not be possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tdl9plhxjlwgqd0xkel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tdl9plhxjlwgqd0xkel.png" alt="Cors settings" width="637" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my organization this was not possible so to trigger the APIs towards Oracle ERP we are using a backend, it can be in any language like Python, NodeJS/express, PHP etc. We are using Laravel and workflow is given in below image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox4mrckn0voo6ptj25m4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox4mrckn0voo6ptj25m4.png" alt="Workflow" width="553" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example we will be using oracle erp api - &lt;a href="https://docs.oracle.com/en/cloud/saas/supply-chain-management/21d/fasrp/op-fscmrestapi-resources-11.13.18.05-salesordersfororderhub-get.html" rel="noopener noreferrer"&gt;salesOrdersForOrderHub &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff235091f2p07tlnm1h46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff235091f2p07tlnm1h46.png" alt="Sales order" width="441" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This api can be accessed on any of the rest api testing application like Postman or Insomnia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1tg3j790f20koe7uq3ig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1tg3j790f20koe7uq3ig.png" alt="Sales Order api" width="705" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Laravel code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    public function getjobs(Request $request)
        {
        if($request-&amp;gt;search)
        {
                $res=Http::withBasicAuth('USER', 'PASSWORD')
            -&amp;gt;asForm()-&amp;gt;get("$this-&amp;gt;SERVER/fscmRestApi/resources/11.13.18.05/salesOrdersForOrderHub"
                , ['limit' =&amp;gt; 25,'orderBy'=&amp;gt;'LastUpdateDate:desc','totalResults'=&amp;gt;'true','finder'=&amp;gt;"findByOrderNumber;OrderNumber=$request-&amp;gt;search" ]);
            return $res;
        }
        else{
            $offset= $request-&amp;gt;offset;
            $res=Http::withBasicAuth('USER', 'PASSWORD')
            -&amp;gt;asForm()-&amp;gt;get("$this-&amp;gt;SERVER/fscmRestApi/resources/11.13.18.05/salesOrdersForOrderHub"
                , ['limit' =&amp;gt; 25,'orderBy'=&amp;gt;'LastUpdateDate:desc','totalResults'=&amp;gt;'true','offset'=&amp;gt;$offset ]);
            return $res;
        }
   }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are using vueJs to trigger this api &lt;a href="https://github.com/manojkmishra/dowell-erp-api-front/blob/main/src/components/Orders/JobList.vue" rel="noopener noreferrer"&gt;code on this link&lt;/a&gt;. Vuetify data table with pagination is used here to show the output on screen. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ct7u7fb1m9cirf4qfht.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ct7u7fb1m9cirf4qfht.PNG" alt="Console Log" width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftj8h8chz6ibiyklzxwcs.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftj8h8chz6ibiyklzxwcs.PNG" alt=" " width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Showing JSON output for one order and editing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To output one record we are using vue-json-tree-view library as below. We can also edit parameters as per Oracle erp rules and save the output using these api's. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6afjktsqu2kycrfe6dga.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6afjktsqu2kycrfe6dga.PNG" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like this we can access any of the allowed APIs of Oracle ERP cloud. Many of them are available in the above mentioned github repo. Suggestions and feedback will be greatly appreciated.&lt;/p&gt;

&lt;p&gt;Thank you.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>vue</category>
      <category>oracleerp</category>
      <category>api</category>
    </item>
    <item>
      <title>VueJs Component interaction: props and events</title>
      <dc:creator>Manoj Kumar Mishra</dc:creator>
      <pubDate>Fri, 29 Jul 2022 02:24:17 +0000</pubDate>
      <link>https://dev.to/manojkmishra/vuejs-component-interaction-props-and-events-5pb</link>
      <guid>https://dev.to/manojkmishra/vuejs-component-interaction-props-and-events-5pb</guid>
      <description>&lt;p&gt;In this post we are going to see how to pass data from parent to child component and vice versa in VueJS. We will be using a small web app for showing the working of both these methods. &lt;a href="https://m-vue-leaflet.netlify.app/" rel="noopener noreferrer"&gt;working demo&lt;/a&gt; , &lt;a href="https://github.com/manojkmishra/vue-leaflet-mapping" rel="noopener noreferrer"&gt;github link&lt;/a&gt;, &lt;a href="https://stackoverflow.com/questions/61998500/call-parent-methods-from-child-components-vue-js/62035245#62035245" rel="noopener noreferrer"&gt;stack-overflow link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Best way for passing data in front-ends like vuejs is to use state management like vuex or pinia which I will cover in my other posts, but sometimes we do not need them in small applications. In such cases we need to use props and events. Props for passing data from Parent to Child and Events for passing data from child to parent component.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fny909cver7l6ksyyqciq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fny909cver7l6ksyyqciq.PNG" alt=" " width="636" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Files and Components&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We have 3 vue components here &lt;br&gt;
Brew.vue - parent component, accesses breweries apis and passes to childs via props.&lt;br&gt;
BrewList.vue - child component, shows list of breweries on left side&lt;br&gt;
BrewMap.vue- child component, shows the breweries on map on right side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ecnuo1ozwswpxd80jgo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ecnuo1ozwswpxd80jgo.PNG" alt=" " width="800" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overall data flow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fie5xq7esxnwvbzlyq0q0.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fie5xq7esxnwvbzlyq0q0.PNG" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Props: Parent to child&lt;/strong&gt;&lt;br&gt;
We are accessing brewery list via an api parent component Brew.vue and passing it to child component BrewList.vue and BrewMap.vue . Brew.vue parent component is sending brew prop to BrewList.vue child. While passing the brewery list prop, we also added a parameter iconsize which will be used in BrewMap to show the icon on map.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0k62m50o9j71rms45jyb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0k62m50o9j71rms45jyb.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are accessing the props sent by parent component in child BrewList.vue and listing them in a table as below. we can also watch prop in child components using watcher and check the values.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna14dwsqia6le2aq55eb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna14dwsqia6le2aq55eb.PNG" alt=" " width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Events: Parent to Child&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now comes the events part where are going to pass mouse over and mouse leave event information from BrewList.vue child to parent Brew.vue . So whenever we are entering mouse on BrewList.vue breweries names, it triggers these events and passes to Brew.vue parent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgb3r4es8vhwp7x38zhoh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgb3r4es8vhwp7x38zhoh.png" alt=" " width="697" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Parent Brew.vue is accessing these events and attaching them to methods for changing the iconsize to large or normal which is visible on BrewMap.vue leaflet map.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl4ufht4pqe65x0oilj4p.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl4ufht4pqe65x0oilj4p.PNG" alt=" " width="800" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>props</category>
      <category>events</category>
      <category>leaflet</category>
    </item>
    <item>
      <title>Various ways of finding user location and showing on Leaflet maps : ReactJS</title>
      <dc:creator>Manoj Kumar Mishra</dc:creator>
      <pubDate>Fri, 15 Jul 2022 22:54:59 +0000</pubDate>
      <link>https://dev.to/manojkmishra/logic-behind-finding-user-location-via-web-apps-reactjs-57no</link>
      <guid>https://dev.to/manojkmishra/logic-behind-finding-user-location-via-web-apps-reactjs-57no</guid>
      <description>&lt;p&gt;In this post we are going to see an example of finding user location and showing it on &lt;a href="https://leafletjs.com/" rel="noopener noreferrer"&gt;leaflet&lt;/a&gt; interactive map using javascript/ReactJS. It will ask for browser permission to access user location(coordinates) and use google geocode api to find the location. If browser location permission is denied, it will find the location of your device public ip address.   &lt;/p&gt;

&lt;p&gt;Demo of this example can be seen &lt;a href="https://m-react-location.netlify.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt;, github &lt;a href="https://github.com/manojkmishra/react-mapchat-front" rel="noopener noreferrer"&gt;code&lt;/a&gt;. I have been using the same logic and javascript code for my company &lt;a href="https://www.dowell.com.au/" rel="noopener noreferrer"&gt;website &lt;/a&gt;to find the user location and show the content based on different states in Australia.    &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Folder structure:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is very simple web application, below is the folder structure of this web app. All the JavaScript code is included in App.js . We are using google geocoding api to find the location address. Its key needs to be saved in env file.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93qjvn18vmd13vxra8u3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93qjvn18vmd13vxra8u3.png" alt="Folder Structure" width="144" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding user coordinates:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To show any location on map, we need to have the coordinates of that location ie latitude and  longitude. Once we have lat, long, we can use them to find the location address using various APIs.&lt;br&gt;
The W3C &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API" rel="noopener noreferrer"&gt;Geolocation API&lt;/a&gt; is a standard way to retrieve the geographical location information for a client-side device. It allows the user to provide their location to web applications if they so desire. For privacy reasons, the user is asked for permission to report location information.&lt;br&gt;
Browsers &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Navigator" rel="noopener noreferrer"&gt;Navigator&lt;/a&gt; object has methods and properties about the application running the script. The Geolocation API is accessed via a call to &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Navigator/geolocation" rel="noopener noreferrer"&gt;navigator.geolocation&lt;/a&gt;; this will cause the user's browser to ask them for permission to access their location data. So either user will allow the location access or block it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8df08w9vuqa8rdkxryg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8df08w9vuqa8rdkxryg.jpg" alt="Navigator object code" width="556" height="71"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fade6yt72gw39ps4gwgae.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fade6yt72gw39ps4gwgae.jpg" alt="Geo location access popup " width="245" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hp4o3cnzsrctkl4qvbr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hp4o3cnzsrctkl4qvbr.jpg" alt="Geo location result" width="449" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Case 1: Location access allowed via browser&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this case when user allows location access, this web app uses &lt;a href="https://developers.google.com/maps/documentation/geocoding/start" rel="noopener noreferrer"&gt;google geocoding api&lt;/a&gt; to find the location address using user coordinates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1w95ag0h446ob0ve2r25.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1w95ag0h446ob0ve2r25.jpg" alt=" " width="667" height="247"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpeuhwchwunioot0vnpyf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpeuhwchwunioot0vnpyf.jpg" alt=" " width="563" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can also use other apis like &lt;a href="http://www.geonames.org/export/web-services.html" rel="noopener noreferrer"&gt;geonames api&lt;/a&gt; for this. For geonames api we do not need any secret key (we do require key for google geocode api above)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmn8bzf0ld05tt7jfkbau.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmn8bzf0ld05tt7jfkbau.jpg" alt=" " width="532" height="272"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwsmb1auqzsezcsadbrm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwsmb1auqzsezcsadbrm.jpg" alt=" " width="747" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Case 2: Location access blocked via browser&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When user access access is not provided, it will use ipapi.co API to find the device public ip address.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofp4s19wup2xx5geoni8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofp4s19wup2xx5geoni8.jpg" alt=" " width="552" height="262"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68s2ov7fya0uer24lrql.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68s2ov7fya0uer24lrql.jpg" alt=" " width="659" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are many other APIs we can use for finding the public ip  location, some of them are as below, information about them can be found &lt;a href="https://hackernoon.com/11-best-ip-geolocation-apis-for-cybersecurity-professionals-vp27t3ylp" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;1: geoipify.whoisxmlapi.com&lt;br&gt;
2: geo.ipify.org&lt;br&gt;
3: IPInfo.io&lt;br&gt;
4: DB-IP.com&lt;br&gt;
5: IP2Location.com&lt;br&gt;
6: IPData.co&lt;br&gt;
7: IPGeolocation.io&lt;br&gt;
8: IPStack.com&lt;br&gt;
9: ClearIP.io&lt;br&gt;
10: IPWhois.io&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Showing location coordinates on map:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We are using &lt;a href="https://leafletjs.com/" rel="noopener noreferrer"&gt;Leaflet JavaScript library&lt;/a&gt; for interactive maps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fccxsgxcpuoz0m0pq7zx8.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fccxsgxcpuoz0m0pq7zx8.JPG" alt=" " width="582" height="207"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7iyusgs4boxfmqjxy2t.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7iyusgs4boxfmqjxy2t.JPG" alt=" " width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqq1owcus8f5t792i1gnq.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqq1owcus8f5t792i1gnq.JPG" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>geolocation</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Using youtube v3 APIs to list and search channel videos and use vue-infinite-loading</title>
      <dc:creator>Manoj Kumar Mishra</dc:creator>
      <pubDate>Tue, 12 Jul 2022 22:35:03 +0000</pubDate>
      <link>https://dev.to/manojkmishra/using-youtube-v3-apis-to-list-and-search-channel-videos-and-use-vue-infinite-loading-3907</link>
      <guid>https://dev.to/manojkmishra/using-youtube-v3-apis-to-list-and-search-channel-videos-and-use-vue-infinite-loading-3907</guid>
      <description>&lt;p&gt;In this post we are going to see an example of using  PeachScript/vue-infinite-loading and youtube v3 APIs  to infinitely load and search youtube videos of a channel.&lt;/p&gt;

&lt;p&gt;Demo of this example can be seen &lt;a href="https://youtubev3example.netlify.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt;  , and code can be found on &lt;a href="https://github.com/manojkmishra/youtubev3api-eg" rel="noopener noreferrer"&gt;github link here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Folder Structure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;src folder structure is as below.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74g1gxgt0ost1xn9nmm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74g1gxgt0ost1xn9nmm1.png" alt="src folder structure" width="138" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a single page application(SPA) having two main components/pages - Home page, About page(for search).&lt;br&gt;
External dependencies used in this app are- axios ( for accessing youtube apis), moment ( formatting date/time) and vue-infinite-loading (for infinite scroll feature).&lt;/p&gt;

&lt;p&gt;Home.vue- main file which loads when this SPA is opened on browser&lt;br&gt;&lt;br&gt;
VideoGridItem.vue- component used to show single video grid on home/search page &lt;br&gt;
About.vue- Component used for searching videos&lt;br&gt;&lt;br&gt;
SearchResults.vue- Component where Home/About pages forward all the video results. It loops through them to show each of them on VideoGridItem.vue.&lt;br&gt;
SearchForm.vue- search bar&lt;br&gt;&lt;br&gt;
Header.vue- top bar &lt;br&gt;
api.config.js- points to youtube api key saved in .env file &lt;br&gt;
env file- has VUE_APP_YOUTUBE_API_KEY=yourkey&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find channelId of a youtube channel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To get the videos of a channel first we need to find the channelId using youtube channel name(Here we are using TraversyMedia channel).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffx432n6jgfvwxaok3gax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffx432n6jgfvwxaok3gax.png" alt="Find_channelId" width="800" height="99"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foydb4y3hp9d45lbk7njg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foydb4y3hp9d45lbk7njg.png" alt="Find_channelId_result" width="761" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find playlistId using channelId&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now to get playlistId, please replace C with U in channelId (UCxxxxxxxx =&amp;gt; UUxxxxxxxx), and use it in below api to get the channel videos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ld7slsl6ikeaj95tzqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ld7slsl6ikeaj95tzqb.png" alt="get_channel_videos" width="800" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbv0rcq3qx03ulr2qs5is.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbv0rcq3qx03ulr2qs5is.png" alt="get_channel_videos_result" width="800" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search videos of this channel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All above snippets are from Home.vue. For searching videos of this channel we are using About.vue. Youtube has different API for searching the videos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5coijq18flnjp2eepco.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5coijq18flnjp2eepco.JPG" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3giwu2kb80z4y2y7a2bv.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3giwu2kb80z4y2y7a2bv.JPG" alt=" " width="792" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find view count of a video&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We need to use below API to find the view count of a video. We are using videoId from the output of above APIs inside this API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9p2o12p5485orw9eo9k.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9p2o12p5485orw9eo9k.JPG" alt=" " width="800" height="217"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fff00s1zlx54j4gfolf0j.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fff00s1zlx54j4gfolf0j.JPG" alt=" " width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;vue-infinity-loading&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To implement the infinity scroll feature, we need to use nextPageToken field we got in the response of above apis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgb5mntjshudtcxps8x6e.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgb5mntjshudtcxps8x6e.JPG" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsjxqpmrqbckh068t94t.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsjxqpmrqbckh068t94t.JPG" alt=" " width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you&lt;/p&gt;

</description>
      <category>vue</category>
      <category>youtube</category>
      <category>webdev</category>
      <category>vueinfiniteloading</category>
    </item>
  </channel>
</rss>
