UNPKG

admin-bro

Version:
302 lines (255 loc) 6.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.ViewHelpers = void 0; let globalAny = {}; try { globalAny = window; } catch (error) { if (error.message !== 'window is not defined') { throw error; } } /** * Base Params for a any function * @alias ActionParams * @memberof ViewHelpers */ const runDate = new Date(); /** * Collection of helper methods available in the views */ class ViewHelpers { constructor({ options } = {}) { let opts = ViewHelpers.getPaths(options); opts = opts || { rootPath: '/admin' }; // when ViewHelpers are used on the frontend, paths are taken from global Redux State this.options = opts; } static getPaths(options) { var _globalAny$REDUX_STAT; return options || ((_globalAny$REDUX_STAT = globalAny.REDUX_STATE) === null || _globalAny$REDUX_STAT === void 0 ? void 0 : _globalAny$REDUX_STAT.paths); } /** * To each related path adds rootPath passed by the user, as well as a query string * @private * @param {Array<string>} [paths] list of parts of the url * @return {string} path * @return {query} [search=''] query string which can be fetch * from `location.search` */ urlBuilder(paths = [], search = '') { const separator = '/'; const replace = new RegExp(`${separator}{1,}`, 'g'); let { rootPath } = this.options; if (!rootPath.startsWith(separator)) { rootPath = `${separator}${rootPath}`; } const parts = [rootPath, ...paths]; return `${parts.join(separator).replace(replace, separator)}${search}`; } /** * Returns login URL * @return {string} */ loginUrl() { return this.options.loginPath; } /** * Returns logout URL * @return {string} */ logoutUrl() { return this.options.logoutPath; } /** * Returns URL for the dashboard * @return {string} */ dashboardUrl() { return this.options.rootPath; } /** * Returns URL for given page name * @param {string} pageName page name which is a unique key specified in * {@link AdminBroOptions} * @return {string} */ pageUrl(pageName) { return this.urlBuilder(['pages', pageName]); } /** * Returns url for a `edit` action in given Resource. Uses {@link recordActionUrl} * * @param {string} resourceId id to the resource * @param {string} recordId id to the record * @param {string} [search] optional query string */ editUrl(resourceId, recordId, search) { return this.recordActionUrl({ resourceId, recordId, actionName: 'edit', search }); } /** * Returns url for a `show` action in given Resource. Uses {@link recordActionUrl} * * @param {string} resourceId id to the resource * @param {string} recordId id to the record * @param {string} [search] optional query string */ showUrl(resourceId, recordId, search) { return this.recordActionUrl({ resourceId, recordId, actionName: 'show', search }); } /** * Returns url for a `delete` action in given Resource. Uses {@link recordActionUrl} * * @param {string} resourceId id to the resource * @param {string} recordId id to the record * @param {string} [search] optional query string */ deleteUrl(resourceId, recordId, search) { return this.recordActionUrl({ resourceId, recordId, actionName: 'delete', search }); } /** * Returns url for a `new` action in given Resource. Uses {@link resourceActionUrl} * * @param {string} resourceId id to the resource * @param {string} [search] optional query string */ newUrl(resourceId, search) { return this.resourceActionUrl({ resourceId, actionName: 'new', search }); } /** * Returns url for a `new` action in given Resource. Uses {@link resourceActionUrl} * * @param {string} resourceId id to the resource * @param {string} [search] optional query string */ listUrl(resourceId, search) { return this.resourceActionUrl({ resourceId, actionName: 'list', search }); } /** * Returns url for a `bulkDelete` action in given Resource. Uses {@link bulkActionUrl} * * @param {string} resourceId id to the resource * @param {Array<string>} recordIds separated by comma records * @param {string} [search] optional query string */ bulkDeleteUrl(resourceId, recordIds, search) { return this.bulkActionUrl({ resourceId, recordIds, actionName: 'bulkDelete', search }); } /** * Returns resourceAction url * * @param {ResourceActionParams} options * @param {string} options.resourceId * @param {string} options.actionName * @param {string} [options.search] optional query string * * @return {string} */ resourceActionUrl({ resourceId, actionName, search }) { return this.urlBuilder(['resources', resourceId, 'actions', actionName], search); } resourceUrl({ resourceId, search }) { return this.urlBuilder(['resources', resourceId], search); } /** * Returns recordAction url * * @param {RecordActionParams} options * @param {string} options.resourceId * @param {string} options.recordId * @param {string} options.actionName * * @return {string} */ recordActionUrl({ resourceId, recordId, actionName, search }) { return this.urlBuilder(['resources', resourceId, 'records', recordId, actionName], search); } /** * Returns bulkAction url * * @param {BulkActionParams} options * @param {string} options.resourceId * @param {Array<string>} [options.recordIds] * @param {string} options.actionName * * @return {string} */ bulkActionUrl({ resourceId, recordIds, actionName, search }) { const url = this.urlBuilder(['resources', resourceId, 'bulk', actionName]); if (recordIds && recordIds.length) { const query = new URLSearchParams(search); query.set('recordIds', recordIds.join(',')); return `${url}?${query.toString()}`; } return `${url}${search || ''}`; } /** * Returns absolute path to a given asset. * @private * * @param {string} asset * @return {string} */ assetPath(asset) { if (this.options.assetsCDN) { const url = new URL(asset, this.options.assetsCDN).href; // adding timestamp to the href invalidates the CDN cache return `${url}?date=${runDate.getTime()}`; } return this.urlBuilder(['frontend', 'assets', asset]); } } exports.ViewHelpers = ViewHelpers; var _default = ViewHelpers; exports.default = _default;