@uxf/cms 11.46.0 → 11.47.1

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/api/swr.d.ts ADDED
@@ -0,0 +1,75 @@
1
+ import { Schema } from "@uxf/data-grid";
2
+ import { SWRConfiguration } from "swr";
3
+ import { SWRMutationConfiguration, SWRMutationResponse } from "swr/mutation";
4
+ export declare class ApiError extends Error {
5
+ readonly code: string;
6
+ readonly statusCode: number;
7
+ readonly info: {
8
+ error: {
9
+ code: string;
10
+ message: string;
11
+ };
12
+ validationErrors: {
13
+ field: string;
14
+ message: string;
15
+ }[];
16
+ };
17
+ constructor(message: string, code: string, statusCode: number, info: {
18
+ error: {
19
+ code: string;
20
+ message: string;
21
+ };
22
+ validationErrors: {
23
+ field: string;
24
+ message: string;
25
+ }[];
26
+ });
27
+ }
28
+ export declare const _fetch: (url: string, method?: string, body?: any) => Promise<any>;
29
+ type Mixed = any;
30
+ type XString = string;
31
+ type Int = number;
32
+ type Email = string;
33
+ export interface CMSSaveUserConfigRequestBody {
34
+ name: XString;
35
+ data: Array<Mixed>;
36
+ }
37
+ export interface CMSUserResponse {
38
+ id: Int;
39
+ email: Email;
40
+ name: XString;
41
+ roles: Array<XString>;
42
+ }
43
+ export interface Metadata {
44
+ title: XString;
45
+ entityAlias: XString;
46
+ actions: Array<XString>;
47
+ }
48
+ export declare const useCmsUserConfigQuery: <T extends SWRConfiguration<Mixed, ApiError>>(config: {
49
+ path: {
50
+ name: XString;
51
+ };
52
+ } & {
53
+ skip?: boolean;
54
+ }, options?: T) => import("swr").SWRResponse<any, ApiError, T>;
55
+ export declare const useCmsUserConfigUpdateMutation: (config: {
56
+ path: {
57
+ name: XString;
58
+ };
59
+ }, options?: SWRMutationConfiguration<Mixed, ApiError, string, Mixed> | undefined) => SWRMutationResponse<Mixed, ApiError, string, Mixed>;
60
+ export declare const useCmsMeQuery: <T extends SWRConfiguration<CMSUserResponse, ApiError>>(config?: {
61
+ skip?: boolean;
62
+ }, options?: T) => import("swr").SWRResponse<CMSUserResponse, ApiError, T>;
63
+ /** @deprecated will be removed - schemas are generated */
64
+ export declare const useCmsTablesQuery: <T extends SWRConfiguration<Record<string, Metadata>, ApiError>>(config?: {
65
+ skip?: boolean;
66
+ }, options?: T) => import("swr").SWRResponse<Record<string, Metadata>, ApiError, T>;
67
+ /** @deprecated will be removed - schemas are generated */
68
+ export declare const useDatagridGetSchemaQuery: <T extends SWRConfiguration<Schema<any>, ApiError>>(config: {
69
+ path: {
70
+ name: XString;
71
+ };
72
+ } & {
73
+ skip?: boolean;
74
+ }, options?: T) => import("swr").SWRResponse<Schema<any>, ApiError, T>;
75
+ export {};
package/api/swr.js ADDED
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useDatagridGetSchemaQuery = exports.useCmsTablesQuery = exports.useCmsMeQuery = exports.useCmsUserConfigUpdateMutation = exports.useCmsUserConfigQuery = exports._fetch = exports.ApiError = void 0;
7
+ const swr_1 = __importDefault(require("swr"));
8
+ const mutation_1 = __importDefault(require("swr/mutation"));
9
+ class ApiError extends Error {
10
+ constructor(message, code, statusCode, info) {
11
+ super(message);
12
+ this.code = code;
13
+ this.statusCode = statusCode;
14
+ this.info = info;
15
+ }
16
+ }
17
+ exports.ApiError = ApiError;
18
+ const _fetch = (url, method = "GET", body = undefined) => {
19
+ var _a;
20
+ return fetch(((_a = process.env.API_URL) !== null && _a !== void 0 ? _a : "") + url, {
21
+ method,
22
+ body: typeof body !== "undefined" ? JSON.stringify(body) : undefined,
23
+ }).then(async (res) => {
24
+ const data = await res.json();
25
+ if (!res.ok) {
26
+ throw new ApiError(data.error.message, data.error.code, res.status, data);
27
+ }
28
+ return data;
29
+ });
30
+ };
31
+ exports._fetch = _fetch;
32
+ const useCmsUserConfigQuery = (config, options = {}) => (0, swr_1.default)(config.skip !== true ? `/api/cms/user-config/${config.path.name}` : null, options);
33
+ exports.useCmsUserConfigQuery = useCmsUserConfigQuery;
34
+ const useCmsUserConfigUpdateMutation = (config, options = undefined) => (0, mutation_1.default)(`/api/cms/user-config/${config.path.name}`, (url, { arg: body }) => (0, exports._fetch)(url, "PUT", body), options);
35
+ exports.useCmsUserConfigUpdateMutation = useCmsUserConfigUpdateMutation;
36
+ const useCmsMeQuery = (config = {}, options = {}) => (0, swr_1.default)(config.skip !== true ? `/api/cms/me` : null, options);
37
+ exports.useCmsMeQuery = useCmsMeQuery;
38
+ /** @deprecated will be removed - schemas are generated */
39
+ const useCmsTablesQuery = (config = {}, options = {}) => (0, swr_1.default)(config.skip !== true ? `/api/cms/tables` : null, options);
40
+ exports.useCmsTablesQuery = useCmsTablesQuery;
41
+ /** @deprecated will be removed - schemas are generated */
42
+ const useDatagridGetSchemaQuery = (config, options = {}) => (0, swr_1.default)(config.skip !== true ? `/api/cms/datagrid/schema/${config.path.name}` : null, options);
43
+ exports.useDatagridGetSchemaQuery = useDatagridGetSchemaQuery;
@@ -1,12 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ActiveItemResolver = void 0;
4
+ const is_nil_1 = require("@uxf/core/utils/is-nil");
4
5
  const exactMatch = () => (menuItem) => (_, activeRoute) => {
5
6
  return activeRoute === menuItem.route;
6
7
  };
