<?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: shivangT</title>
    <description>The latest articles on DEV Community by shivangT (@shivangt).</description>
    <link>https://dev.to/shivangt</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%2F858122%2F67e9ad7b-e3cd-4a2f-85ac-4bdb96fe2b06.jpeg</url>
      <title>DEV Community: shivangT</title>
      <link>https://dev.to/shivangt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shivangt"/>
    <language>en</language>
    <item>
      <title>Build Customer Relationship Management (CRM)- Using Airtable and ToolJet</title>
      <dc:creator>shivangT</dc:creator>
      <pubDate>Tue, 07 Jun 2022 10:17:26 +0000</pubDate>
      <link>https://dev.to/tooljet/build-customer-relationship-management-app-using-airtable-and-tooljet-1nke</link>
      <guid>https://dev.to/tooljet/build-customer-relationship-management-app-using-airtable-and-tooljet-1nke</guid>
      <description>&lt;p&gt;This article is a complete guide to build a a &lt;strong&gt;customer relationship management&lt;/strong&gt; app. Users can list, delete, update &amp;amp; create record on Airtable. We'll have a detailed insight around a customer's &lt;strong&gt;order detail&lt;/strong&gt;. To access the app visit this &lt;a href="https://app.tooljet.com/applications/4f7b3fa7-9a41-43e9-b6d5-29cf971c580e" rel="noopener noreferrer"&gt;link&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;We are going to build this app with three simple steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Building the UI&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrating data sources &amp;amp; creating queries&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connecting event handlers&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can choose to build your &lt;strong&gt;custom&lt;/strong&gt; UI. We'll have the following features in this app.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create&lt;/strong&gt; new lead &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update&lt;/strong&gt; existing lead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delete&lt;/strong&gt; existing lead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;List&lt;/strong&gt; the records&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ToolJet&lt;/strong&gt; (&lt;a href="https://github.com/ToolJet/ToolJet):" rel="noopener noreferrer"&gt;https://github.com/ToolJet/ToolJet):&lt;/a&gt; A free and open-source low-code platform that allows you to quickly build applications. Sign up &lt;a href="https://www.tooljet.com/signup" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Airtable&lt;/strong&gt;: A replacements to traditional google-sheet, &lt;a href="https://airtable.com/" rel="noopener noreferrer"&gt;Airtable&lt;/a&gt; is a database to read &amp;amp; write data.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This tutorial will help you build the complete app in minutes, it'll allow you to understand various steps with a full description. It would be a best practice if you go through the above links before we start building our app. &lt;/p&gt;

&lt;h2&gt;
  
  
  Building the UI
&lt;/h2&gt;

&lt;p&gt;CRM app we're going to build will look like this, you're free to choose your custom UI. Let's buckle up for a fun developing experience 🤩&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%2Fcl4yw9kohcffm82bvptu.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%2Fcl4yw9kohcffm82bvptu.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, let's start with building the UI for our app. Open ToolJet Cloud on a new tab &amp;amp; click on “&lt;strong&gt;Create New Application&lt;/strong&gt;”. We'll require the following widgets to make our entire app.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Container&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Various input fields&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Button&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Table&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SVG-Image&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modal&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Divider&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Start with following the &lt;strong&gt;steps&lt;/strong&gt; one by one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Divide your canvas into 2 containers. The first container will have &lt;strong&gt;table&lt;/strong&gt; widget &amp;amp; the other one will display &lt;strong&gt;customer&lt;/strong&gt; details with &lt;strong&gt;delete&lt;/strong&gt; &amp;amp; &lt;strong&gt;edit&lt;/strong&gt; operations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You need to configure your table widget with the following input values.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Ffzclq0wqkktqtu7ojph2.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%2Ffzclq0wqkktqtu7ojph2.png" alt=" " width="165" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now, on the second container drag-drop widgets same as the UI below. You have to use the following widgets:&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Text&lt;/strong&gt;:  To display all the texts in the present in the UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Divider&lt;/strong&gt;: To provide a separation b/w column names &amp;amp; values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Button&lt;/strong&gt;: For edit and delete operation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SvgImage&lt;/strong&gt;: For logo and icons &lt;/li&gt;
&lt;/ol&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%2Flhtq5xp7svjn7y4hui9d.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%2Flhtq5xp7svjn7y4hui9d.png" alt=" " width="340" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll be able to collect the following data around a customer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name&lt;/li&gt;
&lt;li&gt;Contact&lt;/li&gt;
&lt;li&gt;Email &lt;/li&gt;
&lt;li&gt;Address&lt;/li&gt;
&lt;li&gt;Delivery date&lt;/li&gt;
&lt;li&gt;Member assigned&lt;/li&gt;
&lt;li&gt;Cost price&lt;/li&gt;
&lt;li&gt;Selling price&lt;/li&gt;
&lt;li&gt;Quantity&lt;/li&gt;
&lt;li&gt;Special request&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Items  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next, create your modals for &lt;strong&gt;edit&lt;/strong&gt; &amp;amp; &lt;strong&gt;create&lt;/strong&gt; operations. Replicate the following UI for both the modals.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&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%2F3ubraogn4ixf9anqvb9b.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%2F3ubraogn4ixf9anqvb9b.png" alt=" " width="700" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bind your modal input fields to connect it with the data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1) &lt;strong&gt;Create modal&lt;/strong&gt; : Inspect the widgets in the UI and add  placeholder texts as per your choice.&lt;/p&gt;

&lt;p&gt;2) &lt;strong&gt;Update modal&lt;/strong&gt; : Inspect the widgets in the UI and add  &lt;strong&gt;default values&lt;/strong&gt; as shown below. You must sync it with your widget names.&lt;/p&gt;

&lt;p&gt;a) Name: &lt;code&gt;{{components.table1.selectedRow.name ?? ''}}&lt;/code&gt;&lt;br&gt;
b) Email: &lt;code&gt;{{components.table1.selectedRow.email ?? ''}}&lt;/code&gt; &lt;br&gt;
c) Contact: &lt;code&gt;{{components.table1.selectedRow.contact ?? ''}}&lt;/code&gt; &lt;br&gt;
d) Address: &lt;code&gt;{{components.table1.selectedRow.address ?? ''}}&lt;/code&gt; &lt;br&gt;
e) Priority: &lt;code&gt;{{components.table1.selectedRow.priority ?? ''}}&lt;/code&gt; &lt;br&gt;
f) Status: &lt;code&gt;{{components.table1.selectedRow.status ?? ''}}&lt;/code&gt; &lt;br&gt;
g) Items: &lt;code&gt;{{components.table1.selectedRow.items ?? ''}}&lt;/code&gt; &lt;br&gt;
h) Member: &lt;code&gt;{{components.table1.selectedRow.member_assigned ?? ''}}&lt;/code&gt; &lt;br&gt;
i) Cost Price: &lt;code&gt;{{components.table1.selectedRow.cost_price ?? ''}}&lt;/code&gt; &lt;br&gt;
j) Quantity: &lt;code&gt;{{components.table1.selectedRow.quantity ?? ''}}&lt;/code&gt;&lt;br&gt;
k) Special Request: &lt;code&gt;{{components.table1.selectedRow.special_request ?? ''}}&lt;/code&gt;&lt;br&gt;
l) Selling Price: &lt;code&gt;{{components.table1.selectedRow.selling_price ?? ''}}&lt;/code&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now trigger both your modals on respective button clicks,
On the &lt;strong&gt;Navbar&lt;/strong&gt; we've our &lt;strong&gt;create new lead&lt;/strong&gt; button. Inspect and add an event handler. Select &lt;strong&gt;Show modal&lt;/strong&gt; under action and the name of your Create new lead modal under modal name. Do the required for your edit modal as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Congratulations 👏&lt;br&gt;
You have successfully completed the first step, Next, let's move to the most important step.&lt;/p&gt;
&lt;h2&gt;
  
  
  Integrating data sources and creating queries
