diff --git a/GITLAB_KAS_VERSION b/GITLAB_KAS_VERSION index 5be43f039c1..004cc2e7794 100644 --- a/GITLAB_KAS_VERSION +++ b/GITLAB_KAS_VERSION @@ -1 +1 @@ -7e94489bc9d892e3cb25f9f9e7f4f7ce15ac0ee8 +d19af9f22edb454a615b9bb90fdcaa24f72eb488 diff --git a/app/assets/javascripts/admin/application_settings/setup_metrics_and_profiling.js b/app/assets/javascripts/admin/application_settings/setup_metrics_and_profiling.js index 3da138c256c..022ac0b8a73 100644 --- a/app/assets/javascripts/admin/application_settings/setup_metrics_and_profiling.js +++ b/app/assets/javascripts/admin/application_settings/setup_metrics_and_profiling.js @@ -2,6 +2,7 @@ import initSetHelperText, { initOptionMetricsState, } from '~/pages/admin/application_settings/metrics_and_profiling/usage_statistics'; import PayloadPreviewer from '~/pages/admin/application_settings/payload_previewer'; +import initProductUsageData from '~/pages/admin/application_settings/metrics_and_profiling/product_usage_data'; export default () => { Array.from(document.querySelectorAll('.js-payload-preview-trigger')).forEach((trigger) => { @@ -11,3 +12,4 @@ export default () => { initSetHelperText(); initOptionMetricsState(); +initProductUsageData(); diff --git a/app/assets/javascripts/ci/pipeline_details/graph/components/job_group_dropdown.vue b/app/assets/javascripts/ci/pipeline_details/graph/components/job_group_dropdown.vue index 53fff67cf09..31867d5f9b3 100644 --- a/app/assets/javascripts/ci/pipeline_details/graph/components/job_group_dropdown.vue +++ b/app/assets/javascripts/ci/pipeline_details/graph/components/job_group_dropdown.vue @@ -2,11 +2,13 @@ import { GlBadge, GlDisclosureDropdown, + GlDisclosureDropdownGroup, GlTooltipDirective, GlResizeObserverDirective, } from '@gitlab/ui'; import { GlBreakpointInstance } from '@gitlab/ui/dist/utils'; import JobDropdownItem from '~/ci/common/private/job_dropdown_item.vue'; +import { FAILED_STATUS } from '~/ci/constants'; import { JOB_DROPDOWN } from '../constants'; import JobItem from './job_item.vue'; @@ -22,6 +24,7 @@ export default { JobItem, GlBadge, GlDisclosureDropdown, + GlDisclosureDropdownGroup, }, directives: { GlTooltip: GlTooltipDirective, @@ -75,6 +78,15 @@ export default { isFailed() { return this.group?.status?.group === 'failed'; }, + nonFailedJobs() { + return this.group?.jobs.filter((job) => job.status?.group !== FAILED_STATUS); + }, + failedJobs() { + return this.group?.jobs.filter((job) => job.status?.group === FAILED_STATUS); + }, + hasFailedJobs() { + return this.failedJobs.length > 0; + }, }, methods: { handleResize() { @@ -122,12 +134,26 @@ export default { diff --git a/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/constants.js b/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/constants.js index e76bed66ced..f5967c041e2 100644 --- a/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/constants.js +++ b/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/constants.js @@ -22,4 +22,6 @@ export const ELEMENT_IDS = Object.freeze({ USAGE_PING_FEATURES_ENABLED: 'application_setting_usage_ping_features_enabled', USAGE_PING_ENABLED: 'application_setting_usage_ping_enabled', OPTIONAL_METRICS_IN_SERVICE_PING: 'application_setting_include_optional_metrics_in_service_ping', + PRODUCT_USAGE_DATA: 'application_setting_gitlab_product_usage_data_enabled', + SNOWPLOW_ENABLED: 'application_setting_snowplow_enabled', }); diff --git a/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/product_usage_data.js b/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/product_usage_data.js new file mode 100644 index 00000000000..e0e98a1d83d --- /dev/null +++ b/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/product_usage_data.js @@ -0,0 +1,33 @@ +import { ELEMENT_IDS } from './constants'; + +export default function initProductUsageData() { + const productUsageCheckbox = document.getElementById(ELEMENT_IDS.PRODUCT_USAGE_DATA); + const snowplowCheckbox = document.getElementById(ELEMENT_IDS.SNOWPLOW_ENABLED); + const snowplowSettings = document.getElementById('js-snowplow-settings'); + + const toggleSnowplowSettings = () => { + if (!snowplowCheckbox || !snowplowSettings) return; + + if (snowplowCheckbox.checked) { + snowplowSettings.style.display = 'block'; + } else { + snowplowSettings.style.display = 'none'; + } + }; + + toggleSnowplowSettings(); + + productUsageCheckbox?.addEventListener('change', () => { + if (productUsageCheckbox.checked) { + snowplowCheckbox.checked = false; + toggleSnowplowSettings(); + } + }); + + snowplowCheckbox?.addEventListener('change', () => { + if (snowplowCheckbox.checked) { + productUsageCheckbox.checked = false; + } + toggleSnowplowSettings(); + }); +} diff --git a/app/assets/javascripts/work_items/components/work_item_detail.vue b/app/assets/javascripts/work_items/components/work_item_detail.vue index 77f23dec6b7..b8107053a37 100644 --- a/app/assets/javascripts/work_items/components/work_item_detail.vue +++ b/app/assets/javascripts/work_items/components/work_item_detail.vue @@ -340,6 +340,9 @@ export default { canSummarizeComments() { return this.workItem.userPermissions?.summarizeComments; }, + hasBlockedWorkItemsFeature() { + return this.workItem.userPermissions?.blockedWorkItems; + }, isDiscussionLocked() { return this.workItemNotes?.discussionLocked; }, @@ -1208,6 +1211,7 @@ export default { :work-item-type="workItem.workItemType.name" :can-admin-work-item-link="canAdminWorkItemLink" :active-child-item-id="activeChildItemId" + :has-blocked-work-items-feature="hasBlockedWorkItemsFeature" @showModal="openContextualView" /> diff --git a/app/assets/javascripts/work_items/components/work_item_relationships/work_item_add_relationship_form.vue b/app/assets/javascripts/work_items/components/work_item_relationships/work_item_add_relationship_form.vue index 7d04217aa4a..09ee19b2843 100644 --- a/app/assets/javascripts/work_items/components/work_item_relationships/work_item_add_relationship_form.vue +++ b/app/assets/javascripts/work_items/components/work_item_relationships/work_item_add_relationship_form.vue @@ -52,6 +52,11 @@ export default { required: false, default: () => [], }, + hasBlockedWorkItemsFeature: { + type: Boolean, + required: true, + default: false, + }, }, data() { return { @@ -182,22 +187,24 @@ export default { {{ error }} - - - -

- {{ $options.i18n.linkItemInputLabel }} -

+