<?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: Muhammad Fahad</title>
    <description>The latest articles on DEV Community by Muhammad Fahad (@sheikhfahad67).</description>
    <link>https://dev.to/sheikhfahad67</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F787702%2F22377470-c9e1-463e-85db-d1e50740fbf7.jpeg</url>
      <title>DEV Community: Muhammad Fahad</title>
      <link>https://dev.to/sheikhfahad67</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sheikhfahad67"/>
    <language>en</language>
    <item>
      <title>I Built a Structured Plan Implement Review Workflow for Claude Code</title>
      <dc:creator>Muhammad Fahad</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:41:07 +0000</pubDate>
      <link>https://dev.to/sheikhfahad67/why-i-built-a-structured-workflow-for-claude-code-1ck3</link>
      <guid>https://dev.to/sheikhfahad67/why-i-built-a-structured-workflow-for-claude-code-1ck3</guid>
      <description>&lt;p&gt;I've been using Claude Code for larger development tasks, and while it works really well for individual coding tasks, I started noticing a problem when working on more complex features.&lt;/p&gt;

&lt;p&gt;A larger request usually involves several different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding the existing codebase&lt;/li&gt;
&lt;li&gt;Figuring out the requirements&lt;/li&gt;
&lt;li&gt;Creating an implementation plan&lt;/li&gt;
&lt;li&gt;Breaking the work into smaller tasks&lt;/li&gt;
&lt;li&gt;Writing the code&lt;/li&gt;
&lt;li&gt;Reviewing the implementation&lt;/li&gt;
&lt;li&gt;Fixing issues discovered during review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When all of this happens in a single agent session, it can become difficult to keep the work structured and predictable.&lt;/p&gt;

&lt;p&gt;That led me to experiment with a different approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Workflow I Wanted
&lt;/h2&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request
   ↓
Claude
   ↓
Code
   ↓
Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;I wanted something closer to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request
   ↓
Plan
   ↓
Specs
   ↓
Tasks
   ↓
Implementation
   ↓
Review
   ↓
Fixes
   ↓
Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The idea is simple: separate planning, implementation, and review instead of treating the entire development task as one operation.&lt;/p&gt;
&lt;h2&gt;
  
  
  Introducing Taskify
&lt;/h2&gt;

&lt;p&gt;To experiment with this workflow, I built &lt;strong&gt;Taskify&lt;/strong&gt;, an open-source Claude Code plugin.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sheikhfahad67" rel="noopener noreferrer"&gt;
        sheikhfahad67
      &lt;/a&gt; / &lt;a href="https://github.com/sheikhfahad67/taskify" rel="noopener noreferrer"&gt;
        taskify
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This is claude code plugin helps to cretae the plans and specs
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Taskify&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A Claude Code plugin with two skills that work as a pair:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;taskify&lt;/code&gt;&lt;/strong&gt; turns a piece of work into a &lt;strong&gt;plan&lt;/strong&gt; (what and why) and a set of &lt;strong&gt;executable task
specs&lt;/strong&gt; (do this, prove it). Each spec has preconditions, acceptance criteria with real commands
and a block where the real output gets pasted as evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;taskify-implementer&lt;/code&gt;&lt;/strong&gt; runs those specs, one task at a time. Each task is built by one agent and
reviewed by a different one. Progress is saved after every step, so a stopped or crashed run can
continue where it left off.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;From the &lt;code&gt;fahad-marketplace&lt;/code&gt; marketplace:&lt;/p&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;/plugin marketplace add sheikhfahad67/fahad-marketplace
/plugin install taskify@fahad-marketplace
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Needed for review:&lt;/strong&gt; the reviewer is &lt;code&gt;feature-dev:code-reviewer&lt;/code&gt;, from the &lt;code&gt;feature-dev&lt;/code&gt; plugin.
Install it too:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;/plugin install feature-dev@claude-plugins-official
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1. Write the plan and specs&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;/taskify:taskify add rate limiting to the public API
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Effect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--slug &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Name of the output folder&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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/sheikhfahad67/taskify" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Taskify organizes a larger development request into smaller stages and executable tasks.&lt;/p&gt;

&lt;p&gt;The workflow starts by analyzing the request and creating an implementation plan. That plan is then converted into smaller tasks that can be implemented incrementally.&lt;/p&gt;

