1+ const orderBeingPrepared = ( orderNo ) => new Promise ( ( resolve , reject ) => {
2+ setTimeout ( ( ) => {
3+ document . getElementById ( `order-status-img-${ orderNo } ` ) . src = 'assets/order-being-prepared.gif'
4+ document . getElementById ( `order-status-txt-${ orderNo } ` ) . innerText = 'Order is being prepared'
5+ resolve ( orderNo )
6+ } , 2000 )
7+ } )
8+
9+ const orderPrepared = ( orderNo ) => new Promise ( ( resolve , reject ) => {
10+ setTimeout ( ( ) => {
11+ document . getElementById ( `order-status-img-${ orderNo } ` ) . src = 'assets/order-prepared.gif'
12+ document . getElementById ( `order-status-txt-${ orderNo } ` ) . innerText = 'Order prepared'
13+ resolve ( orderNo )
14+ } , 10000 )
15+ } )
16+
17+ const orderHandedOver = ( orderNo ) => new Promise ( ( resolve , reject ) => {
18+ setTimeout ( ( ) => {
19+ document . getElementById ( `order-status-img-${ orderNo } ` ) . src = 'assets/order-handed-over.gif'
20+ document . getElementById ( `order-status-txt-${ orderNo } ` ) . innerText = 'Order handed over to the delivery person'
21+ resolve ( orderNo )
22+ } , 5000 )
23+ } )
24+
25+ const orderOnTheWay = ( orderNo ) => new Promise ( ( resolve , reject ) => {
26+ setTimeout ( ( ) => {
27+ document . getElementById ( `order-status-img-${ orderNo } ` ) . src = 'assets/order-on-the-way.gif'
28+ document . getElementById ( `order-status-txt-${ orderNo } ` ) . innerText = 'Order is on the way'
29+ resolve ( orderNo )
30+ } , 3000 )
31+ } )
32+
33+ const orderReachedDestintaion = ( orderNo ) => new Promise ( ( resolve , reject ) => {
34+ setTimeout ( ( ) => {
35+ document . getElementById ( `order-status-img-${ orderNo } ` ) . src = 'assets/order-reached-destination.gif'
36+ document . getElementById ( `order-status-txt-${ orderNo } ` ) . innerText = `Order reached it's destination`
37+ resolve ( orderNo )
38+ } , 8000 )
39+ } )
40+
41+ const orderDelivered = ( orderNo ) => new Promise ( ( resolve , reject ) => {
42+ setTimeout ( ( ) => {
43+ document . getElementById ( `order-status-img-${ orderNo } ` ) . src = 'assets/order-delivered.gif'
44+ document . getElementById ( `order-status-txt-${ orderNo } ` ) . innerText = 'Order has been delivered'
45+ resolve ( orderNo )
46+ } , 4000 )
47+ } )
48+
49+ let orderNo = 0
50+
51+ const placeOrder = ( ) => {
52+ orderNo ++
53+ createOrderCard ( )
54+
55+ document . getElementById ( `order-status-img-${ orderNo } ` ) . src = 'assets/order-confirmed.gif'
56+ document . getElementById ( `order-status-txt-${ orderNo } ` ) . innerText = 'Order confirmed'
57+
58+ orderBeingPrepared ( orderNo )
59+ . then ( ( orderNo ) => orderPrepared ( orderNo ) )
60+ . then ( ( orderNo ) => orderHandedOver ( orderNo ) )
61+ . then ( ( orderNo ) => orderOnTheWay ( orderNo ) )
62+ . then ( ( orderNo ) => orderReachedDestintaion ( orderNo ) )
63+ . then ( ( orderNo ) => orderDelivered ( orderNo ) )
64+ . then ( ( orderNo ) => console . log ( `Order ${ orderNo } completed processing` ) )
65+ . catch ( ( ) => console . log ( 'Something went wrong' ) )
66+ }
67+
68+ function createOrderCard ( ) {
69+ const orderList = document . getElementById ( 'order-list' )
70+
71+ const colDiv = document . createElement ( 'div' )
72+ colDiv . classList . add ( 'col-xl-4' , 'col-md-6' )
73+ colDiv . id = `order-${ orderNo } `
74+
75+ const cardDiv = document . createElement ( 'div' )
76+ cardDiv . classList . add ( 'card' , 'text-center' , 'mt-2' )
77+
78+ const cardHeaderDiv = document . createElement ( 'div' )
79+ cardHeaderDiv . classList . add ( 'card-header' )
80+ cardHeaderDiv . innerText = `Order No. ${ orderNo } `
81+
82+ const cardBodyDiv = document . createElement ( 'div' )
83+ cardBodyDiv . classList . add ( 'card-body' )
84+
85+ const item1 = document . getElementById ( 'item-1' ) . value || 'Mushroom Pizza'
86+ const item2 = document . getElementById ( 'item-2' ) . value || 'French Fries'
87+ const quantity1 = document . getElementById ( 'quantity-1' ) . value || '1'
88+ const quantity2 = document . getElementById ( 'quantity-2' ) . value || '2'
89+ const price1 = document . getElementById ( 'price-1' ) . value || '25'
90+ const price2 = document . getElementById ( 'price-2' ) . value || '36'
91+ const total = Number ( price1 ) + Number ( price2 )
92+ const orderForm = document . getElementById ( 'order-form' )
93+ orderForm . reset ( )
94+
95+ cardBodyDiv . innerHTML = `
96+ <table class="table table-striped">
97+ <thead>
98+ <tr>
99+ <th scope="col">#</th>
100+ <th scope="col">Item</th>
101+ <th scope="col">Quantity</th>
102+ <th scope="col">Price</th>
103+ </tr>
104+ </thead>
105+ <tbody>
106+ <tr>
107+ <th scope="row">1</th>
108+ <td>${ item1 } </td>
109+ <td>${ quantity1 } </td>
110+ <td>$${ Number ( price1 ) . toFixed ( 2 ) } </td>
111+ </tr>
112+ <tr>
113+ <th scope="row">2</th>
114+ <td>${ item2 } </td>
115+ <td>${ quantity2 } </td>
116+ <td>$${ Number ( price2 ) . toFixed ( 2 ) } </td>
117+ </tr>
118+ <tr>
119+ <th scope="row">Total</th>
120+ <td></td>
121+ <td></td>
122+ <td>$${ Number ( total ) . toFixed ( 2 ) } </td>
123+ </tr>
124+ </tbody>
125+ </table>
126+ `
127+
128+ const orderStatusImg = document . createElement ( 'img' )
129+ orderStatusImg . src = ''
130+ orderStatusImg . id = `order-status-img-${ orderNo } `
131+ orderStatusImg . width = '75'
132+
133+ const orderStatusTxt = document . createElement ( 'p' )
134+ orderStatusTxt . classList . add ( 'card-text' )
135+ orderStatusTxt . id = `order-status-txt-${ orderNo } `
136+
137+ const cancelBtn = document . createElement ( 'button' )
138+ cancelBtn . classList . add ( 'btn' , 'btn-danger' , 'btn-sm' )
139+ cancelBtn . innerText = 'Cancel'
140+ cancelBtn . addEventListener ( 'click' , ( ) => {
141+ const orderCol = document . getElementById ( `order-${ orderNo } ` )
142+ orderList . remove ( orderCol )
143+ } )
144+
145+ cardBodyDiv . append ( orderStatusImg , orderStatusTxt , cancelBtn )
146+
147+ const cardFooterDiv = document . createElement ( 'div' )
148+ cardFooterDiv . classList . add ( 'card-footer' , 'text-body-secondary' )
149+ const currentTime = new Date ( )
150+ cardFooterDiv . innerText = currentTime . toLocaleString ( )
151+
152+ cardDiv . append ( cardHeaderDiv , cardBodyDiv , cardFooterDiv )
153+ colDiv . append ( cardDiv )
154+ orderList . append ( colDiv )
155+ }
156+
157+
158+ /*
159+ <div class="col-lg-4 col-md-6">
160+ <div class="card text-center mt-2">
161+ <div class="card-header">
162+ Order No. 1
163+ </div>
164+ <div class="card-body">
165+ <img src="" id="order-status-img" width="75">
166+ <p class="card-text" id="order-status-txt"></p>
167+ <a href="#" class="btn btn-danger btn-sm">Cancel</a>
168+ </div>
169+ <div class="card-footer text-body-secondary">
170+ 2 days ago
171+ </div>
172+ </div>
173+ </div>
174+ */
0 commit comments