36ea9cde04
Поставщик crm.bp префиксует имена проектов признаком канала-провайдера (B1_/B2_/B3_ — три базы лидов). В UI Лидерры префикс — шум: пользователю интересен сам проект, не канал. Трансформация display-only — данные в БД не трогаем, фильтрация идёт по project_id (не name). Утилита: app/resources/js/composables/projectName.ts → stripChannelPrefix. Регэксп ^B[123]_ case-insensitive; null/undefined/'' → ''. Применено в 4 точках: - DealsTable «Источник» (item.project) - DealsFilters «Проект» dropdown (через computed-маппинг в DealsView) - KanbanCard карточка - DealDetailBody параметры панели Тесты: 8 unit-тестов на утилиту (B1/B2/B3 case-insensitive, не трогать B0/B4/Bx, не трогать префикс в середине строки, null/undefined/''), 38/38 на затронутых компонентах, 868/3sk/0 full Vitest, build 2.62s. Smoke /deals: 20 строк, ни одна не начинается с B1_/B2_/B3_ (был «B1_73912557675 [35]», стал «73912557675 [35]»; «B3_krk-finance.ru/...» → «krk-finance.ru/...»). Скриншот deals-no-bprefix-2026-05-18.png. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
22 lines
1.1 KiB
TypeScript
22 lines
1.1 KiB
TypeScript
/**
|
|
* Утилиты отображения имён проектов crm.bp.
|
|
*
|
|
* Поставщик crm.bp префиксует имена проектов признаком канала-провайдера
|
|
* (B1_/B2_/B3_ — три разных базы лидов). В UI Лидерры префикс — шум:
|
|
* пользователю интересен сам проект, а не канал.
|
|
*
|
|
* Трансформация — **display-only**: данные в БД (`supplier_projects.name`)
|
|
* не трогаем, фильтрация/поиск/маппинг идёт по сырому имени и `id`.
|
|
*/
|
|
|
|
const CHANNEL_PREFIX_RE = /^B[123]_/i;
|
|
|
|
/**
|
|
* Убирает префикс B1_/B2_/B3_ из начала имени проекта (case-insensitive).
|
|
* Префикс внутри строки и другие буквы (B0/B4/Bx) не трогает.
|
|
* null/undefined/'' -> ''.
|
|
*/
|
|
export function stripChannelPrefix(name: string | null | undefined): string {
|
|
if (!name) return '';
|
|
return name.replace(CHANNEL_PREFIX_RE, '');
|
|
} |