&lt;/h2&gt;

&lt;p&gt;We'll use Airtable to implement the backend for our app. You can visit this &lt;a href="https://www.google.com/search?q=airtable+signup&amp;amp;rlz=1C5CHFA_enIN999IN999&amp;amp;oq=airtable+signup&amp;amp;aqs=chrome.0.69i59j0i10i512j0i512j0i390l4j69i60.62332j0j7&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8" rel="noopener noreferrer"&gt;link&lt;/a&gt; to setup your account if you haven't already done it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: On ToolJet, go to "&lt;strong&gt;sources&lt;/strong&gt;" tab &amp;amp; add a &lt;strong&gt;new&lt;/strong&gt; source. Search &amp;amp; select &lt;strong&gt;Airtable&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%2Faomobskpnmydzu21k3fv.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%2Faomobskpnmydzu21k3fv.png" alt=" " width="464" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the next step you need to fill the credentials for API key which you can access from this &lt;a href="https://airtable.com/account" rel="noopener noreferrer"&gt;link&lt;/a&gt; once you create your account.&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%2Fws9frncb1sgte5fsfja2.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%2Fws9frncb1sgte5fsfja2.png" alt=" " width="560" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Once the data source is successfully saved, let's set up &lt;strong&gt;Airtable&lt;/strong&gt; data sheet.&lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;Name&lt;/strong&gt; your sheet as per usecase, I've named it &lt;br&gt;
     as &lt;code&gt;user_list&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;b) Add the following &lt;strong&gt;column&lt;/strong&gt; names &amp;amp; specify their data &lt;br&gt;
     types as the following. You should name them in &lt;strong&gt;small- &lt;br&gt;
     cases&lt;/strong&gt;, its a good practice. These are the inputs we'll&lt;br&gt;
     use to manage our customers.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; `
 **name**: String
 **contact**: number
 **email**: String 
 **address**: Long text
 **deliver_date**: Date
 **member_assigned**: Single select
 **cost_price**: number
 **selling_price**: number
 **quantity**: number
 **special_reuqest**: Long text
 **items**: Single select
 **priority**: Single select
 **status**: Single select
`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You should set your custom options for the &lt;strong&gt;next&lt;/strong&gt; step, else copy the details below.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;member_assigned&lt;/strong&gt;, type Single select, enter &amp;amp; save the following options.&lt;/li&gt;
&lt;/ul&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%2Fyzkgb94cejbhhlzp08au.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%2Fyzkgb94cejbhhlzp08au.png" alt=" " width="205" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;items&lt;/strong&gt;,type Single select, enter the options below.&lt;/li&gt;
&lt;/ul&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%2Fvs8lqvmemfitzsue3ket.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%2Fvs8lqvmemfitzsue3ket.png" alt=" " width="213" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;status&lt;/strong&gt;, type Single select, enter the options below.&lt;/li&gt;
&lt;/ul&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%2Fzn4vet2rqgzsmppun5di.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%2Fzn4vet2rqgzsmppun5di.png" alt=" " width="220" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;priority&lt;/strong&gt; , type Single select, enter the following options.&lt;/li&gt;
&lt;/ul&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%2F07xw9vsh7s9tpjallfd4.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%2F07xw9vsh7s9tpjallfd4.png" alt=" " width="241" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our table setup is completed now, let's continue with the next step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Once the data source is &lt;strong&gt;successfully&lt;/strong&gt; added, we'll configure &lt;strong&gt;four&lt;/strong&gt; operations so we have to create queries respectively.&lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;First Operation- ListRecord&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It'll be used to &lt;strong&gt;access&lt;/strong&gt; all the records from our Airtable &lt;strong&gt;sheet&lt;/strong&gt;. We'll use it to populate data in the table widget. You can also refer this &lt;a href="https://docs.tooljet.com/docs/data-sources/airtable/" rel="noopener noreferrer"&gt;link&lt;/a&gt; to read the &lt;strong&gt;documentation&lt;/strong&gt; for Airtable integration.&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%2Fhfitj6drx76cuggz2ygj.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%2Fhfitj6drx76cuggz2ygj.png" alt=" " width="700" height="385"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Expand the &lt;strong&gt;query&lt;/strong&gt; panel at the &lt;strong&gt;bottom&lt;/strong&gt; &amp;amp; click on &lt;strong&gt;create query&lt;/strong&gt; button &amp;amp; select &lt;strong&gt;Airtable&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now, under &lt;strong&gt;Operations&lt;/strong&gt;, select &lt;code&gt;List records&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;strong&gt;Base ID&lt;/strong&gt;, go to your Airtable data sheet &amp;amp; on the top right corner click on &lt;strong&gt;Help&lt;/strong&gt; button. A side drawer will appear, at the bottom click on "API Documentation". You will be redirected to a new page where you can find the Base ID. It'll look something like this &lt;code&gt;apptJ2LJtQqSt0CYh&lt;/code&gt;. &lt;strong&gt;Note:&lt;/strong&gt; use your unique Base ID &amp;amp; don't copy this.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Forsnl2uplitvr760w4sn.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%2Forsnl2uplitvr760w4sn.png" alt=" " width="700" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Table name&lt;/strong&gt;, enter the name of your table. I've entered it as &lt;code&gt;lead_list&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We'll avoid enter values for &lt;strong&gt;Page size&lt;/strong&gt; &amp;amp; &lt;strong&gt;Offset&lt;/strong&gt;. You can use these values if it fulfils your app requirement. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-Now, toggle on "Transformations" to &lt;strong&gt;modify&lt;/strong&gt; your data source. We're creating an array of objects using this function with the required data we want for our app.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;return data.records.map(row =&amp;gt; {&lt;br&gt;
  let obj = {}&lt;br&gt;
  obj.fields = row.fields&lt;br&gt;
  obj.fields.id = row.id&lt;br&gt;
  return obj.fields&lt;br&gt;
});&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can &lt;strong&gt;preview&lt;/strong&gt; the output of this code below the code editor. Once all the values are entered, click on &lt;strong&gt;create&lt;/strong&gt; &amp;amp; then &lt;strong&gt;save&lt;/strong&gt; query.&lt;/p&gt;

