UNPKG

decap-cms-core

Version:

Decap CMS core application, see decap-cms package for the main distribution.

162 lines (161 loc) 4.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.REMOVE_ASSET = exports.LOAD_ASSET_SUCCESS = exports.LOAD_ASSET_REQUEST = exports.LOAD_ASSET_FAILURE = exports.ADD_ASSETS = exports.ADD_ASSET = void 0; exports.addAsset = addAsset; exports.addAssets = addAssets; exports.boundGetAsset = boundGetAsset; exports.getAsset = getAsset; exports.loadAsset = loadAsset; exports.loadAssetFailure = loadAssetFailure; exports.loadAssetRequest = loadAssetRequest; exports.loadAssetSuccess = loadAssetSuccess; exports.removeAsset = removeAsset; var _decapCmsLibUtil = require("decap-cms-lib-util"); var _AssetProxy = require("../valueObjects/AssetProxy"); var _entries = require("../reducers/entries"); var _mediaLibrary = require("../reducers/mediaLibrary"); var _mediaLibrary2 = require("./mediaLibrary"); const ADD_ASSETS = exports.ADD_ASSETS = 'ADD_ASSETS'; const ADD_ASSET = exports.ADD_ASSET = 'ADD_ASSET'; const REMOVE_ASSET = exports.REMOVE_ASSET = 'REMOVE_ASSET'; const LOAD_ASSET_REQUEST = exports.LOAD_ASSET_REQUEST = 'LOAD_ASSET_REQUEST'; const LOAD_ASSET_SUCCESS = exports.LOAD_ASSET_SUCCESS = 'LOAD_ASSET_SUCCESS'; const LOAD_ASSET_FAILURE = exports.LOAD_ASSET_FAILURE = 'LOAD_ASSET_FAILURE'; function addAssets(assets) { return { type: ADD_ASSETS, payload: assets }; } function addAsset(assetProxy) { return { type: ADD_ASSET, payload: assetProxy }; } function removeAsset(path) { return { type: REMOVE_ASSET, payload: path }; } function loadAssetRequest(path) { return { type: LOAD_ASSET_REQUEST, payload: { path } }; } function loadAssetSuccess(path) { return { type: LOAD_ASSET_SUCCESS, payload: { path } }; } function loadAssetFailure(path, error) { return { type: LOAD_ASSET_FAILURE, payload: { path, error } }; } function loadAsset(resolvedPath) { return async (dispatch, getState) => { try { dispatch(loadAssetRequest(resolvedPath)); // load asset url from backend await (0, _mediaLibrary2.waitForMediaLibraryToLoad)(dispatch, getState()); const file = (0, _mediaLibrary.selectMediaFileByPath)(getState(), resolvedPath); if (file) { const url = await (0, _mediaLibrary2.getMediaDisplayURL)(dispatch, getState(), file); const asset = (0, _AssetProxy.createAssetProxy)({ path: resolvedPath, url: url || resolvedPath }); dispatch(addAsset(asset)); } else { const { url } = await (0, _mediaLibrary2.getMediaFile)(getState(), resolvedPath); const asset = (0, _AssetProxy.createAssetProxy)({ path: resolvedPath, url }); dispatch(addAsset(asset)); } dispatch(loadAssetSuccess(resolvedPath)); } catch (e) { dispatch(loadAssetFailure(resolvedPath, e)); } }; } const emptyAsset = (0, _AssetProxy.createAssetProxy)({ path: 'empty.svg', file: new File([`<svg xmlns="http://www.w3.org/2000/svg"></svg>`], 'empty.svg', { type: 'image/svg+xml' }) }); function boundGetAsset(dispatch, collection, entry) { function bound(path, field) { const asset = dispatch(getAsset({ collection, entry, path, field })); return asset; } return bound; } function getAsset({ collection, entry, path, field }) { return (dispatch, getState) => { if (!path) return emptyAsset; const state = getState(); const resolvedPath = (0, _entries.selectMediaFilePath)(state.config, collection, entry, path, field); let { asset, isLoading, error } = state.medias[resolvedPath] || {}; if (isLoading) { return emptyAsset; } if (asset) { // There is already an AssetProxy in memory for this path. Use it. return asset; } if ((0, _decapCmsLibUtil.isAbsolutePath)(resolvedPath)) { // asset path is a public url so we can just use it as is asset = (0, _AssetProxy.createAssetProxy)({ path: resolvedPath, url: path }); dispatch(addAsset(asset)); } else { if (error) { // on load error default back to original path asset = (0, _AssetProxy.createAssetProxy)({ path: resolvedPath, url: path }); dispatch(addAsset(asset)); } else { dispatch(loadAsset(resolvedPath)); asset = emptyAsset; } } return asset; }; }