7
8
  const exactMatchWithParams = () => (menuItem) => (router, activeRoute) => {
8
- const isQueryEqual = JSON.stringify(router.query) === JSON.stringify(menuItem.routeParams);
9
- return activeRoute === menuItem.route && isQueryEqual;
9
+ const isQueryEqual = (menuQuery, itemQuery) => {
10
+ // match when both undefined or empty
11
+ if ((0, is_nil_1.isNil)(itemQuery)) {
12
+ return Object.keys(menuQuery).length === 0;
13
+ }
14
+ const keysMenu = Object.keys(menuQuery);
15
+ const keysItem = Object.keys(itemQuery);
16
+ if (keysMenu.length !== keysItem.length) {
17
+ return false;
18
+ }
19
+ return keysMenu.every((key) => key in itemQuery && String(menuQuery[key]) === String(itemQuery[key]));
20
+ };
21
+ return activeRoute === menuItem.route && isQueryEqual(router.query, menuItem.routeParams);
10
22
  };
11
23
  const anyOf = (routeNames) => (menuItem) => (_, activeRoute) => {
12
24
  if (activeRoute === menuItem.route) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/cms",
3
- "version": "11.46.0",
3
+ "version": "11.47.1",
4
4
  "description": "UXF Cms",
5
5
  "author": "UXFans <dev@uxf.cz>",
6
6
  "homepage": "https://gitlab.com/uxf-npm/cms#readme",
@@ -30,13 +30,13 @@
30
30
  "@dnd-kit/utilities": "3.2.2",
31
31
  "@floating-ui/react": "0.26.28",
32
32
  "@redux-devtools/extension": "3.3.0",
33
- "@uxf/core": "11.46.0",
34
- "@uxf/core-react": "11.46.0",
35
- "@uxf/data-grid": "11.46.0",
36
- "@uxf/form": "11.46.0",
33
+ "@uxf/core": "11.47.0",
34
+ "@uxf/core-react": "11.47.0",
35
+ "@uxf/data-grid": "11.47.1",
36
+ "@uxf/form": "11.47.1",
37
37
  "@uxf/router": "11.46.0",
38
- "@uxf/ui": "11.46.0",
39
- "@uxf/wysiwyg": "11.46.0",
38
+ "@uxf/ui": "11.47.1",
39
+ "@uxf/wysiwyg": "11.47.1",
40
40
  "axios": "1.7.5",
41
41
  "axios-hooks": "5.0.2",
42
42
  "es6-error": "4.1.1",
@@ -1,4 +1,6 @@
1
1
  import { Request, Response } from "@uxf/data-grid";
2
+ import React from "react";
2
3
  import { GridPageConfig } from "./types";
3
4
  export declare const dataGridLoader: (gridName: string, request: Request) => Promise<Response>;
4
- export declare const GridPage: (config: GridPageConfig) => import("next").NextComponentType<import("../../deprecated/types/app").IAppContext, object, object>;
5
+ /** @deprecated - use custom DataGrid on project */
6
+ export declare const GridPage: (config: GridPageConfig) => (props: any) => React.JSX.Element;
@@ -29,30 +29,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.GridPage = exports.dataGridLoader = void 0;
30
30
  const empty_array_1 = require("@uxf/core/constants/empty-array");
31
31
  const buildArray_1 = require("@uxf/core/utils/buildArray");
32
+ const is_nil_1 = require("@uxf/core/utils/is-nil");
32
33
  const is_not_nil_1 = require("@uxf/core/utils/is-not-nil");
34
+ const isServer_1 = require("@uxf/core/utils/isServer");
33
35
  const data_grid_1 = require("@uxf/data-grid");
34
36
  const table_1 = require("@uxf/data-grid/table");
35
37
  const use_data_grid_control_1 = require("@uxf/data-grid/use-data-grid-control");
36
38
  const use_data_grid_fetching_1 = require("@uxf/data-grid/use-data-grid-fetching");
37
39
  const router_1 = require("@uxf/router");
38
40
  const icon_1 = require("@uxf/ui/icon");
41
+ const loader_1 = require("@uxf/ui/loader");
39
42
  const link_1 = __importDefault(require("next/link"));
40
- const router_2 = __importDefault(require("next/router"));
43
+ const router_2 = __importStar(require("next/router"));
41
44
  const qs_1 = require("qs");
42
45
  const react_1 = __importStar(require("react"));
43
46
  const url_1 = require("url");
44
- const api_1 = require("../../api");
45
- const config_1 = require("../../config");
46
- const with_authenticate_1 = require("../../deprecated/hoc/with-authenticate");
47
- const api_2 = require("../../lib/api");
48
- const get_initial_props_helper_1 = require("./get-initial-props-helper");
49
- const { axiosRequest } = (0, api_2.createAxiosInstance)();
47
+ const swr_1 = require("../../api/swr");
48
+ const api_1 = require("../../lib/api");
49
+ const restricted_page_1 = require("../../security/restricted-page");
50
+ const { axiosRequest } = (0, api_1.createAxiosInstance)();
50
51
  const dataGridLoader = (gridName, request) => {
51
52
  return axiosRequest(null, `/api/cms/datagrid/${gridName}`, "get", null, request).then((r) => r.data);
52
53
  };
53
54
  exports.dataGridLoader = dataGridLoader;
54
55
  const DefaultLayout = (props) => react_1.default.createElement("div", { ...props });
55
- const GridPageComponent = (props) => {
56
+ function GridPageComponent(props) {
56
57
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
57
58
  // eslint-disable-next-line react/destructuring-assignment
58
59
  const { query, AddIcon = react_1.default.createElement(icon_1.Icon, { name: "plus" }), onAddTitle = "Přidat záznam" } = props;
@@ -71,14 +72,14 @@ const GridPageComponent = (props) => {
71
72
  router_2.default.replace(`${(0, url_1.parse)(((_a = window.history.state) === null || _a === void 0 ? void 0 : _a.url) || "").pathname}?${(0, qs_1.stringify)(newQuery)}`, `${(0, url_1.parse)(((_b = window.history.state) === null || _b === void 0 ? void 0 : _b.as) || "").pathname}?${(0, qs_1.stringify)(newQuery)}`, { shallow: true });
72
73
  return response;
73
74
  }, [query]);
74
- const { data, isLoading, error, onReload } = (0, use_data_grid_fetching_1.useDataGridFetching)({
75
+ const { data, isLoading, error, reload } = (0, use_data_grid_fetching_1.useDataGridFetching)({
75
76
  loader: (_c = props.loader) !== null && _c !== void 0 ? _c : universalLoader,
76
77
  schema: props.gridSchema,
77
78
  state,
78
79
  });
79
80
  const actionsBag = (0, react_1.useMemo)(() => ({
80
- reload: onReload,
81
- }), [onReload]);
81
+ reload,
82
+ }), [reload]);
82
83
  const hasOnAdd = props.onAdd && (!props.metaSchema || props.metaSchema.actions.includes("add"));
83
84
  const cActions = [
84
85
  ...((_d = props.customActions) !== null && _d !== void 0 ? _d : empty_array_1.EMPTY_ARRAY),
@@ -129,26 +130,29 @@ const GridPageComponent = (props) => {
129
130
  : undefined);
130
131
  return (react_1.default.createElement(Layout, { key: props.entityAlias, title: (_j = (_g = props.title) !== null && _g !== void 0 ? _g : (_h = props.metaSchema) === null || _h === void 0 ? void 0 : _h.title) !== null && _j !== void 0 ? _j : "" },
131
132
  react_1.default.createElement("div", { className: "mb-10" },
132
- react_1.default.createElement(data_grid_1.DataGrid, { NoRowsFallback: (_k = props.ui) === null || _k === void 0 ? void 0 : _k.NoRowsFallback, SelectedRowsToolbarActions: (_l = props.ui) === null || _l === void 0 ? void 0 : _l.SelectedRowsToolbarActions, actionCell: actionCell, actions: actions, bodyCells: (_m = props.ui) === null || _m === void 0 ? void 0 : _m.BodyCells, customActions: cActions, data: data, error: error, filterHandlers: (_o = props.ui) === null || _o === void 0 ? void 0 : _o.FilterHandlers, gridName: props.entityAlias, isLoading: isLoading, isRowSelectable: props.selectable, onCsvDownload: (r) => window.open(`/api/cms/datagrid/export/${props.entityAlias}?${(0, qs_1.stringify)(r)}`), onReload: onReload, rowHeight: props.rowHeight, schema: props.gridSchema, state: state }))));
133
- };
133
+ react_1.default.createElement(data_grid_1.DataGrid, { NoRowsFallback: (_k = props.ui) === null || _k === void 0 ? void 0 : _k.NoRowsFallback, SelectedRowsToolbarActions: (_l = props.ui) === null || _l === void 0 ? void 0 : _l.SelectedRowsToolbarActions, actionCell: actionCell, actions: actions, bodyCells: (_m = props.ui) === null || _m === void 0 ? void 0 : _m.BodyCells, customActions: cActions, data: data, error: error, filterHandlers: (_o = props.ui) === null || _o === void 0 ? void 0 : _o.FilterHandlers, gridName: props.entityAlias, isLoading: isLoading, isRowSelectable: props.selectable, onCsvDownload: (r) => window.open(`/api/cms/datagrid/export/${props.entityAlias}?${(0, qs_1.stringify)(r)}`), reload: reload, rowHeight: props.rowHeight, schema: props.gridSchema, state: state }))));
134
+ }
134
135
  GridPageComponent.displayName = "GridPageComponent";
