aboutsummaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
authorMusikAnimal <musikanimal@gmail.com>2025-01-20 18:38:35 -0500
committerMusikAnimal <musikanimal@gmail.com>2025-01-20 18:41:27 -0500
commit1391fd143bb4ba3a5b477676d8f658acaa85e0f7 (patch)
tree9b516a4375b5f52972d792d2292ab75d669258dc /resources
parent3d6ba20e29dc8796d1b311b5348a7a5ed5936abb (diff)
downloadmediawikicore-1391fd143bb4ba3a5b477676d8f658acaa85e0f7.tar.gz
mediawikicore-1391fd143bb4ba3a5b477676d8f658acaa85e0f7.zip
UserLookup.vue: Only pass custom components a valid target
Don't show 'nosuchusershort' error for empty targets. eslint fixes Bug: T383663 Follow-Up: If061f465cf08d3348337103858e620dbd1cca219 Change-Id: Ic146206d8a3a080ccce2424775137afcee809d04
Diffstat (limited to 'resources')
-rw-r--r--resources/src/mediawiki.special.block/components/UserLookup.vue34
1 files changed, 25 insertions, 9 deletions
diff --git a/resources/src/mediawiki.special.block/components/UserLookup.vue b/resources/src/mediawiki.special.block/components/UserLookup.vue
index ba3b994be7e4..76fc32d2351f 100644
--- a/resources/src/mediawiki.special.block/components/UserLookup.vue
+++ b/resources/src/mediawiki.special.block/components/UserLookup.vue
@@ -25,7 +25,7 @@
{{ $i18n( 'block-target' ).text() }}
</template>
<div class="mw-block-conveniencelinks">
- <span v-if="status !== 'error' && !!targetUser">
+ <span v-if="status !== 'error' && targetExists">
<a
:href="mw.util.getUrl( contribsTitle )"
:title="contribsTitle"
@@ -35,16 +35,25 @@
</span>
</div>
<component
- v-for="customComponent in customComponents"
:is="customComponent"
+ v-for="customComponent in customComponents"
:key="customComponent.name"
- :target-user="targetUser"
+ :target-user="targetExists ? targetUser : null"
></component>
</cdx-field>
</template>
<script>
-const { computed, defineComponent, onMounted, ref, shallowRef, watch, DefineSetupFnComponent } = require( 'vue' );
+const {
+ computed,
+ defineComponent,
+ onMounted,
+ ref,
+ shallowRef,
+ watch,
+ DefineSetupFnComponent,
+ Ref
+} = require( 'vue' );
const { CdxLookup, CdxField } = require( '@wikimedia/codex' );
const { storeToRefs } = require( 'pinia' );
const { cdxIconSearch } = require( '../icons.json' );
@@ -67,11 +76,11 @@ module.exports = exports = defineComponent( {
],
setup( props ) {
const store = useBlockStore();
- const { targetUser } = storeToRefs( store );
+ const { targetExists, targetUser } = storeToRefs( store );
/**
* Custom components to be added to the bottom of the field.
*
- * @type {Ref<DefineSetupFnComponent> & {[ShallowRefMarker]?: true}}
+ * @type {Ref<DefineSetupFnComponent>}
*/
const customComponents = shallowRef( [] );
let htmlInput;
@@ -127,7 +136,13 @@ module.exports = exports = defineComponent( {
if ( mw.util.isIPAddress( target, true ) ) {
status.value = 'default';
store.formErrors = [];
- store.targetExists = true;
+ targetExists.value = true;
+ return;
+ }
+ if ( !target ) {
+ status.value = 'default';
+ store.formErrors = [];
+ targetExists.value = false;
return;
}
// Check if the target is a valid user
@@ -135,11 +150,11 @@ module.exports = exports = defineComponent( {
if ( !data || !data.users[ 0 ] || data.users[ 0 ].missing === true ) {
status.value = 'error';
store.formErrors = [ mw.message( 'nosuchusershort', target ).text() ];
- store.targetExists = false;
+ targetExists.value = false;
} else {
status.value = 'default';
store.formErrors = [];
- store.targetExists = true;
+ targetExists.value = true;
}
} );
}
@@ -298,6 +313,7 @@ module.exports = exports = defineComponent( {
return {
mw,
contribsTitle,
+ targetExists,
targetUser,
menuItems,
onChange,