panel-inspector.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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>{{ n.name }}:{{ 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. <!-- PARAMETERS -->
  69. <div class="flow-inspector--params flow-inspector__area" v-if="nodeInspect.prop" >
  70. <div class="flow-inspector__param" v-for="(v,k) in nodeInspect.prop">
  71. <label>{{ k }}</label>
  72. <input
  73. ref="props"
  74. type="text"
  75. v-model="nodeInspect.prop[k]" @input="localChange">
  76. </div>
  77. </div>
  78. <!-- STATIC PARAM -->
  79. <div class="flow-inspector__area flow-inspector--static">
  80. <label>label</label>
  81. <input ref="label" type="text" v-model="nodeInspect.label" @input="localChange">
  82. </div>
  83. </div><!-- /container -->
  84. <div class="flow-inspector__area flow-inspector--control">
  85. <button
  86. class="primary-inverse"
  87. @click="NODE_PROCESS(nodeInspect.id)">Run</button>
  88. </div>
  89. </template>
  90. <template v-else>
  91. Select a node
  92. </template>
  93. </div>
  94. </template>
  95. <script>
  96. import {mapGetters, mapActions} from 'vuex'
  97. import FlowPanzoom from '@/components/flow/panzoom'
  98. import FlowNode from '@/components/flow/node'
  99. import HxCollapsible from '@/components/shared/hx-collapsible'
  100. export default {
  101. name: 'FlowInspector',
  102. components: {FlowPanzoom, FlowNode, HxCollapsible},
  103. data () {
  104. return {
  105. nodeInspect: null
  106. }
  107. },
  108. computed: {
  109. ...mapGetters('flow', ['registry', 'activity'])
  110. },
  111. watch: {
  112. '$store.state.flow.nodeInspect' (node) {
  113. this.nodeInspect = JSON.parse(JSON.stringify(node))
  114. }
  115. },
  116. methods: {
  117. ...mapActions('flow', ['NODE_UPDATE', 'DOCUMENT_SYNC', 'NODE_PROCESS']),
  118. localChange () {
  119. this.NODE_UPDATE([JSON.parse(JSON.stringify(this.nodeInspect))])
  120. this.DOCUMENT_SYNC()
  121. // Seems that there might be browsers triggering the input before the v-model
  122. // so we defer the execution until we have nodeInspect updated
  123. }
  124. }
  125. }
  126. </script>
  127. <style>
  128. .flow-inspector {
  129. font-size:12px;
  130. flex:1;
  131. width:100%;
  132. overflow:hidden;
  133. height: available;
  134. display:flex;
  135. flex-flow:column;
  136. color: var(--normal);
  137. }
  138. .flow-inspector__container {
  139. padding:10px;
  140. display:flex;
  141. flex-flow:column;
  142. width:100%;
  143. flex-basis:100%;
  144. transition: all var(--transition-speed);
  145. overflow-x:hidden;
  146. overflow-y:auto;
  147. }
  148. .flow-inspector input {
  149. background: var(--background);
  150. color: var(--normal);
  151. }
  152. .flow-inspector__area{
  153. flex:1;
  154. padding: 10px 0;
  155. border-bottom: solid 1px rgba(150,150,150,0.3);
  156. }
  157. .flow-inspector__area h3{
  158. font-size:14px;
  159. color: var(--primary-lighter);
  160. padding-bottom:4px;
  161. }
  162. .flow-inspector__area label{
  163. display:block;
  164. font-weight:bold;
  165. padding:5px 0;
  166. margin:0;
  167. color: var(--primary-darker);
  168. }
  169. .flow-inspector--view {
  170. flex-basis:150px;
  171. flex-shrink: 0;
  172. }
  173. .flow-inspector__area .property {
  174. white-space: normal;
  175. word-wrap: break-word;
  176. }
  177. .flow-inspector--properties-error {
  178. color: red;
  179. }
  180. .flow-inspector--parameters {
  181. padding:20px;
  182. }
  183. .flow-inspector--control {
  184. flex:0;
  185. padding-top:10px;
  186. }
  187. .flow-inspector--control button {
  188. width: 100%;
  189. height:50px;
  190. }
  191. </style>