PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / trunk
Booking for Appointments and Events Calendar – Amelia vtrunk
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / v3 / src / assets / js / public / restore.js
ameliabooking / v3 / src / assets / js / public Last commit date
actions.js 5 days ago booking.js 5 days ago cabinet.js 5 days ago cart.js 5 days ago catalog.js 5 days ago coupon.js 5 days ago customFields.js 5 days ago events.js 5 days ago facebookPixel.js 5 days ago ivy.js 5 days ago package.js 5 days ago panel.js 5 days ago public.js 5 days ago renderActions.js 5 days ago restore.js 5 days ago slots.js 5 days ago translation.js 5 days ago user.js 5 days ago
restore.js
276 lines
1 import { useRemoveUrlParameter } from '../common/helper.js'
2 import {
3 useAppointmentCalendarData,
4 usePackageCalendarData,
5 useEventCalendarData,
6 useBookingError,
7 useNotify,
8 } from './booking.js'
9 import httpClient from '../../../plugins/axios'
10 import { settings } from '../../../plugins/settings'
11
12 function fixType(item, key) {
13 item[key] =
14 item[key] === undefined || item[key] === null || item[key] === '' ? null : parseInt(item[key])
15 }
16
17 function fixCacheData(data) {
18 let keys = []
19
20 data.request.state.attachments = []
21
22 data.request.state.booked = null
23
24 data.request.state.loading = true
25
26 data.request.state.ready = false
27
28 if (!('extras' in data.request.state.appointment.bookings[0])) {
29 data.request.state.appointment.bookings[0].extras = []
30 }
31
32 fixType(data.request.state, 'packageId')
33
34 fixType(data.request.state, 'appointmentsIndex')
35
36 data.request.state.appointments.forEach((a) => {
37 keys = ['index', 'packageId', 'serviceId']
38
39 keys.forEach((key) => {
40 fixType(a, key)
41 })
42
43 for (let serviceId in a.services) {
44 a.services[serviceId].list.forEach((i) => {
45 keys = ['locationId', 'providerId']
46
47 keys.forEach((key) => {
48 fixType(i, key)
49 })
50
51 if (!('extras' in i) || i.extras === undefined || i.extras === null) {
52 i.extras = []
53 }
54 })
55
56 keys = ['locationId', 'providerId']
57
58 keys.forEach((key) => {
59 fixType(a.services[serviceId], key)
60 })
61 }
62 })
63
64 keys = ['locationId', 'providerId', 'serviceId', 'categoryId', 'packageId']
65
66 keys.forEach((key) => {
67 fixType(data.request.state.appointment, key)
68 })
69 }
70
71 function useRestore(store, shortcodeData) {
72 let data =
73 'ameliaCache' in window && window.ameliaCache.length && window.ameliaCache[0]
74 ? JSON.parse(window.ameliaCache[0])
75 : null
76
77 let userClickedBack = false
78
79 if (
80 !data ||
81 (!data.status &&
82 parseInt(data.request.form.shortcode.counter) !== parseInt(shortcodeData.counter))
83 ) {
84 let savedData = sessionStorage.getItem('ameliaCacheData')
85 const navEntries = performance.getEntriesByType('navigation')
86 const navType =
87 navEntries && navEntries.length > 0 ? navEntries[0].type : performance.navigation.type
88 if (savedData && JSON.parse(savedData) && (navType === 'back_forward' || navType === 2)) {
89 data = JSON.parse(savedData)
90 userClickedBack = true
91 } else {
92 if (savedData) {
93 sessionStorage.setItem('ameliaCacheData', null)
94 }
95 return null
96 }
97 }
98
99 sessionStorage.removeItem('ameliaCacheData')
100
101 try {
102 window.history.replaceState(
103 null,
104 null,
105 useRemoveUrlParameter(
106 useRemoveUrlParameter(window.location.href, 'ameliaWcCache'),
107 'ameliaCache',
108 ),
109 )
110 } catch (e) {
111 console.log(e)
112 }
113
114 if (
115 data.request.state.attachments &&
116 (data.request.state.attachments.length || Object.keys(data.request.state.attachments).length)
117 ) {
118 fixCacheData(data)
119 }
120
121 if ('bookableType' in data.request.state && data.request.state.bookableType === 'event') {
122 store.commit('eventEntities/setEventsDisplay', data.request.state.eventsDisplay)
123 store.commit('bookableType/setType', data.request.state.bookableType)
124 store.commit('pagination/setAllData', data.request.state.pagination)
125 store.commit('params/setAllData', data.request.state.params)
126 store.commit('eventBooking/setEventId', data.request.state.eventId)
127 store.commit('coupon/setCoupon', data.request.state.coupon)
128 store.commit('customFields/setAllData', data.request.state.customFields)
129 store.commit('customerInfo/setAllData', data.request.state.customerInfo)
130 store.commit('payment/setAllData', data.request.state.payment)
131 store.commit('persons/setAllData', data.request.state.persons)
132 store.commit('tickets/setAllData', data.request.state.tickets)
133
134 // * Request because event params and pagination
135 if (data.request.state.eventsDisplay === 'calendar') {
136 store.dispatch('eventEntities/requestEvents', 'calendar')
137 store.dispatch('eventEntities/requestEvents', 'upcoming')
138 } else {
139 store.dispatch('eventEntities/requestEvents')
140 }
141 store.dispatch('customFields/filterEventCustomFields')
142 } else {
143 store.state.booking = { ...data.request.state }
144 }
145
146 if (userClickedBack) {
147 if ((data.paymentMethod === 'mollie' || data.paymentMethod === 'barion') && data.bookings) {
148 if (data.packageCustomer) {
149 httpClient
150 .post('/bookings/delete/remotely/' + data.packageCustomer.id, {
151 skipEventHandler: true,
152 type: 'package',
153 token: data.packageCustomer.token,
154 })
155 .catch((e) => {
156 console.log(e.message)
157 })
158 } else {
159 data.bookings.forEach((booking) => {
160 httpClient
161 .post('/bookings/delete/remotely/' + booking.id, {
162 skipEventHandler: true,
163 type: data.type,
164 token: booking.token,
165 })
166 .catch((e) => {
167 console.log(e.message)
168 })
169 })
170 }
171 }
172
173 return {
174 result: 'error',
175 steps: data.request.form.steps,
176 sidebar: data.request.form.sidebar,
177 }
178 }
179
180 if (settings.payments.mollie.cancelBooking && data.status === null) {
181 let bookings = []
182 if (data.response.type === 'package') {
183 bookings = data.response.package.map((p) => p.booking)
184 } else {
185 bookings = [data.response.booking].concat(data.response.recurring.map((r) => r.booking))
186 }
187
188 bookings.forEach((booking) => {
189 httpClient
190 .get(
191 '/bookings/cancel/' +
192 booking.id +
193 '&token=' +
194 booking.token +
195 '&type=' +
196 data.response.type +
197 '&fromForm=' +
198 true,
199 )
200 .catch((e) => {
201 console.log(e.message)
202 })
203 })
204
205 return {
206 result: 'canceled',
207 steps: data.request.form.steps,
208 sidebar: data.request.form.sidebar,
209 }
210 } else {
211 switch (data.status !== null ? data.status : 'paid') {
212 case 'canceled':
213 store.commit('booking/setError', window.wpAmeliaLabels['payment_canceled'])
214
215 return {
216 result: 'canceled',
217 steps: data.request.form.steps,
218 sidebar: data.request.form.sidebar,
219 }
220
221 case 'failed':
222 store.commit('booking/setError', useBookingError(data, store))
223
224 return {
225 result: 'error',
226 steps: data.request.form.steps,
227 sidebar: data.request.form.sidebar,
228 }
229
230 case 'paid':
231 switch (data.response.type) {
232 case 'appointment':
233 store.commit('booking/setBooked', useAppointmentCalendarData(store, data.response))
234
235 break
236
237 case 'package':
238 store.commit('booking/setBooked', usePackageCalendarData(store, data.response))
239
240 break
241
242 case 'event':
243 store.commit('eventBooking/setBooked', useEventCalendarData(store, data.response))
244
245 break
246 }
247
248 if (
249 !(
250 'request' in data &&
251 'form' in data.request &&
252 'shortcode' &&
253 data.request.form &&
254 'trigger' in data.request.form.shortcode &&
255 data.request.form.shortcode.trigger
256 )
257 ) {
258 useNotify(
259 store,
260 data.response,
261 () => {},
262 () => {},
263 )
264 }
265
266 return {
267 result: 'success',
268 steps: data.request.form.steps,
269 sidebar: data.request.form.sidebar,
270 }
271 }
272 }
273 }
274
275 export default useRestore
276