@fluxo-dev/shell 0.0.26 → 0.0.28
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/index.esm.js +468 -169
- package/package.json +7 -7
- package/src/lib/app.d.ts +1 -0
- package/src/lib/layouts/main/app-layout.d.ts +1 -0
- package/src/lib/layouts/main/content.d.ts +4 -1
- package/src/lib/layouts/main/shell-session-provider.d.ts +18 -0
- package/src/lib/layouts/main/shell-session.d.ts +29 -0
- package/src/lib/pages/settings/apps/embedded-backend-module-item.d.ts +5 -0
- package/src/lib/pages/settings/security/components/permission/update-permission.d.ts +0 -5
package/index.esm.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import React__default, { useState, Suspense, forwardRef, createElement as createElement$2, useEffect, createContext, useContext, useLayoutEffect, useRef,
|
|
3
|
+
import React__default, { useState, Suspense, forwardRef, createElement as createElement$2, useEffect, useCallback, createContext, useContext, useLayoutEffect, useRef, useMemo, memo, isValidElement, cloneElement, useImperativeHandle, lazy } from 'react';
|
|
4
4
|
import { useSelector, Provider } from 'react-redux';
|
|
5
|
-
import { useLocation, Navigate, Outlet, useNavigate, Link, Route, useSearchParams, createBrowserRouter, RouterProvider } from 'react-router-dom';
|
|
6
|
-
import { DataCard, NoData, ConfirmModal, ShellPage, ErrorPage as ErrorPage$1, WaitData, FlxRoutes } from '@fluxo-dev/ui-components';
|
|
5
|
+
import { useLocation, Navigate, Outlet, useNavigate, Link, useOutlet, Route, useSearchParams, createBrowserRouter, RouterProvider } from 'react-router-dom';
|
|
6
|
+
import { DataCard, useFlxNavigate, NoData, ConfirmModal, ShellPage, ErrorPage as ErrorPage$1, WaitData, FlxRoutes } from '@fluxo-dev/ui-components';
|
|
7
7
|
import { ModuleLoader } from '@fluxo-dev/shell-mfe';
|
|
8
|
-
import { Text, TextInput, ActionIcon, useMantineTheme, AppShell, Stack, Group, Burger, Badge, Drawer, NavLink, Popover, Avatar, Center, Divider, Button, Anchor, Tooltip, Space, useMantineColorScheme, UnstyledButton, Box, ThemeIcon, Collapse, ScrollArea, rem, Loader, Grid, PasswordInput, ColorSwatch, FileButton, NumberInput, Alert, ColorInput, Checkbox, Modal, Switch, Select, Chip, LoadingOverlay, Image as Image$1, Menu,
|
|
8
|
+
import { Text, TextInput, ActionIcon, useMantineTheme, AppShell, Stack, Group, Burger, Badge, Drawer, NavLink, Popover, Avatar, Center, Divider, Button, Tabs, Anchor, Tooltip, Space, useMantineColorScheme, UnstyledButton, Box, ThemeIcon, Collapse, ScrollArea, rem, Loader, Grid, PasswordInput, ColorSwatch, FileButton, NumberInput, Alert, ColorInput, Checkbox, Modal, Switch, Select, Chip, LoadingOverlay, Image as Image$1, Menu, Table, MultiSelect, Card, MantineProvider } from '@mantine/core';
|
|
9
9
|
import { openSpotlight, Spotlight } from '@mantine/spotlight';
|
|
10
10
|
import { useOs, useHotkeys, useIdle } from '@mantine/hooks';
|
|
11
11
|
import { AppType, AppState, FluxoStateDispatcher, FluxoClientSys, UserService, AppMenuContextType, ApiKeyService, DomainRoleService, EmailServerProviderType } from '@fluxo-dev/api-client-base';
|
|
@@ -1133,17 +1133,78 @@ for (var COLLECTION_NAME in DOMIterables) {
|
|
|
1133
1133
|
}
|
|
1134
1134
|
}
|
|
1135
1135
|
|
|
1136
|
-
var $$8 = _export;
|
|
1137
1136
|
var DESCRIPTORS$3 = descriptors;
|
|
1137
|
+
var fails$5 = fails$c;
|
|
1138
|
+
var objectKeys = objectKeys$2;
|
|
1139
|
+
var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols;
|
|
1140
|
+
var propertyIsEnumerableModule = objectPropertyIsEnumerable;
|
|
1141
|
+
var toObject$2 = toObject$4;
|
|
1142
|
+
var IndexedObject = indexedObject;
|
|
1143
|
+
|
|
1144
|
+
var nativeAssign = Object.assign;
|
|
1145
|
+
var defineProperty$2 = Object.defineProperty;
|
|
1146
|
+
|
|
1147
|
+
// `Object.assign` method
|
|
1148
|
+
// https://tc39.github.io/ecma262/#sec-object.assign
|
|
1149
|
+
var objectAssign$1 = !nativeAssign || fails$5(function () {
|
|
1150
|
+
// should have correct order of operations (Edge bug)
|
|
1151
|
+
if (DESCRIPTORS$3 && nativeAssign({ b: 1 }, nativeAssign(defineProperty$2({}, 'a', {
|
|
1152
|
+
enumerable: true,
|
|
1153
|
+
get: function () {
|
|
1154
|
+
defineProperty$2(this, 'b', {
|
|
1155
|
+
value: 3,
|
|
1156
|
+
enumerable: false
|
|
1157
|
+
});
|
|
1158
|
+
}
|
|
1159
|
+
}), { b: 2 })).b !== 1) return true;
|
|
1160
|
+
// should work with symbols and should have deterministic property order (V8 bug)
|
|
1161
|
+
var A = {};
|
|
1162
|
+
var B = {};
|
|
1163
|
+
// eslint-disable-next-line no-undef
|
|
1164
|
+
var symbol = Symbol();
|
|
1165
|
+
var alphabet = 'abcdefghijklmnopqrst';
|
|
1166
|
+
A[symbol] = 7;
|
|
1167
|
+
alphabet.split('').forEach(function (chr) { B[chr] = chr; });
|
|
1168
|
+
return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;
|
|
1169
|
+
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
|
|
1170
|
+
var T = toObject$2(target);
|
|
1171
|
+
var argumentsLength = arguments.length;
|
|
1172
|
+
var index = 1;
|
|
1173
|
+
var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
|
|
1174
|
+
var propertyIsEnumerable = propertyIsEnumerableModule.f;
|
|
1175
|
+
while (argumentsLength > index) {
|
|
1176
|
+
var S = IndexedObject(arguments[index++]);
|
|
1177
|
+
var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);
|
|
1178
|
+
var length = keys.length;
|
|
1179
|
+
var j = 0;
|
|
1180
|
+
var key;
|
|
1181
|
+
while (length > j) {
|
|
1182
|
+
key = keys[j++];
|
|
1183
|
+
if (!DESCRIPTORS$3 || propertyIsEnumerable.call(S, key)) T[key] = S[key];
|
|
1184
|
+
}
|
|
1185
|
+
} return T;
|
|
1186
|
+
} : nativeAssign;
|
|
1187
|
+
|
|
1188
|
+
var $$8 = _export;
|
|
1189
|
+
var assign$1 = objectAssign$1;
|
|
1190
|
+
|
|
1191
|
+
// `Object.assign` method
|
|
1192
|
+
// https://tc39.github.io/ecma262/#sec-object.assign
|
|
1193
|
+
$$8({ target: 'Object', stat: true, forced: Object.assign !== assign$1 }, {
|
|
1194
|
+
assign: assign$1
|
|
1195
|
+
});
|
|
1196
|
+
|
|
1197
|
+
var $$7 = _export;
|
|
1198
|
+
var DESCRIPTORS$2 = descriptors;
|
|
1138
1199
|
var global$9 = global$l;
|
|
1139
1200
|
var has$4 = has$e;
|
|
1140
1201
|
var isObject$5 = isObject$b;
|
|
1141
|
-
var defineProperty$
|
|
1202
|
+
var defineProperty$1 = objectDefineProperty.f;
|
|
1142
1203
|
var copyConstructorProperties = copyConstructorProperties$2;
|
|
1143
1204
|
|
|
1144
1205
|
var NativeSymbol = global$9.Symbol;
|
|
1145
1206
|
|
|
1146
|
-
if (DESCRIPTORS$
|
|
1207
|
+
if (DESCRIPTORS$2 && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||
|
|
1147
1208
|
// Safari 12 bug
|
|
1148
1209
|
NativeSymbol().description !== undefined
|
|
1149
1210
|
)) {
|
|
@@ -1163,20 +1224,20 @@ if (DESCRIPTORS$3 && typeof NativeSymbol == 'function' && (!('description' in Na
|
|
|
1163
1224
|
symbolPrototype.constructor = SymbolWrapper;
|
|
1164
1225
|
|
|
1165
1226
|
var symbolToString = symbolPrototype.toString;
|
|
1166
|
-
var native = String(NativeSymbol('test')) == 'Symbol(test)';
|
|
1227
|
+
var native$1 = String(NativeSymbol('test')) == 'Symbol(test)';
|
|
1167
1228
|
var regexp = /^Symbol\((.*)\)[^)]+$/;
|
|
1168
|
-
defineProperty$
|
|
1229
|
+
defineProperty$1(symbolPrototype, 'description', {
|
|
1169
1230
|
configurable: true,
|
|
1170
1231
|
get: function description() {
|
|
1171
1232
|
var symbol = isObject$5(this) ? this.valueOf() : this;
|
|
1172
1233
|
var string = symbolToString.call(symbol);
|
|
1173
1234
|
if (has$4(EmptyStringDescriptionStore, symbol)) return '';
|
|
1174
|
-
var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');
|
|
1235
|
+
var desc = native$1 ? string.slice(7, -1) : string.replace(regexp, '$1');
|
|
1175
1236
|
return desc === '' ? undefined : desc;
|
|
1176
1237
|
}
|
|
1177
1238
|
});
|
|
1178
1239
|
|
|
1179
|
-
$$
|
|
1240
|
+
$$7({ global: true, forced: true }, {
|
|
1180
1241
|
Symbol: SymbolWrapper
|
|
1181
1242
|
});
|
|
1182
1243
|
}
|
|
@@ -1195,7 +1256,7 @@ var redefineAll$1 = function (target, src, options) {
|
|
|
1195
1256
|
var getBuiltIn$3 = getBuiltIn$6;
|
|
1196
1257
|
var definePropertyModule = objectDefineProperty;
|
|
1197
1258
|
var wellKnownSymbol$a = wellKnownSymbol$g;
|
|
1198
|
-
var DESCRIPTORS$
|
|
1259
|
+
var DESCRIPTORS$1 = descriptors;
|
|
1199
1260
|
|
|
1200
1261
|
var SPECIES$3 = wellKnownSymbol$a('species');
|
|
1201
1262
|
|
|
@@ -1203,7 +1264,7 @@ var setSpecies$1 = function (CONSTRUCTOR_NAME) {
|
|
|
1203
1264
|
var Constructor = getBuiltIn$3(CONSTRUCTOR_NAME);
|
|
1204
1265
|
var defineProperty = definePropertyModule.f;
|
|
1205
1266
|
|
|
1206
|
-
if (DESCRIPTORS$
|
|
1267
|
+
if (DESCRIPTORS$1 && Constructor && !Constructor[SPECIES$3]) {
|
|
1207
1268
|
defineProperty(Constructor, SPECIES$3, {
|
|
1208
1269
|
configurable: true,
|
|
1209
1270
|
get: function () { return this; }
|
|
@@ -1429,7 +1490,7 @@ var userAgent$1 = engineUserAgent;
|
|
|
1429
1490
|
var engineIsIos = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent$1);
|
|
1430
1491
|
|
|
1431
1492
|
var global$7 = global$l;
|
|
1432
|
-
var fails$
|
|
1493
|
+
var fails$4 = fails$c;
|
|
1433
1494
|
var classof$4 = classofRaw$1;
|
|
1434
1495
|
var bind$2 = functionBindContext;
|
|
1435
1496
|
var html = html$2;
|
|
@@ -1510,7 +1571,7 @@ if (!set || !clear) {
|
|
|
1510
1571
|
global$7.addEventListener &&
|
|
1511
1572
|
typeof postMessage == 'function' &&
|
|
1512
1573
|
!global$7.importScripts &&
|
|
1513
|
-
!fails$
|
|
1574
|
+
!fails$4(post) &&
|
|
1514
1575
|
location.protocol !== 'file:'
|
|
1515
1576
|
) {
|
|
1516
1577
|
defer = post;
|
|
@@ -1686,7 +1747,7 @@ if (v8) {
|
|
|
1686
1747
|
|
|
1687
1748
|
var engineV8Version = version && +version;
|
|
1688
1749
|
|
|
1689
|
-
var $$
|
|
1750
|
+
var $$6 = _export;
|
|
1690
1751
|
var global$3 = global$l;
|
|
1691
1752
|
var getBuiltIn$1 = getBuiltIn$6;
|
|
1692
1753
|
var NativePromise$1 = nativePromiseConstructor;
|
|
@@ -1978,7 +2039,7 @@ if (FORCED$1) {
|
|
|
1978
2039
|
}, { unsafe: true });
|
|
1979
2040
|
|
|
1980
2041
|
// wrap fetch result
|
|
1981
|
-
if (typeof $fetch == 'function') $$
|
|
2042
|
+
if (typeof $fetch == 'function') $$6({ global: true, enumerable: true, forced: true }, {
|
|
1982
2043
|
// eslint-disable-next-line no-unused-vars
|
|
1983
2044
|
fetch: function fetch(input /* , init */) {
|
|
1984
2045
|
return promiseResolve$1(PromiseConstructor, $fetch.apply(global$3, arguments));
|
|
@@ -1987,7 +2048,7 @@ if (FORCED$1) {
|
|
|
1987
2048
|
}
|
|
1988
2049
|
}
|
|
1989
2050
|
|
|
1990
|
-
$$
|
|
2051
|
+
$$6({ global: true, wrap: true, forced: FORCED$1 }, {
|
|
1991
2052
|
Promise: PromiseConstructor
|
|
1992
2053
|
});
|
|
1993
2054
|
|
|
@@ -1997,7 +2058,7 @@ setSpecies(PROMISE);
|
|
|
1997
2058
|
PromiseWrapper = getBuiltIn$1(PROMISE);
|
|
1998
2059
|
|
|
1999
2060
|
// statics
|
|
2000
|
-
$$
|
|
2061
|
+
$$6({ target: PROMISE, stat: true, forced: FORCED$1 }, {
|
|
2001
2062
|
// `Promise.reject` method
|
|
2002
2063
|
// https://tc39.github.io/ecma262/#sec-promise.reject
|
|
2003
2064
|
reject: function reject(r) {
|
|
@@ -2007,7 +2068,7 @@ $$7({ target: PROMISE, stat: true, forced: FORCED$1 }, {
|
|
|
2007
2068
|
}
|
|
2008
2069
|
});
|
|
2009
2070
|
|
|
2010
|
-
$$
|
|
2071
|
+
$$6({ target: PROMISE, stat: true, forced: FORCED$1 }, {
|
|
2011
2072
|
// `Promise.resolve` method
|
|
2012
2073
|
// https://tc39.github.io/ecma262/#sec-promise.resolve
|
|
2013
2074
|
resolve: function resolve(x) {
|
|
@@ -2015,7 +2076,7 @@ $$7({ target: PROMISE, stat: true, forced: FORCED$1 }, {
|
|
|
2015
2076
|
}
|
|
2016
2077
|
});
|
|
2017
2078
|
|
|
2018
|
-
$$
|
|
2079
|
+
$$6({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
|
|
2019
2080
|
// `Promise.all` method
|
|
2020
2081
|
// https://tc39.github.io/ecma262/#sec-promise.all
|
|
2021
2082
|
all: function all(iterable) {
|
|
@@ -2062,22 +2123,22 @@ $$7({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
|
|
|
2062
2123
|
}
|
|
2063
2124
|
});
|
|
2064
2125
|
|
|
2065
|
-
var $$
|
|
2126
|
+
var $$5 = _export;
|
|
2066
2127
|
var NativePromise = nativePromiseConstructor;
|
|
2067
|
-
var fails$
|
|
2128
|
+
var fails$3 = fails$c;
|
|
2068
2129
|
var getBuiltIn = getBuiltIn$6;
|
|
2069
2130
|
var speciesConstructor = speciesConstructor$2;
|
|
2070
2131
|
var promiseResolve = promiseResolve$2;
|
|
2071
2132
|
var redefine$1 = redefine$6.exports;
|
|
2072
2133
|
|
|
2073
2134
|
// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829
|
|
2074
|
-
var NON_GENERIC = !!NativePromise && fails$
|
|
2135
|
+
var NON_GENERIC = !!NativePromise && fails$3(function () {
|
|
2075
2136
|
NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });
|
|
2076
2137
|
});
|
|
2077
2138
|
|
|
2078
2139
|
// `Promise.prototype.finally` method
|
|
2079
2140
|
// https://tc39.github.io/ecma262/#sec-promise.prototype.finally
|
|
2080
|
-
$$
|
|
2141
|
+
$$5({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {
|
|
2081
2142
|
'finally': function (onFinally) {
|
|
2082
2143
|
var C = speciesConstructor(this, getBuiltIn('Promise'));
|
|
2083
2144
|
var isFunction = typeof onFinally == 'function';
|
|
@@ -2478,7 +2539,7 @@ var getOwnPropertySymbols = Object.getOwnPropertySymbols;
|
|
|
2478
2539
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
2479
2540
|
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
|
|
2480
2541
|
|
|
2481
|
-
function toObject$
|
|
2542
|
+
function toObject$1(val) {
|
|
2482
2543
|
if (val === null || val === undefined) {
|
|
2483
2544
|
throw new TypeError('Object.assign cannot be called with null or undefined');
|
|
2484
2545
|
}
|
|
@@ -2530,9 +2591,9 @@ function shouldUseNative() {
|
|
|
2530
2591
|
}
|
|
2531
2592
|
}
|
|
2532
2593
|
|
|
2533
|
-
var objectAssign
|
|
2594
|
+
var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {
|
|
2534
2595
|
var from;
|
|
2535
|
-
var to = toObject$
|
|
2596
|
+
var to = toObject$1(target);
|
|
2536
2597
|
var symbols;
|
|
2537
2598
|
|
|
2538
2599
|
for (var s = 1; s < arguments.length; s++) {
|
|
@@ -2680,7 +2741,7 @@ var checkPropTypes_1 = checkPropTypes$1;
|
|
|
2680
2741
|
*/
|
|
2681
2742
|
|
|
2682
2743
|
var ReactIs$1 = reactIs.exports;
|
|
2683
|
-
var assign
|
|
2744
|
+
var assign = objectAssign;
|
|
2684
2745
|
|
|
2685
2746
|
var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;
|
|
2686
2747
|
var has$1 = has$3;
|
|
@@ -3119,7 +3180,7 @@ var factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) {
|
|
|
3119
3180
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
|
|
3120
3181
|
}
|
|
3121
3182
|
// We need to check all keys in case some are required but missing from props.
|
|
3122
|
-
var allKeys = assign
|
|
3183
|
+
var allKeys = assign({}, props[propName], shapeTypes);
|
|
3123
3184
|
for (var key in allKeys) {
|
|
3124
3185
|
var checker = shapeTypes[key];
|
|
3125
3186
|
if (has$1(shapeTypes, key) && typeof checker !== 'function') {
|
|
@@ -4525,8 +4586,310 @@ function AppBar(props) {
|
|
|
4525
4586
|
});
|
|
4526
4587
|
}
|
|
4527
4588
|
|
|
4528
|
-
|
|
4529
|
-
|
|
4589
|
+
// Unique ID creation requires a high quality random # generator. In the browser we therefore
|
|
4590
|
+
// require the crypto API and do not support built-in fallback to lower quality random number
|
|
4591
|
+
// generators (like Math.random()).
|
|
4592
|
+
let getRandomValues;
|
|
4593
|
+
const rnds8 = new Uint8Array(16);
|
|
4594
|
+
function rng() {
|
|
4595
|
+
// lazy load so that environments that need to polyfill have a chance to do so
|
|
4596
|
+
if (!getRandomValues) {
|
|
4597
|
+
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
|
|
4598
|
+
getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
|
|
4599
|
+
|
|
4600
|
+
if (!getRandomValues) {
|
|
4601
|
+
throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
|
|
4602
|
+
}
|
|
4603
|
+
}
|
|
4604
|
+
|
|
4605
|
+
return getRandomValues(rnds8);
|
|
4606
|
+
}
|
|
4607
|
+
|
|
4608
|
+
/**
|
|
4609
|
+
* Convert array of 16 byte values to UUID string format of the form:
|
|
4610
|
+
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
4611
|
+
*/
|
|
4612
|
+
|
|
4613
|
+
const byteToHex = [];
|
|
4614
|
+
|
|
4615
|
+
for (let i = 0; i < 256; ++i) {
|
|
4616
|
+
byteToHex.push((i + 0x100).toString(16).slice(1));
|
|
4617
|
+
}
|
|
4618
|
+
|
|
4619
|
+
function unsafeStringify(arr, offset = 0) {
|
|
4620
|
+
// Note: Be careful editing this code! It's been tuned for performance
|
|
4621
|
+
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
4622
|
+
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
4623
|
+
}
|
|
4624
|
+
|
|
4625
|
+
const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
4626
|
+
var native = {
|
|
4627
|
+
randomUUID
|
|
4628
|
+
};
|
|
4629
|
+
|
|
4630
|
+
function v4(options, buf, offset) {
|
|
4631
|
+
if (native.randomUUID && !buf && !options) {
|
|
4632
|
+
return native.randomUUID();
|
|
4633
|
+
}
|
|
4634
|
+
|
|
4635
|
+
options = options || {};
|
|
4636
|
+
const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
4637
|
+
|
|
4638
|
+
rnds[6] = rnds[6] & 0x0f | 0x40;
|
|
4639
|
+
rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
|
|
4640
|
+
|
|
4641
|
+
if (buf) {
|
|
4642
|
+
offset = offset || 0;
|
|
4643
|
+
|
|
4644
|
+
for (let i = 0; i < 16; ++i) {
|
|
4645
|
+
buf[offset + i] = rnds[i];
|
|
4646
|
+
}
|
|
4647
|
+
|
|
4648
|
+
return buf;
|
|
4649
|
+
}
|
|
4650
|
+
|
|
4651
|
+
return unsafeStringify(rnds);
|
|
4652
|
+
}
|
|
4653
|
+
|
|
4654
|
+
class ShellSessionCollection {
|
|
4655
|
+
constructor(sessions = [], currentSessionId) {
|
|
4656
|
+
this._sessions = sessions;
|
|
4657
|
+
this._currentSessionId = currentSessionId;
|
|
4658
|
+
}
|
|
4659
|
+
get currentSession() {
|
|
4660
|
+
return this._currentSessionId ? this.getSession(this._currentSessionId) : null;
|
|
4661
|
+
}
|
|
4662
|
+
addSession(title, element, url) {
|
|
4663
|
+
const session = new ShellSession(title, element, url);
|
|
4664
|
+
this._sessions.push(session);
|
|
4665
|
+
return session;
|
|
4666
|
+
}
|
|
4667
|
+
removeSession(id) {
|
|
4668
|
+
this._sessions = this._sessions.filter(s => s.id !== id);
|
|
4669
|
+
}
|
|
4670
|
+
getSession(id) {
|
|
4671
|
+
return this._sessions.find(s => s.id === id);
|
|
4672
|
+
}
|
|
4673
|
+
get sessions() {
|
|
4674
|
+
return this._sessions;
|
|
4675
|
+
}
|
|
4676
|
+
getCurrentSessionId() {
|
|
4677
|
+
return this._currentSessionId;
|
|
4678
|
+
}
|
|
4679
|
+
getCurrentSession() {
|
|
4680
|
+
return this.getSession(this._currentSessionId);
|
|
4681
|
+
}
|
|
4682
|
+
setCurrentSession(id) {
|
|
4683
|
+
this._currentSessionId = id;
|
|
4684
|
+
}
|
|
4685
|
+
updateSession(id, title, element, url) {
|
|
4686
|
+
const session = this.getSession(id);
|
|
4687
|
+
if (session) {
|
|
4688
|
+
session.updateSession(title, element, url);
|
|
4689
|
+
}
|
|
4690
|
+
}
|
|
4691
|
+
getPreviuosSessionId() {
|
|
4692
|
+
const index = this._sessions.findIndex(s => s.id === this._currentSessionId);
|
|
4693
|
+
if (index > 0) {
|
|
4694
|
+
return this._sessions[index - 1].id;
|
|
4695
|
+
}
|
|
4696
|
+
return this._sessions[this._sessions.length - 1].id;
|
|
4697
|
+
}
|
|
4698
|
+
getNextSessionId() {
|
|
4699
|
+
const index = this._sessions.findIndex(s => s.id === this._currentSessionId);
|
|
4700
|
+
if (index < this._sessions.length - 1) {
|
|
4701
|
+
return this._sessions[index + 1].id;
|
|
4702
|
+
}
|
|
4703
|
+
return this._sessions[0].id;
|
|
4704
|
+
}
|
|
4705
|
+
}
|
|
4706
|
+
class ShellSession {
|
|
4707
|
+
constructor(title, element, url) {
|
|
4708
|
+
this._id = v4();
|
|
4709
|
+
this._title = title;
|
|
4710
|
+
this._element = element;
|
|
4711
|
+
this._url = url;
|
|
4712
|
+
}
|
|
4713
|
+
get id() {
|
|
4714
|
+
return this._id;
|
|
4715
|
+
}
|
|
4716
|
+
get title() {
|
|
4717
|
+
return this._title;
|
|
4718
|
+
}
|
|
4719
|
+
get element() {
|
|
4720
|
+
return this._element;
|
|
4721
|
+
}
|
|
4722
|
+
get url() {
|
|
4723
|
+
return this._url;
|
|
4724
|
+
}
|
|
4725
|
+
updateSession(title, element, url) {
|
|
4726
|
+
this._title = title;
|
|
4727
|
+
this._element = element;
|
|
4728
|
+
this._url = url;
|
|
4729
|
+
}
|
|
4730
|
+
}
|
|
4731
|
+
|
|
4732
|
+
const defaultState = {
|
|
4733
|
+
addSession: () => '',
|
|
4734
|
+
removeSession: () => {},
|
|
4735
|
+
getSession: () => {},
|
|
4736
|
+
sessions: () => [],
|
|
4737
|
+
updateSession: () => {},
|
|
4738
|
+
getCurrentSessionId: () => null,
|
|
4739
|
+
getCurrentSession: () => null,
|
|
4740
|
+
setCurrentSession: () => {},
|
|
4741
|
+
isCurrentSessionDisableable: () => false
|
|
4742
|
+
};
|
|
4743
|
+
const ShellSessionContext = /*#__PURE__*/React__default.createContext(defaultState);
|
|
4744
|
+
function ShellSessionProvider(props) {
|
|
4745
|
+
useHotkeys([['shift+s', () => {
|
|
4746
|
+
addSession(`Dashboard`, null, '/');
|
|
4747
|
+
}]]);
|
|
4748
|
+
useHotkeys([['shift+x', () => {
|
|
4749
|
+
removeSession(getCurrentSessionId());
|
|
4750
|
+
}]], [], true);
|
|
4751
|
+
useHotkeys([['shift+ArrowLeft', () => {
|
|
4752
|
+
setCurrentSession(sessionCollection.getPreviuosSessionId());
|
|
4753
|
+
}]], [], true);
|
|
4754
|
+
useHotkeys([['shift+ArrowRight', () => {
|
|
4755
|
+
setCurrentSession(sessionCollection.getNextSessionId());
|
|
4756
|
+
}]], [], true);
|
|
4757
|
+
const [sessionCollection, setSessionCollection] = React__default.useState(new ShellSessionCollection([], null));
|
|
4758
|
+
const navigate = useFlxNavigate();
|
|
4759
|
+
const addSession = useCallback((title, element, url) => {
|
|
4760
|
+
const cloned = new ShellSessionCollection(sessionCollection.sessions, sessionCollection.getCurrentSessionId());
|
|
4761
|
+
const s = cloned.addSession(title, element, url);
|
|
4762
|
+
cloned.setCurrentSession(s.id);
|
|
4763
|
+
setSessionCollection(cloned);
|
|
4764
|
+
navigate(s.url, {
|
|
4765
|
+
state: {
|
|
4766
|
+
title: title
|
|
4767
|
+
}
|
|
4768
|
+
});
|
|
4769
|
+
return s.id;
|
|
4770
|
+
}, [sessionCollection]);
|
|
4771
|
+
const removeSession = useCallback(id => {
|
|
4772
|
+
if (!isCurrentSessionDisableable()) return;
|
|
4773
|
+
const cloned = new ShellSessionCollection(sessionCollection.sessions, sessionCollection.getCurrentSessionId());
|
|
4774
|
+
cloned.removeSession(id);
|
|
4775
|
+
cloned.setCurrentSession(cloned.sessions[cloned.sessions.length - 1].id);
|
|
4776
|
+
setSessionCollection(cloned);
|
|
4777
|
+
}, [sessionCollection]);
|
|
4778
|
+
const getSession = useCallback(id => {
|
|
4779
|
+
return sessionCollection.getSession(id);
|
|
4780
|
+
}, [sessionCollection]);
|
|
4781
|
+
const sessions = useCallback(() => {
|
|
4782
|
+
return sessionCollection.sessions;
|
|
4783
|
+
}, [sessionCollection]);
|
|
4784
|
+
const updateSession = useCallback((id, title, element, url) => {
|
|
4785
|
+
const cloned = new ShellSessionCollection(sessionCollection.sessions, sessionCollection.getCurrentSessionId());
|
|
4786
|
+
cloned.updateSession(id, title, element, url);
|
|
4787
|
+
setSessionCollection(cloned);
|
|
4788
|
+
}, [sessionCollection]);
|
|
4789
|
+
const setCurrentSession = useCallback(id => {
|
|
4790
|
+
const cloned = new ShellSessionCollection(sessionCollection.sessions, id);
|
|
4791
|
+
cloned.setCurrentSession(id);
|
|
4792
|
+
setSessionCollection(cloned);
|
|
4793
|
+
navigate(cloned.getCurrentSession().url, {
|
|
4794
|
+
state: {
|
|
4795
|
+
title: cloned.getCurrentSession().title
|
|
4796
|
+
}
|
|
4797
|
+
});
|
|
4798
|
+
}, [sessionCollection]);
|
|
4799
|
+
const getCurrentSessionId = useCallback(() => {
|
|
4800
|
+
return sessionCollection.getCurrentSessionId();
|
|
4801
|
+
}, [sessionCollection]);
|
|
4802
|
+
const getCurrentSession = useCallback(() => {
|
|
4803
|
+
return sessionCollection.getCurrentSession();
|
|
4804
|
+
}, [sessionCollection]);
|
|
4805
|
+
const isCurrentSessionDisableable = useCallback(() => {
|
|
4806
|
+
return sessionCollection.sessions.length > 1;
|
|
4807
|
+
}, [sessionCollection]);
|
|
4808
|
+
return jsx(ShellSessionContext.Provider, {
|
|
4809
|
+
value: {
|
|
4810
|
+
sessions: sessions,
|
|
4811
|
+
addSession: addSession,
|
|
4812
|
+
removeSession: removeSession,
|
|
4813
|
+
getSession: getSession,
|
|
4814
|
+
updateSession: updateSession,
|
|
4815
|
+
getCurrentSessionId: getCurrentSessionId,
|
|
4816
|
+
getCurrentSession: getCurrentSession,
|
|
4817
|
+
setCurrentSession: setCurrentSession,
|
|
4818
|
+
isCurrentSessionDisableable: isCurrentSessionDisableable
|
|
4819
|
+
},
|
|
4820
|
+
children: props.children
|
|
4821
|
+
});
|
|
4822
|
+
}
|
|
4823
|
+
|
|
4824
|
+
function AppContent(props) {
|
|
4825
|
+
const sessionContext = React__default.useContext(ShellSessionContext);
|
|
4826
|
+
useEffect(() => {
|
|
4827
|
+
if (props.withMultipleSessions) {
|
|
4828
|
+
const newSessionId = sessionContext.addSession('Dashboard', null, '/');
|
|
4829
|
+
sessionContext.setCurrentSession(newSessionId);
|
|
4830
|
+
}
|
|
4831
|
+
}, []);
|
|
4832
|
+
const outletContext = useOutlet();
|
|
4833
|
+
const location = useLocation();
|
|
4834
|
+
useEffect(() => {
|
|
4835
|
+
var _a, _b;
|
|
4836
|
+
if (props.withMultipleSessions) {
|
|
4837
|
+
const currentSession = sessionContext.getCurrentSession();
|
|
4838
|
+
if (currentSession) {
|
|
4839
|
+
sessionContext.updateSession(currentSession.id, (_b = (_a = location.state) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : 'Sessione', outletContext, location.pathname);
|
|
4840
|
+
}
|
|
4841
|
+
}
|
|
4842
|
+
}, [location]);
|
|
4843
|
+
return jsx(Fragment, {
|
|
4844
|
+
children: props.withMultipleSessions ? jsxs(Tabs, {
|
|
4845
|
+
value: sessionContext.getCurrentSessionId(),
|
|
4846
|
+
keepMounted: true,
|
|
4847
|
+
children: [jsxs(Tabs.List, {
|
|
4848
|
+
style: {
|
|
4849
|
+
alignItems: 'center',
|
|
4850
|
+
position: 'sticky',
|
|
4851
|
+
width: '100%',
|
|
4852
|
+
overflowAnchor: 'none',
|
|
4853
|
+
top: 48,
|
|
4854
|
+
zIndex: 50,
|
|
4855
|
+
marginBottom: 0,
|
|
4856
|
+
background: '#fff'
|
|
4857
|
+
},
|
|
4858
|
+
children: [sessionContext.sessions().map((session, i) => {
|
|
4859
|
+
return jsx(Tabs.Tab, {
|
|
4860
|
+
style: {
|
|
4861
|
+
borderTop: '2px solid #ececec'
|
|
4862
|
+
},
|
|
4863
|
+
value: session.id,
|
|
4864
|
+
onClick: v => {
|
|
4865
|
+
sessionContext.setCurrentSession(session.id);
|
|
4866
|
+
},
|
|
4867
|
+
children: session.title
|
|
4868
|
+
}, session.id);
|
|
4869
|
+
}), jsxs(Group, {
|
|
4870
|
+
ml: 'auto',
|
|
4871
|
+
children: [jsx(ActionIcon, {
|
|
4872
|
+
disabled: !sessionContext.isCurrentSessionDisableable(),
|
|
4873
|
+
onClick: () => sessionContext.removeSession(sessionContext.getCurrentSessionId()),
|
|
4874
|
+
children: jsx(IconX, {
|
|
4875
|
+
size: 18
|
|
4876
|
+
})
|
|
4877
|
+
}), jsx(ActionIcon, {
|
|
4878
|
+
onClick: () => sessionContext.addSession("Test", null, "/"),
|
|
4879
|
+
ml: 'auto',
|
|
4880
|
+
children: jsx(IconPlus, {
|
|
4881
|
+
size: 18
|
|
4882
|
+
})
|
|
4883
|
+
})]
|
|
4884
|
+
})]
|
|
4885
|
+
}), sessionContext.sessions().map(session => {
|
|
4886
|
+
return jsx(Tabs.Panel, {
|
|
4887
|
+
value: session.id,
|
|
4888
|
+
children: session.element
|
|
4889
|
+
}, session.id);
|
|
4890
|
+
})]
|
|
4891
|
+
}) : jsx(Outlet, {})
|
|
4892
|
+
});
|
|
4530
4893
|
}
|
|
4531
4894
|
|
|
4532
4895
|
function FooterBar(props) {
|
|
@@ -4607,6 +4970,9 @@ function FooterBar(props) {
|
|
|
4607
4970
|
children: [hasAdminAccess && jsxs(Fragment, {
|
|
4608
4971
|
children: [jsx(Link, {
|
|
4609
4972
|
to: '/settings',
|
|
4973
|
+
state: {
|
|
4974
|
+
title: 'Amministrazione'
|
|
4975
|
+
},
|
|
4610
4976
|
style: {
|
|
4611
4977
|
textDecoration: 'none'
|
|
4612
4978
|
},
|
|
@@ -4687,6 +5053,9 @@ function NavBarItem({
|
|
|
4687
5053
|
color: colorScheme.colorScheme === 'dark' ? theme.colors.dark[0] : theme.colors.gray[7],
|
|
4688
5054
|
borderLeft: `1px solid ${colorScheme.colorScheme === 'dark' ? theme.colors.dark[4] : theme.colors.gray[3]}`
|
|
4689
5055
|
},
|
|
5056
|
+
state: {
|
|
5057
|
+
title: link.label
|
|
5058
|
+
},
|
|
4690
5059
|
to: '/' + link.routerLink,
|
|
4691
5060
|
children: link.label
|
|
4692
5061
|
}, link.label + '_' + i);
|
|
@@ -4696,7 +5065,11 @@ function NavBarItem({
|
|
|
4696
5065
|
children: navbarOpened ? jsxs(Fragment, {
|
|
4697
5066
|
children: [jsx(UnstyledButton, {
|
|
4698
5067
|
onClick: () => {
|
|
4699
|
-
if (hasLinks) setOpened(o => !o);else navigate('/' + routerLink
|
|
5068
|
+
if (hasLinks) setOpened(o => !o);else navigate('/' + routerLink, {
|
|
5069
|
+
state: {
|
|
5070
|
+
title: label
|
|
5071
|
+
}
|
|
5072
|
+
});
|
|
4700
5073
|
},
|
|
4701
5074
|
className: level === 0 ? style['control'] : style['controlSub'],
|
|
4702
5075
|
children: jsxs(Group, {
|
|
@@ -4835,67 +5208,6 @@ function Navbar() {
|
|
|
4835
5208
|
});
|
|
4836
5209
|
}
|
|
4837
5210
|
|
|
4838
|
-
var DESCRIPTORS$1 = descriptors;
|
|
4839
|
-
var fails$3 = fails$c;
|
|
4840
|
-
var objectKeys = objectKeys$2;
|
|
4841
|
-
var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols;
|
|
4842
|
-
var propertyIsEnumerableModule = objectPropertyIsEnumerable;
|
|
4843
|
-
var toObject$1 = toObject$4;
|
|
4844
|
-
var IndexedObject = indexedObject;
|
|
4845
|
-
|
|
4846
|
-
var nativeAssign = Object.assign;
|
|
4847
|
-
var defineProperty$1 = Object.defineProperty;
|
|
4848
|
-
|
|
4849
|
-
// `Object.assign` method
|
|
4850
|
-
// https://tc39.github.io/ecma262/#sec-object.assign
|
|
4851
|
-
var objectAssign = !nativeAssign || fails$3(function () {
|
|
4852
|
-
// should have correct order of operations (Edge bug)
|
|
4853
|
-
if (DESCRIPTORS$1 && nativeAssign({ b: 1 }, nativeAssign(defineProperty$1({}, 'a', {
|
|
4854
|
-
enumerable: true,
|
|
4855
|
-
get: function () {
|
|
4856
|
-
defineProperty$1(this, 'b', {
|
|
4857
|
-
value: 3,
|
|
4858
|
-
enumerable: false
|
|
4859
|
-
});
|
|
4860
|
-
}
|
|
4861
|
-
}), { b: 2 })).b !== 1) return true;
|
|
4862
|
-
// should work with symbols and should have deterministic property order (V8 bug)
|
|
4863
|
-
var A = {};
|
|
4864
|
-
var B = {};
|
|
4865
|
-
// eslint-disable-next-line no-undef
|
|
4866
|
-
var symbol = Symbol();
|
|
4867
|
-
var alphabet = 'abcdefghijklmnopqrst';
|
|
4868
|
-
A[symbol] = 7;
|
|
4869
|
-
alphabet.split('').forEach(function (chr) { B[chr] = chr; });
|
|
4870
|
-
return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;
|
|
4871
|
-
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
|
|
4872
|
-
var T = toObject$1(target);
|
|
4873
|
-
var argumentsLength = arguments.length;
|
|
4874
|
-
var index = 1;
|
|
4875
|
-
var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
|
|
4876
|
-
var propertyIsEnumerable = propertyIsEnumerableModule.f;
|
|
4877
|
-
while (argumentsLength > index) {
|
|
4878
|
-
var S = IndexedObject(arguments[index++]);
|
|
4879
|
-
var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);
|
|
4880
|
-
var length = keys.length;
|
|
4881
|
-
var j = 0;
|
|
4882
|
-
var key;
|
|
4883
|
-
while (length > j) {
|
|
4884
|
-
key = keys[j++];
|
|
4885
|
-
if (!DESCRIPTORS$1 || propertyIsEnumerable.call(S, key)) T[key] = S[key];
|
|
4886
|
-
}
|
|
4887
|
-
} return T;
|
|
4888
|
-
} : nativeAssign;
|
|
4889
|
-
|
|
4890
|
-
var $$5 = _export;
|
|
4891
|
-
var assign = objectAssign;
|
|
4892
|
-
|
|
4893
|
-
// `Object.assign` method
|
|
4894
|
-
// https://tc39.github.io/ecma262/#sec-object.assign
|
|
4895
|
-
$$5({ target: 'Object', stat: true, forced: Object.assign !== assign }, {
|
|
4896
|
-
assign: assign
|
|
4897
|
-
});
|
|
4898
|
-
|
|
4899
5211
|
class AppMenuService {
|
|
4900
5212
|
getSpotlightMenu(menu, parentTitle) {
|
|
4901
5213
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -4940,7 +5252,11 @@ function ShellSpotlight() {
|
|
|
4940
5252
|
return Object.assign(Object.assign({}, group), {
|
|
4941
5253
|
actions: group.actions.map(action => {
|
|
4942
5254
|
return Object.assign(Object.assign({}, action), {
|
|
4943
|
-
onClick: () => navigateTo(action.id
|
|
5255
|
+
onClick: () => navigateTo(action.id, {
|
|
5256
|
+
state: {
|
|
5257
|
+
title: action.label
|
|
5258
|
+
}
|
|
5259
|
+
})
|
|
4944
5260
|
});
|
|
4945
5261
|
})
|
|
4946
5262
|
});
|
|
@@ -4972,7 +5288,7 @@ function AppLayout(props) {
|
|
|
4972
5288
|
const {
|
|
4973
5289
|
navbarOpened
|
|
4974
5290
|
} = useSelector(state => state.layout);
|
|
4975
|
-
return jsxs(
|
|
5291
|
+
return jsxs(ShellSessionProvider, {
|
|
4976
5292
|
children: [jsxs(AppShell, {
|
|
4977
5293
|
padding: 0,
|
|
4978
5294
|
styles: {
|
|
@@ -5001,7 +5317,9 @@ function AppLayout(props) {
|
|
|
5001
5317
|
}), jsx(Navbar, {}), jsx(AppShell.Main, {
|
|
5002
5318
|
children: jsx(Suspense, {
|
|
5003
5319
|
fallback: jsx(Loader, {}),
|
|
5004
|
-
children: jsx(AppContent, {
|
|
5320
|
+
children: jsx(AppContent, {
|
|
5321
|
+
withMultipleSessions: props.withMultipleSessions
|
|
5322
|
+
})
|
|
5005
5323
|
})
|
|
5006
5324
|
}), jsx(AppShell.Footer, {
|
|
5007
5325
|
children: jsx(FooterBar, {
|
|
@@ -20870,8 +21188,14 @@ function MenuCreateForm(props) {
|
|
|
20870
21188
|
}, [context, role, user, name]);
|
|
20871
21189
|
const onSubmit = () => {
|
|
20872
21190
|
if (saveButtonIsDisabled()) return;
|
|
21191
|
+
let ctx = AppMenuContextType.Default;
|
|
21192
|
+
if (context === '1') {
|
|
21193
|
+
ctx = AppMenuContextType.DomainRole;
|
|
21194
|
+
} else if (context === '2') {
|
|
21195
|
+
ctx = AppMenuContextType.User;
|
|
21196
|
+
}
|
|
20873
21197
|
FluxoClientSys.Instance.configuration.createAppMenu({
|
|
20874
|
-
contextType:
|
|
21198
|
+
contextType: ctx,
|
|
20875
21199
|
name: name,
|
|
20876
21200
|
domainRoleId: context === '1' ? +role : 0,
|
|
20877
21201
|
copyItemsFromWebMenuId: 0,
|
|
@@ -20888,7 +21212,7 @@ function MenuCreateForm(props) {
|
|
|
20888
21212
|
}).catch(err => {
|
|
20889
21213
|
showNotification({
|
|
20890
21214
|
title: 'Errore',
|
|
20891
|
-
message:
|
|
21215
|
+
message: `Si è verificato un errore durante la creazione del menu: ${err.message}`,
|
|
20892
21216
|
color: 'red',
|
|
20893
21217
|
autoClose: 5000
|
|
20894
21218
|
});
|
|
@@ -27806,6 +28130,31 @@ function EmbeddedModuleItem(props) {
|
|
|
27806
28130
|
});
|
|
27807
28131
|
}
|
|
27808
28132
|
|
|
28133
|
+
function EmbeddedBackendModuleItem(props) {
|
|
28134
|
+
React__default.useState(false);
|
|
28135
|
+
return jsx(Group, {
|
|
28136
|
+
justify: 'space-between',
|
|
28137
|
+
style: {
|
|
28138
|
+
border: '1px solid #dedede',
|
|
28139
|
+
padding: 15
|
|
28140
|
+
},
|
|
28141
|
+
children: jsx(Group, {
|
|
28142
|
+
children: jsxs(Stack, {
|
|
28143
|
+
gap: 0,
|
|
28144
|
+
children: [jsxs("span", {
|
|
28145
|
+
children: [props.app.description, " ", jsxs("small", {
|
|
28146
|
+
children: ["(", props.app.version, ")"]
|
|
28147
|
+
})]
|
|
28148
|
+
}), jsxs("small", {
|
|
28149
|
+
children: [props.app.name, " - ", jsx("b", {
|
|
28150
|
+
children: props.app.author
|
|
28151
|
+
})]
|
|
28152
|
+
})]
|
|
28153
|
+
})
|
|
28154
|
+
})
|
|
28155
|
+
});
|
|
28156
|
+
}
|
|
28157
|
+
|
|
27809
28158
|
function AppsList(props) {
|
|
27810
28159
|
const [apps, setApps] = useState([]);
|
|
27811
28160
|
const [showInstallComponent, setShowInstallComponent] = useState(false);
|
|
@@ -27884,7 +28233,7 @@ function AppsList(props) {
|
|
|
27884
28233
|
}, app.id))]
|
|
27885
28234
|
})]
|
|
27886
28235
|
}), jsx(DataCard, {
|
|
27887
|
-
title: 'Apps di sistema',
|
|
28236
|
+
title: 'Apps di sistema (frontend)',
|
|
27888
28237
|
children: jsxs(Stack, {
|
|
27889
28238
|
gap: 16,
|
|
27890
28239
|
children: [embeddedModules.length === 0 && jsx(NoData, {
|
|
@@ -27897,6 +28246,18 @@ function AppsList(props) {
|
|
|
27897
28246
|
}, i))
|
|
27898
28247
|
}) : jsx(Loader, {})]
|
|
27899
28248
|
})
|
|
28249
|
+
}), jsx(DataCard, {
|
|
28250
|
+
title: 'Apps di sistema (server)',
|
|
28251
|
+
children: jsxs(Stack, {
|
|
28252
|
+
gap: 16,
|
|
28253
|
+
children: [apps.length === 0 && jsx(NoData, {
|
|
28254
|
+
message: 'Nessun modulo di sistema trovato'
|
|
28255
|
+
}), !loading ? jsx(Fragment, {
|
|
28256
|
+
children: apps.filter(a => a.type === AppType.Backend).map((app, i) => jsx(EmbeddedBackendModuleItem, {
|
|
28257
|
+
app: app
|
|
28258
|
+
}, i))
|
|
28259
|
+
}) : jsx(Loader, {})]
|
|
28260
|
+
})
|
|
27900
28261
|
}), jsxs(DataCard, {
|
|
27901
28262
|
title: 'Apps JIT (Sviluppo)',
|
|
27902
28263
|
actions: [{
|
|
@@ -27953,52 +28314,6 @@ function AppsList(props) {
|
|
|
27953
28314
|
});
|
|
27954
28315
|
}
|
|
27955
28316
|
|
|
27956
|
-
function UpdatePermission(props) {
|
|
27957
|
-
const [permissionsJson, setPermissionsJson] = React__default.useState('');
|
|
27958
|
-
const updatePermissions = () => {
|
|
27959
|
-
try {
|
|
27960
|
-
const data = JSON.parse(permissionsJson);
|
|
27961
|
-
FluxoClientSys.Instance.security.permission.installPermissions(data).then(() => {
|
|
27962
|
-
showNotification({
|
|
27963
|
-
title: 'Operazione completata',
|
|
27964
|
-
color: 'green',
|
|
27965
|
-
message: `I permessi sono stati aggiornati con successo`
|
|
27966
|
-
});
|
|
27967
|
-
props.onUpdated();
|
|
27968
|
-
}, err => {
|
|
27969
|
-
showNotification({
|
|
27970
|
-
title: 'Operazione fallita',
|
|
27971
|
-
color: 'red',
|
|
27972
|
-
message: `Non è stato possibile aggiornare i permessi: ${err.message}`
|
|
27973
|
-
});
|
|
27974
|
-
});
|
|
27975
|
-
} catch (err) {
|
|
27976
|
-
showNotification({
|
|
27977
|
-
title: 'Operazione fallita',
|
|
27978
|
-
color: 'red',
|
|
27979
|
-
message: `Il file non è valido.`
|
|
27980
|
-
});
|
|
27981
|
-
}
|
|
27982
|
-
};
|
|
27983
|
-
return jsxs(Stack, {
|
|
27984
|
-
children: [jsx(Textarea, {
|
|
27985
|
-
minRows: 20,
|
|
27986
|
-
value: permissionsJson,
|
|
27987
|
-
onChange: v => setPermissionsJson(v.target.value)
|
|
27988
|
-
}), jsxs(Group, {
|
|
27989
|
-
justify: 'right',
|
|
27990
|
-
children: [jsx(Button, {
|
|
27991
|
-
onClick: props.onCanceled,
|
|
27992
|
-
children: "Annulla"
|
|
27993
|
-
}), jsx(Button, {
|
|
27994
|
-
onClick: updatePermissions,
|
|
27995
|
-
disabled: !permissionsJson,
|
|
27996
|
-
children: "Aggiorna"
|
|
27997
|
-
})]
|
|
27998
|
-
})]
|
|
27999
|
-
});
|
|
28000
|
-
}
|
|
28001
|
-
|
|
28002
28317
|
function CreateScopeForm(props) {
|
|
28003
28318
|
const [permissionScopes] = useState(props.permissionScopes);
|
|
28004
28319
|
const [createdScopes, setCreatedScopes] = useState([]);
|
|
@@ -28159,7 +28474,6 @@ function CreateCustomPermissionForm(props) {
|
|
|
28159
28474
|
|
|
28160
28475
|
function PermissionGrid() {
|
|
28161
28476
|
const [permissions, setPermissions] = useState([]);
|
|
28162
|
-
const [updatePermissionModal, setUpdatePermissionModal] = useState(false);
|
|
28163
28477
|
const [permissionScopes, setPermissionScopes] = useState([]);
|
|
28164
28478
|
const [permissionScopesLoaded, setPermissionScopesLoaded] = useState(false);
|
|
28165
28479
|
const [currentScope, setCurrentScope] = useState(null);
|
|
@@ -28244,14 +28558,6 @@ function PermissionGrid() {
|
|
|
28244
28558
|
return jsx(DataCard, {
|
|
28245
28559
|
title: 'Permessi',
|
|
28246
28560
|
actions: [{
|
|
28247
|
-
icon: jsx(IconArrowDown, {
|
|
28248
|
-
size: 18
|
|
28249
|
-
}),
|
|
28250
|
-
label: 'Installa permessi',
|
|
28251
|
-
onClick: () => {
|
|
28252
|
-
setUpdatePermissionModal(true);
|
|
28253
|
-
}
|
|
28254
|
-
}, {
|
|
28255
28561
|
icon: jsx(IconPlus, {
|
|
28256
28562
|
size: 18
|
|
28257
28563
|
}),
|
|
@@ -28427,19 +28733,6 @@ function PermissionGrid() {
|
|
|
28427
28733
|
})
|
|
28428
28734
|
})]
|
|
28429
28735
|
})]
|
|
28430
|
-
}), jsx(Modal, {
|
|
28431
|
-
centered: true,
|
|
28432
|
-
opened: updatePermissionModal,
|
|
28433
|
-
onClose: () => {
|
|
28434
|
-
setUpdatePermissionModal(false);
|
|
28435
|
-
},
|
|
28436
|
-
title: "Aggiorna permessi",
|
|
28437
|
-
children: jsx(UpdatePermission, {
|
|
28438
|
-
onUpdated: () => {
|
|
28439
|
-
setUpdatePermissionModal(false);
|
|
28440
|
-
},
|
|
28441
|
-
onCanceled: () => setUpdatePermissionModal(false)
|
|
28442
|
-
})
|
|
28443
28736
|
}), jsx(Modal, {
|
|
28444
28737
|
centered: true,
|
|
28445
28738
|
opened: createPermissionScopeModalOpened,
|
|
@@ -29433,7 +29726,7 @@ function EmailServerConfiguration() {
|
|
|
29433
29726
|
})]
|
|
29434
29727
|
})]
|
|
29435
29728
|
})
|
|
29436
|
-
}),
|
|
29729
|
+
}), configExists && jsx(DataCard, {
|
|
29437
29730
|
title: "Test invio email",
|
|
29438
29731
|
children: jsxs(Stack, {
|
|
29439
29732
|
children: [jsx(Alert, {
|
|
@@ -30190,12 +30483,16 @@ function FluxoShell(props) {
|
|
|
30190
30483
|
const generateRoutesFromEmbeddedModules = frontend => {
|
|
30191
30484
|
const embeddedModules = [...frontend.modules, reportsModule, workflowModule];
|
|
30192
30485
|
const rObjs = [];
|
|
30486
|
+
let routes = {};
|
|
30193
30487
|
embeddedModules.forEach(eModule => {
|
|
30194
30488
|
rObjs.push({
|
|
30195
30489
|
path: `/${eModule.scope}/${eModule.name}/*`,
|
|
30196
30490
|
children: eModule.getRouteObject()
|
|
30197
30491
|
});
|
|
30492
|
+
const aa = eModule.getRouteMap();
|
|
30493
|
+
routes = Object.assign(Object.assign({}, routes), aa);
|
|
30198
30494
|
});
|
|
30495
|
+
FluxoStateDispatcher.dispatchSetRoutes(routes);
|
|
30199
30496
|
return rObjs;
|
|
30200
30497
|
};
|
|
30201
30498
|
const generateRoutesFromJitApps = frontend => {
|
|
@@ -30357,6 +30654,7 @@ function FluxoShell(props) {
|
|
|
30357
30654
|
const FrontendLayout = () => {
|
|
30358
30655
|
var _a, _b;
|
|
30359
30656
|
return (_a = frontendByRender === null || frontendByRender === void 0 ? void 0 : frontendByRender.layout) !== null && _a !== void 0 ? _a : jsx(AppLayout, {
|
|
30657
|
+
withMultipleSessions: props.withMultipleSessions,
|
|
30360
30658
|
brandName: (_b = props.brandName) !== null && _b !== void 0 ? _b : 'Fluxo',
|
|
30361
30659
|
appVersion: props.appVersion
|
|
30362
30660
|
});
|
|
@@ -30376,6 +30674,7 @@ function FluxoShell(props) {
|
|
|
30376
30674
|
FluxoStateDispatcher.dispatchSetCurrentFrontend(res.currentFrontend);
|
|
30377
30675
|
FluxoStateDispatcher.dispatchAllowedFrontends(res.frontends);
|
|
30378
30676
|
FluxoStateDispatcher.dispatchHasAdminAccess(res.hasAdminAccess);
|
|
30677
|
+
if (props.withMultipleSessions) FluxoStateDispatcher.dispatchSetSessionMode('multi-session');else FluxoStateDispatcher.dispatchSetSessionMode('single-session');
|
|
30379
30678
|
const rObjs = [generateAuthRoutes(), {
|
|
30380
30679
|
path: 'frontend-switcher',
|
|
30381
30680
|
element: jsx(ProtectedRoute, {
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluxo-dev/shell",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@fluxo-dev/shell-hub": "0.0.
|
|
6
|
-
"@fluxo-dev/shell-korebi": "0.0.
|
|
7
|
-
"@fluxo-dev/shell-mfe": "0.0.
|
|
8
|
-
"@fluxo-dev/shell-printing": "0.0.
|
|
9
|
-
"@fluxo-dev/shell-reporting": "0.0.
|
|
10
|
-
"@fluxo-dev/shell-workflow": "0.0.
|
|
5
|
+
"@fluxo-dev/shell-hub": "0.0.28",
|
|
6
|
+
"@fluxo-dev/shell-korebi": "0.0.28",
|
|
7
|
+
"@fluxo-dev/shell-mfe": "0.0.28",
|
|
8
|
+
"@fluxo-dev/shell-printing": "0.0.28",
|
|
9
|
+
"@fluxo-dev/shell-reporting": "0.0.28",
|
|
10
|
+
"@fluxo-dev/shell-workflow": "0.0.28"
|
|
11
11
|
},
|
|
12
12
|
"module": "./index.esm.js",
|
|
13
13
|
"type": "module",
|
package/src/lib/app.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export interface FluxoShellProps {
|
|
|
16
16
|
frontends: ShellFrontend[];
|
|
17
17
|
clientInitialization: () => Promise<void>;
|
|
18
18
|
brandName?: string;
|
|
19
|
+
withMultipleSessions: boolean;
|
|
19
20
|
}
|
|
20
21
|
export declare function FluxoShell(props: FluxoShellProps): import("react/jsx-runtime").JSX.Element;
|
|
21
22
|
export default FluxoShell;
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
export interface AppContentProps {
|
|
2
|
+
withMultipleSessions: boolean;
|
|
3
|
+
}
|
|
4
|
+
declare function AppContent(props: AppContentProps): import("react/jsx-runtime").JSX.Element;
|
|
2
5
|
export default AppContent;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ShellSession } from "./shell-session";
|
|
2
|
+
import React from "react";
|
|
3
|
+
interface ShellSessionContextData {
|
|
4
|
+
addSession: (title: string, element: React.ReactElement | null, url: string) => string;
|
|
5
|
+
removeSession: (id: string) => void;
|
|
6
|
+
getSession: (id: string) => void;
|
|
7
|
+
sessions: () => ShellSession[];
|
|
8
|
+
updateSession: (id: string, title: string, element: React.ReactElement | null, url: string) => void;
|
|
9
|
+
getCurrentSessionId: () => string | null;
|
|
10
|
+
getCurrentSession: () => ShellSession | null | undefined;
|
|
11
|
+
setCurrentSession: (id: string) => void;
|
|
12
|
+
isCurrentSessionDisableable: () => boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const ShellSessionContext: React.Context<ShellSessionContextData>;
|
|
15
|
+
export declare function ShellSessionProvider(props: {
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export declare class ShellSessionCollection {
|
|
3
|
+
private _sessions;
|
|
4
|
+
private _currentSessionId;
|
|
5
|
+
constructor(sessions: ShellSession[] | undefined, currentSessionId: string | null);
|
|
6
|
+
get currentSession(): ShellSession | null | undefined;
|
|
7
|
+
addSession(title: string, element: React.ReactElement | null, url: string): ShellSession;
|
|
8
|
+
removeSession(id: string): void;
|
|
9
|
+
getSession(id: string): ShellSession | undefined;
|
|
10
|
+
get sessions(): ShellSession[];
|
|
11
|
+
getCurrentSessionId(): string | null;
|
|
12
|
+
getCurrentSession(): ShellSession | null | undefined;
|
|
13
|
+
setCurrentSession(id: string): void;
|
|
14
|
+
updateSession(id: string, title: string, element: React.ReactElement | null, url: string): void;
|
|
15
|
+
getPreviuosSessionId(): string;
|
|
16
|
+
getNextSessionId(): string;
|
|
17
|
+
}
|
|
18
|
+
export declare class ShellSession {
|
|
19
|
+
private readonly _id;
|
|
20
|
+
private _title;
|
|
21
|
+
private _element;
|
|
22
|
+
private _url;
|
|
23
|
+
constructor(title: string, element: React.ReactElement | null, url: string);
|
|
24
|
+
get id(): string;
|
|
25
|
+
get title(): string;
|
|
26
|
+
get element(): React.ReactElement | null;
|
|
27
|
+
get url(): string;
|
|
28
|
+
updateSession(title: string, element: React.ReactElement | null, url: string): void;
|
|
29
|
+
}
|