Преглед изворни кода

Add conference notification

master
zbettenbuk пре 7 година
родитељ
комит
ae0bf876a8

+ 3
- 0
css/_font.scss Прегледај датотеку

@@ -36,6 +36,9 @@
36 36
 .icon-navigate_before:before {
37 37
   content: "\e408";
38 38
 }
39
+.icon-navigate_next:before {
40
+  content: "\e409";
41
+}
39 42
 .icon-public:before {
40 43
     content: "\e80b";
41 44
 }


+ 1
- 0
fonts/jitsi.svg Прегледај датотеку

@@ -12,6 +12,7 @@
12 12
 <glyph unicode="&#xe1aa;" glyph-name="bluetooth" d="M550 328l-80 82v-162zM470 776v-162l80 82zM670 696l-184-184 184-184-244-242h-42v324l-196-196-60 60 238 238-238 238 60 60 196-196v324h42zM834 738c40-64 62-142 62-222 0-84-24-160-66-226l-50 50c26 52 42 110 42 172s-16 120-42 172zM608 512l98 98c12-30 20-64 20-98s-8-70-20-100z" />
13 13
 <glyph unicode="&#xe310;" glyph-name="headset" d="M512 982c212 0 384-172 384-384v-300c0-70-58-128-128-128h-128v342h170v86c0 166-132 298-298 298s-298-132-298-298v-86h170v-342h-128c-70 0-128 58-128 128v300c0 212 172 384 384 384z" />
14 14
 <glyph unicode="&#xe408;" glyph-name="navigate_before" d="M658 708l-196-196 196-196-60-60-256 256 256 256z" />
15
+<glyph unicode="&#xe409;" glyph-name="navigate_next" d="M426 768l256-256-256-256-60 60 196 196-196 196z" />
15 16
 <glyph unicode="&#xe425;" glyph-name="timer" d="M512 170c166 0 298 134 298 300s-132 298-298 298-298-132-298-298 132-300 298-300zM812 708c52-66 84-148 84-238 0-212-172-384-384-384s-384 172-384 384 172 384 384 384c90 0 174-34 240-86l60 62c22-18 42-38 60-60zM470 426v256h84v-256h-84zM640 982v-86h-256v86h256z" />
16 17
 <glyph unicode="&#xe5c4;" glyph-name="arrow_back" d="M854 554v-84h-520l238-240-60-60-342 342 342 342 60-60-238-240h520z" />
17 18
 <glyph unicode="&#xe5d2;" glyph-name="menu" d="M128 768h768v-86h-768v86zM128 470v84h768v-84h-768zM128 256v86h768v-86h-768z" />



+ 82
- 55
fonts/selection.json Прегледај датотеку

