import { toolcraftReducer } from "../composition/public-state"; import type { ToolcraftCommand, ToolcraftFileAssetDraft, ToolcraftImageAssetDraft, ToolcraftImageAssetIngress, ToolcraftState, } from "./types"; type MediaImportCommand = Extract< ToolcraftCommand, { type: "media.importBatch" } >; type MediaImportOptions = Pick; type ReadyImageAssetDraft = Extract< ToolcraftImageAssetDraft, { lifecycle: "ready" | "restoring" } >; type ReadyFileAssetDraft = Extract< ToolcraftFileAssetDraft, { lifecycle: "ready" | "restoring" } >; export const imageMediaAsset = ( overrides: Partial = {}, ): ToolcraftImageAssetIngress => ({ policy: "prepared-source", asset: { assetKind: "image", fileName: "source.png", lifecycle: "ready", mimeType: "image/png", position: { x: 0, y: 0 }, resourceRef: "media:image:source", ...overrides, size: undefined, sourceSize: overrides.sourceSize ?? overrides.size ?? { height: 768, unit: "px", width: 1024 }, }, }); export const fileMediaAsset = ( overrides: Partial = {}, ): ReadyFileAssetDraft => ({ assetKind: "file", fileName: "notes.txt", lifecycle: "ready", mimeType: "text/plain", position: { x: 0, y: 0 }, resourceRef: "media:file:notes", ...overrides, }); export function importImageMedia( state: ToolcraftState, overrides: Partial = {}, options: MediaImportOptions = {}, ) { return toolcraftReducer(state, { assets: [imageMediaAsset(overrides)], type: "media.importBatch", ...options, }); }