mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 17:19:37 +02:00
50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
module.exports = {
|
|
meta: {
|
|
type: 'problem',
|
|
fixable: null,
|
|
docs: {
|
|
description: 'Require loadingLabel prop when isLoading is specified on OLButton',
|
|
},
|
|
schema: [],
|
|
},
|
|
create(context) {
|
|
return {
|
|
'JSXOpeningElement[name.name="OLButton"]'(node) {
|
|
const attributes = new Map(
|
|
node.attributes.map(attr => [
|
|
attr.name?.name,
|
|
attr
|
|
])
|
|
)
|
|
|
|
const isLoadingAttr = attributes.get('isLoading')
|
|
const loadingLabelAttr = attributes.get('loadingLabel')
|
|
|
|
if (isLoadingAttr && !loadingLabelAttr) {
|
|
const isLoadingValue = isLoadingAttr.value
|
|
|
|
if (
|
|
!isLoadingValue ||
|
|
(isLoadingValue.type === 'JSXExpressionContainer' &&
|
|
isLoadingValue.expression.type === 'Literal' &&
|
|
isLoadingValue.expression.value === true)
|
|
) {
|
|
context.report({
|
|
node: isLoadingAttr,
|
|
message: 'Button with isLoading prop must also specify loadingLabel',
|
|
})
|
|
} else if (
|
|
isLoadingValue.type === 'JSXExpressionContainer' &&
|
|
isLoadingValue.expression.type !== 'Literal'
|
|
) {
|
|
context.report({
|
|
node: isLoadingAttr,
|
|
message: 'Button with isLoading prop must also specify loadingLabel',
|
|
})
|
|
}
|
|
}
|
|
},
|
|
}
|
|
},
|
|
}
|