1
- import { QLabel , NodeWidget , QLabelSignals , TextInteractionFlag } from '@nodegui/nodegui' ;
1
+ import { QLabel , NodeWidget , QLabelSignals , TextInteractionFlag , QFontMetrics , TextElideMode , WidgetEventTypes } from '@nodegui/nodegui' ;
2
2
import { ViewProps , setViewProps } from '../View/RNView' ;
3
3
import { RNWidget } from '../config' ;
4
4
import { throwUnsupported } from '../../utils/helpers' ;
5
5
6
6
export interface TextProps extends ViewProps < QLabelSignals > {
7
7
children ?: string | number | Array < string | number > ;
8
8
wordWrap ?: boolean ;
9
+ elideMode ?: TextElideMode ;
9
10
scaledContents ?: boolean ;
10
11
openExternalLinks ?: boolean ;
11
12
textInteractionFlags ?: TextInteractionFlag ;
@@ -23,7 +24,22 @@ export const setTextProps = (
23
24
set children ( text : string | number | Array < string | number > ) {
24
25
text = Array . isArray ( text ) ? text . join ( '' ) : text ;
25
26
26
- widget . setText ( text ) ;
27
+ if ( this . elideMode !== undefined ) {
28
+ const elideMode = this . elideMode ;
29
+ const elidedText = ( ) => {
30
+ const metrics = new QFontMetrics ( widget . font ( ) ) ;
31
+ const lines = widget . wordWrap ( ) ? Math . floor ( widget . size ( ) . height ( ) / metrics . lineSpacing ( ) ) : 1 ;
32
+ return metrics . elidedText ( `${ text } ` , elideMode , ( widget . size ( ) . width ( ) - metrics . maxWidth ( ) ) * lines ) ;
33
+ }
34
+
35
+ widget . addEventListener ( WidgetEventTypes . Resize , ( ) => {
36
+ widget . setText ( elidedText ( ) ) ;
37
+ } ) ;
38
+
39
+ widget . setText ( elidedText ( ) ) ;
40
+ } else {
41
+ widget . setText ( text ) ;
42
+ }
27
43
} ,
28
44
set wordWrap ( shouldWrap : boolean ) {
29
45
widget . setWordWrap ( shouldWrap ) ;
@@ -34,7 +50,7 @@ export const setTextProps = (
34
50
set openExternalLinks ( shouldOpenExternalLinks : boolean ) {
35
51
widget . setProperty ( 'openExternalLinks' , shouldOpenExternalLinks ) ;
36
52
} ,
37
- set textInteractionFlags ( interactionFlag : TextInteractionFlag ) {
53
+ set textInteractionFlags ( interactionFlag : TextInteractionFlag ) {
38
54
widget . setProperty ( 'textInteractionFlags' , interactionFlag ) ;
39
55
}
40
56
} ;
0 commit comments