@headless-adminapp/app 0.0.17-alpha.25 → 0.0.17-alpha.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/app/LayoutProvider.d.ts +2 -1
- package/app/LayoutProvider.js +3 -2
- package/command/hooks/useBaseCommandHandlerContext.js +15 -6
- package/datagrid/DataGridProvider/utils.js +8 -8
- package/datagrid/hooks/useMainGridCommands.js +16 -3
- package/metadata/hooks/useMetadata.js +2 -2
- package/package.json +2 -2
- package/transport/context.d.ts +3 -1
- package/transport/context.js +16 -1
- package/transport/hooks/index.d.ts +1 -0
- package/transport/hooks/index.js +1 -0
- package/transport/hooks/useFileService.d.ts +1 -0
- package/transport/hooks/useFileService.js +12 -0
- package/datagrid/DataGridProvider/DataSelectionResolve.d.ts +0 -1
- package/datagrid/DataGridProvider/DataSelectionResolve.js +0 -13
package/app/LayoutProvider.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IDataService } from '@headless-adminapp/core/transport';
|
|
1
|
+
import { IDataService, IFileService } from '@headless-adminapp/core/transport';
|
|
2
2
|
import { QueryClient } from '@tanstack/react-query';
|
|
3
3
|
import { FC, PropsWithChildren } from 'react';
|
|
4
4
|
import { AuthProviderPlaceholderProps, AuthProviderProps } from '../auth';
|
|
@@ -10,6 +10,7 @@ export interface LayoutProviderProps {
|
|
|
10
10
|
queryClient: QueryClient;
|
|
11
11
|
localeProps: LocaleProviderProps;
|
|
12
12
|
dataService: IDataService;
|
|
13
|
+
fileService?: IFileService;
|
|
13
14
|
authProps?: AuthProviderProps;
|
|
14
15
|
authPlaceholder?: FC<AuthProviderPlaceholderProps>;
|
|
15
16
|
metadataProps: MetadataProviderProps;
|
package/app/LayoutProvider.js
CHANGED
|
@@ -12,8 +12,9 @@ const recordset_1 = require("../recordset");
|
|
|
12
12
|
const route_1 = require("../route");
|
|
13
13
|
const toast_notification_1 = require("../toast-notification");
|
|
14
14
|
const transport_1 = require("../transport");
|
|
15
|
+
const context_1 = require("../transport/context");
|
|
15
16
|
const AuthWrapper_1 = require("./AuthWrapper");
|
|
16
|
-
const LayoutProvider = ({ authPlaceholder, authProps, dataService, localeProps, metadataProps, queryClient, routeProps, children, containers: { DialogContainer, ProgressIndicatorContainer, ToastNotificationContainer, }, }) => {
|
|
17
|
-
return ((0, jsx_runtime_1.jsx)(route_1.RouteProvider, Object.assign({}, routeProps, { children: (0, jsx_runtime_1.jsx)(react_query_1.QueryClientProvider, { client: queryClient, children: (0, jsx_runtime_1.jsx)(locale_1.LocaleProvider, Object.assign({}, localeProps, { children: (0, jsx_runtime_1.jsx)(metadata_1.MetadataProvider, Object.assign({}, metadataProps, { children: (0, jsx_runtime_1.jsx)(transport_1.DataServiceContext.Provider, { value: dataService, children: (0, jsx_runtime_1.jsx)(dialog_1.DialogProvider, { children: (0, jsx_runtime_1.jsx)(progress_indicator_1.ProgressIndicatorProvider, { children: (0, jsx_runtime_1.jsxs)(toast_notification_1.ToastNotificationProvider, { children: [(0, jsx_runtime_1.jsx)(DialogContainer, {}), (0, jsx_runtime_1.jsx)(ProgressIndicatorContainer, {}), (0, jsx_runtime_1.jsx)(ToastNotificationContainer, {}), (0, jsx_runtime_1.jsx)(auth_1.AuthProvider, Object.assign({}, authProps, { children: (0, jsx_runtime_1.jsx)(AuthWrapper_1.AuthWrapper, { Placeholder: authPlaceholder, children: (0, jsx_runtime_1.jsx)(recordset_1.RecordSetProvider, { children: children }) }) }))] }) }) }) }) })) })) }) })));
|
|
17
|
+
const LayoutProvider = ({ authPlaceholder, authProps, dataService, fileService, localeProps, metadataProps, queryClient, routeProps, children, containers: { DialogContainer, ProgressIndicatorContainer, ToastNotificationContainer, }, }) => {
|
|
18
|
+
return ((0, jsx_runtime_1.jsx)(route_1.RouteProvider, Object.assign({}, routeProps, { children: (0, jsx_runtime_1.jsx)(react_query_1.QueryClientProvider, { client: queryClient, children: (0, jsx_runtime_1.jsx)(locale_1.LocaleProvider, Object.assign({}, localeProps, { children: (0, jsx_runtime_1.jsx)(metadata_1.MetadataProvider, Object.assign({}, metadataProps, { children: (0, jsx_runtime_1.jsx)(transport_1.DataServiceContext.Provider, { value: dataService, children: (0, jsx_runtime_1.jsx)(context_1.FileServiceContext.Provider, { value: fileService !== null && fileService !== void 0 ? fileService : context_1.noopFileService, children: (0, jsx_runtime_1.jsx)(dialog_1.DialogProvider, { children: (0, jsx_runtime_1.jsx)(progress_indicator_1.ProgressIndicatorProvider, { children: (0, jsx_runtime_1.jsxs)(toast_notification_1.ToastNotificationProvider, { children: [(0, jsx_runtime_1.jsx)(DialogContainer, {}), (0, jsx_runtime_1.jsx)(ProgressIndicatorContainer, {}), (0, jsx_runtime_1.jsx)(ToastNotificationContainer, {}), (0, jsx_runtime_1.jsx)(auth_1.AuthProvider, Object.assign({}, authProps, { children: (0, jsx_runtime_1.jsx)(AuthWrapper_1.AuthWrapper, { Placeholder: authPlaceholder, children: (0, jsx_runtime_1.jsx)(recordset_1.RecordSetProvider, { children: children }) }) }))] }) }) }) }) }) })) })) }) })));
|
|
18
19
|
};
|
|
19
20
|
exports.LayoutProvider = LayoutProvider;
|
|
@@ -4,6 +4,7 @@ exports.useUtility = useUtility;
|
|
|
4
4
|
exports.useBaseCommandHandlerContext = useBaseCommandHandlerContext;
|
|
5
5
|
const navigation_1 = require("@headless-adminapp/app/navigation");
|
|
6
6
|
const react_query_1 = require("@tanstack/react-query");
|
|
7
|
+
const react_1 = require("react");
|
|
7
8
|
const hooks_1 = require("../../dialog/hooks");
|
|
8
9
|
const locale_1 = require("../../locale");
|
|
9
10
|
const hooks_2 = require("../../metadata/hooks");
|
|
@@ -17,7 +18,7 @@ function useUtility() {
|
|
|
17
18
|
const openErrorDialog = (0, hooks_1.useOpenErrorDialog)();
|
|
18
19
|
const openPromptDialog = (0, hooks_1.useOpenPromptDialog)();
|
|
19
20
|
const openToastNotification = (0, useOpenToastNotification_1.useOpenToastNotification)();
|
|
20
|
-
return {
|
|
21
|
+
return (0, react_1.useMemo)(() => ({
|
|
21
22
|
hideProgressIndicator,
|
|
22
23
|
showProgressIndicator,
|
|
23
24
|
openAlertDialog,
|
|
@@ -25,13 +26,21 @@ function useUtility() {
|
|
|
25
26
|
openErrorDialog,
|
|
26
27
|
openPromptDialog,
|
|
27
28
|
showNotification: openToastNotification,
|
|
28
|
-
}
|
|
29
|
+
}), [
|
|
30
|
+
hideProgressIndicator,
|
|
31
|
+
openAlertDialog,
|
|
32
|
+
openConfirmDialog,
|
|
33
|
+
openErrorDialog,
|
|
34
|
+
openPromptDialog,
|
|
35
|
+
openToastNotification,
|
|
36
|
+
showProgressIndicator,
|
|
37
|
+
]);
|
|
29
38
|
}
|
|
30
39
|
function useNavigation() {
|
|
31
40
|
const openForm = (0, navigation_1.useOpenForm)();
|
|
32
|
-
return {
|
|
41
|
+
return (0, react_1.useMemo)(() => ({
|
|
33
42
|
openForm,
|
|
34
|
-
};
|
|
43
|
+
}), [openForm]);
|
|
35
44
|
}
|
|
36
45
|
function useBaseCommandHandlerContext() {
|
|
37
46
|
const dataService = (0, transport_1.useDataService)();
|
|
@@ -40,12 +49,12 @@ function useBaseCommandHandlerContext() {
|
|
|
40
49
|
const utility = useUtility();
|
|
41
50
|
const locale = (0, locale_1.useLocale)();
|
|
42
51
|
const navigation = useNavigation();
|
|
43
|
-
return {
|
|
52
|
+
return (0, react_1.useMemo)(() => ({
|
|
44
53
|
dataService,
|
|
45
54
|
queryClient,
|
|
46
55
|
utility,
|
|
47
56
|
stores,
|
|
48
57
|
locale,
|
|
49
58
|
navigation,
|
|
50
|
-
};
|
|
59
|
+
}), [dataService, queryClient, stores, utility, locale, navigation]);
|
|
51
60
|
}
|
|
@@ -75,17 +75,17 @@ function transformColumnFilter(filter, schema, schemaStore) {
|
|
|
75
75
|
return transformedResult;
|
|
76
76
|
}
|
|
77
77
|
function mergeConditions(schema, filter, extraFilter, columnFilters, schemaStore) {
|
|
78
|
-
const
|
|
78
|
+
const filters = [];
|
|
79
79
|
if (filter) {
|
|
80
|
-
|
|
80
|
+
filters.push(filter);
|
|
81
81
|
}
|
|
82
82
|
if (extraFilter) {
|
|
83
|
-
|
|
83
|
+
filters.push(extraFilter);
|
|
84
84
|
}
|
|
85
85
|
if (columnFilters) {
|
|
86
86
|
const transformedColumnFilters = transformColumnFilter(columnFilters, schema, schemaStore);
|
|
87
87
|
if (transformedColumnFilters) {
|
|
88
|
-
|
|
88
|
+
filters.push({
|
|
89
89
|
type: 'and',
|
|
90
90
|
conditions: Object.entries(transformedColumnFilters).map(([field, condition]) => {
|
|
91
91
|
return {
|
|
@@ -98,15 +98,15 @@ function mergeConditions(schema, filter, extraFilter, columnFilters, schemaStore
|
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
|
-
if (
|
|
101
|
+
if (filters.length === 0) {
|
|
102
102
|
return null;
|
|
103
103
|
}
|
|
104
|
-
if (
|
|
105
|
-
return
|
|
104
|
+
if (filters.length === 1) {
|
|
105
|
+
return filters[0];
|
|
106
106
|
}
|
|
107
107
|
return {
|
|
108
108
|
type: 'and',
|
|
109
|
-
|
|
109
|
+
filters: filters,
|
|
110
110
|
};
|
|
111
111
|
}
|
|
112
112
|
function collectExpandedKeys(columns) {
|
|
@@ -64,7 +64,7 @@ function useGridControlContext() {
|
|
|
64
64
|
var _a;
|
|
65
65
|
return ((_a = data === null || data === void 0 ? void 0 : data.records) !== null && _a !== void 0 ? _a : []).filter((record) => selectedIdsObj[record[schema.idAttribute]]);
|
|
66
66
|
}, [data, schema, selectedIdsObj]);
|
|
67
|
-
return {
|
|
67
|
+
return (0, react_1.useMemo)(() => ({
|
|
68
68
|
data,
|
|
69
69
|
logicalName: schema.logicalName,
|
|
70
70
|
schema,
|
|
@@ -79,12 +79,25 @@ function useGridControlContext() {
|
|
|
79
79
|
openRecord,
|
|
80
80
|
gridColumns,
|
|
81
81
|
sorting,
|
|
82
|
-
}
|
|
82
|
+
}), [
|
|
83
|
+
columnFilter,
|
|
84
|
+
data,
|
|
85
|
+
extraFilter,
|
|
86
|
+
gridColumns,
|
|
87
|
+
openRecord,
|
|
88
|
+
refresh,
|
|
89
|
+
schema,
|
|
90
|
+
searchText,
|
|
91
|
+
selectedIds,
|
|
92
|
+
selectedRecords,
|
|
93
|
+
sorting,
|
|
94
|
+
view,
|
|
95
|
+
]);
|
|
83
96
|
}
|
|
84
97
|
function useMainGridCommandHandlerContext() {
|
|
85
98
|
const baseHandlerContext = (0, command_1.useBaseCommandHandlerContext)();
|
|
86
99
|
const primaryControl = useGridControlContext();
|
|
87
|
-
return Object.assign(Object.assign({}, baseHandlerContext), { primaryControl });
|
|
100
|
+
return (0, react_1.useMemo)(() => (Object.assign(Object.assign({}, baseHandlerContext), { primaryControl })), [baseHandlerContext, primaryControl]);
|
|
88
101
|
}
|
|
89
102
|
const emptyCommands = [];
|
|
90
103
|
function useGridCommands() {
|
|
@@ -18,7 +18,7 @@ function useMetadata() {
|
|
|
18
18
|
const getSchema = (0, react_1.useCallback)((logicalName) => {
|
|
19
19
|
return schemaStore.getSchema(logicalName);
|
|
20
20
|
}, [schemaStore]);
|
|
21
|
-
return {
|
|
21
|
+
return (0, react_1.useMemo)(() => ({
|
|
22
22
|
schemas,
|
|
23
23
|
schemaLoading,
|
|
24
24
|
/*** @deprecated */
|
|
@@ -26,5 +26,5 @@ function useMetadata() {
|
|
|
26
26
|
schemaStore,
|
|
27
27
|
appStore,
|
|
28
28
|
experienceStore,
|
|
29
|
-
};
|
|
29
|
+
}), [schemas, schemaLoading, schemaStore, appStore, experienceStore, getSchema]);
|
|
30
30
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@headless-adminapp/app",
|
|
3
|
-
"version": "0.0.17-alpha.
|
|
3
|
+
"version": "0.0.17-alpha.28",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"react-hook-form": "7.52.2",
|
|
40
40
|
"yup": "^1.4.0"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "e25bcf7611efad55ef448866d149ff5e5d19cd64"
|
|
43
43
|
}
|
package/transport/context.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
import { IDataService } from '@headless-adminapp/core/transport';
|
|
1
|
+
import { IDataService, IFileService } from '@headless-adminapp/core/transport';
|
|
2
2
|
export declare const DataServiceContext: import("react").Context<IDataService | undefined>;
|
|
3
|
+
export declare const noopFileService: IFileService;
|
|
4
|
+
export declare const FileServiceContext: import("react").Context<IFileService>;
|
package/transport/context.js
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DataServiceContext = void 0;
|
|
12
|
+
exports.FileServiceContext = exports.noopFileService = exports.DataServiceContext = void 0;
|
|
4
13
|
const react_1 = require("react");
|
|
5
14
|
exports.DataServiceContext = (0, react_1.createContext)(undefined);
|
|
15
|
+
exports.noopFileService = {
|
|
16
|
+
uploadFile: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
throw new Error('File service not implemented');
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
exports.FileServiceContext = (0, react_1.createContext)(exports.noopFileService);
|
package/transport/hooks/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useFileService(): import("@headless-adminapp/core/transport").IFileService;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useFileService = useFileService;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const context_1 = require("../context");
|
|
6
|
+
function useFileService() {
|
|
7
|
+
const context = (0, react_1.useContext)(context_1.FileServiceContext);
|
|
8
|
+
if (!context) {
|
|
9
|
+
throw new Error('FileServiceContext must be used within a FileServiceProvider');
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function DataSelectionResolver(): null;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DataSelectionResolver = DataSelectionResolver;
|
|
4
|
-
const react_1 = require("react");
|
|
5
|
-
const hooks_1 = require("../hooks");
|
|
6
|
-
function DataSelectionResolver() {
|
|
7
|
-
const data = (0, hooks_1.useGridData)();
|
|
8
|
-
const [selectedIds] = (0, hooks_1.useGridSelection)();
|
|
9
|
-
const selectedIdsRef = (0, react_1.useRef)(selectedIds);
|
|
10
|
-
selectedIdsRef.current = selectedIds;
|
|
11
|
-
(0, react_1.useEffect)(() => { }, [data]);
|
|
12
|
-
return null;
|
|
13
|
-
}
|