@sentecacommerce-theme/lib 0.12.95 → 0.12.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/cjs/listing/api/queries/useListingQuery.js +1 -1
  2. package/dist/cjs/listing/hooks/useListingMeta.js +49 -40
  3. package/dist/cjs/listing/hooks/useSlideFilter.js +24 -3
  4. package/dist/cjs/listing/ssr/prefetchCategories.js +4 -5
  5. package/dist/cjs/listing/ssr/prefetchPredicate.js +4 -4
  6. package/dist/cjs/seo/components/TranslationsMeta/index.js +58 -0
  7. package/dist/cjs/seo/components/index.js +12 -0
  8. package/dist/cjs/seo/hooks/index.js +14 -0
  9. package/dist/cjs/seo/hooks/useSeoTranslations.js +90 -0
  10. package/dist/cjs/ui/components/GridStyles.js +2 -2
  11. package/dist/cjs/ui/components/RangeSliderInput.js +14 -1
  12. package/dist/esm/listing/api/queries/useListingQuery.js +1 -1
  13. package/dist/esm/listing/hooks/useListingMeta.js +49 -40
  14. package/dist/esm/listing/hooks/useSlideFilter.js +24 -3
  15. package/dist/esm/listing/ssr/prefetchCategories.js +5 -6
  16. package/dist/esm/listing/ssr/prefetchPredicate.js +4 -4
  17. package/dist/esm/seo/components/TranslationsMeta/index.js +48 -0
  18. package/dist/esm/seo/components/index.js +1 -0
  19. package/dist/esm/seo/hooks/index.js +1 -0
  20. package/dist/esm/seo/hooks/useSeoTranslations.js +79 -0
  21. package/dist/esm/ui/components/GridStyles.js +2 -2
  22. package/dist/esm/ui/components/RangeSliderInput.js +14 -1
  23. package/dist/types/listing/hooks/useSlideFilter.d.ts +4 -0
  24. package/dist/types/listing/types.d.ts +10 -0
  25. package/dist/types/seo/components/TranslationsMeta/index.d.ts +1 -0
  26. package/dist/types/seo/components/index.d.ts +1 -0
  27. package/dist/types/seo/hooks/index.d.ts +1 -0
  28. package/dist/types/seo/hooks/useSeoTranslations.d.ts +24 -0
  29. package/dist/types/ui/components/GridStyles.d.ts +2 -1
  30. package/dist/types/ui/components/RangeSliderInput.d.ts +2 -1
  31. package/package.json +4 -4
@@ -137,7 +137,7 @@ var useListingQuery = function() {
137
137
  predicate: predicate,
138
138
  sort: sort,
139
139
  postFilter: postFilter,
140
- slug: slug,
140
+ slug: aliasedSlug,
141
141
  offset: offset
142
142
  });
