Files
DiceCloud/app/imports/ui/properties/treeNodeViews/EffectTreeNode.vue
2020-10-17 16:56:23 +02:00

65 lines
1.7 KiB
Vue

<template lang="html">
<div class="layout row align-center justify-start">
<v-icon
v-if="!hideIcon"
class="mr-2"
:class="selected && 'primary--text'"
:color="model.color"
>
{{ effectIcon }}
</v-icon>
<div
class="text-no-wrap text-truncate"
>
<template v-if="model.name">
{{ model.name }}
</template>
<template v-else>
<span class="mr-1">
{{ displayedValue }}
</span>
<span
v-for="stat in model.stats"
:key="stat"
class="mr-1"
>{{ stat }}</span>
</template>
</div>
</div>
</template>
<script>
// Most of this was copied from EffectViewer and should probably be generalised
import treeNodeViewMixin from '/imports/ui/properties/treeNodeViews/treeNodeViewMixin.js';
import getEffectIcon from '/imports/ui/utility/getEffectIcon.js';
export default {
mixins: [treeNodeViewMixin],
computed: {
resolvedValue(){
return this.model.result !== undefined ? this.model.result : this.model.calculation;
},
effectIcon(){
let value = this.resolvedValue;
return getEffectIcon(this.model.operation, value);
},
displayedValue(){
let value = this.resolvedValue;
switch(this.model.operation) {
case 'base': return value;
case 'add': return isFinite(value) ? Math.abs(value) : value;
case 'mul': return value;
case 'min': return value;
case 'max': return value;
case 'advantage': return;
case 'disadvantage': return;
case 'passiveAdd': return isFinite(value) ? Math.abs(value) : value;
case 'fail': return;
case 'conditional': return;
default: return undefined;
}
},
}
}
</script>