&lt;p&gt;b) &lt;strong&gt;Second Operation- CreateRecord&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This query is used to &lt;strong&gt;Create&lt;/strong&gt; a new &lt;strong&gt;row&lt;/strong&gt; in our Airtable spread-sheet. Start with selecting the &lt;strong&gt;Operation&lt;/strong&gt; as &lt;code&gt;Create record&lt;/code&gt;. For the &lt;strong&gt;Base ID&lt;/strong&gt; &amp;amp; &lt;strong&gt;Table name&lt;/strong&gt; enter the values from the &lt;strong&gt;previous&lt;/strong&gt; step.&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%2F0swdnksap2lqna0mzobt.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%2F0swdnksap2lqna0mzobt.png" alt=" " width="700" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under &lt;strong&gt;Records&lt;/strong&gt;, here we'll enter the row value that we want to enter in our spreadsheet in the following format, also keep in mind to &lt;strong&gt;sync&lt;/strong&gt; the correct &lt;strong&gt;widget names&lt;/strong&gt; as per your &lt;strong&gt;modal&lt;/strong&gt; UI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[{"fields":{
 "name":"{{components.textinput2.value}}",
 "email":"{{components.textinput1.value}}",
 "address":"{{components.textarea2.value}}",
 "priority":"{{components.dropdown4.value}}",
 "delivery_date":"{{components.datepicker1.value}}",
 "member_assigned":"{{components.dropdown3.value}}",
 "contact":{{parseInt(components.numberinput7.value)}},
 "cost_price":{{parseInt(components.numberinput1.value)}},
 "selling_price":{{parseInt(components.numberinput2.value)}},
 "quantity":{{parseInt(components.numberinput3.value)}},
 "items":"{{components.dropdown2.value}}",
 "special_request":"{{components.textarea1.value}}",
 "status":"{{components.dropdown1.value}}"}}]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You have to parseInt the number inputs i.e &lt;strong&gt;contact&lt;/strong&gt;, &lt;strong&gt;selling&lt;/strong&gt; price, &lt;strong&gt;cost&lt;/strong&gt; price &amp;amp; &lt;strong&gt;quantity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Once you enter all the values, you can trigger &lt;strong&gt;Create modal&lt;/strong&gt; which we built in the &lt;strong&gt;first&lt;/strong&gt; step. You can fill input fields with values in the modal and, &lt;strong&gt;preview&lt;/strong&gt; the data at the bottom of the query panel. This is an ideal way to test &amp;amp; understand the flow of the data in a query.&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%2Fwb7ssb8kwodq3niltmao.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%2Fwb7ssb8kwodq3niltmao.png" alt=" " width="700" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;c) &lt;strong&gt;Third Operation- UpdateRecord&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This query is used to &lt;strong&gt;Update&lt;/strong&gt; an existing &lt;strong&gt;row&lt;/strong&gt; in our Airtable spread-sheet. Start with selecting the &lt;strong&gt;Operation&lt;/strong&gt; as &lt;code&gt;Update record&lt;/code&gt;. For the &lt;strong&gt;Base ID&lt;/strong&gt; &amp;amp; &lt;strong&gt;Table name&lt;/strong&gt; enter the &lt;strong&gt;previous&lt;/strong&gt; 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%2Frcf5vn04dxt2fv8li73j.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%2Frcf5vn04dxt2fv8li73j.png" alt=" " width="700" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the &lt;strong&gt;Record ID&lt;/strong&gt;, we've can access it from our data source we transformed. Enter the following value.&lt;br&gt;
&lt;code&gt;{{components.table1.data.selectedRow.data.id}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Under &lt;strong&gt;Record ID&lt;/strong&gt;, we'll input the row value that we want to update in our spreadsheet in the following format, also keep in mind to &lt;strong&gt;sync&lt;/strong&gt; the correct &lt;strong&gt;widget names&lt;/strong&gt; as per your edit modal UI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
 "name":"{{components.textinput5.value}}",
 "email":"{{components.textinput4.value}}",
 "address":"{{components.textarea4.value}}",
 "priority":"{{components.dropdown5.value}}",
 "delivery_date":"{{components.datepicker2.value}}",
 "member_assigned":"{{components.dropdown6.value}}",
 "contact":{{parseInt(components.numberinput8.value)}},
 "cost_price":{{parseInt(components.numberinput5.value)}},
 "selling_price":{{parseInt(components.numberinput6.value)}},
 "quantity":{{parseInt(components.numberinput4.value)}},
 "items":"{{components.dropdown8.value}}",
 "special_request":"{{components.textarea3.value}}",
 "status":"{{components.dropdown7.value}}"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you enter all the values, you can trigger &lt;strong&gt;Edit modal&lt;/strong&gt; from the &lt;strong&gt;first&lt;/strong&gt; step. You can fill input fields with values in the modal and, &lt;strong&gt;preview&lt;/strong&gt; the data at the bottom of the query panel to understand the flow of the data.&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%2Fwb7ssb8kwodq3niltmao.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%2Fwb7ssb8kwodq3niltmao.png" alt=" " width="700" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;d) &lt;strong&gt;Fourth query- DeleteRecord&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This query is used to &lt;strong&gt;delete&lt;/strong&gt; an existing record in our Airtable spreadsheet. Follow the steps to quickly set up this query.&lt;/p&gt;

&lt;p&gt;1) Start with selecting the &lt;strong&gt;Operation&lt;/strong&gt; as &lt;code&gt;Delete record&lt;/code&gt;. For the &lt;strong&gt;Base ID&lt;/strong&gt; &amp;amp; &lt;strong&gt;Table name&lt;/strong&gt; enter the &lt;strong&gt;previous&lt;/strong&gt; values.&lt;/p&gt;

&lt;p&gt;2) In the record ID enter the the following value&lt;br&gt;
   &lt;code&gt;{{components.table1.selectedRow.id}}&lt;/code&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%2F1iquoqyec4k1mgypnysl.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%2F1iquoqyec4k1mgypnysl.png" alt=" " width="700" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazing!! 🤩 We have successfully implemented our queries. Now let's start creating and connecting our event handlers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting event handlers
&lt;/h2&gt;

&lt;p&gt;Now that we have built the user interface &amp;amp; created all the queries, all we need to do is connect the UI with queries. Let's get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trigger the &lt;strong&gt;Create_Lead&lt;/strong&gt; modal, inspect the "Create" button in it &amp;amp; add the following four-event handlers in the same sequence:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;a) &lt;strong&gt;CreateRecord&lt;/strong&gt;: Under action, enter &lt;strong&gt;Run Query&lt;/strong&gt; and select your &lt;strong&gt;Create&lt;/strong&gt; Record query name as Query.&lt;/p&gt;

&lt;p&gt;b) &lt;strong&gt;ListRecord&lt;/strong&gt;: Under action, enter &lt;strong&gt;Run Query&lt;/strong&gt; and select your &lt;strong&gt;List&lt;/strong&gt; Record query name as Query.&lt;/p&gt;

