UNPKG

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
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;