mealie/frontend/pages/admin/toolbox/foods.vue
Hayden 788e176b16
Refactor/composables-folder (#787)
* move api clients and rename

* organize recipes composables

* rewrite useRecipeContext

* refactor(frontend): ♻️ abstract common ingredient functionality.

* feat(frontend):  add scale, and back to recipe button + hide ingredients if none

* update regex to mach 11. instead of just 1.

* minor UX improvements

Co-authored-by: Hayden K <hay-kot@pm.me>
2021-11-06 11:28:47 -08:00

125 lines
No EOL
3.4 KiB
Vue

<template>
<v-container fluid>
<BaseCardSectionTitle title="Manage Units"> </BaseCardSectionTitle>
<v-toolbar flat color="background">
<BaseDialog
ref="domFoodDialog"
:title="dialog.title"
:icon="$globals.icons.units"
:submit-text="dialog.text"
:keep-open="!validForm"
@submit="create ? actions.createOne(domCreateFoodForm) : actions.updateOne()"
>
<v-card-text>
<v-form ref="domCreateFoodForm">
<v-text-field v-model="workingFoodData.name" label="Name" :rules="[validators.required]"></v-text-field>
<v-text-field v-model="workingFoodData.description" label="Description"></v-text-field>
</v-form>
</v-card-text>
</BaseDialog>
<BaseButton
class="mr-1"
@click="
create = true;
actions.resetWorking();
domFoodDialog.open();
"
></BaseButton>
<BaseButton secondary @click="filter = !filter"> Filter </BaseButton>
</v-toolbar>
<v-expand-transition>
<div v-show="filter">
<v-text-field v-model="search" style="max-width: 500px" label="Filter" class="ml-4"> </v-text-field>
</div>
</v-expand-transition>
<v-data-table :headers="headers" :items="foods || []" item-key="id" class="elevation-0" :search="search">
<template #item.actions="{ item }">
<div class="d-flex justify-end">
<BaseButton
edit
small
class="mr-2"
@click="
create = false;
actions.setWorking(item);
domFoodDialog.open();
"
></BaseButton>
<BaseDialog :title="$t('general.confirm')" color="error" @confirm="actions.deleteOne(item.id)">
<template #activator="{ open }">
<BaseButton delete small @click="open"></BaseButton>
</template>
<v-card-text>
{{ $t("general.confirm-delete-generic") }}
</v-card-text>
</BaseDialog>
</div>
</template>
</v-data-table>
<v-divider></v-divider>
</v-container>
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs, ref, computed } from "@nuxtjs/composition-api";
import { useFoods } from "~/composables/recipes";
import { validators } from "~/composables/use-validators";
export default defineComponent({
layout: "admin",
setup() {
const { foods, actions, workingFoodData, validForm } = useFoods();
const domCreateFoodForm = ref(null);
const domFoodDialog = ref(null);
const dialog = computed(() => {
if (state.create) {
return {
title: "Create Food",
text: "Create",
};
} else {
return {
title: "Edit Food",
text: "Update",
};
}
});
const state = reactive({
headers: [
{ text: "Id", value: "id" },
{ text: "Name", value: "name" },
{ text: "Description", value: "description" },
{ text: "", value: "actions", sortable: false },
],
filter: false,
create: true,
search: "",
});
return {
...toRefs(state),
actions,
dialog,
domCreateFoodForm,
domFoodDialog,
foods,
validators,
validForm,
workingFoodData,
};
},
head() {
return {
title: "Foods",
};
},
});
</script>
<style scoped>
</style>