Skip to content

Commit

Permalink
use edit V2 endpoint for less data loss
Browse files Browse the repository at this point in the history
  • Loading branch information
Ratatinator97 committed Feb 3, 2025
1 parent f4c8bd5 commit 880d581
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 56 deletions.
28 changes: 18 additions & 10 deletions components/navigation/pictalk-navbar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@
<a :href="'mailto:' + notification.username" class="subtitle is-6 mailto">{{
notification.username
.split("@")[0]
.replace(".", " ")
}}</a>
.replace(".", " ")
}}</a>
{{ notificationText(notification) }}
</p>
<figure class="image is-64x64">
Expand Down Expand Up @@ -519,19 +519,27 @@ export default {
id: this.$store.getters.getShortcutCollectionId.collectionId,
});
await this.$store.dispatch("editCollection", {
id: collection.id,
pictos: collection.pictos,
});
await this.$store.dispatch("editCollectionV2", {
collection: { id: collection.id },
collectionsAdded: [],
pictosAdded: [this.$store.getters.getShortcutCollectionId.collectionId],
collectionsRemoved: [],
pictosRemoved: []
},
);
$nuxt.$emit("resyncPictoList");
} else {
collection.collections.push({
id: this.$store.getters.getShortcutCollectionId.collectionId,
});
await this.$store.dispatch("editCollection", {
id: collection.id,
collections: collection.collections,
});
await this.$store.dispatch("editCollectionV2",
{
collection: { id: collection.id },
collectionsAdded: [this.$store.getters.getShortcutCollectionId.collectionId],
pictosAdded: [],
collectionsRemoved: [],
pictosRemoved: []
});
$nuxt.$emit("resyncPictoList");
}
Expand Down
102 changes: 56 additions & 46 deletions mixins/pictogram.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@ export default {
if (isPicto) {
collection.pictos.push(item);
try {
await this.$store.dispatch("editCollection", {
id: collection.id,
pictos: collection.pictos,
await this.$store.dispatch("editCollectionV2", {
collection: { id: collection.id },
collectionsAdded: [],
pictosAdded: [item.id],
collectionsRemoved: [],
pictosRemoved: [],
});
const notif = this.$buefy.toast.open({
message: this.$t("PublicCopy"),
Expand All @@ -32,10 +35,15 @@ export default {
} else {
collection.collections.push(item);
try {
await this.$store.dispatch("editCollection", {
id: collection.id,
collections: collection.collections,
});
await this.$store.dispatch("editCollectionV2",
{
collection: { id: collection.id },
collectionsAdded: [item.id],
pictosAdded: [],
collectionsRemoved: [],
pictosRemoved: [],
},
);
const notif = this.$buefy.toast.open({
message: this.$t("PublicCopy"),
type: "is-success",
Expand Down Expand Up @@ -117,36 +125,34 @@ export default {
let sidebar = await this.getCollectionFromId(parseInt(sidebarId, 10));

let currentCollection = await this.getCollectionFromId(parseInt(this.$route.query.fatherCollectionId, 10))
console.log(sidebar, currentCollection);
if (isPicto) {
sidebar.pictos.push({
id: collectionId,
});
// Remove the picto from the current collection
currentCollection.pictos = currentCollection.pictos.filter((picto) => picto.id != collectionId);

await this.$store.dispatch("editCollection", {
id: sidebar.id,
pictos: sidebar.pictos,
});
await this.$store.dispatch("editCollection", {
id: currentCollection.id,
collections: currentCollection.pictos,
await this.$store.dispatch("editCollectionV2",
{
collection: { id: sidebar.id },
collectionsAdded: [],
pictosAdded: [collectionId],
collectionsRemoved: [],
pictosRemoved: [],
},
);
await this.$store.dispatch("removePicto", {
pictoId: collectionId,
fatherCollectionId: currentCollection.id
});
} else {
sidebar.collections.push({
id: collectionId,
});
currentCollection.collections = currentCollection.collections.filter((picto) => picto.id != collectionId);
await this.$store.dispatch("editCollection", {
id: sidebar.id,
collections: sidebar.collections,
});
await this.$store.dispatch("editCollection", {
id: currentCollection.id,
collections: currentCollection.collections,
await this.$store.dispatch("editCollectionV2",
{
collection: { id: sidebar.id },
collectionsAdded: [collectionId],
pictosAdded: [],
collectionsRemoved: [],
pictosRemoved: [],
});
await this.$store.dispatch("removeCollection", {
collectionId: collectionId,
fatherCollectionId: currentCollection.id,
});

}
$nuxt.$emit("resyncPictoList");
} catch (error) {
Expand Down Expand Up @@ -184,26 +190,30 @@ export default {
)
);
if (!isPicto) {
currentCollection.collections.push({
id: collectionId,
});
await this.$store.dispatch("editCollection", {
id: currentCollection.id,
collections: currentCollection.collections,
});
await this.$store.dispatch("editCollectionV2",
{
collection: { id: currentCollection.id },
collectionsAdded: [collectionId],
pictosAdded: [],
collectionsRemoved: [],
pictosRemoved: [],
}
);
await this.$store.dispatch("removeCollection", {
collectionId: collectionId,
fatherCollectionId: this.$store.getters.getSidebarId,
});

} else {
currentCollection.pictos.push({
id: collectionId,
});
await this.$store.dispatch("editCollection", {
id: currentCollection.id,
pictos: currentCollection.pictos,
});
await this.$store.dispatch("editCollectionV2",
{
collection: { id: currentCollection.id },
collectionsAdded: [],
pictosAdded: [collectionId],
collectionsRemoved: [],
pictosRemoved: [],
}
);
await this.$store.dispatch("removePicto", {
pictoId: collectionId,
fatherCollectionId: this.$store.getters.getSidebarId
Expand Down
60 changes: 60 additions & 0 deletions store/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,66 @@ export const actions = {
...(collection.pictohubId && { pictohubId: Number(collection.pictohubId) }),
});
},
async editCollectionV2(vuexContext, { collection, collectionsAdded, pictosAdded, collectionsRemoved, pictosRemoved }) {
let formData = new FormData();
if (collection.speech) {
formData.append("speech", JSON.stringify(collection.speech));
}

if (collection.pictohubId) {
formData.append("pictohubId", collection.pictohubId);
}

if (collection.meaning) {
formData.append("meaning", JSON.stringify(collection.meaning));
}
if (collection.color) {
formData.append("color", collection.color);
}
if (collectionsAdded) {
collectionsAdded.map((id, index) => formData.append('collectionsAdded[' + index + ']', id));
}
if (pictosAdded) {
pictosAdded.map((id, index) => formData.append('pictosAdded[' + index + ']', id));
}
if (collectionsRemoved) {
collectionsRemoved.map((id, index) => formData.append('collectionsRemoved[' + index + ']', id));
}
if (pictosRemoved) {
pictosRemoved.map((id, index) => formData.append('pictosRemoved[' + index + ']', id));
}
if (collection.share) {
formData.append("share", collection.share);
}
if (collection.priority) {
formData.append("priority", collection.priority);
}
if (collection.image) {
formData.append("image", collection.image);
}
console.log(formData)
const editedCollection = (await axios
.put("/collection/V2/" + collection.id, formData, {
headers: {
"Content-Type": "multipart/form-data"
}
})).data;
const nestedCollections = await Promise.all(editedCollection.collections.map((colle) => parseAndUpdateEntireCollection(vuexContext, colle)));
const nestedPictos = await Promise.all(editedCollection.pictos.map((pict) => parseAndUpdatePictogram(vuexContext, pict)));
await vuexContext.dispatch("dbEditCollection", {
...editedCollection,
...(editedCollection.meaning && { meaning: editedCollection.meaning }),
...(editedCollection.speech && { speech: editedCollection.speech }),
...(editedCollection.priority && { priority: JSON.parse(editedCollection.priority) }),
image: axios.defaults.baseURL + "/image/pictalk/" + editedCollection.image,
createdDate: editedCollection.createdDate,
updatedDate: editedCollection.updatedDate,
collections: nestedCollections,
pictos: nestedPictos,
collection: true,
...(collection.pictohubId && { pictohubId: Number(collection.pictohubId) }),
});
},
async removeCollection(vuexContext, { collectionId, fatherCollectionId }) {
const res = await axios.delete("/collection/", { params: { collectionId: collectionId, fatherId: fatherCollectionId } });
const parentCollection = await vuexContext.dispatch("getCollectionFromId", fatherCollectionId);
Expand Down

0 comments on commit 880d581

Please sign in to comment.