&lt;p&gt;After implementation, the changes go through a separate review stage. If issues are found, they can be addressed before moving on.&lt;/p&gt;

&lt;p&gt;It also keeps track of progress so that work can be resumed instead of starting the entire process again.&lt;/p&gt;

&lt;h2&gt;
  
  
  See It in Action
&lt;/h2&gt;

&lt;p&gt;The basic workflow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────┐
│ Request │
└────┬────┘
     ↓
┌─────────┐
│  Plan   │
└────┬────┘
     ↓
┌─────────┐
│  Specs  │
└────┬────┘
     ↓
┌─────────┐
│  Tasks  │
└────┬────┘
     ↓
┌──────────────┐
│ Implementation│
└──────┬───────┘
       ↓
┌─────────┐
│ Review  │
└────┬────┘
     ↓
┌─────────┐
│  Fixes  │
└────┬────┘
     │
     └──────────────→ Review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is that implementation isn't treated as the final step.&lt;/p&gt;

&lt;p&gt;There is an explicit review stage before considering the work complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Separate the Review?
&lt;/h2&gt;

&lt;p&gt;One thing I wanted to experiment with was separating implementation from review.&lt;/p&gt;

&lt;p&gt;An agent that just implemented a feature may have a different perspective when reviewing the result later.&lt;/p&gt;

&lt;p&gt;So instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement → Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the workflow becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement
    ↓
Review
    ↓
Issues?
 ┌──┴──┐
No    Yes
 ↓      ↓
Done   Fix
        ↓
      Review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This doesn't guarantee that the implementation is correct.&lt;/p&gt;

&lt;p&gt;But it gives the development process another explicit checkpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Taskify Currently Does
&lt;/h2&gt;

&lt;p&gt;Taskify currently focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating implementation plans&lt;/li&gt;
&lt;li&gt;Generating specifications&lt;/li&gt;
&lt;li&gt;Breaking work into executable tasks&lt;/li&gt;
&lt;li&gt;Implementing tasks incrementally&lt;/li&gt;
&lt;li&gt;Reviewing completed work&lt;/li&gt;
&lt;li&gt;Fixing issues found during review&lt;/li&gt;
&lt;li&gt;Tracking progress&lt;/li&gt;
&lt;li&gt;Resuming work from where it was left off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't simply to add more AI to the development process.&lt;/p&gt;

&lt;p&gt;The goal is to make the development process around AI coding agents more structured.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Think This Can Help With Larger Tasks
&lt;/h2&gt;

&lt;p&gt;Consider a small request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add a button to this component.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A complete planning and review workflow would probably be unnecessary.&lt;/p&gt;

&lt;p&gt;But consider a larger request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add role-based permissions across the application, update the database schema, modify the APIs, update the frontend, and add tests.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now there are multiple areas of the codebase involved.&lt;/p&gt;

&lt;p&gt;There are dependencies between tasks.&lt;/p&gt;

&lt;p&gt;There are implementation decisions to make.&lt;/p&gt;

&lt;p&gt;And there are more opportunities for something to be missed.&lt;/p&gt;

&lt;p&gt;This is where I think an explicit workflow can become useful:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Large Request
     ↓
Understand the Codebase
     ↓
Create Plan
     ↓
Break Into Tasks
     ↓
Implement Incrementally
     ↓
Review
     ↓
Fix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of trying to solve everything in one large operation, the work becomes a sequence of smaller, trackable steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Trade-Off
&lt;/h2&gt;

&lt;p&gt;I don't think this approach is better for every coding task.&lt;/p&gt;

&lt;p&gt;More structure also means more overhead.&lt;/p&gt;

&lt;p&gt;It can mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More agent calls&lt;/li&gt;
&lt;li&gt;More context&lt;/li&gt;
&lt;li&gt;More processing time&lt;/li&gt;
&lt;li&gt;More steps for simple tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a small change, that overhead may not be worth it.&lt;/p&gt;

&lt;p&gt;So one of the things I'm trying to understand with Taskify is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;At what point does structured agent orchestration become more useful than simply letting Claude Code handle the entire task in one session?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I don't have a definitive answer yet.&lt;/p&gt;

&lt;p&gt;That's part of why I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Still Exploring
&lt;/h2&gt;

&lt;p&gt;Taskify is still an experiment and I'm continuing to improve the workflow.&lt;/p&gt;

&lt;p&gt;Some of the areas I'm interested in exploring further are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better task decomposition&lt;/li&gt;
&lt;li&gt;More reliable implementation planning&lt;/li&gt;
&lt;li&gt;Improving the review process&lt;/li&gt;
&lt;li&gt;Handling larger multi-step changes&lt;/li&gt;
&lt;li&gt;Better progress and resume capabilities&lt;/li&gt;
&lt;li&gt;Reducing unnecessary agent calls&lt;/li&gt;
&lt;li&gt;Finding the right balance between automation and developer control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting part isn't just making an AI agent write code.&lt;/p&gt;

&lt;p&gt;It's figuring out &lt;strong&gt;how developers should work with coding agents when the task becomes large and complex.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Taskify
&lt;/h2&gt;

&lt;p&gt;Taskify is open source and available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/sheikhfahad67/taskify" rel="noopener noreferrer"&gt;https://github.com/sheikhfahad67/taskify&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're using Claude Code for larger projects, I'd love to hear how you currently structure your workflow.&lt;/p&gt;

&lt;p&gt;Do you prefer a single agent session, or do you separate &lt;strong&gt;planning, implementation, and review&lt;/strong&gt; into different stages?&lt;/p&gt;

&lt;p&gt;I'd also be interested in hearing where you think this approach adds value—and where it simply adds unnecessary overhead.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: AI assistance was used to help edit and structure this article. The project, workflow, and technical experience described here are my own.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Stop Wondering Where Your Money Went: Why I Built Penny Tracker</title>
      <dc:creator>Muhammad Fahad</dc:creator>
      <pubDate>Thu, 09 Apr 2026 08:20:05 +0000</pubDate>
      <link>https://dev.to/sheikhfahad67/stop-wondering-where-your-money-went-why-i-built-penny-tracker-520f</link>
      <guid>https://dev.to/sheikhfahad67/stop-wondering-where-your-money-went-why-i-built-penny-tracker-520f</guid>
      <description>&lt;p&gt;Like many people (especially developers 😄), I used to face the same problem every month.&lt;/p&gt;

&lt;p&gt;It’s the 28th. You check your bank account, expecting enough to get through the last few days… and you only have Rs. 3,000 left.&lt;/p&gt;

&lt;p&gt;You think back. You didn’t buy anything expensive. No trips, no big purchases. So where did all your money go?&lt;/p&gt;

&lt;p&gt;The truth is simple: it disappeared in small, everyday spending. Coffee here, groceries there, a bit of online shopping—it all adds up. But because I wasn’t tracking anything, I had no idea where my money was going.&lt;/p&gt;

&lt;p&gt;I had paper receipts everywhere, emails full of invoices, and zero clarity. That confusion led to stress. I couldn’t control my spending because I couldn’t see it. At one point, I was going over my monthly budget by more than 100%.&lt;/p&gt;

&lt;p&gt;So I decided to fix it the only way I know how: I built an app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Penny Tracker
&lt;/h2&gt;

&lt;p&gt;Penny Tracker is a simple and modern expense tracking app designed to make managing money easy—and even a little fun.&lt;/p&gt;

&lt;p&gt;Here’s what it does:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Quick Expense Logging
&lt;/h3&gt;

&lt;p&gt;No more saving receipts.&lt;/p&gt;

&lt;p&gt;You can quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scan a receipt&lt;/li&gt;
&lt;li&gt;Or manually add an expense in seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple: logging an expense should take less time than making it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Simple, Clear Dashboard
&lt;/h3&gt;

&lt;p&gt;No confusing charts or menus.&lt;/p&gt;

&lt;p&gt;You can instantly see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your current balance&lt;/li&gt;
&lt;li&gt;How much of your monthly budget you’ve used&lt;/li&gt;
&lt;li&gt;Your recent expenses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It gives you a clear picture of your money at a glance.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Gamification (Make Saving Fun)
&lt;/h3&gt;

&lt;p&gt;Staying on budget can feel boring—so I added rewards.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Earn badges for tracking consistently&lt;/li&gt;
&lt;li&gt;Unlock achievements like staying under budget&lt;/li&gt;
&lt;li&gt;Build streaks to stay motivated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It turns managing money into something you actually want to keep doing.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Clean and Modern Design
&lt;/h3&gt;

