@@ -106,7 +106,7 @@ class FilterSelector extends HandlebarsApplicationMixin(ApplicationV2) {
106106
107107 /** @override */
108108 static DEFAULT_OPTIONS = {
109- window : { resizable : true } ,
109+ window : { resizable : true , contentClasses : [ 'standard-form' ] } ,
110110 classes : [ 'tokenmagic' , 'selector' , 'flexcol' ] ,
111111 actions : {
112112 select : FilterSelector . _onEdit ,
@@ -134,13 +134,14 @@ class FilterSelector extends HandlebarsApplicationMixin(ApplicationV2) {
134134 } ;
135135
136136 static getFilter ( document , { filterId, filterType, filterInternalId } ) {
137- const filters = document . getFlag ( 'tokenmagic' , 'filters' ) ;
138- return filters ?. find (
139- ( f ) =>
140- f . tmFilters . tmFilterId === filterId &&
141- f . tmFilters . tmFilterType === filterType &&
142- f . tmFilters . tmFilterInternalId === filterInternalId ,
143- ) ?. tmFilters . tmParams ;
137+ return document
138+ . getFlag ( 'tokenmagic' , 'filters' )
139+ ?. find (
140+ ( f ) =>
141+ f . tmFilters . tmFilterId === filterId &&
142+ f . tmFilters . tmFilterType === filterType &&
143+ f . tmFilters . tmFilterInternalId === filterInternalId ,
144+ ) ?. tmFilters . tmParams ;
144145 }
145146
146147 /** @override */
@@ -290,9 +291,29 @@ class FilterSelector extends HandlebarsApplicationMixin(ApplicationV2) {
290291 }
291292
292293 async _onUpdateFilterRank ( fromFilter , toFilter ) {
293- const filters = this . _document . getFlag ( 'tokenmagic' , 'filters' ) ;
294+ const filters = deepClone ( this . _document . getFlag ( 'tokenmagic' , 'filters' ) ) ;
294295 if ( ! filters || ! filters . length ) return ;
295296
297+ // First make sure there are no duplicate ranks
298+ const paramArray = filters . map ( ( f ) => f . tmFilters . tmParams ) . sort ( ( f1 , f2 ) => f1 . rank - f2 . rank ) ;
299+ let resort = false ;
300+ for ( let i = 0 ; i < paramArray . length - 1 ; i ++ ) {
301+ if ( paramArray [ i ] . rank === paramArray [ i + 1 ] . rank ) {
302+ resort = true ;
303+ break ;
304+ }
305+ }
306+ if ( resort ) {
307+ const updates = [ ] ;
308+ const minRank = paramArray [ 0 ] . rank ;
309+ for ( let i = 1 ; i < paramArray . length ; i ++ ) {
310+ const { filterId, filterType, filterInternalId } = paramArray [ i ] ;
311+ updates . push ( { filterId, filterType, filterInternalId, rank : minRank + i } ) ;
312+ }
313+ await TokenMagic . updateFiltersByPlaceable ( this . _document , updates ) ;
314+ }
315+
316+ // Swap filters
296317 const fromParams = FilterSelector . getFilter ( this . _document , fromFilter ) ;
297318 const toParams = FilterSelector . getFilter ( this . _document , toFilter ) ;
298319 if ( ! fromParams || ! toParams ) return ;
@@ -311,6 +332,11 @@ class FilterSelector extends HandlebarsApplicationMixin(ApplicationV2) {
311332 rank : fromParams . rank ,
312333 } ,
313334 ] ) ;
335+
336+ // Sort filters based on new ranks
337+ const sprite = this . _document . object ?. _TMFXgetSprite ( ) ;
338+ if ( sprite ) sprite . filters = sprite . filters . sort ( ( f1 , f2 ) => f1 . rank - f2 . rank ) ;
339+
314340 this . render ( true ) ;
315341 }
316342
0 commit comments