diff options
Diffstat (limited to 'app/assets/javascripts/import_entities')
8 files changed, 38 insertions, 14 deletions
diff --git a/app/assets/javascripts/import_entities/components/import_status.vue b/app/assets/javascripts/import_entities/components/import_status.vue index 9262a4e1e95..5455a034106 100644 --- a/app/assets/javascripts/import_entities/components/import_status.vue +++ b/app/assets/javascripts/import_entities/components/import_status.vue @@ -44,6 +44,11 @@ const STATUS_MAP = { text: __('Failed'), variant: 'danger', }, + [STATUSES.TIMEOUT]: { + icon: 'status-failed', + text: __('Timeout'), + variant: 'danger', + }, [STATUSES.CANCELLED]: { icon: 'status-stopped', text: __('Cancelled'), diff --git a/app/assets/javascripts/import_entities/constants.js b/app/assets/javascripts/import_entities/constants.js index 20a4d2d84b4..c470da21765 100644 --- a/app/assets/javascripts/import_entities/constants.js +++ b/app/assets/javascripts/import_entities/constants.js @@ -10,4 +10,5 @@ export const STATUSES = { NONE: 'none', SCHEDULING: 'scheduling', CANCELLED: 'cancelled', + TIMEOUT: 'timeout', }; diff --git a/app/assets/javascripts/import_entities/import_groups/components/import_table.vue b/app/assets/javascripts/import_entities/import_groups/components/import_table.vue index 028197ec9b1..ce401862cc1 100644 --- a/app/assets/javascripts/import_entities/import_groups/components/import_table.vue +++ b/app/assets/javascripts/import_entities/import_groups/components/import_table.vue @@ -25,7 +25,7 @@ import importGroupsMutation from '../graphql/mutations/import_groups.mutation.gr import updateImportStatusMutation from '../graphql/mutations/update_import_status.mutation.graphql'; import availableNamespacesQuery from '../graphql/queries/available_namespaces.query.graphql'; import bulkImportSourceGroupsQuery from '../graphql/queries/bulk_import_source_groups.query.graphql'; -import { NEW_NAME_FIELD, i18n } from '../constants'; +import { NEW_NAME_FIELD, ROOT_NAMESPACE, i18n } from '../constants'; import { StatusPoller } from '../services/status_poller'; import { isFinished, isAvailableForImport, isNameValid, isSameTarget } from '../utils'; import ImportActionsCell from './import_actions_cell.vue'; @@ -71,6 +71,10 @@ export default { type: String, required: true, }, + historyPath: { + type: String, + required: true, + }, }, data() { @@ -426,10 +430,10 @@ export default { return this.importTargets[group.id]; } - const defaultTargetNamespace = this.availableNamespaces[0] ?? { fullPath: '', id: null }; + const defaultTargetNamespace = this.availableNamespaces[0] ?? ROOT_NAMESPACE; let importTarget; if (group.lastImportTarget) { - const targetNamespace = this.availableNamespaces.find( + const targetNamespace = [ROOT_NAMESPACE, ...this.availableNamespaces].find( (ns) => ns.fullPath === group.lastImportTarget.targetNamespace, ); @@ -485,12 +489,15 @@ export default { <template> <div> - <h1 - class="gl-my-0 gl-py-4 gl-font-size-h1 gl-border-solid gl-border-gray-200 gl-border-0 gl-border-b-1 gl-display-flex" + <div + class="gl-display-flex gl-align-items-center gl-border-solid gl-border-gray-200 gl-border-0 gl-border-b-1" > - <img :src="$options.gitlabLogo" class="gl-w-6 gl-h-6 gl-mb-2 gl-display-inline gl-mr-2" /> - {{ s__('BulkImport|Import groups from GitLab') }} - </h1> + <h1 class="gl-my-0 gl-py-4 gl-font-size-h1gl-display-flex"> + <img :src="$options.gitlabLogo" class="gl-w-6 gl-h-6 gl-mb-2 gl-display-inline gl-mr-2" /> + {{ s__('BulkImport|Import groups from GitLab') }} + </h1> + <gl-link :href="historyPath" class="gl-ml-auto">{{ s__('BulkImport|History') }}</gl-link> + </div> <gl-alert v-if="unavailableFeatures.length > 0 && unavailableFeaturesAlertVisible" variant="warning" diff --git a/app/assets/javascripts/import_entities/import_groups/components/import_target_cell.vue b/app/assets/javascripts/import_entities/import_groups/components/import_target_cell.vue index 344a6e45370..4fbbd5b239c 100644 --- a/app/assets/javascripts/import_entities/import_groups/components/import_target_cell.vue +++ b/app/assets/javascripts/import_entities/import_groups/components/import_target_cell.vue @@ -57,6 +57,7 @@ export default { toggle-class="gl-rounded-top-right-none! gl-rounded-bottom-right-none!" class="gl-h-7 gl-flex-grow-1" data-qa-selector="target_namespace_selector_dropdown" + data-testid="target-namespace-selector" > <gl-dropdown-item @click="$emit('update-target-namespace', { fullPath: '', id: null })">{{ s__('BulkImport|No parent') diff --git a/app/assets/javascripts/import_entities/import_groups/constants.js b/app/assets/javascripts/import_entities/import_groups/constants.js index ac1466238d0..32137308684 100644 --- a/app/assets/javascripts/import_entities/import_groups/constants.js +++ b/app/assets/javascripts/import_entities/import_groups/constants.js @@ -18,3 +18,5 @@ export const i18n = { }; export const NEW_NAME_FIELD = 'newName'; + +export const ROOT_NAMESPACE = { fullPath: '', id: null }; diff --git a/app/assets/javascripts/import_entities/import_groups/index.js b/app/assets/javascripts/import_entities/import_groups/index.js index 67a7258d504..02af0db7f9a 100644 --- a/app/assets/javascripts/import_entities/import_groups/index.js +++ b/app/assets/javascripts/import_entities/import_groups/index.js @@ -17,6 +17,7 @@ export function mountImportGroupsApp(mountElement) { jobsPath, sourceUrl, groupPathRegex, + historyPath, } = mountElement.dataset; const apolloProvider = new VueApollo({ defaultClient: createApolloClient({ @@ -38,6 +39,7 @@ export function mountImportGroupsApp(mountElement) { sourceUrl, jobsPath, groupPathRegex: new RegExp(`^(${groupPathRegex})$`), + historyPath, }, }); }, diff --git a/app/assets/javascripts/import_entities/import_groups/utils.js b/app/assets/javascripts/import_entities/import_groups/utils.js index 1d0ab75e1cb..f896203ba60 100644 --- a/app/assets/javascripts/import_entities/import_groups/utils.js +++ b/app/assets/javascripts/import_entities/import_groups/utils.js @@ -10,7 +10,7 @@ export function getInvalidNameValidationMessage(importTarget) { } export function isFinished(group) { - return [STATUSES.FINISHED, STATUSES.FAILED].includes(group.progress?.status); + return [STATUSES.FINISHED, STATUSES.FAILED, STATUSES.TIMEOUT].includes(group.progress?.status); } export function isAvailableForImport(group) { diff --git a/app/assets/javascripts/import_entities/import_projects/components/import_projects_table.vue b/app/assets/javascripts/import_entities/import_projects/components/import_projects_table.vue index e0703a77424..0307607321e 100644 --- a/app/assets/javascripts/import_entities/import_projects/components/import_projects_table.vue +++ b/app/assets/javascripts/import_entities/import_projects/components/import_projects_table.vue @@ -1,5 +1,11 @@ <script> -import { GlButton, GlLoadingIcon, GlIntersectionObserver, GlModal, GlFormInput } from '@gitlab/ui'; +import { + GlButton, + GlLoadingIcon, + GlIntersectionObserver, + GlModal, + GlSearchBoxByClick, +} from '@gitlab/ui'; import { mapActions, mapState, mapGetters } from 'vuex'; import { n__, __, sprintf } from '~/locale'; import ProviderRepoTableRow from './provider_repo_table_row.vue'; @@ -12,7 +18,7 @@ export default { GlButton, GlModal, GlIntersectionObserver, - GlFormInput, + GlSearchBoxByClick, }, props: { providerTitle: { @@ -134,13 +140,13 @@ export default { <slot name="actions"></slot> <form v-if="filterable" class="gl-ml-auto" novalidate @submit.prevent> - <gl-form-input + <gl-search-box-by-click data-qa-selector="githubish_import_filter_field" name="filter" :placeholder="__('Filter by name')" autofocus - size="lg" - @keyup.enter="setFilter($event.target.value)" + @submit="setFilter" + @clear="setFilter('')" /> </form> </div> |