&lt;p&gt;I wanted something I’d enjoy using every day.&lt;/p&gt;

&lt;p&gt;Penny Tracker uses a dark, clean design with calm colors and simple visuals—easy on the eyes and easy to understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;This app isn’t just about tracking expenses.&lt;/p&gt;

&lt;p&gt;It’s about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowing where your money goes&lt;/li&gt;
&lt;li&gt;Making better spending decisions&lt;/li&gt;
&lt;li&gt;Feeling in control instead of stressed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you can clearly see your spending, everything changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;If you’ve ever wondered where your money disappears each month, this app is for you.&lt;/p&gt;

&lt;p&gt;Give Penny Tracker a try and start taking control of your finances.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://play.google.com/store/apps/details?id=com.pennytracker.app" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fplay-lh.googleusercontent.com%2F31ABBpWPWnmy2H0f9_BzS3Com9fgak6poA6bvfalfeV0CjDiibbjrOArTN58bFDkLi8KzGouLvSJ5eIW7Sz5" height="512" class="m-0" width="512"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://play.google.com/store/apps/details?id=com.pennytracker.app" rel="noopener noreferrer" class="c-link"&gt;
            Penny Tracker - Apps on Google Play
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Smart Expense Tracking for Modern Life
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.gstatic.com%2Fandroid%2Fmarket_images%2Fweb%2Ffavicon_v3.ico" width="32" height="32"&gt;
          play.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Penny Tracker – Version 2.0.0&lt;/strong&gt;&lt;br&gt;
A simple, expense tracker built for everyone. Currently, available on Google Playstore.&lt;/p&gt;

</description>
      <category>management</category>
      <category>productivity</category>
      <category>programming</category>
      <category>personalfinance</category>
    </item>
    <item>
      <title>Axios Interceptor Hook Typescript</title>
      <dc:creator>Muhammad Fahad</dc:creator>
      <pubDate>Sat, 19 Mar 2022 07:38:48 +0000</pubDate>
      <link>https://dev.to/sheikhfahad67/axios-interceptor-hook-typescript-4ao5</link>
      <guid>https://dev.to/sheikhfahad67/axios-interceptor-hook-typescript-4ao5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Re-Published&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hi, &lt;br&gt;
