@adaptabletools/adaptable 12.0.0-canary.1 → 12.0.0-canary.2

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.
Files changed (68) hide show
  1. package/bundle.cjs.js +90 -90
  2. package/package.json +1 -1
  3. package/publishTimestamp.d.ts +1 -1
  4. package/publishTimestamp.js +1 -1
  5. package/src/AdaptableInterfaces/AdaptableNoCodeWizard.d.ts +1 -0
  6. package/src/Api/Implementation/FormatColumnApiImpl.js +2 -2
  7. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.d.ts +8 -3
  8. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.js +3 -2
  9. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationForm.js +9 -2
  10. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.d.ts +18 -0
  11. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.js +87 -0
  12. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizardColumnsStep.d.ts +18 -0
  13. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizardColumnsStep.js +16 -0
  14. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/index.d.ts +2 -9
  15. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/index.js +2 -75
  16. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/useSelection.d.ts +3 -1
  17. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/useSelection.js +9 -4
  18. package/src/View/AdaptableWizardView/Utils.d.ts +1 -0
  19. package/src/View/AdaptableWizardView/Utils.js +24 -0
  20. package/src/View/AdaptableWizardView/Wizard.d.ts +54 -0
  21. package/src/View/AdaptableWizardView/Wizard.js +98 -0
  22. package/src/View/AdaptableWizardView/index.d.ts +1 -22
  23. package/src/View/AdaptableWizardView/index.js +2 -103
  24. package/src/View/Alert/Wizard/AlertBehaviourWizardSection.js +1 -1
  25. package/src/View/Alert/Wizard/AlertDisplayWizardSection.js +2 -2
  26. package/src/View/Alert/Wizard/BaseAlertRulesWizardSection.js +1 -1
  27. package/src/View/Alert/Wizard/BaseAlertScopeWizardSection.js +2 -2
  28. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +1 -1
  29. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +1 -1
  30. package/src/View/ConditionalStyle/Wizard/ConditionalStyleRuleWizardSection.js +1 -1
  31. package/src/View/ConditionalStyle/Wizard/ConditionalStyleScopeWizardSection.js +1 -1
  32. package/src/View/ConditionalStyle/Wizard/ConditionalStyleSettingsWizardSettings.js +1 -1
  33. package/src/View/ConditionalStyle/Wizard/ConditionalStyleStyleWizardSection.js +1 -1
  34. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +2 -2
  35. package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +1 -1
  36. package/src/View/Export/Wizard/ReportColumnsWizardSection.js +1 -1
  37. package/src/View/Export/Wizard/ReportNameWizardSection.js +1 -1
  38. package/src/View/Export/Wizard/ReportRowsWizardSection.js +1 -1
  39. package/src/View/FlashingCell/Wizard/FlashingCellRulesWizardSection.js +2 -2
  40. package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.js +1 -1
  41. package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +1 -1
  42. package/src/View/FlashingCell/Wizard/FlashingCellStyleWizardSection.js +1 -1
  43. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +1 -1
  44. package/src/View/FormatColumn/Wizard/FormatColumnScopeWizardSection.js +1 -1
  45. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +1 -1
  46. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +1 -1
  47. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +1 -1
  48. package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.js +2 -2
  49. package/src/View/PlusMinus/Wizard/PlusMinusScopeWizardSection.js +1 -1
  50. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +2 -2
  51. package/src/View/Query/Wizard/NamedQueryExpressionWizardSection.js +1 -1
  52. package/src/View/Query/Wizard/NamedQuerySettingsWizardSection.js +1 -1
  53. package/src/View/Schedule/Wizard/ScheduleScheduleSummary.js +1 -1
  54. package/src/View/Schedule/Wizard/ScheduleScheduleWizard.js +1 -1
  55. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsSummary.js +1 -1
  56. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsWizard.js +1 -1
  57. package/src/View/Shortcut/Wizard/ShortcutScopeWizardSection.js +1 -1
  58. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +2 -2
  59. package/src/View/Wizard/Interface/IAdaptableWizard.d.ts +2 -2
  60. package/src/View/Wizard/ObjectTagsWizardSection.js +1 -1
  61. package/src/View/Wizard/OnePageAdaptableWizard.d.ts +5 -6
  62. package/src/View/Wizard/OnePageAdaptableWizard.js +35 -169
  63. package/src/View/Wizard/OnePageWizards.d.ts +37 -0
  64. package/src/View/Wizard/OnePageWizards.js +187 -0
  65. package/src/View/Wizard/useKeyboardNavigation.d.ts +1 -1
  66. package/src/components/WindowModal/WindowModal.js +13 -7
  67. package/version.d.ts +1 -1
  68. package/version.js +1 -1
