@uigstudio/uig-nextjs-helper
Version:
``` npm install @uig/uig-nextjs-helper ``` or ``` yarn add -D @uig/uig-nextjs-helper ```
242 lines (200 loc) • 6.8 kB
JavaScript
import { jsx, jsxs } from 'react/jsx-runtime';
import { Fragment, useRef, useEffect, useState } from 'react';
import { useTranslation } from 'next-i18next';
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
var initialApiError = {
statusCode: 500,
error: 'Error',
message: 'Unknown error'
};
var parseApiError = function parseApiError(error) {
var _error$message;
switch (typeof error) {
case 'string':
return _extends({}, initialApiError, {
message: error
});
case 'object':
return _extends({}, initialApiError, (error == null ? void 0 : error.message) || error, {
message: (error == null ? void 0 : (_error$message = error.message) == null ? void 0 : _error$message.message) || (error == null ? void 0 : error.message)
}, (error == null ? void 0 : error.statusCode) && {
statusCode: error.statusCode
});
default:
return initialApiError;
}
};
var PREVIEW_ID_PREFIX = 'preview_';
var HOMEPAGE_SLUG = 'homepage'; // export const BLOG_PREFIX = 'blog';
var objectEntries = function objectEntries(obj) {
// Object.entries typings error
// @ts-ignore
return Object.entries(obj);
};
var objectHas = function objectHas(obj, key) {
return Object.prototype.hasOwnProperty.call(obj, key);
};
var createUrl = function createUrl(baseUrl, path) {
if (/https?:/.test(path)) {
return path;
}
return [(baseUrl || process.env.NEXT_PUBLIC_API || '').replace(/\/$/, ''), path.replace(/^\//, '')].join('/');
};
var resolveUrl = function resolveUrl(baseUrl, path, queryParams, bindParams) {
if (queryParams === void 0) {
queryParams = {};
}
if (bindParams === void 0) {
bindParams = {};
}
var url = new URL(createUrl(baseUrl, bindUrlParams(path, bindParams)));
if (queryParams) {
Object.entries(queryParams).forEach(function (_ref) {
var name = _ref[0],
value = _ref[1];
if (value !== undefined && value !== null) {
url.searchParams.append(name, value.toString());
}
});
}
return url.href;
};
var bindUrlParams = function bindUrlParams(route, params) {
return route.replace(/:(\w+)/g, function (_, key) {
var _params$key;
return objectHas(params, key) ? ((_params$key = params[key]) == null ? void 0 : _params$key.toString()) || '' : '';
});
};
var slugToData = function slugToData(ctx, items, defaultSlug, blockList) {
var _ctx$params, _ctx$params2, _ctx$params3;
var slug = "" + ((_ctx$params = ctx.params) == null ? void 0 : _ctx$params.slug);
if (!((_ctx$params2 = ctx.params) != null && _ctx$params2.slug) && !defaultSlug || (blockList || []).includes(slug)) {
return undefined;
}
if (!((_ctx$params3 = ctx.params) != null && _ctx$params3.slug) && defaultSlug) {
slug = "" + defaultSlug;
}
if (slug.startsWith(PREVIEW_ID_PREFIX)) {
var _slug$split = slug.split('_'),
id = _slug$split[1];
return {
slug: '',
id: Number(id)
};
}
return items.find(function (p) {
return p.slug === slug;
});
};
var absoluteUrl = function absoluteUrl() {
return ["" + process.env.NEXT_PUBLIC_URL].concat([].slice.call(arguments)).filter(function (p) {
return !!p;
}).map(function (p) {
return p.replace(/^\//, '').replace(/\/$/, '');
}).join('/');
};
var queryPage = function queryPage(ctx) {
var page = queryParam(ctx, 'page', '1');
return /\d+/.test(page) ? Number(page) : 1;
};
var queryParam = function queryParam(ctx, key, defaultValue) {
var _ctx$query, _ctx$query2;
return (_ctx$query = ctx.query) != null && _ctx$query[key] ? "" + ((_ctx$query2 = ctx.query) == null ? void 0 : _ctx$query2[key]) : defaultValue;
};
var imageProps = function imageProps(image) {
var _image$data;
// @ts-ignore
var attributes = (image == null ? void 0 : (_image$data = image.data) == null ? void 0 : _image$data.attributes) || (image == null ? void 0 : image.attributes);
var src = (attributes == null ? void 0 : attributes.url) || '';
return {
src: src.startsWith('http') ? src : createUrl(process.env.NEXT_PUBLIC_MEDIA_URL, src),
alt: (attributes == null ? void 0 : attributes.alternativeText) || ''
};
};
function safeJsonParse(string, returnRaw) {
try {
return JSON.parse(string);
} catch (err) {
return returnRaw ? string : {};
}
}
var formatNumber = function formatNumber(value) {
return Number("" + value).toLocaleString('en', {
useGrouping: true
});
};
var formatPrice = function formatPrice(value) {
return "$" + formatNumber(value);
};
var minMax = function minMax(min, value, max) {
return Math.max(min, Math.min(value, max));
};
function linkTarget(target) {
if (target === void 0) {
target = '_self';
}
return target[0] === '_' ? target : "_" + target;
}
function linkRel(target) {
if (linkTarget(target) === '_blank') {
return {
rel: 'nofollow noopener noreferrer'
};
}
return {};
}
function slugToUrl(seo, prefix) {
var slug = [prefix, HOMEPAGE_SLUG === seo.slug ? '' : seo.slug].filter(function (e) {
return !!e;
}).join('/');
return "/" + slug;
}
var nlToBr = function nlToBr(text) {
return jsx(Fragment, {
children: text.split('\n').map(function (item, idx) {
return jsxs(Fragment, {
children: [Boolean(idx) && jsx("br", {}), item]
}, idx);
})
});
};
function useCurrentRef(value) {
var valueRef = useRef(value);
useEffect(function () {
valueRef.current = value;
}, [value]);
return valueRef;
}
function useRefState(initValue) {
var valueRef = useRef(initValue);
var _useState = useState(initValue),
value = _useState[0],
setValue = _useState[1];
return [value, valueRef, function (val) {
valueRef.current = val;
setValue(val);
}];
}
var useScopeTranslation = function useScopeTranslation(namespace) {
var scopes = [].slice.call(arguments, 1);
var _useTranslation = useTranslation(namespace),
t = _useTranslation.t;
var finalScope = scopes && scopes.length ? scopes.join('.') + "." : '';
return function (key, option) {
return t("" + finalScope + key, option);
};
};
export { HOMEPAGE_SLUG, PREVIEW_ID_PREFIX, absoluteUrl, bindUrlParams, createUrl, formatNumber, formatPrice, imageProps, linkRel, linkTarget, minMax, nlToBr, objectEntries, objectHas, parseApiError, queryPage, queryParam, resolveUrl, safeJsonParse, slugToData, slugToUrl, useCurrentRef, useRefState, useScopeTranslation };