@@ -36,11 +36,7 @@ const casing = require('../utils/casing')
36
36
*/
37
37
const hasConditionalRenderedSiblings = ( node , componentName ) => {
38
38
if ( node . parent && node . parent . type === 'VElement' ) {
39
- const siblings = node . parent . children . filter (
40
- ( child ) => child . type === 'VElement'
41
- )
42
-
43
- return siblings . some (
39
+ return node . parent . children . some (
44
40
( sibling ) =>
45
41
sibling !== node &&
46
42
sibling . type === 'VElement' &&
@@ -220,7 +216,7 @@ module.exports = {
220
216
if ( node . parent && node . parent . type === 'VElement' ) {
221
217
let conditionalFamily = conditionalFamilies . get ( node . parent )
222
218
223
- if ( conditionType === 'if' ) {
219
+ if ( conditionType === 'if' && ! conditionalFamily ) {
224
220
conditionalFamily = createConditionalFamily ( node )
225
221
conditionalFamilies . set ( node . parent , conditionalFamily )
226
222
}
@@ -253,55 +249,44 @@ module.exports = {
253
249
const currentScope = componentUsageStack [ componentUsageStack . length - 1 ]
254
250
const usageInfo = currentScope . get ( componentName ) || {
255
251
count : 0 ,
256
- firstNode : null ,
257
- hasIf : false
252
+ firstNode : null
258
253
}
259
254
260
- const isIfDirective = utils . getDirective ( node , 'if' ) !== null
261
- const isConditional =
262
- isIfDirective ||
263
- utils . getDirective ( node , 'else-if' ) !== null ||
264
- utils . getDirective ( node , 'else' ) !== null
265
-
266
- if ( isConditional ) {
267
- if ( isIfDirective && usageInfo . hasIf ) {
268
- // Reset if family already has an 'if' directive
269
- usageInfo . count = 1
255
+ if ( hasConditionalDirective ( node ) ) {
256
+ // Store the first node if this is the first occurrence
257
+ if ( usageInfo . count === 0 ) {
270
258
usageInfo . firstNode = node
271
- } else {
272
- usageInfo . hasIf = true
273
- if ( usageInfo . count === 0 ) {
274
- usageInfo . firstNode = node
275
- } else if ( usageInfo . count > 0 && usageInfo . firstNode !== node ) {
276
- const uniqueKey = `${ casing . kebabCase ( componentName ) } -${
277
- usageInfo . count + 1
278
- } `
259
+ }
260
+
261
+ if ( usageInfo . count > 0 ) {
262
+ const uniqueKey = `${ casing . kebabCase ( componentName ) } -${
263
+ usageInfo . count + 1
264
+ } `
265
+ checkForKey (
266
+ node ,
267
+ context ,
268
+ componentName ,
269
+ uniqueKey ,
270
+ conditionalFamilies
271
+ )
272
+
273
+ // If this is the second occurrence, also apply a fix to the first occurrence
274
+ if ( usageInfo . count === 1 ) {
275
+ const uniqueKeyForFirstInstance = `${ casing . kebabCase (
276
+ componentName
277
+ ) } -1`
279
278
checkForKey (
280
- node ,
279
+ usageInfo . firstNode ,
281
280
context ,
282
281
componentName ,
283
- uniqueKey ,
282
+ uniqueKeyForFirstInstance ,
284
283
conditionalFamilies
285
284
)
286
-
287
- if ( usageInfo . count === 1 ) {
288
- const uniqueKeyForFirstInstance = `${ casing . kebabCase (
289
- componentName
290
- ) } -1`
291
- checkForKey (
292
- usageInfo . firstNode ,
293
- context ,
294
- componentName ,
295
- uniqueKeyForFirstInstance ,
296
- conditionalFamilies
297
- )
298
- }
299
285
}
300
- usageInfo . count ++
301
286
}
287
+ usageInfo . count += 1
302
288
currentScope . set ( componentName , usageInfo )
303
289
}
304
-
305
290
componentUsageStack . push ( new Map ( ) )
306
291
pushedNodes . add ( node )
307
292
} ,
0 commit comments