mealie/frontend/components/Domain/Recipe/RecipeDialogBulkAdd.vue
Hayden ec3b53cdc3
Refactor/user database models (#775)
* fix build error

* drop frontend.old

* improve auto_init decorator

* purge depreciated site settings

* formatting

* update init function

* fix(backend): 🐛 Fix password reset bug

Co-authored-by: Hayden <hay-kot@pm.me>
2021-11-04 14:01:37 -08:00

79 lines
2.1 KiB
Vue

<template>
<div class="text-center">
<v-dialog v-model="dialog" width="600">
<template #activator="{ on, attrs }">
<BaseButton v-bind="attrs" v-on="on" @click="inputText = ''">
{{ $t("new-recipe.bulk-add") }}
</BaseButton>
</template>
<v-card>
<v-app-bar dark color="primary" class="mt-n1 mb-3">
<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>
<v-card-text>
<v-textarea
v-model="inputText"
outlined
rows="10"
:placeholder="$t('new-recipe.paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list')"
>
</v-textarea>
<v-btn outlined color="info" small @click="trimAllLines"> Trim Whitespace </v-btn>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<BaseButton cancel @click="dialog = false"> </BaseButton>
<v-spacer></v-spacer>
<BaseButton save color="success" @click="save"> </BaseButton>
</v-card-actions>
</v-card>
</v-dialog>
</div>
</template>
<script lang="ts">
import { reactive, toRefs, defineComponent } from "@nuxtjs/composition-api";
export default defineComponent({
setup(_, context) {
const state = reactive({
dialog: false,
inputText: "",
});
function splitText() {
return state.inputText.split("\n").filter((line) => !(line === "\n" || !line));
}
function trimAllLines() {
const splitLintes = splitText();
splitLintes.forEach((element: string, index: number) => {
splitLintes[index] = element.trim();
});
state.inputText = splitLintes.join("\n");
}
function save() {
context.emit("bulk-data", splitText());
state.dialog = false;
}
return {
splitText,
trimAllLines,
save,
...toRefs(state),
};
},
});
</script>