&lt;p&gt;c) &lt;strong&gt;CloseModal&lt;/strong&gt;: Under action, enter &lt;strong&gt;Close Modal&lt;/strong&gt; and select create new record Modal name as &lt;strong&gt;Modal&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;d) &lt;strong&gt;ShowAlert&lt;/strong&gt;: Under action, enter &lt;strong&gt;Show Alert&lt;/strong&gt;. Add the &lt;strong&gt;message&lt;/strong&gt; and &lt;strong&gt;Type&lt;/strong&gt; to alert the user on success of this query. I've enter &lt;strong&gt;New lead added&lt;/strong&gt; as message and &lt;strong&gt;success&lt;/strong&gt; alert type.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trigger the &lt;strong&gt;Update_Lead&lt;/strong&gt; details modal, inspect the "Update" button in it &amp;amp; add the following four-event handlers in the same sequence:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;a) &lt;strong&gt;UpdateRecord&lt;/strong&gt;: Under action, enter &lt;strong&gt;Run Query&lt;/strong&gt; and select your &lt;strong&gt;Update&lt;/strong&gt; Record query name as Query.&lt;/p&gt;

&lt;p&gt;b) &lt;strong&gt;ListRecord&lt;/strong&gt;: Under action, enter &lt;strong&gt;Run Query&lt;/strong&gt; and select your &lt;strong&gt;List&lt;/strong&gt; Record query name as Query.&lt;/p&gt;

&lt;p&gt;c) &lt;strong&gt;CloseModal&lt;/strong&gt;: Under action, enter &lt;strong&gt;Close Modal&lt;/strong&gt; and select create new record Modal name as &lt;strong&gt;Modal&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;d) &lt;strong&gt;ShowAlert&lt;/strong&gt;: Under action, enter &lt;strong&gt;Show Alert&lt;/strong&gt;. Add the &lt;strong&gt;message&lt;/strong&gt; and &lt;strong&gt;Type&lt;/strong&gt; to alert the user on success of this query. I've enter &lt;strong&gt;Lead Details updated&lt;/strong&gt; as message and &lt;strong&gt;success&lt;/strong&gt; alert type.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now inspect the &lt;strong&gt;delete&lt;/strong&gt; button in the UI and add the following &lt;strong&gt;three&lt;/strong&gt; event handlers in the same sequence:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;a) &lt;strong&gt;DeleteRecord&lt;/strong&gt;: Under action, enter &lt;strong&gt;Run Query&lt;/strong&gt; and select your &lt;strong&gt;Delete&lt;/strong&gt; Record query name as Query.&lt;/p&gt;

&lt;p&gt;b) &lt;strong&gt;ListRecord&lt;/strong&gt;: Under action, enter &lt;strong&gt;Run Query&lt;/strong&gt; and select your &lt;strong&gt;List&lt;/strong&gt; Record query name as Query.&lt;/p&gt;

