<?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: Raathi</title>
    <description>The latest articles on DEV Community by Raathi (@raathigesh).</description>
    <link>https://dev.to/raathigesh</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%2F143588%2F5cca08d8-1afb-4254-84dd-2cf205a3b1c2.jpg</url>
      <title>DEV Community: Raathi</title>
      <link>https://dev.to/raathigesh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raathigesh"/>
    <language>en</language>
    <item>
      <title>A VSCode extension to find things faster in your JavaScript codebase</title>
      <dc:creator>Raathi</dc:creator>
      <pubDate>Tue, 11 Aug 2020 09:07:38 +0000</pubDate>
      <link>https://dev.to/raathigesh/a-vscode-extension-to-find-things-faster-in-your-javascript-codebase-513o</link>
      <guid>https://dev.to/raathigesh/a-vscode-extension-to-find-things-faster-in-your-javascript-codebase-513o</guid>
      <description>&lt;p&gt;We spend a lot of time reading code. And a portion of that time is spent on finding the right code to read.&lt;/p&gt;

&lt;p&gt;I love using VSCode as my editor but I wanted a better way to search my JavaScript code. I wanted a powerful search that will let me search for only functions or classes or typescript interfaces or other types of symbols.&lt;/p&gt;

&lt;p&gt;VSCode has a &lt;a href="https://code.visualstudio.com/docs/editor/editingevolved#_open-symbol-by-name" rel="noopener noreferrer"&gt;built-in symbol search&lt;/a&gt; but I wanted something that I can keep it to the side like a sidebar.&lt;/p&gt;

&lt;p&gt;Also, I wanted a rich bookmarking capability. Instead of bookmarking a line in a file, which could change if you add more lines, I wanted to bookmark a function and still be able to go back to the function even if the function is moved to a different position in the file.&lt;/p&gt;

&lt;p&gt;The thing about VSCode is you could extend it if the built-in functionality is not something you are happy with.&lt;/p&gt;

&lt;p&gt;So I did just that.&lt;/p&gt;

&lt;h3&gt;
  
  
  👋 Say hello to Waypoint
&lt;/h3&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Raathigesh/waypoint" rel="noopener noreferrer"&gt;Waypoint&lt;/a&gt; is a VSCode extension which provides a fast symbol search and bookmarking experience. It works with JavaScript, TypeScript, and Flow codebases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💨 Waypoint indexes your source files so the search is ridiculously fast. &lt;/li&gt;
&lt;li&gt;🎲 You can filter your search results by applying filters such as classes, functions, variables, and types.&lt;/li&gt;
&lt;li&gt;🔖 You can bookmark your symbols for later. This is a lifesaver if you need to refer a symbol over and over again.&lt;/li&gt;
&lt;li&gt;📑 You can copy the import path for a symbol with a click.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚡️ Getting started
&lt;/h3&gt;

&lt;p&gt;If you like what you are seeing, here are a few links to get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Raathigesh/waypoint" rel="noopener noreferrer"&gt;Github Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://waypoint.netlify.app/" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Raathigeshan.waypoint" rel="noopener noreferrer"&gt;Get the extension from VSCode marketplace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🌱 The Future
&lt;/h3&gt;

&lt;p&gt;We are just getting started with Waypoint. There are a lot of things we could do to improve the way we read code. I'm really excited to see what else we could add to Waypoint. If you have ideas, please open an issue in our Github repo.&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>vscode</category>
      <category>extension</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Scripted natural motion with react-beautiful-dnd</title>
      <dc:creator>Raathi</dc:creator>
      <pubDate>Mon, 28 Oct 2019 23:00:46 +0000</pubDate>
      <link>https://dev.to/raathigesh/scripted-natural-motion-with-react-beautiful-dnd-4ifj</link>
      <guid>https://dev.to/raathigesh/scripted-natural-motion-with-react-beautiful-dnd-4ifj</guid>
      <description>&lt;p&gt;React-beautiful-dnd &lt;code&gt;v12&lt;/code&gt; ships with a &lt;a href="https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/sensors/sensor-api.md#sensor-api-" rel="noopener noreferrer"&gt;Sensor API&lt;/a&gt; that allows us to control the drag and drop actions programmatically. This is going to open up a &lt;a href="https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/sensors/sensor-api.md#examples" rel="noopener noreferrer"&gt;wide range of possibilities&lt;/a&gt;. We can programmatically move a draggable using either a &lt;a href="https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/sensors/sensor-api.md#snap-dragging" rel="noopener noreferrer"&gt;&lt;code&gt;snap dragging&lt;/code&gt;&lt;/a&gt; or a &lt;a href="https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/sensors/sensor-api.md#fluid-dragging" rel="noopener noreferrer"&gt;&lt;code&gt;fluid dragging&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This blog post goes into the details of how to perform good looking fluid drags using the new &lt;code&gt;fluidLift&lt;/code&gt; method. &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;fluidLift&lt;/code&gt; method would allow us to create beautiful scripted experiences without user interaction. For example, a trip planner app, as shown below, could provide an interactive onboarding experience using the new &lt;code&gt;fluidLift&lt;/code&gt; method by showing the user how to plan a trip.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fc2haakc513cjqwsg379s.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fc2haakc513cjqwsg379s.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Take full control of draggable using fluid dragging
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;fluidLift&lt;/code&gt; method allows us to freely move a draggable to a new position by providing a coordinate.&lt;/p&gt;

