Commit 007f6f27 authored by Illya Klymov's avatar Illya Klymov

Improve error state reporting

- make it full width
- properly report it with red border
parent 96db744c
...@@ -37,70 +37,79 @@ export default { ...@@ -37,70 +37,79 @@ export default {
this.group.progress?.message || getInvalidNameValidationMessage(this.group.importTarget) this.group.progress?.message || getInvalidNameValidationMessage(this.group.importTarget)
); );
}, },
validNameState() {
// bootstrap-vue requires null for "indifferent" state, if we return true
// this will highlight field in green like "passed validation"
return this.group.flags.isInvalid && this.group.flags.isAvailableForImport ? false : null;
},
}, },
}; };
</script> </script>
<template> <template>
<div class="gl-display-flex gl-align-items-stretch"> <div>
<import-group-dropdown <div class="gl-display-flex gl-align-items-stretch">
#default="{ namespaces }" <import-group-dropdown
:text="fullPath" #default="{ namespaces }"
:disabled="!group.flags.isAvailableForImport" :text="fullPath"
:namespaces="availableNamespaces" :disabled="!group.flags.isAvailableForImport"
toggle-class="gl-rounded-top-right-none! gl-rounded-bottom-right-none!" :namespaces="availableNamespaces"
class="gl-h-7 gl-flex-grow-1" toggle-class="gl-rounded-top-right-none! gl-rounded-bottom-right-none!"
data-qa-selector="target_namespace_selector_dropdown" class="gl-h-7 gl-flex-grow-1"
> data-qa-selector="target_namespace_selector_dropdown"
<gl-dropdown-item @click="$emit('update-target-namespace', { fullPath: '', id: null })">{{ >
s__('BulkImport|No parent') <gl-dropdown-item @click="$emit('update-target-namespace', { fullPath: '', id: null })">{{
}}</gl-dropdown-item> s__('BulkImport|No parent')
<template v-if="namespaces.length"> }}</gl-dropdown-item>
<gl-dropdown-divider /> <template v-if="namespaces.length">
<gl-dropdown-section-header> <gl-dropdown-divider />
{{ s__('BulkImport|Existing groups') }} <gl-dropdown-section-header>
</gl-dropdown-section-header> {{ s__('BulkImport|Existing groups') }}
<gl-dropdown-item </gl-dropdown-section-header>
v-for="ns in namespaces" <gl-dropdown-item
:key="ns.fullPath" v-for="ns in namespaces"
data-qa-selector="target_group_dropdown_item" :key="ns.fullPath"
:data-qa-group-name="ns.fullPath" data-qa-selector="target_group_dropdown_item"
@click="$emit('update-target-namespace', ns)" :data-qa-group-name="ns.fullPath"
> @click="$emit('update-target-namespace', ns)"
{{ ns.fullPath }} >
</gl-dropdown-item> {{ ns.fullPath }}
</template> </gl-dropdown-item>
</import-group-dropdown> </template>
<div </import-group-dropdown>
class="gl-h-7 gl-px-3 gl-display-flex gl-align-items-center gl-border-solid gl-border-0 gl-border-t-1 gl-border-b-1 gl-bg-gray-10" <div
:class="{ class="gl-h-7 gl-px-3 gl-display-flex gl-align-items-center gl-border-solid gl-border-0 gl-border-t-1 gl-border-b-1 gl-bg-gray-10"
'gl-text-gray-400 gl-border-gray-100': !group.flags.isAvailableForImport,
'gl-border-gray-200': group.flags.isAvailableForImport,
}"
>
/
</div>
<div class="gl-flex-grow-1">
<gl-form-input
class="gl-rounded-top-left-none gl-rounded-bottom-left-none"
:class="{ :class="{
'gl-inset-border-1-gray-200!': group.flags.isAvailableForImport, 'gl-text-gray-400 gl-border-gray-100': !group.flags.isAvailableForImport,
'gl-inset-border-1-gray-100!': !group.flags.isAvailableForImport, 'gl-border-gray-200': group.flags.isAvailableForImport,
'is-invalid': group.flags.isInvalid && group.flags.isAvailableForImport,
}" }"
debounce="500"
:disabled="!group.flags.isAvailableForImport"
:value="group.importTarget.newName"
:aria-label="__('New name')"
@input="$emit('update-new-name', $event)"
/>
<p
v-if="group.flags.isAvailableForImport && (group.flags.isInvalid || validationMessage)"
class="gl-text-red-500 gl-m-0 gl-mt-2"
role="alert"
> >
{{ validationMessage }} /
</p> </div>
<div class="gl-flex-grow-1">
<gl-form-input
class="gl-rounded-top-left-none gl-rounded-bottom-left-none"
:class="{
'gl-inset-border-1-gray-200!':
group.flags.isAvailableForImport && !group.flags.isInvalid,
'gl-inset-border-1-gray-100!':
!group.flags.isAvailableForImport && !group.flags.isInvalid,
}"
debounce="500"
:disabled="!group.flags.isAvailableForImport"
:value="group.importTarget.newName"
:aria-label="__('New name')"
:state="validNameState"
@input="$emit('update-new-name', $event)"
/>
</div>
</div>
<div
v-if="group.flags.isAvailableForImport && (group.flags.isInvalid || validationMessage)"
class="gl-text-red-500 gl-m-0 gl-mt-2"
role="alert"
>
{{ validationMessage }}
</div> </div>
</div> </div>
</template> </template>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment