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.
		
		
		
		
		
			
		
			
				
					
					
						
							250 lines
						
					
					
						
							6.1 KiB
						
					
					
				
			
		
		
	
	
							250 lines
						
					
					
						
							6.1 KiB
						
					
					
				| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|   value: true
 | |
| });
 | |
| exports.default = exports.ApiClient = void 0;
 | |
| 
 | |
| var _axios = _interopRequireDefault(require("axios"));
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | |
| 
 | |
| let globalAny = {};
 | |
| 
 | |
| try {
 | |
|   globalAny = window;
 | |
| } catch (error) {
 | |
|   if (error.message !== 'window is not defined') {
 | |
|     throw error;
 | |
|   } else {
 | |
|     globalAny = {
 | |
|       isOnServer: true
 | |
|     };
 | |
|   }
 | |
| }
 | |
| /**
 | |
|  * Type of an [axios request]{@link https://github.com/axios/axios/blob/master/index.d.ts#L43}
 | |
|  *
 | |
|  * @typedef {object} AxiosRequestConfig
 | |
|  * @alias AxiosRequestConfig
 | |
|  * @memberof ApiClient
 | |
|  * @see https://github.com/axios/axios/blob/master/index.d.ts#L43
 | |
|  */
 | |
| 
 | |
| 
 | |
| const checkResponse = response => {
 | |
|   if (globalAny.isOnServer) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   const loginUrl = [globalAny.location.origin, globalAny.REDUX_STATE.paths.loginPath].join(''); // if response has redirect to loginUrl
 | |
| 
 | |
|   if (response.request.responseURL && response.request.responseURL.match(loginUrl)) {
 | |
|     // eslint-disable-next-line no-undef
 | |
|     alert('Your session expired. You will be redirected to login screen');
 | |
|     globalAny.location.assign(loginUrl);
 | |
|   }
 | |
| };
 | |
| /**
 | |
|  * Extends {@link AxiosRequestConfig}
 | |
|  *
 | |
|  * @alias ActionAPIParams
 | |
|  * @memberof ApiClient
 | |
|  * @property {any}   ...    any property supported by {@link AxiosRequestConfig}
 | |
|  */
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Client which access the admin API.
 | |
|  * Use it to fetch data from auto generated AdminJS API.
 | |
|  *
 | |
