fix(booking): responsive two-column modal layout and wrap days/times without scroll
This commit is contained in:
parent
ff95ff9138
commit
2d803fcd28
@ -349,3 +349,76 @@
|
|||||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---------- запись на приём: широкое окно в две колонки ----------
|
||||||
|
24 слота по 30 минут в одну колонку не помещались на экран ноутбука — окно приходилось прокручивать. */
|
||||||
|
.lead-modal--wide {
|
||||||
|
width: 920px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead-modal__form--split {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
||||||
|
grid-template-areas:
|
||||||
|
'contacts date'
|
||||||
|
'doctor time'
|
||||||
|
'comment time';
|
||||||
|
align-items: start;
|
||||||
|
column-gap: 32px;
|
||||||
|
row-gap: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* всё остальное (согласие, кнопка, подсказки) — на всю ширину под колонками */
|
||||||
|
.lead-modal__form--split > * {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead-modal__form--split > .lead-modal__contacts {
|
||||||
|
grid-area: contacts;
|
||||||
|
/* в половине окна имя и телефон рядом не помещаются — друг под другом */
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
row-gap: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead-modal__form--split > .lead-field--doctor {
|
||||||
|
grid-area: doctor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead-modal__form--split > .lead-field--comment {
|
||||||
|
grid-area: comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead-modal__form--split > .lead-field--date {
|
||||||
|
grid-area: date;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead-modal__form--split > .lead-field--time {
|
||||||
|
grid-area: time;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead-modal__form--split .lead-slot {
|
||||||
|
height: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* узкий экран: снова одна колонка */
|
||||||
|
@media (max-width: 960px) {
|
||||||
|
.lead-modal--wide {
|
||||||
|
width: 650px;
|
||||||
|
}
|
||||||
|
.lead-modal__form--split {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* телефон: слоты по 6 в ряд — 4 ряда вместо 6 */
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.lead-modal__form--split .lead-slots {
|
||||||
|
grid-template-columns: repeat(6, minmax(0, 1fr));
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
.lead-modal__form--split .lead-slot {
|
||||||
|
height: 36px;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -203,10 +203,20 @@ export default function LeadModal({ form = 'appointment', doctor, slot, service,
|
|||||||
};
|
};
|
||||||
|
|
||||||
const titleId = `${uid}-title`;
|
const titleId = `${uid}-title`;
|
||||||
|
// запись на приём: окно шире, чтобы дни и время помещались без прокрутки; форма заявки — в две колонки
|
||||||
|
// (контакты слева, дата и время справа)
|
||||||
|
const wide = form === 'appointment' && status.state !== 'done';
|
||||||
|
const split = wide && !native;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="lead-modal__backdrop" onMouseDown={(e) => e.target === e.currentTarget && onClose()}>
|
<div className="lead-modal__backdrop" onMouseDown={(e) => e.target === e.currentTarget && onClose()}>
|
||||||
<div className="lead-modal" role="dialog" aria-modal="true" aria-labelledby={titleId} ref={dialogRef}>
|
<div
|
||||||
|
className={`lead-modal${wide ? ' lead-modal--wide' : ''}`}
|
||||||
|
role="dialog"
|
||||||
|
aria-modal="true"
|
||||||
|
aria-labelledby={titleId}
|
||||||
|
ref={dialogRef}
|
||||||
|
>
|
||||||
<div className="lead-modal__head">
|
<div className="lead-modal__head">
|
||||||
<div className="lead-modal__titles">
|
<div className="lead-modal__titles">
|
||||||
<h2 id={titleId} className="lead-modal__title">
|
<h2 id={titleId} className="lead-modal__title">
|
||||||
@ -231,8 +241,8 @@ export default function LeadModal({ form = 'appointment', doctor, slot, service,
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<form className="lead-modal__form" onSubmit={submit} noValidate>
|
<form className={`lead-modal__form${split ? ' lead-modal__form--split' : ''}`} onSubmit={submit} noValidate>
|
||||||
<div className="lead-modal__row">
|
<div className="lead-modal__row lead-modal__contacts">
|
||||||
<label className="lead-field">
|
<label className="lead-field">
|
||||||
<span className="lead-field__label">Ваше имя</span>
|
<span className="lead-field__label">Ваше имя</span>
|
||||||
<input
|
<input
|
||||||
@ -260,7 +270,7 @@ export default function LeadModal({ form = 'appointment', doctor, slot, service,
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{needsDoctor && !(scoped && doctorsLoaded && doctorOptions.length === 0) && (
|
{needsDoctor && !(scoped && doctorsLoaded && doctorOptions.length === 0) && (
|
||||||
<label className="lead-field">
|
<label className="lead-field lead-field--doctor">
|
||||||
<span className="lead-field__label">Специалист</span>
|
<span className="lead-field__label">Специалист</span>
|
||||||
<span className="lead-field__select">
|
<span className="lead-field__select">
|
||||||
<select className="lead-field__control" value={values.doctorId} onChange={set('doctorId')}>
|
<select className="lead-field__control" value={values.doctorId} onChange={set('doctorId')}>
|
||||||
@ -284,7 +294,7 @@ export default function LeadModal({ form = 'appointment', doctor, slot, service,
|
|||||||
|
|
||||||
{form === 'appointment' && (
|
{form === 'appointment' && (
|
||||||
<>
|
<>
|
||||||
<label className="lead-field">
|
<label className="lead-field lead-field--date">
|
||||||
<span className="lead-field__label">Дата</span>
|
<span className="lead-field__label">Дата</span>
|
||||||
<span className="lead-field__select lead-field__select--date">
|
<span className="lead-field__select lead-field__select--date">
|
||||||
<input
|
<input
|
||||||
@ -297,7 +307,7 @@ export default function LeadModal({ form = 'appointment', doctor, slot, service,
|
|||||||
<img src={calendarIcon} alt="" width="18" height="18" />
|
<img src={calendarIcon} alt="" width="18" height="18" />
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<div className="lead-field">
|
<div className="lead-field lead-field--time">
|
||||||
<span className="lead-field__label" id={`${uid}-time`}>
|
<span className="lead-field__label" id={`${uid}-time`}>
|
||||||
Удобное время
|
Удобное время
|
||||||
</span>
|
</span>
|
||||||
@ -353,7 +363,7 @@ export default function LeadModal({ form = 'appointment', doctor, slot, service,
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{form !== 'callback' && (
|
{form !== 'callback' && (
|
||||||
<label className="lead-field">
|
<label className="lead-field lead-field--comment">
|
||||||
<span className="lead-field__label">{form === 'review' ? 'Текст отзыва' : 'Комментарий'}</span>
|
<span className="lead-field__label">{form === 'review' ? 'Текст отзыва' : 'Комментарий'}</span>
|
||||||
<textarea
|
<textarea
|
||||||
className="lead-field__control lead-field__textarea"
|
className="lead-field__control lead-field__textarea"
|
||||||
|
|||||||
@ -256,3 +256,16 @@
|
|||||||
.waitcall-step__back:hover {
|
.waitcall-step__back:hover {
|
||||||
color: var(--coral, #f05336);
|
color: var(--coral, #f05336);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Развёрнутый вид окна записи: все дни видны сразу (переносятся на следующую строку, а не уезжают
|
||||||
|
вправо), и всё свободное время дня — без прокрутки внутри списка. */
|
||||||
|
.native-booking__branches,
|
||||||
|
.native-booking__days {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
overflow-x: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.native-booking__times {
|
||||||
|
max-height: none;
|
||||||
|
overflow-y: visible;
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user