@genesislcap/foundation-layout 14.393.3-FUI-2471.2 → 14.393.3-FUI-2471.4
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/POPOUT_TODO.md +46 -0
- package/dist/custom-elements.json +52 -19
- package/dist/dts/main/layout-main.d.ts +1 -3
- package/dist/dts/main/layout-main.d.ts.map +1 -1
- package/dist/dts/main/layout-popout-controller.d.ts +14 -5
- package/dist/dts/main/layout-popout-controller.d.ts.map +1 -1
- package/dist/dts/utils/popout-events.d.ts +19 -13
- package/dist/dts/utils/popout-events.d.ts.map +1 -1
- package/dist/dts/utils/types.d.ts +19 -8
- package/dist/dts/utils/types.d.ts.map +1 -1
- package/dist/esm/main/layout-main.js +11 -10
- package/dist/esm/main/layout-popout-controller.js +74 -28
- package/dist/foundation-layout.api.json +5 -22
- package/dist/foundation-layout.d.ts +15 -7
- package/docs/api/foundation-layout.foundationlayout.md +1 -1
- package/docs/api/foundation-layout.foundationlayout.tryactivatepopoutmode.md +1 -38
- package/docs/api-report.md.api.md +2 -2
- package/package.json +15 -15
package/POPOUT_TODO.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Foundation Layout TODOs
|
|
2
|
+
|
|
3
|
+
## Multi-Instance Popouts
|
|
4
|
+
Currently, the popout system keys windows and state by their `registration` ID. This limits the layout to having only one instance of a specific component type (e.g., `rapid-grid-pro`) popped out at a time.
|
|
5
|
+
|
|
6
|
+
### Proposed Improvement
|
|
7
|
+
Support multiple popouts of the same registration by introducing a unique `instanceId` (UUID).
|
|
8
|
+
|
|
9
|
+
- **URL Parameters**: Add a unique instance ID to the popout URL (e.g., `?layout-popout-control-key=my-grid&layout-popout-instance-id=uuid-123`).
|
|
10
|
+
- **Registry**: Update `FoundationLayoutPopoutController` to key the `popoutRegistry` by the unique `instanceId` rather than the `registration` name.
|
|
11
|
+
- **State Persistence**: Ensure the serialized layout stores the `registration` name alongside the state for each `instanceId` so they can be recreated correctly on restoration.
|
|
12
|
+
- **Communication**: Update the broadcast channel messages (`popout-update`, `popout-sync`, etc.) to use the `instanceId` for targeting and identification.
|
|
13
|
+
|
|
14
|
+
## Configurable Popout Headers
|
|
15
|
+
A client has requested the ability to see the component header (title and custom buttons) inside the popout window, while still hiding the standard Golden Layout controls (Close, Maximise, and Popout-in-Popout).
|
|
16
|
+
|
|
17
|
+
### Proposed Improvement
|
|
18
|
+
1. **Update Configuration**: Add `showHeaders?: boolean` to the `LayoutPopoutConfig` interface (defaulting to `false`).
|
|
19
|
+
2. **Update Activation Logic**:
|
|
20
|
+
- In `tryActivatePopoutMode`, pass the `showHeaders` value to the Golden Layout `settings.hasHeaders` property.
|
|
21
|
+
- Configure the root component item to disable standard buttons while allowing the header to render:
|
|
22
|
+
```typescript
|
|
23
|
+
header: {
|
|
24
|
+
maximise: false,
|
|
25
|
+
close: false,
|
|
26
|
+
popout: false,
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
3. **Custom Buttons**: Ensure that the `setupCustomButtons` logic continues to run in the popout window so that the user's custom tools are injected into the newly visible header.
|
|
30
|
+
|
|
31
|
+
## Restore on Manual Close
|
|
32
|
+
Currently, when a user manually closes a popout window, the component is removed from the layout entirely. We want to restore it to the main layout automatically.
|
|
33
|
+
|
|
34
|
+
### Proposed Solution
|
|
35
|
+
1. **Detect Manual Close**:
|
|
36
|
+
- In `FoundationLayoutPopoutController`, add a flag `isClosingAll` (boolean).
|
|
37
|
+
- Set `isClosingAll = true` at the start of `closeAllPopouts()` and `false` at the end.
|
|
38
|
+
- In the `popout-closed` event handler, check if `!isClosingAll`. If true, this is a manual user action.
|
|
39
|
+
|
|
40
|
+
2. **Trigger Restoration**:
|
|
41
|
+
- If manual close is detected, call a restoration method on the parent `FoundationLayout` (e.g., `restoreItem`).
|
|
42
|
+
- Pass the `registration` ID and the final `state` (captured from the registry before deletion).
|
|
43
|
+
|
|
44
|
+
3. **Implement `restoreItem`**:
|
|
45
|
+
- Update `FoundationLayout` to support restoring an item with its state preserved.
|
|
46
|
+
- This likely requires updating `addItem` or creating a new method that accepts `initialState` (or `componentState`) in the configuration, so the component re-initializes with its previous data (filters, scroll position, etc.).
|
|
@@ -670,16 +670,6 @@
|
|
|
670
670
|
"text": "boolean"
|
|
671
671
|
}
|
|
672
672
|
},
|
|
673
|
-
"parameters": [
|
|
674
|
-
{
|
|
675
|
-
"name": "autoloading",
|
|
676
|
-
"default": "false",
|
|
677
|
-
"type": {
|
|
678
|
-
"text": "boolean"
|
|
679
|
-
},
|
|
680
|
-
"description": "If true, this respects the {@link LayoutPopoutConfig.loadAutomatically}property.\n * You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.\n * "
|
|
681
|
-
}
|
|
682
|
-
],
|
|
683
673
|
"description": "If in a popout window from the dynamic layout, this function will run the flow to put the component in popout mode.\nThis function is automatically called if using the declarative HTML API, but if only using the JavaScript API then you will need to call this function manually."
|
|
684
674
|
},
|
|
685
675
|
{
|
|
@@ -995,7 +985,7 @@
|
|
|
995
985
|
{
|
|
996
986
|
"kind": "variable",
|
|
997
987
|
"name": "layoutTemplate",
|
|
998
|
-
"default": "html<FoundationLayout>`\n <template>\n ${when(\n (x) => Boolean(x.popoutConfig),\n html<FoundationLayout>`\n <foundation-layout-popout-controller\n ${ref('popoutController')}\n channel-name=\"${(x) => x.popoutConfig?.channelName}\"\n ></foundation-layout-popout-controller>\n `,\n )}\n ${when((x) => !x.hasFirstLoaded && x.usingDeclerativeAPI, loadingTemplate)}\n <div class=\"layout-container\" ${ref('layoutElement')}></div>\n </template>\n`",
|
|
988
|
+
"default": "html<FoundationLayout>`\n <template>\n ${when(\n (x) => Boolean(x.popoutConfig),\n html<FoundationLayout>`\n <foundation-layout-popout-controller\n ${ref('popoutController')}\n :parentLayout=\"${(x) => x}\"\n channel-name=\"${(x) => x.popoutConfig?.channelName}\"\n ></foundation-layout-popout-controller>\n `,\n )}\n ${when((x) => !x.hasFirstLoaded && x.usingDeclerativeAPI, loadingTemplate)}\n <div class=\"layout-container\" ${ref('layoutElement')}></div>\n </template>\n`",
|
|
999
989
|
"description": "`ViewTemplate` which defines the html for FoundationLayout.",
|
|
1000
990
|
"privacy": "public"
|
|
1001
991
|
}
|
|
@@ -1077,7 +1067,7 @@
|
|
|
1077
1067
|
},
|
|
1078
1068
|
{
|
|
1079
1069
|
"kind": "field",
|
|
1080
|
-
"name": "
|
|
1070
|
+
"name": "lastUpdate",
|
|
1081
1071
|
"type": {
|
|
1082
1072
|
"text": "string"
|
|
1083
1073
|
},
|
|
@@ -1087,7 +1077,7 @@
|
|
|
1087
1077
|
"kind": "field",
|
|
1088
1078
|
"name": "popoutRegistry",
|
|
1089
1079
|
"type": {
|
|
1090
|
-
"text": "Map
|
|
1080
|
+
"text": "Map<\n string,\n { geometry: PopoutGeometry; state?: unknown; window?: Window }\n >"
|
|
1091
1081
|
},
|
|
1092
1082
|
"privacy": "private",
|
|
1093
1083
|
"default": "new Map()"
|
|
@@ -1102,6 +1092,19 @@
|
|
|
1102
1092
|
"name": "setupListener",
|
|
1103
1093
|
"privacy": "private"
|
|
1104
1094
|
},
|
|
1095
|
+
{
|
|
1096
|
+
"kind": "method",
|
|
1097
|
+
"name": "applyStateToParent",
|
|
1098
|
+
"privacy": "private",
|
|
1099
|
+
"parameters": [
|
|
1100
|
+
{
|
|
1101
|
+
"name": "state",
|
|
1102
|
+
"type": {
|
|
1103
|
+
"text": "unknown"
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
]
|
|
1107
|
+
},
|
|
1105
1108
|
{
|
|
1106
1109
|
"kind": "method",
|
|
1107
1110
|
"name": "setupUnloadListener",
|
|
@@ -1130,17 +1133,39 @@
|
|
|
1130
1133
|
{
|
|
1131
1134
|
"kind": "method",
|
|
1132
1135
|
"name": "getGeometry",
|
|
1133
|
-
"privacy": "private"
|
|
1136
|
+
"privacy": "private",
|
|
1137
|
+
"return": {
|
|
1138
|
+
"type": {
|
|
1139
|
+
"text": "Promise<PopoutGeometry>"
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1134
1142
|
},
|
|
1135
1143
|
{
|
|
1136
1144
|
"kind": "method",
|
|
1137
|
-
"name": "
|
|
1145
|
+
"name": "getComponentState",
|
|
1146
|
+
"privacy": "private",
|
|
1147
|
+
"return": {
|
|
1148
|
+
"type": {
|
|
1149
|
+
"text": "unknown"
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
},
|
|
1153
|
+
{
|
|
1154
|
+
"kind": "method",
|
|
1155
|
+
"name": "broadcastUpdate",
|
|
1138
1156
|
"privacy": "private",
|
|
1139
1157
|
"parameters": [
|
|
1140
1158
|
{
|
|
1141
1159
|
"name": "geometry",
|
|
1142
1160
|
"type": {
|
|
1143
|
-
"text": "
|
|
1161
|
+
"text": "PopoutGeometry"
|
|
1162
|
+
}
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
"name": "state",
|
|
1166
|
+
"optional": true,
|
|
1167
|
+
"type": {
|
|
1168
|
+
"text": "unknown"
|
|
1144
1169
|
}
|
|
1145
1170
|
}
|
|
1146
1171
|
]
|
|
@@ -1158,12 +1183,12 @@
|
|
|
1158
1183
|
"description": "The registration ID of the component to pop out."
|
|
1159
1184
|
},
|
|
1160
1185
|
{
|
|
1161
|
-
"name": "
|
|
1186
|
+
"name": "popoutState",
|
|
1162
1187
|
"optional": true,
|
|
1163
1188
|
"type": {
|
|
1164
|
-
"text": "
|
|
1189
|
+
"text": "PopoutState"
|
|
1165
1190
|
},
|
|
1166
|
-
"description": "Optional geometry to use for the new window."
|
|
1191
|
+
"description": "Optional state (geometry and component state) to use for the new window."
|
|
1167
1192
|
},
|
|
1168
1193
|
{
|
|
1169
1194
|
"name": "uuid",
|
|
@@ -1966,6 +1991,14 @@
|
|
|
1966
1991
|
"name": "LAYOUT_POPOUT_CHANNEL_NAME",
|
|
1967
1992
|
"module": "src/utils/popout-events.ts"
|
|
1968
1993
|
}
|
|
1994
|
+
},
|
|
1995
|
+
{
|
|
1996
|
+
"kind": "js",
|
|
1997
|
+
"name": "PopoutGeometry",
|
|
1998
|
+
"declaration": {
|
|
1999
|
+
"name": "PopoutGeometry",
|
|
2000
|
+
"module": "src/utils/popout-events.ts"
|
|
2001
|
+
}
|
|
1969
2002
|
}
|
|
1970
2003
|
]
|
|
1971
2004
|
},
|
|
@@ -177,11 +177,9 @@ export declare class FoundationLayout extends FoundationElement implements Layou
|
|
|
177
177
|
* then if the layout goes into popout mode then it will place itself as the only child for the popout container you set.
|
|
178
178
|
* It is likely you'll want to attach this class to your design system provider.
|
|
179
179
|
*
|
|
180
|
-
* @param autoloading - If true, this respects the {@link LayoutPopoutConfig.loadAutomatically} property.
|
|
181
|
-
* You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.
|
|
182
180
|
* @beta
|
|
183
181
|
*/
|
|
184
|
-
tryActivatePopoutMode(
|
|
182
|
+
tryActivatePopoutMode(): boolean;
|
|
185
183
|
/**
|
|
186
184
|
* Try to load a layout from local storage, or return false. Only required if manually calling {@link FoundationLayout.registerItem}
|
|
187
185
|
* @remarks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-main.d.ts","sourceRoot":"","sources":["../../../src/main/layout-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,YAAY,EAEZ,cAAc,EAGf,MAAM,kCAAkC,CAAC;AAK1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAGL,gBAAgB,EAChB,aAAa,EACb,YAAY,EAOZ,eAAe,EAGf,kBAAkB,EAGlB,SAAS,EAET,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAmBzC;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAiB,SAAQ,iBAAkB,YAAW,eAAe;;IAChF,OAAO,CAAC,MAAM,CAAe;IAC7B,gBAAgB;IAChB,aAAa,EAAE,WAAW,CAAC;IAC3B,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,mBAAmB,CAAqC;IAEhE,gBAAgB;IAChB,CAAC,aAAa,CAAC,EAAG,MAAM,CAAU;IAElC;;;;OAIG;IACmC,YAAY,EAAE,MAAM,CAAyB;IACnF,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,oBAAoB,CAAK;IAEjC,gBAAgB;IACV,OAAO,CAAC,IAAI,CAAO;IAEzB,gBAAgB;IACP,OAAO,CAAC,OAAO,CAAU;IAClC;;;;;OAKG;IACmC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC3D;;;;OAIG;IACS,sBAAsB,GAAI,aAAa,MAAM,YAC2B;IAEpF;;;OAGG;IACH,gBAAgB,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC;IAE3C;;;;;;;;;;OAUG;IACS,cAAc,UAAS;IACnC,gBAAgB;IACJ,mBAAmB,UAAS;IAExC;;;;;OAKG;IACH,aAAa,EAAE,YAAY,EAAE,CAAM;IAEnC;;;OAGG;IACS,QAAQ,EAAE,OAAO,CAAS;IAEtC;;;;;OAKG;IACI,KAAK,EAAG,sBAAsB,CAAU;IAE/C;;;;;;;OAOG;IACI,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAa;IAE5D,gBAAgB;IACJ,SAAS,UAAS;IAE9B,gBAAgB;IAChB,gBAAgB,EAAE,gCAAgC,CAAC;IACnD;;;;OAIG;IACS,YAAY,EAAE,kBAAkB,GAAG,SAAS,CAAa;IAErE,gBAAgB;;IAahB,gBAAgB;IAChB,iBAAiB,IAAI,IAAI;IA+BzB,gBAAgB;IAChB,oBAAoB,IAAI,IAAI;IAY5B,gBAAgB;IAChB,OAAO,CAAC,WAAW;IAInB,gBAAgB;IAChB,OAAO,CAAC,UAAU;IAMlB,gBAAgB;IAChB,OAAO,CAAC,eAAe;IAKvB,gBAAgB;IAChB,OAAO,CAAC,gBAAgB;IAIxB,gBAAgB;IAChB,OAAO,CAAC,iBAAiB;IAOzB,gBAAgB;IAChB,OAAO,CAAC,iBAAiB;IAKzB,gBAAgB;IAChB,OAAO,CAAC,iBAAiB;IAIzB,gBAAgB;IAChB,OAAO,CAAC,kBAAkB;IAI1B,gBAAgB;IAChB,OAAO,CAAC,kBAAkB;IAI1B,gBAAgB;IACJ,OAAO,CAAC,eAAe,CAAqB;IACxD,gBAAgB;IAChB,sBAAsB;IAQtB;;OAEG;IAEH;;;;;;;;;;OAUG;IACH,MAAM,CAAC,2BAA2B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IActE;;;;;;;;OAQG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;;;;;OAMG;IACH,SAAS,IAAI,gBAAgB;IA8B7B
|
|
1
|
+
{"version":3,"file":"layout-main.d.ts","sourceRoot":"","sources":["../../../src/main/layout-main.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,40 @@
|
|
|
1
1
|
import { FASTElement } from '@microsoft/fast-element';
|
|
2
|
-
import { PopoutState } from '../utils';
|
|
2
|
+
import { LayoutComponent, PopoutState } from '../utils';
|
|
3
3
|
export declare class FoundationLayoutPopoutController extends FASTElement {
|
|
4
4
|
channelName: string;
|
|
5
|
+
/**
|
|
6
|
+
* Reference to the parent layout to retrieve component state
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
parentLayout: LayoutComponent & {
|
|
10
|
+
getLayoutComponents(): any[][];
|
|
11
|
+
};
|
|
5
12
|
private layoutKey;
|
|
6
13
|
private channel;
|
|
7
14
|
private pollInterval;
|
|
8
15
|
private unloadHandler;
|
|
9
|
-
private
|
|
16
|
+
private lastUpdate;
|
|
10
17
|
private popoutRegistry;
|
|
11
18
|
connectedCallback(): void;
|
|
12
19
|
disconnectedCallback(): void;
|
|
13
20
|
private setupChannel;
|
|
14
21
|
private setupListener;
|
|
22
|
+
private applyStateToParent;
|
|
15
23
|
private setupUnloadListener;
|
|
16
24
|
private teardownUnloadListener;
|
|
17
25
|
private emitAutosave;
|
|
18
26
|
private startPolling;
|
|
19
27
|
private stopPolling;
|
|
20
28
|
private getGeometry;
|
|
21
|
-
private
|
|
29
|
+
private getComponentState;
|
|
30
|
+
private broadcastUpdate;
|
|
22
31
|
/**
|
|
23
32
|
* Opens a component in a popout window.
|
|
24
33
|
* @param registration - The registration ID of the component to pop out.
|
|
25
|
-
* @param
|
|
34
|
+
* @param popoutState - Optional state (geometry and component state) to use for the new window.
|
|
26
35
|
* @param uuid - UUID generator from parent layout
|
|
27
36
|
*/
|
|
28
|
-
openPopout(registration: string,
|
|
37
|
+
openPopout(registration: string, popoutState?: PopoutState, uuid?: any): Promise<Window>;
|
|
29
38
|
getRegistry(): {
|
|
30
39
|
[layoutKey: string]: PopoutState;
|
|
31
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-popout-controller.d.ts","sourceRoot":"","sources":["../../../src/main/layout-popout-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,WAAW,
|
|
1
|
+
{"version":3,"file":"layout-popout-controller.d.ts","sourceRoot":"","sources":["../../../src/main/layout-popout-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,WAAW,EAAc,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAEL,eAAe,EAIf,WAAW,EACZ,MAAM,UAAU,CAAC;AAGlB,qBAKa,gCAAiC,SAAQ,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEzD;;;OAGG;IACS,YAAY,EAAE,eAAe,GAAG;QAAE,mBAAmB,IAAI,GAAG,EAAE,EAAE,CAAA;KAAE,CAAC;IAE/E,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,cAAc,CAGR;IAEd,iBAAiB;IAajB,oBAAoB;IAapB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,WAAW;YAML,WAAW;IAsBzB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,eAAe;IAUvB;;;;;OAKG;IACU,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,GAAG;IA8D5E,WAAW,IAAI;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE;IAQ1D;;OAEG;IACU,cAAc,CAAC,QAAQ,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,EAAE,IAAI,EAAE,GAAG;IAkB9E,eAAe;CAQvB"}
|
|
@@ -1,26 +1,17 @@
|
|
|
1
1
|
import { EventDetailMap } from '@genesislcap/foundation-events';
|
|
2
|
-
|
|
3
|
-
* Geometry details for a popout window
|
|
4
|
-
* @public
|
|
5
|
-
*/
|
|
6
|
-
export type PopoutGeometry = {
|
|
7
|
-
screenX: number;
|
|
8
|
-
screenY: number;
|
|
9
|
-
outerWidth: number;
|
|
10
|
-
outerHeight: number;
|
|
11
|
-
screenId?: string;
|
|
12
|
-
};
|
|
2
|
+
import { PopoutGeometry } from './types';
|
|
13
3
|
/**
|
|
14
4
|
* Events for layout popout communication
|
|
15
5
|
* @public
|
|
16
6
|
*/
|
|
17
7
|
export interface LayoutPopoutEvents extends EventDetailMap {
|
|
18
8
|
/**
|
|
19
|
-
* Emitted by a popout window when its geometry changes
|
|
9
|
+
* Emitted by a popout window when its geometry or component state changes
|
|
20
10
|
*/
|
|
21
|
-
'popout-
|
|
11
|
+
'popout-update': {
|
|
22
12
|
layoutKey: string;
|
|
23
13
|
geometry: PopoutGeometry;
|
|
14
|
+
state?: unknown;
|
|
24
15
|
};
|
|
25
16
|
/**
|
|
26
17
|
* Emitted by a popout window when it is closed
|
|
@@ -28,10 +19,25 @@ export interface LayoutPopoutEvents extends EventDetailMap {
|
|
|
28
19
|
'popout-closed': {
|
|
29
20
|
layoutKey: string;
|
|
30
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Emitted by a popout window when it opens to request state
|
|
24
|
+
*/
|
|
25
|
+
'popout-handshake': {
|
|
26
|
+
layoutKey: string;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Emitted by the host to sync state to a popout window
|
|
30
|
+
*/
|
|
31
|
+
'popout-sync': {
|
|
32
|
+
layoutKey: string;
|
|
33
|
+
geometry?: PopoutGeometry;
|
|
34
|
+
state?: unknown;
|
|
35
|
+
};
|
|
31
36
|
}
|
|
32
37
|
/**
|
|
33
38
|
* Name of the default broadcast channel used for layout popouts
|
|
34
39
|
* @public
|
|
35
40
|
*/
|
|
36
41
|
export declare const LAYOUT_POPOUT_CHANNEL_NAME = "f-layout-popout-channel";
|
|
42
|
+
export { PopoutGeometry };
|
|
37
43
|
//# sourceMappingURL=popout-events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popout-events.d.ts","sourceRoot":"","sources":["../../../src/utils/popout-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"popout-events.d.ts","sourceRoot":"","sources":["../../../src/utils/popout-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;OAEG;IACH,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,cAAc,CAAC;QACzB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF;;OAEG;IACH,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;OAEG;IACH,kBAAkB,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;OAEG;IACH,aAAa,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;QAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,4BAA4B,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
import { ComponentContainer, ResolvedLayoutConfig } from '@genesis-community/golden-layout';
|
|
2
2
|
import { componentType, instanceContainer } from './constants';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Geometry details for a popout window
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export type PopoutGeometry = {
|
|
8
|
+
screenX: number;
|
|
9
|
+
screenY: number;
|
|
10
|
+
outerWidth: number;
|
|
11
|
+
outerHeight: number;
|
|
12
|
+
screenId?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* @beta
|
|
16
|
+
* State of a popped out window
|
|
17
|
+
*/
|
|
18
|
+
export type PopoutState = {
|
|
19
|
+
geometry: PopoutGeometry;
|
|
20
|
+
state?: unknown;
|
|
21
|
+
};
|
|
4
22
|
/**
|
|
5
23
|
* Definition of a custom button which will be added to all layout items.
|
|
6
24
|
* @remarks
|
|
@@ -34,13 +52,6 @@ export type SerialisedLayout = {
|
|
|
34
52
|
[layoutKey: string]: PopoutState;
|
|
35
53
|
};
|
|
36
54
|
};
|
|
37
|
-
/**
|
|
38
|
-
* @beta
|
|
39
|
-
* State of a popped out window
|
|
40
|
-
*/
|
|
41
|
-
export type PopoutState = {
|
|
42
|
-
geometry: PopoutGeometry;
|
|
43
|
-
};
|
|
44
55
|
/**
|
|
45
56
|
* Interface to implement on an item which is a component of the layout and you wish to serialise state with. This is saved separately for each instance of the component, which allows you to restore multiple instances of the same component with different state.
|
|
46
57
|
* @typeParam T - the type of the state object you wish to serialise with the component.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/D;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CAC9D,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,EAAE,GAAG,CAAC;IACP,CAAC,EAAE,oBAAoB,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE;QACR,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC;KAClC,CAAC;CACH,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoDK;AACL,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC;;OAEG;IACH,eAAe,IAAI,CAAC,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC1C,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,gBAAgB,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,gBAAgB;AAChB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,gBAAgB;AAChB,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,OAAO,GAC1C,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,GAAG;IACrC,CAAC,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,CAAC;CACzC,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,WAAW,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AAE/E,gBAAgB;AAChB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,CACA;IACE,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,GACD;IACE,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CACJ,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,6CAA8C,CAAC;AAC7E;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,gBAAgB;AAChB,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhE,gBAAgB;AAChB,MAAM,WAAW,eAAe;IAC9B,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;IAChC,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC;IAC7D,mBAAmB,IAAI,IAAI,CAAC;CAC7B;AAED,gBAAgB;AAChB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrB,CAAC;AAEF,YAAY;AACZ,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC"}
|
|
@@ -296,16 +296,11 @@ export class FoundationLayout extends FoundationElement {
|
|
|
296
296
|
* then if the layout goes into popout mode then it will place itself as the only child for the popout container you set.
|
|
297
297
|
* It is likely you'll want to attach this class to your design system provider.
|
|
298
298
|
*
|
|
299
|
-
* @param autoloading - If true, this respects the {@link LayoutPopoutConfig.loadAutomatically} property.
|
|
300
|
-
* You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.
|
|
301
299
|
* @beta
|
|
302
300
|
*/
|
|
303
|
-
tryActivatePopoutMode(
|
|
304
|
-
var _b;
|
|
301
|
+
tryActivatePopoutMode() {
|
|
305
302
|
if (!this.popupMode)
|
|
306
303
|
return false;
|
|
307
|
-
if (autoloading && ((_b = this.popoutConfig) === null || _b === void 0 ? void 0 : _b.loadAutomatically) === false)
|
|
308
|
-
return;
|
|
309
304
|
const popoutComponentRegistration = new URLSearchParams(window.location.search).get(LAYOUT_POPOUT_CONTROL_KEY);
|
|
310
305
|
const glPopoutConfig = {
|
|
311
306
|
root: {
|
|
@@ -657,12 +652,14 @@ export class FoundationLayout extends FoundationElement {
|
|
|
657
652
|
return;
|
|
658
653
|
this.reloadPending = true;
|
|
659
654
|
setTimeout(() => {
|
|
655
|
+
var _b;
|
|
660
656
|
this.reloadPending = false;
|
|
661
657
|
if (!this.hasFirstLoaded) {
|
|
662
658
|
this.hasFirstLoaded = true;
|
|
663
659
|
// Store the default layout config before attempting to load from storage
|
|
664
660
|
this.defaultLayoutConfig = JSON.parse(JSON.stringify(this.layoutConfig));
|
|
665
|
-
const res = this.tryLoadLayoutFromLocalStorage() ||
|
|
661
|
+
const res = this.tryLoadLayoutFromLocalStorage() ||
|
|
662
|
+
(((_b = this.popoutConfig) === null || _b === void 0 ? void 0 : _b.loadAutomatically) !== false && this.tryActivatePopoutMode());
|
|
666
663
|
if (!res) {
|
|
667
664
|
this.loadGLConfigAndSetup(this.layoutConfig);
|
|
668
665
|
}
|
|
@@ -995,8 +992,11 @@ export class FoundationLayout extends FoundationElement {
|
|
|
995
992
|
this.customButtons.push({
|
|
996
993
|
svg: LAYOUT_ICONS.popoutSVG,
|
|
997
994
|
onClick: (_, elem) => {
|
|
998
|
-
var _b;
|
|
999
|
-
const
|
|
995
|
+
var _b, _c;
|
|
996
|
+
const instance = elem.firstChild[instanceContainer];
|
|
997
|
+
const registration = instance.registration;
|
|
998
|
+
const component = elem.firstChild;
|
|
999
|
+
const state = (_b = component === null || component === void 0 ? void 0 : component.getCurrentState) === null || _b === void 0 ? void 0 : _b.call(component);
|
|
1000
1000
|
// Use default dimensions from config
|
|
1001
1001
|
const defaultGeometry = {
|
|
1002
1002
|
screenX: undefined,
|
|
@@ -1005,7 +1005,7 @@ export class FoundationLayout extends FoundationElement {
|
|
|
1005
1005
|
outerHeight: configWithDefaults.popoutDimension.height,
|
|
1006
1006
|
};
|
|
1007
1007
|
// Add to controller registry immediately so it tracks it
|
|
1008
|
-
(
|
|
1008
|
+
(_c = this.popoutController) === null || _c === void 0 ? void 0 : _c.openPopout(registration, { geometry: defaultGeometry, state }, this.uuid);
|
|
1009
1009
|
this.cacheAndSaveLayout();
|
|
1010
1010
|
},
|
|
1011
1011
|
});
|
|
@@ -1060,6 +1060,7 @@ export const layoutTemplate = html `
|
|
|
1060
1060
|
${when((x) => Boolean(x.popoutConfig), html `
|
|
1061
1061
|
<foundation-layout-popout-controller
|
|
1062
1062
|
${ref('popoutController')}
|
|
1063
|
+
:parentLayout="${(x) => x}"
|
|
1063
1064
|
channel-name="${(x) => { var _b; return (_b = x.popoutConfig) === null || _b === void 0 ? void 0 : _b.channelName; }}"
|
|
1064
1065
|
></foundation-layout-popout-controller>
|
|
1065
1066
|
`)}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __awaiter, __decorate } from "tslib";
|
|
2
2
|
import { createTypedBroadcastChannel, } from '@genesislcap/foundation-broadcast-channel';
|
|
3
|
-
import { attr, customElement, FASTElement } from '@microsoft/fast-element';
|
|
3
|
+
import { attr, customElement, FASTElement, observable } from '@microsoft/fast-element';
|
|
4
4
|
import { LAYOUT_POPOUT_CONTROL_KEY, LayoutReceiveEvents, POPOUT_GEOMETRY_BROADCAST_INTERVAL, } from '../utils';
|
|
5
5
|
import { LAYOUT_POPOUT_CHANNEL_NAME } from '../utils/popout-events';
|
|
6
6
|
let FoundationLayoutPopoutController = class FoundationLayoutPopoutController extends FASTElement {
|
|
@@ -16,6 +16,7 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
16
16
|
this.setupUnloadListener();
|
|
17
17
|
if (this.layoutKey) {
|
|
18
18
|
this.startPolling();
|
|
19
|
+
this.channel.postMessage('popout-handshake', { layoutKey: this.layoutKey });
|
|
19
20
|
}
|
|
20
21
|
else {
|
|
21
22
|
this.setupListener();
|
|
@@ -35,16 +36,26 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
35
36
|
setupChannel() {
|
|
36
37
|
const name = this.channelName || LAYOUT_POPOUT_CHANNEL_NAME;
|
|
37
38
|
this.channel = createTypedBroadcastChannel(name);
|
|
39
|
+
if (this.layoutKey) {
|
|
40
|
+
this.channel.onmessage = (ev) => {
|
|
41
|
+
if (this.channel.isMessageType('popout-sync', ev)) {
|
|
42
|
+
const { layoutKey, state } = ev.data.detail;
|
|
43
|
+
if (layoutKey === this.layoutKey && state !== undefined) {
|
|
44
|
+
this.applyStateToParent(state);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
38
49
|
}
|
|
39
50
|
setupListener() {
|
|
40
51
|
if (!this.channel)
|
|
41
52
|
return;
|
|
42
53
|
this.channel.onmessage = (ev) => {
|
|
43
|
-
if (this.channel.isMessageType('popout-
|
|
44
|
-
const { layoutKey, geometry } = ev.data
|
|
54
|
+
if (this.channel.isMessageType('popout-update', ev)) {
|
|
55
|
+
const { layoutKey, geometry, state } = ev.data
|
|
45
56
|
.detail;
|
|
46
57
|
const current = this.popoutRegistry.get(layoutKey);
|
|
47
|
-
this.popoutRegistry.set(layoutKey, Object.assign(Object.assign({}, current), { geometry }));
|
|
58
|
+
this.popoutRegistry.set(layoutKey, Object.assign(Object.assign({}, current), { geometry, state }));
|
|
48
59
|
this.emitAutosave();
|
|
49
60
|
}
|
|
50
61
|
else if (this.channel.isMessageType('popout-closed', ev)) {
|
|
@@ -52,8 +63,31 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
52
63
|
this.popoutRegistry.delete(layoutKey);
|
|
53
64
|
this.emitAutosave();
|
|
54
65
|
}
|
|
66
|
+
else if (this.channel.isMessageType('popout-handshake', ev)) {
|
|
67
|
+
const { layoutKey } = ev.data.detail;
|
|
68
|
+
const current = this.popoutRegistry.get(layoutKey);
|
|
69
|
+
if (current) {
|
|
70
|
+
this.channel.postMessage('popout-sync', {
|
|
71
|
+
layoutKey,
|
|
72
|
+
geometry: current.geometry,
|
|
73
|
+
state: current.state,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
55
77
|
};
|
|
56
78
|
}
|
|
79
|
+
applyStateToParent(state) {
|
|
80
|
+
if (!this.parentLayout)
|
|
81
|
+
return;
|
|
82
|
+
const components = this.parentLayout.getLayoutComponents();
|
|
83
|
+
for (const group of components) {
|
|
84
|
+
for (const item of group) {
|
|
85
|
+
if (item && typeof item.applyState === 'function') {
|
|
86
|
+
item.applyState(state);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
57
91
|
setupUnloadListener() {
|
|
58
92
|
this.unloadHandler = () => {
|
|
59
93
|
if (this.layoutKey) {
|
|
@@ -81,11 +115,13 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
81
115
|
}
|
|
82
116
|
startPolling() {
|
|
83
117
|
this.pollInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
118
|
+
const geometry = yield this.getGeometry();
|
|
119
|
+
const state = this.getComponentState();
|
|
120
|
+
const update = { geometry, state };
|
|
121
|
+
const updateString = JSON.stringify(update);
|
|
122
|
+
if (updateString !== this.lastUpdate) {
|
|
123
|
+
this.broadcastUpdate(geometry, state);
|
|
124
|
+
this.lastUpdate = updateString;
|
|
89
125
|
}
|
|
90
126
|
}), POPOUT_GEOMETRY_BROADCAST_INTERVAL);
|
|
91
127
|
}
|
|
@@ -100,12 +136,10 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
100
136
|
var _a;
|
|
101
137
|
if ('getScreenDetails' in window) {
|
|
102
138
|
try {
|
|
103
|
-
// This may prompt the user for permission if not already granted
|
|
104
139
|
const details = yield window.getScreenDetails();
|
|
105
140
|
return (_a = details.currentScreen) === null || _a === void 0 ? void 0 : _a.label;
|
|
106
141
|
}
|
|
107
142
|
catch (e) {
|
|
108
|
-
// Silent fail - permission denied or API error
|
|
109
143
|
return undefined;
|
|
110
144
|
}
|
|
111
145
|
}
|
|
@@ -120,31 +154,45 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
120
154
|
};
|
|
121
155
|
});
|
|
122
156
|
}
|
|
123
|
-
|
|
157
|
+
getComponentState() {
|
|
158
|
+
if (!this.parentLayout)
|
|
159
|
+
return undefined;
|
|
160
|
+
const components = this.parentLayout.getLayoutComponents();
|
|
161
|
+
// In a popout window, we expect exactly one component
|
|
162
|
+
for (const group of components) {
|
|
163
|
+
for (const item of group) {
|
|
164
|
+
if (item && typeof item.getCurrentState === 'function') {
|
|
165
|
+
return item.getCurrentState();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
broadcastUpdate(geometry, state) {
|
|
124
172
|
if (!this.channel || !this.layoutKey)
|
|
125
173
|
return;
|
|
126
|
-
this.channel.postMessage('popout-
|
|
174
|
+
this.channel.postMessage('popout-update', {
|
|
127
175
|
layoutKey: this.layoutKey,
|
|
128
176
|
geometry,
|
|
177
|
+
state,
|
|
129
178
|
});
|
|
130
|
-
console.log('[PopoutController] Broadcasting geometry:', geometry);
|
|
131
179
|
}
|
|
132
180
|
/**
|
|
133
181
|
* Opens a component in a popout window.
|
|
134
182
|
* @param registration - The registration ID of the component to pop out.
|
|
135
|
-
* @param
|
|
183
|
+
* @param popoutState - Optional state (geometry and component state) to use for the new window.
|
|
136
184
|
* @param uuid - UUID generator from parent layout
|
|
137
185
|
*/
|
|
138
|
-
openPopout(registration,
|
|
186
|
+
openPopout(registration, popoutState, uuid) {
|
|
139
187
|
return __awaiter(this, void 0, void 0, function* () {
|
|
140
188
|
const url = new URL(window.location.toString());
|
|
141
189
|
const itemParams = new URLSearchParams();
|
|
142
190
|
itemParams.append(LAYOUT_POPOUT_CONTROL_KEY, registration);
|
|
143
191
|
url.search = itemParams.toString();
|
|
144
192
|
let features = 'popup';
|
|
193
|
+
const geometry = popoutState === null || popoutState === void 0 ? void 0 : popoutState.geometry;
|
|
145
194
|
let targetLeft = geometry === null || geometry === void 0 ? void 0 : geometry.screenX;
|
|
146
195
|
let targetTop = geometry === null || geometry === void 0 ? void 0 : geometry.screenY;
|
|
147
|
-
// If we have a screenId, try to find the screen and ensure coordinates are valid
|
|
148
196
|
if ((geometry === null || geometry === void 0 ? void 0 : geometry.screenId) && 'getScreenDetails' in window) {
|
|
149
197
|
try {
|
|
150
198
|
const details = yield window.getScreenDetails();
|
|
@@ -176,17 +224,16 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
176
224
|
features += `,top=${targetTop}`;
|
|
177
225
|
}
|
|
178
226
|
else {
|
|
179
|
-
features += ',width=800,height=600';
|
|
227
|
+
features += ',width=800,height=600';
|
|
180
228
|
}
|
|
181
229
|
const win = window.open(url, `popout-${registration}-${(uuid === null || uuid === void 0 ? void 0 : uuid.createId()) || Date.now()}`, features);
|
|
182
230
|
if (!win) {
|
|
183
231
|
console.warn(`Popout window for ${registration} was blocked.`);
|
|
184
232
|
return null;
|
|
185
233
|
}
|
|
186
|
-
// Update registry with the window reference and geometry (if provided)
|
|
187
|
-
const current = this.popoutRegistry.get(registration);
|
|
188
234
|
this.popoutRegistry.set(registration, {
|
|
189
|
-
geometry: geometry ||
|
|
235
|
+
geometry: geometry || {},
|
|
236
|
+
state: popoutState === null || popoutState === void 0 ? void 0 : popoutState.state,
|
|
190
237
|
window: win,
|
|
191
238
|
});
|
|
192
239
|
return win;
|
|
@@ -195,9 +242,7 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
195
242
|
getRegistry() {
|
|
196
243
|
const output = {};
|
|
197
244
|
for (const [key, val] of this.popoutRegistry.entries()) {
|
|
198
|
-
|
|
199
|
-
output[key] = { geometry: val.geometry };
|
|
200
|
-
}
|
|
245
|
+
output[key] = { geometry: val.geometry, state: val.state };
|
|
201
246
|
}
|
|
202
247
|
return output;
|
|
203
248
|
}
|
|
@@ -207,17 +252,15 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
207
252
|
restorePopouts(registry, uuid) {
|
|
208
253
|
return __awaiter(this, void 0, void 0, function* () {
|
|
209
254
|
this.closeAllPopouts();
|
|
210
|
-
// Populate the registry with serialized data
|
|
211
255
|
for (const [key, val] of Object.entries(registry)) {
|
|
212
|
-
this.popoutRegistry.set(key, { geometry: val.geometry });
|
|
256
|
+
this.popoutRegistry.set(key, { geometry: val.geometry, state: val.state });
|
|
213
257
|
}
|
|
214
258
|
const keys = Array.from(this.popoutRegistry.keys());
|
|
215
259
|
if (keys.length === 0)
|
|
216
260
|
return;
|
|
217
|
-
console.debug(`Restoring ${keys.length} popout windows`);
|
|
218
261
|
yield Promise.all(keys.map((key) => {
|
|
219
262
|
const state = this.popoutRegistry.get(key);
|
|
220
|
-
return this.openPopout(key, state
|
|
263
|
+
return this.openPopout(key, state, uuid);
|
|
221
264
|
}));
|
|
222
265
|
});
|
|
223
266
|
}
|
|
@@ -233,6 +276,9 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
|
|
|
233
276
|
__decorate([
|
|
234
277
|
attr({ attribute: 'channel-name' })
|
|
235
278
|
], FoundationLayoutPopoutController.prototype, "channelName", void 0);
|
|
279
|
+
__decorate([
|
|
280
|
+
observable
|
|
281
|
+
], FoundationLayoutPopoutController.prototype, "parentLayout", void 0);
|
|
236
282
|
FoundationLayoutPopoutController = __decorate([
|
|
237
283
|
customElement({
|
|
238
284
|
name: 'foundation-layout-popout-controller',
|
|
@@ -1079,19 +1079,11 @@
|
|
|
1079
1079
|
{
|
|
1080
1080
|
"kind": "Method",
|
|
1081
1081
|
"canonicalReference": "@genesislcap/foundation-layout!FoundationLayout#tryActivatePopoutMode:member(1)",
|
|
1082
|
-
"docComment": "/**\n * If in a popout window from the dynamic layout, this function will run the flow to put the component in popout mode. This function is automatically called if using the declarative HTML API, but if only using the JavaScript API then you will need to call this function manually.\n *\n * @remarks\n *\n * If you need to call this manually then you should do it as soon as you register all of the required components with {@link FoundationLayout.registerItem}.\n *\n * If you set the `LAYOUT_POPOUT_CONTAINER_CLASS` on an element which is a DOM parent of the layout, then if the layout goes into popout mode then it will place itself as the only child for the popout container you set. It is likely you'll want to attach this class to your design system provider.\n *\n * @
|
|
1082
|
+
"docComment": "/**\n * If in a popout window from the dynamic layout, this function will run the flow to put the component in popout mode. This function is automatically called if using the declarative HTML API, but if only using the JavaScript API then you will need to call this function manually.\n *\n * @remarks\n *\n * If you need to call this manually then you should do it as soon as you register all of the required components with {@link FoundationLayout.registerItem}.\n *\n * If you set the `LAYOUT_POPOUT_CONTAINER_CLASS` on an element which is a DOM parent of the layout, then if the layout goes into popout mode then it will place itself as the only child for the popout container you set. It is likely you'll want to attach this class to your design system provider.\n *\n * @beta\n */\n",
|
|
1083
1083
|
"excerptTokens": [
|
|
1084
1084
|
{
|
|
1085
1085
|
"kind": "Content",
|
|
1086
|
-
"text": "tryActivatePopoutMode(
|
|
1087
|
-
},
|
|
1088
|
-
{
|
|
1089
|
-
"kind": "Content",
|
|
1090
|
-
"text": "boolean"
|
|
1091
|
-
},
|
|
1092
|
-
{
|
|
1093
|
-
"kind": "Content",
|
|
1094
|
-
"text": "): "
|
|
1086
|
+
"text": "tryActivatePopoutMode(): "
|
|
1095
1087
|
},
|
|
1096
1088
|
{
|
|
1097
1089
|
"kind": "Content",
|
|
@@ -1104,22 +1096,13 @@
|
|
|
1104
1096
|
],
|
|
1105
1097
|
"isStatic": false,
|
|
1106
1098
|
"returnTypeTokenRange": {
|
|
1107
|
-
"startIndex":
|
|
1108
|
-
"endIndex":
|
|
1099
|
+
"startIndex": 1,
|
|
1100
|
+
"endIndex": 2
|
|
1109
1101
|
},
|
|
1110
1102
|
"releaseTag": "Beta",
|
|
1111
1103
|
"isProtected": false,
|
|
1112
1104
|
"overloadIndex": 1,
|
|
1113
|
-
"parameters": [
|
|
1114
|
-
{
|
|
1115
|
-
"parameterName": "autoloading",
|
|
1116
|
-
"parameterTypeTokenRange": {
|
|
1117
|
-
"startIndex": 1,
|
|
1118
|
-
"endIndex": 2
|
|
1119
|
-
},
|
|
1120
|
-
"isOptional": true
|
|
1121
|
-
}
|
|
1122
|
-
],
|
|
1105
|
+
"parameters": [],
|
|
1123
1106
|
"isOptional": false,
|
|
1124
1107
|
"isAbstract": false,
|
|
1125
1108
|
"name": "tryActivatePopoutMode"
|
|
@@ -252,11 +252,9 @@ export declare class FoundationLayout extends FoundationElement implements Layou
|
|
|
252
252
|
* then if the layout goes into popout mode then it will place itself as the only child for the popout container you set.
|
|
253
253
|
* It is likely you'll want to attach this class to your design system provider.
|
|
254
254
|
*
|
|
255
|
-
* @param autoloading - If true, this respects the {@link LayoutPopoutConfig.loadAutomatically} property.
|
|
256
|
-
* You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.
|
|
257
255
|
* @beta
|
|
258
256
|
*/
|
|
259
|
-
tryActivatePopoutMode(
|
|
257
|
+
tryActivatePopoutMode(): boolean;
|
|
260
258
|
/**
|
|
261
259
|
* Try to load a layout from local storage, or return false. Only required if manually calling {@link FoundationLayout.registerItem}
|
|
262
260
|
* @remarks
|
|
@@ -592,30 +590,39 @@ export declare class FoundationLayout extends FoundationElement implements Layou
|
|
|
592
590
|
|
|
593
591
|
declare class FoundationLayoutPopoutController extends FASTElement {
|
|
594
592
|
channelName: string;
|
|
593
|
+
/**
|
|
594
|
+
* Reference to the parent layout to retrieve component state
|
|
595
|
+
* @internal
|
|
596
|
+
*/
|
|
597
|
+
parentLayout: LayoutComponent & {
|
|
598
|
+
getLayoutComponents(): any[][];
|
|
599
|
+
};
|
|
595
600
|
private layoutKey;
|
|
596
601
|
private channel;
|
|
597
602
|
private pollInterval;
|
|
598
603
|
private unloadHandler;
|
|
599
|
-
private
|
|
604
|
+
private lastUpdate;
|
|
600
605
|
private popoutRegistry;
|
|
601
606
|
connectedCallback(): void;
|
|
602
607
|
disconnectedCallback(): void;
|
|
603
608
|
private setupChannel;
|
|
604
609
|
private setupListener;
|
|
610
|
+
private applyStateToParent;
|
|
605
611
|
private setupUnloadListener;
|
|
606
612
|
private teardownUnloadListener;
|
|
607
613
|
private emitAutosave;
|
|
608
614
|
private startPolling;
|
|
609
615
|
private stopPolling;
|
|
610
616
|
private getGeometry;
|
|
611
|
-
private
|
|
617
|
+
private getComponentState;
|
|
618
|
+
private broadcastUpdate;
|
|
612
619
|
/**
|
|
613
620
|
* Opens a component in a popout window.
|
|
614
621
|
* @param registration - The registration ID of the component to pop out.
|
|
615
|
-
* @param
|
|
622
|
+
* @param popoutState - Optional state (geometry and component state) to use for the new window.
|
|
616
623
|
* @param uuid - UUID generator from parent layout
|
|
617
624
|
*/
|
|
618
|
-
openPopout(registration: string,
|
|
625
|
+
openPopout(registration: string, popoutState?: PopoutState, uuid?: any): Promise<Window>;
|
|
619
626
|
getRegistry(): {
|
|
620
627
|
[layoutKey: string]: PopoutState;
|
|
621
628
|
};
|
|
@@ -933,6 +940,7 @@ export declare class FoundationLayout extends FoundationElement implements Layou
|
|
|
933
940
|
*/
|
|
934
941
|
declare type PopoutState = {
|
|
935
942
|
geometry: PopoutGeometry;
|
|
943
|
+
state?: unknown;
|
|
936
944
|
};
|
|
937
945
|
|
|
938
946
|
/**
|
|
@@ -370,7 +370,7 @@ Removes all instances of a specified registered item from the layout.
|
|
|
370
370
|
</td></tr>
|
|
371
371
|
<tr><td>
|
|
372
372
|
|
|
373
|
-
[tryActivatePopoutMode(
|
|
373
|
+
[tryActivatePopoutMode()](./foundation-layout.foundationlayout.tryactivatepopoutmode.md)
|
|
374
374
|
|
|
375
375
|
|
|
376
376
|
</td><td>
|
|
@@ -12,45 +12,8 @@ If in a popout window from the dynamic layout, this function will run the flow t
|
|
|
12
12
|
**Signature:**
|
|
13
13
|
|
|
14
14
|
```typescript
|
|
15
|
-
tryActivatePopoutMode(
|
|
15
|
+
tryActivatePopoutMode(): boolean;
|
|
16
16
|
```
|
|
17
|
-
|
|
18
|
-
## Parameters
|
|
19
|
-
|
|
20
|
-
<table><thead><tr><th>
|
|
21
|
-
|
|
22
|
-
Parameter
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
</th><th>
|
|
26
|
-
|
|
27
|
-
Type
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
</th><th>
|
|
31
|
-
|
|
32
|
-
Description
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
</th></tr></thead>
|
|
36
|
-
<tbody><tr><td>
|
|
37
|
-
|
|
38
|
-
autoloading
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
</td><td>
|
|
42
|
-
|
|
43
|
-
boolean
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
</td><td>
|
|
47
|
-
|
|
48
|
-
_(Optional)_ If true, this respects the property. You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
</td></tr>
|
|
52
|
-
</tbody></table>
|
|
53
|
-
|
|
54
17
|
**Returns:**
|
|
55
18
|
|
|
56
19
|
boolean
|
|
@@ -75,7 +75,7 @@ export class FoundationLayout extends FoundationElement implements LayoutCompone
|
|
|
75
75
|
// @internal
|
|
76
76
|
requestLayoutReload(): void;
|
|
77
77
|
// @beta
|
|
78
|
-
tryActivatePopoutMode(
|
|
78
|
+
tryActivatePopoutMode(): boolean;
|
|
79
79
|
tryLoadLayoutFromLocalStorage(): boolean;
|
|
80
80
|
// @internal (undocumented)
|
|
81
81
|
usingDeclerativeAPI: boolean;
|
|
@@ -271,7 +271,7 @@ export function unregisterFactory(key: string): boolean;
|
|
|
271
271
|
|
|
272
272
|
// Warnings were encountered during analysis:
|
|
273
273
|
//
|
|
274
|
-
// src/utils/types.ts:
|
|
274
|
+
// src/utils/types.ts:56:5 - (ae-forgotten-export) The symbol "PopoutState" needs to be exported by the entry point index.d.ts
|
|
275
275
|
|
|
276
276
|
// (No @packageDocumentation comment for this package)
|
|
277
277
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genesislcap/foundation-layout",
|
|
3
3
|
"description": "Genesis Foundation UI App Layout",
|
|
4
|
-
"version": "14.393.3-FUI-2471.
|
|
4
|
+
"version": "14.393.3-FUI-2471.4",
|
|
5
5
|
"license": "SEE LICENSE IN license.txt",
|
|
6
6
|
"main": "dist/esm/index.js",
|
|
7
7
|
"types": "dist/foundation-layout.d.ts",
|
|
@@ -38,22 +38,22 @@
|
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@genesislcap/foundation-testing": "14.393.3-FUI-2471.
|
|
42
|
-
"@genesislcap/genx": "14.393.3-FUI-2471.
|
|
43
|
-
"@genesislcap/rollup-builder": "14.393.3-FUI-2471.
|
|
44
|
-
"@genesislcap/ts-builder": "14.393.3-FUI-2471.
|
|
45
|
-
"@genesislcap/uvu-playwright-builder": "14.393.3-FUI-2471.
|
|
46
|
-
"@genesislcap/vite-builder": "14.393.3-FUI-2471.
|
|
47
|
-
"@genesislcap/webpack-builder": "14.393.3-FUI-2471.
|
|
41
|
+
"@genesislcap/foundation-testing": "14.393.3-FUI-2471.4",
|
|
42
|
+
"@genesislcap/genx": "14.393.3-FUI-2471.4",
|
|
43
|
+
"@genesislcap/rollup-builder": "14.393.3-FUI-2471.4",
|
|
44
|
+
"@genesislcap/ts-builder": "14.393.3-FUI-2471.4",
|
|
45
|
+
"@genesislcap/uvu-playwright-builder": "14.393.3-FUI-2471.4",
|
|
46
|
+
"@genesislcap/vite-builder": "14.393.3-FUI-2471.4",
|
|
47
|
+
"@genesislcap/webpack-builder": "14.393.3-FUI-2471.4"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@genesis-community/golden-layout": "^2.11.0",
|
|
51
|
-
"@genesislcap/foundation-broadcast-channel": "14.393.3-FUI-2471.
|
|
52
|
-
"@genesislcap/foundation-comms": "14.393.3-FUI-2471.
|
|
53
|
-
"@genesislcap/foundation-events": "14.393.3-FUI-2471.
|
|
54
|
-
"@genesislcap/foundation-logger": "14.393.3-FUI-2471.
|
|
55
|
-
"@genesislcap/foundation-ui": "14.393.3-FUI-2471.
|
|
56
|
-
"@genesislcap/foundation-utils": "14.393.3-FUI-2471.
|
|
51
|
+
"@genesislcap/foundation-broadcast-channel": "14.393.3-FUI-2471.4",
|
|
52
|
+
"@genesislcap/foundation-comms": "14.393.3-FUI-2471.4",
|
|
53
|
+
"@genesislcap/foundation-events": "14.393.3-FUI-2471.4",
|
|
54
|
+
"@genesislcap/foundation-logger": "14.393.3-FUI-2471.4",
|
|
55
|
+
"@genesislcap/foundation-ui": "14.393.3-FUI-2471.4",
|
|
56
|
+
"@genesislcap/foundation-utils": "14.393.3-FUI-2471.4",
|
|
57
57
|
"@microsoft/fast-components": "2.30.6",
|
|
58
58
|
"@microsoft/fast-element": "1.14.0",
|
|
59
59
|
"@microsoft/fast-foundation": "2.50.0"
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"access": "public"
|
|
68
68
|
},
|
|
69
69
|
"customElements": "dist/custom-elements.json",
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "774e9a5e7f1787920487b93a1f3ab6683fd08453"
|
|
71
71
|
}
|