denwa-web-shared
Version:
A shared library for Next.js App Router projects containing reusable components, hooks, schemas, and utilities.
253 lines (252 loc) • 10.9 kB
TypeScript
import { IPaginate, IPreparedServerImageWithAlt, PaginationResult } from '../types';
import { PictureData } from '../types/picture-data';
/**
* @description Хелпер для генерации путей к адаптивным статичным изображениям (PictureData)
* @param basePath - Базовый путь к директории (например, '/compressed/cta')
* @param filename - Имя файла без расширения (например, 'cta-arrow')
* @param ext - Расширение исходного fallback-файла (по умолчанию 'jpg')
* @return Объект PictureData со всеми нужными форматами
*/
export declare const getImageData: (basePath: string, filename: string, ext: "jpg" | "png" | "jpeg") => PictureData;
/**
* @description Получить Intl для нужного языка
* @param locale - Локаль
* @param options - Опции
*/
export declare const getNumberFormatter: (locale: string, options?: Intl.NumberFormatOptions) => Intl.NumberFormat;
/**
* @description Получить Intl даты для нужного языка
* @param locale - Локаль
* @param options - Опции
*/
export declare const getDateFormatter: (locale: string, options?: Intl.DateTimeFormatOptions) => Intl.DateTimeFormat;
/**
* @description Получить значение по ключу
* @param obj - Объект
* @param key - Ключ
*/
export declare const getByKey: <T extends object, K extends keyof T>(obj: T, key: K | string) => T[K] | undefined;
/**
* @description Преобразует value у инпута в поле маски телефона
* @param eventValue - исходное значение инпута
* @response Возвращает либо обработанную строку, либо пустую строку
* @example
* 79881234567 -> +79881234567
* 89881234567 -> +79881234567
* 19881234567 -> +19881234567
* 8 (988) 505-42-19 -> +79885054219
*/
export declare const convertPhoneMask: (eventValue: string) => string;
/**
* @description Получить корректный поддомен из адреса хоста
* @param host - url хоста
* @param SUB_DOMAIN - Объект ключ-значение со списком поддоменов
*/
export declare const getSubdomain: (host: string, SUB_DOMAIN: Record<string, string>) => string;
/**
* @description Заменяет текст по маске {{}}
* @param text - Исходный текст
* @param subdomain - Значение города, которое подставится
* @param SUBDOMAIN_NAME - Объект ключ-значение со списком поддоменов
* @param SUBDOMAIN_MASK - Объект ключ-значение со списком масок поддоменов
* @return Обновленная строка
*/
export declare const updateTextByTemplate: ({ text, subdomain, SUBDOMAIN_NAME, SUBDOMAIN_MASK, }: {
text: string;
subdomain?: string;
SUBDOMAIN_NAME?: Record<string, {
name: string;
declination: string;
region: string;
regionDeclination: string;
}>;
SUBDOMAIN_MASK?: {
CITY: string;
CITY_DECL: string;
CITY_REGION: string;
CITY_REGION_DECL: string;
};
}) => string;
/**
* @description Заменят мета текст по маске, переданный напрямую
* @param subdomain - Поддомен
* @param metaData - Объект с title, descrption, keywords
* @param host - Хост сайта
* @param lang - Объект для локализации
* @param isSubdomain - Нужны ли поддомены в адресе хоста
* @param SUBDOMAIN_NAME - Объект ключ-значение со списком поддоменов
* @param SUBDOMAIN_MASK - Объект ключ-значение со списком масок поддоменов
* @param DEFAULT_SEO_TEXT - Объект ключ-значение со списком масок поддоменов
* @return Объект с мета тегами
*/
export declare const prepareLocalMetaData: <T extends object>({ subdomain, metaData, host, lang, isSubdomain, SUBDOMAIN_NAME, SUBDOMAIN_MASK, DEFAULT_SEO_TEXT, }: {
subdomain?: string;
metaData: {
title: string;
description: string;
keywords: string;
canonical?: string;
};
host: string;
lang?: {
locale: string;
locales: string[];
defaultLocale: string;
route: string;
city?: string;
};
isSubdomain?: boolean;
SUBDOMAIN_NAME?: Record<string, {
name: string;
declination: string;
region: string;
regionDeclination: string;
}>;
SUBDOMAIN_MASK?: {
CITY: string;
CITY_DECL: string;
CITY_REGION: string;
CITY_REGION_DECL: string;
};
DEFAULT_SEO_TEXT: {
title: string;
description: string;
keywords: string;
};
}) => T;
/**
* @description Превращает строку формата /catalog/price-from__1000--price-to__5000 в { price-from: '1000', price-to: '5000' }
* @param input - изначальная строка
* @return Объект с парами ключ-значение
*/
export declare const parseStringToKeyValue: <T extends object>(input: string) => T;
/**
* @description Конвентирует цвет из enum в строку
* @param color1 - цвет 1
* @param color2 - цвет 2
* @param notFoundText - текст при отсутствии цвета
* @param COLORS_NAMES - Объект ключ-значение со списком названий цветов
* @return Строка с названием цветов
*/
export declare const prepareColor: ({ color1, color2, notFoundText, COLORS_NAMES, }: {
color1: string;
color2?: string | null;
notFoundText: string;
COLORS_NAMES: Record<string, string>;
}) => string;
/**
* @description Подготавливает серверную пагинацию для клиента
* @param pagination - Серверная пагинация
* @param baseUrl - Url страницы
* @param initialParams - Параметры url
*/
export declare const generatePaginationArray: (pagination: IPaginate | null, baseUrl: string, initialParams: Record<string, string>) => PaginationResult;
/**
* @description Превращение массива в объект ключ-значение
* @param arr - Массив
*/
export declare const arrayToKeyValueObject: <T extends string>(arr: T[]) => Record<T, T>;
/**
* @description Подготовка номера страницы, полученной из query параметров
* @param page - Номер страницы
*/
export declare const preparePageParam: (page: string | number | undefined) => number;
/**
* @description Проверка html на пустоту
* @param html - Html разметка редактора
*/
export declare const isNotEmptyHtml: (html: string | null | undefined) => boolean;
/**
* @description Подстановка города в путь ссылки
* @param city - Город
* @param href - Ссылка
*/
export declare const createCityLink: (city: string, href: string) => string;
/**
* @description Получить текстовое поле по локали
* @param locale - Локаль. Пример ru
* @param field - Пример text1
* @param data - Объект с полями. К примеру text1RU и text1EN
* @result - Текст поля
*/
export declare const getLocaleField: ({ locale, field, data, }: {
locale: string;
field: string;
data?: object | null;
}) => string;
/**
* @description Проверка user agent на бота
* @param userAgent - user agent
* @result - boolean
*/
export declare const isBotUserAgent: (userAgent: string) => boolean;
/**
* Генерирует приятный цвет для заглушек фотографий карточек
* @param seed - Необязательное число или строка для предсказуемой генерации цвета
* @returns Цвет в формате HEX (#RRGGBB)
*/
export declare const generatePlaceholderColor: (seed?: number | string) => string;
/**
* Конвертирует цвет из формата HSL в HEX
* @param h - Оттенок (0-360)
* @param s - Насыщенность (0-100)
* @param l - Яркость (0-100)
* @returns Цвет в формате HEX (#RRGGBB)
*/
export declare const hslToHex: (h: number, s: number, l: number) => string;
/**
* Преобразует UUID в короткий ID
* @param {string} uuid - UUID v4 строка (с дефисами или без)
* @param {number} length - нужная длина (по умолчанию 18)
* @returns {string} короткий ID без дефисов
*/
export declare const uuidToStringId: (uuid: string, length?: number) => string;
/**
* Преобразует UUID в числовой ID
* @param {string} uuid - UUID v4 строка (с дефисами или без)
* @param {number} maxDigits - максимальное количество цифр в результате (по умолчанию 18)
* @returns {string} числовой ID в виде строки
*/
export declare const uuidToNumericId: (uuid: string, maxDigits?: number) => string;
/**
* @description Экранирует XML-специальные символы в строке.
* @param str - Строка
*/
export declare const escapeXml: (str: string) => string;
/**
* @description Генерирует XML-фид для яндекс товаров.
* @param shopName - Название магазина
* @param shopCompany - Компания
* @param delivery - Доставка
* @param categoriesData - Категории
* @param offersData - Товары
* @param host - Хост
* @response Готовый xml фид товаров
*/
export declare const generateYandexFeedXML: ({ shopName, shopCompany, delivery, categoriesData, offersData, host, }: {
shopName: string;
shopCompany: string;
host: string;
delivery: boolean;
categoriesData: {
id: string | number;
name: string;
parentId?: string | number;
}[];
offersData: {
id: string | number;
categoryId: string | number;
name: string;
vendor: string;
vendorCode?: string | null;
description: string;
href: string;
images: IPreparedServerImageWithAlt[];
price: number;
pickup: boolean;
params?: {
name: string;
value: string;
}[];
}[];
}) => string;