@kiteapps/lite-ui 0.1.0 → 0.1.1
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.
- package/README.md +13 -11
- package/dist/index.cjs +783 -37
- package/dist/index.mjs +778 -33
- package/dist/types/admin/screens.d.ts +13 -0
- package/dist/types/lib/index.d.ts +2 -0
- package/dist/types/pages/AdminScreen.d.ts +10 -0
- package/dist/types/pages/ConfigurationPage.d.ts +46 -0
- package/dist/types/pages/DashboardPage.d.ts +30 -0
- package/dist/types/pages/ReportsPage.d.ts +30 -0
- package/dist/types/pages/index.d.ts +4 -0
- package/dist/types/widgets/ConfigurationWidgets.d.ts +90 -0
- package/dist/types/widgets/DashboardWidgets.d.ts +113 -0
- package/dist/types/widgets/Primitives.d.ts +119 -0
- package/dist/types/widgets/ReportWidgets.d.ts +71 -0
- package/dist/types/widgets/SettingsWidgets.d.ts +32 -0
- package/dist/types/widgets/Shell.d.ts +112 -0
- package/dist/types/widgets/index.d.ts +7 -0
- package/package.json +62 -20
- package/dist/pages.cjs +0 -1319
- package/dist/pages.css +0 -2070
- package/dist/pages.mjs +0 -1287
package/dist/index.cjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -26,11 +27,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
27
|
));
|
|
27
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
29
|
|
|
29
|
-
// src/
|
|
30
|
-
var
|
|
31
|
-
__export(
|
|
30
|
+
// src/lib/index.ts
|
|
31
|
+
var lib_exports = {};
|
|
32
|
+
__export(lib_exports, {
|
|
33
|
+
ADMIN_GROUPS: () => ADMIN_GROUPS2,
|
|
32
34
|
ActionBar: () => ActionBar,
|
|
33
35
|
ActiveDirectoryChart: () => ActiveDirectoryChart,
|
|
36
|
+
AdminScreen: () => AdminScreen2,
|
|
34
37
|
AdminShell: () => AdminShell,
|
|
35
38
|
AppShell: () => AppShell,
|
|
36
39
|
Button: () => Button,
|
|
@@ -38,12 +41,14 @@ __export(widgets_exports, {
|
|
|
38
41
|
CheckRow: () => CheckRow,
|
|
39
42
|
CollapsibleSidebar: () => CollapsibleSidebar,
|
|
40
43
|
ConfigurationHeader: () => ConfigurationHeader,
|
|
44
|
+
ConfigurationPage: () => ConfigurationPage,
|
|
41
45
|
ConfigurationSidebar: () => ConfigurationSidebar,
|
|
42
46
|
DASHBOARD_METRICS: () => DASHBOARD_METRICS,
|
|
43
47
|
DASHBOARD_SHORTCUTS: () => DASHBOARD_SHORTCUTS,
|
|
44
48
|
DEMO_POLICIES: () => DEMO_POLICIES,
|
|
45
49
|
DIRECTORY_REPORT_DATA: () => DIRECTORY_REPORT_DATA,
|
|
46
50
|
DashboardLayout: () => DashboardLayout,
|
|
51
|
+
DashboardPage: () => DashboardPage,
|
|
47
52
|
DashboardToolbar: () => DashboardToolbar,
|
|
48
53
|
DataTable: () => DataTable,
|
|
49
54
|
ExpandedWidget: () => ExpandedWidget,
|
|
@@ -73,6 +78,7 @@ __export(widgets_exports, {
|
|
|
73
78
|
ReportNavigation: () => ReportNavigation,
|
|
74
79
|
ReportPageHeading: () => ReportPageHeading,
|
|
75
80
|
ReportResults: () => ReportResults,
|
|
81
|
+
ReportsPage: () => ReportsPage,
|
|
76
82
|
SELF_SERVICE_REPORT_DATA: () => SELF_SERVICE_REPORT_DATA,
|
|
77
83
|
SaveBar: () => SaveBar,
|
|
78
84
|
SectionTitle: () => SectionTitle,
|
|
@@ -88,15 +94,16 @@ __export(widgets_exports, {
|
|
|
88
94
|
WidgetFrame: () => WidgetFrame,
|
|
89
95
|
normalizeReport: () => normalizeReport
|
|
90
96
|
});
|
|
91
|
-
module.exports = __toCommonJS(
|
|
97
|
+
module.exports = __toCommonJS(lib_exports);
|
|
92
98
|
|
|
93
|
-
// src/widgets/Primitives.
|
|
94
|
-
var import_react =
|
|
99
|
+
// src/widgets/Primitives.tsx
|
|
100
|
+
var import_react = require("react");
|
|
95
101
|
var import_lucide_react = require("lucide-react");
|
|
96
102
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
97
103
|
function Button({ children, variant = "neutral", icon: Icon, className = "", ...props }) {
|
|
98
104
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { className: `ad-button ad-button--${variant} ${className}`, ...props, children: [
|
|
99
105
|
Icon && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { size: 13, strokeWidth: 1.8 }),
|
|
106
|
+
" ",
|
|
100
107
|
children
|
|
101
108
|
] });
|
|
102
109
|
}
|
|
@@ -126,9 +133,9 @@ function CheckRow({ children, defaultChecked = false, checked, onChange, disable
|
|
|
126
133
|
const [local, setLocal] = (0, import_react.useState)(defaultChecked);
|
|
127
134
|
const isChecked = checked === void 0 ? local : checked;
|
|
128
135
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: `ad-check-row ${disabled ? "is-disabled" : ""} ${className}`, children: [
|
|
129
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "checkbox", checked: isChecked, disabled, onChange: (
|
|
130
|
-
setLocal(
|
|
131
|
-
onChange?.(
|
|
136
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "checkbox", checked: isChecked, disabled, onChange: (event) => {
|
|
137
|
+
if (checked === void 0) setLocal(event.target.checked);
|
|
138
|
+
onChange?.(event.target.checked);
|
|
132
139
|
} }),
|
|
133
140
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "ad-check-box", "aria-hidden": "true" }),
|
|
134
141
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children }),
|
|
@@ -195,21 +202,22 @@ function Notice({ children, tone = "info" }) {
|
|
|
195
202
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children })
|
|
196
203
|
] });
|
|
197
204
|
}
|
|
198
|
-
function DataTable({ columns = [], rows = [], empty = "No Data Available", onRowClick, getRowId = (row, index) => row.id
|
|
205
|
+
function DataTable({ columns = [], rows = [], empty = "No Data Available", onRowClick, getRowId = (row, index) => !Array.isArray(row) && row.id != null ? String(row.id) : index }) {
|
|
199
206
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "ad-table-wrap", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("table", { className: "ad-table", children: [
|
|
200
207
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tr", { children: columns.map((raw, index) => {
|
|
201
|
-
const column = typeof raw === "string" ? { key: index, label: raw } : raw;
|
|
202
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", { children: column.label }, column.key
|
|
208
|
+
const column = typeof raw === "string" ? { key: String(index), label: raw } : raw;
|
|
209
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", { children: column.label }, column.key);
|
|
203
210
|
}) }) }),
|
|
204
211
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("tbody", { children: rows.length ? rows.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tr", { onClick: () => onRowClick?.(row, index), children: columns.map((raw, columnIndex) => {
|
|
205
|
-
const column = typeof raw === "string" ? { key: columnIndex, label: raw } : raw;
|
|
206
|
-
|
|
212
|
+
const column = typeof raw === "string" ? { key: String(columnIndex), label: raw } : raw;
|
|
213
|
+
const value = "render" in column && column.render ? column.render(row, index) : Array.isArray(row) ? row[columnIndex] : row[column.key];
|
|
214
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", { children: value }, column.key);
|
|
207
215
|
}) }, getRowId(row, index))) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", { className: "ad-empty", colSpan: columns.length, children: empty }) }) })
|
|
208
216
|
] }) });
|
|
209
217
|
}
|
|
210
218
|
function Modal({ title, children, open, onClose, footer, closeLabel = "Close" }) {
|
|
211
219
|
if (!open) return null;
|
|
212
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "ad-modal-backdrop", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "ad-modal", role: "dialog", "aria-modal": "true", "aria-label": title, onMouseDown: (
|
|
220
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "ad-modal-backdrop", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "ad-modal", role: "dialog", "aria-modal": "true", "aria-label": title, onMouseDown: (event) => event.stopPropagation(), children: [
|
|
213
221
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "ad-modal-head", children: [
|
|
214
222
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: title }),
|
|
215
223
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(IconButton, { icon: import_lucide_react.X, label: closeLabel, onClick: onClose })
|
|
@@ -219,8 +227,8 @@ function Modal({ title, children, open, onClose, footer, closeLabel = "Close" })
|
|
|
219
227
|
] }) });
|
|
220
228
|
}
|
|
221
229
|
|
|
222
|
-
// src/widgets/Shell.
|
|
223
|
-
var import_react2 =
|
|
230
|
+
// src/widgets/Shell.tsx
|
|
231
|
+
var import_react2 = require("react");
|
|
224
232
|
var import_lucide_react2 = require("lucide-react");
|
|
225
233
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
226
234
|
var MAIN_SECTIONS = ["Dashboard", "Reports", "Configuration", "Admin", "Support"];
|
|
@@ -232,16 +240,18 @@ function TopNavigation({ sections = MAIN_SECTIONS, active = "Admin", onChange, a
|
|
|
232
240
|
}) });
|
|
233
241
|
}
|
|
234
242
|
function ShellHeader({ brand = "ADSelfService Plus", brandIcon, showBrandOrbit = true, sections = MAIN_SECTIONS, navigationLabel = "Main navigation", activeSection = "Admin", onSectionChange, directories = ["Active Directory", "Microsoft Entra ID"], directory, defaultDirectory, onDirectoryChange, showDownload = true, downloadLabel = "Download Now", onDownload, utilityItems = ["License", "Talk Back"], showNotifications = true, notifications = 2, notificationLabel, onNotificationsClick, showUserMenu = true, userMenuLabel = "User menu", onUserClick, showSearch = true, searchPlaceholder = "Search Employee", searchLabel = "Search Employee", searchValue, onSearchChange, showSettings = true, settingsLabel = "Domain Settings", onSettingsClick, rightContent }) {
|
|
235
|
-
const
|
|
243
|
+
const initialDirectory = defaultDirectory ?? (typeof directories[0] === "string" ? directories[0] : directories[0]?.value);
|
|
244
|
+
const [localDirectory, setLocalDirectory] = (0, import_react2.useState)(initialDirectory);
|
|
236
245
|
const [localSearch, setLocalSearch] = (0, import_react2.useState)("");
|
|
237
246
|
const currentDirectory = directory ?? localDirectory;
|
|
238
247
|
const directoryItem = directories.find((item) => (typeof item === "string" ? item : item.value) === currentDirectory);
|
|
239
248
|
const currentDirectoryLabel = typeof directoryItem === "string" ? directoryItem : directoryItem?.label || currentDirectory;
|
|
240
249
|
const currentSearch = searchValue ?? localSearch;
|
|
241
250
|
const switchDirectory = () => {
|
|
251
|
+
if (!directories.length) return;
|
|
242
252
|
const index = directories.findIndex((item) => (typeof item === "string" ? item : item.value) === currentDirectory);
|
|
243
253
|
const next = directories[(index + 1) % directories.length];
|
|
244
|
-
const value = typeof next === "string" ? next : next
|
|
254
|
+
const value = typeof next === "string" ? next : next.value;
|
|
245
255
|
if (directory === void 0) setLocalDirectory(value);
|
|
246
256
|
onDirectoryChange?.(value, next);
|
|
247
257
|
};
|
|
@@ -337,8 +347,8 @@ function AdminShell({ groups = [], screen, onScreenChange, children, activeSecti
|
|
|
337
347
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(AppShell, { activeSection, onSectionChange, sidebar: sidebar || /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CollapsibleSidebar, { groups, selected: screen, onSelect: onScreenChange }), hideSidebar, mainClassName, ...shellProps, children });
|
|
338
348
|
}
|
|
339
349
|
|
|
340
|
-
// src/widgets/DashboardWidgets.
|
|
341
|
-
var import_react3 =
|
|
350
|
+
// src/widgets/DashboardWidgets.tsx
|
|
351
|
+
var import_react3 = require("react");
|
|
342
352
|
var import_lucide_react3 = require("lucide-react");
|
|
343
353
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
344
354
|
var DASHBOARD_METRICS = [
|
|
@@ -460,7 +470,7 @@ function DashboardToolbar({ domains = ["ADSELFSERVICE"], domain, defaultDomain,
|
|
|
460
470
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dash-toolbar", children: [
|
|
461
471
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("label", { htmlFor: "dash-domain", children: domainLabel }),
|
|
462
472
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("select", { id: "dash-domain", value: domain, defaultValue: domain === void 0 ? defaultDomain ?? (typeof domains[0] === "string" ? domains[0] : domains[0]?.value) : void 0, onChange: (event) => {
|
|
463
|
-
const item = domains.
|
|
473
|
+
const item = domains.find((option) => (typeof option === "string" ? option : option.value) === event.target.value);
|
|
464
474
|
onDomainChange?.(event.target.value, item);
|
|
465
475
|
}, children: domains.map((option) => {
|
|
466
476
|
const item = typeof option === "string" ? { value: option, label: option } : option;
|
|
@@ -491,7 +501,7 @@ function DashboardLayout({ metrics, charts, shortcuts, showShortcuts = true }) {
|
|
|
491
501
|
}
|
|
492
502
|
function ExpandedWidget({ title, onClose, children, closeLabel = "Close expanded widget" }) {
|
|
493
503
|
if (!title) return null;
|
|
494
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "dash-overlay", role: "presentation", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dash-expanded", role: "dialog", "aria-modal": "true", "aria-label": title, onMouseDown: (
|
|
504
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "dash-overlay", role: "presentation", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dash-expanded", role: "dialog", "aria-modal": "true", "aria-label": title, onMouseDown: (event) => event.stopPropagation(), children: [
|
|
495
505
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dash-expanded-heading", children: [
|
|
496
506
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("strong", { children: title }),
|
|
497
507
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react3.X, { size: 18 }) })
|
|
@@ -500,8 +510,8 @@ function ExpandedWidget({ title, onClose, children, closeLabel = "Close expanded
|
|
|
500
510
|
] }) });
|
|
501
511
|
}
|
|
502
512
|
|
|
503
|
-
// src/widgets/ReportWidgets.
|
|
504
|
-
var import_react4 =
|
|
513
|
+
// src/widgets/ReportWidgets.tsx
|
|
514
|
+
var import_react4 = require("react");
|
|
505
515
|
var import_lucide_react4 = require("lucide-react");
|
|
506
516
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
507
517
|
var REPORT_GROUPS = [
|
|
@@ -523,9 +533,9 @@ function ReportNavigation({ groups = REPORT_GROUPS, selected, defaultSelected, o
|
|
|
523
533
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "report-navigation", children: [
|
|
524
534
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "report-search", children: [
|
|
525
535
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react4.Search, { size: 15 }),
|
|
526
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("input", { "aria-label": searchLabel, placeholder: searchPlaceholder, value: query, onChange: (
|
|
527
|
-
setQuery(
|
|
528
|
-
onSearchChange?.(
|
|
536
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("input", { "aria-label": searchLabel, placeholder: searchPlaceholder, value: query, onChange: (event) => {
|
|
537
|
+
setQuery(event.target.value);
|
|
538
|
+
onSearchChange?.(event.target.value);
|
|
529
539
|
} })
|
|
530
540
|
] }),
|
|
531
541
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("nav", { "aria-label": ariaLabel, children: visibleGroups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
|
|
@@ -550,13 +560,13 @@ function ReportCategoryBar({ groups = REPORT_GROUPS, selected, defaultSelected,
|
|
|
550
560
|
group.label,
|
|
551
561
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react4.ChevronDown, { size: 10 })
|
|
552
562
|
] }),
|
|
553
|
-
open === group.label && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "report-category-menu", children: group.items.map((raw,
|
|
563
|
+
open === group.label && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "report-category-menu", children: group.items.map((raw, index) => {
|
|
554
564
|
const item = normalizeReport(raw);
|
|
555
565
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: currentSelected === item.id ? "is-active" : "", onClick: () => {
|
|
556
566
|
if (selected === void 0) setLocalSelected(item.id);
|
|
557
567
|
onSelect?.(item.id, item);
|
|
558
568
|
setOpen("");
|
|
559
|
-
}, children: item.label }, item.id ??
|
|
569
|
+
}, children: item.label }, item.id ?? index);
|
|
560
570
|
}) })
|
|
561
571
|
] }, group.id ?? group.label)) });
|
|
562
572
|
}
|
|
@@ -569,7 +579,7 @@ function ReportFilters({ domains = ["ADSELFSERVICE"], domain, defaultDomain, onD
|
|
|
569
579
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("label", { htmlFor: "report-domain", children: labels.domain || "Select Domain" }),
|
|
570
580
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("select", { id: "report-domain", value: domain, defaultValue: domain === void 0 ? defaultDomain ?? (typeof domains[0] === "string" ? domains[0] : domains[0]?.value) : void 0, onChange: (event) => {
|
|
571
581
|
const value = event.target.value;
|
|
572
|
-
const item = domains.
|
|
582
|
+
const item = domains.find((raw) => (typeof raw === "string" ? raw : raw.value) === value);
|
|
573
583
|
onDomainChange?.(value, item);
|
|
574
584
|
}, children: domains.map((raw) => {
|
|
575
585
|
const item = typeof raw === "string" ? { value: raw, label: raw } : raw;
|
|
@@ -587,8 +597,8 @@ function ReportFilters({ domains = ["ADSELFSERVICE"], domain, defaultDomain, onD
|
|
|
587
597
|
const item = typeof raw === "string" ? { value: raw, label: raw } : raw;
|
|
588
598
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { children: [
|
|
589
599
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("input", { type: "radio", name: "report-ou", checked: selectedOu === item.value, onChange: () => {
|
|
590
|
-
setLocalOu(item.value);
|
|
591
|
-
onOuChange?.(item.value,
|
|
600
|
+
if (ou === void 0) setLocalOu(item.value);
|
|
601
|
+
onOuChange?.(item.value, raw);
|
|
592
602
|
setOuOpen(false);
|
|
593
603
|
} }),
|
|
594
604
|
" ",
|
|
@@ -624,8 +634,8 @@ function ReportPageHeading({ title, onSchedule, scheduleLabel = "Schedule Report
|
|
|
624
634
|
] });
|
|
625
635
|
}
|
|
626
636
|
|
|
627
|
-
// src/widgets/ConfigurationWidgets.
|
|
628
|
-
var import_react5 =
|
|
637
|
+
// src/widgets/ConfigurationWidgets.tsx
|
|
638
|
+
var import_react5 = require("react");
|
|
629
639
|
var import_lucide_react5 = require("lucide-react");
|
|
630
640
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
631
641
|
var CONFIG_GROUPS = [
|
|
@@ -749,8 +759,8 @@ function PolicyTable({ policies = DEMO_POLICIES, columns = POLICY_COLUMNS, defau
|
|
|
749
759
|
] }) });
|
|
750
760
|
}
|
|
751
761
|
|
|
752
|
-
// src/widgets/SettingsWidgets.
|
|
753
|
-
var import_react6 =
|
|
762
|
+
// src/widgets/SettingsWidgets.tsx
|
|
763
|
+
var import_react6 = require("react");
|
|
754
764
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
755
765
|
function Frame({ title, tabs, activeTab, defaultTab, onTabChange, children, action, help, className = "" }) {
|
|
756
766
|
const [localTab, setLocalTab] = (0, import_react6.useState)(defaultTab ?? (typeof tabs?.[0] === "string" ? tabs[0] : tabs?.[0]?.id));
|
|
@@ -790,3 +800,739 @@ function InlineSelect({ options = [], initial, value, onChange, width, ...props
|
|
|
790
800
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("option", { value: item.value, children: item.label }, item.value);
|
|
791
801
|
}) });
|
|
792
802
|
}
|
|
803
|
+
|
|
804
|
+
// src/pages/DashboardPage.tsx
|
|
805
|
+
var import_react7 = require("react");
|
|
806
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
807
|
+
function DashboardPage({ metrics = DASHBOARD_METRICS, directoryData = DIRECTORY_REPORT_DATA, mfaData = MFA_REPORT_DATA, selfServiceData = SELF_SERVICE_REPORT_DATA, shortcuts = DASHBOARD_SHORTCUTS, domains, domain, onDomainChange, chartTitles = {}, chartProps = {}, widgetProps = {}, toolbarProps = {}, onMetricSelect, onReportSelect, onShortcutSelect, onToolbarAction, renderMetric, renderShortcuts }) {
|
|
808
|
+
const [showShortcuts, setShowShortcuts] = (0, import_react7.useState)(true);
|
|
809
|
+
const [expanded, setExpanded] = (0, import_react7.useState)(null);
|
|
810
|
+
const titles = { directory: "Active Directory Reports", mfa: "MFA Reports", selfService: "Password Self-Service Reports", ...chartTitles };
|
|
811
|
+
const reportAction = (key, id, item) => {
|
|
812
|
+
chartProps[key]?.onSelect?.(id, item);
|
|
813
|
+
onReportSelect?.(id, item);
|
|
814
|
+
};
|
|
815
|
+
const charts = {
|
|
816
|
+
directory: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ActiveDirectoryChart, { ...chartProps.directory, data: directoryData, onSelect: (id, item) => reportAction("directory", id, item) }),
|
|
817
|
+
mfa: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(MfaChart, { ...chartProps.mfa, data: mfaData, onSelect: (id, item) => reportAction("mfa", id, item) }),
|
|
818
|
+
selfService: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SelfServiceChart, { ...chartProps.selfService, data: selfServiceData, onSelect: (id, item) => reportAction("selfService", id, item) })
|
|
819
|
+
};
|
|
820
|
+
const frame = (key, className = "") => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(WidgetFrame, { ...widgetProps[key], title: titles[key], className: className || widgetProps[key]?.className, onExpand: () => {
|
|
821
|
+
widgetProps[key]?.onExpand?.();
|
|
822
|
+
setExpanded(key);
|
|
823
|
+
}, children: charts[key] });
|
|
824
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "dash-page", children: [
|
|
825
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
826
|
+
DashboardToolbar,
|
|
827
|
+
{
|
|
828
|
+
...toolbarProps,
|
|
829
|
+
domains: domains ?? toolbarProps.domains,
|
|
830
|
+
domain: domain ?? toolbarProps.domain,
|
|
831
|
+
onDomainChange: (value, item) => {
|
|
832
|
+
onDomainChange?.(value, item);
|
|
833
|
+
toolbarProps.onDomainChange?.(value, item);
|
|
834
|
+
},
|
|
835
|
+
showShortcuts,
|
|
836
|
+
onToggleShortcuts: () => {
|
|
837
|
+
setShowShortcuts(!showShortcuts);
|
|
838
|
+
toolbarProps.onToggleShortcuts?.(!showShortcuts);
|
|
839
|
+
},
|
|
840
|
+
onExpand: () => {
|
|
841
|
+
toolbarProps.onExpand?.();
|
|
842
|
+
setExpanded("directory");
|
|
843
|
+
},
|
|
844
|
+
onMenuAction: (id, item) => {
|
|
845
|
+
onToolbarAction?.(id, item);
|
|
846
|
+
toolbarProps.onMenuAction?.(id, item);
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
),
|
|
850
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
851
|
+
DashboardLayout,
|
|
852
|
+
{
|
|
853
|
+
showShortcuts,
|
|
854
|
+
metrics: metrics.map((item, index) => renderMetric ? renderMetric(item, index) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(MetricWidget, { ...item, onClick: () => {
|
|
855
|
+
item.onClick?.(item);
|
|
856
|
+
onMetricSelect?.(item);
|
|
857
|
+
if (item.report !== void 0) onReportSelect?.(item.report, item);
|
|
858
|
+
} }, item.id ?? item.title ?? index)),
|
|
859
|
+
charts: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
860
|
+
frame("directory"),
|
|
861
|
+
frame("mfa"),
|
|
862
|
+
frame("selfService", "dash-wide-widget")
|
|
863
|
+
] }),
|
|
864
|
+
shortcuts: renderShortcuts ? renderShortcuts(shortcuts) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ShortcutRail, { groups: shortcuts, onSelect: onShortcutSelect })
|
|
865
|
+
}
|
|
866
|
+
),
|
|
867
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ExpandedWidget, { title: expanded ? titles[expanded] : null, onClose: () => setExpanded(null), children: expanded ? charts[expanded] : null })
|
|
868
|
+
] });
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
// src/pages/ReportsPage.tsx
|
|
872
|
+
var import_react8 = require("react");
|
|
873
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
874
|
+
function ReportsPage({ groups = REPORT_GROUPS, selected, defaultSelected, onSelect, filtersProps = {}, labels = {}, status: controlledStatus, onGenerate, onStop, onSchedule, results }) {
|
|
875
|
+
const firstReport = groups[0]?.items[0] && normalizeReport(groups[0].items[0]);
|
|
876
|
+
const [localSelected, setLocalSelected] = (0, import_react8.useState)(defaultSelected ?? firstReport?.id);
|
|
877
|
+
const [localStatus, setLocalStatus] = (0, import_react8.useState)("empty");
|
|
878
|
+
const [showSchedule, setShowSchedule] = (0, import_react8.useState)(false);
|
|
879
|
+
const [localDomain, setLocalDomain] = (0, import_react8.useState)(filtersProps.defaultDomain ?? (typeof filtersProps.domains?.[0] === "string" ? filtersProps.domains[0] : filtersProps.domains?.[0]?.value) ?? "ADSELFSERVICE");
|
|
880
|
+
const [localOu, setLocalOu] = (0, import_react8.useState)(filtersProps.defaultOu ?? (typeof filtersProps.ouOptions?.[0] === "string" ? filtersProps.ouOptions[0] : filtersProps.ouOptions?.[0]?.value) ?? "All OU");
|
|
881
|
+
const currentSelected = selected ?? localSelected;
|
|
882
|
+
const report = groups.flatMap((group) => group.items.map(normalizeReport)).find((item) => item.id === currentSelected);
|
|
883
|
+
const title = report?.label || firstReport?.label || labels.untitled || "";
|
|
884
|
+
const status = controlledStatus ?? localStatus;
|
|
885
|
+
const domain = filtersProps.domain ?? localDomain;
|
|
886
|
+
const ou = filtersProps.ou ?? localOu;
|
|
887
|
+
const select = (id, item) => {
|
|
888
|
+
if (selected === void 0) setLocalSelected(id);
|
|
889
|
+
onSelect?.(id, item);
|
|
890
|
+
if (controlledStatus === void 0) setLocalStatus("empty");
|
|
891
|
+
};
|
|
892
|
+
const generate = () => {
|
|
893
|
+
if (onGenerate) onGenerate({ selected: currentSelected, report, domain, ou });
|
|
894
|
+
else {
|
|
895
|
+
setLocalStatus("loading");
|
|
896
|
+
window.setTimeout(() => setLocalStatus("empty"), 650);
|
|
897
|
+
}
|
|
898
|
+
};
|
|
899
|
+
const stop = () => {
|
|
900
|
+
onStop?.();
|
|
901
|
+
if (controlledStatus === void 0) setLocalStatus("empty");
|
|
902
|
+
};
|
|
903
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "reports-page", children: [
|
|
904
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ReportCategoryBar, { groups, selected: currentSelected, onSelect: select }),
|
|
905
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "report-page-body", children: [
|
|
906
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ReportPageHeading, { title, scheduleLabel: labels.schedule, helpText: labels.help, onSchedule: () => {
|
|
907
|
+
onSchedule?.(report);
|
|
908
|
+
setShowSchedule(!showSchedule);
|
|
909
|
+
} }),
|
|
910
|
+
showSchedule && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "report-schedule-note", children: labels.scheduleNote || "Schedule Reports lets you automate delivery of generated reports." }),
|
|
911
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ReportFilters, { ...filtersProps, domain, ou, onDomainChange: (value, item) => {
|
|
912
|
+
if (filtersProps.domain === void 0) setLocalDomain(value);
|
|
913
|
+
filtersProps.onDomainChange?.(value, item);
|
|
914
|
+
}, onOuChange: (value, item) => {
|
|
915
|
+
if (filtersProps.ou === void 0) setLocalOu(value);
|
|
916
|
+
filtersProps.onOuChange?.(value, item);
|
|
917
|
+
}, generating: status === "loading", onGenerate: generate, onStop: stop }),
|
|
918
|
+
results ?? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ReportResults, { status, emptyMessage: labels.empty, loadingMessage: labels.loading })
|
|
919
|
+
] })
|
|
920
|
+
] });
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
// src/pages/ConfigurationPage.tsx
|
|
924
|
+
var import_react9 = require("react");
|
|
925
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
926
|
+
function ConfigurationPage({ selected, policyId = "policy", groups = CONFIG_GROUPS, policies, initialPolicies = DEMO_POLICIES, onPoliciesChange, features = POLICY_FEATURES, columns = POLICY_COLUMNS, labels = {}, defaultDomain = "ADSELFSERVICE", onSavePolicy, onDeletePolicy, onCopyPolicy, onFeatureSelect, createPolicy, renderSection, renderPolicyForm, headerProps = {}, featureProps = {}, toolbarProps = {}, tableProps = {} }) {
|
|
927
|
+
const [localPolicies, setLocalPolicies] = (0, import_react9.useState)(initialPolicies);
|
|
928
|
+
const [query, setQuery] = (0, import_react9.useState)("");
|
|
929
|
+
const [page, setPage] = (0, import_react9.useState)(1);
|
|
930
|
+
const [editor, setEditor] = (0, import_react9.useState)(null);
|
|
931
|
+
const [name, setName] = (0, import_react9.useState)("");
|
|
932
|
+
const currentSelected = selected ?? policyId;
|
|
933
|
+
const currentPolicies = policies ?? localPolicies;
|
|
934
|
+
const update = (next) => {
|
|
935
|
+
if (policies === void 0) setLocalPolicies(next);
|
|
936
|
+
onPoliciesChange?.(next);
|
|
937
|
+
};
|
|
938
|
+
const item = groups.flatMap((group) => group.items).find((entry) => entry.id === currentSelected);
|
|
939
|
+
const title = item?.label || labels.title || "Policy Configuration";
|
|
940
|
+
const filtered = currentPolicies.filter((policy) => String(policy.name || "").toLowerCase().includes(query.toLowerCase()));
|
|
941
|
+
const pageSize = Math.max(1, toolbarProps.pageSize ?? 25);
|
|
942
|
+
const currentPage = Math.min(page, Math.max(1, Math.ceil(filtered.length / pageSize)));
|
|
943
|
+
const visiblePolicies = filtered.slice((currentPage - 1) * pageSize, currentPage * pageSize);
|
|
944
|
+
const openEditor = (policy) => {
|
|
945
|
+
setEditor(policy || { name: "" });
|
|
946
|
+
setName(policy?.name || "");
|
|
947
|
+
};
|
|
948
|
+
const savePolicy = () => {
|
|
949
|
+
if (!editor || !name.trim()) return;
|
|
950
|
+
const nextPolicy = editor.name ? { ...editor, name: name.trim() } : createPolicy ? createPolicy(name.trim()) : { name: name.trim(), permissions: "", domain: defaultDomain, modifiedBy: "", modified: "" };
|
|
951
|
+
const next = editor.name ? currentPolicies.map((policy) => policy === editor ? nextPolicy : policy) : [...currentPolicies, nextPolicy];
|
|
952
|
+
update(next);
|
|
953
|
+
onSavePolicy?.(nextPolicy, editor);
|
|
954
|
+
setEditor(null);
|
|
955
|
+
};
|
|
956
|
+
const removePolicy = (policy) => {
|
|
957
|
+
update(currentPolicies.filter((item2) => item2 !== policy));
|
|
958
|
+
onDeletePolicy?.(policy);
|
|
959
|
+
};
|
|
960
|
+
const copyPolicy = (policy) => {
|
|
961
|
+
const copy = { ...policy, name: `${policy.name} ${labels.copySuffix || "Copy"}` };
|
|
962
|
+
update([...currentPolicies, copy]);
|
|
963
|
+
onCopyPolicy?.(copy, policy);
|
|
964
|
+
};
|
|
965
|
+
const otherSection = renderSection?.(currentSelected, item);
|
|
966
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "config-page", children: [
|
|
967
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ConfigurationHeader, { title, ...headerProps }),
|
|
968
|
+
currentSelected === policyId ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
|
|
969
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PolicyFeatureStrip, { ...featureProps, title: labels.featuresTitle ?? featureProps.title, instruction: labels.instruction ?? featureProps.instruction, features, onFeatureSelect: (id, feature) => {
|
|
970
|
+
onFeatureSelect?.(id, feature);
|
|
971
|
+
featureProps.onFeatureSelect?.(id, feature);
|
|
972
|
+
} }),
|
|
973
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PolicyToolbar, { ...toolbarProps, title: labels.policiesTitle || toolbarProps.title, addLabel: labels.add || toolbarProps.addLabel, count: filtered.length, page: currentPage, onPageChange: (next) => {
|
|
974
|
+
setPage(next);
|
|
975
|
+
toolbarProps.onPageChange?.(next);
|
|
976
|
+
}, query, onQueryChange: (value) => {
|
|
977
|
+
setQuery(value);
|
|
978
|
+
setPage(1);
|
|
979
|
+
toolbarProps.onQueryChange?.(value);
|
|
980
|
+
}, onAdd: () => {
|
|
981
|
+
openEditor();
|
|
982
|
+
toolbarProps.onAdd?.();
|
|
983
|
+
} }),
|
|
984
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PolicyTable, { ...tableProps, policies: visiblePolicies, columns, defaultDomain, onEdit: (policy) => {
|
|
985
|
+
openEditor(policy);
|
|
986
|
+
tableProps.onEdit?.(policy);
|
|
987
|
+
}, onDelete: (policy) => {
|
|
988
|
+
removePolicy(policy);
|
|
989
|
+
tableProps.onDelete?.(policy);
|
|
990
|
+
}, onCopy: (policy) => {
|
|
991
|
+
copyPolicy(policy);
|
|
992
|
+
tableProps.onCopy?.(policy);
|
|
993
|
+
} })
|
|
994
|
+
] }) : otherSection !== void 0 ? otherSection : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Panel, { className: "config-detail-panel", children: [
|
|
995
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", { children: title }),
|
|
996
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(FormRow, { label: labels.domain || "Select Domain", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("select", { className: "ad-select", defaultValue: defaultDomain, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("option", { children: defaultDomain }) }) }),
|
|
997
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(CheckRow, { children: [
|
|
998
|
+
labels.enable || "Enable",
|
|
999
|
+
" ",
|
|
1000
|
+
title
|
|
1001
|
+
] }),
|
|
1002
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { children: labels.sectionDescription?.(title) || `Configure ${title.toLowerCase()} for the selected domain.` })
|
|
1003
|
+
] }),
|
|
1004
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Modal, { title: editor?.name ? labels.editTitle || "Edit Policy" : labels.addTitle || "Add New Policy", open: !!editor, onClose: () => setEditor(null), footer: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
|
|
1005
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Button, { onClick: () => setEditor(null), children: labels.cancel || "Cancel" }),
|
|
1006
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Button, { variant: "primary", onClick: savePolicy, children: labels.save || "Save" })
|
|
1007
|
+
] }), children: renderPolicyForm ? renderPolicyForm({ policy: editor, name, setName }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TextField, { label: labels.policyName || "Policy Name", value: name, onChange: (event) => setName(event.target.value) }) })
|
|
1008
|
+
] });
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
// src/admin/screens.jsx
|
|
1012
|
+
var import_react10 = __toESM(require("react"));
|
|
1013
|
+
var import_lucide_react6 = require("lucide-react");
|
|
1014
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
1015
|
+
var ADMIN_GROUPS = [
|
|
1016
|
+
{ label: "Customize", items: [{ id: "login", label: "Login Settings" }, { id: "personalize", label: "Personalize" }] },
|
|
1017
|
+
{ label: "Enterprise Essentials", items: [{ id: "failover", label: "Failover and Secure Gateway" }, { id: "reverse", label: "Reverse Proxy" }] },
|
|
1018
|
+
{ label: "Product Settings", items: [{ id: "connection", label: "Connection" }, { id: "mail", label: "Mail / SMS Settings" }, { id: "dashboard", label: "Dashboard Updater" }, { id: "backup", label: "Backup Settings" }, { id: "site", label: "Site Based DC Updater" }, { id: "integration", label: "Integration Settings" }, { id: "windows", label: "Windows Service" }, { id: "security", label: "Security and Privacy" }] },
|
|
1019
|
+
{ label: "License Management", items: [{ id: "restrict", label: "Restrict Users" }] }
|
|
1020
|
+
];
|
|
1021
|
+
function RowLink({ children, onClick }) {
|
|
1022
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { onClick, children });
|
|
1023
|
+
}
|
|
1024
|
+
function LoginSettings() {
|
|
1025
|
+
const [modal, setModal] = (0, import_react10.useState)("");
|
|
1026
|
+
const modalItems = modal === "Manage Custom Attributes" ? ["First Name", "Last Name", "Display Name", "Mail Address", "Mobile Number"] : ["ADSELFSERVICE", "Microsoft Entra ID"];
|
|
1027
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1028
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Frame, { title: "Login Settings", help: "Configure administrator and directory user login behavior", action: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { onClick: () => setModal("Manage Custom Attributes"), children: "Manage Custom Attributes" }), tabs: ["General", "Single Sign-On", "Smart Card Authentication"], children: (active) => active === "General" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1029
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Login Settings" }),
|
|
1030
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-list", children: [
|
|
1031
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { help: "Hides the administrator option on the self-service login page", children: "Hide self-service admin login" }),
|
|
1032
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1033
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { disabled: true, children: "Allow/Restrict admin portal access based on IP addresses." }),
|
|
1034
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowLink, { onClick: () => setModal("Configure IP addresses"), children: "Configure now" })
|
|
1035
|
+
] }),
|
|
1036
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1037
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { defaultChecked: true, children: "Show the directory selection drop-down menu in the web portal's login page." }),
|
|
1038
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowLink, { onClick: () => setModal("Configure Directory List"), children: "Configure Directory List" })
|
|
1039
|
+
] }),
|
|
1040
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1041
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { defaultChecked: true, children: "Show the directory selection drop-down menu in the mobile app and mobile portal login screen." }),
|
|
1042
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowLink, { onClick: () => setModal("Configure Directory List"), children: "Configure Directory List" })
|
|
1043
|
+
] }),
|
|
1044
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1045
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { help: "Permit configured attributes as alternate login identifiers", children: "Enable other unique attributes to log in to the product." }),
|
|
1046
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowLink, { onClick: () => setModal("Select attribute list"), children: "Select attribute list" })
|
|
1047
|
+
] }),
|
|
1048
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1049
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Enable user disclaimer" }),
|
|
1050
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowLink, { onClick: () => setModal("Customize disclaimer"), children: "Customize" })
|
|
1051
|
+
] }),
|
|
1052
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1053
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Prevent hackers from finding out valid users." }),
|
|
1054
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowLink, { onClick: () => setModal("Configure user protection"), children: "Configure" }),
|
|
1055
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(HelpTip, { text: "Use the same message for valid and invalid usernames" })
|
|
1056
|
+
] })
|
|
1057
|
+
] }),
|
|
1058
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "CAPTCHA settings" }),
|
|
1059
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-list", children: [
|
|
1060
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1061
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Show CAPTCHA (word verification image) on login page." }),
|
|
1062
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowLink, { onClick: () => setModal("CAPTCHA settings"), children: "CAPTCHA settings" })
|
|
1063
|
+
] }),
|
|
1064
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-indent", children: [
|
|
1065
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(CheckRow, { disabled: true, children: [
|
|
1066
|
+
"On ",
|
|
1067
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("em", { children: "Admin" }),
|
|
1068
|
+
" & ",
|
|
1069
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("em", { children: "Directory User" }),
|
|
1070
|
+
" login page."
|
|
1071
|
+
] }),
|
|
1072
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(CheckRow, { disabled: true, children: [
|
|
1073
|
+
"On ",
|
|
1074
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("em", { children: "Reset Password" }),
|
|
1075
|
+
" & ",
|
|
1076
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("em", { children: "Unlock Account" }),
|
|
1077
|
+
" login page."
|
|
1078
|
+
] })
|
|
1079
|
+
] }),
|
|
1080
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { help: "Enable an audio alternative for the CAPTCHA", children: "Enable audio CAPTCHA." })
|
|
1081
|
+
] }),
|
|
1082
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Other Settings" }),
|
|
1083
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-list", children: [
|
|
1084
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(CheckRow, { children: [
|
|
1085
|
+
"Hide ",
|
|
1086
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("em", { children: "Help" }),
|
|
1087
|
+
" button on end users page"
|
|
1088
|
+
] }),
|
|
1089
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(CheckRow, { children: [
|
|
1090
|
+
"Hide ",
|
|
1091
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("em", { children: "Mobile Access" }),
|
|
1092
|
+
" button on end users page"
|
|
1093
|
+
] })
|
|
1094
|
+
] }),
|
|
1095
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-tail-link", children: [
|
|
1096
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowLink, { onClick: () => setModal("Customize HTML"), children: "Customize" }),
|
|
1097
|
+
" end user login page completely as HTML"
|
|
1098
|
+
] }),
|
|
1099
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, {})
|
|
1100
|
+
] }) : active === "Single Sign-On" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1101
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-list", children: [
|
|
1102
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("strong", { children: "Enable SSO" }) }),
|
|
1103
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadioRow, { name: "sso", value: "SAML", disabled: true, children: "SAML Authentication" }),
|
|
1104
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadioRow, { name: "sso", value: "NTLM", checked: true, disabled: true, children: "NTLM Authentication" })
|
|
1105
|
+
] }),
|
|
1106
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Notice, { children: [
|
|
1107
|
+
"To complete the NTLM SSO configuration, download the latest Jespa JAR file, add it to the /lib folder, and restart ADSelfService Plus. ",
|
|
1108
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Learn More" })
|
|
1109
|
+
] }),
|
|
1110
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DataTable, { columns: ["", "Domain Name", "Computer Account", "Status"], rows: [[/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, {}), "ADSELFSERVICE", "-", /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { onClick: () => setModal("Configure SSO"), children: "Configure now" })]] }),
|
|
1111
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { cancel: false })
|
|
1112
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1113
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-form-block", children: [
|
|
1114
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Import CA Root Certificate", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { type: "file", "aria-label": "Choose certificate file" }) }),
|
|
1115
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Mapping Attribute in Certificate", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["SAN.OtherName", "Subject", "SAN.Email"] }) }),
|
|
1116
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Mapping Attribute in AD", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["userPrincipalName", "sAMAccountName", "mail"] }) }),
|
|
1117
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Linked Domains", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { className: "ad-input", disabled: true, defaultValue: "adselfservice.com" }) }),
|
|
1118
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, {})
|
|
1119
|
+
] }),
|
|
1120
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Notice, { tone: "warning", children: "You must restart ADSelfService Plus for the changes to take effect. Smart Card Authentication is supported only for users in Active Directory." })
|
|
1121
|
+
] }) }),
|
|
1122
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Modal, { title: modal, open: !!modal, onClose: () => setModal(""), footer: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1123
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { onClick: () => setModal(""), children: "Cancel" }),
|
|
1124
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "primary", onClick: () => setModal(""), children: "Done" })
|
|
1125
|
+
] }), children: modal === "Configure IP addresses" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { label: "Allowed IP address or range", placeholder: "192.168.1.0/24" }) : modal === "Customize disclaimer" || modal === "Customize HTML" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("textarea", { className: "ad-textarea", rows: "6", "aria-label": "Custom content" }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-modal-options", children: modalItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { defaultChecked: true, children: item }, item)) }) })
|
|
1126
|
+
] });
|
|
1127
|
+
}
|
|
1128
|
+
function Personalize() {
|
|
1129
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Frame, { title: "Personalize Settings", tabs: ["Display Settings", "Portal Rebranding", "Mobile Rebranding", "Change Password", "Language Customization"], children: (active) => active === "Display Settings" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-form-block", children: [
|
|
1130
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Choose Language", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["Browser Default", "English", "Japanese", "Spanish", "German", "French"] }) }),
|
|
1131
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Choose AD Welcome Name", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["SamAccountName", "UserPrincipalName", "DisplayName", "FirstName", "LastName"] }) }),
|
|
1132
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Choose Entra ID Welcome Name", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["UserPrincipalName", "DisplayName", "FirstName", "Mail Address"] }) }),
|
|
1133
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Time Format", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["02:45 PM", "14:45", "14:45:00"] }) }),
|
|
1134
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Date Format", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["2016/08/15 (yyyy/MM/dd)", "08/15/2016 (MM/dd/yyyy)", "15-08-2016 (dd-MM-yyyy)"], width: 230 }) }),
|
|
1135
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Time Zone", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["(GMT -8:00) Pacific Daylight Time(America/Los_Angeles)", "(GMT +5:30) India Standard Time(Asia/Kolkata)", "(GMT 00:00) UTC"], width: 355 }) }),
|
|
1136
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { cancelLabel: "Restore" })
|
|
1137
|
+
] }) : active === "Portal Rebranding" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1138
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "General Customization" }),
|
|
1139
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Choose Theme Color", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["Dark Gray", "Blue", "Green"] }) }),
|
|
1140
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Browser Title", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { defaultValue: "ADSelfService Plus" }) }),
|
|
1141
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Browser Title Image", hint: "Preferred image format is .ico", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { type: "file", accept: ".ico" }) }),
|
|
1142
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Change Logo", hint: "Dimension: 200 x 50, Size 2MB", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { type: "file", accept: "image/*" }) }),
|
|
1143
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Login Customization" }),
|
|
1144
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Customize Login Page Buttons", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-list", children: [
|
|
1145
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { defaultChecked: true, children: "Log In" }),
|
|
1146
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { defaultChecked: true, children: "Forgot your password?" }),
|
|
1147
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { defaultChecked: true, children: "Account locked out?" })
|
|
1148
|
+
] }) }),
|
|
1149
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Login Screen Background Image", hint: "Dimension: 1300 x 700, Size 2MB", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { type: "file", accept: "image/*" }) }),
|
|
1150
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { cancelLabel: "Restore" })
|
|
1151
|
+
] }) : active === "Mobile Rebranding" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1152
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Change Logo", hint: "Dimension 1000x400 - Size 2 MB", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { type: "file", accept: "image/*" }) }),
|
|
1153
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Customize Home Screen" }),
|
|
1154
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-option-list", children: ["Password Reset", "Account Unlock", "Change Password", "Server Settings", "Login", "Help", "Feedback"].map((item) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { defaultChecked: item !== "Change Password", children: item }, item)) }),
|
|
1155
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Restrict Mobile Access" }),
|
|
1156
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-indent", children: [
|
|
1157
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { disabled: true, children: "Restrict Mobile site access" }),
|
|
1158
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { disabled: true, children: "Restrict Mobile app (iOS/android) access" })
|
|
1159
|
+
] }),
|
|
1160
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Remember login in mobile app for auto login." }),
|
|
1161
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Advanced" }),
|
|
1162
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-spaced", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { children: "Preview" }) }),
|
|
1163
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { cancelLabel: "Restore" })
|
|
1164
|
+
] }) : active === "Change Password" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1165
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-form-block", children: [
|
|
1166
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Old Password", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { type: "password" }) }),
|
|
1167
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "New Password", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { type: "password" }) }),
|
|
1168
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Confirm New Password", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { type: "password" }) })
|
|
1169
|
+
] }),
|
|
1170
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("ul", { className: "ad-password-rules", children: [
|
|
1171
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Minimum length should be at least 8" }),
|
|
1172
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Number of special characters to include 2" }),
|
|
1173
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Must contain at least 1 upper case character" }),
|
|
1174
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Number of numerals to include 1" }),
|
|
1175
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Must not be a palindrome" })
|
|
1176
|
+
] }),
|
|
1177
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { saveLabel: "Change Password" })
|
|
1178
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1179
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Notice, { children: "Personalize ADSelfService Plus by modifying text displayed in its web interface. Retain curly braces in sentences that contain them, then reload the web console to view changes." }),
|
|
1180
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Select Language", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["English", "Japanese", "Chinese-Simplified", "Spanish", "German", "French"] }) }),
|
|
1181
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-language-toolbar", children: [
|
|
1182
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { placeholder: "Enter text to search" }),
|
|
1183
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { children: "Find & Replace" }),
|
|
1184
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: "1 - 25 of 18324" })
|
|
1185
|
+
] }),
|
|
1186
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DataTable, { columns: ["Text", "Action"], rows: ["Force Enrollment using Logon Script", "Mandatory fields cannot be left empty.", "Logon Hours", "Modules", "Trusted IPs", "Embed Widget", "Active Directory account unlock failed.", "Successfully changed the password"].map((text) => [text, /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Modify" })]) })
|
|
1187
|
+
] }) });
|
|
1188
|
+
}
|
|
1189
|
+
function Failover() {
|
|
1190
|
+
const [mode, setMode] = (0, import_react10.useState)("Load Balancing");
|
|
1191
|
+
const [open, setOpen] = (0, import_react10.useState)(false);
|
|
1192
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1193
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PageHeader, { title: "Failover and Secure Gateway", action: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "outline", onClick: () => setOpen(true), children: "How to configure?" }) }),
|
|
1194
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Panel, { className: "ad-architecture-panel", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-architecture", children: [
|
|
1195
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h3", { children: "Load Balancer Architecture" }),
|
|
1196
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Tabs, { tabs: ["Load Balancing", "Failover"], active: mode, onChange: setMode }),
|
|
1197
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-architecture-diagram", children: [
|
|
1198
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-architecture-node", children: [
|
|
1199
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.LaptopMinimal, { size: 48 }),
|
|
1200
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: "Web Interface" })
|
|
1201
|
+
] }),
|
|
1202
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.ArrowRight, { size: 23 }),
|
|
1203
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-architecture-node", children: [
|
|
1204
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Network, { size: 48 }),
|
|
1205
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: "Virtual IP/Hostname" })
|
|
1206
|
+
] }),
|
|
1207
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.ArrowRight, { size: 23 }),
|
|
1208
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-server-stack", children: [
|
|
1209
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-architecture-node", children: [
|
|
1210
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Server, { size: 45 }),
|
|
1211
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("small", { children: "Primary" })
|
|
1212
|
+
] }),
|
|
1213
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-architecture-node", children: [
|
|
1214
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Server, { size: 45 }),
|
|
1215
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("small", { children: "Secondary" })
|
|
1216
|
+
] }),
|
|
1217
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: "ADSelfService Plus Servers" })
|
|
1218
|
+
] }),
|
|
1219
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.ArrowRight, { size: 23 }),
|
|
1220
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-architecture-node", children: [
|
|
1221
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react6.Database, { size: 48 }),
|
|
1222
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: "ADSelfService Plus Database" })
|
|
1223
|
+
] })
|
|
1224
|
+
] })
|
|
1225
|
+
] }) }),
|
|
1226
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-configure-action", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "primary", onClick: () => setOpen(true), children: "Click to Configure" }) }),
|
|
1227
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Modal, { title: `${mode} Configuration`, open, onClose: () => setOpen(false), footer: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "primary", onClick: () => setOpen(false), children: "Close" }), children: [
|
|
1228
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Notice, { children: [
|
|
1229
|
+
"Specify the access URL and server details to configure ",
|
|
1230
|
+
mode.toLowerCase(),
|
|
1231
|
+
"."
|
|
1232
|
+
] }),
|
|
1233
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { label: "Access URL", placeholder: "https://adselfservice.example.com" })
|
|
1234
|
+
] })
|
|
1235
|
+
] });
|
|
1236
|
+
}
|
|
1237
|
+
function ReverseProxy() {
|
|
1238
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Frame, { title: "Reverse Proxy", children: [
|
|
1239
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-proxy", children: [
|
|
1240
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("strong", { children: "Context Based" }),
|
|
1241
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("dl", { children: [
|
|
1242
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { children: "Protocol" }),
|
|
1243
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { children: "HTTPS" }),
|
|
1244
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { children: "Port" }),
|
|
1245
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { children: "443" }),
|
|
1246
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { children: "Context" }),
|
|
1247
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { children: "adssp" }),
|
|
1248
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { children: "Access URL" }),
|
|
1249
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { children: "https://WIN-6VQ61ODR35T:443/adssp" }),
|
|
1250
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { children: "Target URL" }),
|
|
1251
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { children: "https://ADSSPDEMO1:443" })
|
|
1252
|
+
] })
|
|
1253
|
+
] }),
|
|
1254
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Notice, { tone: "warning", children: "To modify reverse proxy details, navigate to AD360 > Admin > Administration > Reverse Proxy." })
|
|
1255
|
+
] });
|
|
1256
|
+
}
|
|
1257
|
+
function Connection() {
|
|
1258
|
+
const [port, setPort] = (0, import_react10.useState)("https");
|
|
1259
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Frame, { title: "Connection Settings", action: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Configure Access URL" }), tabs: ["Connection Settings", "Proxy Settings", "General Settings"], children: (active) => active === "Connection Settings" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1260
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-form-block", children: [
|
|
1261
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FormRow, { label: "ADSelfService Plus Port [http]", children: [
|
|
1262
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadioRow, { name: "port", value: "http", checked: port === "http", onChange: setPort }),
|
|
1263
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { className: "ad-input ad-short", defaultValue: "8888", disabled: port !== "http" })
|
|
1264
|
+
] }),
|
|
1265
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FormRow, { label: "ADSelfService Plus Port [https]", children: [
|
|
1266
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadioRow, { name: "port", value: "https", checked: port === "https", onChange: setPort }),
|
|
1267
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { className: "ad-input ad-short", defaultValue: "443", disabled: port !== "https" }),
|
|
1268
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Apply SSL Certificate" })
|
|
1269
|
+
] }),
|
|
1270
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FormRow, { label: "Encrypt Keystore Password", children: [
|
|
1271
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, {}),
|
|
1272
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { className: "ad-input", disabled: true, type: "password" })
|
|
1273
|
+
] }),
|
|
1274
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Use LDAP SSL(LDAPS)" }) }),
|
|
1275
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Advanced Settings" }) })
|
|
1276
|
+
] }),
|
|
1277
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, {}),
|
|
1278
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "ad-footnote", children: "Changes will reflect only on restart of ADSelfService Plus." })
|
|
1279
|
+
] }) : active === "Proxy Settings" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1280
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Enable Proxy Server" }),
|
|
1281
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-form-block", children: [
|
|
1282
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Server Name or IP", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { placeholder: "Server Name or IP" }) }),
|
|
1283
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Port", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { placeholder: "Port" }) }),
|
|
1284
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Username", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, {}) }),
|
|
1285
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Password", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { type: "password" }) })
|
|
1286
|
+
] }),
|
|
1287
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "ad-footnote", children: "Provide username and password if the proxy server requires authentication." }),
|
|
1288
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { cancelLabel: "Reset" }),
|
|
1289
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-tail-link", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Test Connection" }) })
|
|
1290
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1291
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Session Settings" }),
|
|
1292
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Session Expiration Time", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["10 mins", "15 mins", "20 mins", "25 mins", "30 mins", "45 mins", "60 mins", "24 hrs", "Never"] }) }),
|
|
1293
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Deny Concurrent Logins" }),
|
|
1294
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Startup & Logging Settings" }),
|
|
1295
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { saveLabel: "Save Settings" }),
|
|
1296
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "ad-footnote", children: "Changes will reflect only on restart of ADSelfService Plus." })
|
|
1297
|
+
] }) });
|
|
1298
|
+
}
|
|
1299
|
+
function MailSms() {
|
|
1300
|
+
const [mode, setMode] = (0, import_react10.useState)("SMTP");
|
|
1301
|
+
const [auth, setAuth] = (0, import_react10.useState)("basic");
|
|
1302
|
+
const [smsAlert, setSmsAlert] = (0, import_react10.useState)(false);
|
|
1303
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Frame, { title: "Mail / SMS Server Settings", action: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Mail/Mobile Attributes" }), tabs: ["Mail Settings", "SMS Settings", "Notification Settings"], children: (active) => active === "Mail Settings" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-form-block", children: [
|
|
1304
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Configure Mail Server" }),
|
|
1305
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FormRow, { label: "Mode", children: [
|
|
1306
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadioRow, { name: "mailmode", value: "SMTP", checked: mode === "SMTP", onChange: setMode, children: "SMTP" }),
|
|
1307
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadioRow, { name: "mailmode", value: "API", checked: mode === "API", onChange: setMode, children: "API" })
|
|
1308
|
+
] }),
|
|
1309
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Server Name or IP", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { defaultValue: "smtp" }) }),
|
|
1310
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Port", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { defaultValue: "25" }) }),
|
|
1311
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "From Address", required: true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { defaultValue: "noreply@adselfserviceplus.com" }) }),
|
|
1312
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FormRow, { label: "Admin Mail Address", required: true, hint: "Use comma (,) to separate multiple email addresses.", children: [
|
|
1313
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { defaultValue: "noreply@adselfserviceplus.com" }),
|
|
1314
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Send a test mail" })
|
|
1315
|
+
] }),
|
|
1316
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Secure Connection (SSL/TLS)", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["None", "SSL", "TLS"], initial: "SSL" }) }),
|
|
1317
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Authentication" }),
|
|
1318
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FormRow, { label: "Authentication Type", children: [
|
|
1319
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadioRow, { name: "auth", value: "basic", checked: auth === "basic", onChange: setAuth, children: "Basic Authentication" }),
|
|
1320
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadioRow, { name: "auth", value: "oauth", checked: auth === "oauth", onChange: setAuth, children: "OAuth Authentication" })
|
|
1321
|
+
] }),
|
|
1322
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Username", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, {}) }),
|
|
1323
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Password", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { type: "password" }) }),
|
|
1324
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { saveLabel: "Save Settings" }),
|
|
1325
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "ad-footnote", children: "Once the mail server settings are saved, a test mail will be sent to the Admin Mail Address." })
|
|
1326
|
+
] }) : active === "SMS Settings" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1327
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FormRow, { label: "SMS Provider", children: [
|
|
1328
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["GSMModem", "Clickatell", "Custom"], initial: "Clickatell" }),
|
|
1329
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Send Test SMS" })
|
|
1330
|
+
] }),
|
|
1331
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1332
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { checked: smsAlert, onChange: setSmsAlert, children: "Please notify me when my credit balance reaches" }),
|
|
1333
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { className: "ad-input ad-short", defaultValue: "10", disabled: !smsAlert })
|
|
1334
|
+
] }),
|
|
1335
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { saveLabel: "Save Settings" }),
|
|
1336
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-notes", children: [
|
|
1337
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("strong", { children: "Quick Help" }),
|
|
1338
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("ul", { children: [
|
|
1339
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Mobile numbers should use the standard international format with country code." }),
|
|
1340
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Do not include a leading zero, plus sign, or spaces." }),
|
|
1341
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "1 credit = 1 message of 70 characters." })
|
|
1342
|
+
] })
|
|
1343
|
+
] })
|
|
1344
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1345
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Mail Notification" }),
|
|
1346
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-list", children: [
|
|
1347
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Enable License Expiry Notification" }),
|
|
1348
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Enable notifications for product startup and downtime events" }),
|
|
1349
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Enable notifications for new product updates" }),
|
|
1350
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Enable notifications for events and workshops" }),
|
|
1351
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Send notifications to the secondary email addresses of all end users" }),
|
|
1352
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1353
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Notify when SSL certificate is" }),
|
|
1354
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { className: "ad-input ad-short", disabled: true }),
|
|
1355
|
+
"days before expiration"
|
|
1356
|
+
] })
|
|
1357
|
+
] }),
|
|
1358
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "SMS Notification" }),
|
|
1359
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-list", children: [
|
|
1360
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1361
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Enable product startup and downtime SMS notifications for this mobile number" }),
|
|
1362
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { className: "ad-input", disabled: true, placeholder: "Enter the mobile Number" })
|
|
1363
|
+
] }),
|
|
1364
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Send notifications to the secondary mobile numbers of all end users" })
|
|
1365
|
+
] }),
|
|
1366
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { saveLabel: "Save Settings" })
|
|
1367
|
+
] }) });
|
|
1368
|
+
}
|
|
1369
|
+
function DashboardUpdater() {
|
|
1370
|
+
const [selected, setSelected] = (0, import_react10.useState)("");
|
|
1371
|
+
const rows = [["AD Synchronizer", "ADSELFSERVICE", "Once in every 1 Hrs 0 Mins.", "Today 09:36 PM", "Success"], ["Locked Out Users", "ADSELFSERVICE", "Once in every 3 Hrs 0 Mins.", "Today 10:36 PM", "Success"], ["Password Expired Users", "ADSELFSERVICE", "Daily at 7 Hrs 0 Mins.", "2026/10/14 06:30 PM", "Success"], ["Soon-To-Expire User Passwords", "ADSELFSERVICE", "Daily at 7 Hrs 0 Mins.", "2026/10/14 06:30 PM", "Success"], ["Microsoft Entra ID Synchronizer", "Zoho", "Once in every 1 Hrs 0 Mins.", "Today 09:52 PM", "Success"]];
|
|
1372
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1373
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Frame, { title: "Dashboard Updater", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DataTable, { columns: ["Actions", "Scheduler Name", "Applies to (Directories)", "Schedule Frequency", "Next Run", "Status"], rows: rows.map((row) => [/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { onClick: () => setSelected(row[0]), children: "Edit" }), ...row.slice(0, 4), /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "ad-success", children: row[4] })]) }) }),
|
|
1374
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Modal, { title: selected, open: !!selected, onClose: () => setSelected(""), footer: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "primary", onClick: () => setSelected(""), children: "Done" }), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Schedule Frequency", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["Every hour", "Every 3 hours", "Daily"] }) }) })
|
|
1375
|
+
] });
|
|
1376
|
+
}
|
|
1377
|
+
function Backup() {
|
|
1378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Frame, { title: "Backup Settings", action: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Backup History" }), tabs: ["Backup Settings"], children: [
|
|
1379
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-form-block", children: [
|
|
1380
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FormRow, { label: "Backup Frequency", children: [
|
|
1381
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["Daily", "Weekly", "Monthly"] }),
|
|
1382
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"] }),
|
|
1383
|
+
" hrs ",
|
|
1384
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["00", "05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55"] }),
|
|
1385
|
+
" mins"
|
|
1386
|
+
] }),
|
|
1387
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FormRow, { label: "Backup Storage Path", required: true, hint: "Path Format: C:\\local-path\\ (or) \\\\network-path\\", children: [
|
|
1388
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, {}),
|
|
1389
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Backup Now" })
|
|
1390
|
+
] }),
|
|
1391
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormRow, { label: "Retain Backup Files", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["Delete files older than 15 days", "Delete files older than 30 days", "Keep last 10 files", "Keep all files"] }) }),
|
|
1392
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-inline-save", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { cancel: false }) })
|
|
1393
|
+
] }),
|
|
1394
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-notes", children: [
|
|
1395
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("strong", { children: "Note:" }),
|
|
1396
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("ul", { children: [
|
|
1397
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "If the specified path is wrong or unavailable, backup files will be stored in the default Backup folder." }),
|
|
1398
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "You can protect your backup with a password under Admin > Product Settings > Security and Privacy." }),
|
|
1399
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Automatic backup can be enabled only if you are using the built-in PostgreSQL database." })
|
|
1400
|
+
] })
|
|
1401
|
+
] })
|
|
1402
|
+
] });
|
|
1403
|
+
}
|
|
1404
|
+
function SiteBased() {
|
|
1405
|
+
const [selected, setSelected] = (0, import_react10.useState)("adselfservice.com");
|
|
1406
|
+
const [open, setOpen] = (0, import_react10.useState)(false);
|
|
1407
|
+
const ous = ["adselfservice.com", "Computers", "Demo-Admins", "Demo-Computers", "Demo-Contact", "Demo-Developers", "Demo-Engineering", "Demo-Finance", "Demo-Groups", "Demo-HR", "Demo-Marketing", "Demo-Sales", "Demo-SelfService", "Demo-Technical Support", "Demo-Testing", "Demo-Users", "Domain Controllers", "Users"];
|
|
1408
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1409
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Frame, { title: "Site Based DC Updater", help: "Configure site based domain controller selection", children: [
|
|
1410
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-site-domain", children: [
|
|
1411
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("strong", { children: "Select Domain" }),
|
|
1412
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["ADSELFSERVICE"] })
|
|
1413
|
+
] }),
|
|
1414
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-site-picker", children: [
|
|
1415
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-site-column", children: [
|
|
1416
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("strong", { children: "OUs" }),
|
|
1417
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-ou-tree", children: ous.map((ou, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("label", { className: "ad-ou-row", style: { paddingLeft: i === 0 ? 16 : 36 }, children: [
|
|
1418
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { type: "checkbox", checked: selected === ou, onChange: () => setSelected(ou) }),
|
|
1419
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: i === 0 ? "\u25A3" : "\u25B8" }),
|
|
1420
|
+
ou
|
|
1421
|
+
] }, ou)) })
|
|
1422
|
+
] }),
|
|
1423
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-site-column", children: [
|
|
1424
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("strong", { children: [
|
|
1425
|
+
"Domain Controller (",
|
|
1426
|
+
selected,
|
|
1427
|
+
")"
|
|
1428
|
+
] }),
|
|
1429
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-dc-list", children: "\u25A3 \xA0 adsspdemo1.adselfservice.com" }),
|
|
1430
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { onClick: () => setOpen(true), children: "Select More DCs" })
|
|
1431
|
+
] })
|
|
1432
|
+
] }),
|
|
1433
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Set higher priority to Site-based DC Updater over policy-based DC Updater" }),
|
|
1434
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, {})
|
|
1435
|
+
] }),
|
|
1436
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Modal, { title: "Select More DCs", open, onClose: () => setOpen(false), footer: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "primary", onClick: () => setOpen(false), children: "Done" }), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { defaultChecked: true, children: "adsspdemo1.adselfservice.com" }) })
|
|
1437
|
+
] });
|
|
1438
|
+
}
|
|
1439
|
+
function Integration() {
|
|
1440
|
+
const [selected, setSelected] = (0, import_react10.useState)("");
|
|
1441
|
+
const apps = [["ADManager Plus", "ADManager Plus"], ["ServiceDesk Plus", "ServiceDesk Plus"], ["splunk>", "Splunk Server"], ["SYSLOG", "Syslog Server"], ["Hibp?", "Have I Been Pwned?"], ["Log360 - EventLog Analyzer", "Log360"], ["ServiceDesk Plus Cloud", "ServiceDesk Plus Cloud"]];
|
|
1442
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1443
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Frame, { title: "Integration Settings", help: "Configure external integrations", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-integration-grid", children: apps.map(([logo, label]) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("button", { className: "ad-integration-tile", onClick: () => setSelected(label), children: [
|
|
1444
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("strong", { children: logo }),
|
|
1445
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: label })
|
|
1446
|
+
] }, label)) }) }),
|
|
1447
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Modal, { title: selected, open: !!selected, onClose: () => setSelected(""), footer: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { onClick: () => setSelected(""), children: "Close" }), children: [
|
|
1448
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Notice, { children: [
|
|
1449
|
+
"Configure the connection for ",
|
|
1450
|
+
selected,
|
|
1451
|
+
"."
|
|
1452
|
+
] }),
|
|
1453
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { label: "Server URL" })
|
|
1454
|
+
] })
|
|
1455
|
+
] });
|
|
1456
|
+
}
|
|
1457
|
+
function WindowsService() {
|
|
1458
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Frame, { title: "ADSelfService Plus as Windows Service", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-service-instructions", children: [
|
|
1459
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h2", { children: "To install and start ADSelfService Plus as a service:" }),
|
|
1460
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("ol", { children: [
|
|
1461
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Please stop ADSelfService Plus if it is running. (Start-->All Programs-->ADSelfService Plus-->Stop ADSelfService Plus)" }),
|
|
1462
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Install as a service. (Start-->All Programs-->ADSelfService Plus-->NT Service-->Install ADSelfService Plus as Service)" }),
|
|
1463
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("li", { children: [
|
|
1464
|
+
"Start as a service:",
|
|
1465
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("ol", { type: "i", children: [
|
|
1466
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: 'Start-->Run and type "services.msc"' }),
|
|
1467
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: 'Right-click on "ManageEngine ADSelfService Plus" and Click on Properties.' }),
|
|
1468
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: 'Go to Logon Tab and choose "This Account" option. Enter administrative credentials and click OK.' }),
|
|
1469
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: 'Right-click on "ManageEngine ADSelfService Plus" and Click on Start.' })
|
|
1470
|
+
] })
|
|
1471
|
+
] })
|
|
1472
|
+
] })
|
|
1473
|
+
] }) });
|
|
1474
|
+
}
|
|
1475
|
+
function Security() {
|
|
1476
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Frame, { title: "Security and Privacy", tabs: ["Privacy Settings"], children: [
|
|
1477
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Data Security" }),
|
|
1478
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { children: "Enable password protection for" }),
|
|
1479
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-list", children: [
|
|
1480
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1481
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Scheduled and exported reports" }),
|
|
1482
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { className: "ad-input", type: "password", disabled: true })
|
|
1483
|
+
] }),
|
|
1484
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-option-inline", children: [
|
|
1485
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { children: "Database backup files" }),
|
|
1486
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { className: "ad-input", type: "password", disabled: true })
|
|
1487
|
+
] })
|
|
1488
|
+
] }),
|
|
1489
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionTitle, { children: "Usage Statistics" }),
|
|
1490
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CheckRow, { defaultChecked: true, children: "Send product usage statistics anonymously" }),
|
|
1491
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SaveBar, { saveLabel: "Save Settings" })
|
|
1492
|
+
] });
|
|
1493
|
+
}
|
|
1494
|
+
function RestrictUsers() {
|
|
1495
|
+
const [active, setActive] = (0, import_react10.useState)("Restrict Users");
|
|
1496
|
+
const [open, setOpen] = (0, import_react10.useState)(false);
|
|
1497
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1498
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Frame, { title: "Restricted Users", action: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-header-links", children: [
|
|
1499
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "Schedule to Restrict/Derestrict" }),
|
|
1500
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextLink, { children: "License Info" })
|
|
1501
|
+
] }), children: [
|
|
1502
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Notice, { tone: "warning", children: [
|
|
1503
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("strong", { children: "Note" }),
|
|
1504
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("ul", { children: [
|
|
1505
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Prevent licenses being wasted by stale user accounts." }),
|
|
1506
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Restrict inactive user accounts and prevent them from being exploited." }),
|
|
1507
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Enrolment data of a restricted user would be deleted automatically." }),
|
|
1508
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: "Restricting a user revokes and frees up the Endpoint MFA license they have consumed." })
|
|
1509
|
+
] })
|
|
1510
|
+
] }),
|
|
1511
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Tabs, { tabs: ["Restrict Users", "Derestrict Users"], active, onChange: setActive }),
|
|
1512
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "ad-restrict-toolbar", children: [
|
|
1513
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: "Select Directory" }),
|
|
1514
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["ADSELFSERVICE"] }),
|
|
1515
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "ad-restrict-count", children: "0-0 of 0" }),
|
|
1516
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InlineSelect, { options: ["25", "50", "100"] })
|
|
1517
|
+
] }),
|
|
1518
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DataTable, { columns: [""], empty: `There are no ${active === "Restrict Users" ? "restricted" : "derestricted"} users in this directory. Click ${active} to start.` }),
|
|
1519
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "ad-spaced", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "primary", onClick: () => setOpen(true), children: active }) })
|
|
1520
|
+
] }),
|
|
1521
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Modal, { title: active, open, onClose: () => setOpen(false), footer: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "primary", onClick: () => setOpen(false), children: "Done" }), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TextField, { label: "Search Users", placeholder: "Search by name" }) })
|
|
1522
|
+
] });
|
|
1523
|
+
}
|
|
1524
|
+
var SCREENS = { login: LoginSettings, personalize: Personalize, failover: Failover, reverse: ReverseProxy, connection: Connection, mail: MailSms, dashboard: DashboardUpdater, backup: Backup, site: SiteBased, integration: Integration, windows: WindowsService, security: Security, restrict: RestrictUsers };
|
|
1525
|
+
function AdminScreen({ screen, screens = {}, renderScreen, screenProps = {} }) {
|
|
1526
|
+
const override = renderScreen?.(screen);
|
|
1527
|
+
if (override !== void 0) return override;
|
|
1528
|
+
const Component = screens[screen] || SCREENS[screen] || LoginSettings;
|
|
1529
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Component, { ...screenProps }, screen);
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1532
|
+
// src/pages/AdminScreen.tsx
|
|
1533
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
1534
|
+
var ADMIN_GROUPS2 = ADMIN_GROUPS;
|
|
1535
|
+
function AdminScreen2(props) {
|
|
1536
|
+
const Component = AdminScreen;
|
|
1537
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Component, { ...props });
|
|
1538
|
+
}
|