| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import { ref } from "vue";
- import { autoSetModeCallback, createTemploraryID, unSetModelUpdate } from './sys'
- import { deleteStoreItem, recoverStoreItems, saveStoreItems } from '@/utils'
- import { fetchRecordFragments, postDeleteRecordFragment } from '@/api'
- import type { RecordFragment as SRecordFragment } from '@/api'
- import type { Record } from './record'
- export type RecordFragment = Omit<SRecordFragment, 'url'> & { url: string | Blob } & { recordId: Record['id'] }
- export type RecordFragments = RecordFragment[]
- export const recordFragments = ref<RecordFragments>([])
- export const createRecordFragment = (recordFragment: Partial<RecordFragment> = {}): RecordFragment => ({
- id: createTemploraryID(),
- recordId: '',
- cover: '',
- url: '',
- sort: Math.min(...recordFragments.value.map(item => item.sort)) + 1,
- ...recordFragment
- })
- export const getRecordFragments = (record: Record) =>
- recordFragments.value.filter(fragment => fragment.recordId === record.id)
- export const getRecordFragmentBlobs = (record: Record) => getRecordFragments(record)
- .filter(fragment => typeof fragment.url !== 'string')
- .map(fragment => fragment.url as Blob)
- let bcRecordFragments: RecordFragments = []
- export const getBackupRecordFragments = () => bcRecordFragments
- export const backupRecordFragments = () => {
- bcRecordFragments = recordFragments.value.map(fragment => ({...fragment}))
- }
- export const recoverRecordFragments = recoverStoreItems(recordFragments, getBackupRecordFragments)
- export const initRecordFragmentsByRecord = async (record: Record) => {
- const fragments = await fetchRecordFragments(record.id)
- unSetModelUpdate(() => {
- recordFragments.value = recordFragments.value
- .filter(fragment => fragment.recordId !== record.id)
- .concat(fragments.map(fragment => ({...fragment, recordId: record.id})))
- })
- backupRecordFragments()
- }
- export const deleteRecordFragment = deleteStoreItem(recordFragments, fragment => postDeleteRecordFragment(fragment.id))
- export const saveRecordFragments = saveStoreItems(
- recordFragments,
- getBackupRecordFragments,
- {
- // delete: deleteRecordFragment
- }
- )
- export const autoSaveRecordFragments = autoSetModeCallback(recordFragments, {
- backup: backupRecordFragments,
- recovery: recoverRecordFragments,
- save: saveRecordFragments
- })
|