|  * In the backend it uses [axios](https://github.com/axios/axios) client
 | |
|  * library.
 | |
|  *
 | |
|  * Usage:
 | |
|  * ```javascript
 | |
|  * import { ApiClient } from 'adminjs'
 | |
|  *
 | |
|  * const api = new ApiClient()
 | |
|  * // fetching all records
 | |
|  * api.resourceAction({ resourceId: 'Comments', actionName: 'list' }).then(results => {...})
 | |
|  * ```
 | |
|  * @see https://github.com/axios/axios
 | |
|  * @hideconstructor
 | |
|  */
 | |
| class ApiClient {
 | |
|   constructor() {
 | |
|     this.baseURL = ApiClient.getBaseUrl();
 | |
|     this.client = _axios.default.create({
 | |
|       baseURL: this.baseURL
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   static getBaseUrl() {
 | |
|     var _globalAny$REDUX_STAT;
 | |
| 
 | |
|     if (globalAny.isOnServer) {
 | |
|       return '';
 | |
|     }
 | |
| 
 | |
|     return [globalAny.location.origin, (_globalAny$REDUX_STAT = globalAny.REDUX_STATE) === null || _globalAny$REDUX_STAT === void 0 ? void 0 : _globalAny$REDUX_STAT.paths.rootPath].join('');
 | |
|   }
 | |
|   /**
 | |
|    * Search by query string for records in a given resource.
 | |
|    *
 | |
|    * @param   {Object}  options
 | |
|    * @param   {String}  options.resourceId     id of a {@link ResourceJSON}
 | |
|    * @param   {String}  options.query          query string
 | |
|    * @param   {String}  options.searchProperty optional property name
 | |
|    *
 | |
|    * @return  {Promise<SearchResponse>}
 | |
|    */
 | |
| 
 | |
| 
 | |
|   async searchRecords({
 | |
|     resourceId,
 | |
|     query,
 | |
|     searchProperty
 | |
|   }) {
 | |
|     if (globalAny.isOnServer) {
 | |
|       return [];
 | |
|     }
 | |
| 
 | |
|     const actionName = 'search';
 | |
|     const response = await this.resourceAction({
 | |
|       resourceId,
 | |
|       actionName,
 | |
|       query,
 | |
|       ...(searchProperty ? {
 | |
|         params: {
 | |
|           searchProperty
 | |
|         }
 | |
|       } : undefined)
 | |
|     });
 | |
|     checkResponse(response);
 | |
|     return response.data.records;
 | |
|   }
 | |
|   /**
 | |
|    * Invokes given resource {@link Action} on the backend.
 | |
|    *
 | |
|    * @param   {ResourceActionAPIParams}     options
 | |
|    * @return  {Promise<ActionResponse>}     response from an {@link Action}
 | |
|    */
 | |
| 
 | |
| 
 | |
|   async resourceAction(options) {
 | |
|     const {
 | |
|       resourceId,
 | |
|       actionName,
 | |
|       data,
 | |
|       query,
 | |
|       ...axiosParams
 | |
|     } = options;
 | |
|     let url = `/api/resources/${resourceId}/actions/${actionName}`;
 | |
| 
 | |
|     if (query) {
 | |
|       const q = encodeURIComponent(query);
 | |
|       url = [url, q].join('/');
 | |
|     }
 | |
| 
 | |
|     const response = await this.client.request({
 | |
|       url,
 | |
|       method: data ? 'POST' : 'GET',
 | |
|       ...axiosParams,
 | |
|       data
 | |
|     });
 | |
|     checkResponse(response);
 | |
|     return response;
 | |
|   }
 | |
|   /**
 | |
|    * Invokes given record {@link Action} on the backend.
 | |
|    *
 | |
|    * @param   {RecordActionAPIParams} options
 | |
|    * @return  {Promise<RecordActionResponse>}            response from an {@link Action}
 | |
|    */
 | |
| 
 | |
| 
 | |
|   async recordAction(options) {
 | |
|     const {
 | |
|       resourceId,
 | |
|       recordId,
 | |
|       actionName,
 | |
|       data,
 | |
|       ...axiosParams
 | |
|     } = options;
 | |
|     const response = await this.client.request({
 | |
|       url: `/api/resources/${resourceId}/records/${recordId}/${actionName}`,
 | |
|       method: data ? 'POST' : 'GET',
 | |
|       ...axiosParams,
 | |
|       data
 | |
|     });
 | |
|     checkResponse(response);
 | |
|     return response;
 | |
|   }
 | |
|   /**
 | |
|    * Invokes given bulk {@link Action} on the backend.
 | |
|    *
 | |
|    * @param   {BulkActionAPIParams} options
 | |
|    * @return  {Promise<BulkActionResponse>}            response from an {@link Action}
 | |
|    */
 | |
| 
 | |
| 
 | |
|   async bulkAction(options) {
 | |
|     const {
 | |
|       resourceId,
 | |
|       recordIds,
 | |
|       actionName,
 | |
|       data,
 | |
|       ...axiosParams
 | |
|     } = options;
 | |
|     const params = new URLSearchParams();
 | |
|     params.set('recordIds', (recordIds || []).join(','));
 | |
|     const response = await this.client.request({
 | |
|       url: `/api/resources/${resourceId}/bulk/${actionName}`,
 | |
|       method: data ? 'POST' : 'GET',
 | |
|       ...axiosParams,
 | |
|       data,
 | |
|       params
 | |
|     });
 | |
|     checkResponse(response);
 | |
|     return response;
 | |
|   }
 | |
|   /**
 | |
|    * Invokes dashboard handler.
 | |
|    *
 | |
|    * @param   {AxiosRequestConfig}       options
 | |
|    * @return  {Promise<AxiosResponse<any>>} response from the handler function defined in
 | |
|    *                                     {@link AdminJSOptions#dashboard}
 | |
|    */
 | |
| 
 | |
| 
 | |
|   async getDashboard(options = {}) {
 | |
|     const response = await this.client.get('/api/dashboard', options);
 | |
|     checkResponse(response);
 | |
|     return response;
 | |
|   }
 | |
|   /**
 | |
|    * Invokes handler function of given page and returns its response.
 | |
|    *
 | |
|    * @param   {GetPageAPIParams}                options
 | |
|    * @return  {Promise<AxiosResponse<any>>}     response from the handler of given page
 | |
|    *                                            defined in {@link AdminJSOptions#pages}
 | |
|    */
 | |
| 
 | |
| 
 | |
|   async getPage(options) {
 | |
|     const {
 | |
|       pageName,
 | |
|       ...axiosParams
 | |
|     } = options;
 | |
|     const response = await this.client.request({
 | |
|       url: `/api/pages/${pageName}`,
 | |
|       ...axiosParams
 | |
|     });
 | |
|     checkResponse(response);
 | |
|     return response;
 | |
|   }
 | |
| 
 | |
| }
 | |
| 
 | |
| exports.ApiClient = exports.default = ApiClient; |