awing-library 2.1.119-beta → 2.1.120-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ export declare const Constants: {
2
+ EDIT_PATH: string;
3
+ CREATE_PATH: string;
4
+ AUTHENTICATION_PROFILE_PATH: string;
5
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Constants = void 0;
4
+ exports.Constants = {
5
+ EDIT_PATH: 'Edit',
6
+ CREATE_PATH: 'Create',
7
+ AUTHENTICATION_PROFILE_PATH: 'AuthenticationProfile',
8
+ };
@@ -0,0 +1,2 @@
1
+ declare function Container(): import("react/jsx-runtime").JSX.Element;
2
+ export default Container;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var jsx_runtime_1 = require("react/jsx-runtime");
7
+ var react_1 = require("react");
8
+ var react_i18next_1 = require("react-i18next");
9
+ var Constant_1 = require("./Constant");
10
+ var Context_1 = require("../../Context");
11
+ var Utils_1 = require("./Utils");
12
+ var Router_1 = require("../../AWING/Router");
13
+ var Hooks_1 = __importDefault(require("./Hooks"));
14
+ var AWING_1 = require("../../AWING");
15
+ function Container() {
16
+ var _a;
17
+ var navigate = (0, Router_1.useNavigate)();
18
+ var t = (0, react_i18next_1.useTranslation)().t;
19
+ var service = (0, Hooks_1.default)().service;
20
+ var _b = (0, Context_1.useAwing)().appHelper, confirm = _b.confirm, snackbar = _b.snackbar;
21
+ var _c = (0, react_1.useState)(false), loading = _c[0], setLoading = _c[1];
22
+ var _d = (0, react_1.useState)(), authenticationProfiles = _d[0], setAuthenticationProfiles = _d[1];
23
+ var getAuthenticationProfile = (0, react_1.useCallback)(function (queryParams) {
24
+ setLoading(true);
25
+ service
26
+ .authenticationProfilesPaging(queryParams.searchString, queryParams.pageSize, queryParams.pageIndex)
27
+ .then(setAuthenticationProfiles)
28
+ .finally(function () {
29
+ setLoading(false);
30
+ });
31
+ },
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ []);
34
+ return ((0, jsx_runtime_1.jsx)(AWING_1.PageManagement, { title: t('AuthenticationProfile.Title'), inputSearchPlaceholder: t('AuthenticationProfile.SearchPlaceholder'), onChangeQueryInput: getAuthenticationProfile, getRowId: function (obj) { return obj.authenticationProfileId; }, columns: [
35
+ {
36
+ field: 'authenticationProfileId',
37
+ headerName: 'STT',
38
+ width: 60,
39
+ valueGetter: function (_unUse, idx, stt) { return stt; },
40
+ },
41
+ {
42
+ field: 'authenticationMethodCode',
43
+ headerName: 'Method Code',
44
+ width: 130,
45
+ },
46
+ {
47
+ field: 'apControllerCode',
48
+ headerName: (0, jsx_runtime_1.jsx)("b", { children: "AP Controller Code" }),
49
+ width: 170,
50
+ valueGetter: function (row) {
51
+ return row.apControllerCode === Utils_1.AP_CONTROLLER_CODE.All ||
52
+ !row.apControllerCode
53
+ ? t('AuthenticationProfile.All')
54
+ : row.apControllerCode;
55
+ },
56
+ },
57
+ {
58
+ field: 'name',
59
+ headerName: t('Common.Name'),
60
+ width: 250,
61
+ dynamicTableCellProps: function () {
62
+ return {
63
+ style: { wordBreak: 'break-all' },
64
+ };
65
+ },
66
+ },
67
+ {
68
+ field: 'parameters',
69
+ headerName: 'Params',
70
+ dynamicTableCellProps: function () {
71
+ return {
72
+ style: { wordBreak: 'break-all' },
73
+ };
74
+ },
75
+ },
76
+ ], loading: loading, rows: (authenticationProfiles === null || authenticationProfiles === void 0 ? void 0 : authenticationProfiles.items) || [], onCreateButtonClick: function () {
77
+ return navigate("/".concat(Constant_1.Constants.AUTHENTICATION_PROFILE_PATH, "/").concat(Constant_1.Constants.CREATE_PATH));
78
+ }, totalOfRows: (authenticationProfiles === null || authenticationProfiles === void 0 ? void 0 : authenticationProfiles.totalItemCount) || 0, onDelete: (_a = service.authenticationProfilesDelete) === null || _a === void 0 ? void 0 : _a.bind(service), onRowClick: function (id) {
79
+ return navigate("/".concat(Constant_1.Constants.AUTHENTICATION_PROFILE_PATH, "/").concat(Constant_1.Constants.EDIT_PATH, "/").concat(id));
80
+ }, confirmDelete: confirm, showNotificationSuccess: function () { return snackbar('success'); } }));
81
+ }
82
+ exports.default = Container;
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ var jsx_runtime_1 = require("react/jsx-runtime");
54
+ var react_1 = require("@testing-library/react");
55
+ var Router_1 = require("../../AWING/Router");
56
+ var Container_1 = __importDefault(require("./Container"));
57
+ var Constant_1 = require("./Constant");
58
+ var items = [
59
+ {
60
+ authenticationProfileId: '4798649175639457397',
61
+ name: 'TCI UNIFI TEST VP API',
62
+ directoryId: '4960166916046400365',
63
+ directoryPath: '.0.90.100.4960166916046400365.4798649175639457397.',
64
+ authenticationMethodCode: 'api',
65
+ apControllerCode: 'ruckusvirtualsmartzone',
66
+ parameters: '{"BaseUrl": "118.70.206.198:8443","SiteId": "24g5ytl0","Username": "admin","Password": "Awing@2018", "Up":10000,"Down":10000,"Minutes":90,"Mbytes":10000}',
67
+ description: '',
68
+ createdDate: {
69
+ seconds: '1702977561',
70
+ nanos: 0,
71
+ },
72
+ },
73
+ {
74
+ authenticationProfileId: '5044439137295001011',
75
+ name: 'Radius 120',
76
+ directoryId: '4960166916046400365',
77
+ directoryPath: '.0.90.100.4960166916046400365.5044439137295001011.',
78
+ authenticationMethodCode: 'radius',
79
+ apControllerCode: 'extreme',
80
+ parameters: '{"Username":"awing120","Password":"Awing120@2018","SecretKey":"awing"}',
81
+ description: '',
82
+ createdDate: {
83
+ seconds: '1636731568',
84
+ nanos: 0,
85
+ },
86
+ },
87
+ ];
88
+ var clientMethod = {
89
+ authenticationProfilesPaging: function () {
90
+ return Promise.resolve({
91
+ items: items,
92
+ totalItemCount: items.length,
93
+ });
94
+ },
95
+ authenticationProfilesDelete: function () { return function (_id) { }; },
96
+ };
97
+ // Mock Hooks
98
+ jest.mock('./Hooks', function () { return ({
99
+ __esModule: true,
100
+ default: function () { return ({
101
+ service: {
102
+ authenticationProfilesPaging: jest.fn(function (_param) {
103
+ return Promise.resolve(clientMethod.authenticationProfilesPaging());
104
+ }),
105
+ authenticationProfilesDelete: jest.fn(function (_id) {
106
+ return Promise.resolve(clientMethod.authenticationProfilesDelete());
107
+ }),
108
+ },
109
+ }); },
110
+ }); });
111
+ // Mock đa ngữ
112
+ jest.mock('react-i18next', function () { return (__assign(__assign({}, jest.requireActual('react-i18next')), { useTranslation: function () { return ({ t: jest.fn(function (key) { return key; }) }); } })); });
113
+ // Mock PageManagement
114
+ jest.mock('../../AWING', function () { return ({
115
+ PageManagement: function (props) {
116
+ props.onChangeQueryInput({
117
+ searchString: '',
118
+ pageIndex: 0,
119
+ pageSize: 10,
120
+ });
121
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("span", { "data-testid": "title", children: "t('AuthenticationProfile.Title')" }), props.columns
122
+ .filter(function (item) { return item.valueGetter; })
123
+ .map(function (getter, idx) { return ((0, jsx_runtime_1.jsx)("span", { children: getter.valueGetter(items[0], idx) }, idx)); }), (0, jsx_runtime_1.jsx)("span", { "data-testid": "rowid", children: props.getRowId(items[0]) }), (0, jsx_runtime_1.jsx)("button", { "data-testid": "Rowclick", onClick: function () {
124
+ props.onRowClick(items[0].authenticationProfileId);
125
+ }, children: "Rowclick" }), (0, jsx_runtime_1.jsx)("button", { "data-testid": "CreateBtn", onClick: props.onCreateButtonClick, children: "CreateBtn" }), (0, jsx_runtime_1.jsx)("button", { onClick: function () {
126
+ props.onChangeQueryInput({
127
+ pageIndex: 1,
128
+ pageSize: 10,
129
+ });
130
+ }, children: "ChangeInput" }), (0, jsx_runtime_1.jsx)("button", { "data-testid": "onDelete", onClick: function () {
131
+ props.onDelete('onDelete');
132
+ }, children: "Remove Btn" }), (0, jsx_runtime_1.jsx)("p", { children: JSON.stringify(props.rows) }), (0, jsx_runtime_1.jsxs)("span", { children: ["totalItemCount:", props.totalOfRows] })] }));
133
+ },
134
+ }); });
135
+ var renderUi = function () {
136
+ return (0, react_1.render)((0, jsx_runtime_1.jsx)(Router_1.BrowserRouter, { children: (0, jsx_runtime_1.jsx)(Container_1.default, {}) }));
137
+ };
138
+ describe('AuthenticationProfileId Container component', function () {
139
+ it('Check renders component(Container).', function () {
140
+ renderUi();
141
+ expect(react_1.screen.getByTestId('title')).toBeInTheDocument();
142
+ expect(react_1.screen.getByTestId('CreateBtn')).toBeInTheDocument();
143
+ });
144
+ it('Chuyển đến trang thêm mới.', function () { return __awaiter(void 0, void 0, void 0, function () {
145
+ return __generator(this, function (_a) {
146
+ switch (_a.label) {
147
+ case 0:
148
+ renderUi();
149
+ expect(react_1.screen.getByTestId('CreateBtn')).toBeInTheDocument();
150
+ react_1.fireEvent.click(react_1.screen.getByTestId('CreateBtn'));
151
+ return [4 /*yield*/, (0, react_1.waitFor)(function () {
152
+ return expect(window.location.href).toContain([
153
+ 'http://localhost',
154
+ Constant_1.Constants.AUTHENTICATION_PROFILE_PATH,
155
+ Constant_1.Constants.CREATE_PATH,
156
+ ].join('/'));
157
+ })];
158
+ case 1:
159
+ _a.sent();
160
+ return [2 /*return*/];
161
+ }
162
+ });
163
+ }); });
164
+ it('Chuyến đến trang Edit.', function () { return __awaiter(void 0, void 0, void 0, function () {
165
+ return __generator(this, function (_a) {
166
+ switch (_a.label) {
167
+ case 0:
168
+ renderUi();
169
+ react_1.fireEvent.click(react_1.screen.getByTestId('Rowclick'));
170
+ return [4 /*yield*/, (0, react_1.waitFor)(function () {
171
+ return expect(window.location.href).toContain([
172
+ 'http://localhost',
173
+ Constant_1.Constants.AUTHENTICATION_PROFILE_PATH,
174
+ Constant_1.Constants.EDIT_PATH,
175
+ items[0].authenticationProfileId,
176
+ ].join('/'));
177
+ })];
178
+ case 1:
179
+ _a.sent();
180
+ return [2 /*return*/];
181
+ }
182
+ });
183
+ }); });
184
+ });
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { AuthenticationProfileFeatureProps } from './Types';
3
+ export declare const authenticationProfilePropsContext: import("react").Context<AuthenticationProfileFeatureProps>;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authenticationProfilePropsContext = void 0;
4
+ var react_1 = require("react");
5
+ exports.authenticationProfilePropsContext = (0, react_1.createContext)({});
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ var jsx_runtime_1 = require("react/jsx-runtime");
54
+ /* eslint-disable testing-library/no-wait-for-side-effects */
55
+ var react_1 = require("@testing-library/react");
56
+ var Router_1 = require("../../../AWING/Router");
57
+ var index_1 = __importDefault(require("./index"));
58
+ var id = 'idEdit11081999';
59
+ var apControllers = [
60
+ { text: 'Chọn tất cả', value: 'all' },
61
+ { text: 'Aerohive', value: 'aerohive' },
62
+ { text: 'Allied AP', value: 'allied' },
63
+ { text: 'Aruba AP', value: 'aruba' },
64
+ { text: 'Aruba IAP', value: 'arubaiap' },
65
+ { text: 'Aruba Instant', value: 'arubainstant' },
66
+ ];
67
+ var authenticationProfile = {
68
+ authenticationProfileId: '4761184776632900642',
69
+ name: 'TCI',
70
+ directoryId: '4960166916046400365',
71
+ directoryPath: '.0.90.100.4960166916046400365.4761184776632900642.',
72
+ authenticationMethodCode: 'api',
73
+ apControllerCode: 'unifi',
74
+ parameters: '{"Username": "admin","Password": "Awing@2018"}',
75
+ description: '',
76
+ createdDate: {
77
+ seconds: '1703131590',
78
+ nanos: 0,
79
+ },
80
+ };
81
+ var clientMethod = {
82
+ authenticationProfilesGet: function () { return function (_id) {
83
+ Promise.resolve(authenticationProfile);
84
+ }; },
85
+ apsGetApControllers: function () { return Promise.resolve(apControllers); },
86
+ authenticationProfilesPut: function (_id, body) { },
87
+ authenticationProfilesPost: function (body) { },
88
+ };
89
+ jest.mock('../Types', function () { return ({
90
+ __esModule: true,
91
+ AuthenticationProfile: {},
92
+ IAuthenticationProfile: {},
93
+ }); });
94
+ // mock Router
95
+ jest.mock('../../../AWING/Router', function () { return (__assign(__assign({}, jest.requireActual('../../../AWING/Router')), { useParams: jest.fn() })); });
96
+ // Mock đa ngữ
97
+ jest.mock('react-i18next', function () { return (__assign(__assign({}, jest.requireActual('react-i18next')), { useTranslation: function () { return ({ t: jest.fn(function (key) { return key; }) }); } })); });
98
+ // Mock Hooks
99
+ jest.mock('../Hooks', function () { return ({
100
+ __esModule: true,
101
+ default: function () { return ({
102
+ service: {
103
+ authenticationProfilesGet: jest.fn(function (_id) {
104
+ return Promise.resolve(clientMethod.authenticationProfilesGet());
105
+ }),
106
+ apsGetApControllers: jest.fn(function () {
107
+ return Promise.resolve(clientMethod.apsGetApControllers());
108
+ }),
109
+ authenticationProfilesPut: jest.fn(function (_id, body) {
110
+ return Promise.resolve(clientMethod.authenticationProfilesPut(_id, body));
111
+ }),
112
+ authenticationProfilesPost: jest.fn(function (body) {
113
+ return Promise.resolve(clientMethod.authenticationProfilesPost(body));
114
+ }),
115
+ },
116
+ }); },
117
+ }); });
118
+ // Mock Drawer
119
+ jest.mock('../../../Commons/Components/ClassicDrawer', function () { return function (props) { return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("span", { "data-testid": "title-drawer", children: id ? 'Common.Edit' : 'Common.Create' }), (0, jsx_runtime_1.jsx)("button", { "data-testid": "onSubmit", onClick: props.onSubmit, children: "submit" }), props.children] })); }; });
120
+ // mock BasicDataForm
121
+ jest.mock('../../../AWING', function () { return ({
122
+ BasicDataForm: function (props) {
123
+ props.fields.forEach(function (element) {
124
+ if (element === null || element === void 0 ? void 0 : element.onValidate) {
125
+ element === null || element === void 0 ? void 0 : element.onValidate();
126
+ }
127
+ });
128
+ return ((0, jsx_runtime_1.jsxs)("div", { "data-testid": "BasicDataForm", children: [(0, jsx_runtime_1.jsx)("p", { children: JSON.stringify(props.oldValue) }), (0, jsx_runtime_1.jsx)("button", { "data-testid": "onUpdate", onClick: function () {
129
+ props.onUpdate(true, {
130
+ name: 'TCI',
131
+ authenticationMethodCode: 'api',
132
+ apControllerCode: 'unifi',
133
+ parameters: '{"Username": "QuanDX","Password": "Awing@2018"}',
134
+ description: '',
135
+ });
136
+ } })] }));
137
+ },
138
+ CircularProgress: function () { return (0, jsx_runtime_1.jsx)("div", { children: "CircularProgress" }); },
139
+ }); });
140
+ describe('AddOrEdit component', function () {
141
+ beforeEach(function () {
142
+ ;
143
+ Router_1.useParams.mockReturnValue({ id: '' });
144
+ });
145
+ var renderUi = function () {
146
+ return (0, react_1.render)((0, jsx_runtime_1.jsx)(Router_1.BrowserRouter, { children: (0, jsx_runtime_1.jsx)(index_1.default, {}) }));
147
+ };
148
+ it('Render component', function () {
149
+ renderUi();
150
+ expect(react_1.screen.getByTestId('title-drawer')).toBeInTheDocument();
151
+ expect(react_1.screen.getByTestId('onSubmit')).toBeInTheDocument();
152
+ });
153
+ it('handleSubmit-create', function () { return __awaiter(void 0, void 0, void 0, function () {
154
+ var authenticationProfilesPostSpy;
155
+ return __generator(this, function (_a) {
156
+ switch (_a.label) {
157
+ case 0:
158
+ authenticationProfilesPostSpy = jest.spyOn(clientMethod, 'authenticationProfilesPost');
159
+ renderUi();
160
+ return [4 /*yield*/, (0, react_1.waitFor)(function () {
161
+ react_1.fireEvent.click(react_1.screen.getByTestId('onUpdate'));
162
+ react_1.fireEvent.click(react_1.screen.getByTestId('onSubmit'));
163
+ expect(authenticationProfilesPostSpy).toHaveBeenCalledWith({
164
+ name: 'TCI',
165
+ authenticationMethodCode: 'api',
166
+ apControllerCode: 'unifi',
167
+ parameters: '{"Username": "QuanDX","Password": "Awing@2018"}',
168
+ description: '',
169
+ });
170
+ })];
171
+ case 1:
172
+ _a.sent();
173
+ return [2 /*return*/];
174
+ }
175
+ });
176
+ }); });
177
+ it('handleSubmit-edit', function () { return __awaiter(void 0, void 0, void 0, function () {
178
+ var authenticationProfilesPutSpy;
179
+ return __generator(this, function (_a) {
180
+ switch (_a.label) {
181
+ case 0:
182
+ ;
183
+ Router_1.useParams.mockReturnValue({ id: id });
184
+ authenticationProfilesPutSpy = jest.spyOn(clientMethod, 'authenticationProfilesPut');
185
+ renderUi();
186
+ return [4 /*yield*/, (0, react_1.waitFor)(function () {
187
+ react_1.fireEvent.click(react_1.screen.getByTestId('onUpdate'));
188
+ react_1.fireEvent.click(react_1.screen.getByTestId('onSubmit'));
189
+ return expect(authenticationProfilesPutSpy).toHaveBeenCalledWith(id, {
190
+ name: 'TCI',
191
+ authenticationMethodCode: 'api',
192
+ apControllerCode: 'unifi',
193
+ parameters: '{"Username": "QuanDX","Password": "Awing@2018"}',
194
+ description: '',
195
+ });
196
+ })];
197
+ case 1:
198
+ _a.sent();
199
+ return [2 /*return*/];
200
+ }
201
+ });
202
+ }); });
203
+ });
@@ -0,0 +1,2 @@
1
+ declare const CreateOrEdit: () => import("react/jsx-runtime").JSX.Element;
2
+ export default CreateOrEdit;
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ var jsx_runtime_1 = require("react/jsx-runtime");
16
+ var react_1 = require("react");
17
+ var react_i18next_1 = require("react-i18next");
18
+ var Router_1 = require("../../../AWING/Router");
19
+ var Hooks_1 = __importDefault(require("../Hooks"));
20
+ var ClassicDrawer_1 = __importDefault(require("../../../Commons/Components/ClassicDrawer"));
21
+ var Utils_1 = require("../Utils");
22
+ var AWING_1 = require("../../../AWING");
23
+ var CreateOrEdit = function () {
24
+ var id = (0, Router_1.useParams)().id;
25
+ var t = (0, react_i18next_1.useTranslation)().t;
26
+ var service = (0, Hooks_1.default)().service;
27
+ var _a = (0, react_1.useState)(true), loading = _a[0], setLoading = _a[1];
28
+ var _b = (0, react_1.useState)(false), formValid = _b[0], setFromValid = _b[1];
29
+ var _c = (0, react_1.useState)(false), confirmExit = _c[0], setConfirmExit = _c[1];
30
+ var _d = (0, react_1.useState)([]), apControllers = _d[0], setApControllers = _d[1];
31
+ var _e = (0, react_1.useState)(), authenticationProfile = _e[0], setAuthenticationProfile = _e[1];
32
+ (0, react_1.useEffect)(function () {
33
+ !apControllers.length &&
34
+ service.apsGetApControllers().then(function (apController) {
35
+ var apControllers = __spreadArray([
36
+ {
37
+ text: t('Common.SelectAll'),
38
+ value: null,
39
+ }
40
+ ], apController.map(function (item) { return ({
41
+ text: (item === null || item === void 0 ? void 0 : item.name) || '',
42
+ value: (item === null || item === void 0 ? void 0 : item.apControllerCode) || '',
43
+ }); }), true);
44
+ setApControllers(apControllers);
45
+ });
46
+ // eslint-disable-next-line react-hooks/exhaustive-deps
47
+ }, [apControllers]);
48
+ (0, react_1.useEffect)(function () {
49
+ if (id) {
50
+ service
51
+ .authenticationProfilesGet(id)
52
+ .then(function (authenticationProfile_) {
53
+ authenticationProfile_.apControllerCode =
54
+ (authenticationProfile_ === null || authenticationProfile_ === void 0 ? void 0 : authenticationProfile_.apControllerCode) ===
55
+ Utils_1.AP_CONTROLLER_CODE.All
56
+ ? null
57
+ : (authenticationProfile_ === null || authenticationProfile_ === void 0 ? void 0 : authenticationProfile_.apControllerCode) ||
58
+ null;
59
+ setAuthenticationProfile(authenticationProfile_);
60
+ })
61
+ .finally(function () {
62
+ setLoading(false);
63
+ });
64
+ }
65
+ else {
66
+ setLoading(false);
67
+ }
68
+ // eslint-disable-next-line react-hooks/exhaustive-deps
69
+ }, [id]);
70
+ var handleSubmit = function () {
71
+ return id
72
+ ? service.authenticationProfilesPut(id, authenticationProfile)
73
+ : service.authenticationProfilesPost(authenticationProfile);
74
+ };
75
+ return ((0, jsx_runtime_1.jsx)(ClassicDrawer_1.default, { title: id ? t('Common.Edit') : t('Common.Create'), onSubmit: handleSubmit, confirmExit: confirmExit, childrenWrapperStyle: { padding: 0 }, disableButtonSubmit: !(formValid && confirmExit), children: loading ? ((0, jsx_runtime_1.jsx)(AWING_1.CircularProgress, {})) : ((0, jsx_runtime_1.jsx)(AWING_1.BasicDataForm, { fields: [
76
+ {
77
+ fieldName: 'authenticationMethodCode',
78
+ type: 'autocomplete',
79
+ label: 'Authentication Method code',
80
+ required: true,
81
+ defaultValue: Utils_1.AUTHENTICATION_METHOD_CODE.MethodByLocalAP,
82
+ options: Object.entries(Utils_1.AUTHENTICATION_METHOD_CODE).map(function (_a) {
83
+ var key = _a[0], value = _a[1];
84
+ return ({
85
+ value: value,
86
+ text: t(['AuthenticationProfile', key].join('.')),
87
+ });
88
+ }),
89
+ },
90
+ {
91
+ fieldName: 'apControllerCode',
92
+ type: 'autocomplete',
93
+ label: 'AP Controller Code',
94
+ required: true,
95
+ options: apControllers,
96
+ defaultValue: null,
97
+ checkValid: function (value) {
98
+ return value === null || value;
99
+ },
100
+ },
101
+ {
102
+ fieldName: 'name',
103
+ type: 'text',
104
+ label: t('Common.Name'),
105
+ required: true,
106
+ },
107
+ {
108
+ fieldName: 'parameters',
109
+ type: 'text',
110
+ label: t('AuthenticationProfile.Params'),
111
+ required: true,
112
+ length: 500,
113
+ pattern: /.*/g,
114
+ },
115
+ {
116
+ fieldName: 'description',
117
+ type: 'text-area',
118
+ label: t('Common.Description'),
119
+ length: 500,
120
+ },
121
+ ], onUpdate: function (validState, valueForm) {
122
+ if (valueForm) {
123
+ setConfirmExit(true);
124
+ setFromValid(validState);
125
+ setAuthenticationProfile(valueForm);
126
+ }
127
+ }, oldValue: authenticationProfile })) }));
128
+ };
129
+ exports.default = CreateOrEdit;
@@ -0,0 +1,2 @@
1
+ declare const useAuthenticationProfileProps: () => import("./Types").AuthenticationProfileFeatureProps;
2
+ export default useAuthenticationProfileProps;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ var Context_1 = require("./Context");
5
+ var useAuthenticationProfileProps = function () {
6
+ var authenticationProfileProps = (0, react_1.useContext)(Context_1.authenticationProfilePropsContext);
7
+ var props = (0, react_1.useMemo)(function () {
8
+ return authenticationProfileProps;
9
+ }, [authenticationProfileProps]);
10
+ return props;
11
+ };
12
+ exports.default = useAuthenticationProfileProps;
@@ -0,0 +1,75 @@
1
+ export interface Cancel {
2
+ message: string | undefined;
3
+ }
4
+ export interface CancelToken {
5
+ promise: Promise<Cancel>;
6
+ reason?: Cancel;
7
+ throwIfRequested(): void;
8
+ }
9
+ export interface AuthenticationProfileService {
10
+ /**
11
+ * API authenticationProfilesPaging: Lấy tất cả authenticationProfiles.
12
+ **/
13
+ authenticationProfilesPaging: (searchString: string | undefined, pageSize: number | undefined, pageIndex: number | undefined, cancelToken?: CancelToken) => Promise<PagedList_1OfAuthenticationProfile>;
14
+ /**
15
+ * API authenticationProfilesDelete: xóa authenticationProfile.
16
+ **/
17
+ authenticationProfilesDelete: (id: string, cancelToken?: CancelToken) => Promise<void>;
18
+ /**
19
+ * API authenticationProfilesGet: chi tiết authenticationProfile.
20
+ **/
21
+ authenticationProfilesGet: (id: string, cancelToken?: CancelToken) => Promise<AuthenticationProfile>;
22
+ apsGetApControllers: (cancelToken?: CancelToken) => Promise<ApController[]>;
23
+ /**
24
+ * API authenticationProfilesPut: cập nhật authenticationProfile.
25
+ **/
26
+ authenticationProfilesPut: (id: string, body: AuthenticationProfile | undefined, cancelToken?: CancelToken) => Promise<void>;
27
+ /**
28
+ * API authenticationProfilesPost: thêm mới authenticationProfile.
29
+ **/
30
+ authenticationProfilesPost: (body: AuthenticationProfile | undefined, cancelToken?: CancelToken) => Promise<void>;
31
+ }
32
+ export interface ApController {
33
+ apControllerCode?: string | undefined;
34
+ name?: string | undefined;
35
+ clientAddress?: string | undefined;
36
+ apAddress?: string | undefined;
37
+ }
38
+ export interface AuthenticationProfileFeatureProps {
39
+ service: AuthenticationProfileService;
40
+ }
41
+ export interface Timestamp {
42
+ seconds?: string;
43
+ nanos?: number;
44
+ }
45
+ export interface AuthenticationProfile {
46
+ authenticationProfileId?: string;
47
+ name?: string | undefined;
48
+ directoryId?: string;
49
+ directoryPath?: string | undefined;
50
+ authenticationMethodCode?: string | undefined;
51
+ apControllerCode?: string | undefined;
52
+ parameters?: string | undefined;
53
+ description?: string | undefined;
54
+ createdDate?: Timestamp;
55
+ }
56
+ export interface PagedList_1OfAuthenticationProfile {
57
+ items?: AuthenticationProfile[] | undefined;
58
+ pageCount?: number;
59
+ totalItemCount?: number;
60
+ pageNumber?: number;
61
+ pageSize?: number;
62
+ hasPreviousPage?: boolean;
63
+ hasNextPage?: boolean;
64
+ }
65
+ export interface IAuthenticationProfile {
66
+ authenticationProfileId?: string;
67
+ name?: string | undefined;
68
+ directoryId?: string;
69
+ directoryPath?: string | undefined;
70
+ authenticationMethodCode?: string | undefined;
71
+ apControllerCode?: string | undefined;
72
+ parameters?: string | undefined;
73
+ description?: string | undefined;
74
+ createdDate?: Timestamp;
75
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,11 @@
1
+ export declare const AUTHENTICATION_METHOD_CODE: {
2
+ MethodByLocalAP: string;
3
+ MethodByApi: string;
4
+ MethodByRadius: string;
5
+ };
6
+ export declare const AP_CONTROLLER_CODE: {
7
+ /**
8
+ * All => là trường "Chọn tất cả" trong AP Controller Code
9
+ **/
10
+ All: string;
11
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AP_CONTROLLER_CODE = exports.AUTHENTICATION_METHOD_CODE = void 0;
4
+ exports.AUTHENTICATION_METHOD_CODE = {
5
+ MethodByLocalAP: 'standard',
6
+ MethodByApi: 'api',
7
+ MethodByRadius: 'radius',
8
+ };
9
+ exports.AP_CONTROLLER_CODE = {
10
+ /**
11
+ * All => là trường "Chọn tất cả" trong AP Controller Code
12
+ **/
13
+ All: 'all',
14
+ };
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { AuthenticationProfileFeatureProps } from './Types';
3
+ export declare const AuthenticationProfileFeature: React.FC<AuthenticationProfileFeatureProps>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.AuthenticationProfileFeature = void 0;
18
+ var jsx_runtime_1 = require("react/jsx-runtime");
19
+ var react_i18next_1 = require("react-i18next");
20
+ var i18n_1 = __importDefault(require("../../i18n"));
21
+ var Container_1 = __importDefault(require("./Container"));
22
+ var Constant_1 = require("./Constant");
23
+ var CreateOrEdit_1 = __importDefault(require("./CreateOrEdit"));
24
+ var Router_1 = require("../../AWING/Router");
25
+ var Context_1 = require("./Context");
26
+ var AuthenticationProfile = function (props) {
27
+ var paths = [
28
+ {
29
+ path: Constant_1.Constants.CREATE_PATH,
30
+ element: (0, jsx_runtime_1.jsx)(CreateOrEdit_1.default, {}),
31
+ },
32
+ {
33
+ path: Constant_1.Constants.EDIT_PATH + '/:id',
34
+ element: (0, jsx_runtime_1.jsx)(CreateOrEdit_1.default, {}),
35
+ },
36
+ ];
37
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Container_1.default, {}), (0, jsx_runtime_1.jsx)(Router_1.Routes, { children: paths.map(function (p) { return ((0, jsx_runtime_1.jsx)(Router_1.Route, { path: p.path, element: p.element }, p.path)); }) })] }));
38
+ };
39
+ var AuthenticationProfileFeature = function (props) { return ((0, jsx_runtime_1.jsx)(react_i18next_1.I18nextProvider, { i18n: i18n_1.default, children: (0, jsx_runtime_1.jsx)(Context_1.authenticationProfilePropsContext.Provider, { value: props, children: (0, jsx_runtime_1.jsx)(AuthenticationProfile, __assign({}, props)) }) })); };
40
+ exports.AuthenticationProfileFeature = AuthenticationProfileFeature;
@@ -785,5 +785,16 @@
785
785
  "Directory": "Directory",
