client/containers/settings-workflow-history/component.vue (290 lines of code) (raw):
<script>
// Copyright (c) 2017-2024 Uber Technologies Inc.
//
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { ToggleButton } from 'vue-js-toggle-button';
import {
ButtonFill,
ButtonIcon,
FeatureFlag,
FlexGrid,
FlexGridItem,
SelectInput,
SettingsFooter,
SettingsToggle,
TextInput,
} from '~components';
import { WORKFLOW_EVENT_TYPES } from '~constants';
import {
workflowHistoryEventHighlightListAddOrUpdate,
workflowHistoryEventHighlightListRemove,
} from '~helpers';
export default {
name: 'settings-workflow-history',
props: {
graphEnabled: {
type: Boolean,
},
isSubmitEnabled: {
type: Boolean,
},
workflowHistoryEventHighlightList: {
type: Array,
},
workflowHistoryEventHighlightListEnabled: {
type: Boolean,
},
},
data() {
return {
isWorkflowHistoryEventHighlightListChanged: false,
modalWorkflowHistoryEventHighlightListEnabled: this
.workflowHistoryEventHighlightListEnabled,
modalWorkflowHistoryEventHighlightList: this
.workflowHistoryEventHighlightList,
workflowEventTypes: WORKFLOW_EVENT_TYPES,
};
},
computed: {
isWorkflowHistoryEventHighlightListEnabledChanged() {
return (
this.modalWorkflowHistoryEventHighlightListEnabled !==
this.workflowHistoryEventHighlightListEnabled
);
},
isSettingsChanged() {
return (
this.isWorkflowHistoryEventHighlightListChanged ||
this.isWorkflowHistoryEventHighlightListEnabledChanged
);
},
},
methods: {
onClose() {
this.$emit('close');
},
onWorkflowHistoryEventHighlightListChange({ event, key, value }) {
if (event[key] === value) {
return;
}
this.modalWorkflowHistoryEventHighlightList = workflowHistoryEventHighlightListAddOrUpdate(
{
...event,
[key]: value,
workflowHistoryEventHighlightList: this
.modalWorkflowHistoryEventHighlightList,
}
);
this.isWorkflowHistoryEventHighlightListChanged = true;
},
onWorkflowHistoryEventHighlightListRemove({ id }) {
this.modalWorkflowHistoryEventHighlightList = workflowHistoryEventHighlightListRemove(
{
id,
workflowHistoryEventHighlightList: this
.modalWorkflowHistoryEventHighlightList,
}
);
this.isWorkflowHistoryEventHighlightListChanged = true;
},
onWorkflowHistoryEventHighlightListAdd() {
this.modalWorkflowHistoryEventHighlightList = workflowHistoryEventHighlightListAddOrUpdate(
{
eventParamName: '',
eventType: WORKFLOW_EVENT_TYPES[0],
id: new Date().getTime(),
isEnabled: true,
workflowHistoryEventHighlightList: this
.modalWorkflowHistoryEventHighlightList,
}
);
this.isWorkflowHistoryEventHighlightListChanged = true;
},
onWorkflowHistoryEventHighlightListEnabledChange({ value }) {
this.modalWorkflowHistoryEventHighlightListEnabled = value;
},
onChange({ name, value }) {
this.$emit('onChange', { name, value });
},
onSubmit() {
this.$emit('change', {
...(this.isWorkflowHistoryEventHighlightListEnabledChanged && {
workflowHistoryEventHighlightListEnabled: this
.modalWorkflowHistoryEventHighlightListEnabled,
}),
...(this.isWorkflowHistoryEventHighlightListChanged && {
workflowHistoryEventHighlightList: this
.modalWorkflowHistoryEventHighlightList,
}),
});
this.$emit('onSubmit');
},
},
components: {
'button-fill': ButtonFill,
'button-icon': ButtonIcon,
'feature-flag': FeatureFlag,
'flex-grid': FlexGrid,
'flex-grid-item': FlexGridItem,
'select-input': SelectInput,
'settings-footer': SettingsFooter,
'settings-toggle': SettingsToggle,
'text-input': TextInput,
'toggle-button': ToggleButton,
},
};
</script>
<template>
<div class="settings-workflow-history">
<div class="content">
<div class="content-item">
<feature-flag name="workflowGraph">
<settings-toggle
label="Enable history graph"
name="graphEnabled"
:value="graphEnabled"
@change="onChange"
/>
</feature-flag>
</div>
<div class="content-item">
<settings-toggle
label="Enable history event param highlighting"
name="workflowHistoryEventHighlightListEnabled"
:value="modalWorkflowHistoryEventHighlightListEnabled"
@change="onWorkflowHistoryEventHighlightListEnabledChange"
/>
</div>
<div
class="history-event-param-content"
:class="{ disabled: !modalWorkflowHistoryEventHighlightListEnabled }"
>
<div class="content-item">
<flex-grid align-items="center">
<flex-grid-item grow="1">
<h4>History event params</h4>
</flex-grid-item>
<flex-grid-item>
<button-fill
:disabled="!modalWorkflowHistoryEventHighlightListEnabled"
label="NEW"
@click="onWorkflowHistoryEventHighlightListAdd"
/>
</flex-grid-item>
</flex-grid>
</div>
<div class="scrollable">
<div
class="content-item"
v-for="event in modalWorkflowHistoryEventHighlightList"
:key="event.id"
>
<flex-grid align-items="center">
<flex-grid-item grow="1">
<flex-grid align-items="center">
<flex-grid-item grow="1" width="345px">
<select-input
:disabled="
!modalWorkflowHistoryEventHighlightListEnabled ||
!event.isEnabled
"
label="Event type"
name="eventType"
:options="workflowEventTypes"
:value="event.eventType"
@change="
value =>
onWorkflowHistoryEventHighlightListChange({
event,
key: 'eventType',
value,
})
"
/>
</flex-grid-item>
<flex-grid-item>
<text-input
label="Event param name"
:disabled="
!modalWorkflowHistoryEventHighlightListEnabled ||
!event.isEnabled
"
:value="event.eventParamName"
@input="
({ target: { value } }) =>
onWorkflowHistoryEventHighlightListChange({
event,
key: 'eventParamName',
value,
})
"
/>
</flex-grid-item>
</flex-grid>
</flex-grid-item>
<flex-grid-item>
<toggle-button
:disabled="!modalWorkflowHistoryEventHighlightListEnabled"
:labels="true"
:value="event.isEnabled"
@change="
({ value }) =>
onWorkflowHistoryEventHighlightListChange({
event,
key: 'isEnabled',
value,
})
"
/>
</flex-grid-item>
<flex-grid-item>
<button-icon
:disabled="!modalWorkflowHistoryEventHighlightListEnabled"
icon="icon_trash"
size="20px"
@click="onWorkflowHistoryEventHighlightListRemove(event)"
/>
</flex-grid-item>
</flex-grid>
</div>
</div>
</div>
</div>
<settings-footer
:submit-enabled="isSubmitEnabled || isSettingsChanged"
@cancel="onClose"
@submit="onSubmit"
/>
</div>
</template>
<style lang="stylus">
.settings-workflow-history {
.history-event-param-content {
&.disabled {
opacity: 0.3;
}
}
.scrollable {
overflow-y: auto;
height: 165px;
margin-bottom: 10px;
}
}
</style>