| 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 |