&lt;p&gt;c) &lt;strong&gt;ShowAlert&lt;/strong&gt;: Under action, enter &lt;strong&gt;Show Alert&lt;/strong&gt;. Add the &lt;strong&gt;message&lt;/strong&gt; and &lt;strong&gt;Type&lt;/strong&gt; to alert the user on success of this query. I've enter &lt;strong&gt;Lead Deleted&lt;/strong&gt; as message and &lt;strong&gt;success&lt;/strong&gt; alert type.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inspect the table widget and in the &lt;strong&gt;table data&lt;/strong&gt; input field add the following &lt;code&gt;{{queries.ListRecord.data}}&lt;/code&gt;. This will &lt;strong&gt;connect&lt;/strong&gt; our table with Airtable spreadsheet data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Binding the values in the right container of our app's UI. Inspect each text and add the following values. This will allow us to show the details when we select a table row. Kindly sync the names correctly as per your UI.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Name: &lt;code&gt;{{components.table1.selectedRow.name}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Email: &lt;code&gt;{{components.table1.selectedRow.email}}&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Contact: &lt;code&gt;{{components.table1.selectedRow.contact}}&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Address: &lt;code&gt;{{components.table1.selectedRow.address}}&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Priority: &lt;code&gt;{{components.table1.selectedRow.priority}}&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Status: &lt;code&gt;{{components.table1.selectedRow.status}}&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Items: &lt;code&gt;{{components.table1.selectedRow.items}}&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Member: &lt;code&gt;{{components.table1.selectedRow.member_assigned}}&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Cost Price: &lt;code&gt;{{components.table1.selectedRow.cost_price}}&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Quantity: &lt;code&gt;{{components.table1.selectedRow.quantity}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Special Request: &lt;code&gt;{{components.table1.selectedRow.special_request}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Selling Price: &lt;code&gt;{{components.table1.selectedRow.selling_price}}&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Final Price: &lt;code&gt;{{(components.table1.selectedRow.selling_price - components.table1.selectedRow.cost_price)*components.table1.selectedRow.quantity}}&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can use ternary operator (? :) to display a custom option when no data is available. This will make the UI look better.&lt;br&gt;
For e.g &lt;code&gt;{{components.table1.selectedRow?.status ? components.table1.selectedRow.status: '-----'}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Congratulations!! 🚀 You have successfully built your  application. I hope you had a good time building something new today, you can start working on this app directly by selecting this template when you create a new application.&lt;/p&gt;

&lt;p&gt;We are continuously integrating different data sources with ToolJet. Stay in the loop to read upcoming releases to develop useful &lt;strong&gt;internal&lt;/strong&gt; tools. If you have any trouble building this application, please join our &lt;a href="https://tooljet.slack.com/join/shared_invite/zt-r2neyfcw-KD1COL6t2kgVTlTtAV5rtg#/shared-invite/email" rel="noopener noreferrer"&gt;Slack community&lt;/a&gt; or email us at &lt;a href="mailto:hello@tooljet.com"&gt;hello@tooljet.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>airtable</category>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Build a Bug tracker app using ToolJet and Appwrite.</title>
      <dc:creator>shivangT</dc:creator>
      <pubDate>Thu, 05 May 2022 20:12:29 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-bug-tracker-app-using-tooljet-and-appwrite-1ibi</link>
      <guid>https://dev.to/tooljet/build-a-bug-tracker-app-using-tooljet-and-appwrite-1ibi</guid>
      <description>&lt;p&gt;This article will see a complete guide to building a &lt;strong&gt;Bug-Tracker&lt;/strong&gt; app that allows you to &lt;strong&gt;create&lt;/strong&gt; and &lt;strong&gt;manage&lt;/strong&gt; your bugs with title, description, project name, priority, and tag with inbuilt messages to notify the user. You can preview the hosted app &lt;a href="https://app.tooljet.com/applications/5d313681-ff87-4e50-adb9-6e4c6c128f6b" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are going to build this app with three simple steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Building the UI&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrating data sources and creating queries&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connecting event handlers&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here’s how our app will look in the end:&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%2Fjl8ajrgcikjymjy8oi5d.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%2Fjl8ajrgcikjymjy8oi5d.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pre-requisite:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet&lt;/strong&gt;: Building the UI of our app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Appwrite&lt;/strong&gt;: For storing bug reports in the Appwrite collection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aws S3&lt;/strong&gt;: For storing images in the S3 bucket&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DigitalOcean&lt;/strong&gt;:  For deploying Appwrite&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This tutorial will help you build the complete app in minutes, and it will allow you to understand various steps with a full description. It would be best if you go through the following articles before we start building an app. Let's buckle up for a fun developing experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.tooljet.com/" rel="noopener noreferrer"&gt;Tooljet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.digitalocean.com/apps/appwrite" rel="noopener noreferrer"&gt;Appwrite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.tooljet.com/docs/data-sources/s3/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Building the UI
&lt;/h2&gt;

&lt;p&gt;First, let's start with building the UI for our app. Open ToolJet on a new tab and click “&lt;strong&gt;Create New Application&lt;/strong&gt;”. We will require the following widgets to make our entire app. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Container&lt;/li&gt;
&lt;li&gt;TextInput and TextArea&lt;/li&gt;
&lt;li&gt;Button&lt;/li&gt;
&lt;li&gt;Table&lt;/li&gt;
&lt;li&gt;Dropdown&lt;/li&gt;
&lt;li&gt;File-Picker&lt;/li&gt;
&lt;li&gt;Image&lt;/li&gt;
&lt;li&gt;Modals&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create a table view to list and manage the bugs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drag and drop a &lt;strong&gt;container&lt;/strong&gt; widget from our widget menu on the right, and expand it completely. Now drop the &lt;strong&gt;table&lt;/strong&gt; widget inside our container. Once done, Let's inspect the table widget and start adding the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add column&lt;/strong&gt;: Title, Description, Priority, Status, Project Assigned &amp;amp; Message&lt;/li&gt;
&lt;/ol&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%2Fqf2tmsr209fn73pol9n5.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%2Fqf2tmsr209fn73pol9n5.png" alt=" " width="201" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Actions Button&lt;/strong&gt;: “View details” and “Edit.”  We can style our buttons by clicking on the actions. We will later set the “&lt;strong&gt;Add Handler&lt;/strong&gt;” property once we finish our modal views.&lt;/li&gt;
&lt;/ol&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%2F3w2fud53hjtxv8v525pe.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%2F3w2fud53hjtxv8v525pe.png" alt=" " width="219" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the top of the table, add the “&lt;strong&gt;Text&lt;/strong&gt;” widget called Bug Tracker and a “&lt;strong&gt;Button&lt;/strong&gt;” widget with CTA “&lt;strong&gt;New Bug&lt;/strong&gt;”. We can style the button by adding colors and border radius to it. We will set the &lt;strong&gt;onClick&lt;/strong&gt; event later. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create modals for CRUD operations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We have to create three &lt;strong&gt;modals&lt;/strong&gt; popping up to perform all the crud operations in the app.  You are &lt;strong&gt;free&lt;/strong&gt; to make your layouts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;New Bug: This allows you to list a new &lt;strong&gt;project-specific&lt;/strong&gt; bug with titles, descriptions, priority, messages, and related images.&lt;/li&gt;
&lt;/ol&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%2F6cndyn9a7hf9xsd8eb7i.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%2F6cndyn9a7hf9xsd8eb7i.png" alt=" " width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Drag and drop texts, text-input, text-area, dropdowns, file-picker, and button widgets and adjust according to the UI above.&lt;/p&gt;

&lt;p&gt;Inspect each input field and add a label, placeholder, and add the option &lt;strong&gt;values&lt;/strong&gt; and &lt;strong&gt;labels&lt;/strong&gt; in respective drop-downs with the following inputs. You can modify these values as per you &lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;Select priority&lt;/strong&gt; : &lt;code&gt;{{["Low", "Medium", "High"]}}&lt;/code&gt;&lt;br&gt;
b) &lt;strong&gt;Name of Project&lt;/strong&gt; : &lt;code&gt;{{["Mobile App", "Internal Tool", "Website"]}}&lt;/code&gt;&lt;br&gt;
c) &lt;strong&gt;Notify Message&lt;/strong&gt; : &lt;code&gt;{{["Resolve Now","Resolve in 3hrs", "Resolve within 48hrs", "Thanks for resolving"]}}&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;View details&lt;/strong&gt;: This allows you to watch specific details around your bug for a better understanding.&lt;/li&gt;
&lt;/ol&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%2Fyr85isffmi1z4rc3dut6.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%2Fyr85isffmi1z4rc3dut6.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Drag and drop texts and image widgets to adjust according to the UI above. We display the bug title, priority, description, message, and images.&lt;/p&gt;

&lt;p&gt;Inspect modal, set the title to Title:&lt;code&gt;{{components.table1.selectedRow.title}}&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;We need to bind the data in our texts to display the following UI.&lt;br&gt;
a)  &lt;strong&gt;Message&lt;/strong&gt;: &lt;code&gt;{{components.table1.selectedRow.message}}&lt;/code&gt;&lt;br&gt;
b)  &lt;strong&gt;Priority&lt;/strong&gt;: &lt;code&gt;{{components.table1.selectedRow.priority}}&lt;/code&gt;&lt;br&gt;
c)  &lt;strong&gt;Project&lt;/strong&gt;: &lt;code&gt;{{components.table1.selectedRow.project_assigned}}&lt;/code&gt;&lt;br&gt;
d)  &lt;strong&gt;Description&lt;/strong&gt;: &lt;code&gt;{{components.table1.selectedRow.description}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Inspect the image widget and set the URL to:  &lt;code&gt;{{queries.ListDocument.data.documents[components.table1.selectedRowId].preview_url}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;e)  &lt;strong&gt;Message&lt;/strong&gt;: &lt;code&gt;{{components.table1.selectedRow.message}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Edit:&lt;/strong&gt;  This allows you to perform edit and delete operations on an existing bug.&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%2Fu96ghltcm53ypa6zdqrp.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%2Fu96ghltcm53ypa6zdqrp.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Drag and drop texts, text-input, text-area, dropdowns, file-picker, and button widgets and adjust according to the UI above. Currently, we don't have an option to edit the image. I will release it in the next version of this application.&lt;/p&gt;

&lt;p&gt;Follow step one to populate the dropdown option's value and label. Now add the default value under each input field as:&lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;Title&lt;/strong&gt;: &lt;code&gt;{{queries.ListDocument.data.documents[components.table1.selectedRowId].title}}&lt;/code&gt;&lt;br&gt;
b) &lt;strong&gt;Description&lt;/strong&gt;: &lt;code&gt;{{queries.ListDocument.data.documents[components.table1.selectedRowId].description}}&lt;/code&gt;&lt;br&gt;
c) &lt;strong&gt;Priority&lt;/strong&gt;: &lt;code&gt;{{queries.ListDocument.data.documents[components.table1.selectedRowId].Priority}}&lt;/code&gt;&lt;br&gt;
d) &lt;strong&gt;Name of project&lt;/strong&gt;: &lt;code&gt;{{queries.ListDocument.data.documents[components.table1.selectedRowId].project_assigned}}&lt;/code&gt;&lt;br&gt;
e) &lt;strong&gt;Notify Message&lt;/strong&gt;: &lt;code&gt;{{queries.ListDocument.data.documents[components.table1.selectedRowId].message}}&lt;/code&gt;&lt;br&gt;
f) &lt;strong&gt;Uploaded Screenshot&lt;/strong&gt;: &lt;code&gt;{{queries.ListDocument.data.documents[components.table1.selectedRowId].preview_url}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Inspecting table format and styles&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Let's &lt;strong&gt;format&lt;/strong&gt; and &lt;strong&gt;style&lt;/strong&gt; the table widget. You are free to explore various options available for your purpose. Kindly copy the following settings and paste them into your app.&lt;/p&gt;

&lt;p&gt;a)  &lt;strong&gt;Properties&lt;/strong&gt;: This helps you display the collection you created on Appwrite. Later in the tutorial, we will learn about creating queries. You have to copy this &lt;strong&gt;&lt;code&gt;{{queries.ListDocument.data.documents}}&lt;/code&gt;&lt;/strong&gt; in the input field.&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%2Fka5puupfo1e98q3vjtzp.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%2Fka5puupfo1e98q3vjtzp.png" alt=" " width="248" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;b) &lt;strong&gt;Columns&lt;/strong&gt;: We have defined these columns in our Appwrite attributes. We have to update and add the following columns, i.e., &lt;strong&gt;title, description, priority, project_assigned, and message&lt;/strong&gt;. Note: Define attributes in a small case. Under each column setting, assign the same value to the key as the column name. &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%2F5hajr7u690i071rkd4fz.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%2F5hajr7u690i071rkd4fz.png" alt=" " width="280" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;c) &lt;strong&gt;Action Buttons&lt;/strong&gt;: Once you add two action buttons,  &lt;strong&gt;Edit&lt;/strong&gt; and &lt;strong&gt;View details&lt;/strong&gt;, you can explore its settings to style the button. You must add an event handler with "Show Modal" as action and select the view_details &lt;strong&gt;modal&lt;/strong&gt;. Do the same in the Edit action button's settings for the &lt;strong&gt;Edit modal&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%2Fulmhorvl3qc4b4c5ifxs.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%2Fulmhorvl3qc4b4c5ifxs.png" alt=" " width="280" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;d) &lt;strong&gt;Styles&lt;/strong&gt;: Under the table's styles tab, set &lt;strong&gt;Action Button Radius&lt;/strong&gt; with 8, &lt;strong&gt;Table Type&lt;/strong&gt; as bordered, &lt;strong&gt;Cell Size&lt;/strong&gt; as spacious, &lt;strong&gt;Border Radius&lt;/strong&gt; as 8.&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%2Ffb7xmroyolmid5ol837o.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%2Ffb7xmroyolmid5ol837o.png" alt=" " width="175" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Connect modals in the UI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s add our modals with the &lt;strong&gt;onClick&lt;/strong&gt; events to our respective buttons. Inspect each button and navigate to the “&lt;strong&gt;Add event handler&lt;/strong&gt;” property to perform this step. &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%2F6ybelg4sni8oslcp1jgo.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%2F6ybelg4sni8oslcp1jgo.png" alt=" " width="550" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now Click on “&lt;strong&gt;Action&lt;/strong&gt;” and set it to “&lt;strong&gt;Show Modal&lt;/strong&gt;”. We get to select the action &lt;strong&gt;options&lt;/strong&gt; where we put them to our respective modals.&lt;/p&gt;

