This commit is contained in:
Richard vL 2025-08-21 17:42:38 +02:00 committed by GitHub
commit ed44dfaa5c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 7 deletions

View file

@ -1,18 +1,29 @@
import type { Composer } from "vue-i18n"; import type { Composer } from "vue-i18n";
import { useReadOnlyStore, useStore } from "../partials/use-store-factory"; import { useReadOnlyStore, useStore } from "../partials/use-store-factory";
import type { ReadCookBook } from "~/lib/api/types/cookbook"; import type { ReadCookBook, UpdateCookBook } from "~/lib/api/types/cookbook";
import { usePublicExploreApi, useUserApi } from "~/composables/api"; import { usePublicExploreApi, useUserApi } from "~/composables/api";
const store: Ref<ReadCookBook[]> = ref([]); const cookbooks: Ref<ReadCookBook[]> = ref([]);
const loading = ref(false); const loading = ref(false);
const publicLoading = ref(false); const publicLoading = ref(false);
export const useCookbookStore = function (i18n?: Composer) { export const useCookbookStore = function (i18n?: Composer) {
const api = useUserApi(i18n); const api = useUserApi(i18n);
return useStore<ReadCookBook>(store, loading, api.cookbooks); const store = useStore<ReadCookBook>(cookbooks, loading, api.cookbooks);
const updateAll = async function (updateData: UpdateCookBook[]) {
loading.value = true;
updateData.forEach((cookbook, index) => {
cookbook.position = index;
});
const { data } = await api.cookbooks.updateAll(updateData);
loading.value = false;
return data;
};
return { ...store, updateAll };
}; };
export const usePublicCookbookStore = function (groupSlug: string, i18n?: Composer) { export const usePublicCookbookStore = function (groupSlug: string, i18n?: Composer) {
const api = usePublicExploreApi(groupSlug, i18n).explore; const api = usePublicExploreApi(groupSlug, i18n).explore;
return useReadOnlyStore<ReadCookBook>(store, publicLoading, api.cookbooks); return useReadOnlyStore<ReadCookBook>(cookbooks, publicLoading, api.cookbooks);
}; };

View file

@ -75,7 +75,7 @@
:delay="250" :delay="250"
:delay-on-touch-only="true" :delay-on-touch-only="true"
style="width: 100%" style="width: 100%"
@end="actions.updateOrder(myCookbooks)" @end="updateAll(myCookbooks)"
> >
<v-expansion-panel <v-expansion-panel
v-for="(cookbook, index) in myCookbooks" v-for="(cookbook, index) in myCookbooks"
@ -160,7 +160,7 @@ export default defineNuxtComponent({
}); });
const $auth = useMealieAuth(); const $auth = useMealieAuth();
const { store: allCookbooks, actions } = useCookbookStore(); const { store: allCookbooks, actions, updateAll } = useCookbookStore();
// Make a local reactive copy of myCookbooks // Make a local reactive copy of myCookbooks
const myCookbooks = ref<ReadCookBook[]>([]); const myCookbooks = ref<ReadCookBook[]>([]);
@ -170,7 +170,7 @@ export default defineNuxtComponent({
myCookbooks.value myCookbooks.value
= cookbooks?.filter( = cookbooks?.filter(
cookbook => cookbook.householdId === $auth.user.value?.householdId, cookbook => cookbook.householdId === $auth.user.value?.householdId,
) ?? []; ).sort((a, b) => a.position > b.position) ?? [];
}, },
{ immediate: true }, { immediate: true },
); );
@ -249,6 +249,9 @@ export default defineNuxtComponent({
createTarget, createTarget,
createCookbook, createCookbook,
// update
updateAll,
// delete // delete
deleteTarget, deleteTarget,
deleteEventHandler, deleteEventHandler,