panel-inspector.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <template>
  2. <div class="flow-inspector">
  3. <template v-if="nodeInspect">
  4. <!-- VIEWER -->
  5. <div class="flow-inspector__container">
  6. <!--<svg
  7. class="flow-view preview activity flow-node--detail flow-node--activity flow-linking flow-inspector__area flow-inspector--view "
  8. width="100%"
  9. height="100%"
  10. viewBox="0 0 300 200">
  11. <flow-panzoom>
  12. <flow-node
  13. style="pointer-events:none"
  14. ref="modalPreviewNode"
  15. :id="nodeInspect.id"
  16. transform="translate(150,100)"
  17. :match="{}"
  18. :label="nodeInspect.label"
  19. :inputs= "registry[nodeInspect.src].inputs"
  20. :output= "registry[nodeInspect.src].output"
  21. :activity= "activity[nodeInspect.id]"
  22. :nodeStyle= "registry[nodeInspect.src].style"
  23. />
  24. </flow-panzoom>
  25. </svg>-->
  26. <!-- DESCRIPTIONS -->
  27. <div class="flow-inspector__area flow-inspector--properties ">
  28. <label>ID</label>
  29. <div class="property">[{{ nodeInspect.id }}]</div>
  30. <label>src</label>
  31. <div class="property">{{ nodeInspect.src }}</div>
  32. <!--
  33. <label>Description</label>
  34. <div class="property">Bogus description</div>
  35. <label>Help</label>
  36. <div class="property">Connect to input a thing and goes to output another thing</div>
  37. -->
  38. </div>
  39. <div class="flow-inspector__area flow-inspector--inputs">
  40. <h3>Inputs defaults:</h3>
  41. <div
  42. class="flow-inspector__param"
  43. v-for="(n,i) in registry[nodeInspect.src].inputs"
  44. :key="i">
  45. <label>{{ i }}:{{ n.type }}</label>
  46. <input
  47. ref="inputs"
  48. type="text"
  49. v-model="nodeInspect.defaultInputs[i]"
  50. @input="localChange"
  51. >
  52. </div>
  53. </div>
  54. <div class="flow-inspector__area flow-inspector--activity ">
  55. <div
  56. v-if="activity && activity[nodeInspect.id] && activity[nodeInspect.id].data"
  57. class="flow-inspector--properties-result">
  58. <label>Result</label>
  59. <div class="property">{{ activity && activity[nodeInspect.id] && activity[nodeInspect.id].data }}</div>
  60. </div>
  61. <div
  62. v-if="activity && activity[nodeInspect.id] && activity[nodeInspect.id].error"
  63. class="flow-inspector--properties-error">
  64. <label>Error</label>
  65. <div class="property">{{ activity && activity[nodeInspect.id] && activity[nodeInspect.id].error }}</div>
  66. </div>
  67. <div
  68. v-if="activity && activity[nodeInspect.id]"
  69. class="flow-inspector--properties-time">
  70. <label>Time:</label>
  71. <div class="property">
  72. {{ activity[nodeInspect.id].startTime }} -- {{ activity[nodeInspect.id].endTime }}
  73. </div>
  74. </div>
  75. </div>
  76. <!-- PARAMETERS -->
  77. <div class="flow-inspector--params flow-inspector__area" v-if="nodeInspect.prop" >
  78. <div class="flow-inspector__param" v-for="(v,k) in nodeInspect.prop">
  79. <label>{{ k }}</label>
  80. <input
  81. ref="props"
  82. type="text"
  83. v-model="nodeInspect.prop[k]" @input="localChange">
  84. </div>
  85. </div>
  86. <!-- STATIC PARAM -->
  87. <div class="flow-inspector__area flow-inspector--static">
  88. <label>label</label>
  89. <input ref="label" type="text" v-model="nodeInspect.label" @input="localChange">
  90. </div>
  91. </div><!-- /container -->
  92. <div class="flow-inspector__area flow-inspector--control">
  93. <button
  94. class="primary-inverse"
  95. @click="$emit('nodeProcess',nodeInspect)">Run</button>
  96. </div>
  97. </template>
  98. <template v-else>
  99. Select a node
  100. </template>
  101. </div>
  102. </template>
  103. <script>
  104. import {mapGetters, mapActions} from 'vuex'
  105. import FlowPanzoom from '@/components/flow/panzoom'
  106. import FlowNode from '@/components/flow/node'
  107. import HxCollapsible from '@/components/shared/hx-collapsible'
  108. export default {
  109. name: 'FlowInspector',
  110. components: {FlowPanzoom, FlowNode, HxCollapsible},
  111. data () {
  112. return {
  113. nodeInspect: null
  114. }
  115. },
  116. computed: {
  117. ...mapGetters(['registry', 'activity'])
  118. },
  119. watch: {
  120. '$store.state.nodeInspect' (node) {
  121. this.nodeInspect = JSON.parse(JSON.stringify(node))
  122. }
  123. },
  124. methods: {
  125. ...mapActions(['NODE_UPDATE', 'DOCUMENT_SYNC']),
  126. localChange () {
  127. this.NODE_UPDATE([JSON.parse(JSON.stringify(this.nodeInspect))])
  128. this.DOCUMENT_SYNC()
  129. // Seems that there might be browsers triggering the input before the v-model
  130. // so we defer the execution until we have nodeInspect updated
  131. }
  132. }
  133. }
  134. </script>
  135. <style>
  136. .flow-inspector {
  137. font-size:12px;
  138. flex:1;
  139. width:100%;
  140. overflow:hidden;
  141. height: available;
  142. display:flex;
  143. flex-flow:column;
  144. color: var(--normal);
  145. }
  146. .flow-inspector__container {
  147. padding:10px;
  148. display:flex;
  149. flex-flow:column;
  150. width:100%;
  151. flex-basis:100%;
  152. transition: all var(--transition-speed);
  153. overflow-x:hidden;
  154. overflow-y:auto;
  155. }
  156. .flow-inspector input {
  157. background: var(--background);
  158. color: var(--normal);
  159. }
  160. .flow-inspector__area{
  161. flex:1;
  162. padding: 10px 0;
  163. border-bottom: solid 1px rgba(150,150,150,0.3);
  164. }
  165. .flow-inspector__area h3{
  166. font-size:14px;
  167. color: var(--primary-lighter);
  168. padding-bottom:4px;
  169. }
  170. .flow-inspector__area label{
  171. display:block;
  172. font-weight:bold;
  173. padding:5px 0;
  174. margin:0;
  175. color: var(--primary-darker);
  176. }
  177. .flow-inspector--view {
  178. flex-basis:150px;
  179. flex-shrink: 0;
  180. }
  181. .flow-inspector__area .property {
  182. white-space: normal;
  183. word-wrap: break-word;
  184. }
  185. .flow-inspector--properties-error {
  186. color: red;
  187. }
  188. .flow-inspector--parameters {
  189. padding:20px;
  190. }
  191. .flow-inspector--control {
  192. flex:0;
  193. padding-top:10px;
  194. }
  195. .flow-inspector--control button {
  196. width: 100%;
  197. height:50px;
  198. }
  199. </style>