touchSwipe
у вас есть в проекте.threshold
.const getPropByPath = (object, path) => {
const _path = Array.isArray(path) ?
path :
path.split('.');
if (object && _path.length) return getPropByPath(object[_path.shift()], _path);
return object;
};
const obj = {
a: {
b: 1,
c: {
d: 2
}
}
}
getPropByPath(obj, 'a.b'); // 1
getPropByPath(obj, 'a.c.d'); // 2
getPropByPath(obj, 'a.c'); // { d: 2 }
npm run build
, потом папку dist
из корня проекта скопировать куда-нибудь на VPS, настроить nginx (или другой) веб-сервер, чтобы он запросы по нужному вам URL перенаправлял на index.html
из той папки. JS API 3.0 работает только с ключами, у которых заполнено поле "Ограничение по HTTP Referer".
function timeAgo(input) {
const date = (input instanceof Date) ? input : new Date(input);
const formatter = new Intl.RelativeTimeFormat('ru');
const ranges = {
years: 3600 * 24 * 365,
months: 3600 * 24 * 30,
weeks: 3600 * 24 * 7,
days: 3600 * 24,
hours: 3600,
minutes: 60,
seconds: 1
};
const secondsElapsed = (date.getTime() - Date.now()) / 1000;
for (let key in ranges) {
if (ranges[key] < Math.abs(secondsElapsed)) {
const delta = secondsElapsed / ranges[key];
return formatter.format(Math.round(delta), key);
}
}
}
createApi.jsx
не видно импортов, но предположу, что дело в них:import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
/react
в конце импорта. window.dataLayer === undefined
(не существует). По информации из Яндекс Справки, при инициализации метрики нужно инициализировать window.dataLayer
:<script type="text/javascript">
// Инициализация кода счетчика
ym(XXXXXX, 'init', {
...
// Если настройка ecommerce включена при инициализации, то контейнером данных всегда будет window.dataLayer
// Если настройка включена через интерфейс, то название можно изменить в настройках счетчика
ecommerce: true
...
});
// Контейнер данных (JavaScript-массив) в глобальном пространстве имен (window)
window.dataLayer = window.dataLayer || [];
</script>
disabledOs
свойство children
у элементов не меняется, т. к. метод map
не мутирует переданный в него массив, а возвращает новый.disabledOs() {
const modifyElement = (el, isDisabled) => {
return {
...el,
...(el.children && {
children: el.children.map(c => modifyElement(c, isDisabled)),
}),
disabled: isDisabled,
};
};
return this.form.os.map(el => {
const isDisabled = !this.form.device_types.includes(el.device_type_id);
return modifyElement(el, isDisabled);
});
};
autofocus
и заканчивая анимацией.overflow: hidden
у .card-list
). Просто они расположены в столбик, который ограничен по высоте, при этом неактивные карточки занимают своё положение в документе даже при opacity: 0
. Вероятно, вы где-то пропустили часть логики или стилей, чтобы первая картинка заменялась на активную картинку. Поскольку у карточек в вашем примере размеры одинаковые, достаточно заменить position: relative
на position: absolute
у .card
.