jupiter-dynamic-forms 1.14.3 → 1.14.5
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/core/add-column-dialog.d.ts.map +1 -1
- package/dist/core/dynamic-form.d.ts +30 -0
- package/dist/core/dynamic-form.d.ts.map +1 -1
- package/dist/index.js +152 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +406 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1537,7 +1537,15 @@ const filter$1 = {
|
|
|
1537
1537
|
uri: "URI",
|
|
1538
1538
|
dimensionMemberSelection: "Dimension Member Selection",
|
|
1539
1539
|
selectAllMembers: "Select All",
|
|
1540
|
-
clearMembers: "Clear"
|
|
1540
|
+
clearMembers: "Clear",
|
|
1541
|
+
availableRoles: "Available Roles",
|
|
1542
|
+
chosenRoles: "Chosen Roles",
|
|
1543
|
+
roleCount: "role(s)",
|
|
1544
|
+
rolesSelected: "role(s) selected",
|
|
1545
|
+
addSelectedRole: "Add selected role",
|
|
1546
|
+
addAllRoles: "Add all roles",
|
|
1547
|
+
removeSelectedRole: "Remove selected role",
|
|
1548
|
+
removeAllRoles: "Remove all roles"
|
|
1541
1549
|
};
|
|
1542
1550
|
const column$1 = {
|
|
1543
1551
|
addColumn: "Add Column",
|
|
@@ -1653,7 +1661,15 @@ const filter = {
|
|
|
1653
1661
|
uri: "URI",
|
|
1654
1662
|
dimensionMemberSelection: "Dimensieleden selectie",
|
|
1655
1663
|
selectAllMembers: "Alles selecteren",
|
|
1656
|
-
clearMembers: "Wissen"
|
|
1664
|
+
clearMembers: "Wissen",
|
|
1665
|
+
availableRoles: "Beschikbare rollen",
|
|
1666
|
+
chosenRoles: "Gekozen rollen",
|
|
1667
|
+
roleCount: "rol(len)",
|
|
1668
|
+
rolesSelected: "rol(len) geselecteerd",
|
|
1669
|
+
addSelectedRole: "Geselecteerde rol toevoegen",
|
|
1670
|
+
addAllRoles: "Alle rollen toevoegen",
|
|
1671
|
+
removeSelectedRole: "Geselecteerde rol verwijderen",
|
|
1672
|
+
removeAllRoles: "Alle rollen verwijderen"
|
|
1657
1673
|
};
|
|
1658
1674
|
const column = {
|
|
1659
1675
|
addColumn: "Kolom toevoegen",
|
|
@@ -1936,6 +1952,8 @@ class DraftStorageService {
|
|
|
1936
1952
|
columnId: column2.id,
|
|
1937
1953
|
label: column2.title,
|
|
1938
1954
|
// FormColumn uses 'title' not 'label'
|
|
1955
|
+
description: column2.description,
|
|
1956
|
+
// Save description (period display)
|
|
1939
1957
|
periodType: this._inferPeriodTypeFromColumn(column2),
|
|
1940
1958
|
date: column2.periodStartDate,
|
|
1941
1959
|
// Use periodStartDate for instant
|
|
@@ -3905,7 +3923,7 @@ let JupiterAddColumnDialog = class extends LitElement {
|
|
|
3905
3923
|
}
|
|
3906
3924
|
_autoSelectSingleMemberDimensions() {
|
|
3907
3925
|
this.availableDimensions.forEach((dimension) => {
|
|
3908
|
-
if (dimension.members && dimension.members.length
|
|
3926
|
+
if (dimension.members && dimension.members.length > 0) {
|
|
3909
3927
|
const member = dimension.members[0];
|
|
3910
3928
|
const selection = {
|
|
3911
3929
|
axisId: dimension.id,
|
|
@@ -3915,6 +3933,7 @@ let JupiterAddColumnDialog = class extends LitElement {
|
|
|
3915
3933
|
isTyped: false
|
|
3916
3934
|
};
|
|
3917
3935
|
this._selectedDimensions.set(dimension.id, selection);
|
|
3936
|
+
console.log(`🎯 Auto-selected default member: ${dimension.axisLabel} -> ${member.label}`);
|
|
3918
3937
|
} else if (dimension.typedMember && (!dimension.members || dimension.members.length === 0)) {
|
|
3919
3938
|
const selection = {
|
|
3920
3939
|
axisId: dimension.id,
|
|
@@ -3923,6 +3942,7 @@ let JupiterAddColumnDialog = class extends LitElement {
|
|
|
3923
3942
|
// Note: typedValue will be entered in column header, not here
|
|
3924
3943
|
};
|
|
3925
3944
|
this._selectedDimensions.set(dimension.id, selection);
|
|
3945
|
+
console.log(`🎯 Auto-selected typed dimension: ${dimension.axisLabel} (value will be entered in column header)`);
|
|
3926
3946
|
}
|
|
3927
3947
|
});
|
|
3928
3948
|
}
|
|
@@ -5696,7 +5716,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
|
|
|
5696
5716
|
<!-- Available Roles Panel -->
|
|
5697
5717
|
<div class="picklist-panel">
|
|
5698
5718
|
<div class="picklist-header">
|
|
5699
|
-
|
|
5719
|
+
${I18n.t("filter.availableRoles")} (${this._getAvailableRoles().length})
|
|
5700
5720
|
</div>
|
|
5701
5721
|
<div class="picklist-search">
|
|
5702
5722
|
<div class="search-container">
|
|
@@ -5739,7 +5759,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
|
|
|
5739
5759
|
})}
|
|
5740
5760
|
</div>
|
|
5741
5761
|
<div class="picklist-count">
|
|
5742
|
-
${this._getAvailableRoles().length}
|
|
5762
|
+
${this._getAvailableRoles().length} ${I18n.t("filter.roleCount")}
|
|
5743
5763
|
</div>
|
|
5744
5764
|
</div>
|
|
5745
5765
|
|
|
@@ -5749,7 +5769,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
|
|
|
5749
5769
|
class="picklist-button"
|
|
5750
5770
|
@click="${this._moveToChosen}"
|
|
5751
5771
|
?disabled="${!this._selectedAvailableRole}"
|
|
5752
|
-
title="
|
|
5772
|
+
title="${I18n.t("filter.addSelectedRole")}"
|
|
5753
5773
|
>
|
|
5754
5774
|
›
|
|
5755
5775
|
</button>
|
|
@@ -5757,7 +5777,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
|
|
|
5757
5777
|
class="picklist-button"
|
|
5758
5778
|
@click="${this._moveAllToChosen}"
|
|
5759
5779
|
?disabled="${this._getAvailableRoles().length === 0}"
|
|
5760
|
-
title="
|
|
5780
|
+
title="${I18n.t("filter.addAllRoles")}"
|
|
5761
5781
|
>
|
|
5762
5782
|
»
|
|
5763
5783
|
</button>
|
|
@@ -5765,7 +5785,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
|
|
|
5765
5785
|
class="picklist-button"
|
|
5766
5786
|
@click="${this._moveToAvailable}"
|
|
5767
5787
|
?disabled="${!this._selectedChosenRole}"
|
|
5768
|
-
title="
|
|
5788
|
+
title="${I18n.t("filter.removeSelectedRole")}"
|
|
5769
5789
|
>
|
|
5770
5790
|
‹
|
|
5771
5791
|
</button>
|
|
@@ -5773,7 +5793,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
|
|
|
5773
5793
|
class="picklist-button"
|
|
5774
5794
|
@click="${this._moveAllToAvailable}"
|
|
5775
5795
|
?disabled="${this._tempSelectedRoles.size === 0}"
|
|
5776
|
-
title="
|
|
5796
|
+
title="${I18n.t("filter.removeAllRoles")}"
|
|
5777
5797
|
>
|
|
5778
5798
|
«
|
|
5779
5799
|
</button>
|
|
@@ -5782,7 +5802,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
|
|
|
5782
5802
|
<!-- Chosen Roles Panel -->
|
|
5783
5803
|
<div class="picklist-panel">
|
|
5784
5804
|
<div class="picklist-header">
|
|
5785
|
-
|
|
5805
|
+
${I18n.t("filter.chosenRoles")} (${this._tempSelectedRoles.size})
|
|
5786
5806
|
</div>
|
|
5787
5807
|
<div class="picklist-search">
|
|
5788
5808
|
<div class="search-container">
|
|
@@ -5831,7 +5851,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
|
|
|
5831
5851
|
})}
|
|
5832
5852
|
</div>
|
|
5833
5853
|
<div class="picklist-count">
|
|
5834
|
-
${this._tempSelectedRoles.size}
|
|
5854
|
+
${this._tempSelectedRoles.size} ${I18n.t("filter.rolesSelected")}
|
|
5835
5855
|
</div>
|
|
5836
5856
|
</div>
|
|
5837
5857
|
</div>
|
|
@@ -6754,6 +6774,20 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
6754
6774
|
);
|
|
6755
6775
|
console.log("✅ Generated schema with sections:", this._currentSchema.sections.length);
|
|
6756
6776
|
this._allSections = [...this._currentSchema.sections];
|
|
6777
|
+
if (Array.isArray(this._selectedRoleIds) && this._selectedRoleIds.length > 0 && typeof this._selectedRoleIds[0] === "object") {
|
|
6778
|
+
console.log("🔄 Applying custom role order to _allSections from _selectedRoleIds");
|
|
6779
|
+
const enhancedRoles = this._selectedRoleIds;
|
|
6780
|
+
const orderMap = /* @__PURE__ */ new Map();
|
|
6781
|
+
enhancedRoles.forEach((role) => {
|
|
6782
|
+
orderMap.set(role.roleId, role.order);
|
|
6783
|
+
});
|
|
6784
|
+
this._allSections = [...this._allSections].sort((a2, b2) => {
|
|
6785
|
+
const orderA = orderMap.get(a2.id) ?? 999;
|
|
6786
|
+
const orderB = orderMap.get(b2.id) ?? 999;
|
|
6787
|
+
return orderA - orderB;
|
|
6788
|
+
});
|
|
6789
|
+
console.log("✅ Custom order applied to _allSections:", this._allSections.map((s2) => s2.title));
|
|
6790
|
+
}
|
|
6757
6791
|
if (this.financialStatementsTypeAxis && this.financialStatementsTypeAxis.length > 0) {
|
|
6758
6792
|
console.log("🔍 Applying financialStatementsTypeAxis filter:", this.financialStatementsTypeAxis);
|
|
6759
6793
|
console.log("📊 Sections before filter:", this._allSections.length);
|
|
@@ -7545,9 +7579,9 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7545
7579
|
dimensionKeys.push(`${dimSelection.axisId}|${dimSelection.memberId}`);
|
|
7546
7580
|
}
|
|
7547
7581
|
}
|
|
7548
|
-
const periodPart = request.periodType === "instant" ? `(${request.instantDate})` : `(${this._formatPeriodDisplay(request.startDate, request.endDate)})`;
|
|
7549
7582
|
if (dimensionParts.length > 0) {
|
|
7550
|
-
title =
|
|
7583
|
+
title = dimensionParts.join(" | ");
|
|
7584
|
+
description = request.periodType === "instant" ? request.instantDate || "" : this._formatPeriodDisplay(request.startDate, request.endDate);
|
|
7551
7585
|
dimensionData = {
|
|
7552
7586
|
dimensionId: newColumnId,
|
|
7553
7587
|
memberValue: dimensionParts.join(" | "),
|
|
@@ -7569,8 +7603,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7569
7603
|
const axisLabel = ((_d = dimension.labels.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _d.label) || dimension.conceptName;
|
|
7570
7604
|
const firstMember = dimension.members[0];
|
|
7571
7605
|
const memberLabel = ((_e = firstMember.labels.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _e.label) || firstMember.conceptName;
|
|
7572
|
-
|
|
7573
|
-
|
|
7606
|
+
title = memberLabel;
|
|
7607
|
+
description = request.periodType === "instant" ? request.instantDate || "" : this._formatPeriodDisplay(request.startDate, request.endDate);
|
|
7574
7608
|
dimensionData = {
|
|
7575
7609
|
dimensionId: newColumnId,
|
|
7576
7610
|
axisId: dimension.id,
|
|
@@ -8182,6 +8216,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8182
8216
|
const column2 = {
|
|
8183
8217
|
id: col.columnId,
|
|
8184
8218
|
title: col.label,
|
|
8219
|
+
description: col.description,
|
|
8220
|
+
// Restore description (period display)
|
|
8185
8221
|
type: col.dimensionData ? "dimension" : "base",
|
|
8186
8222
|
periodStartDate: col.startDate || col.date,
|
|
8187
8223
|
periodEndDate: col.endDate || col.date,
|
|
@@ -8191,7 +8227,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8191
8227
|
periodType: col.periodType
|
|
8192
8228
|
// CRITICAL: Preserve explicit period type
|
|
8193
8229
|
};
|
|
8194
|
-
console.log(`📅 [Draft Restore] Restoring column ${col.columnId}: startDate=${column2.periodStartDate}, endDate=${column2.periodEndDate}, periodType=${column2.periodType}`);
|
|
8230
|
+
console.log(`📅 [Draft Restore] Restoring column ${col.columnId}: title=${column2.title}, description=${column2.description}, startDate=${column2.periodStartDate}, endDate=${column2.periodEndDate}, periodType=${column2.periodType}`);
|
|
8195
8231
|
return column2;
|
|
8196
8232
|
});
|
|
8197
8233
|
if (((_a = this.xbrlInput) == null ? void 0 : _a.datatypes) && !section2.datatypes) {
|
|
@@ -8253,6 +8289,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8253
8289
|
const newColumn = {
|
|
8254
8290
|
id: col.columnId,
|
|
8255
8291
|
title: col.label,
|
|
8292
|
+
description: col.description,
|
|
8293
|
+
// Restore description (period display)
|
|
8256
8294
|
type: col.dimensionData ? "dimension" : "base",
|
|
8257
8295
|
periodStartDate: col.startDate || col.date,
|
|
8258
8296
|
periodEndDate: col.endDate || col.date,
|
|
@@ -8262,7 +8300,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8262
8300
|
periodType: col.periodType
|
|
8263
8301
|
// CRITICAL: Preserve explicit period type
|
|
8264
8302
|
};
|
|
8265
|
-
console.log(`📅 [New Column Created] Column ${newColumn.id}: periodStartDate=${newColumn.periodStartDate}, periodEndDate=${newColumn.periodEndDate}, periodType=${newColumn.periodType}`);
|
|
8303
|
+
console.log(`📅 [New Column Created] Column ${newColumn.id}: title=${newColumn.title}, description=${newColumn.description}, periodStartDate=${newColumn.periodStartDate}, periodEndDate=${newColumn.periodEndDate}, periodType=${newColumn.periodType}`);
|
|
8266
8304
|
section2.columns.push(newColumn);
|
|
8267
8305
|
console.log(` └─ Added custom column ${col.columnId} to section ${section2.id}`);
|
|
8268
8306
|
}
|
|
@@ -8803,7 +8841,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8803
8841
|
});
|
|
8804
8842
|
}
|
|
8805
8843
|
_renderAdminModeContent(section2) {
|
|
8806
|
-
var _a;
|
|
8844
|
+
var _a, _b;
|
|
8807
8845
|
if (!section2) {
|
|
8808
8846
|
return html`
|
|
8809
8847
|
<div class="admin-mode-container">
|
|
@@ -8812,6 +8850,34 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8812
8850
|
`;
|
|
8813
8851
|
}
|
|
8814
8852
|
const showPreviousYearChecked = ((_a = this._periodPreferences[section2.id]) == null ? void 0 : _a.showPreviousYear) ?? section2.showPreviousYear ?? false;
|
|
8853
|
+
const dimensions = this._getDimensionsForRole(section2.id);
|
|
8854
|
+
const hasDimensions = dimensions.length > 0;
|
|
8855
|
+
if (hasDimensions && !((_b = this._periodPreferences[section2.id]) == null ? void 0 : _b.dimensionSelections)) {
|
|
8856
|
+
const currentPref = this._periodPreferences[section2.id] || {
|
|
8857
|
+
showDuration: true,
|
|
8858
|
+
showInstant: true,
|
|
8859
|
+
showPreviousYear: false
|
|
8860
|
+
};
|
|
8861
|
+
currentPref.dimensionSelections = [];
|
|
8862
|
+
dimensions.forEach((dimension) => {
|
|
8863
|
+
var _a2, _b2;
|
|
8864
|
+
const allMembers = this._getAllDimensionMembers(dimension.members);
|
|
8865
|
+
const allMemberIds = allMembers.map((m) => m.id);
|
|
8866
|
+
const dimensionLabel = ((_b2 = (_a2 = dimension.labels) == null ? void 0 : _a2.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b2.label) || dimension.conceptName;
|
|
8867
|
+
if (currentPref.dimensionSelections) {
|
|
8868
|
+
currentPref.dimensionSelections.push({
|
|
8869
|
+
dimensionId: dimension.id,
|
|
8870
|
+
dimensionLabel,
|
|
8871
|
+
selectedMemberIds: allMemberIds
|
|
8872
|
+
});
|
|
8873
|
+
}
|
|
8874
|
+
});
|
|
8875
|
+
this._periodPreferences = {
|
|
8876
|
+
...this._periodPreferences,
|
|
8877
|
+
[section2.id]: currentPref
|
|
8878
|
+
};
|
|
8879
|
+
console.log("✅ [Admin Mode] Initialized all dimension members as selected by default for role:", section2.id);
|
|
8880
|
+
}
|
|
8815
8881
|
return html`
|
|
8816
8882
|
<div class="admin-mode-container">
|
|
8817
8883
|
<h2 class="admin-mode-title">Role Configuration: ${section2.title}</h2>
|
|
@@ -8827,6 +8893,58 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8827
8893
|
<label for="admin-prev-year-${section2.id}">Show Previous Year Column</label>
|
|
8828
8894
|
</div>
|
|
8829
8895
|
</div>
|
|
8896
|
+
|
|
8897
|
+
${hasDimensions ? html`
|
|
8898
|
+
<div class="admin-dimension-section">
|
|
8899
|
+
<div class="admin-dimension-header">📊 ${I18n.t("filter.dimensionMemberSelection")}</div>
|
|
8900
|
+
${dimensions.map((dimension) => {
|
|
8901
|
+
var _a2, _b2;
|
|
8902
|
+
const allMembers = this._getAllDimensionMembers(dimension.members);
|
|
8903
|
+
const dimensionLabel = ((_b2 = (_a2 = dimension.labels) == null ? void 0 : _a2.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b2.label) || dimension.conceptName;
|
|
8904
|
+
const isSingleMember = this._isSingleMemberDimension(dimension);
|
|
8905
|
+
return html`
|
|
8906
|
+
<div class="admin-dimension-group">
|
|
8907
|
+
<div class="admin-dimension-label">${dimensionLabel}${isSingleMember ? " (Mandatory)" : ""}</div>
|
|
8908
|
+
<div class="admin-dimension-members">
|
|
8909
|
+
${allMembers.map((member) => {
|
|
8910
|
+
var _a3, _b3;
|
|
8911
|
+
const memberLabel = ((_b3 = (_a3 = member.labels) == null ? void 0 : _a3.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b3.label) || member.conceptName;
|
|
8912
|
+
const isChecked = this._isAdminDimensionMemberSelected(section2.id, dimension.id, member.id);
|
|
8913
|
+
return html`
|
|
8914
|
+
<label class="admin-member-checkbox-item">
|
|
8915
|
+
<input
|
|
8916
|
+
type="checkbox"
|
|
8917
|
+
class="admin-member-checkbox"
|
|
8918
|
+
.checked="${isChecked}"
|
|
8919
|
+
?disabled="${isSingleMember}"
|
|
8920
|
+
@change="${(e2) => this._handleAdminDimensionMemberChange(e2, section2.id, dimension.id, member.id)}"
|
|
8921
|
+
/>
|
|
8922
|
+
<span class="admin-member-checkbox-label">${memberLabel}</span>
|
|
8923
|
+
</label>
|
|
8924
|
+
`;
|
|
8925
|
+
})}
|
|
8926
|
+
</div>
|
|
8927
|
+
${!isSingleMember ? html`
|
|
8928
|
+
<div class="admin-member-select-controls">
|
|
8929
|
+
<button
|
|
8930
|
+
class="admin-member-select-btn"
|
|
8931
|
+
@click="${() => this._selectAllAdminDimensionMembers(section2.id, dimension.id)}"
|
|
8932
|
+
>
|
|
8933
|
+
${I18n.t("filter.selectAllMembers")}
|
|
8934
|
+
</button>
|
|
8935
|
+
<button
|
|
8936
|
+
class="admin-member-select-btn"
|
|
8937
|
+
@click="${() => this._deselectAllAdminDimensionMembers(section2.id, dimension.id)}"
|
|
8938
|
+
>
|
|
8939
|
+
${I18n.t("filter.clearMembers")}
|
|
8940
|
+
</button>
|
|
8941
|
+
</div>
|
|
8942
|
+
` : ""}
|
|
8943
|
+
</div>
|
|
8944
|
+
`;
|
|
8945
|
+
})}
|
|
8946
|
+
</div>
|
|
8947
|
+
` : ""}
|
|
8830
8948
|
</div>
|
|
8831
8949
|
</div>
|
|
8832
8950
|
`;
|
|
@@ -8855,6 +8973,178 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8855
8973
|
console.log(`✅ [Admin Mode] Updated ${field2} = ${checked} for role ${roleId}`);
|
|
8856
8974
|
console.log(`📋 [Admin Mode] _periodPreferences now includes:`, this._periodPreferences[roleId]);
|
|
8857
8975
|
}
|
|
8976
|
+
/**
|
|
8977
|
+
* Get dimensions for a specific role from hypercube data
|
|
8978
|
+
*/
|
|
8979
|
+
_getDimensionsForRole(roleId) {
|
|
8980
|
+
var _a, _b, _c, _d;
|
|
8981
|
+
if (!((_b = (_a = this.xbrlInput) == null ? void 0 : _a.hypercubes) == null ? void 0 : _b[0])) {
|
|
8982
|
+
return [];
|
|
8983
|
+
}
|
|
8984
|
+
const hypercubeRole = (_c = this.xbrlInput.hypercubes[0].roles) == null ? void 0 : _c.find((r2) => r2.roleId === roleId);
|
|
8985
|
+
if (!((_d = hypercubeRole == null ? void 0 : hypercubeRole.items) == null ? void 0 : _d.length)) {
|
|
8986
|
+
return [];
|
|
8987
|
+
}
|
|
8988
|
+
const dimensionsMap = /* @__PURE__ */ new Map();
|
|
8989
|
+
hypercubeRole.items.forEach((item) => {
|
|
8990
|
+
if (item.dimensions) {
|
|
8991
|
+
item.dimensions.forEach((dimension) => {
|
|
8992
|
+
if (!dimensionsMap.has(dimension.id)) {
|
|
8993
|
+
dimensionsMap.set(dimension.id, dimension);
|
|
8994
|
+
}
|
|
8995
|
+
});
|
|
8996
|
+
}
|
|
8997
|
+
});
|
|
8998
|
+
return Array.from(dimensionsMap.values());
|
|
8999
|
+
}
|
|
9000
|
+
/**
|
|
9001
|
+
* Get all dimension members recursively
|
|
9002
|
+
*/
|
|
9003
|
+
_getAllDimensionMembers(members) {
|
|
9004
|
+
if (!members || members.length === 0) {
|
|
9005
|
+
return [];
|
|
9006
|
+
}
|
|
9007
|
+
let allMembers = [];
|
|
9008
|
+
members.forEach((member) => {
|
|
9009
|
+
allMembers.push(member);
|
|
9010
|
+
if (member.children && member.children.length > 0) {
|
|
9011
|
+
allMembers = allMembers.concat(this._getAllDimensionMembers(member.children));
|
|
9012
|
+
}
|
|
9013
|
+
});
|
|
9014
|
+
return allMembers;
|
|
9015
|
+
}
|
|
9016
|
+
/**
|
|
9017
|
+
* Check if a dimension has only one member (single choice, mandatory)
|
|
9018
|
+
*/
|
|
9019
|
+
_isSingleMemberDimension(dimension) {
|
|
9020
|
+
if (!dimension || !dimension.members) {
|
|
9021
|
+
return false;
|
|
9022
|
+
}
|
|
9023
|
+
const allMembers = this._getAllDimensionMembers(dimension.members);
|
|
9024
|
+
return allMembers.length === 1;
|
|
9025
|
+
}
|
|
9026
|
+
/**
|
|
9027
|
+
* Handle dimension member selection in admin mode
|
|
9028
|
+
*/
|
|
9029
|
+
_handleAdminDimensionMemberChange(event, roleId, dimensionId, memberId) {
|
|
9030
|
+
var _a, _b;
|
|
9031
|
+
event.stopPropagation();
|
|
9032
|
+
const checkbox = event.target;
|
|
9033
|
+
const currentPref = this._periodPreferences[roleId] || {
|
|
9034
|
+
showDuration: true,
|
|
9035
|
+
showInstant: true,
|
|
9036
|
+
showPreviousYear: false,
|
|
9037
|
+
dimensionSelections: []
|
|
9038
|
+
};
|
|
9039
|
+
if (!currentPref.dimensionSelections) {
|
|
9040
|
+
currentPref.dimensionSelections = [];
|
|
9041
|
+
}
|
|
9042
|
+
let dimensionSelection = currentPref.dimensionSelections.find(
|
|
9043
|
+
(ds) => ds.dimensionId === dimensionId
|
|
9044
|
+
);
|
|
9045
|
+
if (!dimensionSelection) {
|
|
9046
|
+
const dimensions = this._getDimensionsForRole(roleId);
|
|
9047
|
+
const dimension = dimensions.find((d2) => d2.id === dimensionId);
|
|
9048
|
+
const dimensionLabel = ((_b = (_a = dimension == null ? void 0 : dimension.labels) == null ? void 0 : _a.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b.label) || dimensionId;
|
|
9049
|
+
dimensionSelection = {
|
|
9050
|
+
dimensionId,
|
|
9051
|
+
dimensionLabel,
|
|
9052
|
+
selectedMemberIds: []
|
|
9053
|
+
};
|
|
9054
|
+
currentPref.dimensionSelections.push(dimensionSelection);
|
|
9055
|
+
}
|
|
9056
|
+
if (checkbox.checked) {
|
|
9057
|
+
if (!dimensionSelection.selectedMemberIds.includes(memberId)) {
|
|
9058
|
+
dimensionSelection.selectedMemberIds.push(memberId);
|
|
9059
|
+
}
|
|
9060
|
+
} else {
|
|
9061
|
+
dimensionSelection.selectedMemberIds = dimensionSelection.selectedMemberIds.filter(
|
|
9062
|
+
(id) => id !== memberId
|
|
9063
|
+
);
|
|
9064
|
+
}
|
|
9065
|
+
this._periodPreferences = {
|
|
9066
|
+
...this._periodPreferences,
|
|
9067
|
+
[roleId]: currentPref
|
|
9068
|
+
};
|
|
9069
|
+
console.log("📊 [Admin Mode] Updated dimension selections:", this._periodPreferences[roleId].dimensionSelections);
|
|
9070
|
+
this.requestUpdate();
|
|
9071
|
+
}
|
|
9072
|
+
/**
|
|
9073
|
+
* Check if a dimension member is selected in admin mode
|
|
9074
|
+
* Returns true by default if no explicit preference exists (all members checked by default)
|
|
9075
|
+
*/
|
|
9076
|
+
_isAdminDimensionMemberSelected(roleId, dimensionId, memberId) {
|
|
9077
|
+
const preferences = this._periodPreferences[roleId];
|
|
9078
|
+
if (!(preferences == null ? void 0 : preferences.dimensionSelections)) {
|
|
9079
|
+
return true;
|
|
9080
|
+
}
|
|
9081
|
+
const dimensionSelection = preferences.dimensionSelections.find(
|
|
9082
|
+
(ds) => ds.dimensionId === dimensionId
|
|
9083
|
+
);
|
|
9084
|
+
if (!dimensionSelection) {
|
|
9085
|
+
return true;
|
|
9086
|
+
}
|
|
9087
|
+
return dimensionSelection.selectedMemberIds.includes(memberId);
|
|
9088
|
+
}
|
|
9089
|
+
/**
|
|
9090
|
+
* Select all members for a dimension in admin mode
|
|
9091
|
+
*/
|
|
9092
|
+
_selectAllAdminDimensionMembers(roleId, dimensionId) {
|
|
9093
|
+
var _a, _b;
|
|
9094
|
+
const dimensions = this._getDimensionsForRole(roleId);
|
|
9095
|
+
const dimension = dimensions.find((d2) => d2.id === dimensionId);
|
|
9096
|
+
if (!dimension)
|
|
9097
|
+
return;
|
|
9098
|
+
const allMembers = this._getAllDimensionMembers(dimension.members);
|
|
9099
|
+
const allMemberIds = allMembers.map((m) => m.id);
|
|
9100
|
+
const currentPref = this._periodPreferences[roleId] || {
|
|
9101
|
+
showDuration: true,
|
|
9102
|
+
showInstant: true,
|
|
9103
|
+
showPreviousYear: false,
|
|
9104
|
+
dimensionSelections: []
|
|
9105
|
+
};
|
|
9106
|
+
if (!currentPref.dimensionSelections) {
|
|
9107
|
+
currentPref.dimensionSelections = [];
|
|
9108
|
+
}
|
|
9109
|
+
let dimensionSelection = currentPref.dimensionSelections.find(
|
|
9110
|
+
(ds) => ds.dimensionId === dimensionId
|
|
9111
|
+
);
|
|
9112
|
+
if (!dimensionSelection) {
|
|
9113
|
+
const dimensionLabel = ((_b = (_a = dimension.labels) == null ? void 0 : _a.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b.label) || dimensionId;
|
|
9114
|
+
dimensionSelection = {
|
|
9115
|
+
dimensionId,
|
|
9116
|
+
dimensionLabel,
|
|
9117
|
+
selectedMemberIds: []
|
|
9118
|
+
};
|
|
9119
|
+
currentPref.dimensionSelections.push(dimensionSelection);
|
|
9120
|
+
}
|
|
9121
|
+
dimensionSelection.selectedMemberIds = allMemberIds;
|
|
9122
|
+
this._periodPreferences = {
|
|
9123
|
+
...this._periodPreferences,
|
|
9124
|
+
[roleId]: currentPref
|
|
9125
|
+
};
|
|
9126
|
+
this.requestUpdate();
|
|
9127
|
+
}
|
|
9128
|
+
/**
|
|
9129
|
+
* Deselect all members for a dimension in admin mode
|
|
9130
|
+
*/
|
|
9131
|
+
_deselectAllAdminDimensionMembers(roleId, dimensionId) {
|
|
9132
|
+
const currentPref = this._periodPreferences[roleId];
|
|
9133
|
+
if (!(currentPref == null ? void 0 : currentPref.dimensionSelections)) {
|
|
9134
|
+
return;
|
|
9135
|
+
}
|
|
9136
|
+
const dimensionSelection = currentPref.dimensionSelections.find(
|
|
9137
|
+
(ds) => ds.dimensionId === dimensionId
|
|
9138
|
+
);
|
|
9139
|
+
if (dimensionSelection) {
|
|
9140
|
+
dimensionSelection.selectedMemberIds = [];
|
|
9141
|
+
}
|
|
9142
|
+
this._periodPreferences = {
|
|
9143
|
+
...this._periodPreferences,
|
|
9144
|
+
[roleId]: currentPref
|
|
9145
|
+
};
|
|
9146
|
+
this.requestUpdate();
|
|
9147
|
+
}
|
|
8858
9148
|
_handleAdminModeSubmit() {
|
|
8859
9149
|
var _a, _b, _c, _d;
|
|
8860
9150
|
if (!((_c = (_b = (_a = this.xbrlInput) == null ? void 0 : _a.presentation) == null ? void 0 : _b[0]) == null ? void 0 : _c.roles)) {
|
|
@@ -9160,7 +9450,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9160
9450
|
@click="${this._handleSubmit}"
|
|
9161
9451
|
?disabled="${this.disabled || this.readonly}"
|
|
9162
9452
|
>
|
|
9163
|
-
${I18n.t("form.submit")}
|
|
9453
|
+
${this.submitButtonLabel || I18n.t("form.submit")}
|
|
9164
9454
|
</button>
|
|
9165
9455
|
|
|
9166
9456
|
|
|
@@ -9661,6 +9951,100 @@ JupiterDynamicForm.styles = css`
|
|
|
9661
9951
|
user-select: none;
|
|
9662
9952
|
}
|
|
9663
9953
|
|
|
9954
|
+
.admin-dimension-section {
|
|
9955
|
+
margin-top: 16px;
|
|
9956
|
+
padding: 16px;
|
|
9957
|
+
background: var(--jupiter-background, #fff);
|
|
9958
|
+
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
9959
|
+
border-radius: 6px;
|
|
9960
|
+
}
|
|
9961
|
+
|
|
9962
|
+
.admin-dimension-header {
|
|
9963
|
+
font-size: 14px;
|
|
9964
|
+
font-weight: 600;
|
|
9965
|
+
color: var(--jupiter-text-primary, #333);
|
|
9966
|
+
margin-bottom: 16px;
|
|
9967
|
+
padding-bottom: 8px;
|
|
9968
|
+
border-bottom: 1px solid var(--jupiter-border-color, #ddd);
|
|
9969
|
+
}
|
|
9970
|
+
|
|
9971
|
+
.admin-dimension-group {
|
|
9972
|
+
margin-bottom: 16px;
|
|
9973
|
+
}
|
|
9974
|
+
|
|
9975
|
+
.admin-dimension-group:last-child {
|
|
9976
|
+
margin-bottom: 0;
|
|
9977
|
+
}
|
|
9978
|
+
|
|
9979
|
+
.admin-dimension-label {
|
|
9980
|
+
font-size: 13px;
|
|
9981
|
+
font-weight: 500;
|
|
9982
|
+
color: var(--jupiter-text-primary, #333);
|
|
9983
|
+
margin-bottom: 8px;
|
|
9984
|
+
}
|
|
9985
|
+
|
|
9986
|
+
.admin-dimension-members {
|
|
9987
|
+
display: flex;
|
|
9988
|
+
flex-direction: column;
|
|
9989
|
+
gap: 6px;
|
|
9990
|
+
margin-bottom: 8px;
|
|
9991
|
+
}
|
|
9992
|
+
|
|
9993
|
+
.admin-member-checkbox-item {
|
|
9994
|
+
display: flex;
|
|
9995
|
+
align-items: center;
|
|
9996
|
+
gap: 8px;
|
|
9997
|
+
padding: 6px 8px;
|
|
9998
|
+
border-radius: 4px;
|
|
9999
|
+
cursor: pointer;
|
|
10000
|
+
transition: background-color 0.2s ease;
|
|
10001
|
+
}
|
|
10002
|
+
|
|
10003
|
+
.admin-member-checkbox-item:hover {
|
|
10004
|
+
background: var(--jupiter-hover-background, #f5f5f5);
|
|
10005
|
+
}
|
|
10006
|
+
|
|
10007
|
+
.admin-member-checkbox {
|
|
10008
|
+
width: 16px;
|
|
10009
|
+
height: 16px;
|
|
10010
|
+
cursor: pointer;
|
|
10011
|
+
flex-shrink: 0;
|
|
10012
|
+
}
|
|
10013
|
+
|
|
10014
|
+
.admin-member-checkbox-label {
|
|
10015
|
+
font-size: 13px;
|
|
10016
|
+
color: var(--jupiter-text-secondary, #666);
|
|
10017
|
+
user-select: none;
|
|
10018
|
+
flex: 1;
|
|
10019
|
+
}
|
|
10020
|
+
|
|
10021
|
+
.admin-member-select-controls {
|
|
10022
|
+
display: flex;
|
|
10023
|
+
gap: 8px;
|
|
10024
|
+
margin-top: 8px;
|
|
10025
|
+
}
|
|
10026
|
+
|
|
10027
|
+
.admin-member-select-btn {
|
|
10028
|
+
padding: 6px 12px;
|
|
10029
|
+
font-size: 12px;
|
|
10030
|
+
background: var(--jupiter-background-light, #f8f9fa);
|
|
10031
|
+
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
10032
|
+
border-radius: 4px;
|
|
10033
|
+
cursor: pointer;
|
|
10034
|
+
transition: all 0.2s ease;
|
|
10035
|
+
color: var(--jupiter-text-secondary, #666);
|
|
10036
|
+
}
|
|
10037
|
+
|
|
10038
|
+
.admin-member-select-btn:hover {
|
|
10039
|
+
background: var(--jupiter-hover-background, #e8e8e8);
|
|
10040
|
+
border-color: var(--jupiter-primary-color, #1976d2);
|
|
10041
|
+
color: var(--jupiter-primary-color, #1976d2);
|
|
10042
|
+
}
|
|
10043
|
+
|
|
10044
|
+
.admin-member-select-btn:active {
|
|
10045
|
+
transform: translateY(1px);
|
|
10046
|
+
}
|
|
10047
|
+
|
|
9664
10048
|
/* Error Popup Styles */
|
|
9665
10049
|
.error-popup-overlay {
|
|
9666
10050
|
position: fixed;
|
|
@@ -9816,6 +10200,9 @@ __decorateClass([
|
|
|
9816
10200
|
__decorateClass([
|
|
9817
10201
|
n2({ type: String })
|
|
9818
10202
|
], JupiterDynamicForm.prototype, "mode", 2);
|
|
10203
|
+
__decorateClass([
|
|
10204
|
+
n2({ type: String, attribute: "submit-button-label" })
|
|
10205
|
+
], JupiterDynamicForm.prototype, "submitButtonLabel", 2);
|
|
9819
10206
|
__decorateClass([
|
|
9820
10207
|
n2({ type: Array })
|
|
9821
10208
|
], JupiterDynamicForm.prototype, "financialStatementsTypeAxis", 2);
|