tagging-style.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { ref, computed } from 'vue'
  2. import { autoSetModeCallback, createTemploraryID } from './sys'
  3. import {
  4. defStyleType,
  5. fetchTaggingStyles,
  6. postAddTaggingStyle,
  7. postDeleteTaggingStyle
  8. } from '@/api'
  9. import {
  10. addStoreItem,
  11. deleteStoreItem,
  12. fetchStoreItems,
  13. recoverStoreItems,
  14. saveStoreItems
  15. } from '@/utils'
  16. import type { TaggingStyle as STaggingStyle } from '@/api'
  17. export type TaggingStyle = LocalMode<STaggingStyle, 'icon'>
  18. export type TaggingStyles = TaggingStyle[]
  19. export const taggingStyles = ref<TaggingStyles>([])
  20. export const defaultStyle = computed(() => taggingStyles.value.find(style => style.default))
  21. export const lastUseStyle = computed(() => taggingStyles.value.find(style => style.lastUse))
  22. export const createTaggingStyle = (style: Partial<TaggingStyle> = {}): TaggingStyle => ({
  23. id: createTemploraryID(),
  24. icon: '',
  25. lastUse: 0,
  26. default: false,
  27. typeId: defStyleType.id,
  28. ...style
  29. })
  30. export const getTaggingStyle = (id: TaggingStyle['id']) => {
  31. return taggingStyles.value.find(style => style.id === id)
  32. }
  33. let bcStyles: TaggingStyles = []
  34. export const getBackupTaggingStyles = () => bcStyles
  35. export const backupTaggingStyles = () => {
  36. bcStyles = taggingStyles.value.map(style => ({...style}))
  37. }
  38. export const recoverTaggingStyles = recoverStoreItems(taggingStyles, getBackupTaggingStyles)
  39. export const initialTaggingStyles = fetchStoreItems(taggingStyles, fetchTaggingStyles, backupTaggingStyles)
  40. export const addTaggingStyle = addStoreItem(taggingStyles, async (tagging) => {
  41. if (typeof tagging.icon === 'string') {
  42. return tagging
  43. } else {
  44. return postAddTaggingStyle({ file: tagging.icon.blob, iconTitle: tagging.typeId.toString() })
  45. }
  46. })
  47. export const deleteTaggingStyle = deleteStoreItem(taggingStyles, style => postDeleteTaggingStyle(style.id))
  48. export const saveTaggingStyles = saveStoreItems(
  49. taggingStyles,
  50. getBackupTaggingStyles,
  51. {
  52. add: addTaggingStyle,
  53. delete: deleteTaggingStyle,
  54. }
  55. )
  56. export const autoSaveTaggingStyles = autoSetModeCallback(taggingStyles, {
  57. backup: backupTaggingStyles,
  58. recovery: recoverTaggingStyles,
  59. save: saveTaggingStyles,
  60. })