itube-specs 0.0.960 → 0.0.962

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -103,15 +103,11 @@ function onImageError() {
103
103
  imageError.value = true;
104
104
  }
105
105
 
106
- /** В строку помещается только первый параметр из списка (тип парня) и возраст — остальные скрыты. */
107
- const visibleParameters = computed(() => {
108
- const isAge = (item: IModelCard['parameters'][number]) => item.title === 'age';
109
-
110
- return [
111
- props.card.parameters.find(item => !isAge(item)),
112
- props.card.parameters.find(isAge),
113
- ].filter(item => item !== undefined);
114
- });
106
+ /** В строке только телосложение и возраст: остальные параметры (этничность и прочее) в карточку не идут. */
107
+ const visibleParameters = computed(() => [
108
+ props.card.parameters.find(item => item.title === 'guy_type'),
109
+ props.card.parameters.find(item => item.title === 'age'),
110
+ ].filter(item => item !== undefined));
115
111
 
116
112
  function getValue(item: { title?: string; value?: string }) {
117
113
  if (item.title === 'age') {
@@ -200,6 +196,7 @@ function getValue(item: { title?: string; value?: string }) {
200
196
 
201
197
  .card-model__info-country {
202
198
  border-radius: 2px;
199
+ object-fit: cover;
203
200
  }
204
201
 
205
202
  .card-model__parameters {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.960",
4
+ "version": "0.0.962",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {
@@ -8,7 +8,7 @@ const makeRaw = (overrides = {}) => ({
8
8
  primary_image_url: 'https://img.com/primary.jpg',
9
9
  guid: 'model-1',
10
10
  parameters: [
11
- { name: 'birthplace_country', values: [{ title: 'USA', name: 'usa' }] },
11
+ { name: 'nationality_iso_codes', values: [{ title: 'United States of America', name: 'US' }] },
12
12
  { name: 'guy_type', values: [{ title: 'Twink' }] },
13
13
  { name: 'ethnicity', values: [{ title: 'Asian' }] },
14
14
  { name: 'age', values: [{ title: '25' }] },
@@ -23,7 +23,7 @@ describe('cleanModelCard', () => {
23
23
  expect(result.videosCount).toBe(10);
24
24
  expect(result.thumbUrl).toBe('https://img.com/s.webp');
25
25
  expect(result.guid).toBe('model-1');
26
- expect(result.country).toEqual({ title: 'USA', name: 'usa' });
26
+ expect(result.country).toEqual({ title: 'United States of America', name: 'us' });
27
27
  });
28
28
 
29
29
  it('параметры: guy_type, ethnicity, age', () => {
@@ -38,7 +38,7 @@ describe('cleanModelCard', () => {
38
38
  it('без age → параметры без age', () => {
39
39
  const raw = makeRaw({
40
40
  parameters: [
41
- { name: 'birthplace_country', values: [{ title: 'USA', name: 'usa' }] },
41
+ { name: 'nationality_iso_codes', values: [{ title: 'United States of America', name: 'US' }] },
42
42
  { name: 'guy_type', values: [{ title: 'Twink' }] },
43
43
  { name: 'ethnicity', values: [{ title: 'Asian' }] },
44
44
  ],
@@ -2,7 +2,8 @@ import type { IRawModelCard, IModelCard, IModelParameter } from '../../../types'
2
2
  import { ThumbSize } from '../../constants/thumb-size';
3
3
 
4
4
  const parameterNames = ['guy_type', 'ethnicity'];
5
- const age = (card: IRawModelCard) => card.parameters?.find(item => item.name === 'age')?.values?.[0]?.title;
5
+ const firstValue = (card: IRawModelCard, name: string) => card.parameters?.find(item => item.name === name)?.values?.[0];
6
+ const age = (card: IRawModelCard) => firstValue(card, 'age')?.title;
6
7
 
7
8
  /** Нормализует сырую карточку модели к типу IModelCard, включая параметры (возраст, рост, вес) и страну. */
8
9
  export const cleanModelCard = (card: IRawModelCard): IModelCard => ({
@@ -11,9 +12,12 @@ export const cleanModelCard = (card: IRawModelCard): IModelCard => ({
11
12
  thumbUrl: card.video_thumb_urls?.webp?.[ThumbSize.Small] || '',
12
13
  primaryImageUrl: card.primary_image_url || '',
13
14
  guid: card.guid || '',
15
+ // Страна лежит в parameters под именем nationality_iso_codes: `name` — код ISO-2 (`us`),
16
+ // он же имя файла флага, `title` — читаемое название. Одноимённое поле верхнего уровня
17
+ // в ответе списка всегда null, параметра `birthplace_country` там нет вовсе.
14
18
  country: {
15
- title: card.parameters?.find(item => item.name === 'birthplace_country')?.values?.[0]?.title || '',
16
- name: card.parameters?.find(item => item.name === 'birthplace_country')?.values?.[0]?.name || '',
19
+ title: firstValue(card, 'nationality_iso_codes')?.title || '',
20
+ name: firstValue(card, 'nationality_iso_codes')?.name?.toLowerCase() || '',
17
21
  },
18
22
  parameters: [
19
23
  ...(card.parameters?.filter(item => parameterNames.includes(item.name) && item.values?.length).map((item: IModelParameter) => ({