&lt;p&gt;Great !! 👍  We have completed the first part of our application. Now let's move on to the next step. &lt;/p&gt;

&lt;h2&gt;
  
  
  Integrating data sources and creating queries
&lt;/h2&gt;

&lt;p&gt;We have to add 2 data sources, i.e., &lt;a href="https://docs.tooljet.com/docs/data-sources/s3/" rel="noopener noreferrer"&gt;Aws&lt;/a&gt; and &lt;a href="https://docs.tooljet.com/docs/data-sources/appwrite/" rel="noopener noreferrer"&gt;Appwrite&lt;/a&gt;. You can visit these links to read about the steps involved in the integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Add Data sources&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a) Set up AWS:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create your &lt;strong&gt;account&lt;/strong&gt; on AWS&lt;/li&gt;
&lt;li&gt;Once done, you have to give &lt;strong&gt;access permissions&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Create a bucket with your &lt;strong&gt;name&lt;/strong&gt; preference&lt;/li&gt;
&lt;li&gt;You need to collect the access and secret &lt;strong&gt;key&lt;/strong&gt; and go to the &lt;strong&gt;ToolJet&lt;/strong&gt; tab where you have built the UI&lt;/li&gt;
&lt;li&gt;On the left-hand side, select &lt;strong&gt;sources&lt;/strong&gt; &amp;gt; click on “+” to add data source &amp;gt; Search and select &lt;strong&gt;AWS s3&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Now fill in the inputs fields &lt;strong&gt;Access key&lt;/strong&gt;,  &lt;strong&gt;Secret key&lt;/strong&gt;, and in the &lt;strong&gt;region&lt;/strong&gt; select “&lt;strong&gt;Asia Pacific (Mumbai)&lt;/strong&gt;”&lt;/li&gt;
&lt;li&gt;Once you test the &lt;strong&gt;connection&lt;/strong&gt;, then save&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;b) Set up Appwrite:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We'll be deploying Appwrite on &lt;strong&gt;DigitalOcean&lt;/strong&gt;. To do the this, follow the steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sign up for a free account on DigitalOcean, and it may ask for card details for verification purposes while signing up for the first time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once signed up, you'll receive free $100 credits valid for 60 days from the date of registration. You can use these credits for deploying apps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now create an Appwrite droplet in your DigitalOcean account from the following link: &lt;a href="https://marketplace.digitalocean.com/apps/appwrite" rel="noopener noreferrer"&gt;https://marketplace.digitalocean.com/apps/appwrite&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next, select the capabilities that you want for your Droplet. We will go with the “Basic” option of a shared CPU and at least 1 GB of RAM. Select the cheapest option with Intel CPU with SSD for $5 per month.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the next step, create the login credentials for your virtual machine. You can either add SSH keys or create a root password. Adding SSH keys is the recommended way, but you can go with the root password if you're new.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on finalize and create. After some time, DigitalOcean will have your virtual machine running.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, you can go to the IP address or URL for our new server and log in to the Appwrite console.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fawte5z96paaddv384qgf.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%2Fawte5z96paaddv384qgf.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating collections and documents&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now let's look into creating collections and attributes in Appwrite.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Once you have signed in to the Appwrite console, create a project. Let's call this project: &lt;code&gt;**bug_tracker**&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&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%2Fc86t62o3bnjf6azss143.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%2Fc86t62o3bnjf6azss143.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the Database from the sidebar in the console, and click on the &lt;strong&gt;Add Collection&lt;/strong&gt; button. In the modal, enter the collection name as &lt;strong&gt;bug_tracker&lt;/strong&gt; and click &lt;strong&gt;Create&lt;/strong&gt; button. &lt;/li&gt;
&lt;/ol&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%2F5vm3izft2r6jh5phoo8i.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%2F5vm3izft2r6jh5phoo8i.png" alt=" " width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In Appwrite, &lt;strong&gt;Collections&lt;/strong&gt; hold &lt;strong&gt;Documents&lt;/strong&gt;. We will add a few sample &lt;strong&gt;Documents&lt;/strong&gt; to the Collection that we created. You can think of Collections as tables and Documents as rows. But before adding documents, we will need to add &lt;strong&gt;Attributes&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We will need the following &lt;strong&gt;attributes&lt;/strong&gt; for the documents in our collection:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Attribute ID(key): &lt;strong&gt;title&lt;/strong&gt;, Type: &lt;strong&gt;String&lt;/strong&gt; (Title of the bug Ex: &lt;strong&gt;Button-alignment&lt;/strong&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attribute ID(key): &lt;strong&gt;description&lt;/strong&gt;, Type: String (Describe the bug. Ex: &lt;strong&gt;On /user/profile align the "Save details" button to the right&lt;/strong&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attribute ID(key): &lt;strong&gt;priority&lt;/strong&gt;, Type: &lt;strong&gt;String&lt;/strong&gt; (Set it to &lt;strong&gt;low, medium, high&lt;/strong&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attribute ID(key): &lt;strong&gt;message&lt;/strong&gt;, Type: &lt;strong&gt;String&lt;/strong&gt; ( Select a message from the dropdown: Ex: &lt;strong&gt;Resolve Now&lt;/strong&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attribute ID(key): &lt;strong&gt;project_assigned&lt;/strong&gt;, Type: &lt;strong&gt;string&lt;/strong&gt; (Project where the bug is found. Ex: &lt;strong&gt;Website&lt;/strong&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attribute ID(key): &lt;strong&gt;preview_url&lt;/strong&gt;, Type: &lt;strong&gt;string(URL)&lt;/strong&gt; (URL of the picture of the bug's screenshot)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fzi8hzo495gxybss3bzoj.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%2Fzi8hzo495gxybss3bzoj.png" alt=" " width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Finally, you can start adding documents to the collection.&lt;/li&gt;
&lt;/ol&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%2F28n0f5vsx8b8t7fjsj0i.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%2F28n0f5vsx8b8t7fjsj0i.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's look at the steps for adding the Appwrite data source:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the left sidebar, and click on the &lt;strong&gt;Datasource&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In the modal that pops up, select the Appwrite data source.&lt;/li&gt;
&lt;li&gt;You'll be asked to enter the - &lt;strong&gt;Host, Project ID, and Secret Key&lt;/strong&gt;. You'll find these three in your Appwrite console.&lt;/li&gt;
&lt;li&gt;Now click on the &lt;strong&gt;Test Connection&lt;/strong&gt; button to verify that the Appwrite server is connected successfully.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Save&lt;/strong&gt; to add the data source.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cheers!! 😍 We have added our data sources. Now, let's create different &lt;strong&gt;query operations&lt;/strong&gt; required to integrate into our application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:  Creating queries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are the following queries we are going to create. I will describe each step in detail. Click on the '+' icon on the left and select &lt;strong&gt;AWS S3&lt;/strong&gt; or &lt;strong&gt;Appwrite&lt;/strong&gt; as dataSource for respective queries.&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%2F0p4cdx7h4rasoilhhr48.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%2F0p4cdx7h4rasoilhhr48.png" alt=" " width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's create our first Query to connect the AWS bucket we made in our previous step.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;UploadImage&lt;/strong&gt;: Name of the query. We upload the file picked by our file picker widget to our AWS bucket. &lt;/li&gt;
&lt;/ol&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%2Fqrkmgjfqbrz6z09l67gv.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%2Fqrkmgjfqbrz6z09l67gv.png" alt=" " width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please select the following details and fill them in, respectively. These components are from our **create_new_bug **modal, so you set them accordingly.  &lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;Operation&lt;/strong&gt;: Upload Object&lt;br&gt;
b) &lt;strong&gt;Bucket&lt;/strong&gt;: The bucket you created in your AWS dashboard. I have named mine 'tooljet-bucket.'&lt;br&gt;
c) &lt;strong&gt;Key&lt;/strong&gt;: &lt;code&gt;{{components.filepicker2.file[0].name}}&lt;/code&gt;&lt;br&gt;
d) &lt;strong&gt;Content-Type&lt;/strong&gt;: &lt;code&gt;{{components.filepicker2.file[0].type}}&lt;/code&gt;&lt;br&gt;
e) &lt;strong&gt;Upload Data&lt;/strong&gt;: &lt;code&gt;{{components.filepicker2.file[0].base64Data}}&lt;/code&gt;&lt;br&gt;
f) &lt;strong&gt;Encoding&lt;/strong&gt;: base64&lt;/p&gt;

