@@ -32,22 +32,22 @@ const defaultImagePath = "https://drake-server.ddns.net/Thumbnails/";
3232const logger = LogManager . getLogger ( 'stamp-replacement-table' ) ;
3333
3434@customElement ( 'stamp-replacement-table' )
35- @bindable ( {
35+ @bindable ( {
3636 name : 'stamps' ,
3737 defaultValue : [ ]
3838} )
3939export class StampReplacementTable {
4040
4141 model = {
4242 filterCatalogueRef : - 1 ,
43- replacementCatalogueRef : - 1
43+ replacementCatalogueRef : - 1 ,
44+ editCount : 0 ,
45+ editingRow : - 1
4446 } ;
4547 catalogues = [ ] ;
4648 filteredStamps = [ ] ;
47- editingRow = - 1 ;
4849 conditions = Condition . symbols ( ) ;
4950 editingCatalogueNumber ;
50- editCount = 0 ;
5151
5252
5353 static inject ( ) {
@@ -64,23 +64,28 @@ export class StampReplacementTable {
6464 }
6565
6666 stampsChanged ( newList , oldList ) {
67- if ( newList !== oldList ) {
67+ if ( newList !== oldList ) {
6868 this . filterStamps ( ) ;
6969 }
7070 }
7171
7272 editingRowChanged ( newIndex ) {
73- this . editingCatalogueNumber = this . getReplacementCatalogueNumber ( this . filteredStamps [ newIndex ] ) ;
73+ // index may be empty
74+ if ( this . model . editingRow < 0 || _ . isEmpty ( this . filteredStamps ) ) {
75+ return ;
76+ }
77+ let stamp = this . filteredStamps [ newIndex ] ;
78+ this . editingCatalogueNumber = this . getReplacementCatalogueNumber ( stamp ) ;
7479 logger . debug ( this . editingCatalogueNumber ) ;
75- if ( this . editingCatalogueNumber ) {
76- this . _setupEditSubscribers ( this . filteredStamps [ newIndex ] , this . editingCatalogueNumber ) ;
80+ if ( this . editingCatalogueNumber ) {
81+ this . _setupEditSubscribers ( stamp , this . editingCatalogueNumber ) ;
7782 }
78- _ . debounce ( ( ) => {
83+ _ . debounce ( ( ) => {
7984 $ ( '.replacement-number-input' ) . focus ( ) ;
8085 } , 250 ) ( ) ;
8186 }
8287
83- attached ( ) {
88+ attached ( ) {
8489 this . loading = true ;
8590 let cataloguePromise = this . catalogueService . find ( this . catalogueService . getDefaultSearchOptions ( ) ) ;
8691 let prefPromise = this . prefService . find ( this . prefService . getDefaultSearchOptions ( ) ) ;
@@ -93,7 +98,7 @@ export class StampReplacementTable {
9398
9499 this . _editSubscribers = [ ] ;
95100 this . _modelSubscribers = [ ] ;
96- this . _modelSubscribers . push ( this . bindingEngine . propertyObserver ( this , 'editingRow' ) . subscribe ( this . editingRowChanged . bind ( this ) ) ) ;
101+ this . _modelSubscribers . push ( this . bindingEngine . propertyObserver ( this . model , 'editingRow' ) . subscribe ( this . editingRowChanged . bind ( this ) ) ) ;
97102 }
98103
99104 _processCatalogues ( results ) {
@@ -105,64 +110,67 @@ export class StampReplacementTable {
105110 this . thumbnailPath = LocationHelper . resolvePath ( path , defaultImagePath ) ;
106111 }
107112
108- detached ( ) {
113+ detached ( ) {
109114 this . _modelSubscribers . forEach ( sub => {
110115 sub . dispose ( ) ;
111116 } ) ;
112117 this . _clearEditSubscribers ( ) ;
113118 }
114119
115120
116-
117- filterStamps ( ) {
118- this . filteredStamps . splice ( 0 , this . filteredStamps . length ) ;
119- let self = this ;
120- _ . each ( this . stamps , stamp => {
121- let index = _ . findIndex ( stamp . catalogueNumbers , { catalogueRef : self . model . filterCatalogueRef } ) ;
122- if ( index >= 0 ) {
123- let s = _ . clone ( stamp , true ) ;
121+ filterStamps ( ) {
122+ this . filteredStamps = [ ] ;
123+ this . model . editCount = 0 ;
124+ this . model . editingRow = - 1 ;
125+ //_.debounce(() => {
126+ _ . each ( this . stamps , stamp => {
127+ let index = _ . findIndex ( stamp . catalogueNumbers , ( _cn ) => {
128+ return _cn . catalogueRef === this . model . filterCatalogueRef ;
129+ } ) ;
130+ if ( index > - 1 ) {
131+ let s = _ . cloneDeep ( stamp ) ;
124132 let cn = s . catalogueNumbers [ index ] ;
125- self . _storeOriginalValues ( cn ) ;
126- cn . catalogueRef = self . model . replacementCatalogueRef ;
133+ this . _storeOriginalValues ( cn ) ;
134+ cn . catalogueRef = this . model . replacementCatalogueRef ;
127135 cn . replacing = true ;
128- self . filteredStamps . push ( s ) ;
136+ this . filteredStamps . push ( s ) ;
129137 }
130138 } ) ;
131- if ( this . filteredStamps . length > 0 ) {
132- _ . debounce ( ( ) => {
133- this . editingRow = 0 ;
134- } ) ( ) ;
139+ if ( this . filteredStamps . length > 0 ) {
140+ this . model . editingRow = 0 ;
135141 }
142+ // })();
143+
136144 }
137145
138146 select ( $index ) {
139- this . editingRow = $index ;
147+ this . model . editingRow = $index ;
140148 }
141149
142150 getCurrencyCode ( cn ) {
143- if ( cn ) {
144- if ( ! cn . currencyCode ) {
145- cn . currencyCode = _ . find ( this . catalogues , { id : cn . catalogueRef } ) . code ;
151+ if ( cn ) {
152+ if ( ! cn . currencyCode ) {
153+ cn . currencyCode = _ . find ( this . catalogues , { id : cn . catalogueRef } ) . code ;
146154 }
147155 return cn . currencyCode ;
148156 }
149157 }
150158
151159 getReplacementCatalogueNumber ( stamp ) {
152- return _ . find ( stamp . catalogueNumbers , { replacing : true } ) ;
160+ return _ . find ( stamp . catalogueNumbers , { replacing : true } ) ;
153161 }
154162
155163 @computedFrom ( 'model.filterCatalogueRef' , 'model.replacementCatalogueRef' )
156164 get filterReady ( ) {
157- return ( this . model . filterCatalogueRef >= 0 && this . model . replacementCatalogueRef >= 0 ) ;
165+ return ( this . model . filterCatalogueRef >= 0 && this . model . replacementCatalogueRef >= 0 ) ;
158166 }
159167
160168
161169 getImagePath ( stamp ) {
162170 let path = '' ;
163- if ( ! stamp . wantList && ! _ . isEmpty ( stamp . stampOwnerships && _ . first ( stamp . stampOwnerships ) . img ) ) {
171+ if ( ! stamp . wantList && ! _ . isEmpty ( stamp . stampOwnerships && _ . first ( stamp . stampOwnerships ) . img ) ) {
164172 let img = _ . first ( stamp . stampOwnerships ) . img ;
165- if ( img && img !== '' ) {
173+ if ( img && img !== '' ) {
166174 var index = img . lastIndexOf ( '/' ) ;
167175 img = img . substring ( 0 , index + 1 ) + "thumb-" + img . substring ( index + 1 ) ;
168176 path = this . thumbnailPath + img ;
@@ -184,24 +192,30 @@ export class StampReplacementTable {
184192 }
185193
186194 advanceToNextRow ( $event ) {
187- if ( $event . keyCode === KeyCodes . VK_TAB && this . editingRow < this . filteredStamps . length - 2 ) {
188- this . select ( this . editingRow + 1 ) ;
195+ if ( $event . keyCode === KeyCodes . VK_TAB && this . model . editingRow < this . filteredStamps . length - 1 ) {
196+ this . select ( this . model . editingRow + 1 ) ;
189197 return false ;
190198 }
191199 return true ;
192200 }
193201
194202 saveAll ( ) {
195- let modified = _ . filter ( this . filteredStamps , { __modified__ : true } ) ;
203+ let modified = _ . filter ( this . filteredStamps , { __modified__ : true } ) ;
196204 let savePromises = [ ] ;
197205 _ . each ( modified , ( stamp ) => {
198206 savePromises . push ( this . stampsService . save ( stamp ) ) ;
199207 } ) ;
200208 Promise . all ( savePromises ) . then ( result => {
201- if ( result ) {
209+ if ( result ) {
202210 _ . each ( result , s => { //eslint-disable-line no-unused-vars
203- this . filterStamps ( ) ;
211+ let index = _ . findIndex ( this . stamps , ( s2 ) => {
212+ return s2 . id === s . id ;
213+ } ) ;
214+ if ( index > - 1 ) {
215+ this . stamps [ index ] = s ;
216+ }
204217 } ) ;
218+ this . filterStamps ( ) ;
205219 }
206220 } ) ;
207221 }
@@ -213,34 +227,38 @@ export class StampReplacementTable {
213227 this . _editSubscribers . push ( this . bindingEngine . propertyObserver ( cn , 'condition' ) . subscribe ( this . _checkForModifiedStamp . bind ( this ) ) ) ;
214228 }
215229
216- changeUnknown ( stamp ) {
217- let cn = this . getReplacementCatalogueNumber ( stamp ) ;
218- cn . unknown = ( ! cn . unknown && true ) ;
219- this . _checkForModifiedStamp ( stamp , cn ) ;
230+ changeUnknown ( ) {
231+ _ . defer ( ( ) => {
232+ if ( this . model . editingRow > - 1 ) {
233+ let stamp = this . filteredStamps [ this . model . editingRow ] ;
234+ let cn = this . getReplacementCatalogueNumber ( stamp ) ;
235+ cn . unknown = ( ! cn . unknown && true ) ;
236+ this . _checkForModifiedStamp ( ) ;
237+ }
238+ } ) ;
239+
220240 }
221241
222- _clearEditSubscribers ( ) {
223- if ( this . _editSubscribers ) {
242+ _clearEditSubscribers ( ) {
243+ if ( this . _editSubscribers ) {
224244 this . _editSubscribers . forEach ( sub => {
225245 sub . dispose ( ) ;
226246 } ) ;
227247 }
228248 this . _editSubscribers = [ ] ;
229249 }
230250
231- _checkForModifiedStamp ( stamp , cn ) {
232- if ( ! stamp ) {
233- stamp = this . filteredStamps [ this . editingRow ] ;
234- }
235- if ( ! cn ) {
236- cn = this . getReplacementCatalogueNumber ( stamp ) ;
251+ _checkForModifiedStamp ( ) {
252+ if ( this . model . editingRow < 0 ) {
253+ return ;
237254 }
255+ let stamp = this . filteredStamps [ this . model . editingRow ] ;
256+ let cn = this . getReplacementCatalogueNumber ( stamp ) ;
238257 let currentModified = stamp . __modified__ ;
239258 let modified = this . _markedAsModified ( stamp , cn ) ;
240- if ( modified !== currentModified ) {
241- this . editCount += ( modified ) ? 1 : - 1 ;
259+ if ( modified !== currentModified ) {
260+ this . model . editCount += ( modified ) ? 1 : - 1 ;
242261 }
243-
244262 }
245263
246264 _storeOriginalValues ( cn ) {
@@ -254,20 +272,19 @@ export class StampReplacementTable {
254272 }
255273
256274 _markedAsModified ( stamp , cn ) {
257- stamp . __modified__ = ( cn . __orig__ . number !== cn . number ||
275+ stamp . __modified__ = ( cn . __orig__ . number !== cn . number ||
258276 cn . __orig__ . condition !== cn . condition ||
259277 cn . __orig__ . value !== cn . value ||
260- cn . __orig__ . unknown !== cn . unknown ) ;
261- return ( stamp . __modified__ ) ;
278+ cn . __orig__ . unknown !== cn . unknown ) ;
279+ return ( stamp . __modified__ ) ;
262280 }
263281
264282 setAsModified ( stamp ) {
265283 stamp . __modified__ = true ;
266- this . editCount ++ ;
284+ this . model . editCount ++ ;
267285 }
268286
269287
270-
271288}
272289
273290/**
0 commit comments