|
@@ -1,5 +1,15 @@
|
|
|
import { ref } from 'vue'
|
|
|
+import { togetherCallback } from '@/utils'
|
|
|
import { autoSetModeCallback, createTemploraryID } from './sys'
|
|
|
+import { defaultStyle } from './tagging-style'
|
|
|
+import {
|
|
|
+ initTaggingPositionsByTagging,
|
|
|
+ saveTaggingPositions,
|
|
|
+ recoverTaggingPositions,
|
|
|
+ backupTaggingPositions,
|
|
|
+ taggingPositions,
|
|
|
+ getTaggingPositions
|
|
|
+} from './tagging-positions'
|
|
|
import {
|
|
|
fetchTaggings,
|
|
|
postAddTagging,
|
|
@@ -21,20 +31,18 @@ import type { Tagging as STagging } from '@/api'
|
|
|
|
|
|
export type Tagging = LocalMode<STagging, 'images'>
|
|
|
export type Taggings = Tagging[]
|
|
|
-export type { TaggingPosition } from '@/api'
|
|
|
|
|
|
export const taggings = ref<Taggings>([])
|
|
|
|
|
|
export const createTagging = (tagging: Partial<Tagging> = {}): Tagging => ({
|
|
|
id: createTemploraryID(),
|
|
|
title: ``,
|
|
|
- styleId: '',
|
|
|
+ styleId: defaultStyle.value?.id || '',
|
|
|
desc: '',
|
|
|
part: '',
|
|
|
method: '',
|
|
|
principal: '',
|
|
|
images: [],
|
|
|
- positions: [],
|
|
|
...tagging
|
|
|
})
|
|
|
|
|
@@ -45,7 +53,6 @@ export const backupTaggings = () => {
|
|
|
bcTaggings = taggings.value.map(tagging => ({
|
|
|
...tagging,
|
|
|
images: [...tagging.images],
|
|
|
- positions: [...tagging.positions]
|
|
|
}))
|
|
|
}
|
|
|
|
|
@@ -60,10 +67,21 @@ export const transformTagging = async (tagging: Tagging): Promise<STagging> => {
|
|
|
}
|
|
|
|
|
|
export const recoverTaggings = recoverStoreItems(taggings, () => bcTaggings)
|
|
|
-export const addTagging = addStoreItem(taggings, postAddTagging, transformTagging)
|
|
|
+export const addTagging = addStoreItem(taggings, async (localTagging) => {
|
|
|
+ const serviceTagging = await postAddTagging(localTagging)
|
|
|
+ const positions = getTaggingPositions(localTagging)
|
|
|
+ for (const position of positions) {
|
|
|
+ position.taggingId = serviceTagging.id
|
|
|
+ }
|
|
|
+ return serviceTagging
|
|
|
+}, transformTagging)
|
|
|
export const updateTagging = updateStoreItem(taggings, postUpdateTagging, transformTagging)
|
|
|
export const deleteTagging = deleteStoreItem(taggings, tagging => postDeleteTagging(tagging.id))
|
|
|
-export const initialTaggings = fetchStoreItems(taggings, fetchTaggings, backupTaggings)
|
|
|
+export const initialTaggings = fetchStoreItems(taggings, async () => {
|
|
|
+ const taggings = await fetchTaggings()
|
|
|
+ await Promise.all(taggings.map(initTaggingPositionsByTagging))
|
|
|
+ return taggings
|
|
|
+}, backupTaggings)
|
|
|
export const saveTaggings = saveStoreItems(
|
|
|
taggings,
|
|
|
getBackupTaggings,
|
|
@@ -73,8 +91,12 @@ export const saveTaggings = saveStoreItems(
|
|
|
delete: deleteTagging,
|
|
|
}
|
|
|
)
|
|
|
-export const autoSaveTaggings = autoSetModeCallback(taggings, {
|
|
|
- backup: backupTaggings,
|
|
|
- recovery: recoverTaggings,
|
|
|
- save: saveTaggings,
|
|
|
+
|
|
|
+export const autoSaveTaggings = autoSetModeCallback([taggings, taggingPositions], {
|
|
|
+ backup: togetherCallback([backupTaggings, backupTaggingPositions]),
|
|
|
+ recovery: togetherCallback([recoverTaggings, recoverTaggingPositions]),
|
|
|
+ save: async () => {
|
|
|
+ await saveTaggings()
|
|
|
+ await saveTaggingPositions()
|
|
|
+ },
|
|
|
})
|