@@ -1,24 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OnePageWizardSummary = exports.OnePageAdaptableWizard = exports.useOnePageWizardContext = exports.OnePageAdaptableWizardContext = exports.FormDescriptionText = exports.SummaryText = exports.SummaryTag = void 0;
3
+ exports.OnePageWizardSummary = exports.OnePageAdaptableWizard = exports.useOnePageAdaptableWizardContext = exports.OnePageAdaptableWizardContext = exports.FormDescriptionText = exports.SummaryText = exports.SummaryTag = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
6
  const react_1 = require("react");
7
7
  const react_redux_1 = require("react-redux");
8
8
  const rebass_1 = require("rebass");
9
9
  const QueryRedux = tslib_1.__importStar(require("../../Redux/ActionsReducers/QueryRedux"));
10
- const Dialog_1 = tslib_1.__importDefault(require("../../components/Dialog"));
11
10
  const SimpleButton_1 = tslib_1.__importDefault(require("../../components/SimpleButton"));
12
- const kebabCase_1 = tslib_1.__importDefault(require("lodash/kebabCase"));
13
- const useProperty_1 = tslib_1.__importDefault(require("../../components/utils/useProperty"));
14
11
  const AdaptableContext_1 = require("../AdaptableContext");
15
- const isMacLike_1 = require("../../Utilities/isMacLike");
16
12
  const Tabs_1 = require("../../components/Tabs");
17
- const KeyHint_1 = require("../KeyHint");
18
- const icons_1 = require("../../components/icons");
19
- const ResizeObserver_1 = require("../../components/ResizeObserver");
20
13
  const NamedQueryContext_1 = require("../../components/ExpressionEditor/NamedQueryContext");
21
- const useKeyboardNavigation_1 = require("./useKeyboardNavigation");
14
+ const OnePageWizards_1 = require("./OnePageWizards");
15
+ const kebabCase_1 = tslib_1.__importDefault(require("lodash/kebabCase"));
22
16
  exports.SummaryTag = (props) => React.createElement(rebass_1.Text, Object.assign({}, props));
23
17
  exports.SummaryText = (props) => (React.createElement(rebass_1.Text, Object.assign({ fontSize: 2, mb: 3 }, props)));
24
18
  exports.FormDescriptionText = (props) => (React.createElement(rebass_1.Text, Object.assign({ fontSize: 2, mt: 1 }, props)));
@@ -26,187 +20,59 @@ exports.OnePageAdaptableWizardContext = React.createContext({
26
20
  data: null,
27
21
  sections: [],
28
22
  moduleInfo: null,
29
- setCurrentSection: (index) => { },
30
23
  api: null,
31
24
  namedQuery: false,
32
25
  });
