feat: Rework org data and UI
This commit is contained in:
parent
e0e6121a5c
commit
57267b79b6
@ -1,4 +1,3 @@
|
||||
PREP(buildPortalPayload);
|
||||
PREP(handleUIEvents);
|
||||
PREP(initOrgClass);
|
||||
PREP(openUI);
|
||||
|
||||
@ -39,7 +39,7 @@ if (isNil QGVAR(OrgClass)) then { call FUNC(initOrgClass); };
|
||||
GVAR(OrgClass) call ["sync", [_orgData, true]];
|
||||
|
||||
if (_control isNotEqualTo controlNull) then {
|
||||
private _json = toJSON (call FUNC(buildPortalPayload));
|
||||
private _json = toJSON (GVAR(OrgClass) call ["buildPortalPayload", []]);
|
||||
_control ctrlWebBrowserAction ["ExecJS", format ["OrgUIBridge.receiveCreateSuccess(%1)", _json]];
|
||||
};
|
||||
}] call CFUNC(addEventHandler);
|
||||
|
||||
@ -1,129 +0,0 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
/*
|
||||
* Author: IDSolutions
|
||||
* Builds the web portal payload from the synced org class.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* Portal payload <HASHMAP>
|
||||
*
|
||||
* Example:
|
||||
* call forge_client_org_fnc_buildPortalPayload;
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
private _orgData = GVAR(OrgClass) get "org";
|
||||
|
||||
private _name = _orgData getOrDefault ["name", "Unknown Organization"];
|
||||
private _id = _orgData getOrDefault ["id", ""];
|
||||
private _ownerUid = _orgData getOrDefault ["owner", ""];
|
||||
private _funds = _orgData getOrDefault ["funds", 0];
|
||||
private _reputation = _orgData getOrDefault ["reputation", 0];
|
||||
private _assetsRaw = _orgData getOrDefault ["assets", createHashMap];
|
||||
private _membersRaw = _orgData getOrDefault ["members", createHashMap];
|
||||
private _fleetRaw = _orgData getOrDefault ["fleet", createHashMap];
|
||||
private _headquarters = _orgData getOrDefault ["headquarters", "ArmA Verse"];
|
||||
private _type = _orgData getOrDefault ["type", "Organization"];
|
||||
private _status = _orgData getOrDefault ["status", "Operational"];
|
||||
private _isDefaultOrg = (_orgData getOrDefault ["default", false])
|
||||
|| {toLower _id isEqualTo "default"}
|
||||
|| {toLower _ownerUid isEqualTo "server"};
|
||||
|
||||
private _playerName = name player;
|
||||
private _playerUid = getPlayerUID player;
|
||||
private _playerVar = vehicleVarName player;
|
||||
private _sessionRole = "Member";
|
||||
private _sessionIsCeo = _isDefaultOrg && {_playerVar isEqualTo "ceo"};
|
||||
private _ownerName = ["", "Server"] select (toLower _ownerUid isEqualTo "server");
|
||||
|
||||
private _membersList = [];
|
||||
{
|
||||
private _memberData = _y;
|
||||
private _memberName = _memberData getOrDefault ["name", "Unknown"];
|
||||
private _memberUid = _memberData getOrDefault ["uid", ""];
|
||||
|
||||
if (_memberUid isEqualTo _ownerUid && {_ownerName isEqualTo ""}) then { _ownerName = _memberName; };
|
||||
if (_memberUid isEqualTo _playerUid) then { _sessionRole = "Member"; };
|
||||
|
||||
_membersList pushBack (createHashMapFromArray [["name", _memberName]]);
|
||||
} forEach _membersRaw;
|
||||
|
||||
if (_ownerName isEqualTo "" && { _ownerUid isEqualTo _playerUid }) then { _ownerName = _playerName; };
|
||||
if (_ownerName isEqualTo "" && { _ownerUid isNotEqualTo "" }) then { _ownerName = "Unknown Owner"; };
|
||||
if (_ownerUid isEqualTo _playerUid) then { _sessionRole = "Leader"; };
|
||||
|
||||
private _assetsList = [];
|
||||
{
|
||||
private _assetData = _y;
|
||||
_assetsList pushBack (createHashMapFromArray [
|
||||
["name", _assetData getOrDefault ["name", "Unknown Asset"]],
|
||||
["type", _assetData getOrDefault ["type", "items"]],
|
||||
["quantity", str (_assetData getOrDefault ["quantity", 0])]
|
||||
]);
|
||||
} forEach _assetsRaw;
|
||||
|
||||
private _fleetList = [];
|
||||
{
|
||||
private _vehicleData = _y;
|
||||
_fleetList pushBack (createHashMapFromArray [
|
||||
["name", _vehicleData getOrDefault ["name", "Unknown Vehicle"]],
|
||||
["type", _vehicleData getOrDefault ["type", "other"]],
|
||||
["status", _vehicleData getOrDefault ["status", "Unknown"]],
|
||||
["damage", _vehicleData getOrDefault ["damage", "0%"]]
|
||||
]);
|
||||
} forEach _fleetRaw;
|
||||
|
||||
private _roadmap = [
|
||||
createHashMapFromArray [
|
||||
["name", "Contracts Board"],
|
||||
["status", "Planned"],
|
||||
["detail", "Track payouts, assignments, and claim approvals."]
|
||||
],
|
||||
createHashMapFromArray [
|
||||
["name", "Diplomacy"],
|
||||
["status", "Future Review"],
|
||||
["detail", "Possible future module pending a full design and scope review."]
|
||||
],
|
||||
createHashMapFromArray [
|
||||
["name", "Logistics Queue"],
|
||||
["status", "Future Review"],
|
||||
["detail", "Possible future module pending a full design and scope review."]
|
||||
],
|
||||
createHashMapFromArray [
|
||||
["name", "Permissions"],
|
||||
["status", "Future Review"],
|
||||
["detail", "Possible future module pending a full design and scope review."]
|
||||
]
|
||||
];
|
||||
|
||||
createHashMapFromArray [
|
||||
["session", createHashMapFromArray [
|
||||
["actorName", _playerName],
|
||||
["actorUid", _playerUid],
|
||||
["role", _sessionRole],
|
||||
["ceo", _sessionIsCeo]
|
||||
]],
|
||||
["portalData", createHashMapFromArray [
|
||||
["org", createHashMapFromArray [
|
||||
["name", _name],
|
||||
["tag", _id],
|
||||
["type", _type],
|
||||
["status", _status],
|
||||
["headquarters", _headquarters],
|
||||
["owner", _ownerName],
|
||||
["ownerUid", _ownerUid],
|
||||
["isDefault", _isDefaultOrg]
|
||||
]],
|
||||
["funds", _funds],
|
||||
["reputation", _reputation],
|
||||
["members", _membersList],
|
||||
["fleet", _fleetList],
|
||||
["assets", _assetsList],
|
||||
["activity", []],
|
||||
["roadmap", _roadmap]
|
||||
]]
|
||||
]
|
||||
@ -45,7 +45,7 @@ switch (_event) do {
|
||||
]] call _fnc_execBridge;
|
||||
};
|
||||
|
||||
private _payload = call FUNC(buildPortalPayload);
|
||||
private _payload = GVAR(OrgClass) call ["buildPortalPayload", []];
|
||||
[_control, "receiveLoginSuccess", _payload] call _fnc_execBridge;
|
||||
};
|
||||
case "org::create::request": {
|
||||
|
||||
@ -36,6 +36,7 @@ GVAR(OrgBaseClass) = compileFinal createHashMapFromArray [
|
||||
_org set ["funds", 0];
|
||||
_org set ["reputation", 0];
|
||||
_org set ["assets", createHashMap];
|
||||
_org set ["fleet", createHashMap];
|
||||
_org set ["members", createHashMap];
|
||||
|
||||
_self set ["org", _org];
|
||||
@ -69,6 +70,89 @@ GVAR(OrgBaseClass) = compileFinal createHashMapFromArray [
|
||||
if !(_isLoaded) then { _self set ["isLoaded", true]; };
|
||||
diag_log "[FORGE:Client:Org] Sync completed";
|
||||
}],
|
||||
["buildPortalPayload", compileFinal {
|
||||
private _orgData = _self get "org";
|
||||
|
||||
private _name = _orgData get "name";
|
||||
private _id = _orgData get "id";
|
||||
private _ownerUid = _orgData get "owner";
|
||||
private _funds = _orgData get "funds";
|
||||
private _reputation = _orgData get "reputation";
|
||||
private _assetsRaw = _orgData get "assets";
|
||||
private _fleetRaw = _orgData get "fleet";
|
||||
private _membersRaw = _orgData get "members";
|
||||
private _isDefaultOrg = (_orgData getOrDefault ["default", false])
|
||||
|| {toLower _id isEqualTo "default"}
|
||||
|| {toLower _ownerUid isEqualTo "server"};
|
||||
|
||||
private _playerName = name player;
|
||||
private _playerUid = getPlayerUID player;
|
||||
private _playerVar = vehicleVarName player;
|
||||
private _sessionRole = "Member";
|
||||
private _sessionIsCeo = _isDefaultOrg && {_playerVar isEqualTo "ceo"};
|
||||
private _ownerName = ["", "Server"] select (toLower _ownerUid isEqualTo "server");
|
||||
|
||||
private _membersList = [];
|
||||
{
|
||||
private _memberData = _y;
|
||||
private _memberName = _memberData getOrDefault ["name", "Unknown"];
|
||||
private _memberUid = _memberData getOrDefault ["uid", ""];
|
||||
|
||||
if (_memberUid isEqualTo _ownerUid && {_ownerName isEqualTo ""}) then { _ownerName = _memberName; };
|
||||
if (_memberUid isEqualTo _playerUid) then { _sessionRole = "Member"; };
|
||||
|
||||
_membersList pushBack (createHashMapFromArray [["name", _memberName]]);
|
||||
} forEach _membersRaw;
|
||||
|
||||
if (_ownerName isEqualTo "" && { _ownerUid isEqualTo _playerUid }) then { _ownerName = _playerName; };
|
||||
if (_ownerName isEqualTo "" && { _ownerUid isNotEqualTo "" }) then { _ownerName = "Unknown Owner"; };
|
||||
if (_ownerUid isEqualTo _playerUid) then { _sessionRole = "Leader"; };
|
||||
|
||||
private _assetsList = [];
|
||||
{
|
||||
private _assetData = _y;
|
||||
_assetsList pushBack (createHashMapFromArray [
|
||||
["name", _assetData getOrDefault ["name", "Unknown Asset"]],
|
||||
["type", _assetData getOrDefault ["type", "items"]],
|
||||
["quantity", str (_assetData getOrDefault ["quantity", 0])]
|
||||
]);
|
||||
} forEach _assetsRaw;
|
||||
|
||||
private _fleetList = [];
|
||||
{
|
||||
private _vehicleData = _y;
|
||||
_fleetList pushBack (createHashMapFromArray [
|
||||
["name", _vehicleData getOrDefault ["name", "Unknown Vehicle"]],
|
||||
["type", _vehicleData getOrDefault ["type", "other"]],
|
||||
["status", _vehicleData getOrDefault ["status", "Unknown"]],
|
||||
["damage", _vehicleData getOrDefault ["damage", "0%"]]
|
||||
]);
|
||||
} forEach _fleetRaw;
|
||||
|
||||
createHashMapFromArray [
|
||||
["session", createHashMapFromArray [
|
||||
["actorName", _playerName],
|
||||
["actorUid", _playerUid],
|
||||
["role", _sessionRole],
|
||||
["ceo", _sessionIsCeo]
|
||||
]],
|
||||
["portalData", createHashMapFromArray [
|
||||
["org", createHashMapFromArray [
|
||||
["name", _name],
|
||||
["tag", _id],
|
||||
["owner", _ownerName],
|
||||
["ownerUid", _ownerUid],
|
||||
["isDefault", _isDefaultOrg]
|
||||
]],
|
||||
["funds", _funds],
|
||||
["reputation", _reputation],
|
||||
["members", _membersList],
|
||||
["fleet", _fleetList],
|
||||
["assets", _assetsList],
|
||||
["activity", []]
|
||||
]]
|
||||
]
|
||||
}],
|
||||
["get", compileFinal {
|
||||
params [["_key", "", [""]], ["_default", nil, [[], "", 0, false, createHashMap]]];
|
||||
|
||||
|
||||
@ -1,8 +1,13 @@
|
||||
(function () {
|
||||
const OrgPortal = (window.OrgPortal = window.OrgPortal || {});
|
||||
const { h, ensureScopedStyle } = OrgPortal.runtime;
|
||||
const { portalData } = OrgPortal.data;
|
||||
const scopeAttr = "data-ui-future-card";
|
||||
const ROADMAP = [
|
||||
{ name: "Contracts Board", status: "Planned", detail: "Track payouts, assignments, and claim approvals." },
|
||||
{ name: "Diplomacy", status: "Future Review", detail: "Possible future module pending a full design and scope review." },
|
||||
{ name: "Logistics Queue", status: "Future Review", detail: "Possible future module pending a full design and scope review." },
|
||||
{ name: "Permissions", status: "Future Review", detail: "Possible future module pending a full design and scope review." },
|
||||
];
|
||||
const scopeSelector = `[${scopeAttr}]`;
|
||||
const futureCardCss = `
|
||||
${scopeSelector} .org-roadmap-grid {
|
||||
@ -90,7 +95,7 @@ ${scopeSelector} .org-roadmap-card:nth-child(4n + 3) .org-list-tag {
|
||||
body: h(
|
||||
"div",
|
||||
{ className: "org-roadmap-grid" },
|
||||
...portalData.roadmap.map((item) =>
|
||||
...ROADMAP.map((item) =>
|
||||
h(
|
||||
"article",
|
||||
{ className: "org-roadmap-card" },
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
(function () {
|
||||
const OrgPortal = (window.OrgPortal = window.OrgPortal || {});
|
||||
const staticOrgProfile = {
|
||||
type: "Organization",
|
||||
status: "Operational",
|
||||
headquarters: "ArmA Verse",
|
||||
};
|
||||
|
||||
function cloneValue(value) {
|
||||
return JSON.parse(JSON.stringify(value));
|
||||
@ -16,16 +21,16 @@
|
||||
|
||||
OrgPortal.data = {
|
||||
portalData: {
|
||||
org: {
|
||||
name: "",
|
||||
tag: "",
|
||||
type: "Organization",
|
||||
status: "Operational",
|
||||
headquarters: "ArmA Verse",
|
||||
owner: "",
|
||||
ownerUid: "",
|
||||
isDefault: false,
|
||||
},
|
||||
org: Object.assign(
|
||||
{
|
||||
name: "",
|
||||
tag: "",
|
||||
owner: "",
|
||||
ownerUid: "",
|
||||
isDefault: false,
|
||||
},
|
||||
staticOrgProfile,
|
||||
),
|
||||
funds: 0,
|
||||
reputation: 0,
|
||||
members: [],
|
||||
@ -62,7 +67,14 @@
|
||||
ceo: false,
|
||||
},
|
||||
applyLoginPayload(payload) {
|
||||
replaceObject(this.portalData.org, payload.portalData.org || {});
|
||||
replaceObject(
|
||||
this.portalData.org,
|
||||
Object.assign(
|
||||
{},
|
||||
payload.portalData.org || {},
|
||||
staticOrgProfile,
|
||||
),
|
||||
);
|
||||
this.portalData.funds = payload.portalData.funds || 0;
|
||||
this.portalData.reputation = payload.portalData.reputation || 0;
|
||||
|
||||
|
||||
@ -32,6 +32,9 @@ GVAR(OrgModel) = compileFinal createHashMapObject [[
|
||||
_org set ["name", ""];
|
||||
_org set ["funds", 0];
|
||||
_org set ["reputation", 0];
|
||||
_org set ["assets", createHashMap];
|
||||
_org set ["fleet", createHashMap];
|
||||
_org set ["members", createHashMap];
|
||||
|
||||
_org
|
||||
}],
|
||||
@ -88,6 +91,8 @@ GVAR(OrgBaseStore) = compileFinal createHashMapFromArray [
|
||||
["name", "Forge Dynamics"],
|
||||
["funds", 200000],
|
||||
["reputation", 0],
|
||||
["assets", createHashMap],
|
||||
["fleet", createHashMap],
|
||||
["members", createHashMap]
|
||||
];
|
||||
GVAR(Registry) set ["default", _defaultOrg];
|
||||
@ -181,6 +186,8 @@ GVAR(OrgBaseStore) = compileFinal createHashMapFromArray [
|
||||
["name", _orgName],
|
||||
["funds", 0],
|
||||
["reputation", 0],
|
||||
["assets", createHashMap],
|
||||
["fleet", createHashMap],
|
||||
["members", createHashMap]
|
||||
];
|
||||
|
||||
@ -251,8 +258,9 @@ GVAR(OrgBaseStore) = compileFinal createHashMapFromArray [
|
||||
};
|
||||
|
||||
private _finalOrg = createHashMap;
|
||||
private _finalAssets = createHashMap;
|
||||
private _finalFleet = createHashMap;
|
||||
private _finalMembers = createHashMap;
|
||||
// private _finalAssets = createHashMap;
|
||||
|
||||
if (_result == "true") then {
|
||||
_finalOrg = _self call ["fetch", ["org:get", _orgID]];
|
||||
@ -266,8 +274,9 @@ GVAR(OrgBaseStore) = compileFinal createHashMapFromArray [
|
||||
private _entry = createHashMapFromArray [["orgID", _orgID]];
|
||||
GVAR(IndexRegistry) set [_uid, _entry];
|
||||
|
||||
private _members = _self call ["fetch", ["org:members:get", _orgID]];
|
||||
// private _assets = _self call ["fetch", ["org:assets:get", _orgID]];
|
||||
// private _fleet = _self call ["fetch", ["org:fleet:get", _orgID]];
|
||||
private _members = _self call ["fetch", ["org:members:get", _orgID]];
|
||||
|
||||
{
|
||||
private _key = _x get "uid";
|
||||
@ -281,8 +290,9 @@ GVAR(OrgBaseStore) = compileFinal createHashMapFromArray [
|
||||
// _finalAssets set [_key, _value];
|
||||
// } forEach _assets;
|
||||
|
||||
_finalOrg set ["assets", _finalAssets];
|
||||
_finalOrg set ["fleet", _finalFleet];
|
||||
_finalOrg set ["members", _finalMembers];
|
||||
// _finalOrg set ["assets", _finalAssets];
|
||||
|
||||
private _finalOwner = _finalOrg getOrDefault ["owner", ""];
|
||||
if (_orgID isEqualTo "default" || { _finalOwner isEqualTo _uid }) then {
|
||||
|
||||
@ -1,8 +1,13 @@
|
||||
(function () {
|
||||
const OrgPortal = (window.OrgPortal = window.OrgPortal || {});
|
||||
const { h, ensureScopedStyle } = OrgPortal.runtime;
|
||||
const { portalData } = OrgPortal.data;
|
||||
const scopeAttr = "data-ui-future-card";
|
||||
const ROADMAP = [
|
||||
{ name: "Contracts Board", status: "Planned", detail: "Track payouts, assignments, and claim approvals." },
|
||||
{ name: "Diplomacy", status: "Future Review", detail: "Possible future module pending a full design and scope review." },
|
||||
{ name: "Logistics Queue", status: "Future Review", detail: "Possible future module pending a full design and scope review." },
|
||||
{ name: "Permissions", status: "Future Review", detail: "Possible future module pending a full design and scope review." },
|
||||
];
|
||||
const scopeSelector = `[${scopeAttr}]`;
|
||||
const futureCardCss = `
|
||||
${scopeSelector} .org-roadmap-grid {
|
||||
@ -90,7 +95,7 @@ ${scopeSelector} .org-roadmap-card:nth-child(4n + 3) .org-list-tag {
|
||||
body: h(
|
||||
"div",
|
||||
{ className: "org-roadmap-grid" },
|
||||
...portalData.roadmap.map((item) =>
|
||||
...ROADMAP.map((item) =>
|
||||
h(
|
||||
"article",
|
||||
{ className: "org-roadmap-card" },
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
(function () {
|
||||
const OrgPortal = (window.OrgPortal = window.OrgPortal || {});
|
||||
const staticOrgProfile = {
|
||||
type: "Organization",
|
||||
status: "Operational",
|
||||
headquarters: "ArmA Verse",
|
||||
};
|
||||
|
||||
function cloneValue(value) {
|
||||
return JSON.parse(JSON.stringify(value));
|
||||
@ -16,16 +21,16 @@
|
||||
|
||||
OrgPortal.data = {
|
||||
portalData: {
|
||||
org: {
|
||||
name: "Black Rifle Company",
|
||||
tag: "BRC-0160566824",
|
||||
type: "Private Military Company",
|
||||
status: "Operational",
|
||||
headquarters: "Georgetown Command Annex",
|
||||
owner: "Jacob Schmidt",
|
||||
ownerUid: "uid-jacob-schmidt",
|
||||
isDefault: false,
|
||||
},
|
||||
org: Object.assign(
|
||||
{
|
||||
name: "Black Rifle Company",
|
||||
tag: "BRC-0160566824",
|
||||
owner: "Jacob Schmidt",
|
||||
ownerUid: "uid-jacob-schmidt",
|
||||
isDefault: false,
|
||||
},
|
||||
staticOrgProfile,
|
||||
),
|
||||
funds: 482750,
|
||||
reputation: 72,
|
||||
members: [
|
||||
@ -132,7 +137,14 @@
|
||||
ceo: false,
|
||||
},
|
||||
applyLoginPayload(payload) {
|
||||
replaceObject(this.portalData.org, payload.portalData.org || {});
|
||||
replaceObject(
|
||||
this.portalData.org,
|
||||
Object.assign(
|
||||
{},
|
||||
payload.portalData.org || {},
|
||||
staticOrgProfile,
|
||||
),
|
||||
);
|
||||
this.portalData.funds = payload.portalData.funds || 0;
|
||||
this.portalData.reputation = payload.portalData.reputation || 0;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user