136
+ /** @deprecated - use custom DataGrid on project */
135
137
  const GridPage = (config) => {
136
- const Component = (props) => {
137
- return (react_1.default.createElement(GridPageComponent, { ...props, AddIcon: config.AddIcon, customActions: config.customActions, getEditUrl: config.getEditUrl, getOpenUrl: config.getOpenUrl, initialUserConfig: config.initialUserConfig, loader: config.loader, onAdd: config.onAdd, onAddTitle: config.onAddTitle, onEdit: config.onEdit, onOpen: config.onOpen, onRemove: config.onRemove, rowHeight: config.rowHeight, selectable: config.selectable, title: config.title, ui: config.ui }));
138
- };
139
- Component.getInitialProps = async (ctx) => {
140
- const entityAlias = typeof config.entityAlias === "function" ? config.entityAlias(ctx) : config.entityAlias;
141
- const initialHiddenColumns = config_1.container.has("api.getUserConfig")
142
- ? await config_1.container.get("api.getUserConfig")(ctx, `v1--hidden-columns--${entityAlias}`, [])
143
- : await (0, api_1.userConfigGet)(ctx, `v1--hidden-columns--${entityAlias}`, []);
144
- return {
145
- entityAlias,
146
- initialHiddenColumns,
147
- query: ctx.query,
148
- metaSchema: await (0, get_initial_props_helper_1.loadEntityMetaSchema)(ctx, entityAlias),
149
- gridSchema: await (0, get_initial_props_helper_1.loadEntityGridSchema)(ctx, entityAlias),
150
- };
151
- };
152
- return (0, with_authenticate_1.withAuthenticate)({ allowedRoles: config.allowedRoles || ["ROLE_ROOT"] })(Component);
138
+ var _a;
139
+ function Component() {
140
+ var _a, _b;
141
+ const router = (0, router_2.useRouter)();
142
+ const userConfigQuery = (0, swr_1.useCmsUserConfigQuery)({ path: { name: `v1--hidden-columns--${config.entityAlias}` } });
143
+ const cmsTablesQuery = (0, swr_1.useCmsTablesQuery)();
144
+ const dataGridSchemaQuery = (0, swr_1.useDatagridGetSchemaQuery)({ path: { name: config.entityAlias } });
145
+ if (cmsTablesQuery.isLoading || dataGridSchemaQuery.isLoading || isServer_1.isServer) {
146
+ return (react_1.default.createElement("div", { className: "flex min-h-screen w-full items-center justify-center" },
147
+ react_1.default.createElement(loader_1.Loader, null)));
148
+ }
149
+ const metadata = (_a = cmsTablesQuery.data) === null || _a === void 0 ? void 0 : _a[config.entityAlias];
150
+ const schema = dataGridSchemaQuery.data;
151
+ if ((0, is_nil_1.isNil)(schema) || (0, is_nil_1.isNil)(metadata)) {
152
+ return react_1.default.createElement("div", null, "Omlouv\u00E1me se, n\u011Bco se pokazilo.");
153
+ }
154
+ return (react_1.default.createElement(GridPageComponent, { AddIcon: config.AddIcon, customActions: config.customActions, entityAlias: config.entityAlias, getEditUrl: config.getEditUrl, getOpenUrl: config.getOpenUrl, gridSchema: schema, initialHiddenColumns: (_b = userConfigQuery.data) !== null && _b !== void 0 ? _b : [], initialUserConfig: config.initialUserConfig, loader: config.loader, metaSchema: metadata, onAdd: config.onAdd, onAddTitle: config.onAddTitle, onEdit: config.onEdit, onOpen: config.onOpen, onRemove: config.onRemove, query: router.query, rowHeight: config.rowHeight, selectable: config.selectable, title: config.title, ui: config.ui }));
155
+ }
156
+ return (0, restricted_page_1.restrictedPage)(Component, { allowedRole: (_a = config.allowedRoles) !== null && _a !== void 0 ? _a : ["ROLE_ROOT"] });
153
157
  };
