You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
306 lines
7.1 KiB
306 lines
7.1 KiB
3 years ago
|
"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 AdminJSOptions}
|
||
|
* @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 `list` 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
|
||
|
* @param {Assets | undefined} assetsConfig
|
||
|
* @return {string}
|
||
|
*/
|
||
|
|
||
|
|
||
|
assetPath(asset, assetsConfig) {
|
||
|
if (this.options.assetsCDN) {
|
||
|
var _assetsConfig$coreScr;
|
||
|
|
||
|
const pathname = (assetsConfig === null || assetsConfig === void 0 ? void 0 : (_assetsConfig$coreScr = assetsConfig.coreScripts) === null || _assetsConfig$coreScr === void 0 ? void 0 : _assetsConfig$coreScr[asset]) ?? asset;
|
||
|
const url = new URL(pathname, 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;
|