33
- function useOnePageWizardContext() {
26
+ function useOnePageAdaptableWizardContext() {
34
27
  return React.useContext(exports.OnePageAdaptableWizardContext);
35
28
  }
36
- exports.useOnePageWizardContext = useOnePageWizardContext;
29
+ exports.useOnePageAdaptableWizardContext = useOnePageAdaptableWizardContext;
37
30
  exports.OnePageAdaptableWizard = (props) => {
38
- var _a, _b;
39
31
  const { api } = AdaptableContext_1.useAdaptable();
40
32
  const dispatch = react_redux_1.useDispatch();
41
33
  const saveNamedQuery = React.useCallback((namedQuery) => dispatch(QueryRedux.NamedQueryAdd(namedQuery)), []);
42
- let defaultCurrentIndex = 0;
43
- if (props.defaultCurrentSectionName) {
44
- const candidate = props.sections.findIndex((section) => section !== '-' && section.title === props.defaultCurrentSectionName);
45
- if (candidate >= 0) {
46
- defaultCurrentIndex = candidate;
47
- }
48
- }
49
- const [currentSection, setCurrentSection] = useProperty_1.default(props, 'currentIndex', defaultCurrentIndex, {
50
- onChange: (index) => {
51
- var _a;
52
- (_a = props.onSectionChange) === null || _a === void 0 ? void 0 : _a.call(props, index);
53
- },
54
- });
55
34
  const [namedQuery, setNamedQuery] = react_1.useState(false);
56
- const [navIndexMap] = react_1.useState(() => new Map());
57
- const handleClickFinish = () => {
58
- var _a;
59
- if (namedQuery && namedQuery.Name) {
60
- saveNamedQuery(namedQuery);
61
- }
62
- (_a = props.onFinish) === null || _a === void 0 ? void 0 : _a.call(props, props.data);
63
- };
64
- const renderSection = (index) => {
65
- const section = visibleSections[index];
66
- if (section === '-') {
67
- return React.createElement(React.Fragment, { key: index });
68
- }
69
- return (React.createElement(rebass_1.Flex, { flexDirection: "column", key: index, "data-name": `section-${index}`, style: { minHeight: '100%' }, mr: 2 },
70
- React.createElement(rebass_1.Box, { py: 3, paddingLeft: 2, fontSize: 4, className: "ab-OnePageWizard__details" }, section.details),
71
- React.createElement(rebass_1.Box, { flex: 1, className: "ab-OnePageWizard__section" }, section.render(props.data, index))));
72
- };
73
- const selectedNodeRef = react_1.useRef(null);
74
- const selectedFeedback = (React.createElement("div", { ref: selectedNodeRef, className: "ab-OnePageWizard__selected-title-overlay", style: {
75
- position: 'absolute',
76
- background: 'var(--ab-cmp-one-page-wizard-selected-title__background)',
77
- pointerEvents: 'none',
78
- borderRadius: 'var(--ab__border-radius)',
79
- transition: 'top 0.2s',
80
- } }));
81
- const sizeOwnerRef = react_1.useRef(null);
82
- const [width, setWidth] = react_1.useState(0);
83
- ResizeObserver_1.useResizeObserver(sizeOwnerRef, ({ width }) => {
84
- setWidth(width);
85
- });
86
- React.useEffect(() => {
87
- const node = selectedNodeRef.current;
88
- const parent = node.parentNode;
89
- const activeElement = parent.children[currentSection];
90
- node.style.top = `${activeElement.offsetTop}px`;
91
- node.style.left = `${activeElement.offsetLeft}px`;
92
- node.style.height = `${activeElement.offsetHeight}px`;
93
- node.style.width = `${activeElement.offsetWidth}px`;
94
- }, [currentSection, width]);
95
- let navIndex = 0;
96
- const dialogRef = react_1.useRef(null);
97
- let invalidCount = 0;
98
- let firstErrorMessage = null;
99
- const contextValue = {
35
+ const name = props.moduleInfo.FriendlyName
36
+ ? `${kebabCase_1.default(props.moduleInfo.FriendlyName)}-wizard`
37
+ : '';
38
+ const extraContext = {
100
39
  data: props.data,
101
40
  api,
102
- //visible sections is updated below, as this is a chicken-egg problem
103
- sections: props.sections,
104
- setCurrentSection,
105
41
  namedQuery,
106
42
  moduleInfo: props.moduleInfo,
43
+ sections: props.sections,
107
44
  };
108
- const visibleSections = React.useMemo(() => {
109
- return props.sections.filter((section) => section === '-' ||
110
- section.isVisible == undefined ||
111
- section.isVisible(props.data, api, contextValue));
112
- }, [props.sections]);
113
- contextValue.sections = visibleSections;
114
- const validSectionsMap = visibleSections.reduce((acc, section, index) => {
45
+ const sections = props.sections.map((section) => {
115
46
  if (section === '-') {
116
- acc.set(index, true);
117
- return acc;
47
+ return '-';
118
48
  }
119
- const valid = section.isValid ? section.isValid(props.data, api, contextValue) : true; //!active && canFinish !== true;
120
- if (valid !== true) {
121
- invalidCount++;
122
- if (firstErrorMessage == null) {
123
- firstErrorMessage = valid;
49
+ const isValid = typeof section.isValid === 'function'
50
+ ? (data, innerContext) => {
51
+ return section.isValid(data, api, Object.assign(Object.assign({}, innerContext), extraContext));
52
+ }
53
+ : void 0;
54
+ const isVisible = typeof section.isVisible === 'function'
55
+ ? (data, innerContext) => {
56
+ return section.isVisible(data, api, Object.assign(Object.assign({}, innerContext), extraContext));
124
57
  }
58
+ : void 0;
59
+ return Object.assign(Object.assign({}, section), { isValid,
60
+ isVisible });
61
+ });
62
+ const handleClickFinish = () => {
63
+ var _a;
64
+ if (namedQuery && namedQuery.Name) {
65
+ saveNamedQuery(namedQuery);
125
66
  }
126
- acc.set(index, valid);
127
- return acc;
128
- }, new Map());
129
- useKeyboardNavigation_1.useKeyboardNavigation(setCurrentSection, visibleSections);
130
- const canFinish = !invalidCount;
131
- return (React.createElement(NamedQueryContext_1.NamedQueryContext.Provider, { value: { namedQuery, setNamedQuery } },
132
- React.createElement(exports.OnePageAdaptableWizardContext.Provider, { value: contextValue },
133
- React.createElement(Dialog_1.default, { modal: true, isOpen: true, showCloseButton: false, focusOnBrowserVisible: true, style: {
134
- borderRadius: 'var(--ab__border-radius)',
135
- overflow: 'hidden',
136
- height: '80vh',
137
- }, ref: dialogRef, onDismiss: () => { var _a; return (_a = props.onHide) === null || _a === void 0 ? void 0 : _a.call(props); }, onKeyDown: (event) => {
138
- if (event.metaKey || event.ctrlKey) {
139
- const { key } = event;
140
- if (!isNaN(Number(key))) {
141
- const num = Number(key);
142
- if (navIndexMap.has(num)) {
143
- const index = navIndexMap.get(num);
144
- setCurrentSection(index);
145
- event.preventDefault();
146
- event.stopPropagation();
147
- requestAnimationFrame(() => {
148
- var _a;
149
- (_a = dialogRef === null || dialogRef === void 0 ? void 0 : dialogRef.current) === null || _a === void 0 ? void 0 : _a.bringToFront();
150
- });
151
- }
152
- }
153
- }
154
- } },
155
- React.createElement(rebass_1.Flex, { className: "ab-OnePageWizard", flexDirection: "column", "data-name": props.moduleInfo.FriendlyName
156
- ? `${kebabCase_1.default(props.moduleInfo.FriendlyName)}-wizard`
157
- : '', style: Object.assign({ height: '100%', width: '90vw', maxWidth: 1000 }, props.style) },
158
- React.createElement(rebass_1.Flex, { flexDirection: "row", alignItems: "stretch", flex: 1, style: { overflow: 'auto' } },
159
- React.createElement(rebass_1.Flex, { flexDirection: "column", padding: 3, className: "ab-OnePageWizard__section-title-container", ref: sizeOwnerRef, style: { overflow: 'auto', position: 'relative', flex: 'none' } },
160
- visibleSections.map((section, index) => {
161
- if (section === '-') {
162
- return (React.createElement(rebass_1.Box, { as: "hr", mt: 2, className: "ab-OnePageWizard__section-separator", key: `${index}-`, style: {
163
- width: '100%',
164
- border: 'none',
165
- borderTop: `1px solid var(--ab-color-inputborder)`,
166
- } }));
167
- }
168
- navIndex++;
169
- navIndexMap.set(navIndex, index);
170
- const active = index === currentSection;
171
- const disabled = false; //!active && !currentSectionValid;
172
- return (React.createElement(rebass_1.Flex, { className: "ab-OnePageWizard__section-title", "data-name": section.title, flexDirection: "row", style: {
173
- cursor: disabled ? 'auto' : 'pointer',
174
- zIndex: 10,
175
- transition: 'color 0.2s',
176
- opacity: disabled ? 0.5 : 1,
177
- }, key: section.title, color: active ? 'var(--ab-cmp-one-page-wizard-section-title__color)' : '', px: 2, py: 1, mt: index ? 2 : 0, onClick: () => {
178
- if (disabled) {
179
- return;
180
- }
181
- setCurrentSection(index);
182
- } },
183
- React.createElement(KeyHint_1.KeyHint, { mr: 2, style: { display: 'inline-block' } }, navIndex),
184
- React.createElement("div", { style: { flex: 1 } }, section.title),
185
- React.createElement(icons_1.Icon, { name: "error", style: {
186
- marginLeft: 'var(--ab-space-2)',
187
- visibility: validSectionsMap.get(index) !== true ? 'visible' : 'hidden',
188
- } })));
189
- }),
190
- selectedFeedback,
191
- React.createElement(rebass_1.Box, { flex: 1 }),
192
- React.createElement(KeyHint_1.KeyHint, { style: { lineHeight: 1.5 }, className: "ab-OnePageWizard__key-hint" },
193
- isMacLike_1.isMacLike() ? 'Cmd' : 'Ctrl',
194
- " + #",
195
- React.createElement("br", null),
196
- "to navigate")),
197
- React.createElement(rebass_1.Flex, { flex: 1, flexDirection: "column", className: "ab-OnePageWizard__section-container" }, renderSection(currentSection))),
198
- React.createElement(rebass_1.Flex, { flexDirection: "row", padding: 2, alignItems: "center", className: "ab-WizardDialog__footer ab-OnePageWizard__footer" },
199
- React.createElement(SimpleButton_1.default, { tone: "neutral", variant: "text", "data-name": "close", onClick: () => { var _a; return (_a = props.onHide) === null || _a === void 0 ? void 0 : _a.call(props); }, tooltip: (_a = props.closeTooltip) !== null && _a !== void 0 ? _a : 'Close wizard', accessLevel: 'Full' }, (_b = props.closeText) !== null && _b !== void 0 ? _b : 'CLOSE'),
200
- React.createElement(KeyHint_1.KeyHint, { ml: 2 }, "Esc"),
201
- React.createElement(rebass_1.Text, { fontSize: 2, mr: 3, className: "ab-OnePageWizard__error", style: {
202
- flex: 1,
203
- color: 'var(--ab-color-error)',
204
- textAlign: 'end',
205
- } }, firstErrorMessage),
206
- React.createElement(SimpleButton_1.default, { tone: "accent", "data-name": "finish", variant: "raised", disabled: canFinish !== true, onClick: () => handleClickFinish(), icon: 'check', accessLevel: 'Full' }, "Finish")))))));
67
+ (_a = props.onFinish) === null || _a === void 0 ? void 0 : _a.call(props, props.data);
68
+ };
69
+ return (React.createElement(exports.OnePageAdaptableWizardContext.Provider, { value: extraContext },
70
+ React.createElement(NamedQueryContext_1.NamedQueryContext.Provider, { value: { namedQuery, setNamedQuery } },
71
+ React.createElement(OnePageWizards_1.OnePageWizard, Object.assign({}, props, { name: name, sections: sections, onFinish: handleClickFinish })))));
207
72
  };
208
73
  exports.OnePageWizardSummary = () => {
209
- const { sections, setCurrentSection, data, api } = useOnePageWizardContext();
74
+ const { setCurrentSection } = OnePageWizards_1.useOnePageWizardContext();
75
+ const { sections, data, api } = useOnePageAdaptableWizardContext();
210
76
  const renderEdit = (index) => (React.createElement(SimpleButton_1.default, { px: 1, variant: "text", style: {
211
77
  textDecoration: 'underline',
212
78
  display: 'inline-block',
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ import { CSSProperties } from 'react';
3
+ import { TextProps } from 'rebass';
4
+ export declare type OnePageWizardContextType<T> = {
5
+ data: T;
6
+ sections: (OnePageWizardSection<T> | '-')[];
7
+ setCurrentSection: (index: number) => void;
8
+ };
9
+ export declare const SummaryTag: React.FunctionComponent<TextProps>;
10
+ export declare const SummaryText: React.FunctionComponent<TextProps>;
11
+ export declare const FormDescriptionText: React.FunctionComponent<TextProps>;
12
+ export declare const OnePageWizardContext: React.Context<OnePageWizardContextType<any>>;
13
+ export declare function useOnePageWizardContext<ENTITY>(): OnePageWizardContextType<ENTITY>;
14
+ export declare type OnePageWizardSection<ENTITY> = {
15
+ title: string;
16
+ details?: React.ReactNode;
17
+ isValid?: (data: ENTITY, context: OnePageWizardContextType<ENTITY>) => true | string;
18
+ isVisible?: (data: ENTITY, context: OnePageWizardContextType<ENTITY>) => boolean;
19
+ render: (data: ENTITY, index: number) => React.ReactNode;
20
+ renderSummary?: (data: ENTITY) => React.ReactNode;
21
+ };
22
+ export interface OnePageWizardProps<ENTITY> {
23
+ data: ENTITY;
24
+ name: string;
25
+ sections: (OnePageWizardSection<ENTITY> | '-')[];
26
+ currentIndex?: number;
27
+ defaultCurrentIndex?: number;
28
+ defaultCurrentSectionName?: string;
29
+ onSectionChange?: (index: number) => void;
30
+ onHide?: VoidFunction;
31
+ onFinish?: (data: ENTITY) => any;
32
+ children?: React.ReactNode;
33
+ style?: CSSProperties;
34
+ closeText?: React.ReactNode;
35
+ closeTooltip?: string;
36
+ }
37
+ export declare const OnePageWizard: <ENTITY extends unknown>(props: OnePageWizardProps<ENTITY>) => JSX.Element;
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnePageWizard = exports.useOnePageWizardContext = exports.OnePageWizardContext = exports.FormDescriptionText = exports.SummaryText = exports.SummaryTag = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const react_1 = require("react");
7
+ const rebass_1 = require("rebass");
8
+ const Dialog_1 = tslib_1.__importDefault(require("../../components/Dialog"));
9
+ const SimpleButton_1 = tslib_1.__importDefault(require("../../components/SimpleButton"));
10
+ const useProperty_1 = tslib_1.__importDefault(require("../../components/utils/useProperty"));
11
+ const isMacLike_1 = require("../../Utilities/isMacLike");
12
+ const KeyHint_1 = require("../KeyHint");
13
+ const icons_1 = require("../../components/icons");
14
+ const ResizeObserver_1 = require("../../components/ResizeObserver");
15
+ const NamedQueryContext_1 = require("../../components/ExpressionEditor/NamedQueryContext");
16
+ const useKeyboardNavigation_1 = require("./useKeyboardNavigation");
17
+ exports.SummaryTag = (props) => React.createElement(rebass_1.Text, Object.assign({}, props));
18
+ exports.SummaryText = (props) => (React.createElement(rebass_1.Text, Object.assign({ fontSize: 2, mb: 3 }, props)));
19
+ exports.FormDescriptionText = (props) => (React.createElement(rebass_1.Text, Object.assign({ fontSize: 2, mt: 1 }, props)));
20
+ exports.OnePageWizardContext = React.createContext({
21
+ data: null,
22
+ sections: [],
23
+ setCurrentSection: (index) => { },
24
+ });
25
+ function useOnePageWizardContext() {
26
+ return React.useContext(exports.OnePageWizardContext);
27
+ }
28
+ exports.useOnePageWizardContext = useOnePageWizardContext;
29
+ exports.OnePageWizard = (props) => {
30
+ var _a, _b;
31
+ let defaultCurrentIndex = 0;
32
+ if (props.defaultCurrentSectionName) {
33
+ const candidate = props.sections.findIndex((section) => section !== '-' && section.title === props.defaultCurrentSectionName);
34
+ if (candidate >= 0) {
35
+ defaultCurrentIndex = candidate;
36
+ }
37
+ }
38
+ const [currentSection, setCurrentSection] = useProperty_1.default(props, 'currentIndex', defaultCurrentIndex, {
39
+ onChange: (index) => {
40
+ var _a;
41
+ (_a = props.onSectionChange) === null || _a === void 0 ? void 0 : _a.call(props, index);
42
+ },
43
+ });
44
+ const [namedQuery, setNamedQuery] = react_1.useState(false);
45
+ const [navIndexMap] = react_1.useState(() => new Map());
46
+ const handleClickFinish = () => {
47
+ var _a;
48
+ (_a = props.onFinish) === null || _a === void 0 ? void 0 : _a.call(props, props.data);
49
+ };
50
+ const renderSection = (index) => {
51
+ const section = visibleSections[index];
52
+ if (section === '-') {
53
+ return React.createElement(React.Fragment, { key: index });
54
+ }
55
+ return (React.createElement(rebass_1.Flex, { flexDirection: "column", key: index, "data-name": `section-${index}`, style: { minHeight: '100%' }, mr: 2 },
56
+ React.createElement(rebass_1.Box, { py: 3, paddingLeft: 2, fontSize: 4, className: "ab-OnePageWizard__details" }, section.details),
57
+ React.createElement(rebass_1.Box, { flex: 1, className: "ab-OnePageWizard__section" }, section.render(props.data, index))));
58
+ };
59
+ const selectedNodeRef = react_1.useRef(null);
60
+ const selectedFeedback = (React.createElement("div", { ref: selectedNodeRef, className: "ab-OnePageWizard__selected-title-overlay", style: {
61
+ position: 'absolute',
62
+ background: 'var(--ab-cmp-one-page-wizard-selected-title__background)',
63
+ pointerEvents: 'none',
64
+ borderRadius: 'var(--ab__border-radius)',
65
+ transition: 'top 0.2s',
66
+ } }));
67
+ const sizeOwnerRef = react_1.useRef(null);
68
+ const [width, setWidth] = react_1.useState(0);
69
+ ResizeObserver_1.useResizeObserver(sizeOwnerRef, ({ width }) => {
70
+ setWidth(width);
71
+ });
72
+ React.useEffect(() => {
73
+ const node = selectedNodeRef.current;
74
+ const parent = node.parentNode;
75
+ const activeElement = parent.children[currentSection];
76
+ node.style.top = `${activeElement.offsetTop}px`;
77
+ node.style.left = `${activeElement.offsetLeft}px`;
78
+ node.style.height = `${activeElement.offsetHeight}px`;
79
+ node.style.width = `${activeElement.offsetWidth}px`;
80
+ }, [currentSection, width]);
81
+ let navIndex = 0;
82
+ const dialogRef = react_1.useRef(null);
83
+ let invalidCount = 0;
84
+ let firstErrorMessage = null;
85
+ const contextValue = {
86
+ data: props.data,
87
+ sections: props.sections,
88
+ setCurrentSection,
89
+ };
90
+ const visibleSections = React.useMemo(() => {
91
+ return props.sections.filter((section) => section === '-' ||
92
+ section.isVisible == undefined ||
93
+ section.isVisible(props.data, contextValue));
94
+ }, [props.sections]);
95
+ contextValue.sections = visibleSections;
96
+ const validSectionsMap = visibleSections.reduce((acc, section, index) => {
97
+ if (section === '-') {
98
+ acc.set(index, true);
99
+ return acc;
100
+ }
101
+ const valid = section.isValid ? section.isValid(props.data, contextValue) : true; //!active && canFinish !== true;
102
+ if (valid !== true) {
103
+ invalidCount++;
104
+ if (firstErrorMessage == null) {
105
+ firstErrorMessage = valid;
106
+ }
107
+ }
108
+ acc.set(index, valid);
109
+ return acc;
110
+ }, new Map());
111
+ useKeyboardNavigation_1.useKeyboardNavigation(setCurrentSection, visibleSections);
112
+ const canFinish = !invalidCount;
113
+ return (React.createElement(NamedQueryContext_1.NamedQueryContext.Provider, { value: { namedQuery, setNamedQuery } },
114
+ React.createElement(exports.OnePageWizardContext.Provider, { value: contextValue },
115
+ React.createElement(Dialog_1.default, { modal: true, isOpen: true, showCloseButton: false, focusOnBrowserVisible: true, style: {
116
+ borderRadius: 'var(--ab__border-radius)',
117
+ overflow: 'hidden',
118
+ height: '80vh',
119
+ }, ref: dialogRef, onDismiss: () => { var _a; return (_a = props.onHide) === null || _a === void 0 ? void 0 : _a.call(props); }, onKeyDown: (event) => {
120
+ if (event.metaKey || event.ctrlKey) {
121
+ const { key } = event;
122
+ if (!isNaN(Number(key))) {
123
+ const num = Number(key);
124
+ if (navIndexMap.has(num)) {
125
+ const index = navIndexMap.get(num);
126
+ setCurrentSection(index);
127
+ event.preventDefault();
128
+ event.stopPropagation();
129
+ requestAnimationFrame(() => {
130
+ var _a;
131
+ (_a = dialogRef === null || dialogRef === void 0 ? void 0 : dialogRef.current) === null || _a === void 0 ? void 0 : _a.bringToFront();
132
+ });
133
+ }
134
+ }
135
+ }
136
+ } },
137
+ React.createElement(rebass_1.Flex, { className: "ab-OnePageWizard", flexDirection: "column", "data-name": props.name, style: Object.assign({ height: '100%', width: '90vw', maxWidth: 1200 }, props.style) },
138
+ React.createElement(rebass_1.Flex, { flexDirection: "row", alignItems: "stretch", flex: 1, style: { overflow: 'auto' } },
139
+ React.createElement(rebass_1.Flex, { flexDirection: "column", padding: 3, className: "ab-OnePageWizard__section-title-container", ref: sizeOwnerRef, style: { overflow: 'auto', position: 'relative', flex: 'none' } },
140
+ visibleSections.map((section, index) => {
141
+ if (section === '-') {
142
+ return (React.createElement(rebass_1.Box, { as: "hr", mt: 2, className: "ab-OnePageWizard__section-separator", key: `${index}-`, style: {
143
+ width: '100%',
144
+ border: 'none',
145
+ borderTop: `1px solid var(--ab-color-inputborder)`,
146
+ } }));
147
+ }
148
+ navIndex++;
149
+ navIndexMap.set(navIndex, index);
150
+ const active = index === currentSection;
151
+ const disabled = false; //!active && !currentSectionValid;
152
+ return (React.createElement(rebass_1.Flex, { className: "ab-OnePageWizard__section-title", "data-name": section.title, flexDirection: "row", style: {
153
+ cursor: disabled ? 'auto' : 'pointer',
154
+ zIndex: 10,
155
+ transition: 'color 0.2s',
156
+ opacity: disabled ? 0.5 : 1,
157
+ }, key: section.title, color: active ? 'var(--ab-cmp-one-page-wizard-section-title__color)' : '', px: 2, py: 1, mt: index ? 2 : 0, onClick: () => {
158
+ if (disabled) {
159
+ return;
160
+ }
161
+ setCurrentSection(index);
162
+ } },
163
+ React.createElement(KeyHint_1.KeyHint, { mr: 2, style: { display: 'inline-block' } }, navIndex),
164
+ React.createElement("div", { style: { flex: 1 } }, section.title),
165
+ React.createElement(icons_1.Icon, { name: "error", style: {
166
+ marginLeft: 'var(--ab-space-2)',
167
+ visibility: validSectionsMap.get(index) !== true ? 'visible' : 'hidden',
168
+ } })));
169
+ }),
170
+ selectedFeedback,
171
+ React.createElement(rebass_1.Box, { flex: 1 }),
172
+ React.createElement(KeyHint_1.KeyHint, { style: { lineHeight: 1.5 }, className: "ab-OnePageWizard__key-hint" },
173
+ isMacLike_1.isMacLike() ? 'Cmd' : 'Ctrl',
174
+ " + #",
175
+ React.createElement("br", null),
176
+ "to navigate")),
177
+ React.createElement(rebass_1.Flex, { flex: 1, flexDirection: "column", className: "ab-OnePageWizard__section-container" }, renderSection(currentSection))),
178
+ React.createElement(rebass_1.Flex, { flexDirection: "row", padding: 2, alignItems: "center", className: "ab-WizardDialog__footer ab-OnePageWizard__footer" },
179
+ React.createElement(SimpleButton_1.default, { tone: "neutral", variant: "text", "data-name": "close", onClick: () => { var _a; return (_a = props.onHide) === null || _a === void 0 ? void 0 : _a.call(props); }, tooltip: (_a = props.closeTooltip) !== null && _a !== void 0 ? _a : 'Close wizard', accessLevel: 'Full' }, (_b = props.closeText) !== null && _b !== void 0 ? _b : 'CLOSE'),
180
+ React.createElement(KeyHint_1.KeyHint, { ml: 2 }, "Esc"),
181
+ React.createElement(rebass_1.Text, { fontSize: 2, mr: 3, className: "ab-OnePageWizard__error", style: {
182
+ flex: 1,
183
+ color: 'var(--ab-color-error)',
184
+ textAlign: 'end',
185
+ } }, firstErrorMessage),
186
+ React.createElement(SimpleButton_1.default, { tone: "accent", "data-name": "finish", variant: "raised", disabled: canFinish !== true, onClick: () => handleClickFinish(), icon: 'check', accessLevel: 'Full' }, "Finish")))))));
187
+ };
@@ -1,2 +1,2 @@
1
- import { OnePageWizardSection } from './OnePageAdaptableWizard';
1
+ import { OnePageWizardSection } from './OnePageWizards';
2
2
  export declare const useKeyboardNavigation: <ENTITY>(setCurrentSection: (value: number | ((v: number) => number)) => void, sections: ("-" | OnePageWizardSection<ENTITY>)[]) => void;
@@ -20,6 +20,7 @@ const ensurePortalElement = () => {
20
20
  portalElement.classList.add('ab-cmp-modal-window');
21
21
  document.body.appendChild(portalElement);
22
22
  };
23
+ const normalizeTopLeft = (position) => (position < 0 ? 0 : position);
23
24
  const getResizePositionDelta = (direction, delta) => {
24
25
  const positionDelta = { x: 0, y: 0 };
25
26
  const left = -delta.width;
@@ -41,21 +42,26 @@ const getResizePositionDelta = (direction, delta) => {
41
42
  return null;
42
43
  };
43
44
  exports.WindowModal = (props) => {
45
+ var _a, _b;
44
46
  ensurePortalElement();
45
47
  const positionDeltaRef = React.useRef(null);
46
- const positionRef = React.useRef(props.position);
48
+ const normalizedPosition = {
49
+ x: normalizeTopLeft((_a = props.position) === null || _a === void 0 ? void 0 : _a.x),
50
+ y: normalizeTopLeft((_b = props.position) === null || _b === void 0 ? void 0 : _b.y),
51
+ };
52
+ const positionRef = React.useRef(normalizedPosition);
47
53
  const stacking = useStacking_1.useStacking();
48
54
  /**
49
55
  * This is needed because the function called in onDrop is saved when
50
56
  * it gets attached to the DOM element event handler.
51
57
  * This handler changes only when the underlying node changes.
52
58
  */
53
- positionRef.current = props.position;
59
+ positionRef.current = normalizedPosition;
54
60
  const style = {
55
61
  zIndex: stacking.zIndex,
56
62
  position: 'absolute',
57
- left: props.position.x,
58
- top: props.position.y,
63
+ left: normalizedPosition.x,
64
+ top: normalizedPosition.y,
59
65
  };
60
66
  const handleDrop = (dx, dy) => {
61
67
  const newPosition = {
@@ -72,11 +78,11 @@ exports.WindowModal = (props) => {
72
78
  onDrop: handleDrop,
73
79
  });
74
80
  const handleResizeStop = (event, direction, elementRef, delta) => {
75
- let newPosition = props.position;
81
+ let newPosition = normalizedPosition;
76
82
  if (positionDeltaRef.current) {
77
83
  newPosition = {
78
- x: props.position.x + positionDeltaRef.current.x,
79
- y: props.position.y + positionDeltaRef.current.y,
84
+ x: normalizedPosition.x + positionDeltaRef.current.x,
85
+ y: normalizedPosition.y + positionDeltaRef.current.y,
80
86
  };
81
87
  positionDeltaRef.current = null;
82
88
  applyTransform(0, 0);
package/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const _default: "12.0.0-canary.1";
1
+ declare const _default: "12.0.0-canary.2";
2
2
  export default _default;
package/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = '12.0.0-canary.1'; // PLEASE DONT UPDATE THIS!!! - will be updated at build time with the correct version
3
+ exports.default = '12.0.0-canary.2'; // PLEASE DONT UPDATE THIS!!! - will be updated at build time with the correct version