154
158
  exports.GridPage = GridPage;
@@ -1,6 +1,5 @@
1
1
  import { Nullish } from "@uxf/core/types";
2
2
  import { ActionCellComponent, DataGridProps, DataGridUserConfig, Loader, Schema } from "@uxf/data-grid";
3
- import { NextPageContext } from "next";
4
3
  import { ParsedUrlQuery } from "querystring";
5
4
  import { FC, ReactElement } from "react";
6
5
  import { EntityMetaSchema } from "../../api";
@@ -42,11 +41,10 @@ export type GridPageComponentProps = {
42
41
  customActions?: DataGridProps<any, any>["customActions"];
43
42
  initialUserConfig?: DataGridUserConfig<any> | Nullish;
44
43
  };
45
- export type EntityAliasExtractor = (ctx: NextPageContext) => string;
46
44
  export type GridPageConfig<T extends object = any> = {
47
45
  ui?: UIComponents;
48
46
  title?: string;
49
- entityAlias: string | EntityAliasExtractor;
47
+ entityAlias: string;
50
48
  onOpen?: (entityAlias: string, row: T, actions: ActionsBag) => void;
51
49
  getOpenUrl?: (entityAlias: string, row: T) => string | undefined | null;
52
50
  onAdd?: (entityAlias: string, actions: ActionsBag) => void;
@@ -0,0 +1,9 @@
1
+ import React, { ReactNode } from "react";
2
+ interface Config {
3
+ allowedRole: string[];
4
+ }
5
+ export declare function ErrorContent(props: {
6
+ error: any;
7
+ }): React.JSX.Element;
8
+ export declare function restrictedPage(Component: () => ReactNode, config: Config): (props: any) => React.JSX.Element;
9
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ErrorContent = ErrorContent;
7
+ exports.restrictedPage = restrictedPage;
8
+ const is_not_nil_1 = require("@uxf/core/utils/is-not-nil");
9
+ const button_1 = require("@uxf/ui/button");
10
+ const loader_1 = require("@uxf/ui/loader");
11
+ const react_1 = __importDefault(require("react"));
12
+ const swr_1 = require("../api/swr");
13
+ function ErrorContent(props) {
14
+ if (props.error.code === "UNAUTHORIZED") {
15
+ return (react_1.default.createElement(react_1.default.Fragment, null,
16
+ react_1.default.createElement("div", null, "Mus\u00EDte se p\u0159\u00EDhl\u00E1sit"),
17
+ react_1.default.createElement(button_1.Button, { href: `/admin/login?redirect=${window.location.href}` }, "P\u0159ihl\u00E1sit")));
18
+ }
19
+ return react_1.default.createElement("div", null, "Vyskytla se chyba");
20
+ }
21
+ function restrictedPage(Component, config) {
22
+ return function Page(props) {
23
+ const meQuery = (0, swr_1.useCmsMeQuery)();
24
+ if (meQuery.isLoading || typeof window === "undefined") {
25
+ return (react_1.default.createElement("div", { className: "flex min-h-screen w-full items-center justify-center" },
26
+ react_1.default.createElement(loader_1.Loader, null)));
27
+ }
28
+ if ((0, is_not_nil_1.isNotNil)(meQuery.error)) {
29
+ return (react_1.default.createElement("div", { className: "flex min-h-screen w-full flex-col items-center justify-center gap-4" },
30
+ react_1.default.createElement(ErrorContent, { error: meQuery.error })));
31
+ }
32
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
33
+ if (!config.allowedRole.some((role) => { var _a, _b; return (_b = (_a = meQuery.data) === null || _a === void 0 ? void 0 : _a.roles) === null || _b === void 0 ? void 0 : _b.includes(role); })) {
34
+ return (react_1.default.createElement("div", { className: "flex min-h-screen w-full items-center justify-center" }, "Pro tuto str\u00E1nku nem\u00E1te opr\u00E1vn\u011Bn\u00ED."));
35
+ }
36
+ return react_1.default.createElement(Component, { ...props });
37
+ };
38
+ }
@@ -11,7 +11,7 @@ const react_1 = __importDefault(require("react"));
11
11
  function removeConfirmHandler() {
12
12
  return new Promise((resolve) => {
13
13
  (0, modal_1.openModal)({
14
- disableBackdropClose: true,
14
+ isBackdropCloseDisabled: true,
15
15
  children: (react_1.default.createElement(modal_dialog_1.ModalDialog, { footer: react_1.default.createElement(react_1.default.Fragment, null,
16
16
  react_1.default.createElement(button_1.Button, { onClick: () => {
17
17
  resolve(false);