client/containers/settings-modal/component.vue (166 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 { container as SettingsWorkflowHistory } from '../settings-workflow-history';
import SettingsDateFormat from './components/settings-date-format';
import SettingsHeader from './components/settings-header';
import SettingsList from './components/settings-list';
import { SETTINGS_VIEW_LIST } from './constants';
import { FlexGrid, FlexGridItem } from '~components';
export default {
data() {
return {
activeView: {},
viewList: SETTINGS_VIEW_LIST,
};
},
props: {
dateFormat: {
type: String,
},
dateFormatOptions: {
type: Array,
},
timeFormat: {
type: String,
},
timeFormatOptions: {
type: Array,
},
timezone: {
type: String,
},
timezoneOptions: {
type: Array,
},
workflowHistoryEventHighlightList: {
type: Array,
},
workflowHistoryEventHighlightListEnabled: {
type: Boolean,
},
},
computed: {
settingsDateFormatViewActive() {
return this.activeView.name === 'settings-date-format';
},
settingsWorkflowHistoryViewActive() {
return this.activeView.name === 'settings-workflow-history';
},
},
methods: {
close() {
this.$modal.hide('settings-modal');
},
onClose() {
this.close();
},
onBeforeClose() {
this.activeView = {};
},
onBeforeOpen() {
this.activeView = this.viewList[0];
},
onSettingsChange(event) {
this.$emit('change', event);
this.close();
},
onSettingsListChange({ view }) {
this.activeView = view;
},
},
components: {
'flex-grid': FlexGrid,
'flex-grid-item': FlexGridItem,
'settings-date-format': SettingsDateFormat,
'settings-list': SettingsList,
'settings-workflow-history': SettingsWorkflowHistory,
'settings-header': SettingsHeader,
},
};
</script>
<template>
<modal
name="settings-modal"
@before-close="onBeforeClose"
@before-open="onBeforeOpen"
>
<div class="settings-modal">
<settings-header
:title="activeView.displayName"
title-suffix="Settings"
@close="onClose"
/>
<flex-grid>
<flex-grid-item margin="20px">
<settings-list
:active-view-name="activeView.name"
:view-list="viewList"
@change="onSettingsListChange"
/>
</flex-grid-item>
<flex-grid-item>
<settings-date-format
:date-format="dateFormat"
:date-format-options="dateFormatOptions"
:time-format="timeFormat"
:time-format-options="timeFormatOptions"
:timezone="timezone"
:timezone-options="timezoneOptions"
v-if="settingsDateFormatViewActive"
@change="onSettingsChange"
@close="onClose"
/>
<settings-workflow-history
:workflow-history-event-highlight-list="
workflowHistoryEventHighlightList
"
:workflow-history-event-highlight-list-enabled="
workflowHistoryEventHighlightListEnabled
"
v-if="settingsWorkflowHistoryViewActive"
@change="onSettingsChange"
@close="onClose"
/>
</flex-grid-item>
</flex-grid>
</div>
</modal>
</template>
<style lang="stylus">
.settings-modal {
.content {
min-height: 320px;
min-width: 630px;
overflow-y: auto;
}
.content-item {
margin: 10px 0 15px;
}
.dropdown-menu {
min-width: 90px !important;
}
label {
display: inline-block;
margin-bottom: 5px;
}
}
</style>