@acoustte-digital-services/digitalstore-controls-dev 0.8.1-dev.20260616111809 → 0.8.1-dev.20260620051742
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 +91 -1
- package/dist/index.mjs +91 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -5566,6 +5566,76 @@ 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.rolecode && typeof decodedPayload.rolecode === "string") {
|
|
5595
|
+
roles.push(decodedPayload.rolecode);
|
|
5596
|
+
}
|
|
5597
|
+
if (decodedPayload.roles && Array.isArray(decodedPayload.roles)) {
|
|
5598
|
+
roles.push(...decodedPayload.roles);
|
|
5599
|
+
}
|
|
5600
|
+
if (decodedPayload.realm_access?.roles && Array.isArray(decodedPayload.realm_access.roles)) {
|
|
5601
|
+
roles.push(...decodedPayload.realm_access.roles);
|
|
5602
|
+
}
|
|
5603
|
+
if (decodedPayload.resource_access && typeof decodedPayload.resource_access === "object") {
|
|
5604
|
+
Object.values(decodedPayload.resource_access).forEach((resource) => {
|
|
5605
|
+
if (resource?.roles && Array.isArray(resource.roles)) {
|
|
5606
|
+
roles.push(...resource.roles);
|
|
5607
|
+
}
|
|
5608
|
+
});
|
|
5609
|
+
}
|
|
5610
|
+
return [...new Set(roles)];
|
|
5611
|
+
};
|
|
5612
|
+
var getUserRoles = (oAuthToken) => {
|
|
5613
|
+
const decodedPayload = decodeJWT(oAuthToken);
|
|
5614
|
+
return extractRolesFromToken(decodedPayload);
|
|
5615
|
+
};
|
|
5616
|
+
var hasRole = (userRoles, requiredRole) => {
|
|
5617
|
+
if (!requiredRole || !userRoles) return false;
|
|
5618
|
+
return userRoles.some(
|
|
5619
|
+
(role) => role.toLowerCase() === requiredRole.toLowerCase()
|
|
5620
|
+
);
|
|
5621
|
+
};
|
|
5622
|
+
var shouldRenderByRole = (roleCode, userRoles) => {
|
|
5623
|
+
if (!roleCode || roleCode.trim() === "") {
|
|
5624
|
+
return true;
|
|
5625
|
+
}
|
|
5626
|
+
const trimmedRoleCode = roleCode.trim();
|
|
5627
|
+
if (trimmedRoleCode.startsWith("!")) {
|
|
5628
|
+
const requiredRole = trimmedRoleCode.substring(1);
|
|
5629
|
+
return !hasRole(userRoles, requiredRole);
|
|
5630
|
+
}
|
|
5631
|
+
return hasRole(userRoles, trimmedRoleCode);
|
|
5632
|
+
};
|
|
5633
|
+
var validateRoleVisibility = (roleCode, oAuthToken) => {
|
|
5634
|
+
const userRoles = getUserRoles(oAuthToken);
|
|
5635
|
+
return shouldRenderByRole(roleCode, userRoles);
|
|
5636
|
+
};
|
|
5637
|
+
|
|
5638
|
+
// src/components/pageRenderingEngine/nodes/DivContainer.tsx
|
|
5569
5639
|
var import_jsx_runtime70 = require("react/jsx-runtime");
|
|
5570
5640
|
function toCamelCase(str) {
|
|
5571
5641
|
return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
@@ -5792,7 +5862,16 @@ var DivContainer = async (props) => {
|
|
|
5792
5862
|
}
|
|
5793
5863
|
return isNegated ? fieldValue === true : fieldValue === false;
|
|
5794
5864
|
};
|
|
5795
|
-
const
|
|
5865
|
+
const shouldHideByRole = () => {
|
|
5866
|
+
if (!props.node.roleCode) return false;
|
|
5867
|
+
const roleCode = props.node.roleCode;
|
|
5868
|
+
const oAuthToken = props.session?.oAuthToken;
|
|
5869
|
+
if (!roleCode || roleCode.trim() === "") {
|
|
5870
|
+
return false;
|
|
5871
|
+
}
|
|
5872
|
+
return !validateRoleVisibility(roleCode, oAuthToken);
|
|
5873
|
+
};
|
|
5874
|
+
const isHidden = shouldHideContainer() || shouldHideByRole();
|
|
5796
5875
|
let odataString = void 0;
|
|
5797
5876
|
let endpoint = void 0;
|
|
5798
5877
|
let result = null;
|
|
@@ -6002,10 +6081,21 @@ var PageBodyRenderer = (props) => {
|
|
|
6002
6081
|
if (pageBodyTree && pageBodyTree.root) {
|
|
6003
6082
|
rootNode = pageBodyTree.root;
|
|
6004
6083
|
}
|
|
6084
|
+
const shouldRenderNode = (node) => {
|
|
6085
|
+
{
|
|
6086
|
+
}
|
|
6087
|
+
if (node.type === "div-container" && node.roleCode) {
|
|
6088
|
+
return validateRoleVisibility(node.roleCode, props.session?.oAuthToken);
|
|
6089
|
+
}
|
|
6090
|
+
return true;
|
|
6091
|
+
};
|
|
6005
6092
|
return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react51.default.Fragment, { children: rootNode && rootNode?.children?.map((node, index) => {
|
|
6006
6093
|
{
|
|
6007
6094
|
}
|
|
6008
6095
|
const SelectedNode = NodeTypes[node.type];
|
|
6096
|
+
if (!shouldRenderNode(node)) {
|
|
6097
|
+
return null;
|
|
6098
|
+
}
|
|
6009
6099
|
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
6100
|
SelectedNode,
|
|
6011
6101
|
{
|
package/dist/index.mjs
CHANGED
|
@@ -3960,6 +3960,76 @@ 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.rolecode && typeof decodedPayload.rolecode === "string") {
|
|
3989
|
+
roles.push(decodedPayload.rolecode);
|
|
3990
|
+
}
|
|
3991
|
+
if (decodedPayload.roles && Array.isArray(decodedPayload.roles)) {
|
|
3992
|
+
roles.push(...decodedPayload.roles);
|
|
3993
|
+
}
|
|
3994
|
+
if (decodedPayload.realm_access?.roles && Array.isArray(decodedPayload.realm_access.roles)) {
|
|
3995
|
+
roles.push(...decodedPayload.realm_access.roles);
|
|
3996
|
+
}
|
|
3997
|
+
if (decodedPayload.resource_access && typeof decodedPayload.resource_access === "object") {
|
|
3998
|
+
Object.values(decodedPayload.resource_access).forEach((resource) => {
|
|
3999
|
+
if (resource?.roles && Array.isArray(resource.roles)) {
|
|
4000
|
+
roles.push(...resource.roles);
|
|
4001
|
+
}
|
|
4002
|
+
});
|
|
4003
|
+
}
|
|
4004
|
+
return [...new Set(roles)];
|
|
4005
|
+
};
|
|
4006
|
+
var getUserRoles = (oAuthToken) => {
|
|
4007
|
+
const decodedPayload = decodeJWT(oAuthToken);
|
|
4008
|
+
return extractRolesFromToken(decodedPayload);
|
|
4009
|
+
};
|
|
4010
|
+
var hasRole = (userRoles, requiredRole) => {
|
|
4011
|
+
if (!requiredRole || !userRoles) return false;
|
|
4012
|
+
return userRoles.some(
|
|
4013
|
+
(role) => role.toLowerCase() === requiredRole.toLowerCase()
|
|
4014
|
+
);
|
|
4015
|
+
};
|
|
4016
|
+
var shouldRenderByRole = (roleCode, userRoles) => {
|
|
4017
|
+
if (!roleCode || roleCode.trim() === "") {
|
|
4018
|
+
return true;
|
|
4019
|
+
}
|
|
4020
|
+
const trimmedRoleCode = roleCode.trim();
|
|
4021
|
+
if (trimmedRoleCode.startsWith("!")) {
|
|
4022
|
+
const requiredRole = trimmedRoleCode.substring(1);
|
|
4023
|
+
return !hasRole(userRoles, requiredRole);
|
|
4024
|
+
}
|
|
4025
|
+
return hasRole(userRoles, trimmedRoleCode);
|
|
4026
|
+
};
|
|
4027
|
+
var validateRoleVisibility = (roleCode, oAuthToken) => {
|
|
4028
|
+
const userRoles = getUserRoles(oAuthToken);
|
|
4029
|
+
return shouldRenderByRole(roleCode, userRoles);
|
|
4030
|
+
};
|
|
4031
|
+
|
|
4032
|
+
// src/components/pageRenderingEngine/nodes/DivContainer.tsx
|
|
3963
4033
|
import { jsx as jsx59, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
3964
4034
|
function toCamelCase(str) {
|
|
3965
4035
|
return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
@@ -4186,7 +4256,16 @@ var DivContainer = async (props) => {
|
|
|
4186
4256
|
}
|
|
4187
4257
|
return isNegated ? fieldValue === true : fieldValue === false;
|
|
4188
4258
|
};
|
|
4189
|
-
const
|
|
4259
|
+
const shouldHideByRole = () => {
|
|
4260
|
+
if (!props.node.roleCode) return false;
|
|
4261
|
+
const roleCode = props.node.roleCode;
|
|
4262
|
+
const oAuthToken = props.session?.oAuthToken;
|
|
4263
|
+
if (!roleCode || roleCode.trim() === "") {
|
|
4264
|
+
return false;
|
|
4265
|
+
}
|
|
4266
|
+
return !validateRoleVisibility(roleCode, oAuthToken);
|
|
4267
|
+
};
|
|
4268
|
+
const isHidden = shouldHideContainer() || shouldHideByRole();
|
|
4190
4269
|
let odataString = void 0;
|
|
4191
4270
|
let endpoint = void 0;
|
|
4192
4271
|
let result = null;
|
|
@@ -4396,10 +4475,21 @@ var PageBodyRenderer = (props) => {
|
|
|
4396
4475
|
if (pageBodyTree && pageBodyTree.root) {
|
|
4397
4476
|
rootNode = pageBodyTree.root;
|
|
4398
4477
|
}
|
|
4478
|
+
const shouldRenderNode = (node) => {
|
|
4479
|
+
{
|
|
4480
|
+
}
|
|
4481
|
+
if (node.type === "div-container" && node.roleCode) {
|
|
4482
|
+
return validateRoleVisibility(node.roleCode, props.session?.oAuthToken);
|
|
4483
|
+
}
|
|
4484
|
+
return true;
|
|
4485
|
+
};
|
|
4399
4486
|
return /* @__PURE__ */ jsx60(React42.Fragment, { children: rootNode && rootNode?.children?.map((node, index) => {
|
|
4400
4487
|
{
|
|
4401
4488
|
}
|
|
4402
4489
|
const SelectedNode = NodeTypes[node.type];
|
|
4490
|
+
if (!shouldRenderNode(node)) {
|
|
4491
|
+
return null;
|
|
4492
|
+
}
|
|
4403
4493
|
return /* @__PURE__ */ jsx60(React42.Fragment, { children: SelectedNode && /* @__PURE__ */ jsx60(React42.Fragment, { children: node.type == "layout-container" ? /* @__PURE__ */ jsx60(React42.Fragment, { children: /* @__PURE__ */ jsx60(
|
|
4404
4494
|
SelectedNode,
|
|
4405
4495
|
{
|
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.20260620051742",
|
|
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",
|