| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  | <template> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   <JsonEditorVue | 
					
						
							|  |  |  |     :model-value="modelValue" | 
					
						
							|  |  |  |     v-bind="$attrs" | 
					
						
							|  |  |  |     :style="{ height }" | 
					
						
							|  |  |  |     :stringified="false" | 
					
						
							|  |  |  |     @change="onChange" | 
					
						
							|  |  |  |   /> | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | import { defineComponent } from "vue"; | 
					
						
							|  |  |  | import JsonEditorVue from "json-editor-vue"; | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | export default defineComponent({ | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   name: "RecipeJsonEditor", | 
					
						
							|  |  |  |   components: { JsonEditorVue }, | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |   props: { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     modelValue: { | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |       type: Object, | 
					
						
							|  |  |  |       default: () => ({}), | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2024-09-30 10:52:13 -05:00
										 |  |  |     height: { | 
					
						
							|  |  |  |       type: String, | 
					
						
							|  |  |  |       default: "1500px", | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   }, | 
					
						
							|  |  |  |   emits: ["update:modelValue"], | 
					
						
							| 
									
										
										
										
											2025-07-28 02:50:50 -05:00
										 |  |  |   setup(props, { emit }) { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     function parseEvent(event: any): object { | 
					
						
							|  |  |  |       if (!event) { | 
					
						
							| 
									
										
										
										
											2025-07-28 02:50:50 -05:00
										 |  |  |         return props.modelValue || {}; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       } | 
					
						
							|  |  |  |       try { | 
					
						
							|  |  |  |         if (event.json) { | 
					
						
							|  |  |  |           return event.json; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         else if (event.text) { | 
					
						
							|  |  |  |           return JSON.parse(event.text); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							|  |  |  |           return event; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch { | 
					
						
							| 
									
										
										
										
											2025-07-28 02:50:50 -05:00
										 |  |  |         return props.modelValue || {}; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function onChange(event: any) { | 
					
						
							| 
									
										
										
										
											2025-07-28 02:50:50 -05:00
										 |  |  |       const parsed = parseEvent(event); | 
					
						
							|  |  |  |       if (parsed !== props.modelValue) { | 
					
						
							|  |  |  |         emit("update:modelValue", parsed); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     } | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       onChange, | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  | </script> |