&lt;p&gt;Once done, &lt;code&gt;SAVE&lt;/code&gt; this query. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Download&lt;/strong&gt;: Name of the query. We are downloading the signed URL to preview in our app.&lt;/li&gt;
&lt;/ol&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%2Fwnjbzn7o1pff73klv0zc.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%2Fwnjbzn7o1pff73klv0zc.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We need to add the following:&lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;Operation&lt;/strong&gt;: Signed URL for download&lt;br&gt;
b) &lt;strong&gt;Bucket&lt;/strong&gt;: Name of the bucket where we are downloading the preview URL&lt;br&gt;
c) &lt;strong&gt;Key&lt;/strong&gt;: It should be the name of the file. &lt;code&gt;{{components.filepicker2.file[0].name}}&lt;/code&gt;&lt;br&gt;
d) &lt;strong&gt;Expires&lt;/strong&gt; &lt;strong&gt;in&lt;/strong&gt;: Set it to 36,0000&lt;/p&gt;

&lt;p&gt;Congratulations!! We have successfully set up our first queries. Now let's create Queries with the following names to connect the &lt;strong&gt;Appwrite&lt;/strong&gt; to perform the basic &lt;strong&gt;CRUD&lt;/strong&gt; operations. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ListDocument&lt;/strong&gt;: To list all the documents we created in our collections on Appwrite. Copy and paste the following values. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;a) &lt;strong&gt;Operation&lt;/strong&gt;: List Document&lt;br&gt;
b) &lt;strong&gt;Collection ID&lt;/strong&gt;: Under settings, you will get this in your &lt;strong&gt;Appwrite&lt;/strong&gt; dashboard.&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%2Fodmuy5pkv3nh5c7z2jd5.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%2Fodmuy5pkv3nh5c7z2jd5.png" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under the "Advanced tab," toggle on "Run this query on page load." Once done, save the query.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;createNewDoc&lt;/strong&gt;: To &lt;strong&gt;add&lt;/strong&gt; new entries to our collection. Fill in the following fields.&lt;/li&gt;
&lt;/ol&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%2Fkl8dip4tjsn8c6gquqhg.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%2Fkl8dip4tjsn8c6gquqhg.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;Operation&lt;/strong&gt;: Add Document to Collection&lt;br&gt;
b) &lt;strong&gt;Collection ID&lt;/strong&gt;: You will get this in your &lt;strong&gt;Appwrite&lt;/strong&gt; dashboard under &lt;strong&gt;settings&lt;/strong&gt;.&lt;br&gt;
c) &lt;strong&gt;Body&lt;/strong&gt;: Add the following key-value pairs. This is the data format in which our Appwrite collection will &lt;strong&gt;receive&lt;/strong&gt; data. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;{"title": "{{components.textinput4.value}}","description":"{{components.textarea3.value}}","project_assigned": "{{components.dropdown7.value}}","priority": "{{components.dropdown8.value}}","message": "{{components.dropdown9.value}}","preview_url":"{{queries.Download.data.url}}"}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can save the query once you confirm all the components.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DeleteDocument&lt;/strong&gt;- To delete a document in the collection&lt;/li&gt;
&lt;/ol&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%2Fhjbydihjknu1f8f9lf6j.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%2Fhjbydihjknu1f8f9lf6j.png" alt=" " width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the following:&lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;Operation&lt;/strong&gt;: Delete Document&lt;br&gt;
b) &lt;strong&gt;Collection ID&lt;/strong&gt;: You will get this in your &lt;strong&gt;Appwrite&lt;/strong&gt; dashboard under &lt;strong&gt;settings&lt;/strong&gt;.&lt;br&gt;
c) &lt;strong&gt;Document ID&lt;/strong&gt;: It is nothing but the selected row id. &lt;code&gt;{{queries.ListDocument.data.documents[components.table1.selectedRowId].$id}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once done, save this query. Now let's take a look at our last query. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;UpdateDocument&lt;/strong&gt;: To update a particular document in the &lt;strong&gt;collection&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&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%2Fj2fqgz20n3mknhxklry2.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%2Fj2fqgz20n3mknhxklry2.png" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;Operation&lt;/strong&gt;: Update Document&lt;br&gt;
b) &lt;strong&gt;Collection ID&lt;/strong&gt;: You will get this in your Appwrite dashboard under settings.&lt;br&gt;
c) &lt;strong&gt;Document ID&lt;/strong&gt;: It is nothing but the selected row id. &lt;code&gt;{{queries.ListDocument.data.documents[components.table1.selectedRowId].$id}}&lt;/code&gt;&lt;br&gt;
d) &lt;strong&gt;Body&lt;/strong&gt;: Add the following key-value pairs. This is the data format in which our &lt;strong&gt;Appwrite&lt;/strong&gt; will &lt;strong&gt;receive&lt;/strong&gt; data and update the collection. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;{"title": "{{components.textinput3.value}}","description":"{{components.textarea2.value}}","project_assigned": "{{components.dropdown4.value}}",    "Priority":"{{components.dropdown5.value}}","message": "{{components.dropdown6.value}}",    "preview_url":"{{queries.ListDocument.data.documents[components.table1.selectedRowId].preview_url}}"}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Save the query once the details are filled up correctly. &lt;/p&gt;