@@ -1,6 +1,33 @@
1 1
 {
2 2
   "IcoMoonType": "selection",
3 3
   "icons": [
4
+    {
5
+      "icon": {
6
+        "paths": [
7
+          "M426 256l256 256-256 256-60-60 196-196-196-196z"
8
+        ],
9
+        "attrs": [],
10
+        "isMulticolor": false,
11
+        "isMulticolor2": false,
12
+        "tags": [
13
+          "navigate_next"
14
+        ],
15
+        "defaultCode": 58377,
16
+        "grid": 24
17
+      },
18
+      "attrs": [],
19
+      "properties": {
20
+        "ligatures": "chevron_right, navigate_next",
21
+        "id": 153,
22
+        "order": 927,
23
+        "prevSize": 24,
24
+        "code": 58377,
25
+        "name": "navigate_next"
26
+      },
27
+      "setIdx": 0,
28
+      "setId": 2,
29
+      "iconIdx": 153
30
+    },
4 31
     {
5 32
       "icon": {
6 33
         "paths": [
@@ -24,9 +51,9 @@
24 51
         "code": 58834,
25 52
         "name": "menu"
26 53
       },
27
-      "setIdx": 0,
28
-      "setId": 2,
29
-      "iconIdx": 489
54
+      "setIdx": 1,
55
+      "setId": 1,
56
+      "iconIdx": 0
30 57
     },
31 58
     {
32 59
       "icon": {
@@ -53,7 +80,7 @@
53 80
       },
54 81
       "setIdx": 1,
55 82
       "setId": 1,
56
-      "iconIdx": 0
83
+      "iconIdx": 1
57 84
     },
58 85
     {
59 86
       "icon": {
@@ -80,7 +107,7 @@
80 107
       },
81 108
       "setIdx": 1,
82 109
       "setId": 1,
83
-      "iconIdx": 1
110
+      "iconIdx": 2
84 111
     },
85 112
     {
86 113
       "icon": {
@@ -107,7 +134,7 @@
107 134
       },
108 135
       "setIdx": 1,
109 136
       "setId": 1,
110
-      "iconIdx": 2
137
+      "iconIdx": 3
111 138
     },
112 139
     {
113 140
       "icon": {
@@ -134,7 +161,7 @@
134 161
       },
135 162
       "setIdx": 1,
136 163
       "setId": 1,
137
-      "iconIdx": 3
164
+      "iconIdx": 4
138 165
     },
139 166
     {
140 167
       "icon": {
@@ -161,7 +188,7 @@
161 188
       },
162 189
       "setIdx": 1,
163 190
       "setId": 1,
164
-      "iconIdx": 4
191
+      "iconIdx": 5
165 192
     },
166 193
     {
167 194
       "icon": {
@@ -188,7 +215,7 @@
188 215
       },
189 216
       "setIdx": 1,
190 217
       "setId": 1,
191
-      "iconIdx": 5
218
+      "iconIdx": 6
192 219
     },
193 220
     {
194 221
       "icon": {
@@ -215,7 +242,7 @@
215 242
       },
216 243
       "setIdx": 1,
217 244
       "setId": 1,
218
-      "iconIdx": 6
245
+      "iconIdx": 7
219 246
     },
220 247
     {
221 248
       "icon": {
@@ -242,7 +269,7 @@
242 269
       },
243 270
       "setIdx": 1,
244 271
       "setId": 1,
245
-      "iconIdx": 7
272
+      "iconIdx": 8
246 273
     },
247 274
     {
248 275
       "icon": {
@@ -269,7 +296,7 @@
269 296
       },
270 297
       "setIdx": 1,
271 298
       "setId": 1,
272
-      "iconIdx": 8
299
+      "iconIdx": 9
273 300
     },
274 301
     {
275 302
       "icon": {
@@ -298,7 +325,7 @@
298 325
       },
299 326
       "setIdx": 1,
300 327
       "setId": 1,
301
-      "iconIdx": 9
328
+      "iconIdx": 10
302 329
     },
303 330
     {
304 331
       "icon": {
@@ -325,7 +352,7 @@
325 352
       },
326 353
       "setIdx": 1,
327 354
       "setId": 1,
328
-      "iconIdx": 10
355
+      "iconIdx": 11
329 356
     },
330 357
     {
331 358
       "icon": {
@@ -352,7 +379,7 @@
352 379
       },
353 380
       "setIdx": 1,
354 381
       "setId": 1,
355
-      "iconIdx": 11
382
+      "iconIdx": 12
356 383
     },
357 384
     {
358 385
       "icon": {
@@ -381,7 +408,7 @@
381 408
       },
382 409
       "setIdx": 1,
383 410
       "setId": 1,
384
-      "iconIdx": 12
411
+      "iconIdx": 13
385 412
     },
386 413
     {
387 414
       "icon": {
@@ -410,7 +437,7 @@
410 437
       },
411 438
       "setIdx": 1,
412 439
       "setId": 1,
413
-      "iconIdx": 13
440
+      "iconIdx": 14
414 441
     },
415 442
     {
416 443
       "icon": {
@@ -439,7 +466,7 @@
439 466
       },
440 467
       "setIdx": 1,
441 468
       "setId": 1,
442
-      "iconIdx": 14
469
+      "iconIdx": 15
443 470
     },
444 471
     {
445 472
       "icon": {
@@ -468,7 +495,7 @@
468 495
       },
469 496
       "setIdx": 1,
470 497
       "setId": 1,
471
-      "iconIdx": 15
498
+      "iconIdx": 16
472 499
     },
473 500
     {
474 501
       "icon": {
@@ -497,7 +524,7 @@
497 524
       },
498 525
       "setIdx": 1,
499 526
       "setId": 1,
500
-      "iconIdx": 16
527
+      "iconIdx": 17
501 528
     },
502 529
     {
503 530
       "icon": {
@@ -523,7 +550,7 @@
523 550
       },
524 551
       "setIdx": 1,
525 552
       "setId": 1,
526
-      "iconIdx": 17
553
+      "iconIdx": 18
527 554
     },
528 555
     {
529 556
       "icon": {
@@ -549,7 +576,7 @@
549 576
       },
550 577
       "setIdx": 1,
551 578
       "setId": 1,
552
-      "iconIdx": 18
579
+      "iconIdx": 19
553 580
     },
554 581
     {
555 582
       "icon": {
@@ -575,7 +602,7 @@
575 602
       },
576 603
       "setIdx": 1,
577 604
       "setId": 1,
578
-      "iconIdx": 19
605
+      "iconIdx": 20
579 606
     },
580 607
     {
581 608
       "icon": {
@@ -601,7 +628,7 @@
601 628
       },
602 629
       "setIdx": 1,
603 630
       "setId": 1,
604
-      "iconIdx": 20
631
+      "iconIdx": 21
605 632
     },
606 633
     {
607 634
       "icon": {
@@ -627,7 +654,7 @@
627 654
       },
628 655
       "setIdx": 1,
629 656
       "setId": 1,
630
-      "iconIdx": 21
657
+      "iconIdx": 22
631 658
     },
632 659
     {
633 660
       "icon": {
@@ -653,7 +680,7 @@
653 680
       },
654 681
       "setIdx": 1,
655 682
       "setId": 1,
656
-      "iconIdx": 22
683
+      "iconIdx": 23
657 684
     },
658 685
     {
659 686
       "icon": {
@@ -679,7 +706,7 @@
679 706
       },
680 707
       "setIdx": 1,
681 708
       "setId": 1,
682
-      "iconIdx": 23
709
+      "iconIdx": 24
683 710
     },
684 711
     {
685 712
       "icon": {
@@ -705,7 +732,7 @@
705 732
       },
706 733
       "setIdx": 1,
707 734
       "setId": 1,
708
-      "iconIdx": 24
735
+      "iconIdx": 25
709 736
     },
710 737
     {
711 738
       "icon": {
@@ -731,7 +758,7 @@
731 758
       },
732 759
       "setIdx": 1,
733 760
       "setId": 1,
734
-      "iconIdx": 25
761
+      "iconIdx": 26
735 762
     },
736 763
     {
737 764
       "icon": {
@@ -757,7 +784,7 @@
757 784
       },
758 785
       "setIdx": 1,
759 786
       "setId": 1,
760
-      "iconIdx": 26
787
+      "iconIdx": 27
761 788
     },
762 789
     {
763 790
       "icon": {
@@ -783,7 +810,7 @@
783 810
       },
784 811
       "setIdx": 1,
785 812
       "setId": 1,
786
-      "iconIdx": 27
813
+      "iconIdx": 28
787 814
     },
788 815
     {
789 816
       "icon": {
@@ -809,7 +836,7 @@
809 836
       },
810 837
       "setIdx": 1,
811 838
       "setId": 1,
812
-      "iconIdx": 28
839
+      "iconIdx": 29
813 840
     },
814 841
     {
815 842
       "icon": {
@@ -835,7 +862,7 @@
835 862
       },
836 863
       "setIdx": 1,
837 864
       "setId": 1,
838
-      "iconIdx": 29
865
+      "iconIdx": 30
839 866
     },
840 867
     {
841 868
       "icon": {
@@ -861,7 +888,7 @@
861 888
       },
862 889
       "setIdx": 1,
863 890
       "setId": 1,
864
-      "iconIdx": 30
891
+      "iconIdx": 31
865 892
     },
866 893
     {
867 894
       "icon": {
@@ -887,7 +914,7 @@
887 914
       },
888 915
       "setIdx": 1,
889 916
       "setId": 1,
890
-      "iconIdx": 31
917
+      "iconIdx": 32
891 918
     },
892 919
     {
893 920
       "icon": {
@@ -913,7 +940,7 @@
913 940
       },
914 941
       "setIdx": 1,
915 942
       "setId": 1,
916
-      "iconIdx": 32
943
+      "iconIdx": 33
917 944
     },
918 945
     {
919 946
       "icon": {
@@ -939,7 +966,7 @@
939 966
       },
940 967
       "setIdx": 1,
941 968
       "setId": 1,
942
-      "iconIdx": 33
969
+      "iconIdx": 34
943 970
     },
944 971
     {
945 972
       "icon": {
@@ -965,7 +992,7 @@
965 992
       },
966 993
       "setIdx": 1,
967 994
       "setId": 1,
968
-      "iconIdx": 34
995
+      "iconIdx": 35
969 996
     },
970 997
     {
971 998
       "icon": {
@@ -991,7 +1018,7 @@
991 1018
       },
992 1019
       "setIdx": 1,
993 1020
       "setId": 1,
994
-      "iconIdx": 35
1021
+      "iconIdx": 36
995 1022
     },
996 1023
     {
997 1024
       "icon": {
@@ -1017,7 +1044,7 @@
1017 1044
       },
1018 1045
       "setIdx": 1,
1019 1046
       "setId": 1,
1020
-      "iconIdx": 36
1047
+      "iconIdx": 37
1021 1048
     },
1022 1049
     {
1023 1050
       "icon": {
@@ -1043,7 +1070,7 @@
1043 1070
       },
1044 1071
       "setIdx": 1,
1045 1072
       "setId": 1,
1046
-      "iconIdx": 37
1073
+      "iconIdx": 38
1047 1074
     },
1048 1075
     {
1049 1076
       "icon": {
@@ -1069,7 +1096,7 @@
1069 1096
       },
1070 1097
       "setIdx": 1,
1071 1098
       "setId": 1,
1072
-      "iconIdx": 38
1099
+      "iconIdx": 39
1073 1100
     },
1074 1101
     {
1075 1102
       "icon": {
@@ -1095,7 +1122,7 @@
1095 1122
       },
1096 1123
       "setIdx": 1,
1097 1124
       "setId": 1,
1098
-      "iconIdx": 39
1125
+      "iconIdx": 40
1099 1126
     },
1100 1127
     {
1101 1128
       "icon": {
@@ -1121,7 +1148,7 @@
1121 1148
       },
1122 1149
       "setIdx": 1,
1123 1150
       "setId": 1,
1124
-      "iconIdx": 40
1151
+      "iconIdx": 41
1125 1152
     },
1126 1153
     {
1127 1154
       "icon": {
@@ -1147,7 +1174,7 @@
1147 1174
       },
1148 1175
       "setIdx": 1,
1149 1176
       "setId": 1,
1150
-      "iconIdx": 41
1177
+      "iconIdx": 42
1151 1178
     },
1152 1179
     {
1153 1180
       "icon": {
@@ -1173,7 +1200,7 @@
1173 1200
       },
1174 1201
       "setIdx": 1,
1175 1202
       "setId": 1,
1176
-      "iconIdx": 42
1203
+      "iconIdx": 43
1177 1204
     },
1178 1205
     {
1179 1206
       "icon": {
@@ -1199,7 +1226,7 @@
1199 1226
       },
1200 1227
       "setIdx": 1,
1201 1228
       "setId": 1,
1202
-      "iconIdx": 43
1229
+      "iconIdx": 44
1203 1230
     },
1204 1231
     {
1205 1232
       "icon": {
@@ -1225,7 +1252,7 @@
1225 1252
       },
1226 1253
       "setIdx": 1,
1227 1254
       "setId": 1,
1228
-      "iconIdx": 44
1255
+      "iconIdx": 45
1229 1256
     },
1230 1257
     {
1231 1258
       "icon": {
@@ -1251,7 +1278,7 @@
1251 1278
       },
1252 1279
       "setIdx": 1,
1253 1280
       "setId": 1,
1254
-      "iconIdx": 45
1281
+      "iconIdx": 46
1255 1282
     },
1256 1283
     {
1257 1284
       "icon": {
@@ -1280,7 +1307,7 @@
1280 1307
       },
1281 1308
       "setIdx": 1,
1282 1309
       "setId": 1,
1283
-      "iconIdx": 46
1310
+      "iconIdx": 47
1284 1311
     },
1285 1312
     {
1286 1313
       "icon": {
@@ -1310,7 +1337,7 @@
1310 1337
       },
1311 1338
       "setIdx": 1,
1312 1339
       "setId": 1,
1313
-      "iconIdx": 47
1340
+      "iconIdx": 48
1314 1341
     },
1315 1342
     {
1316 1343
       "icon": {
@@ -1340,7 +1367,7 @@
1340 1367
       },
1341 1368
       "setIdx": 1,
1342 1369
       "setId": 1,
1343
-      "iconIdx": 48
1370
+      "iconIdx": 49
1344 1371
     },
1345 1372
     {
1346 1373
       "icon": {
@@ -1366,7 +1393,7 @@
1366 1393
       },
1367 1394
       "setIdx": 1,
1368 1395
       "setId": 1,
1369
-      "iconIdx": 49
1396
+      "iconIdx": 50
1370 1397
     },
1371 1398
     {
1372 1399
       "icon": {
@@ -1392,7 +1419,7 @@
1392 1419
       },
1393 1420
       "setIdx": 1,
1394 1421
       "setId": 1,
1395
-      "iconIdx": 50
1422
+      "iconIdx": 51
1396 1423
     },
1397 1424
     {
1398 1425
       "icon": {
@@ -1418,7 +1445,7 @@
1418 1445
       },
1419 1446
       "setIdx": 1,
1420 1447
       "setId": 1,
1421
-      "iconIdx": 51
1448
+      "iconIdx": 52
1422 1449
     }
1423 1450
   ],
1424 1451
   "height": 1024,

+ 1
- 0
lang/main.json Прегледај датотеку

@@ -531,6 +531,7 @@
531 531
     "calendarSync": {
532 532
         "later": "Later",
533 533
         "next": "Upcoming",
534
+        "nextMeeting": "next meeting",
534 535
         "now": "Now"
535 536
     }
536 537
 }

+ 82
- 55
react/features/base/font-icons/jitsi.json Прегледај датотеку

@@ -1,6 +1,33 @@
1 1
 {
2 2
   "IcoMoonType": "selection",
3 3
   "icons": [
4
+    {
5
+      "icon": {
6
+        "paths": [
7
+          "M426 256l256 256-256 256-60-60 196-196-196-196z"
8
+        ],
9
+        "attrs": [],
10
+        "isMulticolor": false,
11
+        "isMulticolor2": false,
12
+        "tags": [
13
+          "navigate_next"
14
+        ],
15
+        "defaultCode": 58377,
16
+        "grid": 24
17
+      },
18
+      "attrs": [],
19
+      "properties": {
20
+        "ligatures": "chevron_right, navigate_next",
21
+        "id": 153,
22
+        "order": 927,
23
+        "prevSize": 24,
24
+        "code": 58377,
25
+        "name": "navigate_next"
26
+      },
27
+      "setIdx": 0,
28
+      "setId": 2,
29
+      "iconIdx": 153
30
+    },
4 31
     {
5 32
       "icon": {
6 33
         "paths": [
@@ -24,9 +51,9 @@
24 51
         "code": 58834,
25 52
         "name": "menu"
26 53
       },
27
-      "setIdx": 0,
28
-      "setId": 2,
29
-      "iconIdx": 489
54
+      "setIdx": 1,
55
+      "setId": 1,
56
+      "iconIdx": 0
30 57
     },
31 58
     {
32 59
       "icon": {
@@ -53,7 +80,7 @@
53 80
       },
54 81
       "setIdx": 1,
55 82
       "setId": 1,
56
-      "iconIdx": 0
83
+      "iconIdx": 1
57 84
     },
58 85
     {
59 86
       "icon": {
@@ -80,7 +107,7 @@
80 107
       },
81 108
       "setIdx": 1,
82 109
       "setId": 1,
83
-      "iconIdx": 1
110
+      "iconIdx": 2
84 111
     },
85 112
     {
86 113
       "icon": {
@@ -107,7 +134,7 @@
107 134
       },
108 135
       "setIdx": 1,
109 136
       "setId": 1,
110
-      "iconIdx": 2
137
+      "iconIdx": 3
111 138
     },
112 139
     {
113 140
       "icon": {
@@ -134,7 +161,7 @@
134 161
       },
135 162
       "setIdx": 1,
136 163
       "setId": 1,
137
-      "iconIdx": 3
164
+      "iconIdx": 4
138 165
     },
139 166
     {
140 167
       "icon": {
@@ -161,7 +188,7 @@
161 188
       },
162 189
       "setIdx": 1,
163 190
       "setId": 1,
164
-      "iconIdx": 4
191
+      "iconIdx": 5
165 192
     },
166 193
     {
167 194
       "icon": {
@@ -188,7 +215,7 @@
188 215
       },
189 216
       "setIdx": 1,
190 217
       "setId": 1,
191
-      "iconIdx": 5
218
+      "iconIdx": 6
192 219
     },
193 220
     {
194 221
       "icon": {
@@ -215,7 +242,7 @@
215 242
       },
216 243
       "setIdx": 1,
217 244
       "setId": 1,
218
-      "iconIdx": 6
245
+      "iconIdx": 7
219 246
     },
220 247
     {
221 248
       "icon": {
@@ -242,7 +269,7 @@
242 269
       },
243 270
       "setIdx": 1,
244 271
       "setId": 1,
245
-      "iconIdx": 7
272
+      "iconIdx": 8
246 273
     },
247 274
     {
248 275
       "icon": {
@@ -269,7 +296,7 @@
269 296
       },
270 297
       "setIdx": 1,
271 298
       "setId": 1,
272
-      "iconIdx": 8
299
+      "iconIdx": 9
273 300
     },
274 301
     {
275 302
       "icon": {
@@ -298,7 +325,7 @@
298 325
       },
299 326
       "setIdx": 1,
300 327
       "setId": 1,
301
-      "iconIdx": 9
328
+      "iconIdx": 10
302 329
     },
303 330
     {
304 331
       "icon": {
@@ -325,7 +352,7 @@
325 352
       },
326 353
       "setIdx": 1,
327 354
       "setId": 1,
328
-      "iconIdx": 10
355
+      "iconIdx": 11
329 356
     },
330 357
     {
331 358
       "icon": {
@@ -352,7 +379,7 @@
352 379
       },
353 380
       "setIdx": 1,
354 381
       "setId": 1,
355
-      "iconIdx": 11
382
+      "iconIdx": 12
356 383
     },
357 384
     {
358 385
       "icon": {
@@ -381,7 +408,7 @@
381 408
       },
382 409
       "setIdx": 1,
383 410
       "setId": 1,
384
-      "iconIdx": 12
411
+      "iconIdx": 13
385 412
     },
386 413
     {
387 414
       "icon": {
@@ -410,7 +437,7 @@
410 437
       },
411 438
       "setIdx": 1,
412 439
       "setId": 1,
413
-      "iconIdx": 13
440
+      "iconIdx": 14
414 441
     },
415 442
     {
416 443
       "icon": {
@@ -439,7 +466,7 @@
439 466
       },
440 467
       "setIdx": 1,
441 468
       "setId": 1,
442
-      "iconIdx": 14
469
+      "iconIdx": 15
443 470
     },
444 471
     {
445 472
       "icon": {
@@ -468,7 +495,7 @@
468 495
       },
469 496
       "setIdx": 1,
470 497
       "setId": 1,
471
-      "iconIdx": 15
498
+      "iconIdx": 16
472 499
     },
473 500
     {
474 501
       "icon": {
@@ -497,7 +524,7 @@
497 524
       },
498 525
       "setIdx": 1,
499 526
       "setId": 1,
500
-      "iconIdx": 16
527
+      "iconIdx": 17
501 528
     },
502 529
     {
503 530
       "icon": {
@@ -523,7 +550,7 @@
523 550
       },
524 551
       "setIdx": 1,
525 552
       "setId": 1,
526
-      "iconIdx": 17
553
+      "iconIdx": 18
527 554
     },
528 555
     {
529 556
       "icon": {
@@ -549,7 +576,7 @@
549 576
       },
550 577
       "setIdx": 1,
551 578
       "setId": 1,
552
-      "iconIdx": 18
579
+      "iconIdx": 19
553 580
     },
554 581
     {
555 582
       "icon": {
@@ -575,7 +602,7 @@
575 602
       },
576 603
       "setIdx": 1,
577 604
       "setId": 1,
578
-      "iconIdx": 19
605
+      "iconIdx": 20
579 606
     },
580 607
     {
581 608
       "icon": {
@@ -601,7 +628,7 @@
601 628
       },
602 629
       "setIdx": 1,
603 630
       "setId": 1,
604
-      "iconIdx": 20
631
+      "iconIdx": 21
605 632
     },
606 633
     {
607 634
       "icon": {
@@ -627,7 +654,7 @@
627 654
       },
628 655
       "setIdx": 1,
629 656
       "setId": 1,
630
-      "iconIdx": 21
657
+      "iconIdx": 22
631 658
     },
632 659
     {
633 660
       "icon": {
@@ -653,7 +680,7 @@
653 680
       },
654 681
       "setIdx": 1,
655 682
       "setId": 1,
656
-      "iconIdx": 22
683
+      "iconIdx": 23
657 684
     },
658 685
     {
659 686
       "icon": {
@@ -679,7 +706,7 @@
679 706
       },
680 707
       "setIdx": 1,
681 708
       "setId": 1,
682
-      "iconIdx": 23
709
+      "iconIdx": 24
683 710
     },
684 711
     {
685 712
       "icon": {
@@ -705,7 +732,7 @@
705 732
       },
706 733
       "setIdx": 1,
707 734
       "setId": 1,
708
-      "iconIdx": 24
735
+      "iconIdx": 25
709 736
     },
710 737
     {
711 738
       "icon": {
@@ -731,7 +758,7 @@
731 758
       },
732 759
       "setIdx": 1,
733 760
       "setId": 1,
734
-      "iconIdx": 25
761
+      "iconIdx": 26
735 762
     },
736 763
     {
737 764
       "icon": {
@@ -757,7 +784,7 @@
757 784
       },
758 785
       "setIdx": 1,
759 786
       "setId": 1,
760
-      "iconIdx": 26
787
+      "iconIdx": 27
761 788
     },
762 789
     {
763 790
       "icon": {
@@ -783,7 +810,7 @@
783 810
       },
784 811
       "setIdx": 1,
785 812
       "setId": 1,
786
-      "iconIdx": 27
813
+      "iconIdx": 28
787 814
     },
788 815
     {
789 816
       "icon": {
@@ -809,7 +836,7 @@
809 836
       },
810 837
       "setIdx": 1,
811 838
       "setId": 1,
812
-      "iconIdx": 28
839
+      "iconIdx": 29
813 840
     },
814 841
     {
815 842
       "icon": {
@@ -835,7 +862,7 @@
835 862
       },
836 863
       "setIdx": 1,
837 864
       "setId": 1,
838
-      "iconIdx": 29
865
+      "iconIdx": 30
839 866
     },
840 867
     {
841 868
       "icon": {
@@ -861,7 +888,7 @@
861 888
       },
862 889
       "setIdx": 1,
863 890
       "setId": 1,
864
-      "iconIdx": 30
891
+      "iconIdx": 31
865 892
     },
866 893
     {
867 894
       "icon": {
@@ -887,7 +914,7 @@
887 914
       },
888 915
       "setIdx": 1,
889 916
       "setId": 1,
890
-      "iconIdx": 31
917
+      "iconIdx": 32
891 918
     },
892 919
     {
893 920
       "icon": {
@@ -913,7 +940,7 @@
913 940
       },
914 941
       "setIdx": 1,
915 942
       "setId": 1,
916
-      "iconIdx": 32
943
+      "iconIdx": 33
917 944
     },
918 945
     {
919 946
       "icon": {
@@ -939,7 +966,7 @@
939 966
       },
940 967
       "setIdx": 1,
941 968
       "setId": 1,
942
-      "iconIdx": 33
969
+      "iconIdx": 34
943 970
     },
944 971
     {
945 972
       "icon": {
@@ -965,7 +992,7 @@
965 992
       },
966 993
       "setIdx": 1,
967 994
       "setId": 1,
968
-      "iconIdx": 34
995
+      "iconIdx": 35
969 996
     },
970 997
     {
971 998
       "icon": {
@@ -991,7 +1018,7 @@
991 1018
       },
992 1019
       "setIdx": 1,
993 1020
       "setId": 1,
994
-      "iconIdx": 35
1021
+      "iconIdx": 36
995 1022
     },
996 1023
     {
997 1024
       "icon": {
@@ -1017,7 +1044,7 @@
1017 1044
       },
1018 1045
       "setIdx": 1,
1019 1046
       "setId": 1,
1020
-      "iconIdx": 36
1047
+      "iconIdx": 37
1021 1048
     },
1022 1049
     {
1023 1050
       "icon": {
@@ -1043,7 +1070,7 @@
1043 1070
       },
1044 1071
       "setIdx": 1,
1045 1072
       "setId": 1,
1046
-      "iconIdx": 37
1073
+      "iconIdx": 38
1047 1074
     },
1048 1075
     {
1049 1076
       "icon": {
@@ -1069,7 +1096,7 @@
1069 1096
       },
1070 1097
       "setIdx": 1,
1071 1098
       "setId": 1,
1072
-      "iconIdx": 38
1099
+      "iconIdx": 39
1073 1100
     },
1074 1101
     {
1075 1102
       "icon": {
@@ -1095,7 +1122,7 @@
1095 1122
       },
1096 1123
       "setIdx": 1,
1097 1124
       "setId": 1,
1098
-      "iconIdx": 39
1125
+      "iconIdx": 40
1099 1126
     },
1100 1127
     {
1101 1128
       "icon": {
@@ -1121,7 +1148,7 @@
1121 1148
       },
1122 1149
       "setIdx": 1,
1123 1150
       "setId": 1,
1124
-      "iconIdx": 40
1151
+      "iconIdx": 41
1125 1152
     },
1126 1153
     {
1127 1154
       "icon": {
@@ -1147,7 +1174,7 @@
1147 1174
       },
1148 1175
       "setIdx": 1,
1149 1176
       "setId": 1,
1150
-      "iconIdx": 41
1177
+      "iconIdx": 42
1151 1178
     },
1152 1179
     {
1153 1180
       "icon": {
@@ -1173,7 +1200,7 @@
1173 1200
       },
1174 1201
       "setIdx": 1,
1175 1202
       "setId": 1,
1176
-      "iconIdx": 42
1203
+      "iconIdx": 43
1177 1204
     },
1178 1205
     {
1179 1206
       "icon": {
@@ -1199,7 +1226,7 @@
1199 1226
       },
1200 1227
       "setIdx": 1,
1201 1228
       "setId": 1,
1202
-      "iconIdx": 43
1229
+      "iconIdx": 44
1203 1230
     },
1204 1231
     {
1205 1232
       "icon": {
@@ -1225,7 +1252,7 @@
1225 1252
       },
1226 1253
       "setIdx": 1,
1227 1254
       "setId": 1,
1228
-      "iconIdx": 44
1255
+      "iconIdx": 45
1229 1256
     },
1230 1257
     {
1231 1258
       "icon": {
@@ -1251,7 +1278,7 @@
1251 1278
       },
1252 1279
       "setIdx": 1,
1253 1280
       "setId": 1,
1254
-      "iconIdx": 45
1281
+      "iconIdx": 46
1255 1282
     },
1256 1283
     {
1257 1284
       "icon": {
@@ -1280,7 +1307,7 @@
1280 1307
       },
1281 1308
       "setIdx": 1,
1282 1309
       "setId": 1,
1283
-      "iconIdx": 46
1310
+      "iconIdx": 47
1284 1311
     },
1285 1312
     {
1286 1313
       "icon": {
@@ -1310,7 +1337,7 @@
1310 1337
       },
1311 1338
       "setIdx": 1,
1312 1339
       "setId": 1,
1313
-      "iconIdx": 47
1340
+      "iconIdx": 48
1314 1341
     },
1315 1342
     {
1316 1343
       "icon": {
@@ -1340,7 +1367,7 @@
1340 1367
       },
1341 1368
       "setIdx": 1,
1342 1369
       "setId": 1,
1343
-      "iconIdx": 48
1370
+      "iconIdx": 49
1344 1371
     },
1345 1372
     {
1346 1373
       "icon": {
@@ -1366,7 +1393,7 @@
1366 1393
       },
1367 1394
       "setIdx": 1,
1368 1395
       "setId": 1,
1369
-      "iconIdx": 49
1396
+      "iconIdx": 50
1370 1397
     },
1371 1398
     {
1372 1399
       "icon": {
@@ -1392,7 +1419,7 @@
1392 1419
       },
1393 1420
       "setIdx": 1,
1394 1421
       "setId": 1,
1395
-      "iconIdx": 50
1422
+      "iconIdx": 51
1396 1423
     },
1397 1424
     {
1398 1425
       "icon": {
@@ -1418,7 +1445,7 @@
1418 1445
       },
1419 1446
       "setIdx": 1,
1420 1447
       "setId": 1,
1421
-      "iconIdx": 51
1448
+      "iconIdx": 52
1422 1449
     }
1423 1450
   ],
1424 1451
   "height": 1024,

+ 284
- 0
react/features/calendar-sync/components/ConferenceNotification.native.js Прегледај датотеку

@@ -0,0 +1,284 @@
1
+// @flow
2
+import React, { Component } from 'react';
3
+import {
4
+    Text,
5
+    TouchableOpacity,
6
+    View
7
+} from 'react-native';
8
+import { connect } from 'react-redux';
9
+
10
+import { appNavigate } from '../../app';
11
+import { getURLWithoutParams } from '../../base/connection';
12
+import { translate } from '../../base/i18n';
13
+import { Icon } from '../../base/font-icons';
14
+import { ASPECT_RATIO_NARROW } from '../../base/responsive-ui';
15
+import { getLocalizedDateFormatter } from '../../base/util';
16
+
17
+import styles from './styles';
18
+
19
+const ALERT_MILLISECONDS = 5 * 60 * 1000;
20
+
21
+type Props = {
22
+
23
+    /**
24
+     * The Redux dispatch function.
25
+     */
26
+    dispatch: Function,
27
+
28
+    /**
29
+     * The current aspect ratio of the screen.
30
+     */
31
+    _aspectRatio: Symbol,
32
+
33
+    /**
34
+     * The URL of the current conference without params.
35
+     */
36
+    _currentConferenceURL: string,
37
+
38
+    /**
39
+     * The calendar event list.
40
+     */
41
+    _eventList: Array<Object>,
42
+
43
+    /**
44
+     * The translate function.
45
+     */
46
+    t: Function
47
+};
48
+
49
+type State = {
50
+
51
+    /**
52
+     * The event object to display the notification for.
53
+     */
54
+    event?: Object
55
+};
56
+
57
+/**
58
+ * Component to display a permanent badge-like notification on the
59
+ * conference screen when another meeting is about to start.
60
+ */
61
+class ConferenceNotification extends Component<Props, State> {
62
+    updateIntervalId: number;
63
+
64
+    /**
65
+     * Constructor of the ConferenceNotification component.
66
+     *
67
+     * @inheritdoc
68
+     */
69
+    constructor(props) {
70
+        super(props);
71
+
72
+        this.state = {
73
+            event: undefined
74
+        };
75
+
76
+        this._getNotificationContentStyle
77
+            = this._getNotificationContentStyle.bind(this);
78
+        this._getNotificationPosition
79
+            = this._getNotificationPosition.bind(this);
80
+        this._maybeDisplayNotification
81
+            = this._maybeDisplayNotification.bind(this);
82
+        this._onGoToNext = this._onGoToNext.bind(this);
83
+    }
84
+
85
+    /**
86
+     * Implements React Component's componentDidMount.
87
+     *
88
+     * @inheritdoc
89
+     */
90
+    componentDidMount() {
91
+        this.updateIntervalId = setInterval(
92
+            this._maybeDisplayNotification,
93
+            10 * 1000
94
+        );
95
+    }
96
+
97
+    /**
98
+     * Implements React Component's componentWillUnmount.
99
+     *
100
+     * @inheritdoc
101
+     */
102
+    componentWillUnmount() {
103
+        clearTimeout(this.updateIntervalId);
104
+    }
105
+
106
+    /**
107
+     * Implements the React Components's render method.
108
+     *
109
+     * @inheritdoc
110
+     */
111
+    render() {
112
+        const { event } = this.state;
113
+        const { t } = this.props;
114
+
115
+        if (event) {
116
+            return (
117
+                <View
118
+                    style = { [
119
+                        styles.notificationContainer,
120
+                        this._getNotificationPosition()
121
+                    ] } >
122
+                    <View
123
+                        style = { this._getNotificationContentStyle() }>
124
+                        <TouchableOpacity
125
+                            onPress = { this._onGoToNext } >
126
+                            <View style = { styles.touchableView }>
127
+                                <View
128
+                                    style = {
129
+                                        styles.notificationTextContainer
130
+                                    }>
131
+                                    <Text style = { styles.notificationText }>
132
+                                        { t('calendarSync.nextMeeting') }
133
+                                    </Text>
134
+                                    <Text style = { styles.notificationText }>
135
+                                        {
136
+                                            getLocalizedDateFormatter(
137
+                                                event.startDate
138
+                                            ).fromNow()
139
+                                        }
140
+                                    </Text>
141
+                                </View>
142
+                                <View
143
+                                    style = {
144
+                                        styles.notificationIconContainer
145
+                                    }>
146
+                                    <Icon
147
+                                        name = 'navigate_next'
148
+                                        style = { styles.notificationIcon } />
149
+                                </View>
150
+                            </View>
151
+                        </TouchableOpacity>
152
+                    </View>
153
+                </View>
154
+            );
155
+        }
156
+
157
+        return null;
158
+    }
159
+
160
+    _getNotificationContentStyle: () => Array<Object>
161
+
162
+    /**
163
+     * Decides the color of the notification and some additional
164
+     * styles based on notificationPosition.
165
+     *
166
+     * @private
167
+     * @returns {Array<Object>}
168
+     */
169
+    _getNotificationContentStyle() {
170
+        const { event } = this.state;
171
+        const { _aspectRatio } = this.props;
172
+        const now = Date.now();
173
+        const style = [
174
+            styles.notificationContent
175
+        ];
176
+
177
+        if (event && event.startDate < now && event.endDate > now) {
178
+            style.push(styles.notificationContentPast);
179
+        } else {
180
+            style.push(styles.notificationContentNext);
181
+        }
182
+
183
+        if (_aspectRatio === ASPECT_RATIO_NARROW) {
184
+            style.push(styles.notificationContentSide);
185
+        } else {
186
+            style.push(styles.notificationContentTop);
187
+        }
188
+
189
+        return style;
190
+    }
191
+
192
+    _getNotificationPosition: () => Object;
193
+
194
+    /**
195
+     * Decides the position of the notification.
196
+     *
197
+     * @private
198
+     * @returns {Object}
199
+     */
200
+    _getNotificationPosition() {
201
+        const { _aspectRatio } = this.props;
202
+
203
+        if (_aspectRatio === ASPECT_RATIO_NARROW) {
204
+            return styles.notificationContainerSide;
205
+        }
206
+
207
+        return styles.notificationContainerTop;
208
+    }
209
+
210
+    _maybeDisplayNotification: () => void;
211
+
212
+    /**
213
+     * Periodically checks if there is an event in the calendar for which we
214
+     * need to show a notification.
215
+     *
216
+     * @private
217
+     * @returns {void}
218
+     */
219
+    _maybeDisplayNotification() {
220
+        const { _currentConferenceURL, _eventList } = this.props;
221
+        let eventToShow;
222
+
223
+        if (_eventList && _eventList.length) {
224
+            const now = Date.now();
225
+
226
+            for (const event of _eventList) {
227
+                if (event.url !== _currentConferenceURL) {
228
+                    if ((!eventToShow
229
+                        && event.startDate > now
230
+                        && event.startDate < now + ALERT_MILLISECONDS)
231
+                        || (event.startDate < now && event.endDate > now)
232
+                    ) {
233
+                        eventToShow = event;
234
+                    }
235
+                }
236
+            }
237
+        }
238
+
239
+        this.setState({
240
+            event: eventToShow
241
+        });
242
+    }
243
+
244
+    _onGoToNext: () => void;
245
+
246
+    /**
247
+     * Opens the meeting URL that the notification shows.
248
+     *
249
+     * @private
250
+     * @param {string} url - The URL to open.
251
+     * @returns {void}
252
+     */
253
+    _onGoToNext() {
254
+        const { event } = this.state;
255
+
256
+        if (event && event.url) {
257
+            this.props.dispatch(appNavigate(event.url));
258
+        }
259
+    }
260
+
261
+}
262
+
263
+/**
264
+ * Maps redux state to component props.
265
+ *
266
+ * @param {Object} state - The redux state.
267
+ * @returns {{
268
+ *      _aspectRatio: Symbol,
269
+ *      _currentConferenceURL: string,
270
+ *      _eventList: Array
271
+ * }}
272
+ */
273
+export function _mapStateToProps(state: Object) {
274
+    const { locationURL } = state['features/base/connection'];
275
+
276
+    return {
277
+        _aspectRatio: state['features/base/responsive-ui'].aspectRatio,
278
+        _currentConferenceURL:
279
+            locationURL ? getURLWithoutParams(locationURL)._url : '',
280
+        _eventList: state['features/calendar-sync'].events
281
+    };
282
+}
283
+
284
+export default translate(connect(_mapStateToProps)(ConferenceNotification));

+ 1
- 0
react/features/calendar-sync/components/index.js Прегледај датотеку

@@ -1 +1,2 @@
1 1
 export { default as MeetingList } from './MeetingList';
2
+export { default as ConferenceNotification } from './ConferenceNotification';

+ 104
- 2
react/features/calendar-sync/components/styles.js Прегледај датотеку

@@ -1,9 +1,8 @@
1 1
 import { createStyleSheet } from '../../base/styles';
2 2
 
3 3
 const AVATAR_OPACITY = 0.4;
4
-
5 4
 const AVATAR_SIZE = 65;
6
-
5
+const NOTIFICATION_SIZE = 55;
7 6
 const OVERLAY_FONT_COLOR = 'rgba(255, 255, 255, 0.6)';
8 7
 
9 8
 export const UNDERLAY_COLOR = 'rgba(255, 255, 255, 0.2)';
@@ -50,6 +49,105 @@ export default createStyleSheet({
50 49
         textAlign: 'center'
51 50
     },
52 51
 
52
+    /**
53
+     * Style for the actual notification content.
54
+     */
55
+    notificationContainer: {
56
+        flexDirection: 'row',
57
+        justifyContent: 'center',
58
+        overflow: 'hidden',
59
+        position: 'absolute'
60
+    },
61
+
62
+    /**
63
+     * Additional style for the container when the notification is displayed
64
+     * on the side (narrow view).
65
+     */
66
+    notificationContainerSide: {
67
+        top: 100
68
+    },
69
+
70
+    /**
71
+     * Additional style for the container when the notification is displayed
72
+     * on the top (wide view).
73
+     */
74
+    notificationContainerTop: {
75
+        justifyContent: 'center',
76
+        left: 0,
77
+        right: 0,
78
+        top: 0
79
+    },
80
+
81
+    /**
82
+     * The top level container of the notification.
83
+     */
84
+    notificationContent: {
85
+        alignSelf: 'flex-start',
86
+        flexDirection: 'row',
87
+        height: NOTIFICATION_SIZE,
88
+        justifyContent: 'center',
89
+        paddingHorizontal: 10
90
+    },
91
+
92
+    /**
93
+     * Color for upcoming meeting notification.
94
+     */
95
+    notificationContentNext: {
96
+        backgroundColor: '#eeb231'
97
+    },
98
+
99
+    /**
100
+     * Color for already ongoing meeting notifications.
101
+     */
102
+    notificationContentPast: {
103
+        backgroundColor: 'red'
104
+    },
105
+
106
+    /**
107
+     * Additional style for the content when the notification is displayed
108
+     * on the side (narrow view).
109
+     */
110
+    notificationContentSide: {
111
+        borderBottomRightRadius: NOTIFICATION_SIZE,
112
+        borderTopRightRadius: NOTIFICATION_SIZE
113
+    },
114
+
115
+    /**
116
+     * Additional style for the content when the notification is displayed
117
+     * on the top (wide view).
118
+     */
119
+    notificationContentTop: {
120
+        borderBottomLeftRadius: NOTIFICATION_SIZE / 2,
121
+        borderBottomRightRadius: NOTIFICATION_SIZE / 2,
122
+        paddingHorizontal: 20
123
+    },
124
+
125
+    /**
126
+     * The icon of the notification.
127
+     */
128
+    notificationIcon: {
129
+        color: 'white',
130
+        fontSize: 25
131
+    },
132
+
133
+    notificationIconContainer: {
134
+        alignItems: 'center',
135
+        flexDirection: 'row',
136
+        height: NOTIFICATION_SIZE,
137
+        justifyContent: 'center'
138
+    },
139
+
140
+    notificationText: {
141
+        color: 'white',
142
+        fontSize: 13
143
+    },
144
+
145
+    notificationTextContainer: {
146
+        flexDirection: 'column',
147
+        height: NOTIFICATION_SIZE,
148
+        justifyContent: 'center'
149
+    },
150
+
53 151
     /**
54 152
      * The top level container style of the list.
55 153
      */
@@ -105,5 +203,9 @@ export default createStyleSheet({
105 203
         color: OVERLAY_FONT_COLOR,
106 204
         fontSize: 14,
107 205
         fontWeight: 'normal'
206
+    },
207
+
208
+    touchableView: {
209
+        flexDirection: 'row'
108 210
     }
109 211
 });

+ 18
- 0
react/features/calendar-sync/middleware.js Прегледај датотеку

@@ -117,6 +117,24 @@ function _fetchCalendarEntries(store) {
117 117
                 }
118 118
             }
119 119
 
120
+            // TEST events to check notification popup.
121
+            // TODO: Remove this before a PR.
122
+            eventList.push({
123
+                endDate: Date.now() + (60 * 60 * 1000),
124
+                id: -1,
125
+                startDate: Date.now() + (80 * 1000),
126
+                title: 'ShipIt 41',
127
+                url: 'https://meet.jit.si/shipit41'
128
+            });
129
+
130
+            eventList.push({
131
+                endDate: Date.now() + (2 * 60 * 60 * 1000),
132
+                id: -2,
133
+                startDate: Date.now() + (60 * 60 * 1000),
134
+                title: 'ShipIt 41 demo',
135
+                url: 'https://meet.jit.si/shipit41'
136
+            });
137
+
120 138
             store.dispatch(updateCalendarEntryList(eventList.sort((a, b) =>
121 139
                 a.startDate - b.startDate
122 140
             ).slice(0, MAX_LIST_LENGTH)));

+ 3
- 0
react/features/conference/components/Conference.native.js Прегледај датотеку

@@ -12,6 +12,7 @@ import { DialogContainer } from '../../base/dialog';
12 12
 import { CalleeInfoContainer } from '../../base/jwt';
13 13
 import { Container, LoadingIndicator, TintedView } from '../../base/react';
14 14
 import { createDesiredLocalTracks } from '../../base/tracks';
15
+import { ConferenceNotification } from '../../calendar-sync';
15 16
 import { Filmstrip } from '../../filmstrip';
16 17
 import { LargeVideo } from '../../large-video';
17 18
 import { setToolboxVisible, Toolbox } from '../../toolbox';
@@ -233,6 +234,8 @@ class Conference extends Component<Props> {
233 234
                     <Filmstrip />
234 235
                 </View>
235 236
 
237
+                <ConferenceNotification />
238
+
236 239
                 {/*
237 240
                   * The dialogs are in the topmost stacking layers.
238 241
                   */

+ 6
- 6
react/features/recent-list/components/AbstractRecentList.js Прегледај датотеку

@@ -13,14 +13,14 @@ type Props = {
13 13
     _recentList: Array<Object>,
14 14
 
15 15
     /**
16
-     * The redux store's {@code dispatch} function.
16
+     * Indicates if the list is disabled or not.
17 17
      */
18
-    dispatch: Dispatch<*>,
18
+    disabled: boolean,
19 19
 
20 20
     /**
21
-     * Whether {@code AbstractRecentList} is enabled.
21
+     * The redux store's {@code dispatch} function.
22 22
      */
23
-    enabled: boolean
23
+    dispatch: Dispatch<*>
24 24
 };
25 25
 
26 26
 /**
@@ -40,9 +40,9 @@ export default class AbstractRecentList extends Component<Props> {
40 40
      * @returns {void}
41 41
      */
42 42
     _onJoin(room) {
43
-        const { dispatch, enabled } = this.props;
43
+        const { dispatch, disabled } = this.props;
44 44
 
45
-        enabled && room && dispatch(appNavigate(room));
45
+        !disabled && room && dispatch(appNavigate(room));
46 46
     }
47 47
 
48 48
     /**

+ 2
- 2
react/features/recent-list/components/RecentList.native.js Прегледај датотеку

@@ -53,7 +53,7 @@ class RecentList extends AbstractRecentList {
53 53
      * @returns {ReactElement}
54 54
      */
55 55
     render() {
56
-        const { enabled, _recentList } = this.props;
56
+        const { disabled, _recentList } = this.props;
57 57
 
58 58
         if (!_recentList) {
59 59
             return null;
@@ -66,7 +66,7 @@ class RecentList extends AbstractRecentList {
66 66
             <SafeAreaView
67 67
                 style = { [
68 68
                     styles.container,
69
-                    enabled ? null : styles.containerDisabled
69
+                    disabled ? styles.containerDisabled : null
70 70
                 ] }>
71 71
                 <ListView
72 72
                     dataSource = { listViewDataSource }

Loading…
Откажи
Сачувај