&lt;p&gt;Let's say if we want to move a draggable from it's initial position to a new position with the coordinate 400, 500, we could call the &lt;code&gt;.move()&lt;/code&gt; method with &lt;code&gt;{ x: 400, y: 500 }&lt;/code&gt; as the argument as shown below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useMyCoolSensor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;startDrag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;preDrag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tryGetLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-draggable-item&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;preDrag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;drag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;preDrag&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fluidLift&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
      &lt;span class="nx"&gt;drag&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;move&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;drag&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will make our draggable move to the new position. In the illustration below, you might have noticed that the box jumps from its initial position to its target position.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fzccdyoeurm3fmummpc2q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fzccdyoeurm3fmummpc2q.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the motion natural
&lt;/h2&gt;

&lt;p&gt;In order to achieve a more natural motion, we have to tell react-beautiful-dnd to move the draggable element coordinate by coordinate through time towards the target position.&lt;/p&gt;

&lt;p&gt;So instead of calling the &lt;code&gt;.move()&lt;/code&gt; just once, we are going to call it multiple times with multiple coordinates which lies between the start coordinate and the end coordinate so the drag motion would be more natural.&lt;/p&gt;

&lt;p&gt;To create the coordinates between the start and the end coordinates, we are going to use a helper library called &lt;a href="https://github.com/chenglou/tween-functions" rel="noopener noreferrer"&gt;tween-functions&lt;/a&gt;. The API of the tween-functions library goes as below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;tweenFunction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tweenName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;beginValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;endValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;totalDuration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's go ahead and generate 20 points between the start position and the end position and then call the &lt;code&gt;.move()&lt;/code&gt; method with our new set of coordinates in  &lt;code&gt;requestAnimationFrame&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;tweenFunctions&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tween-functions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useMyCoolSensor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;startDrag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;preDrag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tryGetLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-draggable-item&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;preDrag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;drag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;preDrag&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fluidLift&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;points&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

      &lt;span class="c1"&gt;// we want to generate 20 points between the start and the end&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numberOfPoints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;numberOfPoints&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
          &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tweenFunctions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;easeOutCirc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;numberOfPoints&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tweenFunctions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;easeOutCirc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;numberOfPoints&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nf"&gt;moveStepByStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;drag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;moveStepByStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;drag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newPosition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;drag&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;move&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newPosition&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;moveStepByStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;drag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;drag&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fhr2lqvgadabkz3s3on42.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fhr2lqvgadabkz3s3on42.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That looks much better.&lt;/p&gt;

&lt;p&gt;Here is the full codesandbox example.&lt;br&gt;
&lt;iframe src="https://codesandbox.io/embed/react-beautiful-dnd-fluid-lift-demo-42x7i"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The new Sensor API unlocks a vast amount of possibilities. Experiment with it and go build amazing things.&lt;/p&gt;

</description>
      <category>react</category>
      <category>rbd</category>
    </item>
    <item>
      <title>Introducing Majestic, A Zero Config GUI for Jest</title>
      <dc:creator>Raathi</dc:creator>
      <pubDate>Mon, 25 Mar 2019 11:33:15 +0000</pubDate>
      <link>https://dev.to/raathigesh/introducing-majestic-a-zero-config-gui-for-jest-2l1l</link>
      <guid>https://dev.to/raathigesh/introducing-majestic-a-zero-config-gui-for-jest-2l1l</guid>
      <description>&lt;p&gt;&lt;a href="https://jestjs.io/" rel="noopener noreferrer"&gt;Jest&lt;/a&gt; really made testing painless and, like many tools in the Javascript ecosystem, the default interface to interact with Jest is via the CLI. And it's one of the best CLI out there. But what if Jest comes with a GUI interface as well?&lt;/p&gt;

&lt;h3&gt;
  
  
  🕑 A while ago
&lt;/h3&gt;

&lt;p&gt;A year ago &lt;a href="https://twitter.com/raathigesh/status/948150176622960640" rel="noopener noreferrer"&gt;I released&lt;/a&gt; an open-source side project of called &lt;strong&gt;Majestic&lt;/strong&gt;, A GUI for Jest. It was an electron app which interacted with the Jest CLI on behalf of you. It worked as a proof of concept but it was far away from what a tool like that could be. But I learned a lot about the technical and design decisions made and wanted to star over from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 An all-new Majestic
&lt;/h3&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1110138948259467264-493" src="https://platform.twitter.com/embed/Tweet.html?id=1110138948259467264"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1110138948259467264-493');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1110138948259467264&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Raathigesh/majestic/" rel="noopener noreferrer"&gt;&lt;strong&gt;Today I'm extremely happy to introduce you to the all-new Majestic and it's just a single command, &lt;code&gt;npx majestic&lt;/code&gt;, away.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fcttrho2wrozrg152xqxi.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fcttrho2wrozrg152xqxi.gif" alt="Majestic 1.0"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Majestic is no longer an electron app but a npm module. Go into your project which has Jest configured and run &lt;code&gt;npx majestic&lt;/code&gt; in your terminal and you will see the UI open in your default browser.&lt;/p&gt;