Before that I have published my first NPM package which is: &lt;a href="https://dev.to/sheikhfahad67/configure-axios-interceptor-in-few-minutes-2chk"&gt;axios-interceptor-hook&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Problems&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build on JavaScript, difficult for user to know about props because there is no suggestions.&lt;/li&gt;
&lt;li&gt;There is no way to call multipart/form-data content-type.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;What's new&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developed with typescript.&lt;/li&gt;
&lt;li&gt;separate hook for Application/json, and multipart/form-data.&lt;/li&gt;
&lt;li&gt;You can use Types for the configurations. (ApiConfig).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Interceptors&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Axios interceptors are the methods which are used for each call request and response transformation using axios. Interceptors helps to transform your request before calling api request and when it gets response from the api. It's just like working as middleware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You need to install npm package &lt;a href="https://www.npmjs.com/package/axios-hook-typescript" rel="noopener noreferrer"&gt;axios-hook-typescript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github Repo: (&lt;a href="https://github.com/sheikhfahad67/axios-hook-typescript" rel="noopener noreferrer"&gt;https://github.com/sheikhfahad67/axios-hook-typescript&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Run the command on your terminal.&lt;br&gt;
&lt;code&gt;npm install axios react-toastify axios-hook-typescript&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  axios-hook-typescript
&lt;/h1&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%2Fimg.shields.io%2Fbadge%2Faxios%2520interceptor-axios-green" 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%2Fimg.shields.io%2Fbadge%2Faxios%2520interceptor-axios-green" alt="npm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;React hooks for &lt;a href="https://github.com/axios/axios" rel="noopener noreferrer"&gt;axios&lt;/a&gt; with built in react-tostify integration. Simple to use with minimum configuration.&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%2Fraw.githubusercontent.com%2Fsheikhfahad67%2Faxios-interceptor%2Fmaster%2F.github%2Fimages%2Faxios-interceptor-hook.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%2Fraw.githubusercontent.com%2Fsheikhfahad67%2Faxios-interceptor%2Fmaster%2F.github%2Fimages%2Faxios-interceptor-hook.gif" title="axios-interceptor-hook" alt="axios-interceptor-hook"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;All the &lt;a href="https://github.com/axios/axios" rel="noopener noreferrer"&gt;axios&lt;/a&gt; awesomeness you are familiar with&lt;/li&gt;
&lt;li&gt;Zero configuration, but configurable if needed&lt;/li&gt;
&lt;li&gt;Integrated react-toastify for better toast messages&lt;/li&gt;
&lt;li&gt;Minimize file managment&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;npm install axios react-toastify axios-hook-typescript&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;axios&lt;/code&gt; and &lt;code&gt;react-toastify&lt;/code&gt; are peer dependencies and needs to be installed explicitly&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ApiConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;useJsonApiInterceptor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;useMultipartInterceptor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios-hook-typescript&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ToastContainer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-toastify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-toastify/dist/ReactToastify.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;todosObject&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&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;App&lt;/span&gt; &lt;span class="o"&gt;=&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;apiHandler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;jsonApiHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="nf"&gt;useJsonApiInterceptor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;apiHandler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;multipartApiHandler&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useMultipartInterceptor&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;inputRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&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;getTodos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &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="na"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApiConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://jsonplaceholder.typicode.com/todos&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;displayToast&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;successMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fetch all todos&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;colored&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;jsonApiHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&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="nf"&gt;getTodos&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;const&lt;/span&gt; &lt;span class="nx"&gt;handleFileChange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;newFiles&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&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;formData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newFiles&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="na"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApiConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:8000/files&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;displayToast&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;successMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;File uploaded successfully&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;multipartApiHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;config&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ToastContainer&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Axios&lt;/span&gt; &lt;span class="nx"&gt;Interceptor&lt;/span&gt; &lt;span class="nx"&gt;Examples&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;
        &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;file&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;file&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="nx"&gt;multiple&lt;/span&gt;
        &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleFileChange&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;submit-btn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;Upload&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;50px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1px solid green&lt;/span&gt;&lt;span class="dl"&gt;'&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="nx"&gt;jsonData&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
          &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
          &lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="na"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;todosObject&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&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="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;          &lt;span class="p"&gt;))}&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Hooks
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;useJsonApiInterceptor&lt;/code&gt; - for content-type: application/json.&lt;br&gt;
&lt;code&gt;useMultipartInterceptor&lt;/code&gt; - for content-type: multipart/form-data&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Return
&lt;/h3&gt;

&lt;p&gt;It will return following fields:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;data&lt;/td&gt;
&lt;td&gt;Object&lt;/td&gt;
&lt;td&gt;It return the response of api &lt;code&gt;(res.data)&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;isPending&lt;/td&gt;
&lt;td&gt;Bool&lt;/td&gt;
&lt;td&gt;For loading purpose return &lt;code&gt;true&lt;/code&gt; while fetching and return false after completion or failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;apiHandler&lt;/td&gt;
&lt;td&gt;Func&lt;/td&gt;
&lt;td&gt;Function to give you control over calling when you need just by passing &lt;code&gt;config&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  For Bearer Token
&lt;/h3&gt;

&lt;p&gt;Need to save your auth token as, interceptor will automatically get it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;localStorage.setItem('authToken', &lt;code&gt;&amp;lt;YOUR TOKEN&amp;gt;&lt;/code&gt;);&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Environment Variable for Base URL
&lt;/h3&gt;

