返回 AiToEarn
materialSync.ts
根目录 / project / aitoearn-web / src / store / draft-box / materialSync.ts
1 import type { PromotionMaterial } from '@/api/materials/material.types'
2
3 interface MediaTabDraftSyncAdapter {
4 removeDraftItems: (ids: string[]) => void
5 refreshDraftItems: (materialGroupId: string, planId: string) => void
6 }
7
8 interface PlanDetailMaterialSyncAdapter {
9 setMaterialsFromExternal: (list: PromotionMaterial[], total: number, pageSize: number) => void
10 syncMaterialsFromFresh: (freshList: PromotionMaterial[], total: number) => void
11 appendMaterials: (list: PromotionMaterial[], total: number) => void
12 isCurrentPlan: (planId: string) => boolean
13 silentRefreshMaterials: (planId: string) => Promise<void>
14 refreshCurrentMaterials: () => Promise<void>
15 }
16
17 let mediaTabDraftSyncAdapter: MediaTabDraftSyncAdapter | null = null
18 let planDetailMaterialSyncAdapter: PlanDetailMaterialSyncAdapter | null = null
19
20 export function registerMediaTabDraftSyncAdapter(adapter: MediaTabDraftSyncAdapter) {
21 mediaTabDraftSyncAdapter = adapter
22 }
23
24 export function registerPlanDetailMaterialSyncAdapter(adapter: PlanDetailMaterialSyncAdapter) {
25 planDetailMaterialSyncAdapter = adapter
26 }
27
28 export function removeDraftItemsFromMediaTabs(ids: string[]) {
29 mediaTabDraftSyncAdapter?.removeDraftItems(ids)
30 }
31
32 export function refreshDraftItemsInMediaTabs(materialGroupId: string, planId: string) {
33 mediaTabDraftSyncAdapter?.refreshDraftItems(materialGroupId, planId)
34 }
35
36 export function setPlanDetailMaterialsFromExternal(
37 list: PromotionMaterial[],
38 total: number,
39 pageSize: number,
40 ) {
41 planDetailMaterialSyncAdapter?.setMaterialsFromExternal(list, total, pageSize)
42 }
43
44 export function syncPlanDetailMaterialsFromFresh(freshList: PromotionMaterial[], total: number) {
45 planDetailMaterialSyncAdapter?.syncMaterialsFromFresh(freshList, total)
46 }
47
48 export function appendPlanDetailMaterials(list: PromotionMaterial[], total: number) {
49 planDetailMaterialSyncAdapter?.appendMaterials(list, total)
50 }
51
52 export function isCurrentPlanDetail(planId: string) {
53 return planDetailMaterialSyncAdapter?.isCurrentPlan(planId) ?? false
54 }
55
56 export function silentRefreshPlanDetailMaterials(planId: string) {
57 return planDetailMaterialSyncAdapter?.silentRefreshMaterials(planId) ?? Promise.resolve()
58 }
59
60 export function refreshCurrentPlanDetailMaterials() {
61 return planDetailMaterialSyncAdapter?.refreshCurrentMaterials() ?? Promise.resolve()
62 }
63
63 lines TYPESCRIPT