improvements

This commit is contained in:
vabene1111
2024-01-29 08:37:53 +01:00
parent 4c6410d7ae
commit 0f1a3ba5d8
6 changed files with 34 additions and 23 deletions

View File

@ -134,7 +134,7 @@
</div> </div>
<b-button variant="danger" @click="deleteRecipe(r.shopping_list_recipe_id)"><i <b-button variant="danger" @click="useShoppingListStore().deleteShoppingListRecipe(r.shopping_list_recipe_id)"><i
class="fas fa-trash fa-fw"></i></b-button> class="fas fa-trash fa-fw"></i></b-button>
</b-button-group> </b-button-group>
@ -605,18 +605,7 @@ export default {
}) })
} }
}, },
/**
* delete shopping list recipe, associated entries are deleted automatically by database
* @param shopping_list_recipe_id id of shopping list recipe to delete
*/
deleteRecipe: function (shopping_list_recipe_id) {
let api = new ApiApiFactory()
api.destroyShoppingListRecipe(shopping_list_recipe_id).then((x) => {
useShoppingListStore().refreshFromAPI() //TODO only do partial refresh
}).catch((err) => {
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_DELETE, err)
})
},
/** /**
* change number of servings of a shopping list recipe * change number of servings of a shopping list recipe
* backend handles scaling of associated entries * backend handles scaling of associated entries
@ -680,10 +669,9 @@ export default {
* add new supermarket to list of supermarkets * add new supermarket to list of supermarkets
*/ */
addSupermarket: function () { addSupermarket: function () {
// TODO integrate into store
let api = new ApiApiFactory() let api = new ApiApiFactory()
api.createSupermarket({name: this.$t('Supermarket') + Math.floor(1000 + Math.random() * 9000)}).then((r) => { api.createSupermarket({name: this.$t('Supermarket') + Math.floor(1000 + Math.random() * 9000)}).then((r) => {
this.shopping_list_store.supermarkets.push(r.data) useShoppingListStore().supermarkets.push(r.data)
this.new_supermarket.value = undefined this.new_supermarket.value = undefined
}).catch((err) => { }).catch((err) => {
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_CREATE, err) StandardToasts.makeStandardToast(this, StandardToasts.FAIL_CREATE, err)
@ -880,12 +868,12 @@ export default {
}) })
}, },
/** /**
* called after adding a new recipe trough the shopping modal * called after adding a new recipe through the shopping modal
* cleanup and data refresh * cleanup and data refresh
*/ */
finishShopping() { finishShopping() {
this.new_recipe = {id: undefined} this.new_recipe = {id: undefined}
useShoppingListStore().refreshFromAPI() //TODO only do partial fetch useShoppingListStore().autosync()
}, },
}, },
directives: { directives: {

View File

@ -13,7 +13,7 @@
<b-form-group :label="$t('shopping_auto_sync')" :description="$t('shopping_auto_sync_desc')"> <b-form-group :label="$t('shopping_auto_sync')" :description="$t('shopping_auto_sync_desc')">
<b-form-input type="range" :min="SHOPPING_MIN_AUTOSYNC_INTERVAL" max="60" step="1" v-model="useUserPreferenceStore().user_settings.shopping_auto_sync" <b-form-input type="range" :min="SHOPPING_MIN_AUTOSYNC_INTERVAL" max="60" step="1" v-model="useUserPreferenceStore().user_settings.shopping_auto_sync"
@change="updateSettings(false)"></b-form-input> @change="updateSettings(false)" :disabled="useUserPreferenceStore().user_settings.shopping_auto_sync < 1"></b-form-input>
<div class="text-center"> <div class="text-center">
<span v-if="useUserPreferenceStore().user_settings.shopping_auto_sync > 0"> <span v-if="useUserPreferenceStore().user_settings.shopping_auto_sync > 0">
{{ Math.round(useUserPreferenceStore().user_settings.shopping_auto_sync) }} {{ Math.round(useUserPreferenceStore().user_settings.shopping_auto_sync) }}
@ -24,7 +24,10 @@
<span v-if="useUserPreferenceStore().user_settings.shopping_auto_sync < 1">{{ $t('Disable') }}</span> <span v-if="useUserPreferenceStore().user_settings.shopping_auto_sync < 1">{{ $t('Disable') }}</span>
</div> </div>
<br/> <br/>
<b-button class="btn btn-sm" @click="useUserPreferenceStore().user_settings.shopping_auto_sync = 0; updateSettings(false)">{{ $t('Disabled') }}</b-button> <b-button class="btn btn-sm" @click="useUserPreferenceStore().user_settings.shopping_auto_sync = 0; updateSettings(false)"
v-if="useUserPreferenceStore().user_settings.shopping_auto_sync > 0">{{ $t('Disable') }}</b-button>
<b-button class="btn btn-sm btn-success" @click="useUserPreferenceStore().user_settings.shopping_auto_sync = SHOPPING_MIN_AUTOSYNC_INTERVAL; updateSettings(false)"
v-if="useUserPreferenceStore().user_settings.shopping_auto_sync < 1">{{ $t('Enable') }}</b-button>
</b-form-group> </b-form-group>
<b-form-group :description="$t('mealplan_autoadd_shopping_desc')"> <b-form-group :description="$t('mealplan_autoadd_shopping_desc')">

View File

@ -503,6 +503,7 @@
"Reset": "Reset", "Reset": "Reset",
"Disabled": "Disabled", "Disabled": "Disabled",
"Disable": "Disable", "Disable": "Disable",
"Enable": "Enable",
"Options": "Options", "Options": "Options",
"Create Food": "Create Food", "Create Food": "Create Food",
"create_food_desc": "Create a food and link it to this recipe.", "create_food_desc": "Create a food and link it to this recipe.",

View File

@ -125,8 +125,12 @@ export const useShoppingListStore = defineStore(_STORE_ID, {
return ordered_structure return ordered_structure
}, },
/**
* flattened list of entries used for exporters
* kinda uncool but works for now
* @return {*[]}
*/
get_flat_entries: function () { get_flat_entries: function () {
//{amount: x.amount, unit: x.unit?.name ?? "", food: x.food?.name ?? ""}
let items = [] let items = []
for (let i in this.get_entries_by_group) { for (let i in this.get_entries_by_group) {
for (let f in this.get_entries_by_group[i]['foods']) { for (let f in this.get_entries_by_group[i]['foods']) {
@ -435,6 +439,21 @@ export const useShoppingListStore = defineStore(_STORE_ID, {
this.deleteObject(this.entries[i]) this.deleteObject(this.entries[i])
} }
}, },
deleteShoppingListRecipe(shopping_list_recipe_id) {
let api = new ApiApiFactory()
for (let i in this.entries) {
if (this.entries[i].list_recipe === shopping_list_recipe_id) {
Vue.delete(this.entries, i)
}
}
api.destroyShoppingListRecipe(shopping_list_recipe_id).then((x) => {
// no need to update anything, entries were already removed
}).catch((err) => {
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_DELETE, err)
})
},
/** /**
* register the change to a set of entries to allow undoing it * register the change to a set of entries to allow undoing it
* throws an Error if the operation type is not known * throws an Error if the operation type is not known

View File

@ -95,10 +95,10 @@ export const useUserPreferenceStore = defineStore(_STORE_ID, {
for (s in settings) { for (s in settings) {
Vue.set(this.user_settings, s, settings[s]) Vue.set(this.user_settings, s, settings[s])
} }
//console.log(`loaded local user settings age ${((new Date().getTime()) - this.user_settings.locally_updated_at) / 1000} `) console.log(`loaded local user settings age ${((new Date().getTime()) - this.user_settings.locally_updated_at) / 1000} `)
} }
if (((new Date().getTime()) - this.user_settings.locally_updated_at) > _STALE_TIME_IN_MS || !allow_cached_results) { if (((new Date().getTime()) - this.user_settings.locally_updated_at) > _STALE_TIME_IN_MS || !allow_cached_results) {
//console.log('refreshing user settings from API') console.log('refreshing user settings from API')
let apiClient = new ApiApiFactory() let apiClient = new ApiApiFactory()
apiClient.retrieveUserPreference(localStorage.getItem('USER_ID')).then(r => { apiClient.retrieveUserPreference(localStorage.getItem('USER_ID')).then(r => {
for (s in r.data) { for (s in r.data) {

View File

@ -131,7 +131,7 @@ export class StandardToasts {
} }
let DEBUG = localStorage.getItem("DEBUG") === "True" || always_show_errors let DEBUG = (localStorage.getItem("DEBUG") === "True" || always_show_errors) && variant !== 'success'
if (DEBUG){ if (DEBUG){
console.log('ERROR ', err, JSON.stringify(err?.response?.data)) console.log('ERROR ', err, JSON.stringify(err?.response?.data))
console.trace(); console.trace();