| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  | <template> | 
					
						
							|  |  |  |   <div class="text-center"> | 
					
						
							| 
									
										
										
										
											2021-11-05 15:48:10 -08:00
										 |  |  |     <v-dialog v-model="dialog" width="800"> | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |       <template #activator="{ on, attrs }"> | 
					
						
							| 
									
										
										
										
											2022-09-25 15:00:45 -08:00
										 |  |  |         <BaseButton v-bind="attrs" v-on="on" @click="inputText = inputTextProp"> | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |           {{ $t("new-recipe.bulk-add") }} | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |         </BaseButton> | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |       </template> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <v-card> | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |         <v-app-bar dense dark color="primary" class="mb-2"> | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |           <v-icon large left> | 
					
						
							|  |  |  |             {{ $globals.icons.createAlt }} | 
					
						
							|  |  |  |           </v-icon> | 
					
						
							|  |  |  |           <v-toolbar-title class="headline"> {{ $t("new-recipe.bulk-add") }}</v-toolbar-title> | 
					
						
							|  |  |  |           <v-spacer></v-spacer> | 
					
						
							|  |  |  |         </v-app-bar> | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         <v-card-text> | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |           <v-textarea | 
					
						
							|  |  |  |             v-model="inputText" | 
					
						
							|  |  |  |             outlined | 
					
						
							| 
									
										
										
										
											2021-11-05 15:48:10 -08:00
										 |  |  |             rows="12" | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |             hide-details | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |             :placeholder="$t('new-recipe.paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list')" | 
					
						
							|  |  |  |           > | 
					
						
							|  |  |  |           </v-textarea> | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |           <v-divider></v-divider> | 
					
						
							|  |  |  |           <template v-for="(util, idx) in utilities"> | 
					
						
							|  |  |  |             <v-list-item :key="util.id" dense class="py-1"> | 
					
						
							|  |  |  |               <v-list-item-title> | 
					
						
							|  |  |  |                 <v-list-item-subtitle class="wrap-word"> | 
					
						
							|  |  |  |                   {{ util.description }} | 
					
						
							|  |  |  |                 </v-list-item-subtitle> | 
					
						
							|  |  |  |               </v-list-item-title> | 
					
						
							|  |  |  |               <BaseButton small color="info" @click="util.action"> | 
					
						
							|  |  |  |                 <template #icon> {{ $globals.icons.robot }}</template> | 
					
						
							| 
									
										
										
										
											2022-08-10 07:12:45 +02:00
										 |  |  |                 {{ $t("general.run") }} | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |               </BaseButton> | 
					
						
							|  |  |  |             </v-list-item> | 
					
						
							|  |  |  |             <v-divider :key="`divider-${idx}`" class="mx-2"></v-divider> | 
					
						
							|  |  |  |           </template> | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |         </v-card-text> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <v-divider></v-divider> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <v-card-actions> | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |           <BaseButton cancel @click="dialog = false"> </BaseButton> | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |           <v-spacer></v-spacer> | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |           <BaseButton save color="success" @click="save"> </BaseButton> | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |         </v-card-actions> | 
					
						
							|  |  |  |       </v-card> | 
					
						
							|  |  |  |     </v-dialog> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  | import { reactive, toRefs, defineComponent, useContext } from "@nuxtjs/composition-api"; | 
					
						
							| 
									
										
										
										
											2021-11-04 14:01:37 -08:00
										 |  |  | export default defineComponent({ | 
					
						
							| 
									
										
										
										
											2022-09-25 15:00:45 -08:00
										 |  |  |   props: { | 
					
						
							|  |  |  |     inputTextProp: { | 
					
						
							|  |  |  |       type: String, | 
					
						
							|  |  |  |       required: false, | 
					
						
							|  |  |  |       default: "", | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   setup(props, context) { | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |     const state = reactive({ | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |       dialog: false, | 
					
						
							| 
									
										
										
										
											2022-09-25 15:00:45 -08:00
										 |  |  |       inputText: props.inputTextProp, | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function splitText() { | 
					
						
							|  |  |  |       return state.inputText.split("\n").filter((line) => !(line === "\n" || !line)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-04 18:15:23 -08:00
										 |  |  |     function removeFirstCharacter() { | 
					
						
							|  |  |  |       state.inputText = splitText() | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |         .map((line) => line.substring(1)) | 
					
						
							| 
									
										
										
										
											2021-11-04 18:15:23 -08:00
										 |  |  |         .join("\n"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-06 11:28:47 -08:00
										 |  |  |     const numberedLineRegex = /\d+[.):] /gm; | 
					
						
							| 
									
										
										
										
											2021-11-05 15:48:10 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function splitByNumberedLine() { | 
					
						
							|  |  |  |       // Split inputText by numberedLineRegex
 | 
					
						
							|  |  |  |       const matches = state.inputText.match(numberedLineRegex); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       matches?.forEach((match, idx) => { | 
					
						
							|  |  |  |         const replaceText = idx === 0 ? "" : "\n"; | 
					
						
							|  |  |  |         state.inputText = state.inputText.replace(match, replaceText); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |     function trimAllLines() { | 
					
						
							| 
									
										
										
										
											2021-11-04 18:15:23 -08:00
										 |  |  |       const splitLines = splitText(); | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-04 18:15:23 -08:00
										 |  |  |       splitLines.forEach((element: string, index: number) => { | 
					
						
							|  |  |  |         splitLines[index] = element.trim(); | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-04 18:15:23 -08:00
										 |  |  |       state.inputText = splitLines.join("\n"); | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function save() { | 
					
						
							|  |  |  |       context.emit("bulk-data", splitText()); | 
					
						
							|  |  |  |       state.dialog = false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |     const { i18n } = useContext(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const utilities = [ | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         id: "trim-whitespace", | 
					
						
							|  |  |  |         description: i18n.tc("new-recipe.trim-whitespace-description"), | 
					
						
							|  |  |  |         action: trimAllLines, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         id: "trim-prefix", | 
					
						
							|  |  |  |         description: i18n.tc("new-recipe.trim-prefix-description"), | 
					
						
							|  |  |  |         action: removeFirstCharacter, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         id: "split-by-numbered-line", | 
					
						
							|  |  |  |         description: i18n.tc("new-recipe.split-by-numbered-line-description"), | 
					
						
							|  |  |  |         action: splitByNumberedLine, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |     return { | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |       utilities, | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |       splitText, | 
					
						
							|  |  |  |       trimAllLines, | 
					
						
							| 
									
										
										
										
											2021-11-04 18:15:23 -08:00
										 |  |  |       removeFirstCharacter, | 
					
						
							| 
									
										
										
										
											2021-11-05 15:48:10 -08:00
										 |  |  |       splitByNumberedLine, | 
					
						
							| 
									
										
										
										
											2021-10-31 14:46:46 -08:00
										 |  |  |       save, | 
					
						
							|  |  |  |       ...toRefs(state), | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2021-11-04 14:01:37 -08:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  | </script> |