@kineticdata/react 5.0.15 → 5.0.18
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/lib/apis/core/authentication.js +11 -3
- package/lib/apis/core/fileResources.js +36 -0
- package/lib/apis/core/filestores.js +40 -0
- package/lib/apis/core/submissions.js +10 -6
- package/lib/apis/http.test.js +8 -3
- package/lib/apis/task/index.js +2 -1
- package/lib/components/agent/filestore/FilestoreForm.js +132 -0
- package/lib/components/agent/filestore/FilestoreTable.js +53 -0
- package/lib/components/common/Scroller.js +6 -6
- package/lib/components/common/code_input/languageHelpers.test.js +1 -1
- package/lib/components/core/core_form/CoreForm.js +10 -10
- package/lib/components/core/field_definition/FieldDefinitionForm.js +130 -0
- package/lib/components/core/field_definition/FieldDefinitionTable.js +86 -0
- package/lib/components/core/file_resource/FileResourceForm.js +180 -0
- package/lib/components/core/file_resource/FileResourceTable.js +71 -0
- package/lib/components/core/i18n/I18n.js +14 -14
- package/lib/components/core/submission/FormSubmissionFilters.js +378 -0
- package/lib/components/core/submission/FormSubmissionTable.js +116 -0
- package/lib/components/core/submission/KappSubmissionTable.js +250 -0
- package/lib/components/core/submission/SubmissionForm.js +124 -0
- package/lib/components/core/submission/helpers.js +95 -0
- package/lib/components/core/submission/helpers.test.js +96 -0
- package/lib/components/form/Form.js +2 -2
- package/lib/components/index.js +4 -4
- package/lib/components/system/SystemBackgroundTasksTable.js +83 -0
- package/lib/components/system/SystemSecurityForm.js +69 -0
- package/lib/components/system/helpers.js +16 -24
- package/lib/components/system/spaces/SystemTenantForm.js +8 -4
- package/lib/components/table/Table.js +23 -3
- package/lib/components/table/Table.redux.js +221 -53
- package/lib/components/table/Table.redux.test.js +73 -2
- package/lib/components/task/builder/Connector.js +2 -2
- package/lib/components/task/builder/NodeForm.js +3 -0
- package/lib/components/task/builder/TaskDefinitionConfigForm.js +113 -0
- package/lib/components/task/builder/TreeBuilder.js +2 -2
- package/lib/components/task/triggers/TriggerTable.js +3 -2
- package/package.json +3 -3
- package/proxyhelper.js +82 -9
|
@@ -52,9 +52,17 @@ export var singleSignOn = function singleSignOn(spaceSlug, dimensions) {
|
|
|
52
52
|
var options = _objectSpread(_objectSpread({}, dimensions), getPopupPosition(window, dimensions));
|
|
53
53
|
|
|
54
54
|
var endpoint = bundle.spaceLocation() + '/app/saml/login/alias/' + spaceSlug;
|
|
55
|
-
var popup = window.open(endpoint, target, stringifyOptions(options));
|
|
55
|
+
var popup = window.open(endpoint, target, stringifyOptions(options));
|
|
56
|
+
|
|
57
|
+
if (!popup) {
|
|
58
|
+
resolve({
|
|
59
|
+
error: 'Enterprise Sign In popup was blocked by the browser.'
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
} // Create an event handler that closes the popup window if we focus the
|
|
56
63
|
// parent window
|
|
57
64
|
|
|
65
|
+
|
|
58
66
|
var windowFocusHandler = function windowFocusHandler() {
|
|
59
67
|
popup.close();
|
|
60
68
|
window.removeEventListener('focus', windowFocusHandler);
|
|
@@ -80,7 +88,7 @@ export var singleSignOn = function singleSignOn(spaceSlug, dimensions) {
|
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
resolve({
|
|
83
|
-
error: '
|
|
91
|
+
error: 'Enterprise Sign In was cancelled'
|
|
84
92
|
});
|
|
85
93
|
_context.next = 12;
|
|
86
94
|
break;
|
|
@@ -107,7 +115,7 @@ export var singleSignOn = function singleSignOn(spaceSlug, dimensions) {
|
|
|
107
115
|
} else {
|
|
108
116
|
popup.close();
|
|
109
117
|
resolve({
|
|
110
|
-
error: '
|
|
118
|
+
error: 'Enterprise Sign In timed out'
|
|
111
119
|
});
|
|
112
120
|
}
|
|
113
121
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { apiGroup } from '../http';
|
|
2
|
+
|
|
3
|
+
var _apiGroup = apiGroup({
|
|
4
|
+
name: 'FileResource',
|
|
5
|
+
dataOption: 'fileResource',
|
|
6
|
+
plural: {
|
|
7
|
+
requiredOptions: [],
|
|
8
|
+
url: function url() {
|
|
9
|
+
return '/fileResources';
|
|
10
|
+
},
|
|
11
|
+
transform: function transform(response) {
|
|
12
|
+
return {
|
|
13
|
+
fileResources: response.data.fileResources
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
singular: {
|
|
18
|
+
requiredOptions: ['fileResourceSlug'],
|
|
19
|
+
url: function url(_ref) {
|
|
20
|
+
var fileResourceSlug = _ref.fileResourceSlug;
|
|
21
|
+
return "/fileResources/".concat(fileResourceSlug);
|
|
22
|
+
},
|
|
23
|
+
transform: function transform(response) {
|
|
24
|
+
return {
|
|
25
|
+
fileResource: response.data.fileResource
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}),
|
|
30
|
+
fetchFileResources = _apiGroup.fetchFileResources,
|
|
31
|
+
fetchFileResource = _apiGroup.fetchFileResource,
|
|
32
|
+
createFileResource = _apiGroup.createFileResource,
|
|
33
|
+
updateFileResource = _apiGroup.updateFileResource,
|
|
34
|
+
deleteFileResource = _apiGroup.deleteFileResource;
|
|
35
|
+
|
|
36
|
+
export { fetchFileResources, fetchFileResource, createFileResource, updateFileResource, deleteFileResource };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { apiGroup } from '../http';
|
|
2
|
+
|
|
3
|
+
var _apiGroup = apiGroup({
|
|
4
|
+
name: 'Filestore',
|
|
5
|
+
dataOption: 'filestore',
|
|
6
|
+
plural: {
|
|
7
|
+
requiredOptions: [],
|
|
8
|
+
url: function url(_ref) {
|
|
9
|
+
var _ref$agentSlug = _ref.agentSlug,
|
|
10
|
+
agentSlug = _ref$agentSlug === void 0 ? 'system' : _ref$agentSlug;
|
|
11
|
+
return "/app/components/agents/".concat(agentSlug, "/app/api/v1/filestores");
|
|
12
|
+
},
|
|
13
|
+
transform: function transform(response) {
|
|
14
|
+
return {
|
|
15
|
+
filestores: response.data.filestores
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
singular: {
|
|
20
|
+
requiredOptions: ['filestoreSlug'],
|
|
21
|
+
url: function url(_ref2) {
|
|
22
|
+
var _ref2$agentSlug = _ref2.agentSlug,
|
|
23
|
+
agentSlug = _ref2$agentSlug === void 0 ? 'system' : _ref2$agentSlug,
|
|
24
|
+
filestoreSlug = _ref2.filestoreSlug;
|
|
25
|
+
return "/app/components/agents/".concat(agentSlug, "/app/api/v1/filestores/").concat(filestoreSlug);
|
|
26
|
+
},
|
|
27
|
+
transform: function transform(response) {
|
|
28
|
+
return {
|
|
29
|
+
filestore: response.data.filestore
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}),
|
|
34
|
+
fetchFilestores = _apiGroup.fetchFilestores,
|
|
35
|
+
fetchFilestore = _apiGroup.fetchFilestore,
|
|
36
|
+
createFilestore = _apiGroup.createFilestore,
|
|
37
|
+
updateFilestore = _apiGroup.updateFilestore,
|
|
38
|
+
deleteFilestore = _apiGroup.deleteFilestore;
|
|
39
|
+
|
|
40
|
+
export { fetchFilestores, fetchFilestore, createFilestore, updateFilestore, deleteFilestore };
|
|
@@ -298,9 +298,7 @@ export var SubmissionSearch = /*#__PURE__*/function () {
|
|
|
298
298
|
}, {
|
|
299
299
|
key: "includes",
|
|
300
300
|
value: function includes(_includes) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
this.searchMeta.include = newIncludes; // _.uniq(_.concat(this.searchMeta.include, includes));
|
|
301
|
+
this.searchMeta.include = _toConsumableArray(new Set([].concat(_toConsumableArray(this.searchMeta.include), _toConsumableArray(_includes)))); // _.uniq(_.concat(this.searchMeta.include, includes));
|
|
304
302
|
|
|
305
303
|
return this;
|
|
306
304
|
}
|
|
@@ -450,7 +448,9 @@ export var searchSubmissions = function searchSubmissions(options) {
|
|
|
450
448
|
return {
|
|
451
449
|
submissions: response.data.submissions,
|
|
452
450
|
messages: response.data.messages,
|
|
453
|
-
nextPageToken: response.data.nextPageToken
|
|
451
|
+
nextPageToken: response.data.nextPageToken,
|
|
452
|
+
count: response.data.count,
|
|
453
|
+
countPageToken: response.data.countPageToken
|
|
454
454
|
};
|
|
455
455
|
}); // Clean up any errors we receive. Make srue this is the last thing so that it
|
|
456
456
|
// cleans up all errors.
|
|
@@ -487,7 +487,9 @@ export var createSubmission = function createSubmission(options) {
|
|
|
487
487
|
_options$datastore2 = options.datastore,
|
|
488
488
|
datastore = _options$datastore2 === void 0 ? false : _options$datastore2,
|
|
489
489
|
_options$completed = options.completed,
|
|
490
|
-
completed = _options$completed === void 0 ? true : _options$completed
|
|
490
|
+
completed = _options$completed === void 0 ? true : _options$completed,
|
|
491
|
+
coreState = options.coreState,
|
|
492
|
+
parent = options.parent;
|
|
491
493
|
|
|
492
494
|
if (!formSlug) {
|
|
493
495
|
throw new Error('createSubmission failed! The option "formSlug" is required.');
|
|
@@ -498,7 +500,9 @@ export var createSubmission = function createSubmission(options) {
|
|
|
498
500
|
var path = datastore ? "".concat(bundle.apiLocation(), "/datastore/forms/").concat(formSlug, "/submissions") : "".concat(bundle.apiLocation(), "/kapps/").concat(kappSlug, "/forms/").concat(formSlug, "/submissions");
|
|
499
501
|
|
|
500
502
|
var params = _objectSpread(_objectSpread({}, paramBuilder(options)), {}, {
|
|
501
|
-
completed: completed
|
|
503
|
+
completed: completed,
|
|
504
|
+
coreState: coreState,
|
|
505
|
+
parent: parent
|
|
502
506
|
});
|
|
503
507
|
|
|
504
508
|
return axios.post(path, {
|
package/lib/apis/http.test.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
3
|
import { headerBuilder, corePath, handleErrors, paramBuilder, operations } from './http';
|
|
3
4
|
import { List } from 'immutable';
|
|
4
5
|
jest.mock('../helpers', function () {
|
|
@@ -109,9 +110,13 @@ describe('http module', function () {
|
|
|
109
110
|
|
|
110
111
|
describe('#paramBuilder', function () {
|
|
111
112
|
test('returns parameter values', function () {
|
|
112
|
-
var params = ['include', 'limit', 'pageToken', 'q', 'direction', 'orderBy', 'manage', 'export'];
|
|
113
|
-
params.forEach(function (
|
|
114
|
-
|
|
113
|
+
var params = [['include', 'include'], ['limit', 1], ['pageToken', 'pageToken'], ['q', 'q'], ['direction', 'direction'], ['orderBy', 'orderBy'], ['manage', 'manage'], ['export', 'export']];
|
|
114
|
+
params.forEach(function (_ref) {
|
|
115
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
116
|
+
param = _ref2[0],
|
|
117
|
+
value = _ref2[1];
|
|
118
|
+
|
|
119
|
+
return expect(paramBuilder(_defineProperty({}, param, value))).toMatchObject(_defineProperty({}, param, value));
|
|
115
120
|
});
|
|
116
121
|
});
|
|
117
122
|
test('does not return non-parameter values', function () {
|
package/lib/apis/task/index.js
CHANGED
|
@@ -700,7 +700,8 @@ export var fetchTaskTriggers = function fetchTaskTriggers() {
|
|
|
700
700
|
}).then(function (response) {
|
|
701
701
|
return {
|
|
702
702
|
triggers: response.data.triggers,
|
|
703
|
-
nextPageToken: generateNextPageToken(response.data)
|
|
703
|
+
nextPageToken: generateNextPageToken(response.data),
|
|
704
|
+
count: response.data.count
|
|
704
705
|
};
|
|
705
706
|
})["catch"](handleErrors);
|
|
706
707
|
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
+
import { createFilestore, fetchFilestore, updateFilestore } from '../../../apis';
|
|
3
|
+
import { fetchAdapters } from '../../../apis';
|
|
4
|
+
import { get, getIn, List, Map } from 'immutable';
|
|
5
|
+
import { buildPropertyFields, handleFormErrors } from '../../form/Form.helpers';
|
|
6
|
+
import { generateForm } from '../../form/Form';
|
|
7
|
+
|
|
8
|
+
var dataSources = function dataSources(_ref) {
|
|
9
|
+
var agentSlug = _ref.agentSlug,
|
|
10
|
+
filestoreSlug = _ref.filestoreSlug,
|
|
11
|
+
adapterClass = _ref.adapterClass;
|
|
12
|
+
return {
|
|
13
|
+
filestore: {
|
|
14
|
+
fn: fetchFilestore,
|
|
15
|
+
params: agentSlug && filestoreSlug && [{
|
|
16
|
+
agentSlug: agentSlug,
|
|
17
|
+
filestoreSlug: filestoreSlug,
|
|
18
|
+
include: 'details'
|
|
19
|
+
}],
|
|
20
|
+
transform: function transform(result) {
|
|
21
|
+
return result.filestore;
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
adapters: {
|
|
25
|
+
fn: fetchAdapters,
|
|
26
|
+
params: [{
|
|
27
|
+
include: 'details',
|
|
28
|
+
type: 'filestore',
|
|
29
|
+
agentSlug: agentSlug
|
|
30
|
+
}],
|
|
31
|
+
transform: function transform(result) {
|
|
32
|
+
return result.adapters;
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
adapterProperties: {
|
|
36
|
+
fn: function fn(adapters, filestore) {
|
|
37
|
+
var appliedAdapterClass = filestore ? filestore.get('adapterClass') : adapterClass;
|
|
38
|
+
var adapter = adapters.find(function (adapter) {
|
|
39
|
+
return adapter.get('class') === appliedAdapterClass;
|
|
40
|
+
});
|
|
41
|
+
return adapter ? List(adapter.get('properties')) : List();
|
|
42
|
+
},
|
|
43
|
+
params: function params(_ref2) {
|
|
44
|
+
var adapters = _ref2.adapters,
|
|
45
|
+
filestore = _ref2.filestore;
|
|
46
|
+
return (!filestoreSlug || filestore) && adapters && [adapters, filestore];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
var handleSubmit = function handleSubmit(_ref3) {
|
|
53
|
+
var agentSlug = _ref3.agentSlug,
|
|
54
|
+
filestoreSlug = _ref3.filestoreSlug;
|
|
55
|
+
return function (values) {
|
|
56
|
+
return (filestoreSlug ? updateFilestore : createFilestore)({
|
|
57
|
+
agentSlug: agentSlug,
|
|
58
|
+
filestoreSlug: filestoreSlug,
|
|
59
|
+
filestore: values.toJS()
|
|
60
|
+
}).then(handleFormErrors('filestore', 'There was a problem saving the filestore.'));
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
var fields = function fields(_ref4) {
|
|
65
|
+
var adapterClass = _ref4.adapterClass;
|
|
66
|
+
return function (_ref5) {
|
|
67
|
+
var filestore = _ref5.filestore,
|
|
68
|
+
adapters = _ref5.adapters,
|
|
69
|
+
adapterProperties = _ref5.adapterProperties;
|
|
70
|
+
|
|
71
|
+
if (adapterProperties) {
|
|
72
|
+
var _buildPropertyFields = buildPropertyFields({
|
|
73
|
+
isNew: !filestore,
|
|
74
|
+
properties: adapterProperties,
|
|
75
|
+
getName: function getName(property) {
|
|
76
|
+
return property.get('name');
|
|
77
|
+
},
|
|
78
|
+
getRequired: function getRequired(property) {
|
|
79
|
+
return property.get('required');
|
|
80
|
+
},
|
|
81
|
+
getSensitive: function getSensitive(property) {
|
|
82
|
+
return property.get('sensitive');
|
|
83
|
+
},
|
|
84
|
+
getOptions: function getOptions(property) {
|
|
85
|
+
return property.get('options');
|
|
86
|
+
},
|
|
87
|
+
getValue: function getValue(property) {
|
|
88
|
+
return getIn(filestore, ['properties', property.get('name')], '');
|
|
89
|
+
}
|
|
90
|
+
}),
|
|
91
|
+
propertiesFields = _buildPropertyFields.propertiesFields,
|
|
92
|
+
propertiesSerialize = _buildPropertyFields.propertiesSerialize;
|
|
93
|
+
|
|
94
|
+
return [{
|
|
95
|
+
name: 'slug',
|
|
96
|
+
label: 'Filestore Slug',
|
|
97
|
+
type: 'text',
|
|
98
|
+
required: true,
|
|
99
|
+
initialValue: get(filestore, 'slug', ''),
|
|
100
|
+
pattern: /^[a-z\d-]+$/,
|
|
101
|
+
patternMessage: 'File Store Slug may only contain letters, numbers, and dashes',
|
|
102
|
+
helpText: 'Unique name used in the bridge path.'
|
|
103
|
+
}, {
|
|
104
|
+
name: 'adapterClass',
|
|
105
|
+
label: 'Adapter Class',
|
|
106
|
+
type: 'text',
|
|
107
|
+
enabled: false,
|
|
108
|
+
required: false,
|
|
109
|
+
initialValue: filestore ? filestore.get('adapterClass') : adapterClass,
|
|
110
|
+
options: adapters.map(function (adapter) {
|
|
111
|
+
return Map({
|
|
112
|
+
value: adapter.get('class'),
|
|
113
|
+
label: adapter.get('name')
|
|
114
|
+
});
|
|
115
|
+
})
|
|
116
|
+
}].concat(_toConsumableArray(propertiesFields), [{
|
|
117
|
+
name: 'properties',
|
|
118
|
+
visible: false,
|
|
119
|
+
initialValue: get(filestore, 'properties', {}),
|
|
120
|
+
serialize: propertiesSerialize
|
|
121
|
+
}]);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export var FilestoreForm = generateForm({
|
|
127
|
+
formOptions: ['filestoreSlug', 'adapterClass', 'agentSlug'],
|
|
128
|
+
dataSources: dataSources,
|
|
129
|
+
fields: fields,
|
|
130
|
+
handleSubmit: handleSubmit
|
|
131
|
+
});
|
|
132
|
+
FilestoreForm.displayName = 'FilestoreForm';
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { defineFilter } from '../../../helpers';
|
|
2
|
+
import { fetchFilestores } from '../../../apis';
|
|
3
|
+
import { generateTable } from '../../table/Table';
|
|
4
|
+
var clientSide = defineFilter(true).startsWith('slug', 'slug').end();
|
|
5
|
+
|
|
6
|
+
var dataSource = function dataSource(_ref) {
|
|
7
|
+
var agentSlug = _ref.agentSlug;
|
|
8
|
+
return {
|
|
9
|
+
fn: fetchFilestores,
|
|
10
|
+
clientSide: clientSide,
|
|
11
|
+
params: function params() {
|
|
12
|
+
return [{
|
|
13
|
+
agentSlug: agentSlug,
|
|
14
|
+
include: 'details'
|
|
15
|
+
}];
|
|
16
|
+
},
|
|
17
|
+
transform: function transform(result) {
|
|
18
|
+
return {
|
|
19
|
+
data: result.filestores
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
var filters = function filters() {
|
|
26
|
+
return function () {
|
|
27
|
+
return [{
|
|
28
|
+
name: 'slug',
|
|
29
|
+
label: 'Slug',
|
|
30
|
+
type: 'text'
|
|
31
|
+
}];
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
var columns = [{
|
|
36
|
+
value: 'slug',
|
|
37
|
+
title: 'Slug',
|
|
38
|
+
sortable: true
|
|
39
|
+
}, {
|
|
40
|
+
value: 'adapterClass',
|
|
41
|
+
title: 'Adapter',
|
|
42
|
+
sortable: true,
|
|
43
|
+
valueTransform: function valueTransform(_value) {
|
|
44
|
+
return _value.split('.').pop().match(/[A-Z][a-z]+/g).join(' ');
|
|
45
|
+
}
|
|
46
|
+
}];
|
|
47
|
+
export var FilestoreTable = generateTable({
|
|
48
|
+
tableOptions: ['agentSlug'],
|
|
49
|
+
columns: columns,
|
|
50
|
+
filters: filters,
|
|
51
|
+
dataSource: dataSource
|
|
52
|
+
});
|
|
53
|
+
FilestoreTable.displayName = 'FilestoreTable';
|
|
@@ -50,13 +50,13 @@ export var Scroller = /*#__PURE__*/function (_Component) {
|
|
|
50
50
|
}
|
|
51
51
|
} // when scrolling up...
|
|
52
52
|
else if (childTop < this.lastTop) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
53
|
+
// check to see if the top of the child element is above the top of the
|
|
54
|
+
// scrollable parent
|
|
55
|
+
if (childTop < parent.scrollTop) {
|
|
56
|
+
// scroll the child into view (passing true which aligns by top)
|
|
57
|
+
child.scrollIntoView(true);
|
|
59
58
|
}
|
|
59
|
+
}
|
|
60
60
|
|
|
61
61
|
this.lastTop = child.offsetTop;
|
|
62
62
|
}
|
|
@@ -36,7 +36,7 @@ describe('processJavaScriptTemplate', function () {
|
|
|
36
36
|
});
|
|
37
37
|
test('add some objects inside to test curly behavior', function () {
|
|
38
38
|
// eslint-disable-next-line no-template-curly-in-string
|
|
39
|
-
expect(processJavaScriptTemplate('Hello ${{foo:{"bar":2}}}')).toEqual([['Hello '], ['${', 'opening-interpolation', 'js-template'], ['{', 'punctuation', 'js-template'], ['foo', 'js-template'], [':', '
|
|
39
|
+
expect(processJavaScriptTemplate('Hello ${{foo:{"bar":2}}}')).toEqual([['Hello '], ['${', 'opening-interpolation', 'js-template'], ['{', 'punctuation', 'js-template'], ['foo', 'js-template'], [':', 'operator', 'js-template'], ['{', 'punctuation', 'js-template'], ['"bar"', 'string', 'js-template'], [':', 'operator', 'js-template'], ['2', 'number', 'js-template'], ['}', 'punctuation', 'js-template'], ['}', 'punctuation', 'js-template'], ['}', 'closing-interpolation', 'js-template'], ['']]);
|
|
40
40
|
});
|
|
41
41
|
test('multiple interpolations', function () {
|
|
42
42
|
// eslint-disable-next-line no-template-curly-in-string
|
|
@@ -286,16 +286,16 @@ export var CoreFormComponent = /*#__PURE__*/function (_Component) {
|
|
|
286
286
|
}));
|
|
287
287
|
} // If pending and error state has just been set, call error callback
|
|
288
288
|
else if (this.state.pending && this.state.error && !prevState.error) {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
289
|
+
if (this.state.error.statusCode === 401) {
|
|
290
|
+
applyGuard(this.props.onUnauthorized || this.props.unauthorized);
|
|
291
|
+
} else if (this.state.error.statusCode === 403) {
|
|
292
|
+
applyGuard(this.props.onForbidden || this.props.forbidden);
|
|
293
|
+
} else if (this.state.error.statusCode === 404) {
|
|
294
|
+
applyGuard(this.props.onNotFound || this.props.onNotFound);
|
|
295
|
+
} else {
|
|
296
|
+
applyGuard(this.props.onError || this.props.error);
|
|
297
|
+
}
|
|
298
|
+
} // If locking is turned on and has been initalized
|
|
299
299
|
|
|
300
300
|
|
|
301
301
|
if (this.state.lock && this.state.lock.init) {
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { generateForm } from '../../form/Form';
|
|
2
|
+
import { fetchKapp, fetchSpace, updateKapp, updateSpace } from '../../../apis';
|
|
3
|
+
import { FIELD_DATA_TYPES } from './FieldDefinitionTable';
|
|
4
|
+
|
|
5
|
+
var dataSources = function dataSources(_ref) {
|
|
6
|
+
var kappSlug = _ref.kappSlug,
|
|
7
|
+
name = _ref.name;
|
|
8
|
+
return {
|
|
9
|
+
form: {
|
|
10
|
+
fn: kappSlug ? fetchKapp : fetchSpace,
|
|
11
|
+
params: [{
|
|
12
|
+
kappSlug: kappSlug,
|
|
13
|
+
include: 'fields'
|
|
14
|
+
}],
|
|
15
|
+
transform: function transform(result) {
|
|
16
|
+
return kappSlug ? result.kapp : result.space;
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
fieldDefinition: {
|
|
20
|
+
fn: function fn(form, name) {
|
|
21
|
+
return form.get('fields').find(function (f) {
|
|
22
|
+
return f.get('name') === name;
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
params: function params(_ref2) {
|
|
26
|
+
var form = _ref2.form;
|
|
27
|
+
return form && name && [form, name];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
var handleSubmit = function handleSubmit(_ref3) {
|
|
34
|
+
var kappSlug = _ref3.kappSlug,
|
|
35
|
+
name = _ref3.name;
|
|
36
|
+
return function (values, _ref4) {
|
|
37
|
+
var form = _ref4.form;
|
|
38
|
+
var dataType = FIELD_DATA_TYPES.find(function (fdt) {
|
|
39
|
+
return fdt.value === values.get('renderType');
|
|
40
|
+
}).dataType;
|
|
41
|
+
var field = values.set('dataType', dataType);
|
|
42
|
+
var fields = name ? form.get('fields').map(function (fd) {
|
|
43
|
+
return fd.get('name') === name ? field : fd;
|
|
44
|
+
}) : form.get('fields').push(field);
|
|
45
|
+
return (kappSlug ? updateKapp({
|
|
46
|
+
kapp: {
|
|
47
|
+
fields: fields
|
|
48
|
+
},
|
|
49
|
+
kappSlug: kappSlug
|
|
50
|
+
}) : updateSpace({
|
|
51
|
+
space: {
|
|
52
|
+
fields: fields
|
|
53
|
+
}
|
|
54
|
+
})).then(function (_ref5) {
|
|
55
|
+
var kapp = _ref5.kapp,
|
|
56
|
+
space = _ref5.space,
|
|
57
|
+
error = _ref5.error;
|
|
58
|
+
|
|
59
|
+
if (error) {
|
|
60
|
+
throw error.statusCode === 400 && error.message || 'There was an error saving the field definition';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return kappSlug ? kapp : space;
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
var fields = function fields(_ref6) {
|
|
69
|
+
var name = _ref6.name;
|
|
70
|
+
return function (_ref7) {
|
|
71
|
+
var form = _ref7.form,
|
|
72
|
+
fieldDefinition = _ref7.fieldDefinition;
|
|
73
|
+
return (!name || fieldDefinition) && form && [{
|
|
74
|
+
name: 'name',
|
|
75
|
+
label: 'Name',
|
|
76
|
+
type: 'text',
|
|
77
|
+
required: true,
|
|
78
|
+
initialValue: fieldDefinition ? fieldDefinition.get('name') : ''
|
|
79
|
+
}, {
|
|
80
|
+
name: 'renderType',
|
|
81
|
+
label: 'Type',
|
|
82
|
+
type: 'select',
|
|
83
|
+
required: true,
|
|
84
|
+
options: FIELD_DATA_TYPES,
|
|
85
|
+
initialValue: fieldDefinition ? fieldDefinition.get('renderType') : ''
|
|
86
|
+
}, {
|
|
87
|
+
name: 'createdAt',
|
|
88
|
+
label: 'Created At',
|
|
89
|
+
type: 'text',
|
|
90
|
+
visible: false,
|
|
91
|
+
initialValue: fieldDefinition ? fieldDefinition.get('createdAt') : '2020-08-24T22:06:20.572Z'
|
|
92
|
+
}, {
|
|
93
|
+
name: 'createdBy',
|
|
94
|
+
label: 'Created By',
|
|
95
|
+
type: 'text',
|
|
96
|
+
visible: false,
|
|
97
|
+
initialValue: fieldDefinition ? fieldDefinition.get('createdBy') : 'admin'
|
|
98
|
+
}, {
|
|
99
|
+
name: 'updatedAt',
|
|
100
|
+
label: 'Updated At',
|
|
101
|
+
type: 'text',
|
|
102
|
+
visible: false,
|
|
103
|
+
initialValue: fieldDefinition ? fieldDefinition.get('updatedAt') : '2020-08-24T22:06:20.572Z'
|
|
104
|
+
}, {
|
|
105
|
+
name: 'updatedBy',
|
|
106
|
+
label: 'Updated By',
|
|
107
|
+
type: 'text',
|
|
108
|
+
visible: false,
|
|
109
|
+
initialValue: fieldDefinition ? fieldDefinition.get('updatedBy') : 'admin'
|
|
110
|
+
}];
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* @component
|
|
115
|
+
* A form for creating and updating Field Definitions within the Kinetic Platform
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
export var FieldDefinitionForm = generateForm({
|
|
120
|
+
formOptions: ['kappSlug', 'name'],
|
|
121
|
+
dataSources: dataSources,
|
|
122
|
+
fields: fields,
|
|
123
|
+
handleSubmit: handleSubmit
|
|
124
|
+
});
|
|
125
|
+
FieldDefinitionForm.displayName = 'FieldDefinitionForm'; // Specifies the default values for props:
|
|
126
|
+
|
|
127
|
+
FieldDefinitionForm.defaultProps = {
|
|
128
|
+
fieldName: null,
|
|
129
|
+
kappSlug: null
|
|
130
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { generateTable } from '../../table/Table';
|
|
2
|
+
import { fetchKapp, fetchSpace } from '../../../apis';
|
|
3
|
+
import { defineFilter } from '../../../helpers';
|
|
4
|
+
export var FIELD_DATA_TYPES = [{
|
|
5
|
+
value: 'checkbox',
|
|
6
|
+
label: 'Checkbox',
|
|
7
|
+
dataType: 'json'
|
|
8
|
+
}, {
|
|
9
|
+
value: 'date',
|
|
10
|
+
label: 'Date',
|
|
11
|
+
dataType: 'string'
|
|
12
|
+
}, {
|
|
13
|
+
value: 'datetime',
|
|
14
|
+
label: 'Date/Time',
|
|
15
|
+
dataType: 'string'
|
|
16
|
+
}, {
|
|
17
|
+
value: 'dropdown',
|
|
18
|
+
label: 'Dropdown',
|
|
19
|
+
dataType: 'string'
|
|
20
|
+
}, {
|
|
21
|
+
value: 'radio',
|
|
22
|
+
label: 'Radio',
|
|
23
|
+
dataType: 'string'
|
|
24
|
+
}, {
|
|
25
|
+
value: 'text',
|
|
26
|
+
label: 'Text',
|
|
27
|
+
dataType: 'string'
|
|
28
|
+
}, {
|
|
29
|
+
value: 'time',
|
|
30
|
+
label: 'Time',
|
|
31
|
+
dataType: 'string'
|
|
32
|
+
}];
|
|
33
|
+
var clientSide = defineFilter(true).startsWith('name', 'name').end();
|
|
34
|
+
|
|
35
|
+
var dataSource = function dataSource(_ref) {
|
|
36
|
+
var kappSlug = _ref.kappSlug;
|
|
37
|
+
return {
|
|
38
|
+
fn: kappSlug ? fetchKapp : fetchSpace,
|
|
39
|
+
clientSide: clientSide,
|
|
40
|
+
params: function params() {
|
|
41
|
+
return [{
|
|
42
|
+
kappSlug: kappSlug,
|
|
43
|
+
include: 'fields'
|
|
44
|
+
}];
|
|
45
|
+
},
|
|
46
|
+
transform: function transform(result) {
|
|
47
|
+
return {
|
|
48
|
+
data: kappSlug ? result.kapp.fields : result.space.fields
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
var filters = function filters() {
|
|
55
|
+
return function () {
|
|
56
|
+
return [{
|
|
57
|
+
name: 'name',
|
|
58
|
+
label: 'Name',
|
|
59
|
+
type: 'text'
|
|
60
|
+
}];
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
var columns = [{
|
|
65
|
+
value: 'name',
|
|
66
|
+
title: 'Name'
|
|
67
|
+
}, {
|
|
68
|
+
value: 'renderType',
|
|
69
|
+
title: 'Render Type'
|
|
70
|
+
}, {
|
|
71
|
+
value: 'dataType',
|
|
72
|
+
title: 'Data Type'
|
|
73
|
+
}, {
|
|
74
|
+
value: 'updatedAt',
|
|
75
|
+
title: 'Updated At'
|
|
76
|
+
}, {
|
|
77
|
+
value: 'updatedBy',
|
|
78
|
+
title: 'Updated By'
|
|
79
|
+
}];
|
|
80
|
+
export var FieldDefinitionTable = generateTable({
|
|
81
|
+
tableOptions: ['kappSlug'],
|
|
82
|
+
columns: columns,
|
|
83
|
+
filters: filters,
|
|
84
|
+
dataSource: dataSource
|
|
85
|
+
});
|
|
86
|
+
FieldDefinitionTable.displayName = 'FieldDefinitionTable';
|