client/components/detail-list.vue (104 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 DataViewer from './data-viewer'; import HighlightToggle from './highlight-toggle'; import { preKeys } from '~constants'; export default { name: 'detail-list', props: ['compact', 'isHighlightEnabled', 'item', 'title'], components: { 'data-viewer': DataViewer, 'highlight-toggle': HighlightToggle, }, data() { return {}; }, methods: { format(val) { return val === null ? '' : String(val) || '""'; }, }, render(h) { const { compact, title } = this; function dd(kvp) { if (kvp.routeLink) { return [h('router-link', { props: { to: kvp.routeLink } }, kvp.value)]; } return preKeys.includes(kvp.key) ? [ h('data-viewer', { props: { item: kvp.value, compact, title: `${title} - ${kvp.key}`, }, }), ] : kvp.value; } return h( 'dl', { class: 'details' }, this.item.kvps.map(kvp => h('div', { attrs: { 'data-prop': kvp.key } }, [ h('highlight-toggle', { props: { isHighlighted: kvp.isHighlighted, isEnabled: this.isHighlightEnabled, label: kvp.key, tag: 'dt', }, on: { click: () => { this.$emit('onWorkflowHistoryEventParamToggle', kvp); }, }, }), h('dd', null, dd(kvp)), ]) ) ); }, }; </script> <style lang="stylus"> @require "../styles/definitions.styl" dl.details > div display flex padding 4px 0 justify-content space-between min-width 0 &:nth-child(2n) background-color rgba(0,0,0,0.03) dt flex 0 1 300px font-family monospace-font-family font-weight 200 margin-right 1em dd flex 1 1 auto max-width calc(100vw - 700px) @media (max-width: 1000px) max-width 500px one-liner-ellipsis() </style>