@datagrok-libraries/utils 3.3.2 → 4.0.0

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 (36) hide show
  1. package/package.json +1 -1
  2. package/css/file-input.css +0 -32
  3. package/css/history-input.css +0 -27
  4. package/css/history-panel.css +0 -57
  5. package/css/pipeline-view.css +0 -13
  6. package/css/rich-function-view.css +0 -4
  7. package/src/computation-view.d.ts +0 -78
  8. package/src/computation-view.d.ts.map +0 -1
  9. package/src/computation-view.js +0 -157
  10. package/src/function-view.d.ts +0 -226
  11. package/src/function-view.d.ts.map +0 -1
  12. package/src/function-view.js +0 -384
  13. package/src/history-utils.d.ts +0 -65
  14. package/src/history-utils.d.ts.map +0 -1
  15. package/src/history-utils.js +0 -212
  16. package/src/pipeline-view.d.ts +0 -40
  17. package/src/pipeline-view.d.ts.map +0 -1
  18. package/src/pipeline-view.js +0 -178
  19. package/src/rich-function-view.d.ts +0 -55
  20. package/src/rich-function-view.d.ts.map +0 -1
  21. package/src/rich-function-view.js +0 -571
  22. package/src/shared-components/file-input.d.ts +0 -23
  23. package/src/shared-components/file-input.d.ts.map +0 -1
  24. package/src/shared-components/file-input.js +0 -133
  25. package/src/shared-components/history-input.d.ts +0 -26
  26. package/src/shared-components/history-input.d.ts.map +0 -1
  27. package/src/shared-components/history-input.js +0 -192
  28. package/src/shared-components/history-panel.d.ts +0 -65
  29. package/src/shared-components/history-panel.d.ts.map +0 -1
  30. package/src/shared-components/history-panel.js +0 -502
  31. package/src/shared-components/ui-utils.d.ts +0 -10
  32. package/src/shared-components/ui-utils.d.ts.map +0 -1
  33. package/src/shared-components/ui-utils.js +0 -19
  34. package/src/validation.d.ts +0 -56
  35. package/src/validation.d.ts.map +0 -1
  36. package/src/validation.js +0 -152
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "fullName": "Utils",
7
- "version": "3.3.2",
7
+ "version": "4.0.0",
8
8
  "description": "Common utilities",
