mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 10:13:32 -04:00 
			
		
		
		
	feat(backend): ✨ start multi-tenant support (WIP) (#680)
* fix ts types * feat(code-generation): ♻️ update code-generation formats * new scope * add step button * fix linter error * update code-generation tags * feat(backend): ✨ start multi-tenant support * feat(backend): ✨ group invitation token generation and signup * refactor(backend): ♻️ move group admin actions to admin router * set url base to include `/admin` * feat(frontend): ✨ generate user sign-up links * test(backend): ✅ refactor test-suite to further decouple tests (WIP) * feat(backend): 🐛 assign owner on backup import for recipes * fix(backend): 🐛 assign recipe owner on migration from other service Co-authored-by: hay-kot <hay-kot@pm.me>
This commit is contained in:
		| @@ -1,82 +1,80 @@ | ||||
| <template> | ||||
|   <div> | ||||
|   <section> | ||||
|     <h2 class="mb-4">{{ $t("recipe.instructions") }}</h2> | ||||
|     <div> | ||||
|       <draggable | ||||
|         :disabled="!edit" | ||||
|         :value="value" | ||||
|         handle=".handle" | ||||
|         @input="updateIndex" | ||||
|         @start="drag = true" | ||||
|         @end="drag = false" | ||||
|       > | ||||
|         <div v-for="(step, index) in value" :key="index"> | ||||
|           <v-app-bar v-if="showTitleEditor[index]" class="primary mx-1 mt-6" dark dense rounded> | ||||
|             <v-toolbar-title v-if="!edit" class="headline"> | ||||
|               <v-app-bar-title v-text="step.title"> </v-app-bar-title> | ||||
|             </v-toolbar-title> | ||||
|             <v-text-field | ||||
|               v-if="edit" | ||||
|               v-model="step.title" | ||||
|               class="headline pa-0 mt-5" | ||||
|               dense | ||||
|               solo | ||||
|               flat | ||||
|               :placeholder="$t('recipe.section-title')" | ||||
|               background-color="primary" | ||||
|             > | ||||
|             </v-text-field> | ||||
|           </v-app-bar> | ||||
|           <v-hover v-slot="{ hover }"> | ||||
|             <v-card | ||||
|               class="ma-1" | ||||
|               :class="[{ 'on-hover': hover }, isChecked(index)]" | ||||
|               :elevation="hover ? 12 : 2" | ||||
|               :ripple="false" | ||||
|               @click="toggleDisabled(index)" | ||||
|             > | ||||
|               <v-card-title :class="{ 'pb-0': !isChecked(index) }"> | ||||
|                 <v-btn | ||||
|                   v-if="edit" | ||||
|                   fab | ||||
|                   x-small | ||||
|                   color="white" | ||||
|                   class="mr-2" | ||||
|                   elevation="0" | ||||
|                   @click="removeByIndex(value, index)" | ||||
|                 > | ||||
|                   <v-icon size="24" color="error">{{ $globals.icons.delete }}</v-icon> | ||||
|                 </v-btn> | ||||
|     <draggable | ||||
|       :disabled="!edit" | ||||
|       :value="value" | ||||
|       handle=".handle" | ||||
|       @input="updateIndex" | ||||
|       @start="drag = true" | ||||
|       @end="drag = false" | ||||
|     > | ||||
|       <div v-for="(step, index) in value" :key="index"> | ||||
|         <v-app-bar v-if="showTitleEditor[index]" class="primary mx-1 mt-6" dark dense rounded> | ||||
|           <v-toolbar-title v-if="!edit" class="headline"> | ||||
|             <v-app-bar-title v-text="step.title"> </v-app-bar-title> | ||||
|           </v-toolbar-title> | ||||
|           <v-text-field | ||||
|             v-if="edit" | ||||
|             v-model="step.title" | ||||
|             class="headline pa-0 mt-5" | ||||
|             dense | ||||
|             solo | ||||
|             flat | ||||
|             :placeholder="$t('recipe.section-title')" | ||||
|             background-color="primary" | ||||
|           > | ||||
|           </v-text-field> | ||||
|         </v-app-bar> | ||||
|         <v-hover v-slot="{ hover }"> | ||||
|           <v-card | ||||
|             class="ma-1" | ||||
|             :class="[{ 'on-hover': hover }, isChecked(index)]" | ||||
|             :elevation="hover ? 12 : 2" | ||||
|             :ripple="false" | ||||
|             @click="toggleDisabled(index)" | ||||
|           > | ||||
|             <v-card-title :class="{ 'pb-0': !isChecked(index) }"> | ||||
|               <v-btn | ||||
|                 v-if="edit" | ||||
|                 fab | ||||
|                 x-small | ||||
|                 color="white" | ||||
|                 class="mr-2" | ||||
|                 elevation="0" | ||||
|                 @click="removeByIndex(value, index)" | ||||
|               > | ||||
|                 <v-icon size="24" color="error">{{ $globals.icons.delete }}</v-icon> | ||||
|               </v-btn> | ||||
|  | ||||
|                 {{ $t("recipe.step-index", { step: index + 1 }) }} | ||||
|               {{ $t("recipe.step-index", { step: index + 1 }) }} | ||||
|  | ||||
|                 <v-btn v-if="edit" text color="primary" class="ml-auto" @click="toggleShowTitle(index)"> | ||||
|                   {{ !showTitleEditor[index] ? $t("recipe.insert-section") : $t("recipe.remove-section") }} | ||||
|                 </v-btn> | ||||
|                 <v-icon v-if="edit" class="handle">{{ $globals.icons.arrowUpDown }}</v-icon> | ||||
|                 <v-fade-transition> | ||||
|                   <v-icon v-show="isChecked(index)" size="24" class="ml-auto" color="success"> | ||||
|                     {{ $globals.icons.checkboxMarkedCircle }} | ||||
|                   </v-icon> | ||||
|                 </v-fade-transition> | ||||
|               </v-card-title> | ||||
|               <v-card-text v-if="edit"> | ||||
|                 <v-textarea :key="'instructions' + index" v-model="value[index]['text']" auto-grow dense rows="4"> | ||||
|                 </v-textarea> | ||||
|               </v-card-text> | ||||
|               <v-expand-transition> | ||||
|                 <div v-show="!isChecked(index) && !edit" class="m-0 p-0"> | ||||
|                   <v-card-text> | ||||
|                     <VueMarkdown :source="step.text"> </VueMarkdown> | ||||
|                   </v-card-text> | ||||
|                 </div> | ||||
|               </v-expand-transition> | ||||
|             </v-card> | ||||
|           </v-hover> | ||||
|         </div> | ||||
|       </draggable> | ||||
|     </div> | ||||
|   </div> | ||||
|               <v-btn v-if="edit" text color="primary" class="ml-auto" @click="toggleShowTitle(index)"> | ||||
|                 {{ !showTitleEditor[index] ? $t("recipe.insert-section") : $t("recipe.remove-section") }} | ||||
|               </v-btn> | ||||
|               <v-icon v-if="edit" class="handle">{{ $globals.icons.arrowUpDown }}</v-icon> | ||||
|               <v-fade-transition> | ||||
|                 <v-icon v-show="isChecked(index)" size="24" class="ml-auto" color="success"> | ||||
|                   {{ $globals.icons.checkboxMarkedCircle }} | ||||
|                 </v-icon> | ||||
|               </v-fade-transition> | ||||
|             </v-card-title> | ||||
|             <v-card-text v-if="edit"> | ||||
|               <v-textarea :key="'instructions' + index" v-model="value[index]['text']" auto-grow dense rows="4"> | ||||
|               </v-textarea> | ||||
|             </v-card-text> | ||||
|             <v-expand-transition> | ||||
|               <div v-show="!isChecked(index) && !edit" class="m-0 p-0"> | ||||
|                 <v-card-text> | ||||
|                   <VueMarkdown :source="step.text"> </VueMarkdown> | ||||
|                 </v-card-text> | ||||
|               </div> | ||||
|             </v-expand-transition> | ||||
|           </v-card> | ||||
|         </v-hover> | ||||
|       </div> | ||||
|     </draggable> | ||||
|   </section> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user