@acoustte-digital-services/digitalstore-controls-dev 0.8.1-dev.20260616111809 → 0.8.1-dev.20260620042502
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/dist/index.js +88 -1
- package/dist/index.mjs +88 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -5566,6 +5566,73 @@ var ImageGalleryNode_default = ImageGalleryNode;
|
|
|
5566
5566
|
|
|
5567
5567
|
// src/components/pageRenderingEngine/nodes/DivContainer.tsx
|
|
5568
5568
|
var import_link2 = __toESM(require("next/link"));
|
|
5569
|
+
|
|
5570
|
+
// src/utilities/RoleUtility.tsx
|
|
5571
|
+
var decodeJWT = (token) => {
|
|
5572
|
+
if (!token) return null;
|
|
5573
|
+
try {
|
|
5574
|
+
const cleanToken = token.replace(/^Bearer\s+/i, "");
|
|
5575
|
+
const parts = cleanToken.split(".");
|
|
5576
|
+
if (parts.length !== 3) {
|
|
5577
|
+
console.warn("Invalid JWT token format");
|
|
5578
|
+
return null;
|
|
5579
|
+
}
|
|
5580
|
+
const payload = parts[1];
|
|
5581
|
+
const decoded = JSON.parse(atob(payload));
|
|
5582
|
+
return decoded;
|
|
5583
|
+
} catch (error) {
|
|
5584
|
+
console.warn("Failed to decode JWT token:", error);
|
|
5585
|
+
return null;
|
|
5586
|
+
}
|
|
5587
|
+
};
|
|
5588
|
+
var extractRolesFromToken = (decodedPayload) => {
|
|
5589
|
+
if (!decodedPayload) return [];
|
|
5590
|
+
const roles = [];
|
|
5591
|
+
if (decodedPayload.role && typeof decodedPayload.role === "string") {
|
|
5592
|
+
roles.push(decodedPayload.role);
|
|
5593
|
+
}
|
|
5594
|
+
if (decodedPayload.roles && Array.isArray(decodedPayload.roles)) {
|
|
5595
|
+
roles.push(...decodedPayload.roles);
|
|
5596
|
+
}
|
|
5597
|
+
if (decodedPayload.realm_access?.roles && Array.isArray(decodedPayload.realm_access.roles)) {
|
|
5598
|
+
roles.push(...decodedPayload.realm_access.roles);
|
|
5599
|
+
}
|
|
5600
|
+
if (decodedPayload.resource_access && typeof decodedPayload.resource_access === "object") {
|
|
5601
|
+
Object.values(decodedPayload.resource_access).forEach((resource) => {
|
|
5602
|
+
if (resource?.roles && Array.isArray(resource.roles)) {
|
|
5603
|
+
roles.push(...resource.roles);
|
|
5604
|
+
}
|
|
5605
|
+
});
|
|
5606
|
+
}
|
|
5607
|
+
return [...new Set(roles)];
|
|
5608
|
+
};
|
|
5609
|
+
var getUserRoles = (oAuthToken) => {
|
|
5610
|
+
const decodedPayload = decodeJWT(oAuthToken);
|
|
5611
|
+
return extractRolesFromToken(decodedPayload);
|
|
5612
|
+
};
|
|
5613
|
+
var hasRole = (userRoles, requiredRole) => {
|
|
5614
|
+
if (!requiredRole || !userRoles) return false;
|
|
5615
|
+
return userRoles.some(
|
|
5616
|
+
(role) => role.toLowerCase() === requiredRole.toLowerCase()
|
|
5617
|
+
);
|
|
5618
|
+
};
|
|
5619
|
+
var shouldRenderByRole = (roleCode, userRoles) => {
|
|
5620
|
+
if (!roleCode || roleCode.trim() === "") {
|
|
5621
|
+
return true;
|
|
5622
|
+
}
|
|
5623
|
+
const trimmedRoleCode = roleCode.trim();
|
|
5624
|
+
if (trimmedRoleCode.startsWith("!")) {
|
|
5625
|
+
const requiredRole = trimmedRoleCode.substring(1);
|
|
5626
|
+
return !hasRole(userRoles, requiredRole);
|
|
5627
|
+
}
|
|
5628
|
+
return hasRole(userRoles, trimmedRoleCode);
|
|
5629
|
+
};
|
|
5630
|
+
var validateRoleVisibility = (roleCode, oAuthToken) => {
|
|
5631
|
+
const userRoles = getUserRoles(oAuthToken);
|
|
5632
|
+
return shouldRenderByRole(roleCode, userRoles);
|
|
5633
|
+
};
|
|
5634
|
+
|
|
5635
|
+
// src/components/pageRenderingEngine/nodes/DivContainer.tsx
|
|
5569
5636
|
var import_jsx_runtime70 = require("react/jsx-runtime");
|
|
5570
5637
|
function toCamelCase(str) {
|
|
5571
5638
|
return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
@@ -5792,7 +5859,16 @@ var DivContainer = async (props) => {
|
|
|
5792
5859
|
}
|
|
5793
5860
|
return isNegated ? fieldValue === true : fieldValue === false;
|
|
5794
5861
|
};
|
|
5795
|
-
const
|
|
5862
|
+
const shouldHideByRole = () => {
|
|
5863
|
+
if (!props.node.roleCode) return false;
|
|
5864
|
+
const roleCode = props.node.roleCode;
|
|
5865
|
+
const oAuthToken = props.session?.oAuthToken;
|
|
5866
|
+
if (!roleCode || roleCode.trim() === "") {
|
|
5867
|
+
return false;
|
|
5868
|
+
}
|
|
5869
|
+
return !validateRoleVisibility(roleCode, oAuthToken);
|
|
5870
|
+
};
|
|
5871
|
+
const isHidden = shouldHideContainer() || shouldHideByRole();
|
|
5796
5872
|
let odataString = void 0;
|
|
5797
5873
|
let endpoint = void 0;
|
|
5798
5874
|
let result = null;
|
|
@@ -6002,10 +6078,21 @@ var PageBodyRenderer = (props) => {
|
|
|
6002
6078
|
if (pageBodyTree && pageBodyTree.root) {
|
|
6003
6079
|
rootNode = pageBodyTree.root;
|
|
6004
6080
|
}
|
|
6081
|
+
const shouldRenderNode = (node) => {
|
|
6082
|
+
{
|
|
6083
|
+
}
|
|
6084
|
+
if (node.type === "div-container" && node.roleCode) {
|
|
6085
|
+
return validateRoleVisibility(node.roleCode, props.session?.oAuthToken);
|
|
6086
|
+
}
|
|
6087
|
+
return true;
|
|
6088
|
+
};
|
|
6005
6089
|
return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react51.default.Fragment, { children: rootNode && rootNode?.children?.map((node, index) => {
|
|
6006
6090
|
{
|
|
6007
6091
|
}
|
|
6008
6092
|
const SelectedNode = NodeTypes[node.type];
|
|
6093
|
+
if (!shouldRenderNode(node)) {
|
|
6094
|
+
return null;
|
|
6095
|
+
}
|
|
6009
6096
|
return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react51.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react51.default.Fragment, { children: node.type == "layout-container" ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react51.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
6010
6097
|
SelectedNode,
|
|
6011
6098
|
{
|
package/dist/index.mjs
CHANGED
|
@@ -3960,6 +3960,73 @@ var ImageGalleryNode_default = ImageGalleryNode;
|
|
|
3960
3960
|
|
|
3961
3961
|
// src/components/pageRenderingEngine/nodes/DivContainer.tsx
|
|
3962
3962
|
import Link2 from "next/link";
|
|
3963
|
+
|
|
3964
|
+
// src/utilities/RoleUtility.tsx
|
|
3965
|
+
var decodeJWT = (token) => {
|
|
3966
|
+
if (!token) return null;
|
|
3967
|
+
try {
|
|
3968
|
+
const cleanToken = token.replace(/^Bearer\s+/i, "");
|
|
3969
|
+
const parts = cleanToken.split(".");
|
|
3970
|
+
if (parts.length !== 3) {
|
|
3971
|
+
console.warn("Invalid JWT token format");
|
|
3972
|
+
return null;
|
|
3973
|
+
}
|
|
3974
|
+
const payload = parts[1];
|
|
3975
|
+
const decoded = JSON.parse(atob(payload));
|
|
3976
|
+
return decoded;
|
|
3977
|
+
} catch (error) {
|
|
3978
|
+
console.warn("Failed to decode JWT token:", error);
|
|
3979
|
+
return null;
|
|
3980
|
+
}
|
|
3981
|
+
};
|
|
3982
|
+
var extractRolesFromToken = (decodedPayload) => {
|
|
3983
|
+
if (!decodedPayload) return [];
|
|
3984
|
+
const roles = [];
|
|
3985
|
+
if (decodedPayload.role && typeof decodedPayload.role === "string") {
|
|
3986
|
+
roles.push(decodedPayload.role);
|
|
3987
|
+
}
|
|
3988
|
+
if (decodedPayload.roles && Array.isArray(decodedPayload.roles)) {
|
|
3989
|
+
roles.push(...decodedPayload.roles);
|
|
3990
|
+
}
|
|
3991
|
+
if (decodedPayload.realm_access?.roles && Array.isArray(decodedPayload.realm_access.roles)) {
|
|
3992
|
+
roles.push(...decodedPayload.realm_access.roles);
|
|
3993
|
+
}
|
|
3994
|
+
if (decodedPayload.resource_access && typeof decodedPayload.resource_access === "object") {
|
|
3995
|
+
Object.values(decodedPayload.resource_access).forEach((resource) => {
|
|
3996
|
+
if (resource?.roles && Array.isArray(resource.roles)) {
|
|
3997
|
+
roles.push(...resource.roles);
|
|
3998
|
+
}
|
|
3999
|
+
});
|
|
4000
|
+
}
|
|
4001
|
+
return [...new Set(roles)];
|
|
4002
|
+
};
|
|
4003
|
+
var getUserRoles = (oAuthToken) => {
|
|
4004
|
+
const decodedPayload = decodeJWT(oAuthToken);
|
|
4005
|
+
return extractRolesFromToken(decodedPayload);
|
|
4006
|
+
};
|
|
4007
|
+
var hasRole = (userRoles, requiredRole) => {
|
|
4008
|
+
if (!requiredRole || !userRoles) return false;
|
|
4009
|
+
return userRoles.some(
|
|
4010
|
+
(role) => role.toLowerCase() === requiredRole.toLowerCase()
|
|
4011
|
+
);
|
|
4012
|
+
};
|
|
4013
|
+
var shouldRenderByRole = (roleCode, userRoles) => {
|
|
4014
|
+
if (!roleCode || roleCode.trim() === "") {
|
|
4015
|
+
return true;
|
|
4016
|
+
}
|
|
4017
|
+
const trimmedRoleCode = roleCode.trim();
|
|
4018
|
+
if (trimmedRoleCode.startsWith("!")) {
|
|
4019
|
+
const requiredRole = trimmedRoleCode.substring(1);
|
|
4020
|
+
return !hasRole(userRoles, requiredRole);
|
|
4021
|
+
}
|
|
4022
|
+
return hasRole(userRoles, trimmedRoleCode);
|
|
4023
|
+
};
|
|
4024
|
+
var validateRoleVisibility = (roleCode, oAuthToken) => {
|
|
4025
|
+
const userRoles = getUserRoles(oAuthToken);
|
|
4026
|
+
return shouldRenderByRole(roleCode, userRoles);
|
|
4027
|
+
};
|
|
4028
|
+
|
|
4029
|
+
// src/components/pageRenderingEngine/nodes/DivContainer.tsx
|
|
3963
4030
|
import { jsx as jsx59, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
3964
4031
|
function toCamelCase(str) {
|
|
3965
4032
|
return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
@@ -4186,7 +4253,16 @@ var DivContainer = async (props) => {
|
|
|
4186
4253
|
}
|
|
4187
4254
|
return isNegated ? fieldValue === true : fieldValue === false;
|
|
4188
4255
|
};
|
|
4189
|
-
const
|
|
4256
|
+
const shouldHideByRole = () => {
|
|
4257
|
+
if (!props.node.roleCode) return false;
|
|
4258
|
+
const roleCode = props.node.roleCode;
|
|
4259
|
+
const oAuthToken = props.session?.oAuthToken;
|
|
4260
|
+
if (!roleCode || roleCode.trim() === "") {
|
|
4261
|
+
return false;
|
|
4262
|
+
}
|
|
4263
|
+
return !validateRoleVisibility(roleCode, oAuthToken);
|
|
4264
|
+
};
|
|
4265
|
+
const isHidden = shouldHideContainer() || shouldHideByRole();
|
|
4190
4266
|
let odataString = void 0;
|
|
4191
4267
|
let endpoint = void 0;
|
|
4192
4268
|
let result = null;
|
|
@@ -4396,10 +4472,21 @@ var PageBodyRenderer = (props) => {
|
|
|
4396
4472
|
if (pageBodyTree && pageBodyTree.root) {
|
|
4397
4473
|
rootNode = pageBodyTree.root;
|
|
4398
4474
|
}
|
|
4475
|
+
const shouldRenderNode = (node) => {
|
|
4476
|
+
{
|
|
4477
|
+
}
|
|
4478
|
+
if (node.type === "div-container" && node.roleCode) {
|
|
4479
|
+
return validateRoleVisibility(node.roleCode, props.session?.oAuthToken);
|
|
4480
|
+
}
|
|
4481
|
+
return true;
|
|
4482
|
+
};
|
|
4399
4483
|
return /* @__PURE__ */ jsx60(React42.Fragment, { children: rootNode && rootNode?.children?.map((node, index) => {
|
|
4400
4484
|
{
|
|
4401
4485
|
}
|
|
4402
4486
|
const SelectedNode = NodeTypes[node.type];
|
|
4487
|
+
if (!shouldRenderNode(node)) {
|
|
4488
|
+
return null;
|
|
4489
|
+
}
|
|
4403
4490
|
return /* @__PURE__ */ jsx60(React42.Fragment, { children: SelectedNode && /* @__PURE__ */ jsx60(React42.Fragment, { children: node.type == "layout-container" ? /* @__PURE__ */ jsx60(React42.Fragment, { children: /* @__PURE__ */ jsx60(
|
|
4404
4491
|
SelectedNode,
|
|
4405
4492
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acoustte-digital-services/digitalstore-controls-dev",
|
|
3
|
-
"version": "0.8.1-dev.
|
|
3
|
+
"version": "0.8.1-dev.20260620042502",
|
|
4
4
|
"description": "Reusable React components",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@types/node": "^
|
|
25
|
+
"@types/node": "^26.0.0",
|
|
26
26
|
"@types/react": "^19",
|
|
27
27
|
"@types/react-dom": "^19",
|
|
28
28
|
"tsup": "^8.5.1",
|