&lt;p&gt;Amazing!! 🤩  We have created all our queries. We need to connect these queries in our app on button clicks as a next step now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting event handlers
&lt;/h2&gt;

&lt;p&gt;Now that we have built the user interface and created all the queries, all we need to do is connect the UI with queries. Let's get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;Create_New_Bug modal&lt;/strong&gt;, inspect the "&lt;strong&gt;Create&lt;/strong&gt;" button widget and add the following &lt;strong&gt;six-event&lt;/strong&gt; handlers in the same &lt;strong&gt;sequence&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;a) &lt;strong&gt;Set Variable&lt;/strong&gt;: Select the following action and add key as "&lt;strong&gt;new_bug_status&lt;/strong&gt;" and set the value &lt;code&gt;{{true}}&lt;/code&gt;. Go to the Advanced tab under the &lt;strong&gt;ListDocument&lt;/strong&gt; query setting and click on "&lt;strong&gt;add a handler&lt;/strong&gt;". In &lt;strong&gt;action&lt;/strong&gt;, select "&lt;strong&gt;set Variable&lt;/strong&gt;", &lt;strong&gt;key&lt;/strong&gt; as &lt;strong&gt;new_bug_status&lt;/strong&gt;, and value as &lt;code&gt;{{false}}&lt;/code&gt;. In creating a button, also update the loading state programmatically with the following value: &lt;code&gt;{{variables?.new_bug_status ?? false}}&lt;/code&gt;. This will allow a loading stating while queries are being processed.&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%2F82qoc4zqjwu1s5f4vxna.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%2F82qoc4zqjwu1s5f4vxna.png" alt=" " width="749" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;b) &lt;strong&gt;Run Query&lt;/strong&gt;: Select the following action and add query as "&lt;strong&gt;uploadImage&lt;/strong&gt;."&lt;br&gt;
c) &lt;strong&gt;Run Query&lt;/strong&gt;: Select the following action and add query as "&lt;strong&gt;Download&lt;/strong&gt;."&lt;br&gt;
d) &lt;strong&gt;Run Query&lt;/strong&gt;: Select the following action and add query as "&lt;strong&gt;createNewDoc&lt;/strong&gt;."&lt;br&gt;
e) &lt;strong&gt;Run Query&lt;/strong&gt;: Select the following action and add query as "&lt;strong&gt;ListDocument&lt;/strong&gt;."&lt;br&gt;
f) &lt;strong&gt;Close Modal&lt;/strong&gt;: Select the following action and add modal as the current modal name, i.e., &lt;strong&gt;Modal3&lt;/strong&gt; in this case. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the Edit_Bug modal, inspect the "Delete" button  and add the following three event handlers in the same sequence: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;a) &lt;strong&gt;Run Query&lt;/strong&gt;: Select the following action and add query as "&lt;strong&gt;DeleteDocument&lt;/strong&gt;."&lt;br&gt;
b) &lt;strong&gt;Run Query&lt;/strong&gt;: Select the following action and add query as "&lt;strong&gt;ListDocument&lt;/strong&gt;."&lt;br&gt;
c) &lt;strong&gt;Close Modal&lt;/strong&gt;: Select the following action and add modal as the current modal name, i.e., &lt;strong&gt;Modal2&lt;/strong&gt; in this case. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the Edit_Bug modal, inspect the "Update" button  and add the following three event handlers in the same sequence: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;a) &lt;strong&gt;Run Query&lt;/strong&gt;: Select this action and add query as "&lt;strong&gt;UpdateDocument&lt;/strong&gt;."&lt;br&gt;
b) &lt;strong&gt;Run Query&lt;/strong&gt;: Select the following action and add query as "&lt;strong&gt;ListDocument&lt;/strong&gt;."&lt;br&gt;
c) &lt;strong&gt;Close Modal&lt;/strong&gt;: Select the following action and add modal as the current modal name, i.e., &lt;strong&gt;Modal2&lt;/strong&gt; in this case. &lt;/p&gt;

&lt;p&gt;We have successfully connected the queries and UI, and our app is fully functional now. You can now understand the reason behind the sequencing queries in such a way. Now, we can perform any &lt;strong&gt;CRUD&lt;/strong&gt; operation and check all the flows in our app.&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%2Fjhqdyxssi8jx1l94e89z.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%2Fjhqdyxssi8jx1l94e89z.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations!! 🚀 You have successfully built your bug-tracker application. I hope you had a good time building something new today, and you can start working on this app directly by selecting this template when you create a new application.&lt;/p&gt;

&lt;p&gt;We are continuously integrating different data sources with ToolJet. Stay in the loop to read upcoming articles to develop useful internal tools. If you have any trouble building this application, please join our &lt;a href="https://join.slack.com/t/tooljet/shared_invite/zt-r2neyfcw-KD1COL6t2kgVTlTtAV5rtg" rel="noopener noreferrer"&gt;Slack community&lt;/a&gt; or email us at &lt;strong&gt;&lt;a href="mailto:hello@tooljet.com"&gt;hello@tooljet.com&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
