diff --git a/app/assets/javascripts/merge_requests/components/merge_schedule_input.vue b/app/assets/javascripts/merge_requests/components/merge_schedule_input.vue new file mode 100644 index 0000000000000000000000000000000000000000..94f9c45b32578854e755efef7db875330ab9be27 --- /dev/null +++ b/app/assets/javascripts/merge_requests/components/merge_schedule_input.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js index 0e66c3521dd594d75492e5a7f89eb74526653cc3..0773b6aed5cc4410501a3cb2ba0d08ec1867a843 100644 --- a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js +++ b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js @@ -7,6 +7,7 @@ import { addShortcutsExtension } from '~/behaviors/shortcuts'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation'; import LabelsSelect from '~/labels/labels_select'; import { mountMilestoneDropdown } from '~/sidebar/mount_sidebar'; +import mountMergeScheduleInput from './mount_merge_schedule_input'; export default () => { addShortcutsExtension(ShortcutsNavigation); @@ -14,4 +15,5 @@ export default () => { IssuableLabelSelector(); new LabelsSelect(); mountMilestoneDropdown('[name="merge_request[milestone_id]"]'); + mountMergeScheduleInput(); }; diff --git a/app/assets/javascripts/pages/projects/merge_requests/mount_merge_schedule_input.js b/app/assets/javascripts/pages/projects/merge_requests/mount_merge_schedule_input.js new file mode 100644 index 0000000000000000000000000000000000000000..93b2a62488a73beafa992a4cab13583480e74e1e --- /dev/null +++ b/app/assets/javascripts/pages/projects/merge_requests/mount_merge_schedule_input.js @@ -0,0 +1,22 @@ +import Vue from 'vue'; +import MergeScheduleInput from '~/merge_requests/components/merge_schedule_input.vue'; + +export default () => { + const el = document.querySelector('.js-merge-request-schedule-input'); + + if (!el) return false; + + const { mergeAfter, paramKey } = el.dataset; + + return new Vue({ + el, + render(h) { + return h(MergeScheduleInput, { + props: { + mergeAfter, + paramKey, + }, + }); + }, + }); +}; diff --git a/app/assets/javascripts/vue_merge_request_widget/components/checks/constants.js b/app/assets/javascripts/vue_merge_request_widget/components/checks/constants.js index 3995ccfca08b0bc7e1d9bdf2d3daf9f8c5877272..b6dbbea1add0221cfdeb8188f6a7ec20d9eb798a 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/checks/constants.js +++ b/app/assets/javascripts/vue_merge_request_widget/components/checks/constants.js @@ -4,6 +4,7 @@ export const COMPONENTS = { conflict: () => import('./conflicts.vue'), discussions_not_resolved: () => import('./unresolved_discussions.vue'), draft_status: () => import('./draft.vue'), + merge_time: () => import('./merge_time.vue'), need_rebase: () => import('./rebase.vue'), default: () => import('./message.vue'), requested_changes: () => @@ -38,4 +39,12 @@ export const FAILURE_REASONS = { locked_lfs_files: __('All LFS files must be unlocked.'), security_policy_evaluation: __('All security policies must be evaluated.'), security_policy_violations: __('All policy rules must be satisfied.'), + merge_time: __('Cannot merge until this date and time.'), }; + +export const ICON_NAMES = Object.freeze({ + failed: 'failed', + inactive: 'neutral', + success: 'success', + warning: 'warning', +}); diff --git a/app/assets/javascripts/vue_merge_request_widget/components/checks/merge_time.vue b/app/assets/javascripts/vue_merge_request_widget/components/checks/merge_time.vue new file mode 100644 index 0000000000000000000000000000000000000000..7b201b0dfb9bf26473bc066d4b097789f919184e --- /dev/null +++ b/app/assets/javascripts/vue_merge_request_widget/components/checks/merge_time.vue @@ -0,0 +1,47 @@ + + + diff --git a/app/assets/javascripts/vue_merge_request_widget/components/checks/message.vue b/app/assets/javascripts/vue_merge_request_widget/components/checks/message.vue index bfd7c525ea9f4539bcdbf795715bd86c9ef41037..56c0f75248c8cb18c45e2b848b9241d130688829 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/checks/message.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/checks/message.vue @@ -1,14 +1,7 @@