143
143
  return (0, _reactQuery).useQuery(queryKeys, _asyncToGenerator(_regeneratorRuntime.default.mark(function _callee() {
@@ -8,7 +8,6 @@ var _utils = require("../../utils");
8
8
  var _assetsToMap = require("../../utils/assetsToMap");
9
9
  var _router = require("next/router");
10
10
  var _utils1 = require("../utils");
11
- var _types = require("../types");
12
11
  var _index = require("../../index");
13
12
  var _useListingFilters = require("./useListingFilters");
14
13
  var _useListingCategories = require("./useListingCategories");
@@ -32,6 +31,33 @@ function _iterableToArray(iter) {
32
31
  function _nonIterableSpread() {
33
32
  throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
34
33
  }
34
+ function _objectWithoutProperties(source, excluded) {
35
+ if (source == null) return {};
36
+ var target = _objectWithoutPropertiesLoose(source, excluded);
37
+ var key, i;
38
+ if (Object.getOwnPropertySymbols) {
39
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
40
+ for(i = 0; i < sourceSymbolKeys.length; i++){
41
+ key = sourceSymbolKeys[i];
42
+ if (excluded.indexOf(key) >= 0) continue;
43
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
44
+ target[key] = source[key];
45
+ }
46
+ }
47
+ return target;
48
+ }
49
+ function _objectWithoutPropertiesLoose(source, excluded) {
50
+ if (source == null) return {};
51
+ var target = {};
52
+ var sourceKeys = Object.keys(source);
53
+ var key, i;
54
+ for(i = 0; i < sourceKeys.length; i++){
55
+ key = sourceKeys[i];
56
+ if (excluded.indexOf(key) >= 0) continue;
57
+ target[key] = source[key];
58
+ }
59
+ return target;
60
+ }
35
61
  function _toConsumableArray(arr) {
36
62
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
37
63
  }
@@ -90,74 +116,57 @@ var useListingMeta = function() {
90
116
  };
91
117
  exports.useListingMeta = useListingMeta;
92
118
  function processDisplayName(slug, config, name, breadcrumb, router, aggData, categoriesData) {
119
+ var ref, ref5;
93
120
  var listingName = (0, _utils).getTranslatableField(name);
94
121
  var brandName = getBrandName(router, aggData);
95
122
  var categoryName = getCategoryName(router, categoriesData);
96
123
  var type = (0, _utils1).getListingPageType(router, slug, config);
97
- if (type === _types.ListingTypesEnum.AttrPage) {
98
- return "Всичко за ".concat(config.titleAliases[slug]);
99
- }
100
- if (router === null || router === void 0 ? void 0 : router.query.cat) {
101
- var attribute = (0, _utils).getTranslatableField(breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.label);
102
- if (type === _types.ListingTypesEnum.Category) {
103
- if (!brandName) {
104
- return "".concat(listingName, " за ").concat(attribute);
105
- }
106
- return "".concat(listingName, " за ").concat(attribute, " от ").concat(brandName);
107
- }
108
- if (type === _types.ListingTypesEnum.Brand) {
109
- if (!categoryName) {
110
- return "Всички продукти от ".concat(listingName, " за ").concat(attribute);
111
- }
112
- return "".concat(categoryName, " от ").concat(listingName, " за ").concat(attribute);
113
- }
114
- }
115
- if (type === _types.ListingTypesEnum.Category && brandName) {
116
- return "".concat(listingName, " от ").concat(brandName);
117
- }
118
- if (type === _types.ListingTypesEnum.Brand) {
119
- if (!categoryName) {
120
- return "Всички продукти от ".concat(listingName);
121
- }
122
- return "".concat(categoryName, " от ").concat(listingName);
123
- }
124
- if (type === _types.ListingTypesEnum.Search && (router === null || router === void 0 ? void 0 : router.query.search)) {
125
- return "".concat(listingName, " от \"").concat(router.query.search, "\"");
126
- }
127
- return listingName;
124
+ var getTitle = config.getTitle, rest = _objectWithoutProperties(config, [
125
+ "getTitle"
126
+ ]);
127
+ var title = getTitle === null || getTitle === void 0 ? void 0 : getTitle(type, rest, {
128
+ category: categoryName,
129
+ brand: brandName,
130
+ defaultName: listingName,
131
+ attribute: (ref = config.titleAliases) === null || ref === void 0 ? void 0 : ref[slug],
132
+ childAttribute: (0, _utils).getTranslatableField(breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.label),
133
+ search: router === null || router === void 0 ? void 0 : (ref5 = router.query) === null || ref5 === void 0 ? void 0 : ref5.search,
134
+ isWithAttribute: Boolean(router === null || router === void 0 ? void 0 : router.query.cat)
135
+ });
136
+ return title || listingName;
128
137
  }
129
138
  function getFilterByType(filterType, router) {
130
139
  var filterId = '';
131
140
  if (Array.isArray(router === null || router === void 0 ? void 0 : router.query.filter)) {
132
- var ref, ref5;
141
+ var ref, ref6;
133
142
  var filters = (ref = router === null || router === void 0 ? void 0 : router.query.filter) === null || ref === void 0 ? void 0 : ref.filter(function(x) {
134
143
  return x === null || x === void 0 ? void 0 : x.includes(filterType);
135
144
  });
136
145
  if ((filters === null || filters === void 0 ? void 0 : filters.length) && filters.length > 1) {
137
146
  return '';
138
147
  }
139
- var filterTerm = (ref5 = /\d+/.exec((filters === null || filters === void 0 ? void 0 : filters[0]) || '')) === null || ref5 === void 0 ? void 0 : ref5[0];
148
+ var filterTerm = (ref6 = /\d+/.exec((filters === null || filters === void 0 ? void 0 : filters[0]) || '')) === null || ref6 === void 0 ? void 0 : ref6[0];
140
149
  if (!filterTerm) return '';
141
150
  filterId = filterTerm;
142
151
  } else {
143
- var ref6, ref7, ref8;
144
- var isFiltered = router === null || router === void 0 ? void 0 : (ref6 = router.query) === null || ref6 === void 0 ? void 0 : (ref7 = ref6.filter) === null || ref7 === void 0 ? void 0 : ref7.includes(filterType);
152
+ var ref7, ref8, ref9;
153
+ var isFiltered = router === null || router === void 0 ? void 0 : (ref7 = router.query) === null || ref7 === void 0 ? void 0 : (ref8 = ref7.filter) === null || ref8 === void 0 ? void 0 : ref8.includes(filterType);
145
154
  if (!isFiltered) {
146
155
  return '';
147
156
  }
148
- filterId = (ref8 = /(\w+)-(\d+)/.exec(router === null || router === void 0 ? void 0 : router.query.filter)) === null || ref8 === void 0 ? void 0 : ref8[0];
157
+ filterId = (ref9 = /(\w+)-(\d+)/.exec(router === null || router === void 0 ? void 0 : router.query.filter)) === null || ref9 === void 0 ? void 0 : ref9[0];
149
158
  }
150
159
  return filterId;
151
160
  }
152
161
  function getBrandName(router, filtersData) {
153
- var ref, ref9, ref10;
162
+ var ref, ref10, ref11;
154
163
  var brandId = getFilterByType('brand', router);
155
164
  var brand = (ref = filtersData === null || filtersData === void 0 ? void 0 : filtersData.find(function(x) {
156
165
  return x.name === 'Brands';
157
- })) === null || ref === void 0 ? void 0 : (ref9 = ref.items) === null || ref9 === void 0 ? void 0 : ref9.find(function(x) {
166
+ })) === null || ref === void 0 ? void 0 : (ref10 = ref.items) === null || ref10 === void 0 ? void 0 : ref10.find(function(x) {
158
167
  return x.data.key === brandId;
159
168
  });
160
- return (0, _utils).getTranslatableField(brand === null || brand === void 0 ? void 0 : (ref10 = brand.meta) === null || ref10 === void 0 ? void 0 : ref10.name);
169
+ return (0, _utils).getTranslatableField(brand === null || brand === void 0 ? void 0 : (ref11 = brand.meta) === null || ref11 === void 0 ? void 0 : ref11.name);
161
170
  }
162
171
  function getCategoryName(router, categories) {
163
172
  var categoryId = getFilterByType('category', router);
@@ -56,7 +56,7 @@ function _unsupportedIterableToArray(o, minLen) {
56
56
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
57
57
  }
58
58
  var useSlideFilter = function(filterName, min, max) {
59
- var ref;
59
+ var ref3;
60
60
  var router = (0, _router).useRouter();
61
61
  var meta = (0, _).useListingConfig().meta;
62
62
  var slug = (0, _index).useListingAlias(meta).slug;
@@ -71,7 +71,7 @@ var useSlideFilter = function(filterName, min, max) {
71
71
  }
72
72
  if (allFilters.includes(filterQuery)) return allFilters;
73
73
  };
74
- var filter = (ref = getFilter()) === null || ref === void 0 ? void 0 : ref.replace(filterQuery, '');
74
+ var filter = (ref3 = getFilter()) === null || ref3 === void 0 ? void 0 : ref3.replace(filterQuery, '');
75
75
  var ref1 = _slicedToArray(filter ? filter.split(',') : [
76
76
  min,
77
77
  max
@@ -81,9 +81,29 @@ var useSlideFilter = function(filterName, min, max) {
81
81
  to: +to || max
82
82
  }), 2), state = ref2[0], setState = ref2[1];
83
83
  var timeoutRef = (0, _react).useRef();
84
- var updateValue = (0, _react).useCallback(function(data) {
84
+ var getFormattedPriceRange = function(data) {
85
85
  var formattedFrom = Math.min(Math.max(data.from, min), data.to);
86
86
  var formattedTo = Math.max(data.from, Math.min(data.to, max));
87
+ return {
88
+ formattedFrom: formattedFrom,
89
+ formattedTo: formattedTo
90
+ };
91
+ };
92
+ var updateValue = (0, _react).useCallback(function(data) {
93
+ var ref = getFormattedPriceRange(data), formattedFrom = ref.formattedFrom, formattedTo = ref.formattedTo;
94
+ setState({
95
+ from: formattedFrom,
96
+ to: formattedTo
97
+ });
98
+ }, [
99
+ filterName,
100
+ max,
101
+ min,
102
+ router,
103
+ slug
104
+ ]);
105
+ var applyFilter = (0, _react).useCallback(function(data) {
106
+ var ref = getFormattedPriceRange(data), formattedFrom = ref.formattedFrom, formattedTo = ref.formattedTo;
87
107
  clearTimeout(timeoutRef.current);
88
108
  timeoutRef.current = setTimeout(function() {
89
109
  router.push((0, _utils).createAggregateQuery((0, _utils1).getListingPageType(router, slug, meta), router.query.slug, {
@@ -105,6 +125,7 @@ var useSlideFilter = function(filterName, min, max) {
105
125
  ]);
106
126
  return {
107
127
  value: state,
128
+ applyFilter: applyFilter,
108
129
  updateValue: updateValue
109
130
  };
110
131
  };
@@ -45,7 +45,7 @@ function prefetchCategories(queryCache, router, predicate, aggregates, config) {
45
45
  }
46
46
  function _prefetchCategories() {
47
47
  _prefetchCategories = _asyncToGenerator(_regeneratorRuntime.default.mark(function _callee(queryCache, router, predicate, aggregates, config) {
48
- var aggregateKeys, aliasedSlug, slug, query, response;
48
+ var aggregateKeys, aliasedSlug, query, response;
49
49
  return _regeneratorRuntime.default.wrap(function _callee$(_ctx) {
50
50
  while(1)switch(_ctx.prev = _ctx.next){
51
51
  case 0:
@@ -54,7 +54,6 @@ function _prefetchCategories() {
54
54
  router: router,
55
55
  config: config
56
56
  });
57
- slug = (0, _utils).getSlug(router, aliasedSlug);
58
57
  query = (0, _api).prepareAggregateQuery({
59
58
  request: _api.AggregateRequestEnum.Categories,
60
59
  router: router,
@@ -64,9 +63,9 @@ function _prefetchCategories() {
64
63
  postFilter: undefined,
65
64
  config: config
66
65
  });
67
- _ctx.next = 6;
66
+ _ctx.next = 5;
68
67
  return (0, _sdk).CatalogAggregate(query);
69
- case 6:
68
+ case 5:
70
69
  response = _ctx.sent;
71
70
  queryCache.setQueryData([
72
71
  _api.AggregateRequestEnum.Categories,
@@ -77,7 +76,7 @@ function _prefetchCategories() {
77
76
  staleTime: 30000
78
77
  });
79
78
  return _ctx.abrupt("return", response);
80
- case 9:
79
+ case 8:
81
80
  case "end":
82
81
  return _ctx.stop();
83
82
  }
@@ -44,20 +44,20 @@ function prefetchPredicate(queryCache, router, config) {
44
44
  }
45
45
  function _prefetchPredicate() {
46
46
  _prefetchPredicate = _asyncToGenerator(_regeneratorRuntime.default.mark(function _callee(queryCache, router, config) {
47
- var attribute, aliasedSlug, slug, data;
47
+ var aliasedSlug, slug, data, attribute;
48
48
  return _regeneratorRuntime.default.wrap(function _callee$(_ctx) {
49
49
  while(1)switch(_ctx.prev = _ctx.next){
50
50
  case 0:
51
- attribute = router.query.cat && router.query.slug;
52
51
  aliasedSlug = (0, _utils).getListingAlias({
53
52
  router: router,
54
53
  config: config
55
54
  });
56
55
  slug = (0, _utils).getSlug(router, aliasedSlug);
57
- _ctx.next = 5;
56
+ _ctx.next = 4;
58
57
  return (0, _api).processPredicateRequest(slug, router, aliasedSlug);
59
- case 5:
58
+ case 4:
60
59
  data = _ctx.sent;
60
+ attribute = router.query.cat && aliasedSlug;
61
61
  queryCache.setQueryData([
62
62
  _api.ListingQueryKeysEnum.usePredicate,
63
63
  slug,
@@ -0,0 +1,58 @@
1
+ Object.defineProperty(exports, "__esModule", {
2
+ value: true
3
+ });
4
+ exports.TranslationsMeta = void 0;
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _useSeoTranslations = require("../../hooks/useSeoTranslations");
7
+ var _head = _interopRequireDefault(require("next/head"));
8
+ var _router = require("next/router");
9
+ function _extends() {
10
+ _extends = Object.assign || function(target) {
11
+ for(var i = 1; i < arguments.length; i++){
12
+ var source = arguments[i];
13
+ for(var key in source){
14
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
15
+ target[key] = source[key];
16
+ }
17
+ }
18
+ }
19
+ return target;
20
+ };
21
+ return _extends.apply(this, arguments);
22
+ }
23
+ function _interopRequireDefault(obj) {
24
+ return obj && obj.__esModule ? obj : {
25
+ default: obj
26
+ };
27
+ }
28
+ var TranslationsMeta = function() {
29
+ var ref = (0, _useSeoTranslations).useSeoTranslations(), translationsMap = ref.translationsMap, allLocales = ref.allLocales, defaultLocale = ref.defaultLocale;
30
+ var router = (0, _router).useRouter();
31
+ var defaultTranslation = translationsMap[defaultLocale];
32
+ var isError = router.route === '/404' || router.route === '/_error';
33
+ if (isError) return null;
34
+ var domain = defaultTranslation === null || defaultTranslation === void 0 ? void 0 : defaultTranslation.domain;
35
+ return(/*#__PURE__*/ _react.default.createElement(_head.default, null, allLocales === null || allLocales === void 0 ? void 0 : allLocales.map(function(locale) {
36
+ var translation = translationsMap === null || translationsMap === void 0 ? void 0 : translationsMap[locale];
37
+ var href = translation === null || translation === void 0 ? void 0 : translation.slug;
38
+ // go to the same page but with the right locale.
39
+ // This is for pages that does not have a translated slug
40
+ // example: /checkout -> /en/checkout, /ro/checkout
41
+ if (!href) href = "/".concat(locale).concat(router.asPath);
42
+ return(/*#__PURE__*/ _react.default.createElement("link", _extends({
43
+ rel: "alternate"
44
+ }, {
45
+ hreflang: locale
46
+ }, {
47
+ href: domain + href,
48
+ key: 'Translation__' + href
49
+ })));
50
+ }), defaultTranslation && /*#__PURE__*/ _react.default.createElement("link", _extends({
51
+ rel: "alternate"
52
+ }, {
53
+ hreflang: 'x-default'
54
+ }, {
55
+ href: "".concat(domain).concat(defaultTranslation === null || defaultTranslation === void 0 ? void 0 : defaultTranslation.slug)
56
+ }))));
57
+ };
58
+ exports.TranslationsMeta = TranslationsMeta;
@@ -74,6 +74,18 @@ Object.keys(_hiddenBreadcrumb).forEach(function(key) {
74
74
  }
75
75
  });
76
76
  });
77
+ var _translationsMeta = _interopRequireWildcard(require("./TranslationsMeta"));
78
+ Object.keys(_translationsMeta).forEach(function(key) {
79
+ if (key === "default" || key === "__esModule") return;
80
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
81
+ if (key in exports && exports[key] === _translationsMeta[key]) return;
82
+ Object.defineProperty(exports, key, {
83
+ enumerable: true,
84
+ get: function() {
85
+ return _translationsMeta[key];
86
+ }
87
+ });
88
+ });
77
89
  function _interopRequireWildcard(obj) {
78
90
  if (obj && obj.__esModule) {
79
91
  return obj;
@@ -1,9 +1,11 @@
1
1
  Object.defineProperty(exports, "__esModule", {
2
2
  value: true
3
3
  });
4
+ var _exportNames = {};
4
5
  var _useSEOBreadcrumb = _interopRequireWildcard(require("./useSEOBreadcrumb"));
5
6
  Object.keys(_useSEOBreadcrumb).forEach(function(key) {
6
7
  if (key === "default" || key === "__esModule") return;
8
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
7
9
  if (key in exports && exports[key] === _useSEOBreadcrumb[key]) return;
8
10
  Object.defineProperty(exports, key, {
9
11
  enumerable: true,
@@ -12,6 +14,18 @@ Object.keys(_useSEOBreadcrumb).forEach(function(key) {
12
14
  }
13
15
  });
14
16
  });
17
+ var _useSeoTranslations = _interopRequireWildcard(require("./useSeoTranslations"));
18
+ Object.keys(_useSeoTranslations).forEach(function(key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
21
+ if (key in exports && exports[key] === _useSeoTranslations[key]) return;
22
+ Object.defineProperty(exports, key, {
23
+ enumerable: true,
24
+ get: function() {
25
+ return _useSeoTranslations[key];
26
+ }
27
+ });
28
+ });
15
29
  function _interopRequireWildcard(obj) {
16
30
  if (obj && obj.__esModule) {
17
31
  return obj;
@@ -0,0 +1,90 @@
1
+ Object.defineProperty(exports, "__esModule", {
2
+ value: true
3
+ });
4
+ exports.useSeoTranslations = exports.SeoTranslationsProvider = void 0;
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _router = require("next/router");
7
+ function _defineProperty(obj, key, value) {
8
+ if (key in obj) {
9
+ Object.defineProperty(obj, key, {
10
+ value: value,
11
+ enumerable: true,
12
+ configurable: true,
13
+ writable: true
14
+ });
15
+ } else {
16
+ obj[key] = value;
17
+ }
18
+ return obj;
19
+ }
20
+ function _interopRequireDefault(obj) {
21
+ return obj && obj.__esModule ? obj : {
22
+ default: obj
23
+ };
24
+ }
25
+ function _objectSpread(target) {
26
+ for(var i = 1; i < arguments.length; i++){
27
+ var source = arguments[i] != null ? arguments[i] : {};
28
+ var ownKeys = Object.keys(source);
29
+ if (typeof Object.getOwnPropertySymbols === "function") {
30
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
31
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
32
+ }));
33
+ }
34
+ ownKeys.forEach(function(key) {
35
+ _defineProperty(target, key, source[key]);
36
+ });
37
+ }
38
+ return target;
39
+ }
40
+ var SeoTranslationsContext = /*#__PURE__*/ _react.default.createContext({});
41
+ var SeoTranslationsProvider = function(param) {
42
+ var children = param.children, translations = param.translations, defaultLocale = param.defaultLocale, localesMap = param.localesMap;
43
+ var router = (0, _router).useRouter();
44
+ var currentLocale = router.locale;
45
+ var currentPath = router.asPath;
46
+ var data1 = _react.default.useMemo(function() {
47
+ if (!translations) translations = {};
48
+ translations[currentLocale] = {
49
+ slug: currentPath.split('?')[0].replace("/".concat(currentLocale), ''),
50
+ title: '',
51
+ id: Date.now().toString()
52
+ };
53
+ var map = Object.keys(translations || {}).filter(function(lang) {
54
+ return Boolean(localesMap[lang]);
55
+ }).reduce(function(acc, lang) {
56
+ var ref;
57
+ var data = translations === null || translations === void 0 ? void 0 : translations[lang];
58
+ var localeData = localesMap[lang];
59
+ var isDefault = defaultLocale === lang;
60
+ var isFrontPage = data.slug === '/';
61
+ var prefix = ((ref = data.slug) === null || ref === void 0 ? void 0 : ref[0]) === '/' ? '' : '/';
62
+ var slug = "".concat(isDefault ? '' : "/".concat(lang)).concat(prefix).concat(isFrontPage ? '' : data.slug);
63
+ return _objectSpread({}, acc, _defineProperty({}, lang, {
64
+ slug: slug,
65
+ locale: lang,
66
+ isDefault: isDefault,
67
+ domain: "https://".concat(localeData.domain)
68
+ }));
69
+ }, {});
70
+ return {
71
+ translationsMap: map,
72
+ defaultLocale: defaultLocale,
73
+ allLocales: Object.keys(localesMap)
74
+ };
75
+ }, [
76
+ defaultLocale,
77
+ translations,
78
+ localesMap,
79
+ currentLocale,
80
+ currentPath
81
+ ]);
82
+ return(/*#__PURE__*/ _react.default.createElement(SeoTranslationsContext.Provider, {
83
+ value: data1
84
+ }, children));
85
+ };
86
+ exports.SeoTranslationsProvider = SeoTranslationsProvider;
87
+ var useSeoTranslations = function() {
88
+ return _react.default.useContext(SeoTranslationsContext) || {};
89
+ };
90
+ exports.useSeoTranslations = useSeoTranslations;
@@ -9,7 +9,7 @@ function _interopRequireDefault(obj) {
9
9
  };
10
10
  }
11
11
  var GridStyles = function(param) {
12
- var spaceX = param.spaceX, breakpoints = param.breakpoints, _remSize = param.remSize, remSize = _remSize === void 0 ? 10 : _remSize;
12
+ var spaceX = param.spaceX, breakpoints = param.breakpoints, _remSize = param.remSize, remSize = _remSize === void 0 ? 10 : _remSize, _spaceBetweenSections = param.spaceBetweenSections, spaceBetweenSections = _spaceBetweenSections === void 0 ? 80 : _spaceBetweenSections;
13
13
  function getSize(width) {
14
14
  return "min-width: calc(".concat(width, "% - ").concat(spaceX / remSize, "rem);") + "max-width: calc(".concat(width, "% - ").concat(spaceX / remSize, "rem);") + "margin: 0 ".concat(spaceX / 2 / remSize, "rem;");
15
15
  }
@@ -29,7 +29,7 @@ var GridStyles = function(param) {
29
29
  }, '');
30
30
  return(/*#__PURE__*/ _react.default.createElement("style", {
31
31
  dangerouslySetInnerHTML: {
32
- __html: "\n .Page--row {\n display: flex;\n display: -webkit-flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n margin: 0 -".concat(spaceX / remSize / 2, "rem;\n }\n\n .Page__section {\n padding-bottom: 8rem;\n }\n\n .Page--col {\n display: block;\n width: 100%;\n }\n \n .size-default-inherit {\n width: 100%;\n }\n ").concat(queries, "\n ")
32
+ __html: "\n .Page--row {\n display: flex;\n display: -webkit-flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n margin: 0 -".concat(spaceX / remSize / 2, "rem;\n }\n\n .Page__section {\n padding-bottom: ").concat(spaceBetweenSections / remSize, "rem;\n }\n\n .Page--col {\n display: block;\n width: 100%;\n }\n \n .size-default-inherit {\n width: 100%;\n }\n ").concat(queries, "\n ")
33
33
  }
34
34
  }));
35
35
  };
@@ -148,7 +148,7 @@ var RangeSlideClasses = {
148
148
  };
149
149
  exports.RangeSlideClasses = RangeSlideClasses;
150
150
  var RangeSliderInput = function(param) {
151
- var defaultValue = param.defaultValue, onChange = param.onChange, _min = param.min, min = _min === void 0 ? 0 : _min, _max = param.max, max = _max === void 0 ? 100 : _max, _step = param.step, step = _step === void 0 ? 1 : _step;
151
+ var defaultValue = param.defaultValue, onChange = param.onChange, onSlide = param.onSlide, _min = param.min, min = _min === void 0 ? 0 : _min, _max = param.max, max = _max === void 0 ? 100 : _max, _step = param.step, step = _step === void 0 ? 1 : _step;
152
152
  var ref1 = _slicedToArray((0, _react).useState(defaultValue), 2), value = ref1[0], setValue = ref1[1];
153
153
  var inputLeftRef = _react.default.useRef(null);
154
154
  var inputRightRef = _react.default.useRef(null);
@@ -161,6 +161,17 @@ var RangeSliderInput = function(param) {
161
161
  }, [
162
162
  defaultValue
163
163
  ]);
164
+ var onSlideGeneric = function() {
165
+ var inputLeft = inputLeftRef.current;
166
+ var inputRight = inputRightRef.current;
167
+ if (!inputLeft || !inputRight) return;
168
+ var leftValue = Math.min(Number(inputLeft.value), Number(inputRight.value) - 1);
169
+ var rightValue = Math.max(Number(inputRight.value), Number(inputLeft.value) + 1);
170
+ onSlide === null || onSlide === void 0 ? void 0 : onSlide({
171
+ left: leftValue,
172
+ right: rightValue
173
+ });
174
+ };
164
175
  var updateLeftValue = (0, _react).useCallback(function() {
165
176
  var inputLeft = inputLeftRef.current;
166
177
  var inputRight = inputRightRef.current;
@@ -169,6 +180,7 @@ var RangeSliderInput = function(param) {
169
180
  setValue(_objectSpread({}, value, {
170
181
  left: leftValue
171
182
  }));
183
+ onSlideGeneric();
172
184
  }, [
173
185
  setValue,
174
186
  value
@@ -181,6 +193,7 @@ var RangeSliderInput = function(param) {
181
193
  setValue(_objectSpread({}, value, {
182
194
  right: rightValue
183
195
  }));
196
+ onSlideGeneric();
184
197
  }, [
185
198
  setValue,
186
199
  value
@@ -126,7 +126,7 @@ export var useListingQuery = function() {
126
126
  predicate: predicate,
127
127
  sort: sort,
128
128
  postFilter: postFilter,
129
- slug: slug,
129
+ slug: aliasedSlug,
130
130
  offset: offset
131
131
  });
132
132
  return useQuery(queryKeys, _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
@@ -4,7 +4,6 @@ import { customFieldsToMap, escape, getTranslatableField } from '../../utils';
4
4
  import { assetsFieldsToMap } from '../../utils/assetsToMap';
5
5
  import { useRouter } from 'next/router';
6
6
  import { getListingPageType } from '../utils';
7
- import { ListingTypesEnum } from '../types';
8
7
  import { useListingAlias } from '../../index';
9
8
  import { useListingFilters } from './useListingFilters';
10
9
  import { useListingCategories } from './useListingCategories';
@@ -23,6 +22,33 @@ function _iterableToArray(iter) {
23
22
  function _nonIterableSpread() {
24
23
  throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
25
24
  }
25
+ function _objectWithoutProperties(source, excluded) {
26
+ if (source == null) return {};
27
+ var target = _objectWithoutPropertiesLoose(source, excluded);
28
+ var key, i;
29
+ if (Object.getOwnPropertySymbols) {
30
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
31
+ for(i = 0; i < sourceSymbolKeys.length; i++){
32
+ key = sourceSymbolKeys[i];
33
+ if (excluded.indexOf(key) >= 0) continue;
34
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
35
+ target[key] = source[key];
36
+ }
37
+ }
38
+ return target;
39
+ }
40
+ function _objectWithoutPropertiesLoose(source, excluded) {
41
+ if (source == null) return {};
42
+ var target = {};
43
+ var sourceKeys = Object.keys(source);
44
+ var key, i;
45
+ for(i = 0; i < sourceKeys.length; i++){
46
+ key = sourceKeys[i];
47
+ if (excluded.indexOf(key) >= 0) continue;
48
+ target[key] = source[key];
49
+ }
50
+ return target;
51
+ }
26
52
  function _toConsumableArray(arr) {
27
53
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
28
54
  }
@@ -80,74 +106,57 @@ export var useListingMeta = function() {
80
106
  return result;
81
107
  };
82
108
  function processDisplayName(slug, config, name, breadcrumb, router, aggData, categoriesData) {
109
+ var ref, ref5;
83
110
  var listingName = getTranslatableField(name);
84
111
  var brandName = getBrandName(router, aggData);
85
112
  var categoryName = getCategoryName(router, categoriesData);
86
113
  var type = getListingPageType(router, slug, config);
87
- if (type === ListingTypesEnum.AttrPage) {
88
- return "Всичко за ".concat(config.titleAliases[slug]);
89
- }
90
- if (router === null || router === void 0 ? void 0 : router.query.cat) {
91
- var attribute = getTranslatableField(breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.label);
92
- if (type === ListingTypesEnum.Category) {
93
- if (!brandName) {
94
- return "".concat(listingName, " за ").concat(attribute);
95
- }
96
- return "".concat(listingName, " за ").concat(attribute, " от ").concat(brandName);
97
- }
98
- if (type === ListingTypesEnum.Brand) {
99
- if (!categoryName) {
100
- return "Всички продукти от ".concat(listingName, " за ").concat(attribute);
101
- }
102
- return "".concat(categoryName, " от ").concat(listingName, " за ").concat(attribute);
103
- }
104
- }
105
- if (type === ListingTypesEnum.Category && brandName) {
106
- return "".concat(listingName, " от ").concat(brandName);
107
- }
108
- if (type === ListingTypesEnum.Brand) {
109
- if (!categoryName) {
110
- return "Всички продукти от ".concat(listingName);
111
- }
112
- return "".concat(categoryName, " от ").concat(listingName);
113
- }
114
- if (type === ListingTypesEnum.Search && (router === null || router === void 0 ? void 0 : router.query.search)) {
115
- return "".concat(listingName, " от \"").concat(router.query.search, "\"");
116
- }
117
- return listingName;
114
+ var getTitle = config.getTitle, rest = _objectWithoutProperties(config, [
115
+ "getTitle"
116
+ ]);
117
+ var title = getTitle === null || getTitle === void 0 ? void 0 : getTitle(type, rest, {
118
+ category: categoryName,
119
+ brand: brandName,
120
+ defaultName: listingName,
121
+ attribute: (ref = config.titleAliases) === null || ref === void 0 ? void 0 : ref[slug],
122
+ childAttribute: getTranslatableField(breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.label),
123
+ search: router === null || router === void 0 ? void 0 : (ref5 = router.query) === null || ref5 === void 0 ? void 0 : ref5.search,
124
+ isWithAttribute: Boolean(router === null || router === void 0 ? void 0 : router.query.cat)
125
+ });
126
+ return title || listingName;
118
127
  }
119
128
  function getFilterByType(filterType, router) {
120
129
  var filterId = '';
121
130
  if (Array.isArray(router === null || router === void 0 ? void 0 : router.query.filter)) {
122
- var ref, ref5;
131
+ var ref, ref6;
123
132
  var filters = (ref = router === null || router === void 0 ? void 0 : router.query.filter) === null || ref === void 0 ? void 0 : ref.filter(function(x) {
124
133
  return x === null || x === void 0 ? void 0 : x.includes(filterType);
125
134
  });
126
135
  if ((filters === null || filters === void 0 ? void 0 : filters.length) && filters.length > 1) {
127
136
  return '';
128
137
  }
129
- var filterTerm = (ref5 = /\d+/.exec((filters === null || filters === void 0 ? void 0 : filters[0]) || '')) === null || ref5 === void 0 ? void 0 : ref5[0];
138
+ var filterTerm = (ref6 = /\d+/.exec((filters === null || filters === void 0 ? void 0 : filters[0]) || '')) === null || ref6 === void 0 ? void 0 : ref6[0];
130
139
  if (!filterTerm) return '';
131
140
  filterId = filterTerm;
132
141
  } else {
133
- var ref6, ref7, ref8;
134
- var isFiltered = router === null || router === void 0 ? void 0 : (ref6 = router.query) === null || ref6 === void 0 ? void 0 : (ref7 = ref6.filter) === null || ref7 === void 0 ? void 0 : ref7.includes(filterType);
142
+ var ref7, ref8, ref9;
143
+ var isFiltered = router === null || router === void 0 ? void 0 : (ref7 = router.query) === null || ref7 === void 0 ? void 0 : (ref8 = ref7.filter) === null || ref8 === void 0 ? void 0 : ref8.includes(filterType);
135
144
  if (!isFiltered) {
136
145
  return '';
137
146
  }
138
- filterId = (ref8 = /(\w+)-(\d+)/.exec(router === null || router === void 0 ? void 0 : router.query.filter)) === null || ref8 === void 0 ? void 0 : ref8[0];
147
+ filterId = (ref9 = /(\w+)-(\d+)/.exec(router === null || router === void 0 ? void 0 : router.query.filter)) === null || ref9 === void 0 ? void 0 : ref9[0];
139
148
  }
140
149
  return filterId;
141
150
  }
142
151
  function getBrandName(router, filtersData) {
143
- var ref, ref9, ref10;
152
+ var ref, ref10, ref11;
144
153
  var brandId = getFilterByType('brand', router);
145
154
  var brand = (ref = filtersData === null || filtersData === void 0 ? void 0 : filtersData.find(function(x) {
146
155
  return x.name === 'Brands';
147
- })) === null || ref === void 0 ? void 0 : (ref9 = ref.items) === null || ref9 === void 0 ? void 0 : ref9.find(function(x) {
156
+ })) === null || ref === void 0 ? void 0 : (ref10 = ref.items) === null || ref10 === void 0 ? void 0 : ref10.find(function(x) {
148
157
  return x.data.key === brandId;
149
158
  });
150
- return getTranslatableField(brand === null || brand === void 0 ? void 0 : (ref10 = brand.meta) === null || ref10 === void 0 ? void 0 : ref10.name);
159
+ return getTranslatableField(brand === null || brand === void 0 ? void 0 : (ref11 = brand.meta) === null || ref11 === void 0 ? void 0 : ref11.name);
151
160
  }
152
161
  function getCategoryName(router, categories) {
153
162
  var categoryId = getFilterByType('category', router);
@@ -52,7 +52,7 @@ function _unsupportedIterableToArray(o, minLen) {
52
52
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
53
53
  }
54
54
  export var useSlideFilter = function(filterName, min, max) {
55
- var ref;
55
+ var ref3;
56
56
  var router = useRouter();
57
57
  var meta = useListingConfig().meta;
58
58
  var slug = useListingAlias(meta).slug;
@@ -67,7 +67,7 @@ export var useSlideFilter = function(filterName, min, max) {
67
67
  }
68
68
  if (allFilters.includes(filterQuery)) return allFilters;
69
69
  };
70
- var filter = (ref = getFilter()) === null || ref === void 0 ? void 0 : ref.replace(filterQuery, '');
70
+ var filter = (ref3 = getFilter()) === null || ref3 === void 0 ? void 0 : ref3.replace(filterQuery, '');
71
71
  var ref1 = _slicedToArray(filter ? filter.split(',') : [
72
72
  min,
73
73
  max
@@ -77,9 +77,29 @@ export var useSlideFilter = function(filterName, min, max) {
77
77
  to: +to || max
78
78
  }), 2), state = ref2[0], setState = ref2[1];
79
79
  var timeoutRef = useRef();
80
- var updateValue = useCallback(function(data) {
80
+ var getFormattedPriceRange = function(data) {
81
81
  var formattedFrom = Math.min(Math.max(data.from, min), data.to);
82
82
  var formattedTo = Math.max(data.from, Math.min(data.to, max));
83
+ return {
84
+ formattedFrom: formattedFrom,
85
+ formattedTo: formattedTo
86
+ };
87
+ };
88
+ var updateValue = useCallback(function(data) {
89
+ var ref = getFormattedPriceRange(data), formattedFrom = ref.formattedFrom, formattedTo = ref.formattedTo;
90
+ setState({
91
+ from: formattedFrom,
92
+ to: formattedTo
93
+ });
94
+ }, [
95
+ filterName,
96
+ max,
97
+ min,
98
+ router,
99
+ slug
100
+ ]);
101
+ var applyFilter = useCallback(function(data) {
102
+ var ref = getFormattedPriceRange(data), formattedFrom = ref.formattedFrom, formattedTo = ref.formattedTo;
83
103
  clearTimeout(timeoutRef.current);
84
104
  timeoutRef.current = setTimeout(function() {
85
105
  router.push(createAggregateQuery(getListingPageType(router, slug, meta), router.query.slug, {
@@ -101,6 +121,7 @@ export var useSlideFilter = function(filterName, min, max) {
101
121
  ]);
102
122
  return {
103
123
  value: state,
124
+ applyFilter: applyFilter,
104
125
  updateValue: updateValue
105
126
  };
106
127
  };
@@ -1,6 +1,6 @@
1
1
  import regeneratorRuntime from "regenerator-runtime";
2
2
  import { CatalogAggregate } from '@sentecacommerce/sdk';
3
- import { getSlug, getListingAlias, getPostFilters } from '../utils';
3
+ import { getListingAlias, getPostFilters } from '../utils';
4
4
  import { prepareAggregateQuery, AggregateRequestEnum, generateAggregateKey } from '../api';
5
5
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
6
6
  try {
@@ -36,7 +36,7 @@ export function prefetchCategories(queryCache, router, predicate, aggregates, co
36
36
  }
37
37
  function _prefetchCategories() {
38
38
  _prefetchCategories = _asyncToGenerator(regeneratorRuntime.mark(function _callee(queryCache, router, predicate, aggregates, config) {
39
- var aggregateKeys, aliasedSlug, slug, query, response;
39
+ var aggregateKeys, aliasedSlug, query, response;
40
40
  return regeneratorRuntime.wrap(function _callee$(_ctx) {
41
41
  while(1)switch(_ctx.prev = _ctx.next){
42
42
  case 0:
@@ -45,7 +45,6 @@ function _prefetchCategories() {
45
45
  router: router,
46
46
  config: config
47
47
  });
48
- slug = getSlug(router, aliasedSlug);
49
48
  query = prepareAggregateQuery({
50
49
  request: AggregateRequestEnum.Categories,
51
50
  router: router,
@@ -55,9 +54,9 @@ function _prefetchCategories() {
55
54
  postFilter: undefined,
56
55
  config: config
57
56
  });
58
- _ctx.next = 6;
57
+ _ctx.next = 5;
59
58
  return CatalogAggregate(query);
60
- case 6:
59
+ case 5:
61
60
  response = _ctx.sent;
62
61
  queryCache.setQueryData([
63
62
  AggregateRequestEnum.Categories,
@@ -68,7 +67,7 @@ function _prefetchCategories() {
68
67
  staleTime: 30000
69
68
  });
70
69
  return _ctx.abrupt("return", response);
71
- case 9:
70
+ case 8:
72
71
  case "end":
73
72
  return _ctx.stop();
74
73
  }
@@ -35,20 +35,20 @@ export function prefetchPredicate(queryCache, router, config) {
35
35
  }
36
36
  function _prefetchPredicate() {
37
37
  _prefetchPredicate = _asyncToGenerator(regeneratorRuntime.mark(function _callee(queryCache, router, config) {
38
- var attribute, aliasedSlug, slug, data;
38
+ var aliasedSlug, slug, data, attribute;
39
39
  return regeneratorRuntime.wrap(function _callee$(_ctx) {
40
40
  while(1)switch(_ctx.prev = _ctx.next){
41
41
  case 0:
42
- attribute = router.query.cat && router.query.slug;
43
42
  aliasedSlug = getListingAlias({
44
43
  router: router,
45
44
  config: config
46
45
  });
47
46
  slug = getSlug(router, aliasedSlug);
48
- _ctx.next = 5;
47
+ _ctx.next = 4;
49
48
  return processPredicateRequest(slug, router, aliasedSlug);
50
- case 5:
49
+ case 4:
51
50
  data = _ctx.sent;
51
+ attribute = router.query.cat && aliasedSlug;
52
52
  queryCache.setQueryData([
53
53
  ListingQueryKeysEnum.usePredicate,
54
54
  slug,
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import { useSeoTranslations } from '../../hooks/useSeoTranslations';
3
+ import Head from 'next/head';
4
+ import { useRouter } from 'next/router';
5
+ function _extends() {
6
+ _extends = Object.assign || function(target) {
7
+ for(var i = 1; i < arguments.length; i++){
8
+ var source = arguments[i];
9
+ for(var key in source){
10
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
11
+ target[key] = source[key];
12
+ }
13
+ }
14
+ }
15
+ return target;
16
+ };
17
+ return _extends.apply(this, arguments);
18
+ }
19
+ export var TranslationsMeta = function() {
20
+ var ref = useSeoTranslations(), translationsMap = ref.translationsMap, allLocales = ref.allLocales, defaultLocale = ref.defaultLocale;
21
+ var router = useRouter();
22
+ var defaultTranslation = translationsMap[defaultLocale];
23
+ var isError = router.route === '/404' || router.route === '/_error';
24
+ if (isError) return null;
25
+ var domain = defaultTranslation === null || defaultTranslation === void 0 ? void 0 : defaultTranslation.domain;
26
+ return(/*#__PURE__*/ React.createElement(Head, null, allLocales === null || allLocales === void 0 ? void 0 : allLocales.map(function(locale) {
27
+ var translation = translationsMap === null || translationsMap === void 0 ? void 0 : translationsMap[locale];
28
+ var href = translation === null || translation === void 0 ? void 0 : translation.slug;
29
+ // go to the same page but with the right locale.
30
+ // This is for pages that does not have a translated slug
31
+ // example: /checkout -> /en/checkout, /ro/checkout
32
+ if (!href) href = "/".concat(locale).concat(router.asPath);
33
+ return(/*#__PURE__*/ React.createElement("link", _extends({
34
+ rel: "alternate"
35
+ }, {
36
+ hreflang: locale
37
+ }, {
38
+ href: domain + href,
39
+ key: 'Translation__' + href
40
+ })));
41
+ }), defaultTranslation && /*#__PURE__*/ React.createElement("link", _extends({
42
+ rel: "alternate"
43
+ }, {
44
+ hreflang: 'x-default'
45
+ }, {
46
+ href: "".concat(domain).concat(defaultTranslation === null || defaultTranslation === void 0 ? void 0 : defaultTranslation.slug)
47
+ }))));
48
+ };
@@ -4,3 +4,4 @@ export * from './GlobalSEO';
4
4
  export * from './OpenGraph';
5
5
  export * from './ProductSEO';
6
6
  export * from './HiddenBreadcrumb';
7
+ export * from './TranslationsMeta';
@@ -1 +1,2 @@
1
1
  export * from './useSEOBreadcrumb';
2
+ export * from './useSeoTranslations';
@@ -0,0 +1,79 @@
1
+ import React from 'react';
2
+ import { useRouter } from 'next/router';
3
+ function _defineProperty(obj, key, value) {
4
+ if (key in obj) {
5
+ Object.defineProperty(obj, key, {
6
+ value: value,
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true
10
+ });
11
+ } else {
12
+ obj[key] = value;
13
+ }
14
+ return obj;
15
+ }
16
+ function _objectSpread(target) {
17
+ for(var i = 1; i < arguments.length; i++){
18
+ var source = arguments[i] != null ? arguments[i] : {};
19
+ var ownKeys = Object.keys(source);
20
+ if (typeof Object.getOwnPropertySymbols === "function") {
21
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
22
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
23
+ }));
24
+ }
25
+ ownKeys.forEach(function(key) {
26
+ _defineProperty(target, key, source[key]);
27
+ });
28
+ }
29
+ return target;
30
+ }
31
+ var SeoTranslationsContext = /*#__PURE__*/ React.createContext({});
32
+ export var SeoTranslationsProvider = function(param) {
33
+ var children = param.children, translations = param.translations, defaultLocale = param.defaultLocale, localesMap = param.localesMap;
34
+ var router = useRouter();
35
+ var currentLocale = router.locale;
36
+ var currentPath = router.asPath;
37
+ var data1 = React.useMemo(function() {
38
+ if (!translations) translations = {};
39
+ translations[currentLocale] = {
40
+ slug: currentPath.split('?')[0].replace("/".concat(currentLocale), ''),
41
+ title: '',
42
+ id: Date.now().toString()
43
+ };
44
+ var map = Object.keys(translations || {}).filter(function(lang) {
45
+ return Boolean(localesMap[lang]);
46
+ }).reduce(function(acc, lang) {
47
+ var ref;
48
+ var data = translations === null || translations === void 0 ? void 0 : translations[lang];
49
+ var localeData = localesMap[lang];
50
+ var isDefault = defaultLocale === lang;
51
+ var isFrontPage = data.slug === '/';
52
+ var prefix = ((ref = data.slug) === null || ref === void 0 ? void 0 : ref[0]) === '/' ? '' : '/';
53
+ var slug = "".concat(isDefault ? '' : "/".concat(lang)).concat(prefix).concat(isFrontPage ? '' : data.slug);
54
+ return _objectSpread({}, acc, _defineProperty({}, lang, {
55
+ slug: slug,
56
+ locale: lang,
57
+ isDefault: isDefault,
58
+ domain: "https://".concat(localeData.domain)
59
+ }));
60
+ }, {});
61
+ return {
62
+ translationsMap: map,
63
+ defaultLocale: defaultLocale,
64
+ allLocales: Object.keys(localesMap)
65
+ };
66
+ }, [
67
+ defaultLocale,
68
+ translations,
69
+ localesMap,
70
+ currentLocale,
71
+ currentPath
72
+ ]);
73
+ return(/*#__PURE__*/ React.createElement(SeoTranslationsContext.Provider, {
74
+ value: data1
75
+ }, children));
76
+ };
77
+ export var useSeoTranslations = function() {
78
+ return React.useContext(SeoTranslationsContext) || {};
79
+ };
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  export var GridStyles = function(param) {
3
- var spaceX = param.spaceX, breakpoints = param.breakpoints, _remSize = param.remSize, remSize = _remSize === void 0 ? 10 : _remSize;
3
+ var spaceX = param.spaceX, breakpoints = param.breakpoints, _remSize = param.remSize, remSize = _remSize === void 0 ? 10 : _remSize, _spaceBetweenSections = param.spaceBetweenSections, spaceBetweenSections = _spaceBetweenSections === void 0 ? 80 : _spaceBetweenSections;
4
4
  var getSize = function getSize(width) {
5
5
  return "min-width: calc(".concat(width, "% - ").concat(spaceX / remSize, "rem);") + "max-width: calc(".concat(width, "% - ").concat(spaceX / remSize, "rem);") + "margin: 0 ".concat(spaceX / 2 / remSize, "rem;");
6
6
  };
@@ -20,7 +20,7 @@ export var GridStyles = function(param) {
20
20
  }, '');
21
21
  return(/*#__PURE__*/ React.createElement("style", {
22
22
  dangerouslySetInnerHTML: {
23
- __html: "\n .Page--row {\n display: flex;\n display: -webkit-flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n margin: 0 -".concat(spaceX / remSize / 2, "rem;\n }\n\n .Page__section {\n padding-bottom: 8rem;\n }\n\n .Page--col {\n display: block;\n width: 100%;\n }\n \n .size-default-inherit {\n width: 100%;\n }\n ").concat(queries, "\n ")
23
+ __html: "\n .Page--row {\n display: flex;\n display: -webkit-flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n margin: 0 -".concat(spaceX / remSize / 2, "rem;\n }\n\n .Page__section {\n padding-bottom: ").concat(spaceBetweenSections / remSize, "rem;\n }\n\n .Page--col {\n display: block;\n width: 100%;\n }\n \n .size-default-inherit {\n width: 100%;\n }\n ").concat(queries, "\n ")
24
24
  }
25
25
  }));
26
26
  };
@@ -117,7 +117,7 @@ export var RangeSlideClasses = {
117
117
  thumbActive: 'RangeSlider--thumb-active'
118
118
  };
119
119
  export var RangeSliderInput = function(param) {
120
- var defaultValue = param.defaultValue, onChange = param.onChange, _min = param.min, min = _min === void 0 ? 0 : _min, _max = param.max, max = _max === void 0 ? 100 : _max, _step = param.step, step = _step === void 0 ? 1 : _step;
120
+ var defaultValue = param.defaultValue, onChange = param.onChange, onSlide = param.onSlide, _min = param.min, min = _min === void 0 ? 0 : _min, _max = param.max, max = _max === void 0 ? 100 : _max, _step = param.step, step = _step === void 0 ? 1 : _step;
121
121
  var ref1 = _slicedToArray(useState(defaultValue), 2), value = ref1[0], setValue = ref1[1];
122
122
  var inputLeftRef = React.useRef(null);
123
123
  var inputRightRef = React.useRef(null);
@@ -130,6 +130,17 @@ export var RangeSliderInput = function(param) {
130
130
  }, [
131
131
  defaultValue
132
132
  ]);
133
+ var onSlideGeneric = function() {
134
+ var inputLeft = inputLeftRef.current;
135
+ var inputRight = inputRightRef.current;
136
+ if (!inputLeft || !inputRight) return;
137
+ var leftValue = Math.min(Number(inputLeft.value), Number(inputRight.value) - 1);
138
+ var rightValue = Math.max(Number(inputRight.value), Number(inputLeft.value) + 1);
139
+ onSlide === null || onSlide === void 0 ? void 0 : onSlide({
140
+ left: leftValue,
141
+ right: rightValue
142
+ });
143
+ };
133
144
  var updateLeftValue = useCallback(function() {
134
145
  var inputLeft = inputLeftRef.current;
135
146
  var inputRight = inputRightRef.current;
@@ -138,6 +149,7 @@ export var RangeSliderInput = function(param) {
138
149
  setValue(_objectSpread({}, value, {
139
150
  left: leftValue
140
151
  }));
152
+ onSlideGeneric();
141
153
  }, [
142
154
  setValue,
143
155
  value
@@ -150,6 +162,7 @@ export var RangeSliderInput = function(param) {
150
162
  setValue(_objectSpread({}, value, {
151
163
  right: rightValue
152
164
  }));
165
+ onSlideGeneric();
153
166
  }, [
154
167
  setValue,
155
168
  value
@@ -3,6 +3,10 @@ export declare const useSlideFilter: (filterName: string, min: number, max: numb
3
3
  from: number;
4
4
  to: number;
5
5
  };
6
+ applyFilter: (data: {
7
+ from: number;
8
+ to: number;
9
+ }) => void;
6
10
  updateValue: (data: {
7
11
  from: number;
8
12
  to: number;
@@ -84,4 +84,14 @@ export interface ListingPageMeta {
84
84
  collapseMode?: StringField;
85
85
  limit: NumberField;
86
86
  includeVariants?: BooleanField;
87
+ getTitle?: GetListingPageTitle;
87
88
  }
89
+ export declare type GetListingPageTitle = (type: ListingTypesEnum, meta: Omit<ListingPageMeta, 'getTitle'>, data: {
90
+ brand?: string;
91
+ category?: string;
92
+ defaultName?: string;
93
+ attribute?: string;
94
+ search?: string;
95
+ isWithAttribute: boolean;
96
+ childAttribute?: string;
97
+ }) => string;
@@ -0,0 +1 @@
1
+ export declare const TranslationsMeta: () => JSX.Element | null;
@@ -4,3 +4,4 @@ export * from './GlobalSEO';
4
4
  export * from './OpenGraph';
5
5
  export * from './ProductSEO';
6
6
  export * from './HiddenBreadcrumb';
7
+ export * from './TranslationsMeta';
@@ -1 +1,2 @@
1
1
  export * from './useSEOBreadcrumb';
2
+ export * from './useSeoTranslations';
@@ -0,0 +1,24 @@
1
+ import type { TranslationsMapDTO } from '@sentecacommerce-theme/cms';
2
+ import type { LocaleData } from '../../config';
3
+ export declare const SeoTranslationsProvider: ({ children, translations, defaultLocale, localesMap, }: {
4
+ children: any;
5
+ translations: TranslationsMapDTO;
6
+ defaultLocale: string;
7
+ localesMap: {
8
+ [key: string]: LocaleData;
9
+ };
10
+ }) => JSX.Element;
11
+ export declare const useSeoTranslations: () => SeoTranslationContextType;
12
+ export declare type SeoTranslationContextType = {
13
+ translationsMap: {
14
+ [key: string]: SeoTranslationType;
15
+ };
16
+ defaultLocale: string;
17
+ allLocales: string[];
18
+ };
19
+ export declare type SeoTranslationType = {
20
+ slug: string;
21
+ locale: string;
22
+ isDefault: boolean;
23
+ domain: string;
24
+ };
@@ -1,5 +1,5 @@
1
1
  import { StringField } from '@sentecacommerce-theme/cms';
2
- export declare const GridStyles: ({ spaceX, breakpoints, remSize, }: {
2
+ export declare const GridStyles: ({ spaceX, breakpoints, remSize, spaceBetweenSections, }: {
3
3
  breakpoints?: {
4
4
  [key: string]: {
5
5
  min: StringField;
@@ -7,4 +7,5 @@ export declare const GridStyles: ({ spaceX, breakpoints, remSize, }: {
7
7
  } | undefined;
8
8
  spaceX: number;
9
9
  remSize?: number | undefined;
10
+ spaceBetweenSections?: number | undefined;
10
11
  }) => JSX.Element;
@@ -15,11 +15,12 @@ export declare const RangeSlideClasses: {
15
15
  thumbHover: string;
16
16
  thumbActive: string;
17
17
  };
18
- export declare const RangeSliderInput: ({ defaultValue, onChange, min, max, step, }: {
18
+ export declare const RangeSliderInput: ({ defaultValue, onChange, onSlide, min, max, step, }: {
19
19
  min: number;
20
20
  max: number;
21
21
  step: number;
22
22
  defaultValue: ValueType;
23
23
  onChange: (data: ValueType) => void;
24
+ onSlide?: ((data: ValueType) => void) | undefined;
24
25
  }) => JSX.Element;
25
26
  export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sentecacommerce-theme/lib",
3
3
  "sideEffects": false,
4
- "version": "0.12.95",
4
+ "version": "0.12.96",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
7
7
  "types": "dist/types/index.d.ts",
@@ -31,13 +31,13 @@
31
31
  "watch:cjs": "swc src --out-dir dist/cjs -w",
32
32
  "watch:esm": "swc src --out-dir dist/esm --no-swcrc -w"
33
33
  },
34
- "gitHead": "e4ce21f505cc0bea992d4a3fb45ff7d72cdee868",
34
+ "gitHead": "857da38c2eb402b3d8a51ad70ffbb5dc770febff",
35
35
  "peerDependencies": {
36
36
  "react-query": "^2.26.2"
37
37
  },
38
38
  "dependencies": {
39
- "@sentecacommerce-theme/base": "^0.12.95",
40
- "@sentecacommerce-theme/cms": "^0.12.95",
39
+ "@sentecacommerce-theme/base": "^0.12.96",
40
+ "@sentecacommerce-theme/cms": "^0.12.96",
41
41
  "@sentecacommerce/sdk": "2.0.161",
42
42
  "body-scroll-lock": "^3.1.5",
43
43
  "copy-to-clipboard": "^3.3.1",