Commit 38b713c3 authored by Ezekiel Kigbo's avatar Ezekiel Kigbo

Added specs for the prepopulated form

Added isDirty check to the form

Added specs for cancel button

Updated gitlab.pot file

Minor cleanup and update gitlab.pot
parent ff8bc953
...@@ -79,14 +79,6 @@ export default () => { ...@@ -79,14 +79,6 @@ export default () => {
// variable itself can be completely removed. // variable itself can be completely removed.
// Follow up issue: https://gitlab.com/gitlab-org/gitlab-foss/issues/64490 // Follow up issue: https://gitlab.com/gitlab-org/gitlab-foss/issues/64490
if (cycleAnalyticsEl.dataset.requestPath) this.fetchCycleAnalyticsData(); if (cycleAnalyticsEl.dataset.requestPath) this.fetchCycleAnalyticsData();
console.log('LOADING::data', cycleAnalyticsEl.dataset);
// groupLabels needed for label dropdown in the custom stages form
const groupLabels = cycleAnalyticsEl.dataset.groupLabels
? JSON.parse(cycleAnalyticsEl.dataset.groupLabels)
: [];
this.store.setGroupLabels(groupLabels);
}, },
methods: { methods: {
handleError() { handleError() {
......
...@@ -35,7 +35,6 @@ export default { ...@@ -35,7 +35,6 @@ export default {
analytics: '', analytics: '',
events: [], events: [],
stages: [], stages: [],
groupLabels: [],
}, },
setCycleAnalyticsData(data) { setCycleAnalyticsData(data) {
this.state = Object.assign(this.state, this.decorateData(data)); this.state = Object.assign(this.state, this.decorateData(data));
...@@ -113,13 +112,4 @@ export default { ...@@ -113,13 +112,4 @@ export default {
currentActiveStage() { currentActiveStage() {
return this.state.stages.find(stage => stage.active); return this.state.stages.find(stage => stage.active);
}, },
setGroupLabels(labels) {
this.state.groupLabels = labels.map(({ id, title, color, textColor, description }) => ({
id,
title,
color,
textColor,
description,
}));
},
}; };
...@@ -68,9 +68,7 @@ export default { ...@@ -68,9 +68,7 @@ export default {
:key="`${project.organizationSlug}.${project.slug}`" :key="`${project.organizationSlug}.${project.slug}`"
class="w-100" class="w-100"
@click="$emit('select-project', project)" @click="$emit('select-project', project)"
> >{{ getDisplayName(project) }}</gl-dropdown-item
<div></div>{{ getDisplayName(project) }}
</gl-dropdown-item
> >
</gl-dropdown> </gl-dropdown>
</div> </div>
......
...@@ -127,7 +127,7 @@ export default { ...@@ -127,7 +127,7 @@ export default {
<template> <template>
<div class="block labels js-labels-block"> <div class="block labels js-labels-block">
<!-- <dropdown-value-collapsed <dropdown-value-collapsed
v-if="showCreate" v-if="showCreate"
:labels="context.labels" :labels="context.labels"
@onValueClick="handleCollapsedValueClick" @onValueClick="handleCollapsedValueClick"
...@@ -140,8 +140,8 @@ export default { ...@@ -140,8 +140,8 @@ export default {
:enable-scoped-labels="enableScopedLabels" :enable-scoped-labels="enableScopedLabels"
> >
<slot></slot> <slot></slot>
</dropdown-value> --> </dropdown-value>
<div class="selectbox js-selectbox"> <div v-if="canEdit" class="selectbox js-selectbox" style="display: none;">
<dropdown-hidden-input <dropdown-hidden-input
v-for="label in context.labels" v-for="label in context.labels"
:key="label.id" :key="label.id"
......
<script> <script>
import { isEqual } from 'underscore';
import { s__, __ } from '~/locale'; import { s__, __ } from '~/locale';
import { GlButton, GlFormGroup, GlFormInput, GlFormSelect } from '@gitlab/ui'; import { GlButton, GlFormGroup, GlFormInput, GlFormSelect } from '@gitlab/ui';
...@@ -25,6 +26,14 @@ const eventsByIdentifier = (events = [], targetIdentifier = []) => { ...@@ -25,6 +26,14 @@ const eventsByIdentifier = (events = [], targetIdentifier = []) => {
const isLabelEvent = (labelEvents = [], ev = null) => const isLabelEvent = (labelEvents = [], ev = null) =>
ev && labelEvents.length && labelEvents.includes(ev); ev && labelEvents.length && labelEvents.includes(ev);
const initFields = {
name: '',
startEvent: '',
startEventLabel: null,
stopEvent: '',
stopEventLabel: null,
};
export default { export default {
components: { components: {
GlButton, GlButton,
...@@ -36,109 +45,112 @@ export default { ...@@ -36,109 +45,112 @@ export default {
props: { props: {
events: { events: {
type: Array, type: Array,
// required: true, required: true,
required: false, // required: false,
default: () => [ // default: () => [
{ // {
name: __('Issue created'), // name: 'Issue created',
identifier: 'issue_created', // identifier: 'issue_created',
type: 'simple', // type: 'simple',
can_be_start_event: true, // can_be_start_event: true,
allowed_end_events: ['issue_stage_end'], // allowed_end_events: ['issue_stage_end'],
}, // },
{ // {
name: __('Issue first mentioned in a commit'), // name: 'Issue first mentioned in a commit',
identifier: 'issue_first_mentioned_in_commit', // identifier: 'issue_first_mentioned_in_commit',
type: 'simple', // type: 'simple',
can_be_start_event: false, // can_be_start_event: false,
allowed_end_events: [], // allowed_end_events: [],
}, // },
{ // {
name: __('Merge request created'), // name: 'Merge request created',
identifier: 'merge_request_created', // identifier: 'merge_request_created',
type: 'simple', // type: 'simple',
can_be_start_event: true, // can_be_start_event: true,
allowed_end_events: ['merge_request_merged'], // allowed_end_events: ['merge_request_merged'],
}, // },
{ // {
name: __('Merge request first deployed to production'), // name: 'Merge request first deployed to production',
identifier: 'merge_request_first_deployed_to_production', // identifier: 'merge_request_first_deployed_to_production',
type: 'simple', // type: 'simple',
can_be_start_event: false, // can_be_start_event: false,
allowed_end_events: [], // allowed_end_events: [],
}, // },
{ // {
name: __('Merge request last build finish time'), // name: 'Merge request last build finish time',
identifier: 'merge_request_last_build_finished', // identifier: 'merge_request_last_build_finished',
type: 'simple', // type: 'simple',
can_be_start_event: false, // can_be_start_event: false,
allowed_end_events: [], // allowed_end_events: [],
}, // },
{ // {
name: __('Merge request last build start time'), // name: 'Merge request last build start time',
identifier: 'merge_request_last_build_started', // identifier: 'merge_request_last_build_started',
type: 'simple', // type: 'simple',
can_be_start_event: true, // can_be_start_event: true,
allowed_end_events: ['merge_request_last_build_finished'], // allowed_end_events: ['merge_request_last_build_finished'],
}, // },
{ // {
name: __('Merge request merged'), // name: 'Merge request merged',
identifier: 'merge_request_merged', // identifier: 'merge_request_merged',
type: 'simple', // type: 'simple',
can_be_start_event: true, // can_be_start_event: true,
allowed_end_events: ['merge_request_first_deployed_to_production'], // allowed_end_events: ['merge_request_first_deployed_to_production'],
}, // },
{ // {
name: __('Issue first mentioned in a commit'), // name: 'Issue first mentioned in a commit',
identifier: 'code_stage_start', // identifier: 'code_stage_start',
type: 'simple', // type: 'simple',
can_be_start_event: true, // can_be_start_event: true,
allowed_end_events: ['merge_request_created'], // allowed_end_events: ['merge_request_created'],
}, // },
{ // {
name: __('Issue first associated with a milestone or issue first added to a board'), // name: 'Issue first associated with a milestone or issue first added to a board',
identifier: 'issue_stage_end', // identifier: 'issue_stage_end',
type: 'simple', // type: 'simple',
can_be_start_event: false, // can_be_start_event: false,
allowed_end_events: [], // allowed_end_events: [],
}, // },
{ // {
name: __('Issue first associated with a milestone or issue first added to a board'), // name: 'Issue first associated with a milestone or issue first added to a board',
identifier: 'plan_stage_start', // identifier: 'plan_stage_start',
type: 'simple', // type: 'simple',
can_be_start_event: true, // can_be_start_event: true,
allowed_end_events: ['issue_first_mentioned_in_commit'], // allowed_end_events: ['issue_first_mentioned_in_commit'],
}, // },
{ // {
identifier: 'issue_label_added', // identifier: 'issue_label_added',
name: __('Issue Label Added'), // name: 'Issue Label Added',
type: 'label', // type: 'label',
can_be_start_event: true, // can_be_start_event: true,
allowed_end_events: ['issue_closed', 'issue_label_removed'], // allowed_end_events: ['issue_closed', 'issue_label_removed'],
}, // },
{ // {
identifier: 'issue_label_removed', // identifier: 'issue_label_removed',
name: __('Issue Label Removed'), // name: 'Issue Label Removed',
type: 'label', // type: 'label',
can_be_start_event: false, // can_be_start_event: false,
allowed_end_events: [], // allowed_end_events: [],
}, // },
], // ],
}, },
labels: { labels: {
type: Array, type: Array,
required: true, required: true,
}, },
initialFields: {
type: Object,
required: false,
default: () => ({
...initFields,
}),
},
}, },
data() { data() {
return { return {
fields: { fields: {
name: '', ...initFields,
startEvent: '',
startEventLabel: null,
stopEvent: '',
stopEventLabel: null,
}, },
labelEvents: [], labelEvents: [],
}; };
...@@ -168,9 +180,12 @@ export default { ...@@ -168,9 +180,12 @@ export default {
}, },
isComplete() { isComplete() {
const requiredFields = [this.fields.startEvent, this.fields.stopEvent, this.fields.name]; const requiredFields = [this.fields.startEvent, this.fields.stopEvent, this.fields.name];
// TODO: need to factor in label field
return requiredFields.every(fieldValue => fieldValue && fieldValue.length > 0); return requiredFields.every(fieldValue => fieldValue && fieldValue.length > 0);
}, },
isDirty() {
return !isEqual(this.initialFields, this.fields);
},
}, },
mounted() { mounted() {
this.labelEvents = this.events this.labelEvents = this.events
...@@ -178,6 +193,10 @@ export default { ...@@ -178,6 +193,10 @@ export default {
.map(i => i.identifier); .map(i => i.identifier);
}, },
methods: { methods: {
handleCancel() {
this.fields = { ...this.initialFields };
this.$emit('cancel');
},
handleSave() { handleSave() {
this.$emit('submit', this.fields); this.$emit('submit', this.fields);
}, },
...@@ -258,16 +277,16 @@ export default { ...@@ -258,16 +277,16 @@ export default {
</div> </div>
<div class="add-stage-form-actions"> <div class="add-stage-form-actions">
<!-- <button
TODO: what does the cancel button do? :disabled="!isDirty"
- Just hide the form? class="btn btn-cancel js-add-stage-cancel"
- clear entered data? type="button"
--> @click="handleCancel"
<button class="btn btn-cancel add-stage-cancel" type="button" @click="cancelHandler()"> >
{{ __('Cancel') }} {{ __('Cancel') }}
</button> </button>
<button <button
:disabled="!isComplete" :disabled="!isComplete || !isDirty"
type="button" type="button"
class="js-add-stage btn btn-success" class="js-add-stage btn btn-success"
@click="handleSave" @click="handleSave"
......
...@@ -497,7 +497,6 @@ describe('CustomStageForm', () => { ...@@ -497,7 +497,6 @@ describe('CustomStageForm', () => {
}); });
}); });
}); });
describe('Add stage button', () => { describe('Add stage button', () => {
it('is disabled by default', () => { it('is disabled by default', () => {
expect(wrapper.find(sel.submit).attributes('disabled')).toEqual('disabled'); expect(wrapper.find(sel.submit).attributes('disabled')).toEqual('disabled');
......
...@@ -84,21 +84,4 @@ describe('Cycle Analytics LabelsSelector', () => { ...@@ -84,21 +84,4 @@ describe('Cycle Analytics LabelsSelector', () => {
expect(activeItem.text()).toEqual(selectedLabel.name); expect(activeItem.text()).toEqual(selectedLabel.name);
}); });
}); });
describe('with selectedLabelId set', () => {
beforeEach(() => {
wrapper = createComponent({
selectedLabelId: 55,
});
});
afterEach(() => {
wrapper.destroy();
});
it('will set the active class', () => {
const activeItem = wrapper.find('[active="true"]');
expect(activeItem.exists()).toBe(true);
expect(activeItem.text()).toEqual('workflow::this-is-a-label');
});
});
}); });
...@@ -4538,9 +4538,6 @@ msgstr "" ...@@ -4538,9 +4538,6 @@ msgstr ""
msgid "CustomCycleAnalytics|Add stage" msgid "CustomCycleAnalytics|Add stage"
msgstr "" msgstr ""
msgid "CustomCycleAnalytics|Choose which object types will trigger this stage"
msgstr ""
msgid "CustomCycleAnalytics|Enter a name for the stage" msgid "CustomCycleAnalytics|Enter a name for the stage"
msgstr "" msgstr ""
...@@ -4550,15 +4547,9 @@ msgstr "" ...@@ -4550,15 +4547,9 @@ msgstr ""
msgid "CustomCycleAnalytics|New stage" msgid "CustomCycleAnalytics|New stage"
msgstr "" msgstr ""
msgid "CustomCycleAnalytics|Object type"
msgstr ""
msgid "CustomCycleAnalytics|Please select a start event first" msgid "CustomCycleAnalytics|Please select a start event first"
msgstr "" msgstr ""
msgid "CustomCycleAnalytics|Select one or more objects"
msgstr ""
msgid "CustomCycleAnalytics|Select start event" msgid "CustomCycleAnalytics|Select start event"
msgstr "" msgstr ""
...@@ -4568,9 +4559,15 @@ msgstr "" ...@@ -4568,9 +4559,15 @@ msgstr ""
msgid "CustomCycleAnalytics|Start event" msgid "CustomCycleAnalytics|Start event"
msgstr "" msgstr ""
msgid "CustomCycleAnalytics|Start event label"
msgstr ""
msgid "CustomCycleAnalytics|Stop event" msgid "CustomCycleAnalytics|Stop event"
msgstr "" msgstr ""
msgid "CustomCycleAnalytics|Stop event label"
msgstr ""
msgid "Customize colors" msgid "Customize colors"
msgstr "" msgstr ""
...@@ -15713,6 +15710,9 @@ msgstr "" ...@@ -15713,6 +15710,9 @@ msgstr ""
msgid "There was an error fetching configuration for charts" msgid "There was an error fetching configuration for charts"
msgstr "" msgstr ""
msgid "There was an error fetching the form data"
msgstr ""
msgid "There was an error gathering the chart data" msgid "There was an error gathering the chart data"
msgstr "" msgstr ""
......
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