&lt;p&gt;Please add env variable into your &lt;code&gt;.env&lt;/code&gt; or &lt;code&gt;.env.local&lt;/code&gt; file.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;REACT_APP_BASE_URL="&lt;a href="https://jsonplaceholder.typicode.com" rel="noopener noreferrer"&gt;https://jsonplaceholder.typicode.com&lt;/a&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Config Props
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Types
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;ApiConfig&lt;/code&gt; - for api configurations&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;method&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;'get', 'post', 'put', 'delete', 'patch'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;url&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;it will be your endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;delay&lt;/td&gt;
&lt;td&gt;number&lt;/td&gt;
&lt;td&gt;default 5000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;data&lt;/td&gt;
&lt;td&gt;Object&lt;/td&gt;
&lt;td&gt;required on post, put, patch requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;successMessage&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;'Any Message'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;position&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;'top-right', 'top-left', 'top-center', 'bottom-left', 'bottom-right', 'bottom-center'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hideProgressBar&lt;/td&gt;
&lt;td&gt;Bool&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;theme&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;'light','dark','colored'&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;MIT&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>hook</category>
      <category>react</category>
      <category>axios</category>
    </item>
    <item>
      <title>Configure Axios interceptor in few minutes...</title>
      <dc:creator>Muhammad Fahad</dc:creator>
      <pubDate>Fri, 07 Jan 2022 11:33:25 +0000</pubDate>
      <link>https://dev.to/sheikhfahad67/configure-axios-interceptor-in-few-minutes-2chk</link>
      <guid>https://dev.to/sheikhfahad67/configure-axios-interceptor-in-few-minutes-2chk</guid>
      <description>&lt;p&gt;&lt;strong&gt;Interceptors&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Axios interceptors are the methods which are used for each call request using axios. Interceptors helps to transform your request before calling api request and when it gets response from the api. It's just like working as middleware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You need to install npm package &lt;a href="https://www.npmjs.com/package/axios-interceptor-hook"&gt;axios-interceptor-hook&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github Repo: (&lt;a href="https://github.com/sheikhfahad67/axios-interceptor"&gt;https://github.com/sheikhfahad67/axios-interceptor&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Run the command on your terminal.&lt;br&gt;
&lt;code&gt;npm install axios react-toastify axios-interceptor-hook&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;npm install axios react-toastify axios-interceptor-hook&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;axios&lt;/code&gt; and &lt;code&gt;react-toastify&lt;/code&gt; are peer dependencies and needs to be installed explicitly&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ToastContainer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-toastify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useAxiosInterceptor&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios-interceptor-hook&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-toastify/dist/ReactToastify.css&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="nx"&gt;App&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isPending&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;apiHandler&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useAxiosInterceptor&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;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/todos&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;successMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Todos data retrieve&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;errorMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Todos data fetch error&lt;/span&gt;&lt;span class="dl"&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;const&lt;/span&gt; &lt;span class="nx"&gt;getTodosData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&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="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;apiHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nx"&gt;useEffect&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="nx"&gt;getTodosData&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="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ToastContainer&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isPending&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Loading&lt;/span&gt;&lt;span class="p"&gt;.......&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;}
&lt;/span&gt;      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h6&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;testing&lt;/span&gt;&lt;span class="dl"&gt;'&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="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h6&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;))}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Return
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;data&lt;/td&gt;
&lt;td&gt;Object&lt;/td&gt;
&lt;td&gt;It return the response of api &lt;code&gt;(res.data)&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;isPending&lt;/td&gt;
&lt;td&gt;Bool&lt;/td&gt;
&lt;td&gt;For loading purpose return &lt;code&gt;true&lt;/code&gt; while fetching and return false after completion or failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;apiHandler&lt;/td&gt;
&lt;td&gt;Func&lt;/td&gt;
&lt;td&gt;Function to give yoy control over calling when you need just by passing &lt;code&gt;config&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  For Bearer Token
&lt;/h3&gt;

&lt;p&gt;Need to save your auth token as, interceptor will automatically get it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;localStorage.setItem('authToken', &lt;code&gt;&amp;lt;YOUR TOKEN&amp;gt;&lt;/code&gt;);&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Environment Variable for Base URL
&lt;/h3&gt;

&lt;p&gt;Please add env variable into your &lt;code&gt;.env&lt;/code&gt; or &lt;code&gt;.env.local&lt;/code&gt; file.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;REACT_APP_BASE_URL="&lt;a href="https://jsonplaceholder.typicode.com"&gt;https://jsonplaceholder.typicode.com&lt;/a&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Config Perimeters
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;method&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;'get', 'post', 'put', 'delete', 'patch'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;url&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;it will be your endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;delay&lt;/td&gt;
&lt;td&gt;number&lt;/td&gt;
&lt;td&gt;default 5000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;data&lt;/td&gt;
&lt;td&gt;Object&lt;/td&gt;
&lt;td&gt;required on post, put, patch requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;successMessage&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;'Any Message'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;errorMessage&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;'Any Message'&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>programming</category>
      <category>axios</category>
    </item>
  </channel>
</rss>