786
786
  "SelectTemplate": "Select template",
787
787
  "FieldNames": "Field Names"
788
+ },
789
+ "AuthenticationProfile": {
790
+ "Title": "Authentication Profile Management",
791
+ "SearchPlaceholder": "Search By Name",
792
+ "Params": "Params",
793
+ "TitleDialog": "Warning",
794
+ "ContentDialog": "Your changes have not been saved. Do you want to continue?",
795
+ "MethodByLocalAP": "Verify local in AP - Controller",
796
+ "MethodByApi": "Verify by Api",
797
+ "MethodByRadius": "Verify by Radius",
798
+ "All": "All"
788
799
  }
789
800
  }
@@ -787,5 +787,16 @@
787
787
  "Directory": "Tên thư mục",
788
788
  "SelectTemplate": "Chọn template",
789
789
  "FieldNames": "Các trường dữ liệu"
790
+ },
791
+ "AuthenticationProfile": {
792
+ "Title": "Quản trị thông tin xác thực",
793
+ "SearchPlaceholder": "Tìm kiếm theo tên",
794
+ "Params": "Thông số",
795
+ "TitleDialog": "Cảnh báo",
796
+ "ContentDialog": "Các thay đổi vẫn chưa được lưu. Bạn có muốn tiếp tục?",
797
+ "MethodByLocalAP": "Xác thực tại AP - Controller",
798
+ "MethodByApi": "Xác thực qua Api",
799
+ "MethodByRadius": "Xác thực qua Radius",
800
+ "All": "Tất cả"
790
801
  }
791
802
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awing-library",
3
- "version": "2.1.119-beta",
3
+ "version": "2.1.120-beta",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",