angular.module('app.yangman').controller('RequestsListCtrl', RequestsListCtrl);
RequestsListCtrl.$inject = [
- '$filter', '$mdDialog', '$scope', 'HandleFileService', 'PathUtilsService', 'RequestsService',
+ '$filter', '$mdDialog', '$scope', 'YMHandleFileService', 'PathUtilsService', 'RequestsService', 'YangmanService',
+ 'YangmanDesignService', 'constants',
];
- function RequestsListCtrl($filter, $mdDialog, $scope, HandleFileService, PathUtilsService, RequestsService) {
+ /**
+ * Controller for requests lists, means History requests and Collections requests
+ * @param $filter
+ * @param $mdDialog
+ * @param $scope
+ * @param YMHandleFileService
+ * @param PathUtilsService
+ * @param RequestsService
+ * @param YangmanService
+ * @param YangmanDesignService
+ * @constructor
+ */
+ function RequestsListCtrl($filter, $mdDialog, $scope, YMHandleFileService, PathUtilsService, RequestsService,
+ YangmanService, YangmanDesignService, constants) {
var vm = this;
- vm.collectionList = RequestsService.createEmptyCollectionList('yangman_collectionsList', vm.getApiCallback);
+ /**
+ * List of all collections containing requests, loads even for history controller to use collection names
+ * in saving requests dialog
+ * @type {*|CollectionList}
+ */
+ vm.collectionList = null;
+ vm.constants = constants;
+
+ /**
+ *
+ * @type {*|HistoryList}
+ */
+ vm.requestList = null;
vm.mainList = null;
- vm.requestList = RequestsService.createEmptyHistoryList('yangman_requestsList', vm.getApiCallback);
- vm.search = '';
vm.collectionsSortAsc = true;
+ vm.search = '';
+ // methods
+ vm.clearCollectionList = clearCollectionList;
vm.clearFilter = clearFilter;
- vm.filterReq = filterReq;
- vm.filterCol = filterCol;
- vm.filterColName = filterColName;
+ vm.clearHistoryList = clearHistoryList;
vm.colMatchingReqsCount = colMatchingReqsCount;
+ vm.deselectAllFilteredRequests = deselectAllFilteredReqs;
vm.downloadCollection = downloadCollection;
+ vm.executeRequest = executeRequest;
vm.fakeFilter = fakeFilter;
- vm.getApiCallback = getApiCallback;
- vm.loadRequests = loadRequests;
- vm.toggleCollectionsSort = toggleCollectionsSort;
+ vm.filterCol = filterCol;
+ vm.filterColName = filterColName;
+ vm.filterReq = filterReq;
+ vm.init = init;
+ vm.readCollectionFromFile = readCollectionFromFile;
+ vm.selectAllFilteredRequests = selectAllFilteredReqs;
vm.selectRequest = selectRequest;
-
+ vm.showData = showData;
vm.showDgDeleteCollection = showDgDeleteCollection;
vm.showDgDeleteRequests = showDgDeleteRequests;
vm.showDgEditCollection = showDgEditCollection;
- vm.readCollectionFromFile = readCollectionFromFile;
vm.showDgSaveReq = showDgSaveReq;
+ vm.showForm = showForm;
+ vm.toggleCollectionsSort = toggleCollectionsSort;
+ vm.selectOnlyThisRequest = selectOnlyThisRequest;
+ vm.deselectAllRequests = deselectAllRequests;
+ vm.filterCollReq = filterCollReq;
- vm.showData = showData;
- vm.useAsMainList = useAsMainList;
+ /**
+ * Save request obje to collection from other controller
+ * @param reqObj
+ */
+ function saveRequestFromExt(event, args) {
+ vm.showDgSaveReq(args.params.event, args.params.reqObj, false);
+ }
+
+
+ /**
+ * Clear history requests list and save to storage
+ */
+ function clearHistoryList(event) {
- $scope.$on('YANGMAN_REFRESH_HISTORY', loadHistoryRequests);
- $scope.$on('YANGMAN_REFRESH_COLLECTIONS', loadCollectionRequest);
+ YangmanDesignService.disableMdMenuItem(event);
- loadRequests();
+ var confirm = $mdDialog.confirm()
+ .title($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TITLE'))
+ .textContent($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TEXT'))
+ .ariaLabel($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TITLE'))
+ .targetEvent(event)
+ .ok($filter('translate')('YANGMAN_OK'))
+ .cancel($filter('translate')('YANGMAN_CANCEL'));
+
+ $mdDialog.show(confirm).then(function (){
+ vm.requestList.clear();
+ vm.requestList.saveToStorage();
+ loadHistoryList();
+ YangmanDesignService.enableMdMenuItem(event);
+ }, function (){
+ YangmanDesignService.enableMdMenuItem(event);
+ });
+ }
+
+ /**
+ * Clear collections requests list and save to storage
+ */
+ function clearCollectionList(event) {
+ var confirm = $mdDialog.confirm()
+ .title($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TITLE'))
+ .textContent($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TEXT'))
+ .ariaLabel($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TITLE'))
+ .targetEvent(event)
+ .ok($filter('translate')('YANGMAN_OK'))
+ .cancel($filter('translate')('YANGMAN_CANCEL'));
+
+ YangmanDesignService.disableMdMenuItem(event);
+
+ $mdDialog.show(confirm).then(function (){
+ vm.collectionList.clear();
+ vm.collectionList.saveToStorage();
+ $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS');
+ YangmanDesignService.enableMdMenuItem(event);
+ }, function () {
+ YangmanDesignService.enableMdMenuItem(event);
+ });
+ }
+
+ /**
+ * Create history request from other ctrl
+ * @param broadcastEvent
+ * @param params
+ */
+ function saveBcstedHistoryRequest(broadcastEvent, params) {
+ vm.requestList.addItemToList(params.params);
+ vm.requestList.saveToStorage();
+ loadHistoryList();
+ (params.cbk || angular.noop)();
+ }
/**
* Clear value of input file used to import collection
+ * todo: move to design utils
*/
function clearFileInputValue(){
angular.element(document).find('#importCollection').val('');
*/
function readCollectionFromFile($fileContent) {
var data = $fileContent,
- checkArray = ['sentData',
- 'receivedData',
- 'path',
- 'collection',
- 'parametrizedPath',
- 'method',
- 'status',
- 'name',
- ];
-
- if (data && RequestsService.validateFile(data, checkArray)){
+ checkArray = ['sentData', 'receivedData', 'path', 'collection', 'method', 'status', 'name'];
+
+ if (data && YangmanService.validateFile(data, checkArray)){
try {
vm.collectionList.loadListFromFile(data);
vm.collectionList.saveToStorage();
+ $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS');
clearFileInputValue();
}
catch (e) {
else {
clearFileInputValue();
}
+ removeButtonBackground();
+
+ function removeButtonBackground() {
+ $('#importCollection').next().css({ 'background': 'transparent' });
+ }
}
function toggleCollectionsSort() {
*/
function downloadCollection(collection) {
- var cListJSON = vm.collectionList.getCollectionInJSON(collection.name);
+ var cListJSON = vm.collectionList.getCollectionInRawJSON(collection.name);
- HandleFileService.downloadFile(collection.name + '.json', cListJSON, 'json', 'charset=utf-8',
+ YMHandleFileService.downloadFile(collection.name + '.json', cListJSON, 'json', 'charset=utf-8',
function (){},
function (e){
console.error('ExportCollection error:', e);
);
}
+ /**
+ * Fill request form in right panel with request data
+ * @param reqObj
+ */
+ function showForm(reqObj) {
+ var data = reqObj.sentData;
+
+ // exception for get meth
+ if ( reqObj.method === constants.OPERATION_GET ) {
+ data = reqObj.receivedData;
+ }
+
+ $scope.rootBroadcast(
+ 'YANGMAN_SET_CODEMIRROR_DATA_RECEIVED', { data: reqObj.setDataForView(reqObj.receivedData) }
+ );
+ $scope.rootBroadcast(
+ 'YANGMAN_SET_CODEMIRROR_DATA_SENT', { data: reqObj.setDataForView(reqObj.sentData) }
+ );
+
+ $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA',
+ reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {});
+
+ $scope.rootBroadcast('YANGMAN_FILL_NODE_FROM_REQ', { requestUrl: reqObj.path, requestData: data },
+ function (){
+ $scope.setRightPanelSection(constants.DISPLAY_TYPE_FORM);
+ $scope.rootBroadcast('YANGMAN_HEADER_INIT', {
+ path: reqObj.path,
+ method: reqObj.method,
+ statusObj: {
+ status: reqObj.responseStatus,
+ statusText: reqObj.responseStatusText,
+ time: reqObj.responseTime,
+ },
+ });
+
+ if ( $scope.node ) {
+ // prepare data for filling form
+ data = $scope.node.type === constants.NODE_RPC ?
+ YangmanService.prepareReceivedData(
+ $scope.node,
+ reqObj.method,
+ reqObj.receivedData,
+ reqObj.sentData,
+ constants.DISPLAY_TYPE_FORM
+ ) : data;
+
+ // try to fill node
+ YangmanService.fillNodeFromResponse($scope.node, data);
+ $scope.node.expanded = true;
+ }
+
+ }
+ );
+
+ }
/**
- * Show current reqObj sent data in right panel section
+ * Force request header to execute request with data from reqObj
* @param reqObj
- * @param dataType
*/
- function showData(reqObj, dataType) {
- $scope.setRequestToShow(reqObj, dataType);
- $scope.setRightPanelSection('req-data');
- $scope.broadcastFromRoot('YANGMAN_REFRESH_CM_DATA');
- $scope.rootBroadcast('YANGMAN_HEADER_INIT', { path: $scope.requestToShow.path });
+ function executeRequest(reqObj) {
+ showData(reqObj);
+ $scope.rootBroadcast('YANGMAN_EXECUTE_WITH_DATA',{ data: reqObj.sentData });
+ }
+
+ /**
+ * Method for setup data into CM, Header, find api, subapi, node
+ * @param reqObj
+ * @param status
+ */
+ function showData(reqObj, select){
+ var headerObj = {
+ path: reqObj.path,
+ method: reqObj.method,
+ };
+
+ // action select request
+ if ( select ) {
+ headerObj.statusObj = {
+ status: reqObj.responseStatus,
+ statusText: reqObj.responseStatusText,
+ time: reqObj.responseTime,
+ };
+
+ $scope.rootBroadcast(
+ 'YANGMAN_SET_ERROR_DATA',
+ reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {}
+ );
+ }
+
+ $scope.setRightPanelSection(constants.DISPLAY_TYPE_REQ_DATA);
+ $scope.setJsonView(true, reqObj.method !== constants.OPERATION_GET);
+
+ $scope.rootBroadcast('YANGMAN_HEADER_INIT', headerObj);
+ $scope.rootBroadcast('YANGMAN_FILL_NODE_FROM_REQ', { requestUrl: reqObj.path });
+
+ $scope.rootBroadcast(
+ 'YANGMAN_SET_CODEMIRROR_DATA_RECEIVED',
+ { data: reqObj.setDataForView(reqObj.receivedData) }
+ );
+
+ $scope.rootBroadcast(
+ 'YANGMAN_SET_CODEMIRROR_DATA_SENT',
+ { data: reqObj.setDataForView(reqObj.sentData) }
+ );
}
/**
/**
* Dialog for deleting either selected requests or reqObj
*
- * @param ev
+ * @param event
* @param reqObj
*/
- function showDgDeleteRequests(ev, reqObj){
+ function showDgDeleteRequests(event, reqObj){
+
var confirm = $mdDialog.confirm()
.title($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TITLE'))
.textContent($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TEXT'))
.ariaLabel($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TITLE'))
- .targetEvent(ev)
+ .targetEvent(event)
.ok($filter('translate')('YANGMAN_OK'))
.cancel($filter('translate')('YANGMAN_CANCEL'));
+ YangmanDesignService.disableMdMenuItem(event);
+
$mdDialog.show(confirm).then(function (){
if (reqObj){
vm.mainList.deleteRequestItem(reqObj);
}
else {
- vm.mainList.selectedRequests.forEach(function (elem){
+ vm.mainList.getSelectedItems(
+ vm.mainList === vm.collectionList ? filterCollReq : filterReq
+ ).forEach(function (elem){
vm.mainList.deleteRequestItem(elem);
});
}
vm.mainList.saveToStorage();
- loadRequests();
+
+ if (vm.mainList === vm.requestList) {
+ loadHistoryList();
+ }
+ else {
+ refreshCollectionsWithExpansion();
+ }
+ }, function (){
+ YangmanDesignService.enableMdMenuItem(event);
});
}
/**
- * Dialog for delete collection
+ * Dialog for deleting collection and refreshing collections
* @param ev
* @param collObj
*/
function showDgDeleteCollection(ev, collObj){
var confirm = $mdDialog.confirm()
- .title($filter('translate')('YANGMAN_DELETE_COL_CONFIRM_TITLE'))
+ .title($filter('translate')('YANGMAN_DELETE_COL_CONFIRM_TITLE') + ' ' + collObj.name + '?')
.textContent($filter('translate')('YANGMAN_DELETE_COL_CONFIRM_TEXT'))
.ariaLabel($filter('translate')('YANGMAN_DELETE_COL_CONFIRM_TITLE'))
.targetEvent(ev)
.ok($filter('translate')('YANGMAN_OK'))
.cancel($filter('translate')('YANGMAN_CANCEL'));
+ YangmanDesignService.disableMdMenuItem(ev);
+
$mdDialog.show(confirm).then(function (){
vm.collectionList.deleteCollection(collObj);
vm.collectionList.saveToStorage();
- $scope.broadcastFromRoot('YANGMAN_REFRESH_COLLECTIONS');
+ refreshCollectionsWithExpansion();
+ }, function (){
+ YangmanDesignService.enableMdMenuItem(ev);
});
}
* @returns {boolean}
*/
function filterReq(reqObj){
- return reqObj.path.indexOf(vm.search) !== -1;
+ var searchPhrase = vm.search.toLocaleLowerCase();
+ return reqObj.path.toLowerCase().indexOf(searchPhrase) > -1 ||
+ reqObj.collection.toLowerCase().indexOf(searchPhrase) > -1 ||
+ reqObj.method.toLowerCase() === searchPhrase;
}
/**
* @returns {boolean}
*/
function filterColName(colObj){
- return colObj.name.indexOf(vm.search) !== -1;
+ return colObj.name.toLowerCase().indexOf(vm.search.toLowerCase()) > -1;
}
/**
return true;
}
+
/**
* Show dialog for saving reqObj to collection (used for duplicate req too)
* @param ev
targetEvent: ev,
clickOutsideToClose: true,
locals: {
- requests: reqObj ? [reqObj] : vm.requestList.selectedRequests,
+ requests: reqObj ? [reqObj] : vm.mainList.getSelectedItems(
+ vm.mainList === vm.collectionList ? filterCollReq : filterReq
+ ),
collectionNames: vm.collectionList.getCollectionNames(),
duplicate: duplicate || false,
},
*/
function saveRequests(requests){
requests.forEach(function (reqObj){
- vm.collectionList.addRequestToList(reqObj);
+ vm.collectionList.addItemToList(RequestsService.clearUnnecessaryProperties(reqObj.clone()));
vm.collectionList.saveToStorage();
- $scope.broadcastFromRoot('YANGMAN_REFRESH_COLLECTIONS');
+ refreshCollectionsWithExpansion();
});
}
function changeCollectionName(names){
vm.collectionList.renameCollection(names[0], names[1]);
vm.collectionList.saveToStorage();
- $scope.broadcastFromRoot('YANGMAN_REFRESH_COLLECTIONS');
+ refreshCollectionsWithExpansion();
}
/**
- * Create collection duplicate and save
+ * Create collection duplicate, save and refresh collections
* @param {array} names 0. element is old name, 1. element is new name
*/
function duplicateCollection(names){
vm.collectionList.duplicateCollection(names[0], names[1]);
vm.collectionList.saveToStorage();
- $scope.broadcastFromRoot('YANGMAN_REFRESH_COLLECTIONS');
+ refreshCollectionsWithExpansion();
}
+ function selectNewestRequest() {
+ vm.mainList.toggleReqSelection(true, vm.mainList.getNewestRequest());
+ }
- /**
- *
- * @param list collectionList or requestList object
- */
- function useAsMainList(list){
- vm.mainList = list;
+ function loadCollectionsList() {
+ vm.collectionList.loadListFromStorage();
}
- /**
- * Loading history request and grouping by date
- */
- function loadHistoryRequests(){
+ function loadHistoryList() {
vm.requestList.loadListFromStorage();
- vm.requestList.groupListByDate();
}
/**
- * Loading collections
+ *
+ * @param mainList collectionList or requestList object
*/
- function loadCollectionRequest(){
- vm.collectionList.loadListFromStorage();
- }
+ function init(mainList){
+
+ vm.collectionList = RequestsService.createEmptyCollectionList('yangman_collectionsList');
+ // collections are loaded for both history and collections tab
+ loadCollectionsList();
+
+ vm.requestList = RequestsService.createEmptyHistoryList('yangman_requestsList');
+
+
+ // if request was selected, deselect requests in all other instances of RequestsListCtrl
+ $scope.$on('YANGMAN_DESELECT_REQUESTS', function (event, params) {
+ if (params.params.broadcastingCtrl !== vm) {
+ deselectAllRequests();
+ }
+ });
+
+ $scope.$on('YANGMAN_REFRESH_COLLECTIONS', function (event, params){
+ loadCollectionsList();
+ (params.cbk || angular.noop)();
+ });
+
+ // list type dependend operations
+ if (mainList === 'history') {
+
+ vm.mainList = vm.requestList;
+ loadHistoryList();
+
+ $scope.$on('YANGMAN_REFRESH_HISTORY', loadHistoryList);
+ // saving from request header after execution
+ $scope.$on('YANGMAN_SAVE_EXECUTED_REQUEST', saveBcstedHistoryRequest);
+ // select newest request
+ $scope.$on('YANGMAN_SELECT_THE_NEWEST_REQUEST', selectNewestRequest);
+ }
+ else {
+ vm.mainList = vm.collectionList;
+ // saving from request header
+ $scope.$on('YANGMAN_SAVE_REQUEST_TO_COLLECTION', saveRequestFromExt);
+ // saving collections expanded status on refresh
+ $scope.$on('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS', function(){
+ var expandedColNames = vm.collectionList.getExpandedCollectionNames();
+ $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS', {}, function (){
+ vm.collectionList.expandCollectionByNames(expandedColNames);
+ });
+ });
+ }
- /**
- * Loading both history and collections reqs
- */
- function loadRequests(){
- loadHistoryRequests();
- loadCollectionRequest();
}
+
/**
* Request in list selection
* For history reqs it is possible multiselect, thats why event.ctrlKey is used
* @param requestObj
*/
function selectRequest(event, requestObj){
+ $scope.rootBroadcast('YANGMAN_DESELECT_REQUESTS', { broadcastingCtrl: vm });
vm.mainList.toggleReqSelection(!event.ctrlKey, requestObj);
- $scope.setHistoryReqsSelected(vm.requestList.selectedRequests.length > 0);
+ if (!event.ctrlKey){
+ vm.showData(requestObj, true);
+ }
}
/**
- *
- * @param pathString
- * @returns {*}
+ * Mark only requestObj in current list as selected
+ * Used for example when user clicks on request submenu
+ * @param requestObj
*/
- function getApiCallback(pathString) {
- var snp = PathUtilsService.getStorageAndNormalizedPath(pathString),
- // if the path is for mountpoint then get the path to treedata structure
- mpSearchPath = MountPointsConnectorService.alterMpPath(pathString),
- apiIndexes = PathUtilsService.searchNodeByPath(mpSearchPath, $scope.treeApis, $scope.treeRows),
- selApi = apiIndexes ? $scope.apis[apiIndexes.indexApi] : null,
- selSubApi = selApi ? selApi.subApis[apiIndexes.indexSubApi] : null,
- copiedApi = selSubApi ?
- selSubApi.clone({ storage: snp.storage, withoutNode: true, clonePathArray: true }) :
- null;
-
- if (copiedApi) {
- copiedApi.pathArray.forEach(function (p) {
- p.hover = false;
- });
+ function selectOnlyThisRequest(requestObj){
+ vm.mainList.toggleReqSelection(true, requestObj);
+ }
- PathUtilsService.fillPath(copiedApi.pathArray, snp.normalizedPath);
- }
+ /**
+ * Deselect history requests
+ */
+ function deselectAllFilteredReqs(){
+ vm.mainList.deselectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq);
+ }
- var searchedModule = PathUtilsService.getModuleNameFromPath(pathString);
+ function deselectAllRequests() {
+ vm.mainList.deselectAllItems();
+ }
- if (mpSearchPath.indexOf(mountPrefix) !== -1 && copiedApi){
- copiedApi = $scope.selSubApi &&
- searchedModule === $scope.selSubApi.pathArray[1].module ?
- copiedApi :
- null;
- }
+ /**
+ * Select history requests
+ */
+ function selectAllFilteredReqs(){
+ vm.mainList.selectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq);
+ }
- return copiedApi;
+ /**
+ * Use when selecting filtered requests if they are saved to some collection
+ * Additional filter is if the collection of the request is expanded
+ * @param request
+ * @returns {*|boolean}
+ */
+ function filterCollReq(request) {
+ return vm.collectionList.getCollection(request.collection).expanded && vm.filterReq(request);
}
+
+ /**
+ * Refresh and expand collections
+ */
+ function refreshCollectionsWithExpansion(){
+ $scope.rootBroadcast('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS');
+ }
+
}
});