@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.
@@ -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;
@@ -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 conditions = [];
78
+ const filters = [];
79
79
  if (filter) {
80
- conditions.push(filter);
80
+ filters.push(filter);
81
81
  }
82
82
  if (extraFilter) {
83
- conditions.push(extraFilter);
83
+ filters.push(extraFilter);
84
84
  }
85
85
  if (columnFilters) {
86
86
  const transformedColumnFilters = transformColumnFilter(columnFilters, schema, schemaStore);
87
87
  if (transformedColumnFilters) {
88
- conditions.push({
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 (conditions.length === 0) {
101
+ if (filters.length === 0) {
102
102
  return null;
103
103
  }
104
- if (conditions.length === 1) {
105
- return conditions[0];
104
+ if (filters.length === 1) {
105
+ return filters[0];
106
106
  }
107
107
  return {
108
108
  type: 'and',
109
- conditions,
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.25",
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": "0a42b982d6113067cd2f9739ec646d138c1a5274"
42
+ "gitHead": "e25bcf7611efad55ef448866d149ff5e5d19cd64"
43
43
  }
@@ -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>;
@@ -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);
@@ -1 +1,2 @@
1
1
  export * from './useDataService';
2
+ export * from './useFileService';
@@ -15,3 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./useDataService"), exports);
18
+ __exportStar(require("./useFileService"), exports);
@@ -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
- }