import {defineStore} from 'pinia' import {add, format, formatDistance} from "date-fns"; import {fr} from 'date-fns/locale'; const today = new Date(); const tomorrow = add(new Date(), { days: 1 }) const afterTomorrow = add(new Date(), { days: 2 }) let date = {collectExpress: null, deliveryExpress: null, collectFacteur: null, deliveryFacteur: null} const currentDay = format(today, 'e') //const isWeekEnd = (currentDay === '7' || currentDay === '8') if (format(today, 'HH') > 16) { date.collectExpress = date.deliveryExpress = tomorrow } else { date.collectExpress = date.deliveryExpress = today } date.collectFacteur = tomorrow date.deliveryFacteur = afterTomorrow if (currentDay === '5') // jeudi { date.deliveryFacteur = add(today, { days: 4 }) } else if (currentDay === '6') // vendredi { date.collectFacteur = add(today, { days: 3 }) date.deliveryFacteur = add(today, { days: 4 }) if (format(today, 'HH') > 17) { date.collectExpress = date.deliveryExpress = add(today, { days: 3 }) } } else if (currentDay === '7') // samedi { date.collectFacteur = add(today, { days: 2 }) date.deliveryFacteur = add(today, { days: 3 }) date.collectExpress = date.deliveryExpress = add(today, { days: 2 }) } else if (currentDay === '8') // dimanche ou 17 { date.collectExpress = date.deliveryExpress = tomorrow } const timestampConverter = (digit13) => digit13 / 1000 export const useMMCMStore = defineStore('counter', { state: () => ({ idSession: '', street: null, zipCode: null, city: null, productList: [], withPrescription: null, idProduct: null, dateDelivery: null, // 13 digit timestamp millisecond dateCollect: null, methodDelivery: 'Main propre', methodCollect: 'Main propre', timeSlot : '09h30-11h00', }), getters: { fullAddress: (state) => (state.street !== null) ? state.street + ' ' + state.zipCode + ' ' + state.city : null, deliveryMethod: (state) => state.productList.filter(p => p.id === state.idProduct)[0].name, deliveryMethodCode: (state) => state.productList.filter(p => p.id === state.idProduct)[0].ref, dateDeliveryString: (state) => new Date(state.dateDelivery).toLocaleDateString("fr-FR"), dateCollectString: (state) => new Date(state.dateCollect).toLocaleDateString("fr-FR"), displayTimeSlot: (state) => (state.productList.filter(p => p.id === state.idProduct)[0].ref === 'MMCM_EXPRESS') ? 'entre ' +state.timeSlot : 'entre 09h00-17h00', minDateForDelivery: (state) => (state.productList.filter(p => p.id === state.idProduct)[0].ref === 'MMCM_EXPRESS') ? date.deliveryExpress : date.deliveryFacteur, minDateForCollect: (state) => (state.productList.filter(p => p.id === state.idProduct)[0].ref === 'MMCM_EXPRESS') ? date.collectExpress : date.collectFacteur, needPrescriptionDateCollect: (state) => !!(state.productList.filter(p => p.id === state.idProduct)[0].ref === 'MMCM_FACTEUR' && state.withPrescription), dateDeliveryTimestampInSecond: (state) => timestampConverter(state.dateDelivery), dateCollectTimestampInSecond: (state) => timestampConverter(state.dateCollect), msgDelivery: (state) => { //console.log(formatDistance(date.deliveryExpress, today)) let arr = [] if(state.productList.length === 2) { if (date.deliveryExpress === today) { arr.push('Dès aujourd\'hui en moins de 2h') } else { arr.push('A partir de ' + format(date.deliveryExpress, 'EEEE', {locale: fr}) + ' en moins de 2h') } } const useFacteurDate = (state.withPrescription) ? date.deliveryFacteur : date.collectFacteur; if (useFacteurDate === tomorrow) { arr.push('A partir de demain entre 9h et 17h') } else { arr.push('A partir de ' + format(useFacteurDate, 'EEEE', {locale: fr}) + ' entre 9h et 17h') } return arr }, stepFacteur: (state) => { let step = {dayOne: false, dayTwo: false} if (state.withPrescription) { step.dayOne = format(date.collectFacteur, 'dd/MM/yyyy', {locale: fr}) step.dayTwo = format(date.deliveryFacteur, 'dd/MM/yyyy', {locale: fr}) } return step } }, actions: { setIdSession(idSession) { this.idSession = idSession }, setStreet(street) { this.street = street }, setZipCode(zipCode) { this.zipCode = zipCode }, setCity(city) { this.city = city }, setProductList(array) { this.productList = array }, setPrescription(bool) { this.withPrescription = bool }, setIdProduct(id) { this.idProduct = id }, setTimeSlot(timeSlot) { this.timeSlot = timeSlot } }, })