@@ -6,6 +6,7 @@ interface SimpleItemProps {
66 index : number ;
77 allowItemRemoval : boolean ;
88 allowItemReorder : boolean ;
9+ dataIndex : number ;
910}
1011
1112const LIMEL_ICON_BUTTON = 'limel-icon-button' ;
@@ -15,58 +16,47 @@ export class SimpleItemTemplate extends React.Component<SimpleItemProps> {
1516 super ( props ) ;
1617 }
1718
18- private removeButton ?: HTMLLimelButtonElement ;
19- private moveUpButton ?: HTMLLimelButtonElement ;
20- private moveDownButton ?: HTMLLimelButtonElement ;
19+ private removeButton ?: HTMLLimelIconButtonElement ;
2120
2221 public componentWillUnmount ( ) {
2322 this . setRemoveButton ( undefined ) ;
24- this . setMoveUpButton ( undefined ) ;
25- this . setMoveDownButton ( undefined ) ;
2623 }
2724
2825 public render ( ) {
29- const { item } = this . props ;
26+ const { item, allowItemReorder } = this . props ;
3027
3128 return React . createElement (
3229 'div' ,
3330 {
34- className : 'limel-form-array-item--simple' ,
31+ className : 'array-item limel-form-array-item--simple' ,
32+ 'data-reorder-id' : String ( this . props . dataIndex ) ,
33+ 'data-reorderable' : allowItemReorder ? 'true' : 'false' ,
3534 } ,
3635 this . props . item . children ,
37- this . props . allowItemReorder
38- ? this . renderMoveDownButton ( item )
39- : null ,
40- this . props . allowItemReorder ? this . renderMoveUpButton ( item ) : null ,
41- this . props . allowItemRemoval ? this . renderRemoveButton ( item ) : null
36+ this . renderRemoveButton ( item ) ,
37+ this . renderDragHandle ( )
4238 ) ;
4339 }
4440
45- private renderRemoveButton ( item : ArrayFieldItem ) {
46- const props : any = {
47- icon : 'trash' ,
48- disabled : ! item . hasRemove ,
49- ref : this . setRemoveButton ,
50- } ;
41+ private renderDragHandle ( ) {
42+ if ( ! this . props . allowItemReorder ) {
43+ return ;
44+ }
5145
52- return React . createElement ( LIMEL_ICON_BUTTON , props ) ;
46+ return React . createElement ( 'limel-drag-handle' , {
47+ class : 'drag-handle' ,
48+ } ) ;
5349 }
5450
55- private renderMoveUpButton ( item : ArrayFieldItem ) {
56- const props : any = {
57- icon : 'up_arrow' ,
58- disabled : ! item . hasMoveUp ,
59- ref : this . setMoveUpButton ,
60- } ;
61-
62- return React . createElement ( LIMEL_ICON_BUTTON , props ) ;
63- }
51+ private renderRemoveButton ( item : ArrayFieldItem ) {
52+ if ( ! this . props . allowItemRemoval ) {
53+ return ;
54+ }
6455
65- private renderMoveDownButton ( item : ArrayFieldItem ) {
6656 const props : any = {
67- icon : 'down_arrow ' ,
68- disabled : ! item . hasMoveDown ,
69- ref : this . setMoveDownButton ,
57+ icon : 'trash ' ,
58+ disabled : ! item . hasRemove ,
59+ ref : this . setRemoveButton ,
7060 } ;
7161
7262 return React . createElement ( LIMEL_ICON_BUTTON , props ) ;
@@ -77,17 +67,9 @@ export class SimpleItemTemplate extends React.Component<SimpleItemProps> {
7767 item . onDropIndexClick ( index ) ( event ) ;
7868 } ;
7969
80- private handleMoveUp = ( event : PointerEvent ) : void => {
81- const { item, index } = this . props ;
82- item . onReorderClick ( index , index - 1 ) ( event ) ;
83- } ;
84-
85- private handleMoveDown = ( event : PointerEvent ) : void => {
86- const { item, index } = this . props ;
87- item . onReorderClick ( index , index + 1 ) ( event ) ;
88- } ;
89-
90- private setRemoveButton = ( button ?: HTMLLimelButtonElement | null ) => {
70+ private readonly setRemoveButton = (
71+ button ?: HTMLLimelIconButtonElement | null
72+ ) => {
9173 if ( this . removeButton ) {
9274 this . removeButton . removeEventListener ( 'click' , this . handleRemove ) ;
9375 }
@@ -98,31 +80,4 @@ export class SimpleItemTemplate extends React.Component<SimpleItemProps> {
9880 this . removeButton . addEventListener ( 'click' , this . handleRemove ) ;
9981 }
10082 } ;
101-
102- private setMoveUpButton = ( button ?: HTMLLimelButtonElement | null ) => {
103- if ( this . moveUpButton ) {
104- this . moveUpButton . removeEventListener ( 'click' , this . handleMoveUp ) ;
105- }
106-
107- this . moveUpButton = button || undefined ;
108-
109- if ( this . moveUpButton ) {
110- this . moveUpButton . addEventListener ( 'click' , this . handleMoveUp ) ;
111- }
112- } ;
113-
114- private setMoveDownButton = ( button ?: HTMLLimelButtonElement | null ) => {
115- if ( this . moveDownButton ) {
116- this . moveDownButton . removeEventListener (
117- 'click' ,
118- this . handleMoveDown
119- ) ;
120- }
121-
122- this . moveDownButton = button || undefined ;
123-
124- if ( this . moveDownButton ) {
125- this . moveDownButton . addEventListener ( 'click' , this . handleMoveDown ) ;
126- }
127- } ;
12883}
0 commit comments