9
9
  "dependencies": {
10
10
  "cash-dom": "^8.1.1",
@@ -1,32 +0,0 @@
1
- .cv-drop-area {
2
- position: relative;
3
- }
4
-
5
- .ui-form .cv-drop-area .icon {
6
- padding-top: 10px;
7
- }
8
-
9
- .ui-form-condensed .cv-drop-area .icon {
10
- padding-top: 0px;
11
- position: absolute;
12
- top: 35px;
13
- right: 10px;
14
- }
15
-
16
- .cv-drop-area .default {
17
- color: var(--grey-2);
18
- }
19
-
20
- .cv-drop-area .drag-n-dropping {
21
- background-color: var(--steel-1);
22
- border: 1px dashed var(--blue-1);
23
- color: var(--grey-3);
24
- }
25
-
26
- .cv-drop-area .error {
27
- color: var(--red-3);
28
- }
29
-
30
- .cv-drop-area .success {
31
- color: var(--grey-6);
32
- }
@@ -1,27 +0,0 @@
1
- .no-elements-label {
2
- margin: 8px;
3
- }
4
-
5
- .arrow-box {
6
- position: relative;
7
- }
8
-
9
- .arrow-box:before {
10
- left: -6px;
11
- top: 55px;
12
- content: "";
13
- height: 0;
14
- width: 0;
15
- position: absolute;
16
- pointer-events: none;
17
- background-color: white;
18
-
19
- transform-origin: center;
20
- transform: rotate(-135deg);
21
- box-shadow: -4px 4px 0px 4.5px white, #4d5261 0px 0px 5px;;
22
-
23
- border: 5px solid black;
24
- border-color: transparent transparent #FFFFFF #FFFFFF;
25
-
26
- margin-top: -21px;
27
- }
@@ -1,57 +0,0 @@
1
- .cv-funccall-card:hover {
2
- box-shadow: 0px 0px 3px #b8bac0;
3
- cursor: pointer;
4
- }
5
-
6
- .cv-funccall-card {
7
- margin: 2px 1px;
8
- padding: 5px;
9
- justify-content: space-between;
10
- }
11
-
12
- .cv-funccall-card.clicked {
13
- border: 1px solid var(--blue-1);
14
- }
15
-
16
- .cv-funccall-card-hover-icon {
17
- display: none;
18
- }
19
-
20
- .cv-funccall-card:hover .cv-funccall-card-hover-icon {
21
- display: flex;
22
- }
23
-
24
- .cv-funccall-card-def-icon {
25
- display: flex;
26
- }
27
-
28
- .cv-funccall-card:hover .cv-funccall-card-def-icon {
29
- display: none;
30
- }
31
-
32
- .cv-funccall-card .cv-card-content {
33
- justify-content: space-around;
34
- margin-left: 5px;
35
- }
36
-
37
- .cv-funccall-card .cv-card-content * {
38
- margin-bottom: 3px;
39
- }
40
-
41
- .cv-funccall-card-def-icon {
42
- margin: 5px;
43
- }
44
-
45
- .cv-funccall-card-hover-icon {
46
- margin: 5px;
47
- }
48
-
49
- .cv-funccall-card .description {
50
- margin-bottom: 2px;
51
- color: var(--grey-3);
52
- }
53
-
54
- .cv-funccall-card .date {
55
- color: var(--grey-3);
56
- margin-left: 5px;
57
- }
@@ -1,13 +0,0 @@
1
- .pipeline-view .d4-ribbon-name.selected {
2
- color: #104161;
3
- }
4
-
5
- .pipeline-view .d4-ribbon-name {
6
- color: var(--blue-1);
7
- margin: 12px 6px;
8
- font-weight: normal;
9
- }
10
-
11
- .pipeline-view .d4-ribbon-name + .d4-ribbon-name::before {
12
- color: var(--grey-3);
13
- }
@@ -1,4 +0,0 @@
1
- .ui-input-root > input.ui-input-editor.disabled:focus {
2
- outline: none;
3
- border-bottom: 1px solid var(--grey-2)!important;
4
- }
@@ -1,78 +0,0 @@
1
- import * as DG from 'datagrok-api/dg';
2
- import { FunctionView } from './function-view';
3
- /**
4
- * Base class for handling Compute models (see https://github.com/datagrok-ai/public/blob/master/help/compute/compute.md).
5
- * In most cases, the computation is a simple {@link Func}
6
- * Extend it in cases where a behavior or UI not supported by the {@link FunctionView} is needed.
7
- *
8
- * It provides the following functionality out-of-the-box, where each section could be customized:
9
- * - a structured way to represent input and output parameters: {@link parameters}
10
- * - generic way to generate UI for inputs, outputs, and interactivity (running the model, etc)
11
- * - persisting historical results to the db (via {@link parameters})
12
- * - export (to Excel and PDF): {@link export}
13
- * - easy loading of historical runs
14
- * - routing
15
- * - entering the real, measured (as opposed to predicted) values manually
16
- * - notifications for changing inputs, completion of computations, etc: {@link onInputChanged}
17
- * */
18
- export declare abstract class ComputationView extends FunctionView {
19
- options: {
20
- historyEnabled: boolean;
21
- isTabbed: boolean;
22
- parentCall?: DG.FuncCall;
23
- };
24
- /**
25
- * Overrided to:
26
- * 1) add getting Help and ReportBug URLs from the package.
27
- * 2) change routing logic for models
28
- */
29
- constructor(funcName: string, options?: {
30
- historyEnabled: boolean;
31
- isTabbed: boolean;
32
- parentCall?: DG.FuncCall;
33
- });
34
- /** Override to customize getting mocks
35
- * @stability Stable
36
- */
37
- getMocks: ({
38
- mockName: string;
39
- action: () => Promise<void>;
40
- }[]) | null;
41
- /** Override to customize getting templates
42
- * @stability Stable
43
- */
44
- getTemplates: ({
45
- name: string;
46
- action: () => Promise<void>;
47
- }[]) | null;
48
- /** Override to customize getting help feature. Called when "Help" is clicked.
49
- * @stability Stable
50
- */
51
- getHelp: (() => Promise<void>) | null;
52
- /** Override to customize bug reporting feature. Called when "Report a bug" is clicked.
53
- * @stability Stable
54
- */
55
- reportBug: (() => Promise<void>) | null;
56
- /** Override to customize feature request feature. Called when "Request a feature" is clicked.
57
- * @stability Stable
58
- */
59
- requestFeature: (() => Promise<void>) | null;
60
- /** Override to customize "about" info obtaining feature. Called when "About" is clicked.
61
- * Default implementation finds {@link this.funcCall}'s package and shows it's properties.
62
- * @stability Stable
63
- */
64
- getAbout: (() => Promise<string>) | null;
65
- /**
66
- * Looks for
67
- * {@link getMocks}, {@link getTemplates}, {@link getHelp}, {@link reportBug}, {@link requestFeature}, {@link getAbout}, {@link exportConfig}
68
- * members and creates "Model" menu
69
- * @stability Stable
70
- */
71
- buildRibbonMenu(): void;
72
- /**
73
- * Finds {@link this.funcCall}'s package and retrieves it's variables.
74
- * @stability Stable
75
- */
76
- private getPackageUrls;
77
- }
78
- //# sourceMappingURL=computation-view.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"computation-view.d.ts","sourceRoot":"","sources":["computation-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAG7C;;;;;;;;;;;;;;KAcK;AACL,8BAAsB,eAAgB,SAAQ,YAAY;IAQ/C,OAAO,EAAE;QACd,cAAc,EAAE,OAAO,CAAC;QACxB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAA;KACzB;IAXH;;;;OAIG;gBAED,QAAQ,EAAE,MAAM,EACT,OAAO,GAAE;QACd,cAAc,EAAE,OAAO,CAAC;QACxB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAA;KACiB;IAoB7C;;MAEE;IACF,QAAQ,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAC,EAAE,CAAC,GAAG,IAAI,CAAQ;IAE5E;;MAEE;IACF,YAAY,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAC,EAAE,CAAC,GAAG,IAAI,CAAQ;IAE5E;;MAEE;IACF,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAQ;IAE7C;;MAEE;IACF,SAAS,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAQ;IAE/C;;MAEE;IACF,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAQ;IAEpD;;;MAGE;IACF,QAAQ,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAGtC;IAEF;;;;;MAKE;IACO,eAAe;IA4DxB;;;MAGE;YACY,cAAc;CAW7B"}
@@ -1,157 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- /* eslint-disable valid-jsdoc */
11
- /* eslint-disable max-len */
12
- import * as grok from 'datagrok-api/grok';
13
- import * as ui from 'datagrok-api/ui';
14
- import * as DG from 'datagrok-api/dg';
15
- import { FunctionView } from './function-view';
16
- import dayjs from 'dayjs';
17
- /**
18
- * Base class for handling Compute models (see https://github.com/datagrok-ai/public/blob/master/help/compute/compute.md).
19
- * In most cases, the computation is a simple {@link Func}
20
- * Extend it in cases where a behavior or UI not supported by the {@link FunctionView} is needed.
21
- *
22
- * It provides the following functionality out-of-the-box, where each section could be customized:
23
- * - a structured way to represent input and output parameters: {@link parameters}
24
- * - generic way to generate UI for inputs, outputs, and interactivity (running the model, etc)
25
- * - persisting historical results to the db (via {@link parameters})
26
- * - export (to Excel and PDF): {@link export}
27
- * - easy loading of historical runs
28
- * - routing
29
- * - entering the real, measured (as opposed to predicted) values manually
30
- * - notifications for changing inputs, completion of computations, etc: {@link onInputChanged}
31
- * */
32
- export class ComputationView extends FunctionView {
33
- /**
34
- * Overrided to:
35
- * 1) add getting Help and ReportBug URLs from the package.
36
- * 2) change routing logic for models
37
- */
38
- constructor(funcName, options = { historyEnabled: true, isTabbed: false }) {
39
- super(funcName, options);
40
- this.options = options;
41
- /** Override to customize getting mocks
42
- * @stability Stable
43
- */
44
- this.getMocks = null;
45
- /** Override to customize getting templates
46
- * @stability Stable
47
- */
48
- this.getTemplates = null;
49
- /** Override to customize getting help feature. Called when "Help" is clicked.
50
- * @stability Stable
51
- */
52
- this.getHelp = null;
53
- /** Override to customize bug reporting feature. Called when "Report a bug" is clicked.
54
- * @stability Stable
55
- */
56
- this.reportBug = null;
57
- /** Override to customize feature request feature. Called when "Request a feature" is clicked.
58
- * @stability Stable
59
- */
60
- this.requestFeature = null;
61
- /** Override to customize "about" info obtaining feature. Called when "About" is clicked.
62
- * Default implementation finds {@link this.funcCall}'s package and shows it's properties.
63
- * @stability Stable
64
- */
65
- this.getAbout = () => __awaiter(this, void 0, void 0, function* () {
66
- const pack = yield grok.dapi.packages.find(this.parentCall.func.package.id);
67
- return pack ? `${pack.friendlyName}.\nLast updated on ${dayjs(pack.updatedOn).format('YYYY MMM D, HH:mm')}` : `No package info was found`;
68
- });
69
- if (!options.parentCall)
70
- options.parentCall = grok.functions.getCurrentCall();
71
- const parentCall = options.parentCall;
72
- this.parentCall = parentCall;
73
- this.parentView = parentCall === null || parentCall === void 0 ? void 0 : parentCall.parentCall.aux['view'];
74
- this.basePath = `/${parentCall === null || parentCall === void 0 ? void 0 : parentCall.func.name}`;
75
- this.subs.push(this.onFuncCallReady.subscribe({
76
- complete: () => __awaiter(this, void 0, void 0, function* () {
77
- yield this.getPackageUrls();
78
- this.buildRibbonMenu();
79
- this.changeViewName(parentCall.func.friendlyName);
80
- })
81
- }));
82
- }
83
- /**
84
- * Looks for
85
- * {@link getMocks}, {@link getTemplates}, {@link getHelp}, {@link reportBug}, {@link requestFeature}, {@link getAbout}, {@link exportConfig}
86
- * members and creates "Model" menu
87
- * @stability Stable
88
- */
89
- buildRibbonMenu() {
90
- this.ribbonMenu.clear();
91
- super.buildRibbonMenu();
92
- if (!this.exportConfig && !this.reportBug && !this.requestFeature && !this.getHelp && !this.getMocks && !this.getTemplates)
93
- return;
94
- const ribbonMenu = this.ribbonMenu.group('Model');
95
- if (this.getMocks && this.getMocks.length > 0) {
96
- if (this.getMocks.length === 1) {
97
- ribbonMenu.item('Input data mock', this.getMocks[0].action);
98
- }
99
- else {
100
- const dataGroup = ribbonMenu.group('Input data mocks');
101
- this.getMocks.forEach((val) => {
102
- dataGroup.item(val.mockName, val.action);
103
- });
104
- ribbonMenu.endGroup();
105
- }
106
- }
107
- if (this.getTemplates && this.getTemplates.length > 0) {
108
- if (this.getTemplates.length === 1) {
109
- ribbonMenu.item('Input data template', this.getTemplates[0].action);
110
- }
111
- else {
112
- const dataGroup = ribbonMenu.group('Input data templates');
113
- this.getTemplates.forEach((val) => {
114
- dataGroup.item(val.name, val.action);
115
- });
116
- ribbonMenu.endGroup();
117
- }
118
- }
119
- if (this.exportConfig && this.exportConfig.supportedFormats.length > 0) {
120
- ribbonMenu
121
- .group('Export')
122
- .items(this.exportConfig.supportedFormats, (format) => __awaiter(this, void 0, void 0, function* () { return DG.Utils.download(this.exportConfig.filename(format), yield this.exportConfig.export(format)); }))
123
- .endGroup();
124
- }
125
- if (this.reportBug)
126
- ribbonMenu.item('Report a bug', () => this.reportBug());
127
- if (this.requestFeature)
128
- ribbonMenu.item('Request a feature', () => this.requestFeature());
129
- if (this.getHelp)
130
- ribbonMenu.item('Help', () => this.getHelp());
131
- if (this.getAbout) {
132
- ribbonMenu.item('About', () => __awaiter(this, void 0, void 0, function* () {
133
- const dialog = ui.dialog('Current version');
134
- (yield this.getAbout()).split('\n').forEach((line) => dialog.add(ui.label(line)));
135
- dialog.onOK(() => { });
136
- dialog.getButton('CANCEL').style.display = 'none';
137
- dialog.show({ center: true });
138
- }));
139
- }
140
- }
141
- /**
142
- * Finds {@link this.funcCall}'s package and retrieves it's variables.
143
- * @stability Stable
144
- */
145
- getPackageUrls() {
146
- return __awaiter(this, void 0, void 0, function* () {
147
- const pack = yield grok.dapi.packages.find(this.parentCall.func.package.id);
148
- const reportBugUrl = (yield (pack === null || pack === void 0 ? void 0 : pack.getProperties())).REPORT_BUG_URL;
149
- if (reportBugUrl && !this.reportBug)
150
- this.reportBug = () => __awaiter(this, void 0, void 0, function* () { window.open(reportBugUrl, '_blank'); });
151
- const reqFeatureUrl = (yield (pack === null || pack === void 0 ? void 0 : pack.getProperties())).REQUEST_FEATURE_URL;
152
- if (reqFeatureUrl && !this.requestFeature)
153
- this.requestFeature = () => __awaiter(this, void 0, void 0, function* () { window.open(reqFeatureUrl, '_blank'); });
154
- });
155
- }
156
- }
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0YXRpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbXB1dGF0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCOzs7Ozs7Ozs7Ozs7OztLQWNLO0FBQ0wsTUFBTSxPQUFnQixlQUFnQixTQUFRLFlBQVk7SUFDeEQ7Ozs7T0FJRztJQUNILFlBQ0UsUUFBZ0IsRUFDVCxVQUlILEVBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDO1FBRTNDLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFObEIsWUFBTyxHQUFQLE9BQU8sQ0FJNkI7UUFvQjdDOztVQUVFO1FBQ0YsYUFBUSxHQUErRCxJQUFJLENBQUM7UUFFNUU7O1VBRUU7UUFDRixpQkFBWSxHQUEyRCxJQUFJLENBQUM7UUFFNUU7O1VBRUU7UUFDRixZQUFPLEdBQWlDLElBQUksQ0FBQztRQUU3Qzs7VUFFRTtRQUNGLGNBQVMsR0FBaUMsSUFBSSxDQUFDO1FBRS9DOztVQUVFO1FBQ0YsbUJBQWMsR0FBaUMsSUFBSSxDQUFDO1FBRXBEOzs7VUFHRTtRQUNGLGFBQVEsR0FBbUMsR0FBUyxFQUFFO1lBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZ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QUFTLEVBQUUsZ0RBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUV4RSxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsYUFBYSxFQUFFLENBQVEsQ0FBQSxDQUFDLG1CQUFtQixDQUFDO1lBQy9FLElBQUksYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7Z0JBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBUyxFQUFFLGdEQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUM7UUFDaEYsQ0FBQztLQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7RnVuY3Rpb25WaWV3fSBmcm9tICcuL2Z1bmN0aW9uLXZpZXcnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBDb21wdXRlIG1vZGVscyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhZ3Jvay1haS9wdWJsaWMvYmxvYi9tYXN0ZXIvaGVscC9jb21wdXRlL2NvbXB1dGUubWQpLlxuICogSW4gbW9zdCBjYXNlcywgdGhlIGNvbXB1dGF0aW9uIGlzIGEgc2ltcGxlIHtAbGluayBGdW5jfVxuICogRXh0ZW5kIGl0IGluIGNhc2VzIHdoZXJlIGEgYmVoYXZpb3Igb3IgVUkgbm90IHN1cHBvcnRlZCBieSB0aGUge0BsaW5rIEZ1bmN0aW9uVmlld30gaXMgbmVlZGVkLlxuICpcbiAqIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0eSBvdXQtb2YtdGhlLWJveCwgd2hlcmUgZWFjaCBzZWN0aW9uIGNvdWxkIGJlIGN1c3RvbWl6ZWQ6XG4gKiAtIGEgc3RydWN0dXJlZCB3YXkgdG8gcmVwcmVzZW50IGlucHV0IGFuZCBvdXRwdXQgcGFyYW1ldGVyczoge0BsaW5rIHBhcmFtZXRlcnN9XG4gKiAtIGdlbmVyaWMgd2F5IHRvIGdlbmVyYXRlIFVJIGZvciBpbnB1dHMsIG91dHB1dHMsIGFuZCBpbnRlcmFjdGl2aXR5IChydW5uaW5nIHRoZSBtb2RlbCwgZXRjKVxuICogICAtIHBlcnNpc3RpbmcgaGlzdG9yaWNhbCByZXN1bHRzIHRvIHRoZSBkYiAodmlhIHtAbGluayBwYXJhbWV0ZXJzfSlcbiAqIC0gZXhwb3J0ICh0byBFeGNlbCBhbmQgUERGKToge0BsaW5rIGV4cG9ydH1cbiAqIC0gZWFzeSBsb2FkaW5nIG9mIGhpc3RvcmljYWwgcnVuc1xuICogLSByb3V0aW5nXG4gKiAtIGVudGVyaW5nIHRoZSByZWFsLCBtZWFzdXJlZCAoYXMgb3Bwb3NlZCB0byBwcmVkaWN0ZWQpIHZhbHVlcyBtYW51YWxseVxuICogLSBub3RpZmljYXRpb25zIGZvciBjaGFuZ2luZyBpbnB1dHMsIGNvbXBsZXRpb24gb2YgY29tcHV0YXRpb25zLCBldGM6IHtAbGluayBvbklucHV0Q2hhbmdlZH1cbiAqICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tcHV0YXRpb25WaWV3IGV4dGVuZHMgRnVuY3Rpb25WaWV3IHtcbiAgLyoqXG4gICAqIE92ZXJyaWRlZCB0bzpcbiAgICogMSkgYWRkIGdldHRpbmcgSGVscCBhbmQgUmVwb3J0QnVnIFVSTHMgZnJvbSB0aGUgcGFja2FnZS5cbiAgICogMikgY2hhbmdlIHJvdXRpbmcgbG9naWMgZm9yIG1vZGVsc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgZnVuY05hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgb3B0aW9uczoge1xuICAgICAgaGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW4sXG4gICAgICBpc1RhYmJlZDogYm9vbGVhbixcbiAgICAgIHBhcmVudENhbGw/OiBERy5GdW5jQ2FsbFxuICAgIH0gPSB7aGlzdG9yeUVuYWJsZWQ6IHRydWUsIGlzVGFiYmVkOiBmYWxzZX1cbiAgKSB7XG4gICAgc3VwZXIoZnVuY05hbWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFvcHRpb25zLnBhcmVudENhbGwpIG9wdGlvbnMucGFyZW50Q2FsbCA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCk7XG5cbiAgICBjb25zdCBwYXJlbnRDYWxsID0gb3B0aW9ucy5wYXJlbnRDYWxsO1xuICAgIHRoaXMucGFyZW50Q2FsbCA9IHBhcmVudENhbGw7XG4gICAgdGhpcy5wYXJlbnRWaWV3ID0gcGFyZW50Q2FsbD8ucGFyZW50Q2FsbC5hdXhbJ3ZpZXcnXTtcbiAgICB0aGlzLmJhc2VQYXRoID0gYC8ke3BhcmVudENhbGw/LmZ1bmMubmFtZX1gO1xuXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5vbkZ1bmNDYWxsUmVhZHkuc3Vic2NyaWJlKHtcbiAgICAgIGNvbXBsZXRlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0UGFja2FnZVVybHMoKTtcbiAgICAgICAgdGhpcy5idWlsZFJpYmJvbk1lbnUoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VWaWV3TmFtZShwYXJlbnRDYWxsLmZ1bmMuZnJpZW5kbHlOYW1lKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICAvKiogT3ZlcnJpZGUgdG8gY3VzdG9taXplIGdldHRpbmcgbW9ja3NcbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIGdldE1vY2tzOiAoe21vY2tOYW1lOiBzdHJpbmcsIGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPn1bXSkgfCBudWxsID0gbnVsbDtcblxuICAvKiogT3ZlcnJpZGUgdG8gY3VzdG9taXplIGdldHRpbmcgdGVtcGxhdGVzXG4gICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICBnZXRUZW1wbGF0ZXM6ICh7bmFtZTogc3RyaW5nLCBhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD59W10pIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE92ZXJyaWRlIHRvIGN1c3RvbWl6ZSBnZXR0aW5nIGhlbHAgZmVhdHVyZS4gQ2FsbGVkIHdoZW4gXCJIZWxwXCIgaXMgY2xpY2tlZC5cbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIGdldEhlbHA6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBPdmVycmlkZSB0byBjdXN0b21pemUgYnVnIHJlcG9ydGluZyBmZWF0dXJlLiBDYWxsZWQgd2hlbiBcIlJlcG9ydCBhIGJ1Z1wiIGlzIGNsaWNrZWQuXG4gICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICByZXBvcnRCdWc6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBPdmVycmlkZSB0byBjdXN0b21pemUgZmVhdHVyZSByZXF1ZXN0IGZlYXR1cmUuIENhbGxlZCB3aGVuIFwiUmVxdWVzdCBhIGZlYXR1cmVcIiBpcyBjbGlja2VkLlxuICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgKi9cbiAgcmVxdWVzdEZlYXR1cmU6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBPdmVycmlkZSB0byBjdXN0b21pemUgXCJhYm91dFwiIGluZm8gb2J0YWluaW5nIGZlYXR1cmUuIENhbGxlZCB3aGVuIFwiQWJvdXRcIiBpcyBjbGlja2VkLlxuICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmaW5kcyB7QGxpbmsgdGhpcy5mdW5jQ2FsbH0ncyBwYWNrYWdlIGFuZCBzaG93cyBpdCdzIHByb3BlcnRpZXMuXG4gICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICBnZXRBYm91dDogKCgpID0+IFByb21pc2U8c3RyaW5nPikgfCBudWxsID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhY2sgPSBhd2FpdCBncm9rLmRhcGkucGFja2FnZXMuZmluZCh0aGlzLnBhcmVudENhbGwhLmZ1bmMucGFja2FnZS5pZCk7XG4gICAgcmV0dXJuIHBhY2sgPyBgJHtwYWNrLmZyaWVuZGx5TmFtZX0uXFxuTGFzdCB1cGRhdGVkIG9uICR7ZGF5anMocGFjay51cGRhdGVkT24pLmZvcm1hdCgnWVlZWSBNTU0gRCwgSEg6bW0nKX1gOiBgTm8gcGFja2FnZSBpbmZvIHdhcyBmb3VuZGA7XG4gIH07XG5cbiAgLyoqXG4gICAqIExvb2tzIGZvclxuICAgKiB7QGxpbmsgZ2V0TW9ja3N9LCB7QGxpbmsgZ2V0VGVtcGxhdGVzfSwge0BsaW5rIGdldEhlbHB9LCB7QGxpbmsgcmVwb3J0QnVnfSwge0BsaW5rIHJlcXVlc3RGZWF0dXJlfSwge0BsaW5rIGdldEFib3V0fSwge0BsaW5rIGV4cG9ydENvbmZpZ31cbiAgICogbWVtYmVycyBhbmQgY3JlYXRlcyBcIk1vZGVsXCIgbWVudVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICBvdmVycmlkZSBidWlsZFJpYmJvbk1lbnUoKSB7XG4gICAgdGhpcy5yaWJib25NZW51LmNsZWFyKCk7XG5cbiAgICBzdXBlci5idWlsZFJpYmJvbk1lbnUoKTtcblxuICAgIGlmICghdGhpcy5leHBvcnRDb25maWcgJiYgIXRoaXMucmVwb3J0QnVnICYmICF0aGlzLnJlcXVlc3RGZWF0dXJlICYmICF0aGlzLmdldEhlbHAgJiYgIXRoaXMuZ2V0TW9ja3MgJiYgIXRoaXMuZ2V0VGVtcGxhdGVzKSByZXR1cm47XG5cbiAgICBjb25zdCByaWJib25NZW51ID0gdGhpcy5yaWJib25NZW51Lmdyb3VwKCdNb2RlbCcpO1xuXG4gICAgaWYgKHRoaXMuZ2V0TW9ja3MgJiYgdGhpcy5nZXRNb2Nrcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodGhpcy5nZXRNb2Nrcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmliYm9uTWVudS5pdGVtKCdJbnB1dCBkYXRhIG1vY2snLCB0aGlzLmdldE1vY2tzWzBdLmFjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkYXRhR3JvdXAgPSByaWJib25NZW51Lmdyb3VwKCdJbnB1dCBkYXRhIG1vY2tzJyk7XG4gICAgICAgIHRoaXMuZ2V0TW9ja3MuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgZGF0YUdyb3VwLml0ZW0odmFsLm1vY2tOYW1lLCB2YWwuYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJpYmJvbk1lbnUuZW5kR3JvdXAoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUZW1wbGF0ZXMgJiYgdGhpcy5nZXRUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuZ2V0VGVtcGxhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByaWJib25NZW51Lml0ZW0oJ0lucHV0IGRhdGEgdGVtcGxhdGUnLCB0aGlzLmdldFRlbXBsYXRlc1swXS5hY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGF0YUdyb3VwID0gcmliYm9uTWVudS5ncm91cCgnSW5wdXQgZGF0YSB0ZW1wbGF0ZXMnKTtcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZXMuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgZGF0YUdyb3VwLml0ZW0odmFsLm5hbWUsIHZhbC5hY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmliYm9uTWVudS5lbmRHcm91cCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmV4cG9ydENvbmZpZyAmJiB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJpYmJvbk1lbnVcbiAgICAgICAgLmdyb3VwKCdFeHBvcnQnKVxuICAgICAgICAuaXRlbXModGhpcy5leHBvcnRDb25maWcuc3VwcG9ydGVkRm9ybWF0cywgYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiBERy5VdGlscy5kb3dubG9hZCh0aGlzLmV4cG9ydENvbmZpZyEuZmlsZW5hbWUoZm9ybWF0KSwgYXdhaXQgdGhpcy5leHBvcnRDb25maWchLmV4cG9ydChmb3JtYXQpKSlcbiAgICAgICAgLmVuZEdyb3VwKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVwb3J0QnVnKVxuICAgICAgcmliYm9uTWVudS5pdGVtKCdSZXBvcnQgYSBidWcnLCAoKSA9PiB0aGlzLnJlcG9ydEJ1ZyEoKSk7XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0RmVhdHVyZSlcbiAgICAgIHJpYmJvbk1lbnUuaXRlbSgnUmVxdWVzdCBhIGZlYXR1cmUnLCAoKSA9PiB0aGlzLnJlcXVlc3RGZWF0dXJlISgpKTtcblxuICAgIGlmICh0aGlzLmdldEhlbHApXG4gICAgICByaWJib25NZW51Lml0ZW0oJ0hlbHAnLCAoKSA9PiB0aGlzLmdldEhlbHAhKCkpO1xuXG4gICAgaWYgKHRoaXMuZ2V0QWJvdXQpIHtcbiAgICAgIHJpYmJvbk1lbnUuaXRlbSgnQWJvdXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHVpLmRpYWxvZygnQ3VycmVudCB2ZXJzaW9uJyk7XG4gICAgICAgIChhd2FpdCB0aGlzLmdldEFib3V0ISgpKS5zcGxpdCgnXFxuJykuZm9yRWFjaCgobGluZSkgPT4gZGlhbG9nLmFkZCh1aS5sYWJlbChsaW5lKSkpO1xuICAgICAgICBkaWFsb2cub25PSygoKSA9PiB7fSk7XG4gICAgICAgIGRpYWxvZy5nZXRCdXR0b24oJ0NBTkNFTCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIGRpYWxvZy5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB7QGxpbmsgdGhpcy5mdW5jQ2FsbH0ncyBwYWNrYWdlIGFuZCByZXRyaWV2ZXMgaXQncyB2YXJpYWJsZXMuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGFja2FnZVVybHMoKSB7XG4gICAgY29uc3QgcGFjayA9IGF3YWl0IGdyb2suZGFwaS5wYWNrYWdlcy5maW5kKHRoaXMucGFyZW50Q2FsbCEuZnVuYy5wYWNrYWdlLmlkKTtcblxuICAgIGNvbnN0IHJlcG9ydEJ1Z1VybCA9IChhd2FpdCBwYWNrPy5nZXRQcm9wZXJ0aWVzKCkgYXMgYW55KS5SRVBPUlRfQlVHX1VSTDtcbiAgICBpZiAocmVwb3J0QnVnVXJsICYmICF0aGlzLnJlcG9ydEJ1ZylcbiAgICAgIHRoaXMucmVwb3J0QnVnID0gYXN5bmMgKCkgPT4geyB3aW5kb3cub3BlbihyZXBvcnRCdWdVcmwsICdfYmxhbmsnKTsgfTtcblxuICAgIGNvbnN0IHJlcUZlYXR1cmVVcmwgPSAoYXdhaXQgcGFjaz8uZ2V0UHJvcGVydGllcygpIGFzIGFueSkuUkVRVUVTVF9GRUFUVVJFX1VSTDtcbiAgICBpZiAocmVxRmVhdHVyZVVybCAmJiAhdGhpcy5yZXF1ZXN0RmVhdHVyZSlcbiAgICAgIHRoaXMucmVxdWVzdEZlYXR1cmUgPSBhc3luYyAoKSA9PiB7IHdpbmRvdy5vcGVuKHJlcUZlYXR1cmVVcmwsICdfYmxhbmsnKTsgfTtcbiAgfVxufVxuIl19
@@ -1,226 +0,0 @@
1
- import * as DG from 'datagrok-api/dg';
2
- import { Subject, BehaviorSubject } from 'rxjs';
3
- export declare abstract class FunctionView extends DG.ViewBase {
4
- protected funcName: string;
5
- options: {
6
- historyEnabled: boolean;
7
- isTabbed: boolean;
8
- };
9
- protected _funcCall?: DG.FuncCall;
10
- protected _lastCall?: DG.FuncCall;
11
- protected _type: string;
12
- protected funcCallReplaced: Subject<true>;
13
- onFuncCallReady: BehaviorSubject<false>;
14
- /**
15
- * Constructs a new view using function with the given {@link funcName}. An fully-specified name is expected.
16
- * Search of the function is async, so async {@link init} function is used.
17
- * All other functions are called only when initialization is over and {@link this.onFuncCallReady} is emitted.
18
- * @param funcName Name of DG.Func (either script or package function) to use as view foundation
19
- * @param options Configuration object for the view.
20
- */
21
- constructor(funcName: string, options?: {
22
- historyEnabled: boolean;
23
- isTabbed: boolean;
24
- });
25
- /**
26
- * Changes the name of the view. This method also deals with rare bug when view name is not updated after change.
27
- * @param newName New name for the view
28
- */
29
- protected changeViewName(newName: string): void;
30
- private getStartId;
31
- private setAsLoaded;
32
- /**
33
- * Get current function call of the view
34
- * @returns The actual funccall associated with the view
35
- * @stability Stable
36
- */
37
- get funcCall(): DG.FuncCall;
38
- /**
39
- * Get Func of the view
40
- * @returns The actual func associated with the view
41
- * @stability Stable
42
- */
43
- get func(): DG.Func;
44
- /**
45
- * Get data of last call of associated function
46
- * @returns The actual func associated with the view
47
- * @stability Stable
48
- */
49
- get lastCall(): DG.FuncCall | undefined;
50
- /**
51
- * Set data of last call of associated function
52
- * @stability Stable
53
- */
54
- set lastCall(lastCall: DG.FuncCall | undefined);
55
- /**
56
- * View type
57
- * @stability Stable
58
- */
59
- get type(): string;
60
- /** Export options. Could be overriden partially, using default implementation of each option.
61
- * @stability Stable
62
- */
63
- exportConfig: {
64
- /** Override to provide custom export logic.
65
- * There is no default implementation, since, in general, export is dependent on the UI.
66
- *
67
- * @returns Blob with data to be exported into the file.
68
- * @stability Stable
69
- */
70
- export: ((format: string) => Promise<Blob>);
71
- /** Filename for exported files. Override for custom filenames.
72
- * Default implementation is {@link defaultExportFilename}
73
- * @param format Format name to be exported
74
- * @returns The actual filename to be used for the generated file.
75
- * @stability Stable
76
- */
77
- filename: ((format: string) => string);
78
- /** Override to provide custom list of supported export formats.
79
- * Default implementation is {@link defaultSupportedExportFormats}
80
- * These formats are available under the "Export" popup on the ribbon panel.
81
- * @returns The array of formats available for the export.
82
- * @stability Stable
83
- */
84
- supportedFormats: string[];
85
- /** Override to provide custom file extensions for exported formats.
86
- * Default implementation is {@link defaultSupportedExportExtensions}
87
- * These extensions are used in filenames {@link exportFilename}.
88
- * @returns The mapping between supported export formats and their extensions.
89
- * @stability Stable
90
- */
91
- supportedExtensions: Record<string, string>;
92
- } | null;
93
- /**
94
- * Links FuncCall to the view. In addition, sets "path" and "name" properties to corresponding ones.
95
- * After linking, emits {@link this.funcCallReplaced} event.
96
- * @param funcCall The actual funccall to be associated with the view
97
- * @stability Stable
98
- */
99
- linkFunccall(funcCall: DG.FuncCall): void;
100
- /**
101
- * Method loads corresponding FuncCall from DB if "id" param is provided in URL.
102
- * @stability Stable
103
- */
104
- protected loadFuncCallById(): Promise<void>;
105
- /**
106
- * Method for any async logic that could not be placed in the constructor directly.
107
- * It is only called in the constructor, but not awaited.
108
- * A soon as {@link this.funcCall} is set, {@link this.onFuncCallReady} is emitted.
109
- * @stability Stable
110
- */
111
- init(): Promise<void>;
112
- /**
113
- * Override to create a fully custom UI including ribbon menus and panels
114
- * @stability Stable
115
- */
116
- build(): void;
117
- /**
118
- * Override to create a custom input-output block.
119
- * @returns The HTMLElement with whole UI excluding ribbon menus and panels
120
- * @stability Stable
121
- */
122
- abstract buildIO(): HTMLElement;
123
- /**
124
- * Override to create a custom historical runs control.
125
- * @returns The HTMLElement with history block UI
126
- * @stability Stable
127
- */
128
- buildHistoryBlock(): HTMLElement;
129
- /**
130
- * Looks for {@link supportedExportFormats} members and creates ribbon panel
131
- * @returns The HTMLElements of ribbonPanels
132
- * @stability Stable
133
- */
134
- buildRibbonPanels(): HTMLElement[][];
135
- /**
136
- * Override to create a custom ribbon menu on the top.
137
- * @stability Stable
138
- */
139
- buildRibbonMenu(): void;
140
- /**
141
- * Called before saving the FUncCall results to the historical results, returns the saved call. See also {@link saveRun}.
142
- * @param callToSave FuncCall object to save
143
- * @returns Saved FuncCall
144
- * @stability Stable
145
- */
146
- onBeforeSaveRun(callToSave: DG.FuncCall): Promise<void>;
147
- /**
148
- * Saves the computation results to the historical results, returns the saved call. See also {@link saveRun}.
149
- * @param savedCall FuncCall object to save
150
- * @returns Saved FuncCall
151
- * @stability Stable
152
- */
153
- onAfterSaveRun(savedCall: DG.FuncCall): Promise<void>;
154
- /**
155
- * Saves the computation results to the historical results, returns the saved call. See also {@link loadRun}.
156
- * @param callToSave FuncCall object to save
157
- * @returns Saved FuncCall
158
- * @stability Stable
159
- */
160
- saveRun(callToSave: DG.FuncCall): Promise<DG.FuncCall>;
161
- /**
162
- * Called before deleting the computation results from history, returns its id. See also {@link loadRun}.
163
- * @param callToDelete FuncCall object to be deleted
164
- * @stability Stable
165
- */
166
- onBeforeDeleteRun(callToDelete: DG.FuncCall): Promise<void>;
167
- /**
168
- * Called after deleting the computation results from history, returns its id. See also {@link loadRun}.
169
- * @param deletedCall deleted FuncCall value
170
- * @stability Stable
171
- */
172
- onAfterDeleteRun(deletedCall: DG.FuncCall): Promise<void>;
173
- /**
174
- * Deletes the computation results from history, returns its id. See also {@link loadRun}.
175
- * @param callToDelete FuncCall object to delete
176
- * @returns ID of deleted historical run
177
- * @stability Stable
178
- */
179
- deleteRun(callToDelete: DG.FuncCall): Promise<string>;
180
- /**
181
- * Called before fetching the historical run data in {@link loadRun}.
182
- * @stability Stable
183
- */
184
- onBeforeLoadRun(): Promise<void>;
185
- /**
186
- * Called after fetching the historical run data in {@link loadRun}.
187
- * @param funcCall FuncCall fetched from server during {@link loadRun}
188
- * @stability Stable
189
- */
190
- onAfterLoadRun(funcCall: DG.FuncCall): Promise<void>;
191
- /**
192
- * Loads the specified historical run. See also {@link saveRun}.
193
- * @param funcCallId ID of FuncCall to look for. Get it using {@see funcCall.id} field
194
- * @returns FuncCall augemented with inputs' and outputs' values
195
- * @stability Stable
196
- */
197
- loadRun(funcCallId: string): Promise<DG.FuncCall>;
198
- /**
199
- * Called before actual computations are made {@link run}.
200
- * @param funcToCall FuncCall object to be called {@see DG.FuncCall.call()}
201
- * @stability Stable
202
- */
203
- onBeforeRun(funcToCall: DG.FuncCall): Promise<void>;
204
- /**
205
- * Called after actual computations are made {@link run}.
206
- * @param runFunc FuncCall object after call method {@see DG.FuncCall.call()}
207
- * @stability Stable
208
- */
209
- onAfterRun(runFunc: DG.FuncCall): Promise<void>;
210
- /**
211
- * Called to perform actual computations.
212
- * @stability Stable
213
- */
214
- run(): Promise<void>;
215
- protected historyRoot: HTMLDivElement;
216
- /**
217
- * Default export filename generation method.
218
- * It automatically replaces all symbols unsupported by Windows filesystem.
219
- * @param format A format listed in {@link defaultSupportedExportFormats}.
220
- * @stability Stable
221
- */
222
- protected defaultExportFilename: (format: string) => string;
223
- protected defaultSupportedExportExtensions: () => Record<string, string>;
224
- protected defaultSupportedExportFormats: () => string[];
225
- }
226
- //# sourceMappingURL=function-view.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"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"}