From 6c87001a0ea628ecf75f94f0dcc6de587ada4e07 Mon Sep 17 00:00:00 2001 From: Nithin David Thomas Date: Sat, 13 Mar 2021 11:44:28 +0530 Subject: [PATCH] Feat: Show working hours on widget (#1823) Feat: Display out of office message based on business hours Co-authored-by: Pranav Raj Sreepuram Co-authored-by: Sojan Jose --- app/javascript/shared/helpers/DateHelper.js | 11 +++ .../shared/helpers/specs/DateHelper.spec.js | 30 +++++++- .../widget/components/ChatHeader.vue | 3 +- .../widget/components/TeamAvailability.vue | 75 +++++++++++++++++-- app/javascript/widget/mixins/configMixin.js | 3 + .../widget/mixins/teamAvailabilityMixin.js | 10 --- app/views/widgets/show.html.erb | 6 +- spec/models/working_hour_spec.rb | 2 +- 8 files changed, 119 insertions(+), 21 deletions(-) delete mode 100644 app/javascript/widget/mixins/teamAvailabilityMixin.js diff --git a/app/javascript/shared/helpers/DateHelper.js b/app/javascript/shared/helpers/DateHelper.js index c137cee76..2cd178896 100644 --- a/app/javascript/shared/helpers/DateHelper.js +++ b/app/javascript/shared/helpers/DateHelper.js @@ -2,6 +2,7 @@ import fromUnixTime from 'date-fns/fromUnixTime'; import format from 'date-fns/format'; import isToday from 'date-fns/isToday'; import isYesterday from 'date-fns/isYesterday'; +import parseISO from 'date-fns/parseISO'; export const formatUnixDate = (date, dateFormat = 'MMM dd, yyyy') => { const unixDate = fromUnixTime(date); @@ -14,3 +15,13 @@ export const formatDate = ({ date, todayText, yesterdayText }) => { if (isYesterday(dateValue)) return yesterdayText; return date; }; + +export const buildDateFromTime = (hr, min, utcOffset, date = new Date()) => { + const today = format(date, 'yyyy-MM-dd'); + const timeString = `${today}T${hr}:${min}:00${utcOffset}`; + return parseISO(timeString); +}; + +export const formatDigitToString = val => { + return val > 9 ? `${val}` : `0${val}`; +}; diff --git a/app/javascript/shared/helpers/specs/DateHelper.spec.js b/app/javascript/shared/helpers/specs/DateHelper.spec.js index c89bb3ef1..283950ed1 100644 --- a/app/javascript/shared/helpers/specs/DateHelper.spec.js +++ b/app/javascript/shared/helpers/specs/DateHelper.spec.js @@ -1,4 +1,9 @@ -import { formatDate, formatUnixDate } from '../DateHelper'; +import { + formatDate, + formatUnixDate, + buildDateFromTime, + formatDigitToString, +} from '../DateHelper'; describe('#DateHelper', () => { it('should format unix date correctly without dateFormat', () => { @@ -39,4 +44,27 @@ describe('#DateHelper', () => { }) ).toEqual('Yesterday'); }); + + describe('#buildDate', () => { + it('returns correctly parsed date', () => { + const date = new Date(); + date.setFullYear(2021); + date.setMonth(2); + date.setDate(5); + + const result = buildDateFromTime(12, 15, '.465Z', date); + expect(result + '').toEqual( + 'Fri Mar 05 2021 12:15:00 GMT+0000 (Coordinated Universal Time)' + ); + }); + }); + + describe('#formatDigitToString', () => { + it('returns date compatabile string from number is less than 9', () => { + expect(formatDigitToString(8)).toEqual('08'); + }); + it('returns date compatabile string from number is greater than 9', () => { + expect(formatDigitToString(11)).toEqual('11'); + }); + }); }); diff --git a/app/javascript/widget/components/ChatHeader.vue b/app/javascript/widget/components/ChatHeader.vue index 9bc830edc..fa5890cdf 100644 --- a/app/javascript/widget/components/ChatHeader.vue +++ b/app/javascript/widget/components/ChatHeader.vue @@ -31,14 +31,13 @@ import { mapGetters } from 'vuex'; import HeaderActions from './HeaderActions'; import configMixin from 'widget/mixins/configMixin'; -import teamAvailabilityMixin from 'widget/mixins/teamAvailabilityMixin'; export default { name: 'ChatHeader', components: { HeaderActions, }, - mixins: [configMixin, teamAvailabilityMixin], + mixins: [configMixin], props: { avatarUrl: { type: String, diff --git a/app/javascript/widget/components/TeamAvailability.vue b/app/javascript/widget/components/TeamAvailability.vue index 3124cc963..4484336cf 100644 --- a/app/javascript/widget/components/TeamAvailability.vue +++ b/app/javascript/widget/components/TeamAvailability.vue @@ -1,15 +1,27 @@