2026-04-06 20:59:50 +05:00
export interface Review {
2026-04-15 01:31:23 +05:00
id : number ;
2026-04-06 20:59:50 +05:00
name : string ;
2026-04-19 19:00:42 +05:00
surname? : string ;
profession : string ;
2026-04-06 20:59:50 +05:00
text : string ;
rating : number ;
2026-04-15 01:31:23 +05:00
avatar : { initial : string ; color : string ; } ;
2026-04-06 20:59:50 +05:00
date : string ;
votesCount : number ;
isHelpful : boolean ;
}
2026-04-15 01:31:23 +05:00
const reviewsRaw = [
2026-04-06 20:59:50 +05:00
{
2026-04-15 01:31:23 +05:00
id : 1 ,
2026-04-06 20:59:50 +05:00
name : "Алексей М ." ,
2026-04-19 19:00:42 +05:00
profession : "Предприниматель" ,
2026-04-06 20:59:50 +05:00
text : "Помогли вернуть права после того, как инспектор незаконно составил протокол за встречку. Юрист нашел кучу ошибок в схеме ДТП. Огромное спасибо!" ,
rating : 5 ,
date : "2024-03-15" ,
votesCount : 24 ,
isHelpful : true
} ,
{
2026-04-15 01:31:23 +05:00
id : 2 ,
2026-04-06 20:59:50 +05:00
name : "Екатерина П." ,
2026-04-19 19:00:42 +05:00
profession : "Бухгалтер" ,
2026-04-06 20:59:50 +05:00
text : "Страховая выплатила копейки по ОСАГО. Обратилась сюда, сделали независимую экспертизу и через суд взыскали еще 120 тысяч. Профессионалы!" ,
rating : 5 ,
date : "2024-03-10" ,
votesCount : 18 ,
isHelpful : true
} ,
{
2026-04-15 01:31:23 +05:00
id : 3 ,
2026-04-06 20:59:50 +05:00
name : "Игорь С ." ,
2026-04-19 19:00:42 +05:00
profession : "IT-специалист" ,
2026-04-06 20:59:50 +05:00
text : "Грамотно разобрали сложное ДТП на перекрестке. Доказали, что я не виноват, хотя ГИБДД изначально решило иначе. Лучшие в Сургуте." ,
rating : 5 ,
date : "2024-03-05" ,
votesCount : 31 ,
isHelpful : true
} ,
{
2026-04-15 01:31:23 +05:00
id : 4 ,
2026-04-06 20:59:50 +05:00
name : "Марина К ." ,
2026-04-19 19:00:42 +05:00
profession : "Менеджер" ,
2026-04-06 20:59:50 +05:00
text : "Обратилась по вопросу возврата прав после лишения. Всё сделали быстро и профессионально. Через 2 месяца права уже были у меня. Рекомендую!" ,
rating : 4 ,
date : "2024-02-28" ,
votesCount : 15 ,
isHelpful : true
} ,
{
2026-04-15 01:31:23 +05:00
id : 5 ,
2026-04-06 20:59:50 +05:00
name : "Дмитрий В ." ,
2026-04-19 19:00:42 +05:00
profession : "Инженер" ,
2026-04-06 20:59:50 +05:00
text : "Были проблемы с о страховой после ДТП. Юристы помогли составить претензию, потом представляли интересы в суде. Выиграли дело полностью." ,
rating : 5 ,
date : "2024-02-20" ,
votesCount : 22 ,
isHelpful : true
} ,
{
2026-04-15 01:31:23 +05:00
id : 6 ,
2026-04-06 20:59:50 +05:00
name : "Ольга Н ." ,
2026-04-19 19:00:42 +05:00
profession : "Врач" ,
2026-04-06 20:59:50 +05:00
text : "Купила б /у авто с проблемами, которые не были указаны при продаже. Юристы помогли вернуть деньги через суд. Очень благодарна за помощь!" ,
rating : 5 ,
date : "2024-02-15" ,
votesCount : 27 ,
isHelpful : true
} ,
{
2026-04-15 01:31:23 +05:00
id : 7 ,
2026-04-06 20:59:50 +05:00
name : "Сергей Т ." ,
2026-04-19 19:00:42 +05:00
profession : "Водитель" ,
2026-04-06 20:59:50 +05:00
text : "Спор с о страховой длился полгода. Сам не мог ничего добиться. Обратился сюда - ребята за 2 месяца решили вопрос в мою пользу. Супер!" ,
rating : 4 ,
date : "2024-02-08" ,
votesCount : 19 ,
isHelpful : true
} ,
{
2026-04-15 01:31:23 +05:00
id : 8 ,
2026-04-06 20:59:50 +05:00
name : "Анна Р ." ,
2026-04-19 19:00:42 +05:00
profession : "Учитель" ,
2026-04-06 20:59:50 +05:00
text : "Помогли оспорить штраф с камеры, который пришел ошибочно. Юрист быстро разобрался в ситуации и подготовил все документы. Спасибо!" ,
rating : 5 ,
date : "2024-02-01" ,
votesCount : 12 ,
isHelpful : false
} ,
{
2026-04-15 01:31:23 +05:00
id : 9 ,
2026-04-06 20:59:50 +05:00
name : "Виктор Л." ,
2026-04-19 19:00:42 +05:00
profession : "Предприниматель" ,
2026-04-06 20:59:50 +05:00
text : "Обратился по вопросу компенсации после ДТП. Страховая занижала выплату в 3 раза. Сделали экспертизу и через суд добились справедливой суммы." ,
rating : 5 ,
date : "2024-01-25" ,
votesCount : 35 ,
isHelpful : true
}
] ;
2026-04-15 01:31:23 +05:00
const colors = [
"bg-blue-100 text-blue-600" , "bg-teal-100 text-teal-600" , "bg-orange-100 text-orange-600" ,
"bg-pink-100 text-pink-600" , "bg-purple-100 text-purple-600" , "bg-indigo-100 text-indigo-600" ,
"bg-green-100 text-green-600" , "bg-yellow-100 text-yellow-600" , "bg-red-100 text-red-600"
] ;
export const reviewsData : Review [ ] = reviewsRaw . map ( review = > {
const initial = review . name . charAt ( 0 ) . toUpperCase ( ) ;
const color = colors [ initial . charCodeAt ( 0 ) % colors . length ] ;
return { . . . review , avatar : { initial , color } } ;
} ) ;
export const votingSummary = ( ( ) = > {
const totalReviews = reviewsData . length ;
const totalVotes = reviewsData . reduce ( ( sum , review ) = > sum + review . votesCount , 0 ) ;
const totalRating = reviewsData . reduce ( ( sum , review ) = > sum + review . rating , 0 ) ;
const averageRating = totalReviews > 0 ? parseFloat ( ( totalRating / totalReviews ) . toFixed ( 1 ) ) : 0 ;
const ratingDistribution = reviewsData . reduce ( ( acc , review ) = > {
acc [ review . rating ] = ( acc [ review . rating ] || 0 ) + 1 ;
return acc ;
} , { } as Record < number , number > ) ;
return {
averageRating ,
totalVotes ,
totalReviews ,
ratingDistribution
} ;
} ) ( ) ;