&lt;p&gt;The all-new Majestic would allow you to&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Run all the tests or a single file&lt;/li&gt;
&lt;li&gt;⏱ Toggle watch mode&lt;/li&gt;
&lt;li&gt;📸 Update snapshots&lt;/li&gt;
&lt;li&gt;❌ Examine test failures as they happen&lt;/li&gt;
&lt;li&gt;⏲ Console.log() to the GUI for debugging&lt;/li&gt;
&lt;li&gt;🔍 Search tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All these with almost zero additional configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤝 Help us make it better
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Raathigesh" rel="noopener noreferrer"&gt;
        Raathigesh
      &lt;/a&gt; / &lt;a href="https://github.com/Raathigesh/majestic" rel="noopener noreferrer"&gt;
        majestic
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ⚡ Zero config GUI for Jest
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/Raathigesh/majestic./image.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FRaathigesh%2Fmajestic.%2Fimage.png"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="https://github.com/Raathigesh/majestic/actions" rel="noopener noreferrer"&gt;
  &lt;img src="https://camo.githubusercontent.com/841e99d67386a84d54e9cea239c2a89830fb9de9d26b51e37b185130ed27afa1/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f776f726b666c6f772f7374617475732f526161746869676573682f6d616a65737469632f4e6f646525323043493f7374796c653d666c61742d737175617265"&gt;
&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/7842d34b9353d844234b375288823d414b2a6a57188c62f851f1cc3612ee14d4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f526161746869676573682f6d616a65737469632e7376673f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/7842d34b9353d844234b375288823d414b2a6a57188c62f851f1cc3612ee14d4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f526161746869676573682f6d616a65737469632e7376673f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/6a1b9c4834ac44cafd9531ff17081b479c785a3eff2f4ed48d28a2029ace3750/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f6d616a65737469632e7376673f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/6a1b9c4834ac44cafd9531ff17081b479c785a3eff2f4ed48d28a2029ace3750/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f6d616a65737469632e7376673f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
&lt;a href="https://spectrum.chat/majestic" rel="nofollow noopener noreferrer"&gt;
  &lt;img alt="Join the community on Spectrum" src="https://camo.githubusercontent.com/a75281b75fb7681260f4d4b1102ca5ff9bfc3c369ce4b4f50b81a1582de875f5/68747470733a2f2f77697468737065637472756d2e6769746875622e696f2f62616467652f62616467652e737667"&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;Majestic is a GUI for &lt;a href="https://jestjs.io/" rel="nofollow noopener noreferrer"&gt;Jest&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ Run all the tests or a single file&lt;/li&gt;
&lt;li&gt;⏱ Toggle watch mode&lt;/li&gt;
&lt;li&gt;📸 Update snapshots&lt;/li&gt;
&lt;li&gt;❌ Examine test failures as they happen&lt;/li&gt;
&lt;li&gt;⏲ Console.log() to the UI for debugging&lt;/li&gt;
&lt;li&gt;🚔 Built-in coverage report&lt;/li&gt;
&lt;li&gt;🔍 Search tests&lt;/li&gt;
&lt;li&gt;💎 Works with flow and typescript projects&lt;/li&gt;
&lt;li&gt;📦 Works with Create react app&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Majestic supports Jest 20 and above&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Get started&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Run majestic via &lt;code&gt;npx&lt;/code&gt; in a project directory&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;cd&lt;/span&gt; ./my-jest-project &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; go into a project with Jest&lt;/span&gt;
npx majestic &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; execute majestic&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;or install Majestic globally via Yarn and run majestic&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;yarn global add majestic &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install majestic globally&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; ./my-jest-project &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; go into a project with Jest&lt;/span&gt;
majestic &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; execute majestic&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;or install Majestic globally via Npm and run majestic&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install majestic -g &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install majestic globally&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; ./my-jest-project &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; go into a project with Jest&lt;/span&gt;
majestic &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; execute majestic&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Running as an app&lt;/h3&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Raathigesh/majestic" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;If you are interested in contributing or just wondering what powers Majestic under the hood,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Majestic frontend is written in React JS and Appolo qrahphQL &lt;/li&gt;
&lt;li&gt;The local backend runs a NodeJS qrahphQL server and spins up Jest as a child process and interacts with it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Give it a try. If you have a feature request or ran into an issue, either create an issue in the &lt;a href="https://github.com/Raathigesh/majestic/" rel="noopener noreferrer"&gt;github repository&lt;/a&gt; or drop by our community chat &lt;a href="https://spectrum.chat/majestic" rel="noopener noreferrer"&gt;https://spectrum.chat/majestic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;

</description>
      <category>jest</category>
      <category>tools</category>
      <category>dx</category>
    </item>
  </channel>
</rss>
