From 04c1928c44a232a12c5c04fc5d92fad284a7bd82 Mon Sep 17 00:00:00 2001 From: Eric Nguyen Date: Fri, 20 Oct 2023 16:21:21 +0700 Subject: [PATCH] fix bugs --- .../wwwroot/mix-app/js/app-portal.min.js | 4908 +++++++++-------- .../app-portal/pages/application/details.html | 2 +- .../Domain/Services/MixApplicationService.cs | 1 + 3 files changed, 2458 insertions(+), 2453 deletions(-) diff --git a/src/applications/Mixcore/wwwroot/mix-app/js/app-portal.min.js b/src/applications/Mixcore/wwwroot/mix-app/js/app-portal.min.js index f0b0df340..bb2e51234 100644 --- a/src/applications/Mixcore/wwwroot/mix-app/js/app-portal.min.js +++ b/src/applications/Mixcore/wwwroot/mix-app/js/app-portal.min.js @@ -1,4 +1,4 @@ -/* Thu Oct 19 2023 18:51:13 GMT+0700 (Indochina Time) */"use strict"; +/* Fri Oct 20 2023 16:03:17 GMT+0700 (Indochina Time) */"use strict"; var app = angular.module("MixPortal", [ "angularCroppie", "ui.bootstrap", @@ -710,7 +710,11 @@ app.controller("MixApplicationController", [ $scope.$apply(); } break; - + case "Finished": + $scope.installStatus = "Finished"; + $location.url("/admin/mix-application/list"); + $scope.$apply(); + break; default: setTimeout(() => { $scope.status = msg.message; @@ -802,180 +806,6 @@ app.factory("MixApplicationRestService", [ }, ]); -"use strict"; -app.controller("CultureController", [ - "$scope", - "$rootScope", - "ngAppSettings", - "$routeParams", - "CultureService", - "CommonService", - "ApiService", - function ( - $scope, - $rootScope, - ngAppSettings, - $routeParams, - service, - commonService, - apiService - ) { - $scope.selected = null; - BaseCtrl.call( - this, - $scope, - $rootScope, - $routeParams, - ngAppSettings, - service - ); - $scope.loadCultures = async function () { - var getCultures = await commonService.loadJsonData("cultures"); - $scope.cultures = getCultures.data.items; - $scope.$apply(); - }; - $scope.saveSuccessCallback = function () { - apiService - .initAllSettings() - .then(() => (window.location.href = "/admin/language/list")); - }; - $scope.removeCallback = function () { - apiService - .initAllSettings() - .then(() => (window.location.href = "/admin/language/list")); - }; - $scope.changeData = function (selected) { - if (selected) { - $scope.viewmodel.specificulture = selected.specificulture; - $scope.viewmodel.displayName = selected.fullName; - $scope.viewmodel.icon = selected.icon; - } - }; - }, -]); - -"use strict"; -app.factory("CultureService", [ - "BaseRestService", - function (baseService) { - var serviceFactory = Object.create(baseService); - serviceFactory.init("culture"); - var _updateInfos = async function (pages) { - var req = { - method: "POST", - url: this.prefixUrl + "/update-infos", - data: JSON.stringify(pages), - }; - return await apiService.sendRequest(req); - }; - - var _syncTemplates = async function (id) { - var apiUrl = "/culture/"; - var url = apiUrl + "sync/" + id; - var req = { - method: "GET", - url: url, - }; - return await apiService.sendRequest(req); - }; - - serviceFactory.syncTemplates = _syncTemplates; - serviceFactory.updateInfos = _updateInfos; - return serviceFactory; - }, -]); - -"use strict"; -app.controller("DashboardController", [ - "$scope", - "$rootScope", - "ngAppSettings", - "$timeout", - "$location", - "DashboardServices", - function ( - $scope, - $rootScope, - ngAppSettings, - $timeout, - $location, - dashboardServices - ) { - $scope.pageClass = "page-dashboard"; - $(".side-nav li").removeClass("active"); - $(".side-nav .page-dashboard").addClass("active"); - $scope.data = { - totalPage: 0, - totalPost: 0, - totalProduct: 0, - totalUser: 0, - }; - $scope.users = []; - $scope.$on("$viewContentLoaded", function () { - $rootScope.isBusy = false; - }); - $scope.getDashboardInfo = async function () { - $rootScope.isBusy = true; - // var response = await dashboardServices.getDashboardInfo(); - // if (response.success) { - // // $('#mainSection').removeClass('card'); - // $scope.data = response.data; - // $rootScope.isBusy = false; - // $scope.$apply(); - // // $scope.getChart(); - // } else { - // $rootScope.showErrors(response.errors); - // $rootScope.isBusy = false; - // $scope.$apply(); - // } - }; - $scope.getChart = function () { - var ctx = document.getElementById("myChart"); - var myChart = new Chart(ctx, { - // type: 'pie', - // data: { - // labels: ["Africa", "Asia", "Europe", "Latin America", "North America"], - // datasets: [{ - // label: "Population (millions)", - // backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850"], - // data: [2478,5267,734,784,433] - // }] - // }, - // options: { - // title: { - // display: true, - // text: 'Predicted world population (millions) in 2050' - // } - // } - }); - }; - }, -]); - -"use strict"; -app.factory("DashboardServices", [ - "$rootScope", - "$http", - "ApiService", - "CommonService", - function ($rootScope, $http, apiService, commonService) { - //var serviceBase = 'http://ngauthenticationapi.azurewebsites.net/'; - - var usersServiceFactory = {}; - var apiUrl = "/rest/portal/common/" + $rootScope.globalSettings.lang; - var _getDashboardInfo = async function () { - var req = { - method: "GET", - url: apiUrl + "/dashboard", - }; - return await apiService.sendRequest(req); - }; - - usersServiceFactory.getDashboardInfo = _getDashboardInfo; - return usersServiceFactory; - }, -]); - "use strict"; app.controller("CustomerController", [ "$scope", @@ -1178,67 +1008,241 @@ app.factory("CustomerServices", [ ]); "use strict"; -app.controller("DomainController", [ +app.controller("CultureController", [ "$scope", "$rootScope", "ngAppSettings", - "$location", "$routeParams", - "DomainRestService", + "CultureService", + "CommonService", + "ApiService", function ( $scope, $rootScope, ngAppSettings, - $location, $routeParams, - service + service, + commonService, + apiService ) { - BaseRestCtrl.call( + $scope.selected = null; + BaseCtrl.call( this, $scope, $rootScope, - $location, $routeParams, ngAppSettings, service ); - $scope.request.columns = [ - "id", - "displayName", - "host", - "createdDateTime", - "createdBy", - ]; - $scope.canDrag = - $scope.request.orderBy !== "Priority" || $scope.request.direction !== "0"; + $scope.loadCultures = async function () { + var getCultures = await commonService.loadJsonData("cultures"); + $scope.cultures = getCultures.data.items; + $scope.$apply(); + }; + $scope.saveSuccessCallback = function () { + apiService + .initAllSettings() + .then(() => (window.location.href = "/admin/language/list")); + }; + $scope.removeCallback = function () { + apiService + .initAllSettings() + .then(() => (window.location.href = "/admin/language/list")); + }; + $scope.changeData = function (selected) { + if (selected) { + $scope.viewmodel.specificulture = selected.specificulture; + $scope.viewmodel.displayName = selected.fullName; + $scope.viewmodel.icon = selected.icon; + } + }; }, ]); "use strict"; -app.factory("DomainRestService", [ +app.factory("CultureService", [ "BaseRestService", function (baseService) { var serviceFactory = Object.create(baseService); - serviceFactory.init("mix-domain"); + serviceFactory.init("culture"); + var _updateInfos = async function (pages) { + var req = { + method: "POST", + url: this.prefixUrl + "/update-infos", + data: JSON.stringify(pages), + }; + return await apiService.sendRequest(req); + }; + + var _syncTemplates = async function (id) { + var apiUrl = "/culture/"; + var url = apiUrl + "sync/" + id; + var req = { + method: "GET", + url: url, + }; + return await apiService.sendRequest(req); + }; + + serviceFactory.syncTemplates = _syncTemplates; + serviceFactory.updateInfos = _updateInfos; return serviceFactory; }, ]); "use strict"; -app.controller("FileController", [ +app.controller("DashboardController", [ "$scope", "$rootScope", "ngAppSettings", - "$routeParams", "$timeout", "$location", - "AuthService", - "FileServices", + "DashboardServices", function ( $scope, $rootScope, ngAppSettings, - $routeParams, + $timeout, + $location, + dashboardServices + ) { + $scope.pageClass = "page-dashboard"; + $(".side-nav li").removeClass("active"); + $(".side-nav .page-dashboard").addClass("active"); + $scope.data = { + totalPage: 0, + totalPost: 0, + totalProduct: 0, + totalUser: 0, + }; + $scope.users = []; + $scope.$on("$viewContentLoaded", function () { + $rootScope.isBusy = false; + }); + $scope.getDashboardInfo = async function () { + $rootScope.isBusy = true; + // var response = await dashboardServices.getDashboardInfo(); + // if (response.success) { + // // $('#mainSection').removeClass('card'); + // $scope.data = response.data; + // $rootScope.isBusy = false; + // $scope.$apply(); + // // $scope.getChart(); + // } else { + // $rootScope.showErrors(response.errors); + // $rootScope.isBusy = false; + // $scope.$apply(); + // } + }; + $scope.getChart = function () { + var ctx = document.getElementById("myChart"); + var myChart = new Chart(ctx, { + // type: 'pie', + // data: { + // labels: ["Africa", "Asia", "Europe", "Latin America", "North America"], + // datasets: [{ + // label: "Population (millions)", + // backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850"], + // data: [2478,5267,734,784,433] + // }] + // }, + // options: { + // title: { + // display: true, + // text: 'Predicted world population (millions) in 2050' + // } + // } + }); + }; + }, +]); + +"use strict"; +app.factory("DashboardServices", [ + "$rootScope", + "$http", + "ApiService", + "CommonService", + function ($rootScope, $http, apiService, commonService) { + //var serviceBase = 'http://ngauthenticationapi.azurewebsites.net/'; + + var usersServiceFactory = {}; + var apiUrl = "/rest/portal/common/" + $rootScope.globalSettings.lang; + var _getDashboardInfo = async function () { + var req = { + method: "GET", + url: apiUrl + "/dashboard", + }; + return await apiService.sendRequest(req); + }; + + usersServiceFactory.getDashboardInfo = _getDashboardInfo; + return usersServiceFactory; + }, +]); + +"use strict"; +app.controller("DomainController", [ + "$scope", + "$rootScope", + "ngAppSettings", + "$location", + "$routeParams", + "DomainRestService", + function ( + $scope, + $rootScope, + ngAppSettings, + $location, + $routeParams, + service + ) { + BaseRestCtrl.call( + this, + $scope, + $rootScope, + $location, + $routeParams, + ngAppSettings, + service + ); + $scope.request.columns = [ + "id", + "displayName", + "host", + "createdDateTime", + "createdBy", + ]; + $scope.canDrag = + $scope.request.orderBy !== "Priority" || $scope.request.direction !== "0"; + }, +]); + +"use strict"; +app.factory("DomainRestService", [ + "BaseRestService", + function (baseService) { + var serviceFactory = Object.create(baseService); + serviceFactory.init("mix-domain"); + return serviceFactory; + }, +]); + +"use strict"; +app.controller("FileController", [ + "$scope", + "$rootScope", + "ngAppSettings", + "$routeParams", + "$timeout", + "$location", + "AuthService", + "FileServices", + function ( + $scope, + $rootScope, + ngAppSettings, + $routeParams, $timeout, $location, authService, @@ -2093,6 +2097,78 @@ app.controller("MixDatabaseController", [ }, ]); +"use strict"; +app.controller("MixDatabaseContextController", [ + "$scope", + "$rootScope", + "$location", + "ngAppSettings", + "$routeParams", + "RestMixDatabaseContextService", + function ( + $scope, + $rootScope, + $location, + ngAppSettings, + $routeParams, + mixdbContextService + ) { + BaseRestCtrl.call( + this, + $scope, + $rootScope, + $location, + $routeParams, + ngAppSettings, + mixdbContextService + ); + $scope.defaultAttr = null; + $scope.databaseProvider = ["MySQL", "PostgreSQL", "SQLITE", "SQLSERVER"]; + $scope.actions = ["Delete"]; + // $scope.request.selects = 'id,title,name,createdDateTime'; + $scope.orders = [ + { title: "Id", value: "Id" }, + { title: "Name", value: "DisplayName" }, + { title: "Created Date", value: "CreatedDateTime" }, + ]; + $scope.request.orderBy = "CreatedDateTime"; + $scope.request.columns = "id,displayName,systemName,type,createdDatetime"; + $scope.request.searchColumns = "displayName,systemName"; + $scope.saveDatabase = function () { + $scope.save($scope.viewmodel); + }; + $scope.generateName = function () { + $scope.viewmodel.systemName = $rootScope.generateKeyword( + $scope.viewmodel.displayName, + "_", + true, + true + ); + }; + $scope.getSingleSuccessCallback = async function () {}; + }, +]); + +"use strict"; +app.factory("RestMixDatabaseContextService", [ + "BaseRestService", + function (baseService) { + var serviceFactory = Object.create(baseService); + serviceFactory.init("mixdb-context"); + + var _getByName = async function (name) { + var url = `${this.prefixUrl}/get-by-name/${name}`; + var req = { + method: "GET", + url: url, + }; + return await this.getRestApiResult(req); + }; + serviceFactory.getByName = _getByName; + return serviceFactory; + }, +]); + "use strict"; app.controller("MixDatabaseDataController", [ "$scope", @@ -2445,20 +2521,26 @@ app.controller("MixDatabaseDataController", [ ]); "use strict"; -app.controller("MixDatabaseContextController", [ +app.controller("ModuleController", [ "$scope", "$rootScope", - "$location", "ngAppSettings", + "$location", "$routeParams", - "RestMixDatabaseContextService", + "ModuleRestService", + "SharedModuleDataService", + "RestMixDatabaseDataPortalService", + "RestMixDatabaseColumnPortalService", function ( $scope, $rootScope, - $location, ngAppSettings, + $location, $routeParams, - mixdbContextService + moduleServices, + moduleDataService, + dataService, + columnService ) { BaseRestCtrl.call( this, @@ -2467,86 +2549,8 @@ app.controller("MixDatabaseContextController", [ $location, $routeParams, ngAppSettings, - mixdbContextService - ); - $scope.defaultAttr = null; - $scope.databaseProvider = ["MySQL", "PostgreSQL", "SQLITE", "SQLSERVER"]; - $scope.actions = ["Delete"]; - // $scope.request.selects = 'id,title,name,createdDateTime'; - $scope.orders = [ - { title: "Id", value: "Id" }, - { title: "Name", value: "DisplayName" }, - { title: "Created Date", value: "CreatedDateTime" }, - ]; - $scope.request.orderBy = "CreatedDateTime"; - $scope.request.columns = "id,displayName,systemName,type,createdDatetime"; - $scope.request.searchColumns = "displayName,systemName"; - $scope.saveDatabase = function () { - $scope.save($scope.viewmodel); - }; - $scope.generateName = function () { - $scope.viewmodel.systemName = $rootScope.generateKeyword( - $scope.viewmodel.displayName, - "_", - true, - true - ); - }; - $scope.getSingleSuccessCallback = async function () {}; - }, -]); - -"use strict"; -app.factory("RestMixDatabaseContextService", [ - "BaseRestService", - function (baseService) { - var serviceFactory = Object.create(baseService); - serviceFactory.init("mixdb-context"); - - var _getByName = async function (name) { - var url = `${this.prefixUrl}/get-by-name/${name}`; - var req = { - method: "GET", - url: url, - }; - return await this.getRestApiResult(req); - }; - serviceFactory.getByName = _getByName; - return serviceFactory; - }, -]); - -"use strict"; -app.controller("ModuleController", [ - "$scope", - "$rootScope", - "ngAppSettings", - "$location", - "$routeParams", - "ModuleRestService", - "SharedModuleDataService", - "RestMixDatabaseDataPortalService", - "RestMixDatabaseColumnPortalService", - function ( - $scope, - $rootScope, - ngAppSettings, - $location, - $routeParams, - moduleServices, - moduleDataService, - dataService, - columnService - ) { - BaseRestCtrl.call( - this, - $scope, - $rootScope, - $location, - $routeParams, - ngAppSettings, - moduleServices, - "product" + moduleServices, + "product" ); $scope.request.culture = $rootScope.globalSettings.defaultCulture; $scope.viewmodelType = "module"; @@ -3235,6 +3239,191 @@ app.factory("RestOrderDetailService", [ }, ]); +"use strict"; +app.controller("ModulePostController", [ + "$scope", + "$rootScope", + "ngAppSettings", + "$routeParams", + "$location", + "ModulePostRestService", + "ApiService", + "CommonService", + function ( + $scope, + $rootScope, + ngAppSettings, + $routeParams, + $location, + service, + commonService + ) { + BaseCtrl.call( + this, + $scope, + $rootScope, + $routeParams, + ngAppSettings, + service + ); + $scope.request.culture = $rootScope.globalSettings.defaultCulture; + $scope.cates = ["Site", "System"]; + $scope.others = []; + $scope.mixConfigurations = $rootScope.globalSettings; + $scope.canDrag = + $scope.request.orderBy !== "Priority" || $scope.request.direction !== "0"; + $scope.translate = $rootScope.translate; + $scope.moduleIds = $routeParams.moduleIds || $routeParams.id; + $scope.pageIds = $routeParams.page_ids; + $scope.type = $routeParams.type; + $scope.template = $routeParams.template || ""; + + $scope.init = function () { + $scope.createUrl = `/admin/post/create?page_ids=${$scope.pageIds}&moduleIds=${$scope.moduleIds}&type=${$scope.type}&template=${$scope.template}`; + $scope.getList(); + }; + $scope.getList = async function (pageIndex) { + $rootScope.isBusy = true; + if (pageIndex !== undefined) { + $scope.request.pageIndex = pageIndex; + } + var id = $routeParams.id; + $scope.moduleContentId = $routeParams.id; + $scope.request.parentId = id; + $scope.canDrag = + $scope.request.orderBy !== "Priority" || + $scope.request.direction !== "0"; + var response = await service.search($scope.request); + if (response.success) { + $scope.data = response.data; + $rootScope.isBusy = false; + $scope.$apply(); + } else { + $rootScope.showErrors(response.errors); + $rootScope.isBusy = false; + $scope.$apply(); + } + }; + $scope.preview = function (item) { + item.editUrl = "/admin/post/details/" + item.id; + $rootScope.preview("post", item, item.title, "modal-lg"); + }; + $scope.remove = function (id) { + $rootScope.showConfirm( + $scope, + "removeConfirmed", + [id], + null, + "Remove", + "Deleted data will not able to recover, are you sure you want to delete this item?" + ); + }; + + $scope.removeConfirmed = async function (id) { + $rootScope.isBusy = true; + var result = await service.delete(id); + if (result.success) { + if ($scope.removeCallback) { + $rootScope.executeFunctionByName( + "removeCallback", + $scope.removeCallbackArgs, + $scope + ); + } + $scope.getList(); + } else { + $rootScope.showMessage("failed"); + $rootScope.isBusy = false; + $scope.$apply(); + } + }; + + $scope.removeCallback = function () {}; + + $scope.saveOthers = async function () { + var response = await service.saveList($scope.others); + if (response.success) { + $scope.getList(); + $scope.$apply(); + } else { + $rootScope.showErrors(response.errors); + $rootScope.isBusy = false; + $scope.$apply(); + } + }; + $scope.updateInfos = async function (index) { + $scope.data.items.splice(index, 1); + $rootScope.isBusy = true; + var startIndex = $scope.data.items[0].priority - 1; + for (var i = 0; i < $scope.data.items.length; i++) { + $scope.data.items[i].priority = startIndex + i + 1; + } + var resp = await service.updateInfos($scope.data.items); + if (resp && resp.success) { + $scope.activedPage = resp.data; + $rootScope.showMessage("success", "success"); + $rootScope.isBusy = false; + $scope.$apply(); + } else { + if (resp) { + $rootScope.showErrors(resp.errors); + } + $rootScope.isBusy = false; + $scope.$apply(); + } + }; + }, +]); + +"use strict"; +app.factory("ModulePostRestService", [ + "$rootScope", + "ApiService", + "CommonService", + "BaseRestService", + function ($rootScope, apiService, commonService, baseService) { + var serviceFactory = Object.create(baseService); + serviceFactory.init("module-post"); + + var _search = async function (objData) { + var data = serviceFactory.parseQuery(objData); + var url = this.prefixUrl; + + if (data) { + url += "/search?"; + url = url.concat(data); + } + var req = { + serviceBase: this.serviceBase, + method: "GET", + url: url, + }; + return await this.getRestApiResult(req); + }; + + var _delete = async function (id) { + var url = this.prefixUrl + "/" + id; + var req = { + method: "DELETE", + url: url, + }; + return await apiService.sendRequest(req); + }; + var _updateInfos = async function (modules) { + var req = { + method: "POST", + url: this.prefixUrl + "/update-infos", + data: JSON.stringify(modules), + }; + return await apiService.sendRequest(req); + }; + serviceFactory.search = _search; + serviceFactory.delete = _delete; + serviceFactory.updateInfos = _updateInfos; + return serviceFactory; + }, +]); + "use strict"; app.controller("PageController", [ "$scope", @@ -3592,13 +3781,14 @@ app.factory("PageRestService", [ ]); "use strict"; -app.controller("ModulePostController", [ +app.controller("PagePostController", [ "$scope", "$rootScope", "ngAppSettings", "$routeParams", "$location", - "ModulePostRestService", + "PagePostRestService", + "PostRestService", "ApiService", "CommonService", function ( @@ -3608,6 +3798,7 @@ app.controller("ModulePostController", [ $routeParams, $location, service, + postService, commonService ) { BaseCtrl.call( @@ -3622,30 +3813,35 @@ app.controller("ModulePostController", [ $scope.cates = ["Site", "System"]; $scope.others = []; $scope.mixConfigurations = $rootScope.globalSettings; - $scope.canDrag = - $scope.request.orderBy !== "Priority" || $scope.request.direction !== "0"; - $scope.translate = $rootScope.translate; - $scope.moduleIds = $routeParams.moduleIds || $routeParams.id; - $scope.pageIds = $routeParams.page_ids; - $scope.type = $routeParams.type; - $scope.template = $routeParams.template || ""; - $scope.init = function () { - $scope.createUrl = `/admin/post/create?page_ids=${$scope.pageIds}&moduleIds=${$scope.moduleIds}&type=${$scope.type}&template=${$scope.template}`; - $scope.getList(); + $scope.pageId = $routeParams.id; + $scope.type = $routeParams.type || ""; + $scope.template = $routeParams.template || ""; + $scope.pageIds = $routeParams.page_ids || $routeParams.id || ""; + $scope.moduleIds = $routeParams.module_ids || ""; + $scope.canDrag = + $scope.request.orderBy === "Priority" && + $scope.request.direction === "Asc"; + $scope.createUrl = + $routeParams.post_type === "gallery" + ? "/admin/post/create-gallery" + : `/admin/post/create?page_ids=${$scope.pageIds}&moduleIds=${$scope.moduleIds}&type=${$scope.type}&template=${$scope.template}`; + $scope.updateUrl = + $routeParams.post_type === "gallery" + ? "/admin/post/gallery-details" + : "/admin/post/details"; }; $scope.getList = async function (pageIndex) { - $rootScope.isBusy = true; if (pageIndex !== undefined) { $scope.request.pageIndex = pageIndex; } + $rootScope.isBusy = true; var id = $routeParams.id; - $scope.moduleContentId = $routeParams.id; - $scope.request.parentId = id; + $scope.request.query = "&page_id=" + id; + var response = await service.getList($scope.request); $scope.canDrag = - $scope.request.orderBy !== "Priority" || - $scope.request.direction !== "0"; - var response = await service.search($scope.request); + $scope.request.orderBy === "Priority" && + $scope.request.direction === "Asc"; if (response.success) { $scope.data = response.data; $rootScope.isBusy = false; @@ -3660,16 +3856,19 @@ app.controller("ModulePostController", [ item.editUrl = "/admin/post/details/" + item.id; $rootScope.preview("post", item, item.title, "modal-lg"); }; - $scope.remove = function (id) { + $scope.remove = function (pageId, postId) { $rootScope.showConfirm( $scope, "removeConfirmed", - [id], + [pageId, postId], null, "Remove", "Deleted data will not able to recover, are you sure you want to delete this item?" ); }; + $scope.back = function () { + window.history.back(); + }; $scope.removeConfirmed = async function (id) { $rootScope.isBusy = true; @@ -3684,14 +3883,12 @@ app.controller("ModulePostController", [ } $scope.getList(); } else { - $rootScope.showMessage("failed"); + $rootScope.showErrors(result.errors); $rootScope.isBusy = false; $scope.$apply(); } }; - $scope.removeCallback = function () {}; - $scope.saveOthers = async function () { var response = await service.saveList($scope.others); if (response.success) { @@ -3728,48 +3925,30 @@ app.controller("ModulePostController", [ ]); "use strict"; -app.factory("ModulePostRestService", [ +app.factory("PagePostRestService", [ "$rootScope", "ApiService", "CommonService", "BaseRestService", function ($rootScope, apiService, commonService, baseService) { var serviceFactory = Object.create(baseService); - serviceFactory.init("module-post"); - - var _search = async function (objData) { - var data = serviceFactory.parseQuery(objData); - var url = this.prefixUrl; - - if (data) { - url += "/search?"; - url = url.concat(data); - } - var req = { - serviceBase: this.serviceBase, - method: "GET", - url: url, - }; - return await this.getRestApiResult(req); - }; - + serviceFactory.init("mix-page-post"); var _delete = async function (id) { - var url = this.prefixUrl + "/" + id; + var url = this.prefixUrl + "/delete/" + id; var req = { - method: "DELETE", + method: "GET", url: url, }; - return await apiService.sendRequest(req); + return await apiService.getApiResult(req); }; - var _updateInfos = async function (modules) { + var _updateInfos = async function (pages) { var req = { method: "POST", url: this.prefixUrl + "/update-infos", - data: JSON.stringify(modules), + data: JSON.stringify(pages), }; - return await apiService.sendRequest(req); + return await apiService.getApiResult(req); }; - serviceFactory.search = _search; serviceFactory.delete = _delete; serviceFactory.updateInfos = _updateInfos; return serviceFactory; @@ -3926,181 +4105,6 @@ app.factory("PageGalleryService", [ }, ]); -"use strict"; -app.controller("PagePostController", [ - "$scope", - "$rootScope", - "ngAppSettings", - "$routeParams", - "$location", - "PagePostRestService", - "PostRestService", - "ApiService", - "CommonService", - function ( - $scope, - $rootScope, - ngAppSettings, - $routeParams, - $location, - service, - postService, - commonService - ) { - BaseCtrl.call( - this, - $scope, - $rootScope, - $routeParams, - ngAppSettings, - service - ); - $scope.request.culture = $rootScope.globalSettings.defaultCulture; - $scope.cates = ["Site", "System"]; - $scope.others = []; - $scope.mixConfigurations = $rootScope.globalSettings; - $scope.init = function () { - $scope.pageId = $routeParams.id; - $scope.type = $routeParams.type || ""; - $scope.template = $routeParams.template || ""; - $scope.pageIds = $routeParams.page_ids || $routeParams.id || ""; - $scope.moduleIds = $routeParams.module_ids || ""; - $scope.canDrag = - $scope.request.orderBy === "Priority" && - $scope.request.direction === "Asc"; - $scope.createUrl = - $routeParams.post_type === "gallery" - ? "/admin/post/create-gallery" - : `/admin/post/create?page_ids=${$scope.pageIds}&moduleIds=${$scope.moduleIds}&type=${$scope.type}&template=${$scope.template}`; - $scope.updateUrl = - $routeParams.post_type === "gallery" - ? "/admin/post/gallery-details" - : "/admin/post/details"; - }; - $scope.getList = async function (pageIndex) { - if (pageIndex !== undefined) { - $scope.request.pageIndex = pageIndex; - } - $rootScope.isBusy = true; - var id = $routeParams.id; - $scope.request.query = "&page_id=" + id; - var response = await service.getList($scope.request); - $scope.canDrag = - $scope.request.orderBy === "Priority" && - $scope.request.direction === "Asc"; - if (response.success) { - $scope.data = response.data; - $rootScope.isBusy = false; - $scope.$apply(); - } else { - $rootScope.showErrors(response.errors); - $rootScope.isBusy = false; - $scope.$apply(); - } - }; - $scope.preview = function (item) { - item.editUrl = "/admin/post/details/" + item.id; - $rootScope.preview("post", item, item.title, "modal-lg"); - }; - $scope.remove = function (pageId, postId) { - $rootScope.showConfirm( - $scope, - "removeConfirmed", - [pageId, postId], - null, - "Remove", - "Deleted data will not able to recover, are you sure you want to delete this item?" - ); - }; - $scope.back = function () { - window.history.back(); - }; - - $scope.removeConfirmed = async function (id) { - $rootScope.isBusy = true; - var result = await service.delete(id); - if (result.success) { - if ($scope.removeCallback) { - $rootScope.executeFunctionByName( - "removeCallback", - $scope.removeCallbackArgs, - $scope - ); - } - $scope.getList(); - } else { - $rootScope.showErrors(result.errors); - $rootScope.isBusy = false; - $scope.$apply(); - } - }; - - $scope.saveOthers = async function () { - var response = await service.saveList($scope.others); - if (response.success) { - $scope.getList(); - $scope.$apply(); - } else { - $rootScope.showErrors(response.errors); - $rootScope.isBusy = false; - $scope.$apply(); - } - }; - $scope.updateInfos = async function (index) { - $scope.data.items.splice(index, 1); - $rootScope.isBusy = true; - var startIndex = $scope.data.items[0].priority - 1; - for (var i = 0; i < $scope.data.items.length; i++) { - $scope.data.items[i].priority = startIndex + i + 1; - } - var resp = await service.updateInfos($scope.data.items); - if (resp && resp.success) { - $scope.activedPage = resp.data; - $rootScope.showMessage("success", "success"); - $rootScope.isBusy = false; - $scope.$apply(); - } else { - if (resp) { - $rootScope.showErrors(resp.errors); - } - $rootScope.isBusy = false; - $scope.$apply(); - } - }; - }, -]); - -"use strict"; -app.factory("PagePostRestService", [ - "$rootScope", - "ApiService", - "CommonService", - "BaseRestService", - function ($rootScope, apiService, commonService, baseService) { - var serviceFactory = Object.create(baseService); - serviceFactory.init("mix-page-post"); - var _delete = async function (id) { - var url = this.prefixUrl + "/delete/" + id; - var req = { - method: "GET", - url: url, - }; - return await apiService.getApiResult(req); - }; - var _updateInfos = async function (pages) { - var req = { - method: "POST", - url: this.prefixUrl + "/update-infos", - data: JSON.stringify(pages), - }; - return await apiService.getApiResult(req); - }; - serviceFactory.delete = _delete; - serviceFactory.updateInfos = _updateInfos; - return serviceFactory; - }, -]); - "use strict"; app.controller("PermissionController", [ "$scope", @@ -4249,17 +4253,120 @@ app.factory("RestPortalPageNavigationService", [ ]); "use strict"; -app.controller("PostController", [ +app.controller("QueueLogController", [ "$scope", "$rootScope", - "$location", - "$filter", "ngAppSettings", + "$location", "$routeParams", - "PostRestService", - "UrlAliasService", - "RestMixDatabaseDataPortalService", - "RestMixDatabaseColumnPortalService", + "AuthService", + "QueueLogRestService", + function ( + $scope, + $rootScope, + ngAppSettings, + $location, + $routeParams, + authService, + service + ) { + BaseRestCtrl.call( + this, + $scope, + $rootScope, + $location, + $routeParams, + ngAppSettings, + service + ); + authService.fillAuthData(); + $scope.request.status = null; + $scope.messages = []; + $scope.canDrag = + $scope.request.orderBy !== "Priority" || $scope.request.direction !== "0"; + $scope.getListSuccessCallback = function () { + angular.forEach($scope.data.items, function (e) { + switch (e.state) { + case "ACK": + e.objClass = "text-success"; + break; + case "NACK": + e.objClass = "text-warning"; + break; + case "FAILED": + e.objClass = "text-danger"; + break; + default: + e.objClass = "text-info"; + break; + } + }); + }; + $scope.view = function (item) { + switch (item.state) { + case "ACK": + item.objClass = "text-success"; + break; + case "NACK": + item.objClass = "text-warning"; + break; + case "FAILED": + item.objClass = "text-danger"; + break; + default: + item.objClass = "text-info"; + break; + } + $rootScope.preview("object", item, null, "modal-lg"); + }; + }, +]); + +"use strict"; +app.factory("QueueLogRestService", [ + "BaseRestService", + function (baseService) { + var serviceFactory = angular.copy(baseService); + serviceFactory.initService("/rest", "mix-log/queue-log", true); + var _search = async function (objData, queries = null) { + var data = serviceFactory.parseQuery(objData); + + var url = `${this.prefixUrl}/search`; + + if (data) { + url += "?"; + url = url.concat(data); + if (queries) { + url += "&"; + var extraQueries = serviceFactory.parseQuery(queries); + url = url.concat(extraQueries); + } + } + var req = { + serviceBase: this.serviceBase, + apiVersion: this.apiVersion, + method: "GET", + url: url, + }; + return await this.getRestApiResult(req); + }; + serviceFactory.getList = _search; + return serviceFactory; + }, +]); + +"use strict"; +app.controller("PostController", [ + "$scope", + "$rootScope", + "$location", + "$filter", + "ngAppSettings", + "$routeParams", + "PostRestService", + "UrlAliasService", + "RestMixDatabaseDataPortalService", + "RestMixDatabaseColumnPortalService", "RestRelatedAttributeDataPortalService", "RestMixDatabasePortalService", "MixDbService", @@ -4742,109 +4849,6 @@ app.factory("PostRestService", [ }, ]); -"use strict"; -app.controller("QueueLogController", [ - "$scope", - "$rootScope", - "ngAppSettings", - "$location", - "$routeParams", - "AuthService", - "QueueLogRestService", - function ( - $scope, - $rootScope, - ngAppSettings, - $location, - $routeParams, - authService, - service - ) { - BaseRestCtrl.call( - this, - $scope, - $rootScope, - $location, - $routeParams, - ngAppSettings, - service - ); - authService.fillAuthData(); - $scope.request.status = null; - $scope.messages = []; - $scope.canDrag = - $scope.request.orderBy !== "Priority" || $scope.request.direction !== "0"; - $scope.getListSuccessCallback = function () { - angular.forEach($scope.data.items, function (e) { - switch (e.state) { - case "ACK": - e.objClass = "text-success"; - break; - case "NACK": - e.objClass = "text-warning"; - break; - case "FAILED": - e.objClass = "text-danger"; - break; - default: - e.objClass = "text-info"; - break; - } - }); - }; - $scope.view = function (item) { - switch (item.state) { - case "ACK": - item.objClass = "text-success"; - break; - case "NACK": - item.objClass = "text-warning"; - break; - case "FAILED": - item.objClass = "text-danger"; - break; - default: - item.objClass = "text-info"; - break; - } - $rootScope.preview("object", item, null, "modal-lg"); - }; - }, -]); - -"use strict"; -app.factory("QueueLogRestService", [ - "BaseRestService", - function (baseService) { - var serviceFactory = angular.copy(baseService); - serviceFactory.initService("/rest", "mix-log/queue-log", true); - var _search = async function (objData, queries = null) { - var data = serviceFactory.parseQuery(objData); - - var url = `${this.prefixUrl}/search`; - - if (data) { - url += "?"; - url = url.concat(data); - if (queries) { - url += "&"; - var extraQueries = serviceFactory.parseQuery(queries); - url = url.concat(extraQueries); - } - } - var req = { - serviceBase: this.serviceBase, - apiVersion: this.apiVersion, - method: "GET", - url: url, - }; - return await this.getRestApiResult(req); - }; - serviceFactory.getList = _search; - return serviceFactory; - }, -]); - "use strict"; app.controller("RoleController", [ "$scope", @@ -6030,60 +6034,145 @@ app.factory("TenantRestService", [ ]); "use strict"; -app.controller("ThemeController", [ +app.controller("ThemeImportController", [ "$scope", "$rootScope", "ngAppSettings", "$routeParams", "$location", - "ThemeService", "ApiService", - "CommonService", + "TenancyService", function ( $scope, $rootScope, ngAppSettings, $routeParams, $location, - service, - commonService + apiService, + tenancyService ) { - BaseRestCtrl.call( - this, - $scope, - $rootScope, - $location, - $routeParams, - ngAppSettings, - service - ); - $scope.exportData = null; - $scope.exportThemeDto = { - isIncludeAssets: true, - isIncludeTemplates: true, - isIncludeConfigurations: true, - isIncludePermissions: true, - cultureIds: [], - content: { - pageIds: [], - pageContentIds: [], - postIds: [], - postContentIds: [], - moduleIds: [], - moduleContentIds: [], - mixDatabaseIds: [], - }, - associations: { - pageIds: [], - pageContentIds: [], - postIds: [], - postContentIds: [], - moduleIds: [], - moduleContentIds: [], - mixDatabaseIds: [], - }, - }; - + $scope.importData = null; + $scope.init = function () {}; + $scope.getSingleSuccessCallback = function () { + $scope.assets = null; + $scope.theme = null; + }; + $scope.submit = async function () { + $scope.form = document.getElementById("form-portal"); + let theme = $scope.form["theme"].files[0]; + if (theme) { + await $scope.extract(theme); + document.getElementById("form-portal")["theme"].value = ""; + } else { + $scope.import(); + } + }; + $scope.extract = async function (theme) { + $rootScope.isBusy = true; + var frm = new FormData(); + var url = "/rest/mix-tenancy/setup/extract-theme"; + $rootScope.isBusy = true; + // Looping over all files and add it to FormData object + frm.append("theme", theme); + // Adding one more key to FormData object + frm.append("model", angular.toJson($scope.data)); + var response = await apiService.ajaxSubmitForm(frm, url); + $rootScope.isBusy = false; + if (response.success) { + var getData = await $scope.loadTheme(); + if (getData.success) { + $scope.importThemeDto = getData.data; + $rootScope.isBusy = false; + $scope.$apply(); + } + } else { + $rootScope.showErrors(response.errors); + $rootScope.isBusy = false; + $scope.$apply(); + } + }; + + $scope.loadTheme = async function () { + var req = { + method: "GET", + url: "/rest/mix-tenancy/setup/load-theme", + }; + return await apiService.sendRequest(req); + }; + + $scope.import = async function () { + $scope.importThemeDto.themeId = $routeParams.id; + $rootScope.isBusy = true; + var response = await tenancyService.import($scope.importThemeDto); + + if (response.success) { + $rootScope.isBusy = false; + window.open("/", "_blank"); + $scope.$apply(); + } else { + $rootScope.showErrors(response.errors); + $rootScope.isBusy = false; + $scope.$apply(); + } + }; + }, +]); + +"use strict"; +app.controller("ThemeController", [ + "$scope", + "$rootScope", + "ngAppSettings", + "$routeParams", + "$location", + "ThemeService", + "ApiService", + "CommonService", + function ( + $scope, + $rootScope, + ngAppSettings, + $routeParams, + $location, + service, + commonService + ) { + BaseRestCtrl.call( + this, + $scope, + $rootScope, + $location, + $routeParams, + ngAppSettings, + service + ); + $scope.exportData = null; + $scope.exportThemeDto = { + isIncludeAssets: true, + isIncludeTemplates: true, + isIncludeConfigurations: true, + isIncludePermissions: true, + cultureIds: [], + content: { + pageIds: [], + pageContentIds: [], + postIds: [], + postContentIds: [], + moduleIds: [], + moduleContentIds: [], + mixDatabaseIds: [], + }, + associations: { + pageIds: [], + pageContentIds: [], + postIds: [], + postContentIds: [], + moduleIds: [], + moduleContentIds: [], + mixDatabaseIds: [], + }, + }; + $scope.getSingleSuccessCallback = function () { $scope.assets = null; $scope.theme = null; @@ -6176,91 +6265,6 @@ app.controller("ThemeController", [ }, ]); -"use strict"; -app.controller("ThemeImportController", [ - "$scope", - "$rootScope", - "ngAppSettings", - "$routeParams", - "$location", - "ApiService", - "TenancyService", - function ( - $scope, - $rootScope, - ngAppSettings, - $routeParams, - $location, - apiService, - tenancyService - ) { - $scope.importData = null; - $scope.init = function () {}; - $scope.getSingleSuccessCallback = function () { - $scope.assets = null; - $scope.theme = null; - }; - $scope.submit = async function () { - $scope.form = document.getElementById("form-portal"); - let theme = $scope.form["theme"].files[0]; - if (theme) { - await $scope.extract(theme); - document.getElementById("form-portal")["theme"].value = ""; - } else { - $scope.import(); - } - }; - $scope.extract = async function (theme) { - $rootScope.isBusy = true; - var frm = new FormData(); - var url = "/rest/mix-tenancy/setup/extract-theme"; - $rootScope.isBusy = true; - // Looping over all files and add it to FormData object - frm.append("theme", theme); - // Adding one more key to FormData object - frm.append("model", angular.toJson($scope.data)); - var response = await apiService.ajaxSubmitForm(frm, url); - $rootScope.isBusy = false; - if (response.success) { - var getData = await $scope.loadTheme(); - if (getData.success) { - $scope.importThemeDto = getData.data; - $rootScope.isBusy = false; - $scope.$apply(); - } - } else { - $rootScope.showErrors(response.errors); - $rootScope.isBusy = false; - $scope.$apply(); - } - }; - - $scope.loadTheme = async function () { - var req = { - method: "GET", - url: "/rest/mix-tenancy/setup/load-theme", - }; - return await apiService.sendRequest(req); - }; - - $scope.import = async function () { - $scope.importThemeDto.themeId = $routeParams.id; - $rootScope.isBusy = true; - var response = await tenancyService.import($scope.importThemeDto); - - if (response.success) { - $rootScope.isBusy = false; - window.open("/", "_blank"); - $scope.$apply(); - } else { - $rootScope.showErrors(response.errors); - $rootScope.isBusy = false; - $scope.$apply(); - } - }; - }, -]); - "use strict"; app.controller("UrlAliasController", [ "$scope", @@ -7103,6 +7107,37 @@ app.component("appSettingsDefault", { }, }); +app.component("appSettingsGeneral", { + templateUrl: + "/mix-app/views/app-portal/pages/app-settings/components/general/view.html", + controller: [ + "$rootScope", + "$scope", + "CryptoService", + "CommonService", + function ($rootScope, $scope, cryptoService, commonService) { + var ctrl = this; + ctrl.$onInit = () => { + var key = cryptoService.parseKeys(ctrl.appSettings.apiEncryptKey); + ctrl.apiKey = key.key; + ctrl.iv = key.iv; + }; + ctrl.stopApplication = async function () { + $rootScope.isBusy = true; + await commonService.stopApplication(); + $rootScope.showMessage("success", "success"); + $rootScope.isBusy = false; + $scope.$apply(); + }; + }, + ], + bindings: { + appSettings: "=", + onDelete: "&", + onUpdate: "&", + }, +}); + app.component("appSettingsHeart", { templateUrl: "/mix-app/views/app-portal/pages/app-settings/components/heart/view.html", @@ -7140,49 +7175,18 @@ app.component("appSettingsHeart", { ], }); -app.component("appSettingsGeneral", { +modules.component("portalMenus", { templateUrl: - "/mix-app/views/app-portal/pages/app-settings/components/general/view.html", + "/mix-app/views/app-portal/pages/app-settings/components/portal-menus/view.html", + bindings: { + data: "=", + allowedTypes: "=", + }, controller: [ "$rootScope", "$scope", - "CryptoService", - "CommonService", - function ($rootScope, $scope, cryptoService, commonService) { - var ctrl = this; - ctrl.$onInit = () => { - var key = cryptoService.parseKeys(ctrl.appSettings.apiEncryptKey); - ctrl.apiKey = key.key; - ctrl.iv = key.iv; - }; - ctrl.stopApplication = async function () { - $rootScope.isBusy = true; - await commonService.stopApplication(); - $rootScope.showMessage("success", "success"); - $rootScope.isBusy = false; - $scope.$apply(); - }; - }, - ], - bindings: { - appSettings: "=", - onDelete: "&", - onUpdate: "&", - }, -}); - -modules.component("portalMenus", { - templateUrl: - "/mix-app/views/app-portal/pages/app-settings/components/portal-menus/view.html", - bindings: { - data: "=", - allowedTypes: "=", - }, - controller: [ - "$rootScope", - "$scope", - "$location", - "ApiService", + "$location", + "ApiService", "CommonService", "ngAppSettings", function ( @@ -7381,9 +7385,9 @@ app.component("moduleMain", { }, }); -app.component("moduleContent", { +app.component("moduleAdvanced", { templateUrl: - "/mix-app/views/app-portal/pages/module/components/module-content/view.html", + "/mix-app/views/app-portal/pages/module/components/module-advanced/view.html", bindings: { model: "=", additionalData: "=", @@ -7392,17 +7396,17 @@ app.component("moduleContent", { "$rootScope", function ($rootScope) { var ctrl = this; + ctrl.mixConfigurations = $rootScope.globalSettings; ctrl.$onInit = function () { - ctrl.backUrl = `/admin/module/details`; + ctrl.isAdmin = $rootScope.isAdmin; }; - ctrl.mixConfigurations = $rootScope.globalSettings; }, ], }); -app.component("moduleAdvanced", { +app.component("moduleContent", { templateUrl: - "/mix-app/views/app-portal/pages/module/components/module-advanced/view.html", + "/mix-app/views/app-portal/pages/module/components/module-content/view.html", bindings: { model: "=", additionalData: "=", @@ -7411,10 +7415,10 @@ app.component("moduleAdvanced", { "$rootScope", function ($rootScope) { var ctrl = this; - ctrl.mixConfigurations = $rootScope.globalSettings; ctrl.$onInit = function () { - ctrl.isAdmin = $rootScope.isAdmin; + ctrl.backUrl = `/admin/module/details`; }; + ctrl.mixConfigurations = $rootScope.globalSettings; }, ], }); @@ -7650,6 +7654,31 @@ app.component("pageAdvanced", { ], }); +app.component("pageType", { + templateUrl: + "/mix-app/views/app-portal/pages/page/components/page-type/view.html", + bindings: { + model: "=", + }, + controller: [ + "$rootScope", + function ($rootScope) { + var ctrl = this; + ctrl.localizeSettings = $rootScope.globalSettings; + }, + ], +}); + +app.component("pageParents", { + templateUrl: + "/mix-app/views/app-portal/pages/page/components/parents/parents.html", + bindings: { + page: "=", + onDelete: "&", + onUpdate: "&", + }, +}); + app.component("pageContent", { templateUrl: "/mix-app/views/app-portal/pages/page/components/page-content/view.html", @@ -7695,31 +7724,6 @@ app.component("pageContent", { ], }); -app.component("pageParents", { - templateUrl: - "/mix-app/views/app-portal/pages/page/components/parents/parents.html", - bindings: { - page: "=", - onDelete: "&", - onUpdate: "&", - }, -}); - -app.component("pageType", { - templateUrl: - "/mix-app/views/app-portal/pages/page/components/page-type/view.html", - bindings: { - model: "=", - }, - controller: [ - "$rootScope", - function ($rootScope) { - var ctrl = this; - ctrl.localizeSettings = $rootScope.globalSettings; - }, - ], -}); - app.component("pagePlugPlay", { templateUrl: "/mix-app/views/app-portal/pages/page/components/plug-play/plug-play.html", @@ -7730,24 +7734,6 @@ app.component("pagePlugPlay", { }, }); -app.component("pageSeo", { - templateUrl: "/mix-app/views/app-portal/pages/page/components/seo/seo.html", - controller: [ - "$rootScope", - function ($rootScope) { - var ctrl = this; - ctrl.translate = function (keyword) { - return $rootScope.translate(keyword); - }; - }, - ], - bindings: { - page: "=", - onDelete: "&", - onUpdate: "&", - }, -}); - app.component("productRelated", { templateUrl: "/mix-app/views/app-portal/pages/product/components/related/productRelated.html", @@ -7784,6 +7770,133 @@ app.component("productRelated", { }, }); +app.component("pageSeo", { + templateUrl: "/mix-app/views/app-portal/pages/page/components/seo/seo.html", + controller: [ + "$rootScope", + function ($rootScope) { + var ctrl = this; + ctrl.translate = function (keyword) { + return $rootScope.translate(keyword); + }; + }, + ], + bindings: { + page: "=", + onDelete: "&", + onUpdate: "&", + }, +}); + +app.component("permissionPlugPlay", { + templateUrl: + "/mix-app/views/app-portal/pages/permission/components/plug-play/plug-play.html", + bindings: { + page: "=", + prefixParent: "=", + prefixChild: "=", + searchText: "=", + onDelete: "&", + onUpdate: "&", + }, + controller: [ + "$rootScope", + "$scope", + "$location", + "$element", + "PermissionService", + function ($rootScope, $scope, $location, $element, service) { + var ctrl = this; + ctrl.type = "Children"; + ctrl.goToPath = $rootScope.goToPath; + ctrl.request = { + pageSize: "5", + pageIndex: 0, + status: "Published", + orderBy: "CreatedDateTime", + direction: "Desc", + fromDate: null, + toDate: null, + }; + ctrl.pages = []; + ctrl.init = function () { + if (ctrl.page) { + ctrl.request.exceptIds = ctrl.page.parentNavs + .map((p) => p.pageId) + .concat(ctrl.page.childNavs.map((p) => p.pageId)); + if (ctrl.request.exceptIds.indexOf(ctrl.page.id) === -1) { + ctrl.request.exceptIds.push(ctrl.page.id); + } + ctrl.getList(); + } + }; + ctrl.selectPane = function (pane) { + if (ctrl.page) { + ctrl.type = pane.header; + ctrl.request.keyword = ""; + ctrl.init(); + } + }; + + ctrl.selectItem = (nav) => { + if (ctrl.type == "Parents") { + if ( + !$rootScope.findObjectByKey(ctrl.page.parentNavs, "pageId", nav.id) + ) { + ctrl.page.parentNavs.push({ + isActived: true, + pageId: ctrl.page.id, + parentId: nav.id, + description: nav.textDefault, + status: "Published", + parent: nav, + }); + } + } else { + if ( + !$rootScope.findObjectByKey(ctrl.page.childNavs, "pageId", nav.id) + ) { + ctrl.page.childNavs.push({ + isActived: true, + pageId: nav.id, + parentId: ctrl.page.id, + description: nav.textDefault, + status: "Published", + page: nav, + }); + } + } + }; + + ctrl.getList = async function () { + $rootScope.isBusy = true; + var resp = await service.getList(ctrl.request); + if (resp && resp.success) { + ctrl.pages = resp.data; + $rootScope.isBusy = false; + $scope.$apply(); + } else { + if (resp) { + $rootScope.showErrors(resp.errors || ["Failed"]); + } + $rootScope.isBusy = false; + $scope.$apply(); + } + }; + }, + ], +}); + +app.component("permissionParents", { + templateUrl: + "/mix-app/views/app-portal/pages/permission/components/parents/parents.html", + bindings: { + page: "=", + onDelete: "&", + onUpdate: "&", + }, +}); + app.component("permissionMain", { templateUrl: "/mix-app/views/app-portal/pages/permission/components/main/main.html", @@ -7822,16 +7935,6 @@ app.component("permissionMain", { }, }); -app.component("permissionParents", { - templateUrl: - "/mix-app/views/app-portal/pages/permission/components/parents/parents.html", - bindings: { - page: "=", - onDelete: "&", - onUpdate: "&", - }, -}); - modules.component("postFilterList", { templateUrl: "/mix-app/views/app-portal/pages/post/components/filter-list/filter-list.html", @@ -7951,182 +8054,6 @@ app.component("postGeneral", { }, }); -app.component("postMain", { - templateUrl: "/mix-app/views/app-portal/pages/post/components/main/view.html", - bindings: { - post: "=", - }, - controller: [ - "$rootScope", - "$scope", - function ($rootScope, $scope) { - var ctrl = this; - ctrl.translate = $rootScope.translate; - ctrl.generateSeo = function () { - if (ctrl.post) { - if (!ctrl.post.seoName) { - ctrl.post.seoName = $rootScope.generateKeyword( - ctrl.post.title, - "-" - ); - } - if (!ctrl.post.seoTitle) { - ctrl.post.seoTitle = ctrl.post.title; - } - if (!ctrl.post.seoDescription === null) { - ctrl.post.seoDescription = ctrl.post.excerpt; - } - if (!ctrl.post.seoKeywords) { - ctrl.post.seoKeywords = ctrl.post.title; - } - } - }; - }, - ], -}); - -app.component("postMedias", { - templateUrl: - "/mix-app/views/app-portal/pages/post/components/medias/view.html", - controller: function () { - var ctrl = this; - ctrl.activeMedia = function (media) { - var currentItem = null; - if (ctrl.post.mediaNavs === null) { - ctrl.post.mediaNavs = []; - } - $.each(ctrl.post.mediaNavs, function (i, e) { - if (e.mediaId === media.id) { - e.isActived = media.isActived; - currentItem = e; - return false; - } - }); - if (currentItem === null) { - currentItem = { - description: - media.description !== "undefined" ? media.description : "", - image: media.filePath, - mediaId: media.id, - post: ctrl.post.id, - specificulture: media.specificulture, - position: 0, - priority: ctrl.post.mediaNavs.length + 1, - isActived: true, - }; - media.isHidden = true; - ctrl.post.mediaNavs.push(currentItem); - } - }; - }, - bindings: { - post: "=", - medias: "=", - loadMedia: "&", - onDelete: "&", - onUpdate: "&", - }, -}); - -app.component("permissionPlugPlay", { - templateUrl: - "/mix-app/views/app-portal/pages/permission/components/plug-play/plug-play.html", - bindings: { - page: "=", - prefixParent: "=", - prefixChild: "=", - searchText: "=", - onDelete: "&", - onUpdate: "&", - }, - controller: [ - "$rootScope", - "$scope", - "$location", - "$element", - "PermissionService", - function ($rootScope, $scope, $location, $element, service) { - var ctrl = this; - ctrl.type = "Children"; - ctrl.goToPath = $rootScope.goToPath; - ctrl.request = { - pageSize: "5", - pageIndex: 0, - status: "Published", - orderBy: "CreatedDateTime", - direction: "Desc", - fromDate: null, - toDate: null, - }; - ctrl.pages = []; - ctrl.init = function () { - if (ctrl.page) { - ctrl.request.exceptIds = ctrl.page.parentNavs - .map((p) => p.pageId) - .concat(ctrl.page.childNavs.map((p) => p.pageId)); - if (ctrl.request.exceptIds.indexOf(ctrl.page.id) === -1) { - ctrl.request.exceptIds.push(ctrl.page.id); - } - ctrl.getList(); - } - }; - ctrl.selectPane = function (pane) { - if (ctrl.page) { - ctrl.type = pane.header; - ctrl.request.keyword = ""; - ctrl.init(); - } - }; - - ctrl.selectItem = (nav) => { - if (ctrl.type == "Parents") { - if ( - !$rootScope.findObjectByKey(ctrl.page.parentNavs, "pageId", nav.id) - ) { - ctrl.page.parentNavs.push({ - isActived: true, - pageId: ctrl.page.id, - parentId: nav.id, - description: nav.textDefault, - status: "Published", - parent: nav, - }); - } - } else { - if ( - !$rootScope.findObjectByKey(ctrl.page.childNavs, "pageId", nav.id) - ) { - ctrl.page.childNavs.push({ - isActived: true, - pageId: nav.id, - parentId: ctrl.page.id, - description: nav.textDefault, - status: "Published", - page: nav, - }); - } - } - }; - - ctrl.getList = async function () { - $rootScope.isBusy = true; - var resp = await service.getList(ctrl.request); - if (resp && resp.success) { - ctrl.pages = resp.data; - $rootScope.isBusy = false; - $scope.$apply(); - } else { - if (resp) { - $rootScope.showErrors(resp.errors || ["Failed"]); - } - $rootScope.isBusy = false; - $scope.$apply(); - } - }; - }, - ], -}); - app.component("postModules", { templateUrl: "/mix-app/views/app-portal/pages/post/components/modules/view.html", @@ -8220,6 +8147,83 @@ app.component("postModules", { }, }); +app.component("postMedias", { + templateUrl: + "/mix-app/views/app-portal/pages/post/components/medias/view.html", + controller: function () { + var ctrl = this; + ctrl.activeMedia = function (media) { + var currentItem = null; + if (ctrl.post.mediaNavs === null) { + ctrl.post.mediaNavs = []; + } + $.each(ctrl.post.mediaNavs, function (i, e) { + if (e.mediaId === media.id) { + e.isActived = media.isActived; + currentItem = e; + return false; + } + }); + if (currentItem === null) { + currentItem = { + description: + media.description !== "undefined" ? media.description : "", + image: media.filePath, + mediaId: media.id, + post: ctrl.post.id, + specificulture: media.specificulture, + position: 0, + priority: ctrl.post.mediaNavs.length + 1, + isActived: true, + }; + media.isHidden = true; + ctrl.post.mediaNavs.push(currentItem); + } + }; + }, + bindings: { + post: "=", + medias: "=", + loadMedia: "&", + onDelete: "&", + onUpdate: "&", + }, +}); + +app.component("postMain", { + templateUrl: "/mix-app/views/app-portal/pages/post/components/main/view.html", + bindings: { + post: "=", + }, + controller: [ + "$rootScope", + "$scope", + function ($rootScope, $scope) { + var ctrl = this; + ctrl.translate = $rootScope.translate; + ctrl.generateSeo = function () { + if (ctrl.post) { + if (!ctrl.post.seoName) { + ctrl.post.seoName = $rootScope.generateKeyword( + ctrl.post.title, + "-" + ); + } + if (!ctrl.post.seoTitle) { + ctrl.post.seoTitle = ctrl.post.title; + } + if (!ctrl.post.seoDescription === null) { + ctrl.post.seoDescription = ctrl.post.excerpt; + } + if (!ctrl.post.seoKeywords) { + ctrl.post.seoKeywords = ctrl.post.title; + } + } + }; + }, + ], +}); + app.component("postParents", { templateUrl: "/mix-app/views/app-portal/pages/post/components/parents/view.html", @@ -8566,90 +8570,9 @@ app.component("serviceMain", { }, }); -app.component("themeExportMixDatabases", { - templateUrl: - "/mix-app/views/app-portal/pages/theme/components/theme-export-mix-databases/view.html", - controller: [ - "$rootScope", - "$scope", - "ngAppSettings", - function ($rootScope, $scope, ngAppSettings) { - var ctrl = this; - var service = $rootScope.getRestService("mix-database"); - ctrl.selectAllContent = false; - ctrl.selectAllData = false; - ctrl.request = angular.copy(ngAppSettings.request); - ctrl.$onInit = async () => { - ctrl.request.pageSize = null; - ctrl.getList(); - }; - ctrl.getList = async (mixDatabaseIndex) => { - if (mixDatabaseIndex !== undefined) { - ctrl.request.mixDatabaseIndex = mixDatabaseIndex; - } - if (ctrl.request.fromDate !== null) { - var d = new Date(ctrl.request.fromDate); - ctrl.request.fromDate = d.toISOString(); - } - if (ctrl.request.toDate !== null) { - var d = new Date(ctrl.request.toDate); - ctrl.request.toDate = d.toISOString(); - } - let getData = await service.getList(ctrl.request); - if (getData.success) { - ctrl.data = getData.data; - } - }; - ctrl.selectContent = (mixDatabase, selected) => { - ctrl.selectAllContent = ctrl.selectAllContent && selected; - ctrl.selectAllData = ctrl.selectAllData && selected; - mixDatabase.isExportData = selected && mixDatabase.isExportData; - ctrl.exportThemeDto.content.mixDatabaseIds = ctrl.updateArray( - ctrl.exportThemeDto.content.mixDatabaseIds, - [mixDatabase.id], - selected - ); - if (!selected) { - ctrl.selectData(mixDatabase, false); - } - }; - ctrl.selectData = (mixDatabase, selected) => { - ctrl.selectAllData = ctrl.selectAllData && selected; - ctrl.exportThemeDto.associations.mixDatabaseIds = ctrl.updateArray( - ctrl.exportThemeDto.associations.mixDatabaseIds, - [mixDatabase.id], - selected - ); - }; - ctrl.updateArray = function (src, arr, selected) { - if (selected) { - src = ctrl.unionArray(src, arr); - } else { - src = src.filter((m) => arr.indexOf(m) < 0); - } - return src; - }; - ctrl.selectAll = function (arr) { - angular.forEach(arr, function (e) { - ctrl.selectContent(e, ctrl.selectAllContent); - ctrl.selectData(e, ctrl.selectAllData); - e.isActived = ctrl.selectAllContent; - e.isExportData = ctrl.selectAllData; - }); - }; - ctrl.unionArray = (a, b) => { - return [...new Set([...a, ...b])]; - }; - }, - ], - bindings: { - exportThemeDto: "=", - }, -}); - -app.component("themeExportCultures", { +app.component("themeImportCultures", { templateUrl: - "/mix-app/views/app-portal/pages/theme/components/theme-export-cultures/view.html", + "/mix-app/views/app-portal/pages/theme-import/components/theme-import-cultures/view.html", controller: [ "$rootScope", "$scope", @@ -8682,18 +8605,18 @@ app.component("themeExportCultures", { ctrl.selectContent = (culture, selected) => { ctrl.selectAllContent = ctrl.selectAllContent && selected; ctrl.selectAllData = ctrl.selectAllData && selected; - culture.isExportData = selected && culture.isExportData; + culture.isImportData = selected && culture.isImportData; ctrl.updateContent([culture.id], selected); }; ctrl.updateContent = function (arr, selected) { if (selected) { - ctrl.exportThemeDto.cultureIds = ctrl.unionArray( - ctrl.exportThemeDto.cultureIds, + ctrl.importThemeDto.cultureIds = ctrl.unionArray( + ctrl.importThemeDto.cultureIds, arr ); } else { - ctrl.exportThemeDto.cultureIds = - ctrl.exportThemeDto.cultureIds.filter((m) => arr.indexOf(m) < 0); + ctrl.importThemeDto.cultureIds = + ctrl.importThemeDto.cultureIds.filter((m) => arr.indexOf(m) < 0); ctrl.updateData(arr, false); } }; @@ -8713,13 +8636,86 @@ app.component("themeExportCultures", { }, ], bindings: { - exportThemeDto: "=", + importThemeDto: "=", }, }); -app.component("themeExportModules", { +app.component("themeImportMixDatabases", { templateUrl: - "/mix-app/views/app-portal/pages/theme/components/theme-export-modules/view.html", + "/mix-app/views/app-portal/pages/theme-import/components/theme-import-mix-databases/view.html", + bindings: { + importThemeDto: "=", + }, + controller: [ + "$rootScope", + "$scope", + "ngAppSettings", + function ($rootScope, $scope, ngAppSettings) { + var ctrl = this; + var service = $rootScope.getRestService("mix-database"); + ctrl.selectAllContent = false; + ctrl.selectAllData = false; + ctrl.request = angular.copy(ngAppSettings.request); + ctrl.$onInit = async () => { + ctrl.data = ctrl.importThemeDto.mixDatabases; + }; + + ctrl.selectContent = (mixDatabase, selected) => { + ctrl.selectAllContent = ctrl.selectAllContent && selected; + ctrl.selectAllData = ctrl.selectAllData && selected; + mixDatabase.isImportData = selected && mixDatabase.isImportData; + ctrl.importThemeDto.content.mixDatabaseIds = ctrl.updateArray( + ctrl.importThemeDto.content.mixDatabaseIds, + [mixDatabase.id], + selected + ); + if (!selected) { + ctrl.selectData(mixDatabase, false); + } + }; + ctrl.selectData = (mixDatabase, selected) => { + ctrl.selectAllData = ctrl.selectAllData && selected; + ctrl.importThemeDto.associations.mixDatabaseIds = ctrl.updateArray( + ctrl.importThemeDto.associations.mixDatabaseIds, + [mixDatabase.id], + selected + ); + }; + ctrl.updateArray = function (src, arr, selected) { + if (selected) { + src = ctrl.unionArray(src, arr); + } else { + src = src.filter((m) => arr.indexOf(m) < 0); + } + return src; + }; + ctrl.selectAll = function (arr) { + angular.forEach(arr, function (e) { + ctrl.selectContent(e, ctrl.selectAllContent); + ctrl.selectData(e, ctrl.selectAllData); + e.isActived = ctrl.selectAllContent; + e.isImportData = ctrl.selectAllData; + }); + }; + ctrl.validate = (mixDatabase) => { + if ( + ctrl.importThemeDto.invalidDatabaseNames.indexOf( + mixDatabase.systemName + ) >= 0 + ) { + return `${mixDatabase.systemName} is invalid`; + } + }; + ctrl.unionArray = (a, b) => { + return [...new Set([...a, ...b])]; + }; + }, + ], +}); + +app.component("themeImportModules", { + templateUrl: + "/mix-app/views/app-portal/pages/theme-import/components/theme-import-modules/view.html", controller: [ "$rootScope", "$scope", @@ -8731,7 +8727,6 @@ app.component("themeExportModules", { ctrl.selectAllData = false; ctrl.request = angular.copy(ngAppSettings.request); ctrl.$onInit = async () => { - ctrl.request.pageSize = null; ctrl.getList(); }; ctrl.getList = async (moduleIndex) => { @@ -8754,17 +8749,17 @@ app.component("themeExportModules", { ctrl.selectContent = (module, selected) => { ctrl.selectAllContent = ctrl.selectAllContent && selected; ctrl.selectAllData = ctrl.selectAllData && selected; - module.isExportData = selected && module.isExportData; + module.isImportData = selected && module.isImportData; let contentIds = module.contents.map(function (obj) { return obj.id; }); - ctrl.exportThemeDto.content.moduleIds = ctrl.updateArray( - ctrl.exportThemeDto.content.moduleIds, + ctrl.importThemeDto.content.moduleIds = ctrl.updateArray( + ctrl.importThemeDto.content.moduleIds, [module.id], selected ); - ctrl.exportThemeDto.content.moduleContentIds = ctrl.updateArray( - ctrl.exportThemeDto.content.moduleContentIds, + ctrl.importThemeDto.content.moduleContentIds = ctrl.updateArray( + ctrl.importThemeDto.content.moduleContentIds, contentIds, selected ); @@ -8777,13 +8772,13 @@ app.component("themeExportModules", { let contentIds = module.contents.map(function (obj) { return obj.id; }); - ctrl.exportThemeDto.associations.moduleIds = ctrl.updateArray( - ctrl.exportThemeDto.associations.moduleIds, + ctrl.importThemeDto.associations.moduleIds = ctrl.updateArray( + ctrl.importThemeDto.associations.moduleIds, [module.id], selected ); - ctrl.exportThemeDto.associations.moduleContentIds = ctrl.updateArray( - ctrl.exportThemeDto.associations.moduleContentIds, + ctrl.importThemeDto.associations.moduleContentIds = ctrl.updateArray( + ctrl.importThemeDto.associations.moduleContentIds, contentIds, selected ); @@ -8801,7 +8796,7 @@ app.component("themeExportModules", { ctrl.selectContent(e, ctrl.selectAllContent); ctrl.selectData(e, ctrl.selectAllData); e.isActived = ctrl.selectAllContent; - e.isExportData = ctrl.selectAllData; + e.isImportData = ctrl.selectAllData; }); }; ctrl.unionArray = (a, b) => { @@ -8810,13 +8805,13 @@ app.component("themeExportModules", { }, ], bindings: { - exportThemeDto: "=", + importThemeDto: "=", }, }); -app.component("themeExportPages", { +app.component("themeImportPages", { templateUrl: - "/mix-app/views/app-portal/pages/theme/components/theme-export-pages/view.html", + "/mix-app/views/app-portal/pages/theme-import/components/theme-import-pages/view.html", controller: [ "$rootScope", "$scope", @@ -8828,7 +8823,6 @@ app.component("themeExportPages", { ctrl.selectAllData = false; ctrl.request = angular.copy(ngAppSettings.request); ctrl.$onInit = async () => { - ctrl.request.pageSize = null; ctrl.getList(); }; ctrl.getList = async (pageIndex) => { @@ -8851,17 +8845,17 @@ app.component("themeExportPages", { ctrl.selectContent = (page, selected) => { ctrl.selectAllContent = ctrl.selectAllContent && selected; ctrl.selectAllData = ctrl.selectAllData && selected; - page.isExportData = selected && page.isExportData; + page.isImportData = selected && page.isImportData; let contentIds = page.contents.map(function (obj) { return obj.id; }); - ctrl.exportThemeDto.content.pageIds = ctrl.updateArray( - ctrl.exportThemeDto.content.pageIds, + ctrl.importThemeDto.content.pageIds = ctrl.updateArray( + ctrl.importThemeDto.content.pageIds, [page.id], selected ); - ctrl.exportThemeDto.content.pageContentIds = ctrl.updateArray( - ctrl.exportThemeDto.content.pageContentIds, + ctrl.importThemeDto.content.pageContentIds = ctrl.updateArray( + ctrl.importThemeDto.content.pageContentIds, contentIds, selected ); @@ -8874,13 +8868,13 @@ app.component("themeExportPages", { let contentIds = page.contents.map(function (obj) { return obj.id; }); - ctrl.exportThemeDto.associations.pageIds = ctrl.updateArray( - ctrl.exportThemeDto.associations.pageIds, + ctrl.importThemeDto.associations.pageIds = ctrl.updateArray( + ctrl.importThemeDto.associations.pageIds, [page.id], selected ); - ctrl.exportThemeDto.associations.pageContentIds = ctrl.updateArray( - ctrl.exportThemeDto.associations.pageContentIds, + ctrl.importThemeDto.associations.pageContentIds = ctrl.updateArray( + ctrl.importThemeDto.associations.pageContentIds, contentIds, selected ); @@ -8898,7 +8892,7 @@ app.component("themeExportPages", { ctrl.selectContent(e, ctrl.selectAllContent); ctrl.selectData(e, ctrl.selectAllData); e.isActived = ctrl.selectAllContent; - e.isExportData = ctrl.selectAllData; + e.isImportData = ctrl.selectAllData; }); }; ctrl.unionArray = (a, b) => { @@ -8907,115 +8901,109 @@ app.component("themeExportPages", { }, ], bindings: { - exportThemeDto: "=", + importThemeDto: "=", }, }); -app.component("themeExportPosts", { - templateUrl: - "/mix-app/views/app-portal/pages/theme/components/theme-export-posts/view.html", - controller: [ - "$rootScope", - "$scope", - "ngAppSettings", - "BaseRestService", - function ($rootScope, $scope, ngAppSettings, baseRestService) { - var ctrl = this; - var service = angular.copy(baseRestService); - service.initService("/rest/mix-portal", "mix-post"); - ctrl.selectAllContent = false; - ctrl.selectAllData = false; - ctrl.request = angular.copy(ngAppSettings.request); - ctrl.$onInit = async () => { - ctrl.request.pageSize = 1000; - ctrl.getList(); - }; - ctrl.getList = async (postIndex) => { - if (postIndex !== undefined) { - ctrl.request.postIndex = postIndex; - } - if (ctrl.request.fromDate !== null) { - var d = new Date(ctrl.request.fromDate); - ctrl.request.fromDate = d.toISOString(); - } - if (ctrl.request.toDate !== null) { - var d = new Date(ctrl.request.toDate); - ctrl.request.toDate = d.toISOString(); - } - let getData = await service.getList(ctrl.request); - if (getData.success) { - ctrl.data = getData.data; - } - }; - ctrl.selectContent = (post, selected) => { - ctrl.selectAllContent = ctrl.selectAllContent && selected; - ctrl.selectAllData = ctrl.selectAllData && selected; - post.isExportData = selected && post.isExportData; - let contentIds = post.contents.map(function (obj) { - return obj.id; - }); - ctrl.exportThemeDto.content.postIds = ctrl.updateArray( - ctrl.exportThemeDto.content.postIds, - [post.id], - selected - ); - ctrl.exportThemeDto.content.postContentIds = ctrl.updateArray( - ctrl.exportThemeDto.content.postContentIds, - contentIds, - selected - ); - if (!selected) { - ctrl.selectData(post, false); - } - }; - ctrl.selectData = (post, selected) => { - ctrl.selectAllData = ctrl.selectAllData && selected; - let contentIds = post.contents.map(function (obj) { - return obj.id; - }); - ctrl.exportThemeDto.associations.postIds = ctrl.updateArray( - ctrl.exportThemeDto.associations.postIds, - [post.id], - selected - ); - ctrl.exportThemeDto.associations.postContentIds = ctrl.updateArray( - ctrl.exportThemeDto.associations.postContentIds, - contentIds, - selected - ); - }; - ctrl.updateArray = function (src, arr, selected) { - if (selected) { - src = ctrl.unionArray(src, arr); - } else { - src = src.filter((m) => arr.indexOf(m) < 0); - } - return src; - }; - ctrl.selectAll = function (arr) { - angular.forEach(arr, function (e) { - ctrl.selectContent(e, ctrl.selectAllContent); - ctrl.selectData(e, ctrl.selectAllData); - e.isActived = ctrl.selectAllContent; - e.isExportData = ctrl.selectAllData; - }); - }; - ctrl.unionArray = (a, b) => { - return [...new Set([...a, ...b])]; - }; - }, - ], - bindings: { - exportThemeDto: "=", - }, -}); - -app.component("themeImportMixDatabases", { +app.component("themeImportPosts", { templateUrl: - "/mix-app/views/app-portal/pages/theme-import/components/theme-import-mix-databases/view.html", + "/mix-app/views/app-portal/pages/theme-import/components/theme-import-posts/view.html", + controller: [ + "$rootScope", + "$scope", + "ngAppSettings", + function ($rootScope, $scope, ngAppSettings) { + var ctrl = this; + var service = $rootScope.getRestService("mix-post"); + ctrl.selectAllContent = false; + ctrl.selectAllData = false; + ctrl.request = angular.copy(ngAppSettings.request); + ctrl.$onInit = async () => { + ctrl.getList(); + }; + ctrl.getList = async (postIndex) => { + if (postIndex !== undefined) { + ctrl.request.postIndex = postIndex; + } + if (ctrl.request.fromDate !== null) { + var d = new Date(ctrl.request.fromDate); + ctrl.request.fromDate = d.toISOString(); + } + if (ctrl.request.toDate !== null) { + var d = new Date(ctrl.request.toDate); + ctrl.request.toDate = d.toISOString(); + } + let getData = await service.getList(ctrl.request); + if (getData.success) { + ctrl.data = getData.data; + } + }; + ctrl.selectContent = (post, selected) => { + ctrl.selectAllContent = ctrl.selectAllContent && selected; + ctrl.selectAllData = ctrl.selectAllData && selected; + post.isImportData = selected && post.isImportData; + let contentIds = post.contents.map(function (obj) { + return obj.id; + }); + ctrl.importThemeDto.content.postIds = ctrl.updateArray( + ctrl.importThemeDto.content.postIds, + [post.id], + selected + ); + ctrl.importThemeDto.content.postContentIds = ctrl.updateArray( + ctrl.importThemeDto.content.postContentIds, + contentIds, + selected + ); + if (!selected) { + ctrl.selectData(post, false); + } + }; + ctrl.selectData = (post, selected) => { + ctrl.selectAllData = ctrl.selectAllData && selected; + let contentIds = post.contents.map(function (obj) { + return obj.id; + }); + ctrl.importThemeDto.associations.postIds = ctrl.updateArray( + ctrl.importThemeDto.associations.postIds, + [post.id], + selected + ); + ctrl.importThemeDto.associations.postContentIds = ctrl.updateArray( + ctrl.importThemeDto.associations.postContentIds, + contentIds, + selected + ); + }; + ctrl.updateArray = function (src, arr, selected) { + if (selected) { + src = ctrl.unionArray(src, arr); + } else { + src = src.filter((m) => arr.indexOf(m) < 0); + } + return src; + }; + ctrl.selectAll = function (arr) { + angular.forEach(arr, function (e) { + ctrl.selectContent(e, ctrl.selectAllContent); + ctrl.selectData(e, ctrl.selectAllData); + e.isActived = ctrl.selectAllContent; + e.isImportData = ctrl.selectAllData; + }); + }; + ctrl.unionArray = (a, b) => { + return [...new Set([...a, ...b])]; + }; + }, + ], bindings: { importThemeDto: "=", }, +}); + +app.component("themeExportMixDatabases", { + templateUrl: + "/mix-app/views/app-portal/pages/theme/components/theme-export-mix-databases/view.html", controller: [ "$rootScope", "$scope", @@ -9027,15 +9015,32 @@ app.component("themeImportMixDatabases", { ctrl.selectAllData = false; ctrl.request = angular.copy(ngAppSettings.request); ctrl.$onInit = async () => { - ctrl.data = ctrl.importThemeDto.mixDatabases; + ctrl.request.pageSize = null; + ctrl.getList(); + }; + ctrl.getList = async (mixDatabaseIndex) => { + if (mixDatabaseIndex !== undefined) { + ctrl.request.mixDatabaseIndex = mixDatabaseIndex; + } + if (ctrl.request.fromDate !== null) { + var d = new Date(ctrl.request.fromDate); + ctrl.request.fromDate = d.toISOString(); + } + if (ctrl.request.toDate !== null) { + var d = new Date(ctrl.request.toDate); + ctrl.request.toDate = d.toISOString(); + } + let getData = await service.getList(ctrl.request); + if (getData.success) { + ctrl.data = getData.data; + } }; - ctrl.selectContent = (mixDatabase, selected) => { ctrl.selectAllContent = ctrl.selectAllContent && selected; ctrl.selectAllData = ctrl.selectAllData && selected; - mixDatabase.isImportData = selected && mixDatabase.isImportData; - ctrl.importThemeDto.content.mixDatabaseIds = ctrl.updateArray( - ctrl.importThemeDto.content.mixDatabaseIds, + mixDatabase.isExportData = selected && mixDatabase.isExportData; + ctrl.exportThemeDto.content.mixDatabaseIds = ctrl.updateArray( + ctrl.exportThemeDto.content.mixDatabaseIds, [mixDatabase.id], selected ); @@ -9045,8 +9050,8 @@ app.component("themeImportMixDatabases", { }; ctrl.selectData = (mixDatabase, selected) => { ctrl.selectAllData = ctrl.selectAllData && selected; - ctrl.importThemeDto.associations.mixDatabaseIds = ctrl.updateArray( - ctrl.importThemeDto.associations.mixDatabaseIds, + ctrl.exportThemeDto.associations.mixDatabaseIds = ctrl.updateArray( + ctrl.exportThemeDto.associations.mixDatabaseIds, [mixDatabase.id], selected ); @@ -9064,28 +9069,22 @@ app.component("themeImportMixDatabases", { ctrl.selectContent(e, ctrl.selectAllContent); ctrl.selectData(e, ctrl.selectAllData); e.isActived = ctrl.selectAllContent; - e.isImportData = ctrl.selectAllData; + e.isExportData = ctrl.selectAllData; }); }; - ctrl.validate = (mixDatabase) => { - if ( - ctrl.importThemeDto.invalidDatabaseNames.indexOf( - mixDatabase.systemName - ) >= 0 - ) { - return `${mixDatabase.systemName} is invalid`; - } - }; ctrl.unionArray = (a, b) => { return [...new Set([...a, ...b])]; }; }, ], + bindings: { + exportThemeDto: "=", + }, }); -app.component("themeImportCultures", { +app.component("themeExportCultures", { templateUrl: - "/mix-app/views/app-portal/pages/theme-import/components/theme-import-cultures/view.html", + "/mix-app/views/app-portal/pages/theme/components/theme-export-cultures/view.html", controller: [ "$rootScope", "$scope", @@ -9118,18 +9117,18 @@ app.component("themeImportCultures", { ctrl.selectContent = (culture, selected) => { ctrl.selectAllContent = ctrl.selectAllContent && selected; ctrl.selectAllData = ctrl.selectAllData && selected; - culture.isImportData = selected && culture.isImportData; + culture.isExportData = selected && culture.isExportData; ctrl.updateContent([culture.id], selected); }; ctrl.updateContent = function (arr, selected) { if (selected) { - ctrl.importThemeDto.cultureIds = ctrl.unionArray( - ctrl.importThemeDto.cultureIds, + ctrl.exportThemeDto.cultureIds = ctrl.unionArray( + ctrl.exportThemeDto.cultureIds, arr ); } else { - ctrl.importThemeDto.cultureIds = - ctrl.importThemeDto.cultureIds.filter((m) => arr.indexOf(m) < 0); + ctrl.exportThemeDto.cultureIds = + ctrl.exportThemeDto.cultureIds.filter((m) => arr.indexOf(m) < 0); ctrl.updateData(arr, false); } }; @@ -9149,29 +9148,30 @@ app.component("themeImportCultures", { }, ], bindings: { - importThemeDto: "=", + exportThemeDto: "=", }, }); -app.component("themeImportModules", { +app.component("themeExportPages", { templateUrl: - "/mix-app/views/app-portal/pages/theme-import/components/theme-import-modules/view.html", + "/mix-app/views/app-portal/pages/theme/components/theme-export-pages/view.html", controller: [ "$rootScope", "$scope", "ngAppSettings", function ($rootScope, $scope, ngAppSettings) { var ctrl = this; - var service = $rootScope.getRestService("mix-module"); + var service = $rootScope.getRestService("mix-page"); ctrl.selectAllContent = false; ctrl.selectAllData = false; ctrl.request = angular.copy(ngAppSettings.request); ctrl.$onInit = async () => { + ctrl.request.pageSize = null; ctrl.getList(); }; - ctrl.getList = async (moduleIndex) => { - if (moduleIndex !== undefined) { - ctrl.request.moduleIndex = moduleIndex; + ctrl.getList = async (pageIndex) => { + if (pageIndex !== undefined) { + ctrl.request.pageIndex = pageIndex; } if (ctrl.request.fromDate !== null) { var d = new Date(ctrl.request.fromDate); @@ -9186,39 +9186,39 @@ app.component("themeImportModules", { ctrl.data = getData.data; } }; - ctrl.selectContent = (module, selected) => { + ctrl.selectContent = (page, selected) => { ctrl.selectAllContent = ctrl.selectAllContent && selected; ctrl.selectAllData = ctrl.selectAllData && selected; - module.isImportData = selected && module.isImportData; - let contentIds = module.contents.map(function (obj) { + page.isExportData = selected && page.isExportData; + let contentIds = page.contents.map(function (obj) { return obj.id; }); - ctrl.importThemeDto.content.moduleIds = ctrl.updateArray( - ctrl.importThemeDto.content.moduleIds, - [module.id], + ctrl.exportThemeDto.content.pageIds = ctrl.updateArray( + ctrl.exportThemeDto.content.pageIds, + [page.id], selected ); - ctrl.importThemeDto.content.moduleContentIds = ctrl.updateArray( - ctrl.importThemeDto.content.moduleContentIds, + ctrl.exportThemeDto.content.pageContentIds = ctrl.updateArray( + ctrl.exportThemeDto.content.pageContentIds, contentIds, selected ); if (!selected) { - ctrl.selectData(module, false); + ctrl.selectData(page, false); } }; - ctrl.selectData = (module, selected) => { + ctrl.selectData = (page, selected) => { ctrl.selectAllData = ctrl.selectAllData && selected; - let contentIds = module.contents.map(function (obj) { + let contentIds = page.contents.map(function (obj) { return obj.id; }); - ctrl.importThemeDto.associations.moduleIds = ctrl.updateArray( - ctrl.importThemeDto.associations.moduleIds, - [module.id], - selected - ); - ctrl.importThemeDto.associations.moduleContentIds = ctrl.updateArray( - ctrl.importThemeDto.associations.moduleContentIds, + ctrl.exportThemeDto.associations.pageIds = ctrl.updateArray( + ctrl.exportThemeDto.associations.pageIds, + [page.id], + selected + ); + ctrl.exportThemeDto.associations.pageContentIds = ctrl.updateArray( + ctrl.exportThemeDto.associations.pageContentIds, contentIds, selected ); @@ -9236,7 +9236,7 @@ app.component("themeImportModules", { ctrl.selectContent(e, ctrl.selectAllContent); ctrl.selectData(e, ctrl.selectAllData); e.isActived = ctrl.selectAllContent; - e.isImportData = ctrl.selectAllData; + e.isExportData = ctrl.selectAllData; }); }; ctrl.unionArray = (a, b) => { @@ -9245,125 +9245,129 @@ app.component("themeImportModules", { }, ], bindings: { - importThemeDto: "=", + exportThemeDto: "=", }, }); -app.component("themeImportPosts", { - templateUrl: - "/mix-app/views/app-portal/pages/theme-import/components/theme-import-posts/view.html", - controller: [ - "$rootScope", - "$scope", - "ngAppSettings", - function ($rootScope, $scope, ngAppSettings) { - var ctrl = this; - var service = $rootScope.getRestService("mix-post"); - ctrl.selectAllContent = false; - ctrl.selectAllData = false; - ctrl.request = angular.copy(ngAppSettings.request); - ctrl.$onInit = async () => { - ctrl.getList(); - }; - ctrl.getList = async (postIndex) => { - if (postIndex !== undefined) { - ctrl.request.postIndex = postIndex; - } - if (ctrl.request.fromDate !== null) { - var d = new Date(ctrl.request.fromDate); - ctrl.request.fromDate = d.toISOString(); - } - if (ctrl.request.toDate !== null) { - var d = new Date(ctrl.request.toDate); - ctrl.request.toDate = d.toISOString(); - } - let getData = await service.getList(ctrl.request); - if (getData.success) { - ctrl.data = getData.data; - } - }; - ctrl.selectContent = (post, selected) => { - ctrl.selectAllContent = ctrl.selectAllContent && selected; - ctrl.selectAllData = ctrl.selectAllData && selected; - post.isImportData = selected && post.isImportData; - let contentIds = post.contents.map(function (obj) { - return obj.id; - }); - ctrl.importThemeDto.content.postIds = ctrl.updateArray( - ctrl.importThemeDto.content.postIds, - [post.id], - selected - ); - ctrl.importThemeDto.content.postContentIds = ctrl.updateArray( - ctrl.importThemeDto.content.postContentIds, - contentIds, - selected - ); - if (!selected) { - ctrl.selectData(post, false); - } - }; - ctrl.selectData = (post, selected) => { - ctrl.selectAllData = ctrl.selectAllData && selected; - let contentIds = post.contents.map(function (obj) { - return obj.id; - }); - ctrl.importThemeDto.associations.postIds = ctrl.updateArray( - ctrl.importThemeDto.associations.postIds, - [post.id], - selected - ); - ctrl.importThemeDto.associations.postContentIds = ctrl.updateArray( - ctrl.importThemeDto.associations.postContentIds, - contentIds, - selected - ); - }; - ctrl.updateArray = function (src, arr, selected) { - if (selected) { - src = ctrl.unionArray(src, arr); - } else { - src = src.filter((m) => arr.indexOf(m) < 0); - } - return src; - }; - ctrl.selectAll = function (arr) { - angular.forEach(arr, function (e) { - ctrl.selectContent(e, ctrl.selectAllContent); - ctrl.selectData(e, ctrl.selectAllData); - e.isActived = ctrl.selectAllContent; - e.isImportData = ctrl.selectAllData; - }); - }; - ctrl.unionArray = (a, b) => { - return [...new Set([...a, ...b])]; - }; +app.component("themeExportPosts", { + templateUrl: + "/mix-app/views/app-portal/pages/theme/components/theme-export-posts/view.html", + controller: [ + "$rootScope", + "$scope", + "ngAppSettings", + "BaseRestService", + function ($rootScope, $scope, ngAppSettings, baseRestService) { + var ctrl = this; + var service = angular.copy(baseRestService); + service.initService("/rest/mix-portal", "mix-post"); + ctrl.selectAllContent = false; + ctrl.selectAllData = false; + ctrl.request = angular.copy(ngAppSettings.request); + ctrl.$onInit = async () => { + ctrl.request.pageSize = 1000; + ctrl.getList(); + }; + ctrl.getList = async (postIndex) => { + if (postIndex !== undefined) { + ctrl.request.postIndex = postIndex; + } + if (ctrl.request.fromDate !== null) { + var d = new Date(ctrl.request.fromDate); + ctrl.request.fromDate = d.toISOString(); + } + if (ctrl.request.toDate !== null) { + var d = new Date(ctrl.request.toDate); + ctrl.request.toDate = d.toISOString(); + } + let getData = await service.getList(ctrl.request); + if (getData.success) { + ctrl.data = getData.data; + } + }; + ctrl.selectContent = (post, selected) => { + ctrl.selectAllContent = ctrl.selectAllContent && selected; + ctrl.selectAllData = ctrl.selectAllData && selected; + post.isExportData = selected && post.isExportData; + let contentIds = post.contents.map(function (obj) { + return obj.id; + }); + ctrl.exportThemeDto.content.postIds = ctrl.updateArray( + ctrl.exportThemeDto.content.postIds, + [post.id], + selected + ); + ctrl.exportThemeDto.content.postContentIds = ctrl.updateArray( + ctrl.exportThemeDto.content.postContentIds, + contentIds, + selected + ); + if (!selected) { + ctrl.selectData(post, false); + } + }; + ctrl.selectData = (post, selected) => { + ctrl.selectAllData = ctrl.selectAllData && selected; + let contentIds = post.contents.map(function (obj) { + return obj.id; + }); + ctrl.exportThemeDto.associations.postIds = ctrl.updateArray( + ctrl.exportThemeDto.associations.postIds, + [post.id], + selected + ); + ctrl.exportThemeDto.associations.postContentIds = ctrl.updateArray( + ctrl.exportThemeDto.associations.postContentIds, + contentIds, + selected + ); + }; + ctrl.updateArray = function (src, arr, selected) { + if (selected) { + src = ctrl.unionArray(src, arr); + } else { + src = src.filter((m) => arr.indexOf(m) < 0); + } + return src; + }; + ctrl.selectAll = function (arr) { + angular.forEach(arr, function (e) { + ctrl.selectContent(e, ctrl.selectAllContent); + ctrl.selectData(e, ctrl.selectAllData); + e.isActived = ctrl.selectAllContent; + e.isExportData = ctrl.selectAllData; + }); + }; + ctrl.unionArray = (a, b) => { + return [...new Set([...a, ...b])]; + }; + }, + ], + bindings: { + exportThemeDto: "=", }, - ], - bindings: { - importThemeDto: "=", - }, }); -app.component("themeImportPages", { +app.component("themeExportModules", { templateUrl: - "/mix-app/views/app-portal/pages/theme-import/components/theme-import-pages/view.html", + "/mix-app/views/app-portal/pages/theme/components/theme-export-modules/view.html", controller: [ "$rootScope", "$scope", "ngAppSettings", function ($rootScope, $scope, ngAppSettings) { var ctrl = this; - var service = $rootScope.getRestService("mix-page"); + var service = $rootScope.getRestService("mix-module"); ctrl.selectAllContent = false; ctrl.selectAllData = false; ctrl.request = angular.copy(ngAppSettings.request); ctrl.$onInit = async () => { + ctrl.request.pageSize = null; ctrl.getList(); }; - ctrl.getList = async (pageIndex) => { - if (pageIndex !== undefined) { - ctrl.request.pageIndex = pageIndex; + ctrl.getList = async (moduleIndex) => { + if (moduleIndex !== undefined) { + ctrl.request.moduleIndex = moduleIndex; } if (ctrl.request.fromDate !== null) { var d = new Date(ctrl.request.fromDate); @@ -9378,39 +9382,39 @@ app.component("themeImportPages", { ctrl.data = getData.data; } }; - ctrl.selectContent = (page, selected) => { + ctrl.selectContent = (module, selected) => { ctrl.selectAllContent = ctrl.selectAllContent && selected; ctrl.selectAllData = ctrl.selectAllData && selected; - page.isImportData = selected && page.isImportData; - let contentIds = page.contents.map(function (obj) { + module.isExportData = selected && module.isExportData; + let contentIds = module.contents.map(function (obj) { return obj.id; }); - ctrl.importThemeDto.content.pageIds = ctrl.updateArray( - ctrl.importThemeDto.content.pageIds, - [page.id], + ctrl.exportThemeDto.content.moduleIds = ctrl.updateArray( + ctrl.exportThemeDto.content.moduleIds, + [module.id], selected ); - ctrl.importThemeDto.content.pageContentIds = ctrl.updateArray( - ctrl.importThemeDto.content.pageContentIds, + ctrl.exportThemeDto.content.moduleContentIds = ctrl.updateArray( + ctrl.exportThemeDto.content.moduleContentIds, contentIds, selected ); if (!selected) { - ctrl.selectData(page, false); + ctrl.selectData(module, false); } }; - ctrl.selectData = (page, selected) => { + ctrl.selectData = (module, selected) => { ctrl.selectAllData = ctrl.selectAllData && selected; - let contentIds = page.contents.map(function (obj) { + let contentIds = module.contents.map(function (obj) { return obj.id; }); - ctrl.importThemeDto.associations.pageIds = ctrl.updateArray( - ctrl.importThemeDto.associations.pageIds, - [page.id], + ctrl.exportThemeDto.associations.moduleIds = ctrl.updateArray( + ctrl.exportThemeDto.associations.moduleIds, + [module.id], selected ); - ctrl.importThemeDto.associations.pageContentIds = ctrl.updateArray( - ctrl.importThemeDto.associations.pageContentIds, + ctrl.exportThemeDto.associations.moduleContentIds = ctrl.updateArray( + ctrl.exportThemeDto.associations.moduleContentIds, contentIds, selected ); @@ -9428,7 +9432,7 @@ app.component("themeImportPages", { ctrl.selectContent(e, ctrl.selectAllContent); ctrl.selectData(e, ctrl.selectAllData); e.isActived = ctrl.selectAllContent; - e.isImportData = ctrl.selectAllData; + e.isExportData = ctrl.selectAllData; }); }; ctrl.unionArray = (a, b) => { @@ -9437,7 +9441,7 @@ app.component("themeImportPages", { }, ], bindings: { - importThemeDto: "=", + exportThemeDto: "=", }, }); @@ -9682,20 +9686,9 @@ var demo = { }, }; -modules.component("layoutPortalHeader", { +modules.component("layoutPortalModals", { templateUrl: - "/mix-app/views/app-portal/components/_layout-portal-header/view.html", - controller: [ - function () { - var ctrl = this; - }, - ], - bindings: {}, -}); - -modules.component("layoutPortalModals", { - templateUrl: - "/mix-app/views/app-portal/components/_layout-portal-modals/view.html", + "/mix-app/views/app-portal/components/_layout-portal-modals/view.html", controller: [ function () { var ctrl = this; @@ -9758,111 +9751,15 @@ modules.component("actions", { ], }); -modules.component("aceEditor", { +modules.component("layoutPortalHeader", { templateUrl: - "/mix-app/views/app-portal/components/ace-editor/ace-editor.html", + "/mix-app/views/app-portal/components/_layout-portal-header/view.html", controller: [ - "$rootScope", - "$scope", - "ngAppSettings", - function ($rootScope, $scope, ngAppSettings) { + function () { var ctrl = this; - ctrl.previousId = null; - ctrl.editor = null; - ctrl.id = Math.floor(Math.random() * 100) + 1; - ctrl.$onChanges = (changes) => { - if (changes.content) { - ctrl.updateEditors(); - } - }; - - this.$doCheck = function () { - if (ctrl.previousId != null && ctrl.previousId !== ctrl.contentId) { - ctrl.previousId = ctrl.contentId; - ctrl.updateEditors(); - } - }.bind(this); - ctrl.initAce = function () { - setTimeout(() => { - ctrl.previousId = ctrl.contentId; - ctrl.updateEditors(); - $scope.$apply(); - }, 200); - }; - ctrl.updateContent = function (content) { - ctrl.editor.setValue(content); - }; - ctrl.updateEditors = function () { - $.each($("#code-editor-" + ctrl.id), function (i, e) { - //var container = $(this); - ace.require("ace/ext/language_tools"); - if (e) { - var editor = ace.edit(e); - switch (ctrl.ext) { - case ".json": - editor.session.setMode("ace/mode/json"); - break; - case ".js": - editor.session.setMode("ace/mode/javascript"); - break; - case ".css": - editor.session.setMode("ace/mode/css"); - break; - case ".cshtml": - editor.session.setMode("ace/mode/razor"); - break; - case ".cs": - editor.session.setMode("ace/mode/csharp"); - break; - default: - editor.session.setMode("ace/mode/razor"); - break; - } - editor.setTheme("ace/theme/chrome"); - //editor.setReadOnly(true); - if (ctrl.content) { - editor.setValue(ctrl.content); - } - editor.$blockScrolling = Infinity; - editor.session.setUseWrapMode(true); - editor.setOptions({ - enableBasicAutocompletion: true, - enableSnippets: true, - enableLiveAutocompletion: false, - maxLines: 50, - fontSize: 11, - }); - editor.getSession().on("change", function (e) { - // e.type, etc - ctrl.content = editor.getValue(); - }); - editor.getSession().on("paste", function (e) { - // e.type, etc - ctrl.content = editor.getValue(); - }); - editor.commands.addCommand({ - name: "saveFile", - bindKey: { - win: "Ctrl-S", - mac: "Command-S", - sender: "editor|cli", - }, - exec: function (env, args, request) { - var btn = document.getElementById("btnToSubmit"); - btn.click(); - }, - }); - ctrl.editor = editor; - } - }); - }; }, ], - bindings: { - content: "=", - contentId: "=", - ext: "=", - }, + bindings: {}, }); modules.component("additionalColumn", { @@ -10035,32 +9932,110 @@ modules.component("additionalValue", { ], }); -modules.component("confirm", { - templateUrl: "/mix-app/views/app-portal/components/confirm/confirm.html", +modules.component("aceEditor", { + templateUrl: + "/mix-app/views/app-portal/components/ace-editor/ace-editor.html", controller: [ "$rootScope", "$scope", "ngAppSettings", - function ($rootScope, $scope) { + function ($rootScope, $scope, ngAppSettings) { var ctrl = this; - ctrl.executeFunctionByName = async function ( - functionName, - args, - context - ) { - var result = await $rootScope.executeFunctionByName( - functionName, - args, - context - ); - if (result) { - $scope.$apply(); + ctrl.previousId = null; + ctrl.editor = null; + ctrl.id = Math.floor(Math.random() * 100) + 1; + ctrl.$onChanges = (changes) => { + if (changes.content) { + ctrl.updateEditors(); + } + }; + + this.$doCheck = function () { + if (ctrl.previousId != null && ctrl.previousId !== ctrl.contentId) { + ctrl.previousId = ctrl.contentId; + ctrl.updateEditors(); } + }.bind(this); + ctrl.initAce = function () { + setTimeout(() => { + ctrl.previousId = ctrl.contentId; + ctrl.updateEditors(); + $scope.$apply(); + }, 200); + }; + ctrl.updateContent = function (content) { + ctrl.editor.setValue(content); + }; + ctrl.updateEditors = function () { + $.each($("#code-editor-" + ctrl.id), function (i, e) { + //var container = $(this); + ace.require("ace/ext/language_tools"); + if (e) { + var editor = ace.edit(e); + switch (ctrl.ext) { + case ".json": + editor.session.setMode("ace/mode/json"); + break; + case ".js": + editor.session.setMode("ace/mode/javascript"); + break; + case ".css": + editor.session.setMode("ace/mode/css"); + break; + case ".cshtml": + editor.session.setMode("ace/mode/razor"); + break; + case ".cs": + editor.session.setMode("ace/mode/csharp"); + break; + default: + editor.session.setMode("ace/mode/razor"); + break; + } + editor.setTheme("ace/theme/chrome"); + //editor.setReadOnly(true); + if (ctrl.content) { + editor.setValue(ctrl.content); + } + editor.$blockScrolling = Infinity; + editor.session.setUseWrapMode(true); + editor.setOptions({ + enableBasicAutocompletion: true, + enableSnippets: true, + enableLiveAutocompletion: false, + maxLines: 50, + fontSize: 11, + }); + editor.getSession().on("change", function (e) { + // e.type, etc + ctrl.content = editor.getValue(); + }); + editor.getSession().on("paste", function (e) { + // e.type, etc + ctrl.content = editor.getValue(); + }); + editor.commands.addCommand({ + name: "saveFile", + bindKey: { + win: "Ctrl-S", + mac: "Command-S", + sender: "editor|cli", + }, + exec: function (env, args, request) { + var btn = document.getElementById("btnToSubmit"); + btn.click(); + }, + }); + ctrl.editor = editor; + } + }); }; }, ], bindings: { - message: "=", + content: "=", + contentId: "=", + ext: "=", }, }); @@ -10231,76 +10206,32 @@ modules.component("customImage", { ], }); -modules.component("filterList", { - templateUrl: - "/mix-app/views/app-portal/components/filter-list/filter-list.html", +modules.component("confirm", { + templateUrl: "/mix-app/views/app-portal/components/confirm/confirm.html", controller: [ - "$scope", "$rootScope", + "$scope", "ngAppSettings", - "CultureService", - function ($scope, $rootScope, ngAppSettings, cultureService) { + function ($rootScope, $scope) { var ctrl = this; - ctrl.dateRange = { - fromDate: null, - toDate: null, - }; - ctrl.searchMethods = ["Equal", "Like"]; - ctrl.init = async function () { - if (!ctrl.arrOrderby) { - ctrl.arrOrderby = [ - "Title", - "Priority", - "CreatedDateTime", - "LastModified", - "Status", - ]; - } - ctrl.request.orderBy = ctrl.request.orderBy || ctrl.arrOrderby[0]; - ctrl.directions = ["Asc", "Desc"]; - ctrl.pageSizes = [5, 10, 15, 20]; - ctrl.statuses = $rootScope.globalSettings.statuses; - }; - ctrl.changeLang = function (culture) { - if (culture) { - ctrl.selectedCulture = culture; - ctrl.request.culture = culture.specificulture; - } else { - ctrl.selectedCulture = null; - ctrl.request.culture = null; - } - ctrl.apply(0); - }; - ctrl.apply = function (pageIndex) { - $rootScope.setRequest(ctrl.request, ctrl.key); - ctrl.callback({ pageIndex: pageIndex }); - }; - ctrl.updateDate = function () { - ctrl.request.pageIndex = 0; - if (Date.parse(ctrl.dateRange.fromDate)) { - ctrl.request.fromDate = new Date( - ctrl.dateRange.fromDate - ).toISOString(); - } else { - $scope.request.fromDate = null; - } - if (Date.parse(ctrl.dateRange.toDate)) { - ctrl.request.toDate = new Date(ctrl.dateRange.toDate).toISOString(); - } else { - ctrl.request.toDate = null; - } - $rootScope.setRequest(ctrl.request, ctrl.key); - ctrl.callback({ pageIndex: 0 }); + ctrl.executeFunctionByName = async function ( + functionName, + args, + context + ) { + var result = await $rootScope.executeFunctionByName( + functionName, + args, + context + ); + if (result) { + $scope.$apply(); + } }; }, ], bindings: { - request: "=", - key: "=?", - arrOrderby: "=?", - createUrl: "=", - createText: "=", - callback: "&", + message: "=", }, }); @@ -10422,6 +10353,110 @@ modules.component("githubReleases", { bindings: {}, }); +(function (angular) { + app.component("headerNav", { + templateUrl: + "/mix-app/views/app-portal/components/header-nav/headerNav.html", + controller: [ + "$rootScope", + "$scope", + "ngAppSettings", + "localStorageService", + "CommonService", + "ApiService", + "AuthService", + "CultureService", + function ( + $rootScope, + $scope, + ngAppSettings, + localStorageService, + commonService, + apiService, + authService, + cultureService + ) { + var ctrl = this; + ctrl.appSettings = $rootScope.globalSettings; + ctrl.isInRole = $rootScope.isInRole; + this.$onInit = function () { + ctrl.isAdmin = $rootScope.isAdmin; + ctrl.mixConfigurations = $rootScope.mixConfigurations; + cultureService.getList(ngAppSettings.request).then((resp) => { + ctrl.cultures = resp.data.items; + ctrl.selectedCulture = ctrl.cultures.find( + (m) => + m.specificulture == $rootScope.globalSettings.defaultCulture + ); + $scope.$apply(); + }); + authService.fillAuthData().then(() => { + if ( + authService.authentication && + authService.authentication.info.userData + ) { + ctrl.avatar = authService.authentication.info.userData.avatar; + } + }); + }; + ctrl.translate = $rootScope.translate; + ctrl.getConfiguration = function (keyword, isWrap, defaultText) { + return $rootScope.getConfiguration(keyword, isWrap, defaultText); + }; + ctrl.changeLang = function (culture) { + $rootScope.globalSettings.defaultCulture = culture.specificulture; + localStorageService.set("globalSettings", $rootScope.globalSettings); + window.top.location = location.href; + }; + ctrl.logOut = function () { + $rootScope.logOut(); + }; + ctrl.addPermission = function () { + $("#dlg-permission").modal("show"); + }; + ctrl.addBookmark = function () { + $("#dlg-bookmark").modal("show"); + }; + ctrl.toggleSidebar = function () { + $(".main-sidebar").toggle(); + $(".sub-sidebar").toggle(); + // $('.navbar-brand').toggle(); + }; + ctrl.clearCache = async function () { + $rootScope.isBusy = true; + await commonService.clearCache(); + $rootScope.showMessage("success", "success"); + $rootScope.isBusy = false; + $scope.$apply(); + }; + ctrl.showHelper = function (url) { + $rootScope.helperUrl = url; + $("#dev-helper-modal").modal("show"); + }; + ctrl.generateSitemap = async function () { + $rootScope.isBusy = true; + var resp = await commonService.genrateSitemap(); + if (resp) { + window.top.location.href = + "/admin/file/details?folder=" + + resp.fileFolder + + "&filename=" + + resp.filename + + resp.extension; + } else { + $rootScope.isBusy = false; + $rootScope.showErrors(["Server error"]); + } + }; + }, + ], + bindings: { + breadCrumbs: "=", + settings: "=", + }, + }); +})(window.angular); + modules.component("googleAnalytic", { templateUrl: "/mix-app/views/app-portal/components/google-analytic/view.html", bindings: { @@ -10628,110 +10663,6 @@ modules.component("googleAnalytic", { ], }); -(function (angular) { - app.component("headerNav", { - templateUrl: - "/mix-app/views/app-portal/components/header-nav/headerNav.html", - controller: [ - "$rootScope", - "$scope", - "ngAppSettings", - "localStorageService", - "CommonService", - "ApiService", - "AuthService", - "CultureService", - function ( - $rootScope, - $scope, - ngAppSettings, - localStorageService, - commonService, - apiService, - authService, - cultureService - ) { - var ctrl = this; - ctrl.appSettings = $rootScope.globalSettings; - ctrl.isInRole = $rootScope.isInRole; - this.$onInit = function () { - ctrl.isAdmin = $rootScope.isAdmin; - ctrl.mixConfigurations = $rootScope.mixConfigurations; - cultureService.getList(ngAppSettings.request).then((resp) => { - ctrl.cultures = resp.data.items; - ctrl.selectedCulture = ctrl.cultures.find( - (m) => - m.specificulture == $rootScope.globalSettings.defaultCulture - ); - $scope.$apply(); - }); - authService.fillAuthData().then(() => { - if ( - authService.authentication && - authService.authentication.info.userData - ) { - ctrl.avatar = authService.authentication.info.userData.avatar; - } - }); - }; - ctrl.translate = $rootScope.translate; - ctrl.getConfiguration = function (keyword, isWrap, defaultText) { - return $rootScope.getConfiguration(keyword, isWrap, defaultText); - }; - ctrl.changeLang = function (culture) { - $rootScope.globalSettings.defaultCulture = culture.specificulture; - localStorageService.set("globalSettings", $rootScope.globalSettings); - window.top.location = location.href; - }; - ctrl.logOut = function () { - $rootScope.logOut(); - }; - ctrl.addPermission = function () { - $("#dlg-permission").modal("show"); - }; - ctrl.addBookmark = function () { - $("#dlg-bookmark").modal("show"); - }; - ctrl.toggleSidebar = function () { - $(".main-sidebar").toggle(); - $(".sub-sidebar").toggle(); - // $('.navbar-brand').toggle(); - }; - ctrl.clearCache = async function () { - $rootScope.isBusy = true; - await commonService.clearCache(); - $rootScope.showMessage("success", "success"); - $rootScope.isBusy = false; - $scope.$apply(); - }; - ctrl.showHelper = function (url) { - $rootScope.helperUrl = url; - $("#dev-helper-modal").modal("show"); - }; - ctrl.generateSitemap = async function () { - $rootScope.isBusy = true; - var resp = await commonService.genrateSitemap(); - if (resp) { - window.top.location.href = - "/admin/file/details?folder=" + - resp.fileFolder + - "&filename=" + - resp.filename + - resp.extension; - } else { - $rootScope.isBusy = false; - $rootScope.showErrors(["Server error"]); - } - }; - }, - ], - bindings: { - breadCrumbs: "=", - settings: "=", - }, - }); -})(window.angular); - modules.component("highFrequencyMessages", { templateUrl: "/mix-app/views/app-portal/components/high-frequency-messages/view.html", @@ -10909,6 +10840,200 @@ app.controller("HighFrequencyMessagesController", [ }, ]); +modules.component("filterList", { + templateUrl: + "/mix-app/views/app-portal/components/filter-list/filter-list.html", + controller: [ + "$scope", + "$rootScope", + "ngAppSettings", + "CultureService", + function ($scope, $rootScope, ngAppSettings, cultureService) { + var ctrl = this; + ctrl.dateRange = { + fromDate: null, + toDate: null, + }; + ctrl.searchMethods = ["Equal", "Like"]; + ctrl.init = async function () { + if (!ctrl.arrOrderby) { + ctrl.arrOrderby = [ + "Title", + "Priority", + "CreatedDateTime", + "LastModified", + "Status", + ]; + } + ctrl.request.orderBy = ctrl.request.orderBy || ctrl.arrOrderby[0]; + ctrl.directions = ["Asc", "Desc"]; + ctrl.pageSizes = [5, 10, 15, 20]; + ctrl.statuses = $rootScope.globalSettings.statuses; + }; + ctrl.changeLang = function (culture) { + if (culture) { + ctrl.selectedCulture = culture; + ctrl.request.culture = culture.specificulture; + } else { + ctrl.selectedCulture = null; + ctrl.request.culture = null; + } + ctrl.apply(0); + }; + ctrl.apply = function (pageIndex) { + $rootScope.setRequest(ctrl.request, ctrl.key); + ctrl.callback({ pageIndex: pageIndex }); + }; + ctrl.updateDate = function () { + ctrl.request.pageIndex = 0; + if (Date.parse(ctrl.dateRange.fromDate)) { + ctrl.request.fromDate = new Date( + ctrl.dateRange.fromDate + ).toISOString(); + } else { + $scope.request.fromDate = null; + } + if (Date.parse(ctrl.dateRange.toDate)) { + ctrl.request.toDate = new Date(ctrl.dateRange.toDate).toISOString(); + } else { + ctrl.request.toDate = null; + } + $rootScope.setRequest(ctrl.request, ctrl.key); + ctrl.callback({ pageIndex: 0 }); + }; + }, + ], + bindings: { + request: "=", + key: "=?", + arrOrderby: "=?", + createUrl: "=", + createText: "=", + callback: "&", + }, +}); + +modules.component("hubMessages", { + templateUrl: + "/mix-app/views/app-portal/components/hub-messages/hub-messages.html", + controller: "HubMessagesController", + bindings: {}, +}); +app.controller("HubMessagesController", [ + "$scope", + "$rootScope", + "AuthService", + function ($scope, $rootScope, authService) { + BaseHub.call(this, $scope); + authService.fillAuthData(); + $scope.newMsgCount = 0; + $scope.messages = []; + $scope.onConnected = () => { + // $scope.joinRoom("portal"); + }; + $scope.init = function () { + $scope.startConnection( + "portalHub", + authService.authentication.accessToken, + (err) => { + if ( + authService.authentication.refreshToken && + err.message.indexOf("401") >= 0 + ) { + authService.refreshToken().then(async () => { + $scope.startConnection( + "portalHub", + authService.authentication.accessToken + ); + }); + } + } + ); + }; + $scope.readMessages = function () { + $scope.newMsgCount = 0; + $("#modal-hub-messages").modal("show"); + }; + $scope.receiveMessage = function (msg) { + switch (msg.action) { + case "MyConnection": + $scope.hubRequest.from = msg.data; + $scope.$apply(); + break; + case "MemberList": + // filter unique member by username + $scope.members = msg.data.filter( + (value, index, array) => + array.indexOf(array.find((u) => u.username == value.username)) === + index + ); + $scope.$apply(); + break; + case "NewMember": + $scope.newMember(msg.data); + break; + case "MemberOffline": + $scope.removeMember(msg.data); + case "NewMessage": + $scope.newMessage(msg); + break; + } + }; + $scope.newMessage = function (msg) { + msg.style = $scope.getMessageType(msg.type); + if ( + msg.data && + !angular.isObject(msg.data) && + msg.data.indexOf("{") == 0 + ) { + msg.data = JSON.parse(msg.data); + } + $scope.messages.push(msg); + if ( + !msg.from || + msg.from.connectionId != $scope.hubRequest.from.connectionId + ) { + $scope.newMsgCount += 1; + $rootScope.showMessage(msg.title, msg.style); + } + $scope.$apply(); + }; + $scope.removeMember = function (member) { + var index = $scope.members.findIndex( + (x) => x.username === member.username + ); + if (index >= 0) { + $scope.members.splice(index, 1); + } + $scope.$apply(); + }; + + $scope.newMember = function (member) { + var index = $scope.members.findIndex( + (x) => x.username === member.username + ); + if (index < 0) { + $scope.members.splice(0, 0, member); + } + $scope.$apply(); + }; + $scope.getMessageType = function (type) { + switch (type) { + case "Success": + return "success"; + case "Error": + return "danger"; + case "Warning": + return "warning"; + case "Info": + return "info"; + default: + return "default"; + } + }; + }, +]); + modules.component("jsonBuilder", { templateUrl: "/mix-app/views/app-portal/components/json-builder/view.html", bindings: { @@ -11200,149 +11325,28 @@ modules.component("jsonBuilder", { ], }); -modules.component("hubMessages", { +modules.component("jumbotrons", { templateUrl: - "/mix-app/views/app-portal/components/hub-messages/hub-messages.html", - controller: "HubMessagesController", - bindings: {}, -}); -app.controller("HubMessagesController", [ - "$scope", - "$rootScope", - "AuthService", - function ($scope, $rootScope, authService) { - BaseHub.call(this, $scope); - authService.fillAuthData(); - $scope.newMsgCount = 0; - $scope.messages = []; - $scope.onConnected = () => { - // $scope.joinRoom("portal"); - }; - $scope.init = function () { - $scope.startConnection( - "portalHub", - authService.authentication.accessToken, - (err) => { - if ( - authService.authentication.refreshToken && - err.message.indexOf("401") >= 0 - ) { - authService.refreshToken().then(async () => { - $scope.startConnection( - "portalHub", - authService.authentication.accessToken - ); - }); - } - } - ); - }; - $scope.readMessages = function () { - $scope.newMsgCount = 0; - $("#modal-hub-messages").modal("show"); - }; - $scope.receiveMessage = function (msg) { - switch (msg.action) { - case "MyConnection": - $scope.hubRequest.from = msg.data; - $scope.$apply(); - break; - case "MemberList": - // filter unique member by username - $scope.members = msg.data.filter( - (value, index, array) => - array.indexOf(array.find((u) => u.username == value.username)) === - index - ); - $scope.$apply(); - break; - case "NewMember": - $scope.newMember(msg.data); - break; - case "MemberOffline": - $scope.removeMember(msg.data); - case "NewMessage": - $scope.newMessage(msg); - break; - } - }; - $scope.newMessage = function (msg) { - msg.style = $scope.getMessageType(msg.type); - if ( - msg.data && - !angular.isObject(msg.data) && - msg.data.indexOf("{") == 0 - ) { - msg.data = JSON.parse(msg.data); - } - $scope.messages.push(msg); - if ( - !msg.from || - msg.from.connectionId != $scope.hubRequest.from.connectionId - ) { - $scope.newMsgCount += 1; - $rootScope.showMessage(msg.title, msg.style); - } - $scope.$apply(); - }; - $scope.removeMember = function (member) { - var index = $scope.members.findIndex( - (x) => x.username === member.username - ); - if (index >= 0) { - $scope.members.splice(index, 1); - } - $scope.$apply(); - }; - - $scope.newMember = function (member) { - var index = $scope.members.findIndex( - (x) => x.username === member.username - ); - if (index < 0) { - $scope.members.splice(0, 0, member); - } - $scope.$apply(); - }; - $scope.getMessageType = function (type) { - switch (type) { - case "Success": - return "success"; - case "Error": - return "danger"; - case "Warning": - return "warning"; - case "Info": - return "info"; - default: - return "default"; - } - }; - }, -]); - -modules.component("jumbotrons", { - templateUrl: - "/mix-app/views/app-portal/components/jumbotrons/jumbotrons.html", - controller: [ - "$rootScope", - "$scope", - "$location", - function ($rootScope, $scope, $location) { - var ctrl = this; - ctrl.translate = function (keyword) { - return $rootScope.translate(keyword); - }; - // ctrl.back = function () { - // ctrl.backUrl = ctrl.backUrl || '/admin'; - // $location.path(ctrl.backUrl); - // }; - }, - ], - bindings: { - tagName: "=", - tagType: "=", - }, + "/mix-app/views/app-portal/components/jumbotrons/jumbotrons.html", + controller: [ + "$rootScope", + "$scope", + "$location", + function ($rootScope, $scope, $location) { + var ctrl = this; + ctrl.translate = function (keyword) { + return $rootScope.translate(keyword); + }; + // ctrl.back = function () { + // ctrl.backUrl = ctrl.backUrl || '/admin'; + // $location.path(ctrl.backUrl); + // }; + }, + ], + bindings: { + tagName: "=", + tagType: "=", + }, }); // const { data } = require("jquery"); @@ -11648,41 +11652,6 @@ app.controller("LogStreamController", [ }, ]); -modules.component("mainSideBar", { - templateUrl: - "/mix-app/views/app-portal/components/main-side-bar/main-side-bar.html", - controller: [ - "$rootScope", - "$scope", - "ngAppSettings", - "TranslatorService", - "ApiService", - "CommonService", - function ( - $rootScope, - $scope, - ngAppSettings, - translatorService, - apiService, - commonService - ) { - var ctrl = this; - ctrl.items = []; - ctrl.init = async function () { - var resp = await apiService.getPortalMenus(); - if (resp.success && resp.data && resp.data.length) { - ctrl.items = resp.data; - } else { - ctrl.items = JSON.parse($("#portal-menus").val()).items; - } - }; - }, - ], - bindings: { - items: "=?", - }, -}); - modules.component("mainSideBarDynamic", { templateUrl: "/mix-app/views/app-portal/components/main-side-bar-dynamic/main-side-bar-dynamic.html", @@ -11724,6 +11693,41 @@ modules.component("mainSideBarDynamic", { }, }); +modules.component("mainSideBar", { + templateUrl: + "/mix-app/views/app-portal/components/main-side-bar/main-side-bar.html", + controller: [ + "$rootScope", + "$scope", + "ngAppSettings", + "TranslatorService", + "ApiService", + "CommonService", + function ( + $rootScope, + $scope, + ngAppSettings, + translatorService, + apiService, + commonService + ) { + var ctrl = this; + ctrl.items = []; + ctrl.init = async function () { + var resp = await apiService.getPortalMenus(); + if (resp.success && resp.data && resp.data.length) { + ctrl.items = resp.data; + } else { + ctrl.items = JSON.parse($("#portal-menus").val()).items; + } + }; + }, + ], + bindings: { + items: "=?", + }, +}); + modules.component("mainSideBarItem", { templateUrl: "/mix-app/views/app-portal/components/main-side-bar-item/main-side-bar-item.html", @@ -12673,290 +12677,58 @@ modules.component("mixDatabaseDataValueEditor", { ], }); -modules.component("mixDatabaseDataValues", { +modules.component("mixDatabaseForm", { templateUrl: - "/mix-app/views/app-portal/components/mix-database-data-values/view.html", + "/mix-app/views/app-portal/components/mix-database-form/view.html", bindings: { - database: "=?", + mixDatabaseId: "=?", mixDatabaseName: "=?", mixDatabaseTitle: "=?", - mixDatabaseId: "=?", - parentName: "=?", + mixDatabaseType: "=?", parentId: "=?", + parentType: "=?", // MixContentType + parentName: "=?", + postId: "=?", + pageId: "=?", + moduleId: "=?", + columns: "=?", + references: "=?", + mixDataContentId: "=?", + mixDataContent: "=?", + intParentId: "=?", guidParentId: "=?", - header: "=?", - data: "=?", - canDrag: "=?", - queries: "=?", - filterType: "=?", - compareType: "=?", - selectedList: "=?", - selectSingle: "=?", - database: "=?", - onFilterList: "&?", - onApplyList: "&?", - onSendMail: "&?", - onUpdate: "&?", - onDuplicate: "&?", - onDelete: "&?", + defaultId: "=", + backUrl: "=?", + level: "=?", + hideAction: "=?", + onSave: "&?", + onSaveSuccess: "&?", }, controller: [ "$rootScope", "$scope", - "$location", "$routeParams", - "ngAppSettings", + "$location", + "RestMixAssociationPortalService", "RestMixDatabasePortalService", "MixDbService", + "AuthService", function ( $rootScope, $scope, - $location, $routeParams, - ngAppSettings, + $location, + associationService, databaseService, - dataService + service, + authService ) { var ctrl = this; - ctrl.intShowColumn = 3; - ctrl.request = angular.copy(ngAppSettings.request); - ctrl.actions = ["Delete", "SendMail"]; - ctrl.filterTypes = ["contain", "equal"]; - ctrl.compareTypes = ["or", "and"]; - ctrl.selectedProp = null; - ctrl.mixConfigurations = $rootScope.globalSettings; - ctrl.$onInit = async function () { - dataService.initDbName(ctrl.mixDatabaseName); - ctrl.request.name = ctrl.mixDatabaseName; - ctrl.request.parentName = ctrl.parentName; - ctrl.request.parentId = ctrl.parentId; - ctrl.request.guidParentId = ctrl.guidParentId; - if (!ctrl.selectedList) { - ctrl.selectedList = { - action: "Delete", - data: [], - }; - } - if (!ctrl.database) { - var getDatabase = await databaseService.getByName( - ctrl.mixDatabaseName - ); - if (getDatabase.success) { - ctrl.database = getDatabase.data; - $scope.$apply(); - } - } - if (!ctrl.data) { - await ctrl.loadData(); - } - ctrl.createUrl = `/admin/mix-database-data/create?mixDatabaseId=${ - ctrl.database.id - }&mixDatabaseName=${ctrl.database.systemName}&mixDatabaseTitle=${ - ctrl.database.displayName - }&dataContentId=default&guidParentId=${ - ctrl.guidParentId || "" - }&parentId=${ctrl.parentId || ""}&parentName=${ctrl.parentName || ""}`; - $scope.$apply(); - }; - ctrl.loadData = async function () { - dataService.initDbName(ctrl.mixDatabaseName); - ctrl.request.queries = []; - if (ctrl.queries) { - Object.keys(ctrl.queries).forEach((e) => { - if (ctrl.queries[e]) { - ctrl.request.queries.push({ - fieldName: e, - value: ctrl.queries[e], - }); - } - }); - } - var getData = await dataService.filter(ctrl.request); - ctrl.data = getData.data; - ctrl.selectedIds = ctrl.data.items.map((m) => m.id); - $scope.$apply(); - }; - ctrl.select = function (item) { - if (item.isSelected) { - if (ctrl.selectSingle == "true") { - ctrl.selectedList.data.items = []; - ctrl.selectedList.data.items.push(item); - } else { - var current = $rootScope.findObjectByKey( - ctrl.selectedList, - "id", - item.id - ); - if (!current) { - ctrl.selectedList.data.items.push(item); - } - } - } else { - $rootScope.removeObject(ctrl.selectedList, item.id); - } - }; - ctrl.selectAll = function (isSelected) { - ctrl.selectedList.data.items = []; - angular.forEach(ctrl.data.items, function (e) { - e.isSelected = isSelected; - if (isSelected) { - ctrl.selectedList.data.items.push(e.id); - } - }); - }; - ctrl.filter = function () { - ctrl.data.items = []; - ctrl.loadData(); - }; - ctrl.sendMail = async function (data) { - ctrl.onSendMail({ data: data }); - }; - ctrl.apply = async function () { - ctrl.onApplyList(); - }; - - ctrl.duplicate = function (data) { - ctrl.onDuplicate({ data: data }); - }; - - ctrl.update = function (data) { - let url = `/admin/mix-database-data/details?dataContentId=${ - data.id - }&mixDatabaseName=${ctrl.mixDatabaseName}&mixDatabaseTitle=${ - ctrl.mixDatabaseTitle - }&guidParentId=${ctrl.guidParentId || ""}&parentId=${ - ctrl.parentId || "" - }&parentName=${ctrl.parentName || ""}`; - $location.url(url); - }; - - ctrl.delete = function (data) { - $rootScope.showConfirm( - ctrl, - "removeConfirmed", - [data.id], - null, - "Remove", - "Deleted data will not able to recover, are you sure you want to delete this item?" - ); - }; - - ctrl.removeConfirmed = async function (dataContentId) { - $rootScope.isBusy = true; - var result = await dataService.delete([dataContentId]); - if (result.success) { - if (ctrl.onDelete) { - ctrl.onDelete({ data: dataContentId }); - } - await ctrl.loadData(); - $rootScope.isBusy = false; - $scope.$apply(); - } else { - $rootScope.showErrors(result.errors); - $rootScope.isBusy = false; - $scope.$apply(); - } - }; - - ctrl.filterData = function (item, attributeName) { - return $rootScope.findObjectByKey( - item.data.items, - "attributeName", - attributeName - ); - }; - - ctrl.dragStart = function (index) { - ctrl.dragStartIndex = index; - ctrl.minPriority = ctrl.data.items[0].priority; - }; - ctrl.updateOrders = function (index, items) { - if (index > ctrl.dragStartIndex) { - ctrl.data.items.splice(ctrl.dragStartIndex, 1); - } else { - ctrl.data.items.splice(ctrl.dragStartIndex + 1, 1); - } - ctrl.updateDataInfos(); - }; - ctrl.updateDataInfos = async function () { - angular.forEach(ctrl.data.items, async function (e, i) { - e.priority = ctrl.minPriority + i; - var resp = await dataService.saveFields(e.id, { - priority: e.priority, - }); - if (resp && resp.success) { - $scope.activedPage = resp.data; - } else { - if (resp) { - $rootScope.showErrors(resp.errors); - } - } - }); - }; - - ctrl.view = function (item) { - var obj = { - columns: ctrl.database.columns, - item: item, - }; - $rootScope.preview("mix-database-data", obj, null, "modal-lg"); - }; - }, - ], -}); - -modules.component("mixDatabaseForm", { - templateUrl: - "/mix-app/views/app-portal/components/mix-database-form/view.html", - bindings: { - mixDatabaseId: "=?", - mixDatabaseName: "=?", - mixDatabaseTitle: "=?", - mixDatabaseType: "=?", - parentId: "=?", - parentType: "=?", // MixContentType - parentName: "=?", - postId: "=?", - pageId: "=?", - moduleId: "=?", - columns: "=?", - references: "=?", - mixDataContentId: "=?", - mixDataContent: "=?", - intParentId: "=?", - guidParentId: "=?", - defaultId: "=", - backUrl: "=?", - level: "=?", - hideAction: "=?", - onSave: "&?", - onSaveSuccess: "&?", - }, - controller: [ - "$rootScope", - "$scope", - "$routeParams", - "$location", - "RestMixAssociationPortalService", - "RestMixDatabasePortalService", - "MixDbService", - "AuthService", - function ( - $rootScope, - $scope, - $routeParams, - $location, - associationService, - databaseService, - service, - authService - ) { - var ctrl = this; - BaseHub.call(this, ctrl); - ctrl.isBusy = false; - ctrl.attributes = []; - ctrl.isInRole = $rootScope.isInRole; - ctrl.defaultData = null; + BaseHub.call(this, ctrl); + ctrl.isBusy = false; + ctrl.attributes = []; + ctrl.isInRole = $rootScope.isInRole; + ctrl.defaultData = null; ctrl.selectedProp = null; ctrl.mixConfigurations = $rootScope.globalSettings; ctrl.$onInit = async function () { @@ -13217,26 +12989,258 @@ modules.component("mixDatabaseForm", { ], }); -modules.component("mixDatabaseNavData", { +modules.component("mixDatabaseDataValues", { templateUrl: - "/mix-app/views/app-portal/components/mix-database-nav-data/view.html", + "/mix-app/views/app-portal/components/mix-database-data-values/view.html", bindings: { - nav: "=", - parentId: "=", - parentType: "=", + database: "=?", + mixDatabaseName: "=?", + mixDatabaseTitle: "=?", + mixDatabaseId: "=?", + parentName: "=?", + parentId: "=?", + guidParentId: "=?", + header: "=?", + data: "=?", + canDrag: "=?", + queries: "=?", + filterType: "=?", + compareType: "=?", + selectedList: "=?", + selectSingle: "=?", + database: "=?", + onFilterList: "&?", + onApplyList: "&?", + onSendMail: "&?", onUpdate: "&?", + onDuplicate: "&?", onDelete: "&?", }, controller: [ "$rootScope", "$scope", + "$location", + "$routeParams", "ngAppSettings", - "RestRelatedAttributeDataPortalService", - "RestMixDatabaseDataPortalService", - function ($rootScope, $scope, ngAppSettings, navService, dataService) { + "RestMixDatabasePortalService", + "MixDbService", + function ( + $rootScope, + $scope, + $location, + $routeParams, + ngAppSettings, + databaseService, + dataService + ) { var ctrl = this; - ctrl.data = null; - ctrl.selected = null; + ctrl.intShowColumn = 3; + ctrl.request = angular.copy(ngAppSettings.request); + ctrl.actions = ["Delete", "SendMail"]; + ctrl.filterTypes = ["contain", "equal"]; + ctrl.compareTypes = ["or", "and"]; + ctrl.selectedProp = null; + ctrl.mixConfigurations = $rootScope.globalSettings; + ctrl.$onInit = async function () { + dataService.initDbName(ctrl.mixDatabaseName); + ctrl.request.name = ctrl.mixDatabaseName; + ctrl.request.parentName = ctrl.parentName; + ctrl.request.parentId = ctrl.parentId; + ctrl.request.guidParentId = ctrl.guidParentId; + if (!ctrl.selectedList) { + ctrl.selectedList = { + action: "Delete", + data: [], + }; + } + if (!ctrl.database) { + var getDatabase = await databaseService.getByName( + ctrl.mixDatabaseName + ); + if (getDatabase.success) { + ctrl.database = getDatabase.data; + $scope.$apply(); + } + } + if (!ctrl.data) { + await ctrl.loadData(); + } + ctrl.createUrl = `/admin/mix-database-data/create?mixDatabaseId=${ + ctrl.database.id + }&mixDatabaseName=${ctrl.database.systemName}&mixDatabaseTitle=${ + ctrl.database.displayName + }&dataContentId=default&guidParentId=${ + ctrl.guidParentId || "" + }&parentId=${ctrl.parentId || ""}&parentName=${ctrl.parentName || ""}`; + $scope.$apply(); + }; + ctrl.loadData = async function () { + dataService.initDbName(ctrl.mixDatabaseName); + ctrl.request.queries = []; + if (ctrl.queries) { + Object.keys(ctrl.queries).forEach((e) => { + if (ctrl.queries[e]) { + ctrl.request.queries.push({ + fieldName: e, + value: ctrl.queries[e], + }); + } + }); + } + var getData = await dataService.filter(ctrl.request); + ctrl.data = getData.data; + ctrl.selectedIds = ctrl.data.items.map((m) => m.id); + $scope.$apply(); + }; + ctrl.select = function (item) { + if (item.isSelected) { + if (ctrl.selectSingle == "true") { + ctrl.selectedList.data.items = []; + ctrl.selectedList.data.items.push(item); + } else { + var current = $rootScope.findObjectByKey( + ctrl.selectedList, + "id", + item.id + ); + if (!current) { + ctrl.selectedList.data.items.push(item); + } + } + } else { + $rootScope.removeObject(ctrl.selectedList, item.id); + } + }; + ctrl.selectAll = function (isSelected) { + ctrl.selectedList.data.items = []; + angular.forEach(ctrl.data.items, function (e) { + e.isSelected = isSelected; + if (isSelected) { + ctrl.selectedList.data.items.push(e.id); + } + }); + }; + ctrl.filter = function () { + ctrl.data.items = []; + ctrl.loadData(); + }; + ctrl.sendMail = async function (data) { + ctrl.onSendMail({ data: data }); + }; + ctrl.apply = async function () { + ctrl.onApplyList(); + }; + + ctrl.duplicate = function (data) { + ctrl.onDuplicate({ data: data }); + }; + + ctrl.update = function (data) { + let url = `/admin/mix-database-data/details?dataContentId=${ + data.id + }&mixDatabaseName=${ctrl.mixDatabaseName}&mixDatabaseTitle=${ + ctrl.mixDatabaseTitle + }&guidParentId=${ctrl.guidParentId || ""}&parentId=${ + ctrl.parentId || "" + }&parentName=${ctrl.parentName || ""}`; + $location.url(url); + }; + + ctrl.delete = function (data) { + $rootScope.showConfirm( + ctrl, + "removeConfirmed", + [data.id], + null, + "Remove", + "Deleted data will not able to recover, are you sure you want to delete this item?" + ); + }; + + ctrl.removeConfirmed = async function (dataContentId) { + $rootScope.isBusy = true; + var result = await dataService.delete([dataContentId]); + if (result.success) { + if (ctrl.onDelete) { + ctrl.onDelete({ data: dataContentId }); + } + await ctrl.loadData(); + $rootScope.isBusy = false; + $scope.$apply(); + } else { + $rootScope.showErrors(result.errors); + $rootScope.isBusy = false; + $scope.$apply(); + } + }; + + ctrl.filterData = function (item, attributeName) { + return $rootScope.findObjectByKey( + item.data.items, + "attributeName", + attributeName + ); + }; + + ctrl.dragStart = function (index) { + ctrl.dragStartIndex = index; + ctrl.minPriority = ctrl.data.items[0].priority; + }; + ctrl.updateOrders = function (index, items) { + if (index > ctrl.dragStartIndex) { + ctrl.data.items.splice(ctrl.dragStartIndex, 1); + } else { + ctrl.data.items.splice(ctrl.dragStartIndex + 1, 1); + } + ctrl.updateDataInfos(); + }; + ctrl.updateDataInfos = async function () { + angular.forEach(ctrl.data.items, async function (e, i) { + e.priority = ctrl.minPriority + i; + var resp = await dataService.saveFields(e.id, { + priority: e.priority, + }); + if (resp && resp.success) { + $scope.activedPage = resp.data; + } else { + if (resp) { + $rootScope.showErrors(resp.errors); + } + } + }); + }; + + ctrl.view = function (item) { + var obj = { + columns: ctrl.database.columns, + item: item, + }; + $rootScope.preview("mix-database-data", obj, null, "modal-lg"); + }; + }, + ], +}); + +modules.component("mixDatabaseNavData", { + templateUrl: + "/mix-app/views/app-portal/components/mix-database-nav-data/view.html", + bindings: { + nav: "=", + parentId: "=", + parentType: "=", + onUpdate: "&?", + onDelete: "&?", + }, + controller: [ + "$rootScope", + "$scope", + "ngAppSettings", + "RestRelatedAttributeDataPortalService", + "RestMixDatabaseDataPortalService", + function ($rootScope, $scope, ngAppSettings, navService, dataService) { + var ctrl = this; + ctrl.data = null; + ctrl.selected = null; ctrl.navRequest = angular.copy(ngAppSettings.request); ctrl.setRequest = angular.copy(ngAppSettings.request); ctrl.mixConfigurations = $rootScope.globalSettings; @@ -13819,90 +13823,178 @@ modules.component("mixFileExtract", { ], }); -modules.component("mixFileUpload", { - templateUrl: "/mix-app/views/app-portal/components/mix-file-upload/view.html", - bindings: { - folder: "=?", - accept: "=?", - onFail: "&?", - onSuccess: "&?", - }, +modules.component("mixSelectIcons", { + templateUrl: + "/mix-app/views/app-portal/components/mix-select-icons/mix-select-icons.html", controller: [ "$rootScope", "$scope", - "ngAppSettings", - "FileServices", - function ($rootScope, $scope, ngAppSettings, fileService) { + "$location", + "$element", + function ($rootScope, $scope, $location, $element) { var ctrl = this; - ctrl.mediaFile = {}; - ctrl.isAdmin = $rootScope.isAdmin; - ctrl.mediaNavs = []; - ctrl.$onInit = function () { - ctrl.id = Math.floor(Math.random() * 100); + ctrl.limitTo = 20; + ctrl.container = $element[0].querySelector(".list-icon"); + ctrl.translate = function (keyword) { + return $rootScope.translate(keyword); }; - ctrl.selectFile = function (files) { - if (files !== undefined && files !== null && files.length > 0) { - const file = files[0]; - ctrl.file = file; - ctrl.mediaFile.folder = ctrl.folder ? ctrl.folder : "Media"; - ctrl.mediaFile.title = ctrl.title ? ctrl.title : ""; - ctrl.mediaFile.description = ctrl.description ? ctrl.description : ""; - ctrl.mediaFile.file = file; - if (ctrl.auto == "true") { - ctrl.uploadFile(file); - } else { - ctrl.getBase64(file); - } + ctrl.showMore = () => { + if ( + ctrl.container.scrollTop >= ctrl.container.scrollHeight - 200 && + ctrl.limitTo < ctrl.options.length + ) { + ctrl.limitTo *= 2; } }; - - ctrl.getBase64 = function (file) { - if (file !== null) { - $rootScope.isBusy = true; - var reader = new FileReader(); - reader.readAsDataURL(file); - reader.onload = function () { - if (ctrl.mediaFile) { - ctrl.mediaFile.fileName = file.name.substring( - 0, - file.name.lastIndexOf(".") - ); - ctrl.mediaFile.extension = file.name.substring( - file.name.lastIndexOf(".") - ); - ctrl.mediaFile.fileStream = reader.result; - } - $rootScope.isBusy = false; - $scope.$apply(); - }; - reader.onerror = function (error) { - $rootScope.isBusy = false; - $rootScope.showErrors([error]); - }; - } else { - return null; - } + ctrl.select = function (ico) { + ctrl.data = ico.class; }; + }, + ], + bindings: { + data: "=", + prefix: "=", + options: "=", + }, +}); - ctrl.uploadFile = async function () { - if (ctrl.file) { - $rootScope.isBusy = true; - var response = await fileService.uploadFile(ctrl.file, ctrl.folder); - if (response) { - if (ctrl.onSuccess) { - ctrl.onSuccess(); +modules.component("mixTemplateEditor", { + templateUrl: + "/mix-app/views/app-portal/components/mix-template-editor/view.html", + bindings: { + template: "=", + folderType: "=", + isReadonly: "=?", + lineCount: "=?", + hideJs: "=?", + hideCss: "=?", + }, + controller: [ + "$scope", + "$rootScope", + "$routeParams", + "ngAppSettings", + "AppSettingsService", + "TemplateService", + function ( + $scope, + $rootScope, + $routeParams, + ngAppSettings, + appSettingsService, + service + ) { + BaseCtrl.call( + this, + $scope, + $rootScope, + $routeParams, + ngAppSettings, + service + ); + var ctrl = this; + ctrl.isNull = false; + ctrl.request = angular.copy(ngAppSettings.request); + ctrl.selectPane = function (pane) { + ctrl.activedPane = pane; + }; + ctrl.selectTemplate = function (template) { + ctrl.template = template; + $scope.$broadcast("updateContentCodeEditors", []); + }; + ctrl.new = function () { + ctrl.template.id = 0; + }; + ctrl.init = async function () { + if (ctrl.folderType) { + var themeId = $rootScope.mixConfigurations.data.ThemeId; + ctrl.request.key = ctrl.folderType; + var resp = await service.getList(ctrl.request, [themeId]); + + if (resp && resp.success) { + ctrl.templates = resp.data.items; + if (!ctrl.template) { + ctrl.template = ctrl.templates[0]; } - $rootScope.showMessage("success", "success"); $rootScope.isBusy = false; $scope.$apply(); } else { - $rootScope.showErrors(['Cannot upload file']); - $rootScope.isBusy = false; - $scope.$apply(); + if (resp) { + $rootScope.showErrors(resp.errors); + $rootScope.isBusy = false; + $scope.$apply(); + } } + } + }; + ctrl.updateTemplateContent = function (content) { + ctrl.template.content = content; + }; + ctrl.updateStyleContent = function (content) { + ctrl.template.scripts = content; + }; + ctrl.updateScriptContent = function (content) { + ctrl.template.styles = content; + }; + }, + ], +}); + +modules.component("modalBookmark", { + templateUrl: + "/mix-app/views/app-portal/components/modal-bookmark/modal-bookmark.html", + controller: [ + "$rootScope", + "$scope", + "localStorageService", + "$routeParams", + "$location", + function ( + $rootScope, + $scope, + localStorageService, + $routeParams, + $location + ) { + var ctrl = this; + ctrl.searchText = ""; + ctrl.defaultModel = { + url: "", + title: "", + }; + ctrl.bookmarks = []; + ctrl.model = null; + ctrl.$onInit = function () { + ctrl.model = angular.copy(ctrl.defaultModel); + ctrl.getCurrentUrl(); + ctrl.bookmarks = localStorageService.get("bookmarks") || []; + }; + ctrl.goToPath = function (url) { + $rootScope.goToPath(url); + $("#dlg-bookmark").modal("hide"); + }; + ctrl.getCurrentUrl = function (url) { + url = url || $location.url(); + ctrl.model.url = url; + ctrl.model.title = url; + }; + ctrl.removeBookmark = function (url) { + $rootScope.removeObjectByKey(ctrl.bookmarks, "url", url); + localStorageService.set("bookmarks", ctrl.bookmarks); + }; + ctrl.addBookmark = function () { + var current = $rootScope.findObjectByKey( + ctrl.bookmarks, + "url", + ctrl.model.url + ); + if (current) { + current.title = ctrl.model.title; } else { - $rootScope.showErrors(["Please choose file"]); + ctrl.bookmarks.push(ctrl.model); } + localStorageService.set("bookmarks", ctrl.bookmarks); + ctrl.model = angular.copy(ctrl.defaultModel); }; }, ], @@ -14025,126 +14117,9 @@ app.controller("MixNavigationController", [ }; $scope.removeCallback = function () { $scope.getList(); - }; - }, -]); - -modules.component("mixSelectIcons", { - templateUrl: - "/mix-app/views/app-portal/components/mix-select-icons/mix-select-icons.html", - controller: [ - "$rootScope", - "$scope", - "$location", - "$element", - function ($rootScope, $scope, $location, $element) { - var ctrl = this; - ctrl.limitTo = 20; - ctrl.container = $element[0].querySelector(".list-icon"); - ctrl.translate = function (keyword) { - return $rootScope.translate(keyword); - }; - ctrl.showMore = () => { - if ( - ctrl.container.scrollTop >= ctrl.container.scrollHeight - 200 && - ctrl.limitTo < ctrl.options.length - ) { - ctrl.limitTo *= 2; - } - }; - ctrl.select = function (ico) { - ctrl.data = ico.class; - }; - }, - ], - bindings: { - data: "=", - prefix: "=", - options: "=", - }, -}); - -modules.component("mixTemplateEditor", { - templateUrl: - "/mix-app/views/app-portal/components/mix-template-editor/view.html", - bindings: { - template: "=", - folderType: "=", - isReadonly: "=?", - lineCount: "=?", - hideJs: "=?", - hideCss: "=?", - }, - controller: [ - "$scope", - "$rootScope", - "$routeParams", - "ngAppSettings", - "AppSettingsService", - "TemplateService", - function ( - $scope, - $rootScope, - $routeParams, - ngAppSettings, - appSettingsService, - service - ) { - BaseCtrl.call( - this, - $scope, - $rootScope, - $routeParams, - ngAppSettings, - service - ); - var ctrl = this; - ctrl.isNull = false; - ctrl.request = angular.copy(ngAppSettings.request); - ctrl.selectPane = function (pane) { - ctrl.activedPane = pane; - }; - ctrl.selectTemplate = function (template) { - ctrl.template = template; - $scope.$broadcast("updateContentCodeEditors", []); - }; - ctrl.new = function () { - ctrl.template.id = 0; - }; - ctrl.init = async function () { - if (ctrl.folderType) { - var themeId = $rootScope.mixConfigurations.data.ThemeId; - ctrl.request.key = ctrl.folderType; - var resp = await service.getList(ctrl.request, [themeId]); - - if (resp && resp.success) { - ctrl.templates = resp.data.items; - if (!ctrl.template) { - ctrl.template = ctrl.templates[0]; - } - $rootScope.isBusy = false; - $scope.$apply(); - } else { - if (resp) { - $rootScope.showErrors(resp.errors); - $rootScope.isBusy = false; - $scope.$apply(); - } - } - } - }; - ctrl.updateTemplateContent = function (content) { - ctrl.template.content = content; - }; - ctrl.updateStyleContent = function (content) { - ctrl.template.scripts = content; - }; - ctrl.updateScriptContent = function (content) { - ctrl.template.styles = content; - }; - }, - ], -}); + }; + }, +]); modules.component("mixValueEditor", { templateUrl: @@ -14281,61 +14256,90 @@ modules.component("mixValueEditor", { ], }); -modules.component("modalBookmark", { - templateUrl: - "/mix-app/views/app-portal/components/modal-bookmark/modal-bookmark.html", +modules.component("mixFileUpload", { + templateUrl: "/mix-app/views/app-portal/components/mix-file-upload/view.html", + bindings: { + folder: "=?", + accept: "=?", + onFail: "&?", + onSuccess: "&?", + }, controller: [ "$rootScope", "$scope", - "localStorageService", - "$routeParams", - "$location", - function ( - $rootScope, - $scope, - localStorageService, - $routeParams, - $location - ) { + "ngAppSettings", + "FileServices", + function ($rootScope, $scope, ngAppSettings, fileService) { var ctrl = this; - ctrl.searchText = ""; - ctrl.defaultModel = { - url: "", - title: "", - }; - ctrl.bookmarks = []; - ctrl.model = null; + ctrl.mediaFile = {}; + ctrl.isAdmin = $rootScope.isAdmin; + ctrl.mediaNavs = []; ctrl.$onInit = function () { - ctrl.model = angular.copy(ctrl.defaultModel); - ctrl.getCurrentUrl(); - ctrl.bookmarks = localStorageService.get("bookmarks") || []; - }; - ctrl.goToPath = function (url) { - $rootScope.goToPath(url); - $("#dlg-bookmark").modal("hide"); + ctrl.id = Math.floor(Math.random() * 100); }; - ctrl.getCurrentUrl = function (url) { - url = url || $location.url(); - ctrl.model.url = url; - ctrl.model.title = url; + ctrl.selectFile = function (files) { + if (files !== undefined && files !== null && files.length > 0) { + const file = files[0]; + ctrl.file = file; + ctrl.mediaFile.folder = ctrl.folder ? ctrl.folder : "Media"; + ctrl.mediaFile.title = ctrl.title ? ctrl.title : ""; + ctrl.mediaFile.description = ctrl.description ? ctrl.description : ""; + ctrl.mediaFile.file = file; + if (ctrl.auto == "true") { + ctrl.uploadFile(file); + } else { + ctrl.getBase64(file); + } + } }; - ctrl.removeBookmark = function (url) { - $rootScope.removeObjectByKey(ctrl.bookmarks, "url", url); - localStorageService.set("bookmarks", ctrl.bookmarks); + + ctrl.getBase64 = function (file) { + if (file !== null) { + $rootScope.isBusy = true; + var reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = function () { + if (ctrl.mediaFile) { + ctrl.mediaFile.fileName = file.name.substring( + 0, + file.name.lastIndexOf(".") + ); + ctrl.mediaFile.extension = file.name.substring( + file.name.lastIndexOf(".") + ); + ctrl.mediaFile.fileStream = reader.result; + } + $rootScope.isBusy = false; + $scope.$apply(); + }; + reader.onerror = function (error) { + $rootScope.isBusy = false; + $rootScope.showErrors([error]); + }; + } else { + return null; + } }; - ctrl.addBookmark = function () { - var current = $rootScope.findObjectByKey( - ctrl.bookmarks, - "url", - ctrl.model.url - ); - if (current) { - current.title = ctrl.model.title; + + ctrl.uploadFile = async function () { + if (ctrl.file) { + $rootScope.isBusy = true; + var response = await fileService.uploadFile(ctrl.file, ctrl.folder); + if (response) { + if (ctrl.onSuccess) { + ctrl.onSuccess(); + } + $rootScope.showMessage("success", "success"); + $rootScope.isBusy = false; + $scope.$apply(); + } else { + $rootScope.showErrors(['Cannot upload file']); + $rootScope.isBusy = false; + $scope.$apply(); + } } else { - ctrl.bookmarks.push(ctrl.model); + $rootScope.showErrors(["Please choose file"]); } - localStorageService.set("bookmarks", ctrl.bookmarks); - ctrl.model = angular.copy(ctrl.defaultModel); }; }, ], @@ -15096,10 +15100,11 @@ modules.component("modalNavMetas", { ], }); -modules.component("modalNavPages", { - templateUrl: "/mix-app/views/app-portal/components/modal-nav-pages/view.html", +modules.component("modalNavPosts", { + templateUrl: + "/mix-app/views/app-portal/components/modal-nav-posts/modal-nav-posts.html", bindings: { - srcField: "=", + srcColumn: "=", srcId: "=", query: "=", selected: "=", @@ -15108,15 +15113,17 @@ modules.component("modalNavPages", { controller: [ "$rootScope", "$scope", + "$routeParams", "ngAppSettings", - "PageRestService", - function ($rootScope, $scope, ngAppSettings, pageService) { + "PostRestService", + function ($rootScope, $scope, $routeParams, ngAppSettings, postService) { var ctrl = this; ctrl.request = angular.copy(ngAppSettings.request); ctrl.navs = []; + ctrl.associations = []; ctrl.data = { items: [] }; - ctrl.loadData = async function (pageIndex) { - ctrl.request.query = ctrl.query + ctrl.srcId; + ctrl.loadPosts = async function (pageIndex) { + // ctrl.request.query = ctrl.query + ctrl.srcId; if (pageIndex !== undefined) { ctrl.request.pageIndex = pageIndex; } @@ -15128,23 +15135,29 @@ modules.component("modalNavPages", { var d = new Date(ctrl.request.toDate); ctrl.request.toDate = d.toISOString(); } - var response = await pageService.getList(ctrl.request); + if ($routeParams.type) { + ctrl.request.postType = $routeParams.type; + } else { + ctrl.request.postType = ""; + } + var response = await postService.getList(ctrl.request); if (response.success) { ctrl.data = response.data; - ctrl.navs = []; - angular.forEach(response.data.items, function (e) { - var item = { - priority: e.priority, - description: e.title, - pageId: e.id, - image: e.thumbnailUrl, - specificulture: e.specificulture, - status: "Published", - isActived: false, - }; - item[ctrl.srcField] = ctrl.srcId; - ctrl.navs.push(item); - }); + // ctrl.navs = []; + // angular.forEach(response.data.items, function (e) { + // var item = { + // priority: e.priority, + // description: e.title, + // postId: e.id, + // image: e.thumbnailUrl, + // specificulture: e.specificulture, + // post: e, + // status: "Published", + // isActived: false, + // }; + // item[ctrl.srcColumn] = ctrl.srcId; + // ctrl.navs.push(item); + // }); $rootScope.isBusy = false; $scope.$apply(); } else { @@ -15153,6 +15166,9 @@ modules.component("modalNavPages", { $scope.$apply(); } }; + ctrl.select = async (associations) => { + ctrl.associations = associations; + }; ctrl.saveSelected = function () { ctrl.selected = $rootScope.filterArray( ctrl.navs, @@ -15161,7 +15177,7 @@ modules.component("modalNavPages", { ); setTimeout(() => { ctrl.save().then(() => { - ctrl.loadPages(); + ctrl.loadPosts(); }); }, 500); }; @@ -15169,11 +15185,10 @@ modules.component("modalNavPages", { ], }); -modules.component("modalNavPosts", { - templateUrl: - "/mix-app/views/app-portal/components/modal-nav-posts/modal-nav-posts.html", +modules.component("modalNavPages", { + templateUrl: "/mix-app/views/app-portal/components/modal-nav-pages/view.html", bindings: { - srcColumn: "=", + srcField: "=", srcId: "=", query: "=", selected: "=", @@ -15182,17 +15197,15 @@ modules.component("modalNavPosts", { controller: [ "$rootScope", "$scope", - "$routeParams", "ngAppSettings", - "PostRestService", - function ($rootScope, $scope, $routeParams, ngAppSettings, postService) { + "PageRestService", + function ($rootScope, $scope, ngAppSettings, pageService) { var ctrl = this; ctrl.request = angular.copy(ngAppSettings.request); ctrl.navs = []; - ctrl.associations = []; ctrl.data = { items: [] }; - ctrl.loadPosts = async function (pageIndex) { - // ctrl.request.query = ctrl.query + ctrl.srcId; + ctrl.loadData = async function (pageIndex) { + ctrl.request.query = ctrl.query + ctrl.srcId; if (pageIndex !== undefined) { ctrl.request.pageIndex = pageIndex; } @@ -15204,29 +15217,23 @@ modules.component("modalNavPosts", { var d = new Date(ctrl.request.toDate); ctrl.request.toDate = d.toISOString(); } - if ($routeParams.type) { - ctrl.request.postType = $routeParams.type; - } else { - ctrl.request.postType = ""; - } - var response = await postService.getList(ctrl.request); + var response = await pageService.getList(ctrl.request); if (response.success) { ctrl.data = response.data; - // ctrl.navs = []; - // angular.forEach(response.data.items, function (e) { - // var item = { - // priority: e.priority, - // description: e.title, - // postId: e.id, - // image: e.thumbnailUrl, - // specificulture: e.specificulture, - // post: e, - // status: "Published", - // isActived: false, - // }; - // item[ctrl.srcColumn] = ctrl.srcId; - // ctrl.navs.push(item); - // }); + ctrl.navs = []; + angular.forEach(response.data.items, function (e) { + var item = { + priority: e.priority, + description: e.title, + pageId: e.id, + image: e.thumbnailUrl, + specificulture: e.specificulture, + status: "Published", + isActived: false, + }; + item[ctrl.srcField] = ctrl.srcId; + ctrl.navs.push(item); + }); $rootScope.isBusy = false; $scope.$apply(); } else { @@ -15235,9 +15242,6 @@ modules.component("modalNavPosts", { $scope.$apply(); } }; - ctrl.select = async (associations) => { - ctrl.associations = associations; - }; ctrl.saveSelected = function () { ctrl.selected = $rootScope.filterArray( ctrl.navs, @@ -15246,7 +15250,7 @@ modules.component("modalNavPosts", { ); setTimeout(() => { ctrl.save().then(() => { - ctrl.loadPosts(); + ctrl.loadPages(); }); }, 500); }; @@ -15254,6 +15258,15 @@ modules.component("modalNavPosts", { ], }); +modules.component("modalPermission", { + templateUrl: + "/mix-app/views/app-portal/components/modal-permission/modal-permission.html", + controller: "PermissionController", + bindings: { + message: "=", + }, +}); + modules.component("modalNavs", { templateUrl: "/mix-app/views/app-portal/components/modal-navs/view.html", bindings: { @@ -15386,15 +15399,6 @@ modules.component("modalNavs", { ], }); -modules.component("modalPermission", { - templateUrl: - "/mix-app/views/app-portal/components/modal-permission/modal-permission.html", - controller: "PermissionController", - bindings: { - message: "=", - }, -}); - modules.component("modalTemplate", { templateUrl: "/mix-app/views/app-portal/components/modal-template/view.html", controller: [ diff --git a/src/applications/Mixcore/wwwroot/mix-app/views/app-portal/pages/application/details.html b/src/applications/Mixcore/wwwroot/mix-app/views/app-portal/pages/application/details.html index dc3903256..3fdd7ef15 100644 --- a/src/applications/Mixcore/wwwroot/mix-app/views/app-portal/pages/application/details.html +++ b/src/applications/Mixcore/wwwroot/mix-app/views/app-portal/pages/application/details.html @@ -1 +1 @@ -

(Must start with "/app/", ex: '/app/my-app')
{{post.title}}
by {{post.properties.authorName}} in {{post.additionalData.category}}
\ No newline at end of file +

(Must start with "/app/", ex: '/app/my-app')
{{post.title}}
by {{post.properties.authorName}} in {{post.additionalData.category}}
\ No newline at end of file diff --git a/src/modules/mix.portal/Domain/Services/MixApplicationService.cs b/src/modules/mix.portal/Domain/Services/MixApplicationService.cs index 60e29438f..995c6f478 100644 --- a/src/modules/mix.portal/Domain/Services/MixApplicationService.cs +++ b/src/modules/mix.portal/Domain/Services/MixApplicationService.cs @@ -64,6 +64,7 @@ public async Task Install(MixApplicationViewModel app, filePath }; await app.SaveAsync(); + _ = AlertAsync(_hubContext.Clients.Group("Theme"), "Finished", 200, string.Empty); return app; }