diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-24 12:08:32 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-24 12:08:32 +0300 |
commit | 9b984f55eef568b6a15c3a125e0cf66f35678e5a (patch) | |
tree | ee7e1eb42f27400dd74bb44bb595263af2d72fc1 /app/assets/javascripts | |
parent | 83a9f472b8b523619519a1834176165c9f1532f7 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts')
9 files changed, 65 insertions, 48 deletions
diff --git a/app/assets/javascripts/monitoring/components/charts/anomaly.vue b/app/assets/javascripts/monitoring/components/charts/anomaly.vue index 64704701d1a..bcbc1dad89d 100644 --- a/app/assets/javascripts/monitoring/components/charts/anomaly.vue +++ b/app/assets/javascripts/monitoring/components/charts/anomaly.vue @@ -1,5 +1,5 @@ <script> -import { flatten, isNumber } from 'underscore'; +import { flattenDeep, isNumber } from 'lodash'; import { GlChartSeriesLabel } from '@gitlab/ui/dist/charts'; import { roundOffFloat } from '~/lib/utils/common_utils'; import { hexToRgb } from '~/lib/utils/color_utils'; @@ -77,7 +77,7 @@ export default { * This offset is the lowest value. */ yOffset() { - const values = flatten(this.series.map(ser => ser.data.map(([, y]) => y))); + const values = flattenDeep(this.series.map(ser => ser.data.map(([, y]) => y))); const min = values.length ? Math.floor(Math.min(...values)) : 0; return min < 0 ? -min : 0; }, diff --git a/app/assets/javascripts/monitoring/components/charts/time_series.vue b/app/assets/javascripts/monitoring/components/charts/time_series.vue index 0d442f14aea..e77bf08be7f 100644 --- a/app/assets/javascripts/monitoring/components/charts/time_series.vue +++ b/app/assets/javascripts/monitoring/components/charts/time_series.vue @@ -1,5 +1,5 @@ <script> -import _ from 'underscore'; +import { omit } from 'lodash'; import { GlLink, GlButton, GlTooltip, GlResizeObserverDirective } from '@gitlab/ui'; import { GlAreaChart, GlLineChart, GlChartSeriesLabel } from '@gitlab/ui/dist/charts'; import dateFormat from 'dateformat'; @@ -140,7 +140,7 @@ export default { return (this.option.series || []).concat(this.scatterSeries ? [this.scatterSeries] : []); }, chartOptions() { - const option = _.omit(this.option, 'series'); + const option = omit(this.option, 'series'); return { series: this.chartOptionSeries, xAxis: { diff --git a/app/assets/javascripts/monitoring/components/dashboard.vue b/app/assets/javascripts/monitoring/components/dashboard.vue index 211990f3d7c..14f39c50a2d 100644 --- a/app/assets/javascripts/monitoring/components/dashboard.vue +++ b/app/assets/javascripts/monitoring/components/dashboard.vue @@ -1,5 +1,5 @@ <script> -import _ from 'underscore'; +import { debounce, pickBy } from 'lodash'; import { mapActions, mapState, mapGetters } from 'vuex'; import VueDraggable from 'vuedraggable'; import { @@ -15,12 +15,13 @@ import { import PanelType from 'ee_else_ce/monitoring/components/panel_type.vue'; import { s__ } from '~/locale'; import createFlash from '~/flash'; -import Icon from '~/vue_shared/components/icon.vue'; import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import { getParameterValues, mergeUrlParams, redirectTo } from '~/lib/utils/url_utility'; import invalidUrl from '~/lib/utils/invalid_url'; +import Icon from '~/vue_shared/components/icon.vue'; +import { getTimeRange } from '~/vue_shared/components/date_time_picker/date_time_picker_lib'; +import DateTimePicker from '~/vue_shared/components/date_time_picker/date_time_picker.vue'; -import DateTimePicker from './date_time_picker/date_time_picker.vue'; import GraphGroup from './graph_group.vue'; import EmptyState from './empty_state.vue'; import GroupEmptyState from './group_empty_state.vue'; @@ -28,11 +29,10 @@ import DashboardsDropdown from './dashboards_dropdown.vue'; import TrackEventDirective from '~/vue_shared/directives/track_event'; import { getAddMetricTrackingOptions } from '../utils'; -import { getTimeRange } from './date_time_picker/date_time_picker_lib'; import { datePickerTimeWindows, metricStates } from '../constants'; -const defaultTimeDiff = getTimeRange(); +const defaultTimeRange = getTimeRange(); export default { components: { @@ -190,8 +190,8 @@ export default { return { state: 'gettingStarted', formIsValid: null, - startDate: getParameterValues('start')[0] || defaultTimeDiff.start, - endDate: getParameterValues('end')[0] || defaultTimeDiff.end, + startDate: getParameterValues('start')[0] || defaultTimeRange.start, + endDate: getParameterValues('end')[0] || defaultTimeRange.end, hasValidDates: true, datePickerTimeWindows, isRearrangingPanels: false, @@ -288,13 +288,13 @@ export default { 'Metrics|Link contains an invalid time window, please verify the link to see the requested time range.', ), ); - this.startDate = defaultTimeDiff.start; - this.endDate = defaultTimeDiff.end; + this.startDate = defaultTimeRange.start; + this.endDate = defaultTimeRange.end; }, generateLink(group, title, yLabel) { const dashboard = this.currentDashboard || this.firstDashboard.path; - const params = _.pick({ dashboard, group, title, y_label: yLabel }, value => value != null); + const params = pickBy({ dashboard, group, title, y_label: yLabel }, value => value != null); return mergeUrlParams(params, window.location.href); }, hideAddMetricModal() { @@ -306,7 +306,7 @@ export default { setFormValidity(isValid) { this.formIsValid = isValid; }, - debouncedEnvironmentsSearch: _.debounce(function environmentsSearchOnInput(searchTerm) { + debouncedEnvironmentsSearch: debounce(function environmentsSearchOnInput(searchTerm) { this.setEnvironmentsSearchTerm(searchTerm); }, 500), submitCustomMetricsForm() { @@ -427,6 +427,7 @@ export default { class="col-sm-6 col-md-6 col-lg-4" > <date-time-picker + ref="dateTimePicker" :start="startDate" :end="endDate" :time-windows="datePickerTimeWindows" diff --git a/app/assets/javascripts/monitoring/components/embed.vue b/app/assets/javascripts/monitoring/components/embed.vue index 10c081070d7..c79e43c7c29 100644 --- a/app/assets/javascripts/monitoring/components/embed.vue +++ b/app/assets/javascripts/monitoring/components/embed.vue @@ -3,7 +3,7 @@ import { mapActions, mapState, mapGetters } from 'vuex'; import PanelType from 'ee_else_ce/monitoring/components/panel_type.vue'; import { getParameterValues, removeParams } from '~/lib/utils/url_utility'; import { sidebarAnimationDuration } from '../constants'; -import { getTimeRange } from './date_time_picker/date_time_picker_lib'; +import { getTimeRange } from '~/vue_shared/components/date_time_picker/date_time_picker_lib'; let sidebarMutationObserver; diff --git a/app/assets/javascripts/monitoring/components/panel_type.vue b/app/assets/javascripts/monitoring/components/panel_type.vue index ec6a41d0540..a2849dcfddb 100644 --- a/app/assets/javascripts/monitoring/components/panel_type.vue +++ b/app/assets/javascripts/monitoring/components/panel_type.vue @@ -1,6 +1,6 @@ <script> import { mapState } from 'vuex'; -import _ from 'underscore'; +import { pickBy } from 'lodash'; import { GlDropdown, GlDropdownItem, @@ -90,7 +90,7 @@ export default { getGraphAlerts(queries) { if (!this.allAlerts) return {}; const metricIdsForChart = queries.map(q => q.metricId); - return _.pick(this.allAlerts, alert => metricIdsForChart.includes(alert.metricId)); + return pickBy(this.allAlerts, alert => metricIdsForChart.includes(alert.metricId)); }, getGraphAlertValues(queries) { return Object.values(this.getGraphAlerts(queries)); diff --git a/app/assets/javascripts/monitoring/stores/utils.js b/app/assets/javascripts/monitoring/stores/utils.js index 3300d2032d0..616d2e9bfd8 100644 --- a/app/assets/javascripts/monitoring/stores/utils.js +++ b/app/assets/javascripts/monitoring/stores/utils.js @@ -1,4 +1,4 @@ -import _ from 'underscore'; +import { omit } from 'lodash'; export const uniqMetricsId = metric => `${metric.metric_id}_${metric.id}`; @@ -11,7 +11,7 @@ export const uniqMetricsId = metric => `${metric.metric_id}_${metric.id}`; */ export const normalizeMetric = (metric = {}) => - _.omit( + omit( { ...metric, metric_id: uniqMetricsId(metric), diff --git a/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker.vue b/app/assets/javascripts/vue_shared/components/date_time_picker/date_time_picker.vue index 3a18a494cad..7d4c162473f 100644 --- a/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker.vue +++ b/app/assets/javascripts/vue_shared/components/date_time_picker/date_time_picker.vue @@ -122,30 +122,28 @@ export default { }; </script> <template> - <gl-dropdown - ref="dropdown" - :text="timeWindowText" - menu-class="time-window-dropdown-menu" - class="js-time-window-dropdown" - > - <div class="d-flex justify-content-between time-window-dropdown-menu-container"> + <gl-dropdown :text="timeWindowText" class="date-time-picker" menu-class="date-time-picker-menu"> + <div class="d-flex justify-content-between gl-p-2"> <gl-form-group :label="__('Custom range')" label-for="custom-from-time" - class="custom-time-range-form-group col-md-7 p-0 m-0" + label-class="gl-pb-1" + class="custom-time-range-form-group col-md-7 gl-pl-1 gl-pr-0 m-0" > - <date-time-picker-input - id="custom-time-from" - v-model="startInput" - :label="__('From')" - :state="startInputValid" - /> - <date-time-picker-input - id="custom-time-to" - v-model="endInput" - :label="__('To')" - :state="endInputValid" - /> + <div class="gl-pt-2"> + <date-time-picker-input + id="custom-time-from" + v-model="startInput" + :label="__('From')" + :state="startInputValid" + /> + <date-time-picker-input + id="custom-time-to" + v-model="endInput" + :label="__('To')" + :state="endInputValid" + /> + </div> <gl-form-group> <gl-button @click="closeDropdown">{{ __('Cancel') }}</gl-button> <gl-button variant="success" :disabled="!isValid" @click="apply()"> @@ -153,12 +151,10 @@ export default { </gl-button> </gl-form-group> </gl-form-group> - <gl-form-group - :label="__('Quick range')" - label-for="group-id-dropdown" - label-align="center" - class="col-md-4 p-0 m-0" - > + <gl-form-group label-for="group-id-dropdown" class="col-md-5 gl-pl-1 gl-pr-1 m-0"> + <template #label> + <span class="gl-pl-5">{{ __('Quick range') }}</span> + </template> <gl-dropdown-item v-for="(timeWindow, key) in timeWindows" :key="key" diff --git a/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker_input.vue b/app/assets/javascripts/vue_shared/components/date_time_picker/date_time_picker_input.vue index b27a379c46a..f19f8bd46b3 100644 --- a/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker_input.vue +++ b/app/assets/javascripts/vue_shared/components/date_time_picker/date_time_picker_input.vue @@ -1,5 +1,5 @@ <script> -import _ from 'underscore'; +import { uniqueId } from 'lodash'; import { GlFormGroup, GlFormInput } from '@gitlab/ui'; import { __, sprintf } from '~/locale'; import { dateFormats } from './date_time_picker_lib'; @@ -35,7 +35,7 @@ export default { id: { type: String, required: false, - default: () => _.uniqueId('dateTimePicker_'), + default: () => uniqueId('dateTimePicker_'), }, }, data() { diff --git a/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker_lib.js b/app/assets/javascripts/vue_shared/components/date_time_picker/date_time_picker_lib.js index 604b17baab9..685115b92dd 100644 --- a/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker_lib.js +++ b/app/assets/javascripts/vue_shared/components/date_time_picker/date_time_picker_lib.js @@ -8,6 +8,15 @@ import { secondsToMilliseconds } from '~/lib/utils/datetime_utility'; */ const dateTimePickerRegex = /^(\d{4})-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])(?: (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]))?$/; +/** + * A key-value pair of "time windows". + * + * A time window is a representation of period of time that starts + * some time in past until now. Keys are only used for easy reference. + * + * It is represented as user friendly `label` and number of `seconds` + * to be substracted from now. + */ export const defaultTimeWindows = { thirtyMinutes: { label: __('30 minutes'), @@ -58,6 +67,17 @@ export const isValidDate = dateString => { } }; +/** + * For a given time window key (e.g. `threeHours`) and key-value pair + * object of time windows. + * + * Returns a date time range with start and end. + * + * @param {String} timeWindowKey - A key in the object of time windows. + * @param {Object} timeWindows - A key-value pair of time windows, + * with a second duration and a label. + * @returns An object with time range, start and end dates, in ISO format. + */ export const getTimeRange = (timeWindowKey, timeWindows = defaultTimeWindows) => { let difference; if (timeWindows[timeWindowKey]) { |