@salutejs/sdds-cs 0.316.1-canary.1986.15225454757.0 → 0.316.1-canary.1986.15255471728.0
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.
@@ -8,7 +8,7 @@ import { Combobox } from './Combobox';
|
|
8
8
|
|
9
9
|
type StorySelectProps = ComponentProps<typeof Combobox> & {
|
10
10
|
enableContentLeft?: boolean;
|
11
|
-
|
11
|
+
selectAllLabel?: string;
|
12
12
|
selectAllSticky?: boolean;
|
13
13
|
};
|
14
14
|
|
@@ -94,13 +94,6 @@ const meta: Meta<StorySelectProps> = {
|
|
94
94
|
emptyStateDescription: {
|
95
95
|
control: { type: 'text' },
|
96
96
|
},
|
97
|
-
enableSelectAll: {
|
98
|
-
control: 'boolean',
|
99
|
-
},
|
100
|
-
selectAllSticky: {
|
101
|
-
control: 'boolean',
|
102
|
-
if: { arg: 'enableSelectAll', truthy: true },
|
103
|
-
},
|
104
97
|
...disableProps([
|
105
98
|
'hintText',
|
106
99
|
'hintTrigger',
|
@@ -133,8 +126,6 @@ const meta: Meta<StorySelectProps> = {
|
|
133
126
|
requiredPlacement: 'right',
|
134
127
|
hasRequiredIndicator: true,
|
135
128
|
emptyStateDescription: '',
|
136
|
-
enableSelectAll: false,
|
137
|
-
selectAllSticky: false,
|
138
129
|
},
|
139
130
|
parameters: {
|
140
131
|
controls: {
|
@@ -163,8 +154,6 @@ const meta: Meta<StorySelectProps> = {
|
|
163
154
|
'requiredPlacement',
|
164
155
|
'hasRequiredIndicator',
|
165
156
|
'emptyStateDescription',
|
166
|
-
'enableSelectAll',
|
167
|
-
'selectAllSticky',
|
168
157
|
],
|
169
158
|
},
|
170
159
|
},
|
@@ -380,7 +369,7 @@ const items = [
|
|
380
369
|
{
|
381
370
|
value: 'africa',
|
382
371
|
label: 'Африка',
|
383
|
-
|
372
|
+
isDisabled: true,
|
384
373
|
},
|
385
374
|
];
|
386
375
|
|
@@ -404,12 +393,12 @@ export const Single: StoryObj<StorySelectProps> = {
|
|
404
393
|
render: (args) => <SingleStory {...args} />,
|
405
394
|
parameters: {
|
406
395
|
controls: {
|
407
|
-
exclude: ['isTargetAmount'
|
396
|
+
exclude: ['isTargetAmount'],
|
408
397
|
},
|
409
398
|
},
|
410
399
|
};
|
411
400
|
|
412
|
-
const MultipleStory = (
|
401
|
+
const MultipleStory = (args: StorySelectProps) => {
|
413
402
|
const [value, setValue] = useState([]);
|
414
403
|
|
415
404
|
return (
|
@@ -421,7 +410,6 @@ const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelec
|
|
421
410
|
value={value}
|
422
411
|
onChange={setValue}
|
423
412
|
contentLeft={args.enableContentLeft ? <IconDone size="s" /> : undefined}
|
424
|
-
selectAllOptions={enableSelectAll ? { sticky: selectAllSticky || false } : undefined}
|
425
413
|
/>
|
426
414
|
</div>
|
427
415
|
);
|
@@ -430,3 +418,187 @@ const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelec
|
|
430
418
|
export const Multiple: StoryObj<StorySelectProps> = {
|
431
419
|
render: (args) => <MultipleStory {...args} />,
|
432
420
|
};
|
421
|
+
|
422
|
+
const flatItems = [
|
423
|
+
{
|
424
|
+
value: 'north_america',
|
425
|
+
label: 'Северная Америка',
|
426
|
+
},
|
427
|
+
{
|
428
|
+
value: 'rio_de_janeiro',
|
429
|
+
label: 'Рио-де-Жанейро',
|
430
|
+
},
|
431
|
+
{
|
432
|
+
value: 'sao_paulo',
|
433
|
+
label: 'Сан-Паулу',
|
434
|
+
},
|
435
|
+
{
|
436
|
+
value: 'buenos_aires',
|
437
|
+
label: 'Буэнос-Айрес',
|
438
|
+
},
|
439
|
+
{
|
440
|
+
value: 'cordoba',
|
441
|
+
label: 'Кордова',
|
442
|
+
},
|
443
|
+
{
|
444
|
+
value: 'bogota',
|
445
|
+
label: 'Богота',
|
446
|
+
},
|
447
|
+
{
|
448
|
+
value: 'medellin',
|
449
|
+
label: 'Медельин',
|
450
|
+
},
|
451
|
+
{
|
452
|
+
value: 'paris',
|
453
|
+
label: 'Париж',
|
454
|
+
},
|
455
|
+
{
|
456
|
+
value: 'lyon',
|
457
|
+
label: 'Лион',
|
458
|
+
},
|
459
|
+
{
|
460
|
+
value: 'berlin',
|
461
|
+
label: 'Берлин',
|
462
|
+
},
|
463
|
+
{
|
464
|
+
value: 'munich',
|
465
|
+
label: 'Мюнхен',
|
466
|
+
},
|
467
|
+
{
|
468
|
+
value: 'rome',
|
469
|
+
label: 'Рим',
|
470
|
+
},
|
471
|
+
{
|
472
|
+
value: 'milan',
|
473
|
+
label: 'Милан',
|
474
|
+
},
|
475
|
+
{
|
476
|
+
value: 'madrid',
|
477
|
+
label: 'Мадрид',
|
478
|
+
},
|
479
|
+
{
|
480
|
+
value: 'barcelona',
|
481
|
+
label: 'Барселона',
|
482
|
+
},
|
483
|
+
{
|
484
|
+
value: 'london',
|
485
|
+
label: 'Лондон',
|
486
|
+
},
|
487
|
+
{
|
488
|
+
value: 'manchester',
|
489
|
+
label: 'Манчестер',
|
490
|
+
},
|
491
|
+
{
|
492
|
+
value: 'beijing',
|
493
|
+
label: 'Пекин',
|
494
|
+
},
|
495
|
+
{
|
496
|
+
value: 'shanghai',
|
497
|
+
label: 'Шанхай',
|
498
|
+
},
|
499
|
+
{
|
500
|
+
value: 'tokyo',
|
501
|
+
label: 'Токио',
|
502
|
+
},
|
503
|
+
{
|
504
|
+
value: 'osaka',
|
505
|
+
label: 'Осака',
|
506
|
+
},
|
507
|
+
{
|
508
|
+
value: 'delhi',
|
509
|
+
label: 'Дели',
|
510
|
+
},
|
511
|
+
{
|
512
|
+
value: 'mumbai',
|
513
|
+
label: 'Мумбаи',
|
514
|
+
},
|
515
|
+
{
|
516
|
+
value: 'seoul',
|
517
|
+
label: 'Сеул',
|
518
|
+
},
|
519
|
+
{
|
520
|
+
value: 'busan',
|
521
|
+
label: 'Пусан',
|
522
|
+
},
|
523
|
+
{
|
524
|
+
value: 'bangkok',
|
525
|
+
label: 'Бангкок',
|
526
|
+
},
|
527
|
+
{
|
528
|
+
value: 'phuket',
|
529
|
+
label: 'Пхукет',
|
530
|
+
},
|
531
|
+
{
|
532
|
+
value: 'africa',
|
533
|
+
label: 'Африка',
|
534
|
+
},
|
535
|
+
];
|
536
|
+
|
537
|
+
const SelectAllStory = (args: StorySelectProps) => {
|
538
|
+
const [value, setValue] = useState([]);
|
539
|
+
const [checked, setChecked] = useState(false);
|
540
|
+
const [indeterminate, setIndeterminate] = useState(false);
|
541
|
+
|
542
|
+
const handleClick = () => {
|
543
|
+
if (checked && !indeterminate) {
|
544
|
+
setValue([]);
|
545
|
+
} else {
|
546
|
+
setValue(flatItems.map((item) => item.value));
|
547
|
+
}
|
548
|
+
};
|
549
|
+
|
550
|
+
React.useEffect(() => {
|
551
|
+
if (value.length === 0) {
|
552
|
+
setChecked(false);
|
553
|
+
setIndeterminate(false);
|
554
|
+
} else if (value.length === flatItems.length) {
|
555
|
+
setChecked(true);
|
556
|
+
setIndeterminate(false);
|
557
|
+
} else {
|
558
|
+
setChecked(true);
|
559
|
+
setIndeterminate(true);
|
560
|
+
}
|
561
|
+
}, [value]);
|
562
|
+
|
563
|
+
return (
|
564
|
+
<div style={{ width: '400px' }}>
|
565
|
+
<Combobox
|
566
|
+
placeholder="Placeholder"
|
567
|
+
multiple
|
568
|
+
items={flatItems}
|
569
|
+
value={value}
|
570
|
+
onChange={setValue}
|
571
|
+
listOverflow="auto"
|
572
|
+
listMaxHeight="300px"
|
573
|
+
selectAllOptions={{
|
574
|
+
sticky: args?.selectAllSticky || false,
|
575
|
+
label: args?.selectAllLabel,
|
576
|
+
checked,
|
577
|
+
indeterminate,
|
578
|
+
onClick: handleClick,
|
579
|
+
}}
|
580
|
+
/>
|
581
|
+
</div>
|
582
|
+
);
|
583
|
+
};
|
584
|
+
|
585
|
+
export const SelectAll: StoryObj<StorySelectProps> = {
|
586
|
+
render: (args) => <SelectAllStory {...args} />,
|
587
|
+
argTypes: {
|
588
|
+
selectAllSticky: {
|
589
|
+
control: 'boolean',
|
590
|
+
},
|
591
|
+
selectAllLabel: {
|
592
|
+
control: 'text',
|
593
|
+
},
|
594
|
+
},
|
595
|
+
args: {
|
596
|
+
selectAllSticky: false,
|
597
|
+
selectAllLabel: 'Выбрать все',
|
598
|
+
},
|
599
|
+
parameters: {
|
600
|
+
controls: {
|
601
|
+
include: ['selectAllSticky', 'selectAllLabel'],
|
602
|
+
},
|
603
|
+
},
|
604
|
+
};
|
@@ -9,7 +9,7 @@ import { Select } from './Select';
|
|
9
9
|
|
10
10
|
type StorySelectProps = ComponentProps<typeof Select> & {
|
11
11
|
enableContentLeft?: boolean;
|
12
|
-
|
12
|
+
selectAllLabel?: string;
|
13
13
|
selectAllSticky?: boolean;
|
14
14
|
};
|
15
15
|
|
@@ -100,13 +100,6 @@ const meta: Meta<StorySelectProps> = {
|
|
100
100
|
options: ['default', 'text'],
|
101
101
|
if: { arg: 'target', eq: 'textfield-like' },
|
102
102
|
},
|
103
|
-
enableSelectAll: {
|
104
|
-
control: 'boolean',
|
105
|
-
},
|
106
|
-
selectAllSticky: {
|
107
|
-
control: 'boolean',
|
108
|
-
if: { arg: 'enableSelectAll', truthy: true },
|
109
|
-
},
|
110
103
|
...disableProps([
|
111
104
|
'hintText',
|
112
105
|
'hintTrigger',
|
@@ -138,8 +131,6 @@ const meta: Meta<StorySelectProps> = {
|
|
138
131
|
requiredPlacement: 'right',
|
139
132
|
hasRequiredIndicator: true,
|
140
133
|
chipType: 'default',
|
141
|
-
enableSelectAll: false,
|
142
|
-
selectAllSticky: false,
|
143
134
|
},
|
144
135
|
parameters: {
|
145
136
|
controls: {
|
@@ -163,8 +154,6 @@ const meta: Meta<StorySelectProps> = {
|
|
163
154
|
'requiredPlacement',
|
164
155
|
'hasRequiredIndicator',
|
165
156
|
'chipType',
|
166
|
-
'enableSelectAll',
|
167
|
-
'selectAllSticky',
|
168
157
|
],
|
169
158
|
},
|
170
159
|
},
|
@@ -403,7 +392,7 @@ const SingleStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
|
|
403
392
|
export const Single: StoryObj<StorySelectProps> = {
|
404
393
|
parameters: {
|
405
394
|
controls: {
|
406
|
-
exclude: ['isTargetAmount', 'chipType'
|
395
|
+
exclude: ['isTargetAmount', 'chipType'],
|
407
396
|
},
|
408
397
|
},
|
409
398
|
render: (args) => <SingleStory {...args} />,
|
@@ -412,7 +401,7 @@ export const Single: StoryObj<StorySelectProps> = {
|
|
412
401
|
},
|
413
402
|
};
|
414
403
|
|
415
|
-
const MultiselectStory = ({ enableContentLeft,
|
404
|
+
const MultiselectStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
|
416
405
|
const [value, setValue] = useState<Array<string>>([]);
|
417
406
|
|
418
407
|
return (
|
@@ -423,7 +412,6 @@ const MultiselectStory = ({ enableContentLeft, enableSelectAll, selectAllSticky,
|
|
423
412
|
value={value}
|
424
413
|
onChange={setValue}
|
425
414
|
contentLeft={enableContentLeft ? <IconPlasma size="s" color="inherit" /> : undefined}
|
426
|
-
selectAllOptions={enableSelectAll ? { sticky: selectAllSticky || false } : undefined}
|
427
415
|
/>
|
428
416
|
</div>
|
429
417
|
);
|
@@ -466,10 +454,189 @@ const PredefinedStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
|
|
466
454
|
};
|
467
455
|
|
468
456
|
export const Predefined: StoryObj<StorySelectProps> = {
|
457
|
+
render: (args) => <PredefinedStory {...args} />,
|
458
|
+
};
|
459
|
+
|
460
|
+
const flatItems = [
|
461
|
+
{
|
462
|
+
value: 'north_america',
|
463
|
+
label: 'Северная Америка',
|
464
|
+
},
|
465
|
+
{
|
466
|
+
value: 'rio_de_janeiro',
|
467
|
+
label: 'Рио-де-Жанейро',
|
468
|
+
},
|
469
|
+
{
|
470
|
+
value: 'sao_paulo',
|
471
|
+
label: 'Сан-Паулу',
|
472
|
+
},
|
473
|
+
{
|
474
|
+
value: 'buenos_aires',
|
475
|
+
label: 'Буэнос-Айрес',
|
476
|
+
},
|
477
|
+
{
|
478
|
+
value: 'cordoba',
|
479
|
+
label: 'Кордова',
|
480
|
+
},
|
481
|
+
{
|
482
|
+
value: 'bogota',
|
483
|
+
label: 'Богота',
|
484
|
+
},
|
485
|
+
{
|
486
|
+
value: 'medellin',
|
487
|
+
label: 'Медельин',
|
488
|
+
},
|
489
|
+
{
|
490
|
+
value: 'paris',
|
491
|
+
label: 'Париж',
|
492
|
+
},
|
493
|
+
{
|
494
|
+
value: 'lyon',
|
495
|
+
label: 'Лион',
|
496
|
+
},
|
497
|
+
{
|
498
|
+
value: 'berlin',
|
499
|
+
label: 'Берлин',
|
500
|
+
},
|
501
|
+
{
|
502
|
+
value: 'munich',
|
503
|
+
label: 'Мюнхен',
|
504
|
+
},
|
505
|
+
{
|
506
|
+
value: 'rome',
|
507
|
+
label: 'Рим',
|
508
|
+
},
|
509
|
+
{
|
510
|
+
value: 'milan',
|
511
|
+
label: 'Милан',
|
512
|
+
},
|
513
|
+
{
|
514
|
+
value: 'madrid',
|
515
|
+
label: 'Мадрид',
|
516
|
+
},
|
517
|
+
{
|
518
|
+
value: 'barcelona',
|
519
|
+
label: 'Барселона',
|
520
|
+
},
|
521
|
+
{
|
522
|
+
value: 'london',
|
523
|
+
label: 'Лондон',
|
524
|
+
},
|
525
|
+
{
|
526
|
+
value: 'manchester',
|
527
|
+
label: 'Манчестер',
|
528
|
+
},
|
529
|
+
{
|
530
|
+
value: 'beijing',
|
531
|
+
label: 'Пекин',
|
532
|
+
},
|
533
|
+
{
|
534
|
+
value: 'shanghai',
|
535
|
+
label: 'Шанхай',
|
536
|
+
},
|
537
|
+
{
|
538
|
+
value: 'tokyo',
|
539
|
+
label: 'Токио',
|
540
|
+
},
|
541
|
+
{
|
542
|
+
value: 'osaka',
|
543
|
+
label: 'Осака',
|
544
|
+
},
|
545
|
+
{
|
546
|
+
value: 'delhi',
|
547
|
+
label: 'Дели',
|
548
|
+
},
|
549
|
+
{
|
550
|
+
value: 'mumbai',
|
551
|
+
label: 'Мумбаи',
|
552
|
+
},
|
553
|
+
{
|
554
|
+
value: 'seoul',
|
555
|
+
label: 'Сеул',
|
556
|
+
},
|
557
|
+
{
|
558
|
+
value: 'busan',
|
559
|
+
label: 'Пусан',
|
560
|
+
},
|
561
|
+
{
|
562
|
+
value: 'bangkok',
|
563
|
+
label: 'Бангкок',
|
564
|
+
},
|
565
|
+
{
|
566
|
+
value: 'phuket',
|
567
|
+
label: 'Пхукет',
|
568
|
+
},
|
569
|
+
{
|
570
|
+
value: 'africa',
|
571
|
+
label: 'Африка',
|
572
|
+
},
|
573
|
+
];
|
574
|
+
|
575
|
+
const SelectAllStory = (args: StorySelectProps) => {
|
576
|
+
const [value, setValue] = useState([]);
|
577
|
+
const [checked, setChecked] = useState(false);
|
578
|
+
const [indeterminate, setIndeterminate] = useState(false);
|
579
|
+
|
580
|
+
const handleClick = () => {
|
581
|
+
if (checked && !indeterminate) {
|
582
|
+
setValue([]);
|
583
|
+
} else {
|
584
|
+
setValue(flatItems.map((item) => item.value));
|
585
|
+
}
|
586
|
+
};
|
587
|
+
|
588
|
+
React.useEffect(() => {
|
589
|
+
if (value.length === 0) {
|
590
|
+
setChecked(false);
|
591
|
+
setIndeterminate(false);
|
592
|
+
} else if (value.length === flatItems.length) {
|
593
|
+
setChecked(true);
|
594
|
+
setIndeterminate(false);
|
595
|
+
} else {
|
596
|
+
setChecked(true);
|
597
|
+
setIndeterminate(true);
|
598
|
+
}
|
599
|
+
}, [value]);
|
600
|
+
|
601
|
+
return (
|
602
|
+
<div style={{ width: '400px' }}>
|
603
|
+
<Select
|
604
|
+
placeholder="Placeholder"
|
605
|
+
multiselect
|
606
|
+
items={flatItems}
|
607
|
+
value={value}
|
608
|
+
onChange={setValue}
|
609
|
+
listOverflow="auto"
|
610
|
+
listMaxHeight="300px"
|
611
|
+
selectAllOptions={{
|
612
|
+
sticky: args?.selectAllSticky || false,
|
613
|
+
label: args?.selectAllLabel,
|
614
|
+
checked,
|
615
|
+
indeterminate,
|
616
|
+
onClick: handleClick,
|
617
|
+
}}
|
618
|
+
/>
|
619
|
+
</div>
|
620
|
+
);
|
621
|
+
};
|
622
|
+
|
623
|
+
export const SelectAll: StoryObj<StorySelectProps> = {
|
624
|
+
render: (args) => <SelectAllStory {...args} />,
|
625
|
+
argTypes: {
|
626
|
+
selectAllSticky: {
|
627
|
+
control: 'boolean',
|
628
|
+
},
|
629
|
+
selectAllLabel: {
|
630
|
+
control: 'text',
|
631
|
+
},
|
632
|
+
},
|
633
|
+
args: {
|
634
|
+
selectAllSticky: false,
|
635
|
+
selectAllLabel: 'Выбрать все',
|
636
|
+
},
|
469
637
|
parameters: {
|
470
638
|
controls: {
|
471
|
-
|
639
|
+
include: ['selectAllSticky', 'selectAllLabel'],
|
472
640
|
},
|
473
641
|
},
|
474
|
-
render: (args) => <PredefinedStory {...args} />,
|
475
642
|
};
|
@@ -8,7 +8,7 @@ import { Combobox } from './Combobox';
|
|
8
8
|
|
9
9
|
type StorySelectProps = ComponentProps<typeof Combobox> & {
|
10
10
|
enableContentLeft?: boolean;
|
11
|
-
|
11
|
+
selectAllLabel?: string;
|
12
12
|
selectAllSticky?: boolean;
|
13
13
|
};
|
14
14
|
|
@@ -94,13 +94,6 @@ const meta: Meta<StorySelectProps> = {
|
|
94
94
|
emptyStateDescription: {
|
95
95
|
control: { type: 'text' },
|
96
96
|
},
|
97
|
-
enableSelectAll: {
|
98
|
-
control: 'boolean',
|
99
|
-
},
|
100
|
-
selectAllSticky: {
|
101
|
-
control: 'boolean',
|
102
|
-
if: { arg: 'enableSelectAll', truthy: true },
|
103
|
-
},
|
104
97
|
...disableProps([
|
105
98
|
'hintText',
|
106
99
|
'hintTrigger',
|
@@ -133,8 +126,6 @@ const meta: Meta<StorySelectProps> = {
|
|
133
126
|
requiredPlacement: 'right',
|
134
127
|
hasRequiredIndicator: true,
|
135
128
|
emptyStateDescription: '',
|
136
|
-
enableSelectAll: false,
|
137
|
-
selectAllSticky: false,
|
138
129
|
},
|
139
130
|
parameters: {
|
140
131
|
controls: {
|
@@ -163,8 +154,6 @@ const meta: Meta<StorySelectProps> = {
|
|
163
154
|
'requiredPlacement',
|
164
155
|
'hasRequiredIndicator',
|
165
156
|
'emptyStateDescription',
|
166
|
-
'enableSelectAll',
|
167
|
-
'selectAllSticky',
|
168
157
|
],
|
169
158
|
},
|
170
159
|
},
|
@@ -380,7 +369,7 @@ const items = [
|
|
380
369
|
{
|
381
370
|
value: 'africa',
|
382
371
|
label: 'Африка',
|
383
|
-
|
372
|
+
isDisabled: true,
|
384
373
|
},
|
385
374
|
];
|
386
375
|
|
@@ -404,12 +393,12 @@ export const Single: StoryObj<StorySelectProps> = {
|
|
404
393
|
render: (args) => <SingleStory {...args} />,
|
405
394
|
parameters: {
|
406
395
|
controls: {
|
407
|
-
exclude: ['isTargetAmount'
|
396
|
+
exclude: ['isTargetAmount'],
|
408
397
|
},
|
409
398
|
},
|
410
399
|
};
|
411
400
|
|
412
|
-
const MultipleStory = (
|
401
|
+
const MultipleStory = (args: StorySelectProps) => {
|
413
402
|
const [value, setValue] = useState([]);
|
414
403
|
|
415
404
|
return (
|
@@ -421,7 +410,6 @@ const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelec
|
|
421
410
|
value={value}
|
422
411
|
onChange={setValue}
|
423
412
|
contentLeft={args.enableContentLeft ? <IconDone size="s" /> : undefined}
|
424
|
-
selectAllOptions={enableSelectAll ? { sticky: selectAllSticky || false } : undefined}
|
425
413
|
/>
|
426
414
|
</div>
|
427
415
|
);
|
@@ -430,3 +418,187 @@ const MultipleStory = ({ enableSelectAll, selectAllSticky, ...args }: StorySelec
|
|
430
418
|
export const Multiple: StoryObj<StorySelectProps> = {
|
431
419
|
render: (args) => <MultipleStory {...args} />,
|
432
420
|
};
|
421
|
+
|
422
|
+
const flatItems = [
|
423
|
+
{
|
424
|
+
value: 'north_america',
|
425
|
+
label: 'Северная Америка',
|
426
|
+
},
|
427
|
+
{
|
428
|
+
value: 'rio_de_janeiro',
|
429
|
+
label: 'Рио-де-Жанейро',
|
430
|
+
},
|
431
|
+
{
|
432
|
+
value: 'sao_paulo',
|
433
|
+
label: 'Сан-Паулу',
|
434
|
+
},
|
435
|
+
{
|
436
|
+
value: 'buenos_aires',
|
437
|
+
label: 'Буэнос-Айрес',
|
438
|
+
},
|
439
|
+
{
|
440
|
+
value: 'cordoba',
|
441
|
+
label: 'Кордова',
|
442
|
+
},
|
443
|
+
{
|
444
|
+
value: 'bogota',
|
445
|
+
label: 'Богота',
|
446
|
+
},
|
447
|
+
{
|
448
|
+
value: 'medellin',
|
449
|
+
label: 'Медельин',
|
450
|
+
},
|
451
|
+
{
|
452
|
+
value: 'paris',
|
453
|
+
label: 'Париж',
|
454
|
+
},
|
455
|
+
{
|
456
|
+
value: 'lyon',
|
457
|
+
label: 'Лион',
|
458
|
+
},
|
459
|
+
{
|
460
|
+
value: 'berlin',
|
461
|
+
label: 'Берлин',
|
462
|
+
},
|
463
|
+
{
|
464
|
+
value: 'munich',
|
465
|
+
label: 'Мюнхен',
|
466
|
+
},
|
467
|
+
{
|
468
|
+
value: 'rome',
|
469
|
+
label: 'Рим',
|
470
|
+
},
|
471
|
+
{
|
472
|
+
value: 'milan',
|
473
|
+
label: 'Милан',
|
474
|
+
},
|
475
|
+
{
|
476
|
+
value: 'madrid',
|
477
|
+
label: 'Мадрид',
|
478
|
+
},
|
479
|
+
{
|
480
|
+
value: 'barcelona',
|
481
|
+
label: 'Барселона',
|
482
|
+
},
|
483
|
+
{
|
484
|
+
value: 'london',
|
485
|
+
label: 'Лондон',
|
486
|
+
},
|
487
|
+
{
|
488
|
+
value: 'manchester',
|
489
|
+
label: 'Манчестер',
|
490
|
+
},
|
491
|
+
{
|
492
|
+
value: 'beijing',
|
493
|
+
label: 'Пекин',
|
494
|
+
},
|
495
|
+
{
|
496
|
+
value: 'shanghai',
|
497
|
+
label: 'Шанхай',
|
498
|
+
},
|
499
|
+
{
|
500
|
+
value: 'tokyo',
|
501
|
+
label: 'Токио',
|
502
|
+
},
|
503
|
+
{
|
504
|
+
value: 'osaka',
|
505
|
+
label: 'Осака',
|
506
|
+
},
|
507
|
+
{
|
508
|
+
value: 'delhi',
|
509
|
+
label: 'Дели',
|
510
|
+
},
|
511
|
+
{
|
512
|
+
value: 'mumbai',
|
513
|
+
label: 'Мумбаи',
|
514
|
+
},
|
515
|
+
{
|
516
|
+
value: 'seoul',
|
517
|
+
label: 'Сеул',
|
518
|
+
},
|
519
|
+
{
|
520
|
+
value: 'busan',
|
521
|
+
label: 'Пусан',
|
522
|
+
},
|
523
|
+
{
|
524
|
+
value: 'bangkok',
|
525
|
+
label: 'Бангкок',
|
526
|
+
},
|
527
|
+
{
|
528
|
+
value: 'phuket',
|
529
|
+
label: 'Пхукет',
|
530
|
+
},
|
531
|
+
{
|
532
|
+
value: 'africa',
|
533
|
+
label: 'Африка',
|
534
|
+
},
|
535
|
+
];
|
536
|
+
|
537
|
+
const SelectAllStory = (args: StorySelectProps) => {
|
538
|
+
const [value, setValue] = useState([]);
|
539
|
+
const [checked, setChecked] = useState(false);
|
540
|
+
const [indeterminate, setIndeterminate] = useState(false);
|
541
|
+
|
542
|
+
const handleClick = () => {
|
543
|
+
if (checked && !indeterminate) {
|
544
|
+
setValue([]);
|
545
|
+
} else {
|
546
|
+
setValue(flatItems.map((item) => item.value));
|
547
|
+
}
|
548
|
+
};
|
549
|
+
|
550
|
+
React.useEffect(() => {
|
551
|
+
if (value.length === 0) {
|
552
|
+
setChecked(false);
|
553
|
+
setIndeterminate(false);
|
554
|
+
} else if (value.length === flatItems.length) {
|
555
|
+
setChecked(true);
|
556
|
+
setIndeterminate(false);
|
557
|
+
} else {
|
558
|
+
setChecked(true);
|
559
|
+
setIndeterminate(true);
|
560
|
+
}
|
561
|
+
}, [value]);
|
562
|
+
|
563
|
+
return (
|
564
|
+
<div style={{ width: '400px' }}>
|
565
|
+
<Combobox
|
566
|
+
placeholder="Placeholder"
|
567
|
+
multiple
|
568
|
+
items={flatItems}
|
569
|
+
value={value}
|
570
|
+
onChange={setValue}
|
571
|
+
listOverflow="auto"
|
572
|
+
listMaxHeight="300px"
|
573
|
+
selectAllOptions={{
|
574
|
+
sticky: args?.selectAllSticky || false,
|
575
|
+
label: args?.selectAllLabel,
|
576
|
+
checked,
|
577
|
+
indeterminate,
|
578
|
+
onClick: handleClick,
|
579
|
+
}}
|
580
|
+
/>
|
581
|
+
</div>
|
582
|
+
);
|
583
|
+
};
|
584
|
+
|
585
|
+
export const SelectAll: StoryObj<StorySelectProps> = {
|
586
|
+
render: (args) => <SelectAllStory {...args} />,
|
587
|
+
argTypes: {
|
588
|
+
selectAllSticky: {
|
589
|
+
control: 'boolean',
|
590
|
+
},
|
591
|
+
selectAllLabel: {
|
592
|
+
control: 'text',
|
593
|
+
},
|
594
|
+
},
|
595
|
+
args: {
|
596
|
+
selectAllSticky: false,
|
597
|
+
selectAllLabel: 'Выбрать все',
|
598
|
+
},
|
599
|
+
parameters: {
|
600
|
+
controls: {
|
601
|
+
include: ['selectAllSticky', 'selectAllLabel'],
|
602
|
+
},
|
603
|
+
},
|
604
|
+
};
|
@@ -9,7 +9,7 @@ import { Select } from './Select';
|
|
9
9
|
|
10
10
|
type StorySelectProps = ComponentProps<typeof Select> & {
|
11
11
|
enableContentLeft?: boolean;
|
12
|
-
|
12
|
+
selectAllLabel?: string;
|
13
13
|
selectAllSticky?: boolean;
|
14
14
|
};
|
15
15
|
|
@@ -100,13 +100,6 @@ const meta: Meta<StorySelectProps> = {
|
|
100
100
|
options: ['default', 'text'],
|
101
101
|
if: { arg: 'target', eq: 'textfield-like' },
|
102
102
|
},
|
103
|
-
enableSelectAll: {
|
104
|
-
control: 'boolean',
|
105
|
-
},
|
106
|
-
selectAllSticky: {
|
107
|
-
control: 'boolean',
|
108
|
-
if: { arg: 'enableSelectAll', truthy: true },
|
109
|
-
},
|
110
103
|
...disableProps([
|
111
104
|
'hintText',
|
112
105
|
'hintTrigger',
|
@@ -138,8 +131,6 @@ const meta: Meta<StorySelectProps> = {
|
|
138
131
|
requiredPlacement: 'right',
|
139
132
|
hasRequiredIndicator: true,
|
140
133
|
chipType: 'default',
|
141
|
-
enableSelectAll: false,
|
142
|
-
selectAllSticky: false,
|
143
134
|
},
|
144
135
|
parameters: {
|
145
136
|
controls: {
|
@@ -163,8 +154,6 @@ const meta: Meta<StorySelectProps> = {
|
|
163
154
|
'requiredPlacement',
|
164
155
|
'hasRequiredIndicator',
|
165
156
|
'chipType',
|
166
|
-
'enableSelectAll',
|
167
|
-
'selectAllSticky',
|
168
157
|
],
|
169
158
|
},
|
170
159
|
},
|
@@ -403,7 +392,7 @@ const SingleStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
|
|
403
392
|
export const Single: StoryObj<StorySelectProps> = {
|
404
393
|
parameters: {
|
405
394
|
controls: {
|
406
|
-
exclude: ['isTargetAmount', 'chipType'
|
395
|
+
exclude: ['isTargetAmount', 'chipType'],
|
407
396
|
},
|
408
397
|
},
|
409
398
|
render: (args) => <SingleStory {...args} />,
|
@@ -412,7 +401,7 @@ export const Single: StoryObj<StorySelectProps> = {
|
|
412
401
|
},
|
413
402
|
};
|
414
403
|
|
415
|
-
const MultiselectStory = ({ enableContentLeft,
|
404
|
+
const MultiselectStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
|
416
405
|
const [value, setValue] = useState<Array<string>>([]);
|
417
406
|
|
418
407
|
return (
|
@@ -423,7 +412,6 @@ const MultiselectStory = ({ enableContentLeft, enableSelectAll, selectAllSticky,
|
|
423
412
|
value={value}
|
424
413
|
onChange={setValue}
|
425
414
|
contentLeft={enableContentLeft ? <IconPlasma size="s" color="inherit" /> : undefined}
|
426
|
-
selectAllOptions={enableSelectAll ? { sticky: selectAllSticky || false } : undefined}
|
427
415
|
/>
|
428
416
|
</div>
|
429
417
|
);
|
@@ -466,10 +454,189 @@ const PredefinedStory = ({ enableContentLeft, ...args }: StorySelectProps) => {
|
|
466
454
|
};
|
467
455
|
|
468
456
|
export const Predefined: StoryObj<StorySelectProps> = {
|
457
|
+
render: (args) => <PredefinedStory {...args} />,
|
458
|
+
};
|
459
|
+
|
460
|
+
const flatItems = [
|
461
|
+
{
|
462
|
+
value: 'north_america',
|
463
|
+
label: 'Северная Америка',
|
464
|
+
},
|
465
|
+
{
|
466
|
+
value: 'rio_de_janeiro',
|
467
|
+
label: 'Рио-де-Жанейро',
|
468
|
+
},
|
469
|
+
{
|
470
|
+
value: 'sao_paulo',
|
471
|
+
label: 'Сан-Паулу',
|
472
|
+
},
|
473
|
+
{
|
474
|
+
value: 'buenos_aires',
|
475
|
+
label: 'Буэнос-Айрес',
|
476
|
+
},
|
477
|
+
{
|
478
|
+
value: 'cordoba',
|
479
|
+
label: 'Кордова',
|
480
|
+
},
|
481
|
+
{
|
482
|
+
value: 'bogota',
|
483
|
+
label: 'Богота',
|
484
|
+
},
|
485
|
+
{
|
486
|
+
value: 'medellin',
|
487
|
+
label: 'Медельин',
|
488
|
+
},
|
489
|
+
{
|
490
|
+
value: 'paris',
|
491
|
+
label: 'Париж',
|
492
|
+
},
|
493
|
+
{
|
494
|
+
value: 'lyon',
|
495
|
+
label: 'Лион',
|
496
|
+
},
|
497
|
+
{
|
498
|
+
value: 'berlin',
|
499
|
+
label: 'Берлин',
|
500
|
+
},
|
501
|
+
{
|
502
|
+
value: 'munich',
|
503
|
+
label: 'Мюнхен',
|
504
|
+
},
|
505
|
+
{
|
506
|
+
value: 'rome',
|
507
|
+
label: 'Рим',
|
508
|
+
},
|
509
|
+
{
|
510
|
+
value: 'milan',
|
511
|
+
label: 'Милан',
|
512
|
+
},
|
513
|
+
{
|
514
|
+
value: 'madrid',
|
515
|
+
label: 'Мадрид',
|
516
|
+
},
|
517
|
+
{
|
518
|
+
value: 'barcelona',
|
519
|
+
label: 'Барселона',
|
520
|
+
},
|
521
|
+
{
|
522
|
+
value: 'london',
|
523
|
+
label: 'Лондон',
|
524
|
+
},
|
525
|
+
{
|
526
|
+
value: 'manchester',
|
527
|
+
label: 'Манчестер',
|
528
|
+
},
|
529
|
+
{
|
530
|
+
value: 'beijing',
|
531
|
+
label: 'Пекин',
|
532
|
+
},
|
533
|
+
{
|
534
|
+
value: 'shanghai',
|
535
|
+
label: 'Шанхай',
|
536
|
+
},
|
537
|
+
{
|
538
|
+
value: 'tokyo',
|
539
|
+
label: 'Токио',
|
540
|
+
},
|
541
|
+
{
|
542
|
+
value: 'osaka',
|
543
|
+
label: 'Осака',
|
544
|
+
},
|
545
|
+
{
|
546
|
+
value: 'delhi',
|
547
|
+
label: 'Дели',
|
548
|
+
},
|
549
|
+
{
|
550
|
+
value: 'mumbai',
|
551
|
+
label: 'Мумбаи',
|
552
|
+
},
|
553
|
+
{
|
554
|
+
value: 'seoul',
|
555
|
+
label: 'Сеул',
|
556
|
+
},
|
557
|
+
{
|
558
|
+
value: 'busan',
|
559
|
+
label: 'Пусан',
|
560
|
+
},
|
561
|
+
{
|
562
|
+
value: 'bangkok',
|
563
|
+
label: 'Бангкок',
|
564
|
+
},
|
565
|
+
{
|
566
|
+
value: 'phuket',
|
567
|
+
label: 'Пхукет',
|
568
|
+
},
|
569
|
+
{
|
570
|
+
value: 'africa',
|
571
|
+
label: 'Африка',
|
572
|
+
},
|
573
|
+
];
|
574
|
+
|
575
|
+
const SelectAllStory = (args: StorySelectProps) => {
|
576
|
+
const [value, setValue] = useState([]);
|
577
|
+
const [checked, setChecked] = useState(false);
|
578
|
+
const [indeterminate, setIndeterminate] = useState(false);
|
579
|
+
|
580
|
+
const handleClick = () => {
|
581
|
+
if (checked && !indeterminate) {
|
582
|
+
setValue([]);
|
583
|
+
} else {
|
584
|
+
setValue(flatItems.map((item) => item.value));
|
585
|
+
}
|
586
|
+
};
|
587
|
+
|
588
|
+
React.useEffect(() => {
|
589
|
+
if (value.length === 0) {
|
590
|
+
setChecked(false);
|
591
|
+
setIndeterminate(false);
|
592
|
+
} else if (value.length === flatItems.length) {
|
593
|
+
setChecked(true);
|
594
|
+
setIndeterminate(false);
|
595
|
+
} else {
|
596
|
+
setChecked(true);
|
597
|
+
setIndeterminate(true);
|
598
|
+
}
|
599
|
+
}, [value]);
|
600
|
+
|
601
|
+
return (
|
602
|
+
<div style={{ width: '400px' }}>
|
603
|
+
<Select
|
604
|
+
placeholder="Placeholder"
|
605
|
+
multiselect
|
606
|
+
items={flatItems}
|
607
|
+
value={value}
|
608
|
+
onChange={setValue}
|
609
|
+
listOverflow="auto"
|
610
|
+
listMaxHeight="300px"
|
611
|
+
selectAllOptions={{
|
612
|
+
sticky: args?.selectAllSticky || false,
|
613
|
+
label: args?.selectAllLabel,
|
614
|
+
checked,
|
615
|
+
indeterminate,
|
616
|
+
onClick: handleClick,
|
617
|
+
}}
|
618
|
+
/>
|
619
|
+
</div>
|
620
|
+
);
|
621
|
+
};
|
622
|
+
|
623
|
+
export const SelectAll: StoryObj<StorySelectProps> = {
|
624
|
+
render: (args) => <SelectAllStory {...args} />,
|
625
|
+
argTypes: {
|
626
|
+
selectAllSticky: {
|
627
|
+
control: 'boolean',
|
628
|
+
},
|
629
|
+
selectAllLabel: {
|
630
|
+
control: 'text',
|
631
|
+
},
|
632
|
+
},
|
633
|
+
args: {
|
634
|
+
selectAllSticky: false,
|
635
|
+
selectAllLabel: 'Выбрать все',
|
636
|
+
},
|
469
637
|
parameters: {
|
470
638
|
controls: {
|
471
|
-
|
639
|
+
include: ['selectAllSticky', 'selectAllLabel'],
|
472
640
|
},
|
473
641
|
},
|
474
|
-
render: (args) => <PredefinedStory {...args} />,
|
475
642
|
};
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@salutejs/sdds-cs",
|
3
|
-
"version": "0.316.1-canary.1986.
|
3
|
+
"version": "0.316.1-canary.1986.15255471728.0",
|
4
4
|
"description": "Salute Design System / React UI kit for SDDS CS web applications",
|
5
5
|
"author": "Salute Frontend Team <salute.developers@gmail.com>",
|
6
6
|
"license": "MIT",
|
@@ -30,7 +30,7 @@
|
|
30
30
|
"directory": "packages/sdds-cs"
|
31
31
|
},
|
32
32
|
"dependencies": {
|
33
|
-
"@salutejs/plasma-new-hope": "0.324.1-canary.1986.
|
33
|
+
"@salutejs/plasma-new-hope": "0.324.1-canary.1986.15255471728.0",
|
34
34
|
"@salutejs/sdds-themes": "0.37.0-dev.0"
|
35
35
|
},
|
36
36
|
"peerDependencies": {
|
@@ -123,5 +123,5 @@
|
|
123
123
|
"Anton Vinogradov"
|
124
124
|
],
|
125
125
|
"sideEffects": false,
|
126
|
-
"gitHead": "
|
126
|
+
"gitHead": "afd7762b9105000815c1eb7535d1a254bb7d0fe6"
|
127
127
|
}
|