client/routes/task-list/pollers.vue (105 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 { getDatetimeFormattedString } from '~helpers';
import { httpService } from '~services';
export default {
props: ['dateFormat', 'domain', 'taskList', 'timeFormat', 'timezone'],
data() {
return {
pollers: undefined,
error: undefined,
loading: true,
};
},
computed: {
formattedPollers() {
const { dateFormat, pollers, timeFormat, timezone } = this;
return (
pollers &&
pollers.map(poller => ({
...poller,
lastAccessTime: getDatetimeFormattedString({
date: poller.lastAccessTime,
dateFormat,
timeFormat,
timezone,
}),
}))
);
},
},
created() {
httpService
.get(`/api/domains/${this.domain}/task-lists/${this.taskList}/pollers`)
.then(
p => {
this.pollers = Object.keys(p).map(identity => ({
identity,
lastAccessTime: p[identity].lastAccessTime,
handlesDecisions: p[identity].taskListTypes.includes('decision'),
handlesActivities: p[identity].taskListTypes.includes('activity'),
}));
},
e => {
this.error = (e.json && e.json.message) || e.status || e.message;
}
)
.finally(() => {
this.loading = false;
});
},
methods: {},
};
</script>
<template>
<section :class="{ 'task-list-pollers': true, loading }">
<table v-if="pollers">
<thead>
<th>Identity</th>
<th>Last Access Time</th>
<th>Decision Handler</th>
<th>Activity Handler</th>
</thead>
<tbody>
<tr v-for="p in formattedPollers" :key="p.identity">
<td>{{ p.identity }}</td>
<td>{{ p.lastAccessTime }}</td>
<td class="decision" :data-handled="p.handlesDecisions"></td>
<td class="activity" :data-handled="p.handlesActivities"></td>
</tr>
</tbody>
</table>
</section>
</template>
<style lang="stylus">
@require "../../styles/definitions.styl"
section.task-list-pollers
> header
padding inline-spacing-medium
table
max-width 1600px
td:nth-child(3), td:nth-child(4)
width 230px
td[data-handled="true"]
padding-left 75px
icon-check()
</style>