Skip to content

Commit 69570e1

Browse files
committed
refactor: Code cleanup
1 parent fec9bf5 commit 69570e1

File tree

3 files changed

+45
-32
lines changed

3 files changed

+45
-32
lines changed

src/VueDatePicker/components/DatePicker/DpCalendar.vue

+33-29
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
<div :class="calendarParentClass">
33
<div ref="calendarWrapRef" :class="calendarWrapClass" role="grid">
44
<div class="dp__calendar_header" role="row">
5-
<div v-if="weekNumbers" class="dp__calendar_header_item" role="columnheader">
5+
<div v-if="weekNumbers" class="dp__calendar_header_item" role="gridcell">
66
{{ weekNumName }}
77
</div>
88
<div
99
v-for="(dayVal, i) in weekDays"
1010
:key="i"
1111
class="dp__calendar_header_item"
12-
role="columnheader"
12+
role="gridcell"
1313
data-test="calendar-header"
1414
:aria-label="defaultedAriaLabels?.weekDay?.(i)"
1515
>
@@ -23,7 +23,7 @@
2323
<transition :name="transitionName" :css="!!transitions">
2424
<div v-if="showCalendar" class="dp__calendar" role="rowgroup" @mouseleave="isMouseDown = false">
2525
<div v-for="(week, weekInd) in calendarWeeks" :key="weekInd" class="dp__calendar_row" role="row">
26-
<div v-if="weekNumbers" class="dp__calendar_item dp__week_num" role="cell">
26+
<div v-if="weekNumbers" class="dp__calendar_item dp__week_num" role="gridcell">
2727
<div class="dp__cell_inner">
2828
{{ getWeekNum(week.days) }}
2929
</div>
@@ -258,38 +258,42 @@
258258
259259
const showDay = computed(() => (day: ICalendarDay) => (props.hideOffsetDates ? day.current : true));
260260
261+
const positionTooltip = async (el: HTMLElement, day: ICalendarDay) => {
262+
const { width, height } = el.getBoundingClientRect();
263+
showMakerTooltip.value = day.value;
264+
let defaultPosition: { left?: string; right?: string } = { left: `${width / 2}px` };
265+
let transform = -50;
266+
await nextTick();
267+
268+
if (activeTooltip.value[0]) {
269+
const { left, width: tpWidth } = activeTooltip.value[0].getBoundingClientRect();
270+
if (left < 0) {
271+
defaultPosition = { left: `0` };
272+
transform = 0;
273+
tpArrowStyle.value.left = `${width / 2}px`;
274+
}
275+
276+
if (window.innerWidth < left + tpWidth) {
277+
defaultPosition = { right: `0` };
278+
transform = 0;
279+
tpArrowStyle.value.left = `${tpWidth - width / 2}px`;
280+
}
281+
}
282+
283+
markerTooltipStyle.value = {
284+
bottom: `${height}px`,
285+
...defaultPosition,
286+
transform: `translateX(${transform}%)`,
287+
};
288+
};
289+
261290
const handleTooltip = async (day: UnwrapRef<ICalendarDay>, weekInd: number, dayInd: number) => {
262291
const el = unrefElement(dayRefs.value[weekInd][dayInd]);
263292
if (el) {
264293
if (day.marker?.customPosition && day.marker?.tooltip?.length) {
265294
markerTooltipStyle.value = day.marker.customPosition(el);
266295
} else {
267-
const { width, height } = el.getBoundingClientRect();
268-
showMakerTooltip.value = day.value;
269-
let defaultPosition: { left?: string; right?: string } = { left: `${width / 2}px` };
270-
let transform = -50;
271-
await nextTick();
272-
273-
if (activeTooltip.value[0]) {
274-
const { left, width: tpWidth } = activeTooltip.value[0].getBoundingClientRect();
275-
if (left < 0) {
276-
defaultPosition = { left: `0` };
277-
transform = 0;
278-
tpArrowStyle.value.left = `${width / 2}px`;
279-
}
280-
281-
if (window.innerWidth < left + tpWidth) {
282-
defaultPosition = { right: `0` };
283-
transform = 0;
284-
tpArrowStyle.value.left = `${tpWidth - width / 2}px`;
285-
}
286-
}
287-
288-
markerTooltipStyle.value = {
289-
bottom: `${height}px`,
290-
...defaultPosition,
291-
transform: `translateX(${transform}%)`,
292-
};
296+
await positionTooltip(el, day);
293297
}
294298
295299
emit('tooltip-open', day.marker);

tests/unit/behaviour.spec.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,15 @@ import {
2020

2121
import { resetDateTime } from '@/utils/date-utils';
2222

23-
import { clickCalendarDate, clickSelectBtn, getMonthName, hoverCalendarDate, openMenu, reOpenMenu } from '../utils';
23+
import {
24+
clickCalendarDate,
25+
clickSelectBtn,
26+
getMonthName,
27+
hoverCalendarDate,
28+
openMenu,
29+
padZero,
30+
reOpenMenu,
31+
} from '../utils';
2432
import { FlowStep } from '@/constants';
2533
import type { IMarker, TimeModel, TimeType } from '@/interfaces';
2634
import { type VueWrapper } from '@vue/test-utils';
@@ -108,7 +116,7 @@ describe('It should validate various picker scenarios', () => {
108116
const hours = getHours(today);
109117
const minutes = getMinutes(today);
110118

111-
const singleTime = `${hours < 10 ? `0${hours}` : hours}:${minutes < 10 ? `0${minutes}` : minutes}`;
119+
const singleTime = `${padZero(hours)}:${padZero(minutes)}`;
112120

113121
const input = dp.find('input');
114122
await input.setValue(singleTime);
@@ -146,7 +154,6 @@ describe('It should validate various picker scenarios', () => {
146154

147155
const hours = dp.find(`[data-test="hours-toggle-overlay-btn-0"]`);
148156
const minutes = dp.find(`[data-test="minutes-toggle-overlay-btn-0"]`);
149-
const padZero = (val: number) => (val < 10 ? `0${val}` : val);
150157

151158
expect(hours.text()).toEqual(`${padZero(modelValue.hours)}`);
152159
expect(minutes.text()).toEqual(`${padZero(modelValue.minutes)}`);

tests/utils.ts

+2
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,5 @@ export const hoverCalendarDate = async (dp: VueWrapper<any>, date: Date) => {
4141
export const clickSelectBtn = async (dp: VueWrapper<any>) => {
4242
await dp.find(`[data-test="select-button"]`).trigger('click');
4343
};
44+
45+
export const padZero = (val: number) => (val < 10 ? `0${val}` : val);

0 commit comments

Comments
 (0)