@esri/solution-common 1.1.2 → 1.2.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.
- package/dist/esm/completeItem.js +6 -7
- package/dist/esm/completeItem.js.map +1 -1
- package/dist/esm/create-hub-request-options.d.ts +4 -4
- package/dist/esm/create-hub-request-options.js +9 -12
- package/dist/esm/create-hub-request-options.js.map +1 -1
- package/dist/esm/deleteHelpers/deleteEmptyGroups.js +2 -2
- package/dist/esm/deleteHelpers/deleteEmptyGroups.js.map +1 -1
- package/dist/esm/deleteHelpers/deleteGroupIfEmpty.js +15 -15
- package/dist/esm/deleteHelpers/deleteGroupIfEmpty.js.map +1 -1
- package/dist/esm/deleteHelpers/deleteSolutionContents.js +20 -22
- package/dist/esm/deleteHelpers/deleteSolutionContents.js.map +1 -1
- package/dist/esm/deleteHelpers/deleteSolutionFolder.js +10 -10
- package/dist/esm/deleteHelpers/deleteSolutionFolder.js.map +1 -1
- package/dist/esm/deleteHelpers/deleteSolutionItem.js +4 -4
- package/dist/esm/deleteHelpers/deleteSolutionItem.js.map +1 -1
- package/dist/esm/deleteHelpers/reconstructBuildOrderIds.js +1 -1
- package/dist/esm/deleteHelpers/reconstructBuildOrderIds.js.map +1 -1
- package/dist/esm/deleteHelpers/removeItems.js +20 -29
- package/dist/esm/deleteHelpers/removeItems.js.map +1 -1
- package/dist/esm/deleteHelpers/reportProgress.js +3 -6
- package/dist/esm/deleteHelpers/reportProgress.js.map +1 -1
- package/dist/esm/deleteSolution.js +10 -12
- package/dist/esm/deleteSolution.js.map +1 -1
- package/dist/esm/dependencies.js +27 -19
- package/dist/esm/dependencies.js.map +1 -1
- package/dist/esm/featureServiceHelpers.d.ts +6 -0
- package/dist/esm/featureServiceHelpers.js +530 -500
- package/dist/esm/featureServiceHelpers.js.map +1 -1
- package/dist/esm/generalHelpers.js +72 -76
- package/dist/esm/generalHelpers.js.map +1 -1
- package/dist/esm/get-subscription-info.js +5 -3
- package/dist/esm/get-subscription-info.js.map +1 -1
- package/dist/esm/getDeletableSolutionInfo.js +6 -10
- package/dist/esm/getDeletableSolutionInfo.js.map +1 -1
- package/dist/esm/getSolutionSummary.js +15 -19
- package/dist/esm/getSolutionSummary.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interfaces.d.ts +39 -1
- package/dist/esm/interfaces.js +3 -3
- package/dist/esm/interfaces.js.map +1 -1
- package/dist/esm/libConnectors.js +5 -7
- package/dist/esm/libConnectors.js.map +1 -1
- package/dist/esm/migrations/apply-schema.js +3 -3
- package/dist/esm/migrations/apply-schema.js.map +1 -1
- package/dist/esm/migrations/is-legacy-solution.js +2 -2
- package/dist/esm/migrations/is-legacy-solution.js.map +1 -1
- package/dist/esm/migrations/upgrade-three-dot-one.js +3 -3
- package/dist/esm/migrations/upgrade-three-dot-one.js.map +1 -1
- package/dist/esm/migrations/upgrade-three-dot-zero.js +1 -1
- package/dist/esm/migrations/upgrade-three-dot-zero.js.map +1 -1
- package/dist/esm/migrations/upgrade-two-dot-five.js +17 -8
- package/dist/esm/migrations/upgrade-two-dot-five.js.map +1 -1
- package/dist/esm/migrations/upgrade-two-dot-four.js +12 -12
- package/dist/esm/migrations/upgrade-two-dot-four.js.map +1 -1
- package/dist/esm/migrations/upgrade-two-dot-one.js +1 -1
- package/dist/esm/migrations/upgrade-two-dot-one.js.map +1 -1
- package/dist/esm/migrations/upgrade-two-dot-seven.js +1 -1
- package/dist/esm/migrations/upgrade-two-dot-seven.js.map +1 -1
- package/dist/esm/migrations/upgrade-two-dot-six.js +9 -12
- package/dist/esm/migrations/upgrade-two-dot-six.js.map +1 -1
- package/dist/esm/migrations/upgrade-two-dot-three.js +3 -3
- package/dist/esm/migrations/upgrade-two-dot-three.js.map +1 -1
- package/dist/esm/migrations/upgrade-two-dot-two.js +3 -3
- package/dist/esm/migrations/upgrade-two-dot-two.js.map +1 -1
- package/dist/esm/migrations/upgrade-two-dot-zero.js +8 -9
- package/dist/esm/migrations/upgrade-two-dot-zero.js.map +1 -1
- package/dist/esm/migrator.js +5 -7
- package/dist/esm/migrator.js.map +1 -1
- package/dist/esm/polyfills.js +5 -5
- package/dist/esm/polyfills.js.map +1 -1
- package/dist/esm/resourceHelpers.js +54 -57
- package/dist/esm/resourceHelpers.js.map +1 -1
- package/dist/esm/resources/add-resource-from-blob.js +2 -2
- package/dist/esm/resources/add-resource-from-blob.js.map +1 -1
- package/dist/esm/resources/addMetadataFromBlob.js +1 -1
- package/dist/esm/resources/addMetadataFromBlob.js.map +1 -1
- package/dist/esm/resources/convert-item-resource-to-storage-resource.js +6 -7
- package/dist/esm/resources/convert-item-resource-to-storage-resource.js.map +1 -1
- package/dist/esm/resources/convert-storage-resource-to-item-resource.js +8 -9
- package/dist/esm/resources/convert-storage-resource-to-item-resource.js.map +1 -1
- package/dist/esm/resources/copyAssociatedFiles.js +44 -53
- package/dist/esm/resources/copyAssociatedFiles.js.map +1 -1
- package/dist/esm/resources/copyDataIntoItem.js +5 -11
- package/dist/esm/resources/copyDataIntoItem.js.map +1 -1
- package/dist/esm/resources/copyMetadataIntoItem.js +4 -10
- package/dist/esm/resources/copyMetadataIntoItem.js.map +1 -1
- package/dist/esm/resources/copyResourceIntoZip.js +5 -7
- package/dist/esm/resources/copyResourceIntoZip.js.map +1 -1
- package/dist/esm/resources/copyZipIntoItem.js +5 -9
- package/dist/esm/resources/copyZipIntoItem.js.map +1 -1
- package/dist/esm/resources/createCopyResults.js +5 -2
- package/dist/esm/resources/createCopyResults.js.map +1 -1
- package/dist/esm/resources/get-blob.js +7 -5
- package/dist/esm/resources/get-blob.js.map +1 -1
- package/dist/esm/resources/getItemResourcesFilesFromPaths.js +7 -7
- package/dist/esm/resources/getItemResourcesFilesFromPaths.js.map +1 -1
- package/dist/esm/resources/getItemResourcesPaths.js +7 -8
- package/dist/esm/resources/getItemResourcesPaths.js.map +1 -1
- package/dist/esm/resources/transform-resource-paths-to-solution-resources.js +8 -9
- package/dist/esm/resources/transform-resource-paths-to-solution-resources.js.map +1 -1
- package/dist/esm/restHelpers.d.ts +65 -5
- package/dist/esm/restHelpers.js +422 -276
- package/dist/esm/restHelpers.js.map +1 -1
- package/dist/esm/restHelpersGet.js +102 -111
- package/dist/esm/restHelpersGet.js.map +1 -1
- package/dist/esm/sharing/share-item-to-groups.d.ts +2 -1
- package/dist/esm/sharing/share-item-to-groups.js +12 -6
- package/dist/esm/sharing/share-item-to-groups.js.map +1 -1
- package/dist/esm/templatization.js +64 -40
- package/dist/esm/templatization.js.map +1 -1
- package/dist/esm/trackingHelpers.d.ts +116 -0
- package/dist/esm/trackingHelpers.js +205 -0
- package/dist/esm/trackingHelpers.js.map +1 -0
- package/dist/esm/velocityHelpers.d.ts +2 -0
- package/dist/esm/velocityHelpers.js +30 -12
- package/dist/esm/velocityHelpers.js.map +1 -1
- package/dist/esm/workforceHelpers.d.ts +11 -0
- package/dist/esm/workforceHelpers.js +208 -180
- package/dist/esm/workforceHelpers.js.map +1 -1
- package/dist/node/completeItem.js +8 -9
- package/dist/node/completeItem.js.map +1 -1
- package/dist/node/create-hub-request-options.d.ts +4 -4
- package/dist/node/create-hub-request-options.js +11 -14
- package/dist/node/create-hub-request-options.js.map +1 -1
- package/dist/node/deleteHelpers/deleteEmptyGroups.js +3 -3
- package/dist/node/deleteHelpers/deleteEmptyGroups.js.map +1 -1
- package/dist/node/deleteHelpers/deleteGroupIfEmpty.js +16 -16
- package/dist/node/deleteHelpers/deleteGroupIfEmpty.js.map +1 -1
- package/dist/node/deleteHelpers/deleteSolutionContents.js +26 -28
- package/dist/node/deleteHelpers/deleteSolutionContents.js.map +1 -1
- package/dist/node/deleteHelpers/deleteSolutionFolder.js +11 -11
- package/dist/node/deleteHelpers/deleteSolutionFolder.js.map +1 -1
- package/dist/node/deleteHelpers/deleteSolutionItem.js +6 -6
- package/dist/node/deleteHelpers/deleteSolutionItem.js.map +1 -1
- package/dist/node/deleteHelpers/index.js +1 -1
- package/dist/node/deleteHelpers/reconstructBuildOrderIds.js +2 -2
- package/dist/node/deleteHelpers/reconstructBuildOrderIds.js.map +1 -1
- package/dist/node/deleteHelpers/removeItems.js +26 -35
- package/dist/node/deleteHelpers/removeItems.js.map +1 -1
- package/dist/node/deleteHelpers/reportProgress.js +4 -7
- package/dist/node/deleteHelpers/reportProgress.js.map +1 -1
- package/dist/node/deleteSolution.js +12 -14
- package/dist/node/deleteSolution.js.map +1 -1
- package/dist/node/dependencies.js +29 -21
- package/dist/node/dependencies.js.map +1 -1
- package/dist/node/featureServiceHelpers.d.ts +6 -0
- package/dist/node/featureServiceHelpers.js +535 -504
- package/dist/node/featureServiceHelpers.js.map +1 -1
- package/dist/node/generalHelpers.js +75 -79
- package/dist/node/generalHelpers.js.map +1 -1
- package/dist/node/get-subscription-info.js +7 -5
- package/dist/node/get-subscription-info.js.map +1 -1
- package/dist/node/getDeletableSolutionInfo.js +8 -12
- package/dist/node/getDeletableSolutionInfo.js.map +1 -1
- package/dist/node/getSolutionSummary.js +19 -23
- package/dist/node/getSolutionSummary.js.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.js +2 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/interfaces.d.ts +39 -1
- package/dist/node/interfaces.js.map +1 -1
- package/dist/node/libConnectors.js +8 -10
- package/dist/node/libConnectors.js.map +1 -1
- package/dist/node/migrations/apply-schema.js +4 -4
- package/dist/node/migrations/apply-schema.js.map +1 -1
- package/dist/node/migrations/is-legacy-solution.js +3 -3
- package/dist/node/migrations/is-legacy-solution.js.map +1 -1
- package/dist/node/migrations/upgrade-three-dot-one.js +5 -5
- package/dist/node/migrations/upgrade-three-dot-one.js.map +1 -1
- package/dist/node/migrations/upgrade-three-dot-zero.js +2 -2
- package/dist/node/migrations/upgrade-three-dot-zero.js.map +1 -1
- package/dist/node/migrations/upgrade-two-dot-five.js +18 -9
- package/dist/node/migrations/upgrade-two-dot-five.js.map +1 -1
- package/dist/node/migrations/upgrade-two-dot-four.js +13 -13
- package/dist/node/migrations/upgrade-two-dot-four.js.map +1 -1
- package/dist/node/migrations/upgrade-two-dot-one.js +2 -2
- package/dist/node/migrations/upgrade-two-dot-one.js.map +1 -1
- package/dist/node/migrations/upgrade-two-dot-seven.js +2 -2
- package/dist/node/migrations/upgrade-two-dot-seven.js.map +1 -1
- package/dist/node/migrations/upgrade-two-dot-six.js +10 -13
- package/dist/node/migrations/upgrade-two-dot-six.js.map +1 -1
- package/dist/node/migrations/upgrade-two-dot-three.js +5 -5
- package/dist/node/migrations/upgrade-two-dot-three.js.map +1 -1
- package/dist/node/migrations/upgrade-two-dot-two.js +5 -5
- package/dist/node/migrations/upgrade-two-dot-two.js.map +1 -1
- package/dist/node/migrations/upgrade-two-dot-zero.js +9 -10
- package/dist/node/migrations/upgrade-two-dot-zero.js.map +1 -1
- package/dist/node/migrator.js +16 -18
- package/dist/node/migrator.js.map +1 -1
- package/dist/node/polyfills.js +5 -5
- package/dist/node/polyfills.js.map +1 -1
- package/dist/node/resourceHelpers.js +62 -65
- package/dist/node/resourceHelpers.js.map +1 -1
- package/dist/node/resources/add-resource-from-blob.js +4 -4
- package/dist/node/resources/add-resource-from-blob.js.map +1 -1
- package/dist/node/resources/addMetadataFromBlob.js +2 -2
- package/dist/node/resources/addMetadataFromBlob.js.map +1 -1
- package/dist/node/resources/convert-item-resource-to-storage-resource.js +6 -7
- package/dist/node/resources/convert-item-resource-to-storage-resource.js.map +1 -1
- package/dist/node/resources/convert-storage-resource-to-item-resource.js +9 -10
- package/dist/node/resources/convert-storage-resource-to-item-resource.js.map +1 -1
- package/dist/node/resources/copyAssociatedFiles.js +52 -61
- package/dist/node/resources/copyAssociatedFiles.js.map +1 -1
- package/dist/node/resources/copyDataIntoItem.js +9 -15
- package/dist/node/resources/copyDataIntoItem.js.map +1 -1
- package/dist/node/resources/copyMetadataIntoItem.js +7 -13
- package/dist/node/resources/copyMetadataIntoItem.js.map +1 -1
- package/dist/node/resources/copyResourceIntoZip.js +7 -9
- package/dist/node/resources/copyResourceIntoZip.js.map +1 -1
- package/dist/node/resources/copyZipIntoItem.js +8 -12
- package/dist/node/resources/copyZipIntoItem.js.map +1 -1
- package/dist/node/resources/createCopyResults.js +5 -2
- package/dist/node/resources/createCopyResults.js.map +1 -1
- package/dist/node/resources/get-blob.js +8 -6
- package/dist/node/resources/get-blob.js.map +1 -1
- package/dist/node/resources/getItemResourcesFilesFromPaths.js +8 -8
- package/dist/node/resources/getItemResourcesFilesFromPaths.js.map +1 -1
- package/dist/node/resources/getItemResourcesPaths.js +9 -10
- package/dist/node/resources/getItemResourcesPaths.js.map +1 -1
- package/dist/node/resources/index.js +1 -1
- package/dist/node/resources/transform-resource-paths-to-solution-resources.js +10 -11
- package/dist/node/resources/transform-resource-paths-to-solution-resources.js.map +1 -1
- package/dist/node/restHelpers.d.ts +65 -5
- package/dist/node/restHelpers.js +437 -285
- package/dist/node/restHelpers.js.map +1 -1
- package/dist/node/restHelpersGet.js +107 -116
- package/dist/node/restHelpersGet.js.map +1 -1
- package/dist/node/sharing/index.js +1 -1
- package/dist/node/sharing/share-item-to-groups.d.ts +2 -1
- package/dist/node/sharing/share-item-to-groups.js +13 -7
- package/dist/node/sharing/share-item-to-groups.js.map +1 -1
- package/dist/node/templatization.js +61 -37
- package/dist/node/templatization.js.map +1 -1
- package/dist/node/trackingHelpers.d.ts +116 -0
- package/dist/node/trackingHelpers.js +217 -0
- package/dist/node/trackingHelpers.js.map +1 -0
- package/dist/node/velocityHelpers.d.ts +2 -0
- package/dist/node/velocityHelpers.js +33 -15
- package/dist/node/velocityHelpers.js.map +1 -1
- package/dist/node/workforceHelpers.d.ts +11 -0
- package/dist/node/workforceHelpers.js +214 -185
- package/dist/node/workforceHelpers.js.map +1 -1
- package/dist/umd/common.umd.js +14830 -14466
- package/dist/umd/common.umd.js.map +1 -1
- package/dist/umd/common.umd.min.js +3 -3
- package/dist/umd/common.umd.min.js.map +1 -1
- package/dist/umd/create-hub-request-options.d.ts +4 -4
- package/dist/umd/featureServiceHelpers.d.ts +6 -0
- package/dist/umd/index.d.ts +1 -0
- package/dist/umd/interfaces.d.ts +39 -1
- package/dist/umd/restHelpers.d.ts +65 -5
- package/dist/umd/sharing/share-item-to-groups.d.ts +2 -1
- package/dist/umd/trackingHelpers.d.ts +116 -0
- package/dist/umd/velocityHelpers.d.ts +2 -0
- package/dist/umd/workforceHelpers.d.ts +11 -0
- package/package.json +24 -24
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports._templatizeAdminLayerInfo = exports._templatizeLayerFieldReferences = exports._validateEditFieldsInfo = exports._validateTypesTemplates = exports._validateTemplatesFields = exports._validateIndexes = exports._validateDisplayField = exports._validateFields = exports._templatizeLayer = exports._templatizeProperty = exports._templatize = exports.updatePopupInfo = exports._isViewFieldOverride = exports._getDomainAndAliasInfos = exports._validateViewDomainsAndAlias = exports._getPortalViewFieldUpdates = exports._validateDomains = exports._getFieldVisibilityUpdates = exports._getTypeIdField = exports.postProcessFields = exports.updateLayerFieldReferences = exports.validateSpatialReferenceAndExtent = exports.setDefaultSpatialReference = exports._updateTemplateDictionaryFields = exports._updateGeomFieldName = exports._updateSourceLayerFields = exports._updateItemFields = exports._getFieldNames = exports._updateForPortal = exports.removeLayerOptimization = exports._updateAddOptions = exports.addFeatureServiceDefinition = exports.addFeatureServiceLayersAndTables = exports.getExistingLayersAndTables = exports.getLayersAndTables = exports.deTemplatizeFieldInfos = exports.updateTemplateForInvalidDesignations = exports.updateSettingsFieldInfos = exports.setNamesAndTitles = exports.getLayerSettings = exports._updateTypeKeywords = exports.updateTemplate = exports._cachePopupInfo = exports.cachePopupInfos = exports._cacheFieldInfo = exports.cacheFieldInfos = exports.deleteViewProps = exports.templatize = exports.rest_addFeatures = exports.rest_queryFeatures = void 0;
|
|
19
|
-
exports._getNameMapping = exports._templatizeDefinitionQuery = exports._templatizeTimeInfo = exports._templatizeKeys = exports._templatizeTypeTemplates = exports._templatizeTemplates = exports._templatizeLabelingInfo = exports._templatizeArcadeExpressions = exports._templatizeAuthoringInfo = exports._templatizeTemporalRenderer = exports._templatizeGenRenderer = exports._templatizeRenderer = exports._templatizeDrawingInfo = exports._templatizeSimpleName = exports._templatizeDefinitionExpression = exports._templatizeDefinitionEditor = exports._templatizeMediaInfos = exports._templatizePopupElements = exports._templatizeExpressionInfos = exports._templatizeFieldName = exports._templatizePopupInfoFieldInfos = exports._templatizeName = exports._templatizePopupInfo = exports._templatizeRelationshipFields = exports._templatizeTopFilter = exports._templatizeAdminSourceLayerFields = exports._getDependantItemId = exports._templatizeAdminLayerInfoFields = exports._templatizeSourceServiceName = exports._processAdminObject = void 0;
|
|
20
|
-
var tslib_1 = require("tslib");
|
|
19
|
+
exports._getLayerChunkSize = exports._getNameMapping = exports._templatizeDefinitionQuery = exports._templatizeTimeInfo = exports._templatizeKeys = exports._templatizeTypeTemplates = exports._templatizeTemplates = exports._templatizeLabelingInfo = exports._templatizeArcadeExpressions = exports._templatizeAuthoringInfo = exports._templatizeTemporalRenderer = exports._templatizeGenRenderer = exports._templatizeRenderer = exports._templatizeDrawingInfo = exports._templatizeSimpleName = exports._templatizeDefinitionExpression = exports._templatizeDefinitionEditor = exports._templatizeMediaInfos = exports._templatizePopupElements = exports._templatizeExpressionInfos = exports._templatizeFieldName = exports._templatizePopupInfoFieldInfos = exports._templatizeName = exports._templatizePopupInfo = exports._templatizeRelationshipFields = exports._templatizeTopFilter = exports._templatizeAdminSourceLayerFields = exports._getDependantItemId = exports._templatizeAdminLayerInfoFields = exports._templatizeSourceServiceName = exports._processAdminObject = void 0;
|
|
21
20
|
/**
|
|
22
21
|
* Provides general helper functions.
|
|
23
22
|
*
|
|
@@ -27,9 +26,10 @@ var tslib_1 = require("tslib");
|
|
|
27
26
|
var arcgis_rest_feature_layer_1 = require("@esri/arcgis-rest-feature-layer");
|
|
28
27
|
Object.defineProperty(exports, "rest_queryFeatures", { enumerable: true, get: function () { return arcgis_rest_feature_layer_1.queryFeatures; } });
|
|
29
28
|
Object.defineProperty(exports, "rest_addFeatures", { enumerable: true, get: function () { return arcgis_rest_feature_layer_1.addFeatures; } });
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
const generalHelpers_1 = require("./generalHelpers");
|
|
30
|
+
const templatization_1 = require("./templatization");
|
|
31
|
+
const restHelpers_1 = require("./restHelpers");
|
|
32
|
+
const trackingHelpers_1 = require("./trackingHelpers");
|
|
33
33
|
//#endregion ------------------------------------------------------------------------------------------------------------//
|
|
34
34
|
//#region Public functions ----------------------------------------------------------------------------------------------//
|
|
35
35
|
/**
|
|
@@ -45,29 +45,36 @@ var restHelpers_1 = require("./restHelpers");
|
|
|
45
45
|
function templatize(itemTemplate, dependencies, templatizeFieldReferences, templateDictionary) {
|
|
46
46
|
templateDictionary = templateDictionary || {};
|
|
47
47
|
// Common templatizations
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
itemTemplate.item =
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
48
|
+
const id = itemTemplate.item.id;
|
|
49
|
+
const fsUrl = itemTemplate.item.url;
|
|
50
|
+
itemTemplate.item = {
|
|
51
|
+
...itemTemplate.item,
|
|
52
|
+
id: (0, templatization_1.templatizeTerm)(id, id, ".itemId"),
|
|
53
|
+
url: _templatize(id, "url"),
|
|
54
|
+
typeKeywords: (0, templatization_1.templatizeIds)(itemTemplate.item.typeKeywords)
|
|
55
|
+
};
|
|
56
|
+
// special handeling if we are dealing with a tracker view
|
|
57
|
+
(0, trackingHelpers_1.templatizeTracker)(itemTemplate);
|
|
58
|
+
const jsonLayers = itemTemplate.properties.layers || [];
|
|
59
|
+
const jsonTables = itemTemplate.properties.tables || [];
|
|
60
|
+
const jsonItems = jsonLayers.concat(jsonTables);
|
|
61
|
+
const data = itemTemplate.data || {};
|
|
62
|
+
const layers = data.layers || [];
|
|
63
|
+
const tables = data.tables || [];
|
|
64
|
+
const _items = layers.concat(tables);
|
|
58
65
|
// Set up symbols for the URL of the feature service and its layers and tables
|
|
59
66
|
templateDictionary[fsUrl] = itemTemplate.item.url; // map FS URL to its templatized form
|
|
60
|
-
jsonItems.concat(_items).forEach(
|
|
67
|
+
jsonItems.concat(_items).forEach(layer => {
|
|
61
68
|
templateDictionary[fsUrl + "/" + layer.id] = _templatize(id, "layer" + layer.id + ".url");
|
|
62
69
|
});
|
|
63
70
|
// templatize the service references serviceItemId
|
|
64
71
|
itemTemplate.properties.service.serviceItemId = (0, templatization_1.templatizeTerm)(itemTemplate.properties.service.serviceItemId, itemTemplate.properties.service.serviceItemId, ".itemId");
|
|
65
|
-
|
|
72
|
+
const initialExtent = (0, generalHelpers_1.getProp)(itemTemplate, "properties.service.initialExtent");
|
|
66
73
|
/* istanbul ignore else */
|
|
67
74
|
if (initialExtent) {
|
|
68
75
|
itemTemplate.properties.service.initialExtent = (0, templatization_1.templatizeTerm)(id, id, ".solutionExtent");
|
|
69
76
|
}
|
|
70
|
-
|
|
77
|
+
const fullExtent = (0, generalHelpers_1.getProp)(itemTemplate, "properties.service.fullExtent");
|
|
71
78
|
/* istanbul ignore else */
|
|
72
79
|
if (fullExtent) {
|
|
73
80
|
itemTemplate.properties.service.fullExtent = (0, templatization_1.templatizeTerm)(id, id, ".solutionExtent");
|
|
@@ -83,14 +90,14 @@ function templatize(itemTemplate, dependencies, templatizeFieldReferences, templ
|
|
|
83
90
|
}
|
|
84
91
|
// if any layer hasZ enabled then we need to set
|
|
85
92
|
// enableZDefaults and zDefault to deploy to enterprise
|
|
86
|
-
|
|
87
|
-
jsonItems.forEach(
|
|
93
|
+
let hasZ = false;
|
|
94
|
+
jsonItems.forEach((jsonItem) => {
|
|
88
95
|
// get the source service json for the given data item
|
|
89
|
-
|
|
96
|
+
const matchingItems = _items.filter(item => {
|
|
90
97
|
return jsonItem.id === item.id;
|
|
91
98
|
});
|
|
92
99
|
// templatize the source service json
|
|
93
|
-
|
|
100
|
+
const _item = matchingItems.length === 1 ? matchingItems[0] : undefined;
|
|
94
101
|
_templatizeLayer(_item, jsonItem, itemTemplate, dependencies, templatizeFieldReferences, templateDictionary);
|
|
95
102
|
hasZ = jsonItem.hasZ || (_item && _item.hasZ) ? true : hasZ;
|
|
96
103
|
});
|
|
@@ -107,8 +114,8 @@ exports.templatize = templatize;
|
|
|
107
114
|
* @param layer The data layer instance with field name references within
|
|
108
115
|
*/
|
|
109
116
|
function deleteViewProps(layer) {
|
|
110
|
-
|
|
111
|
-
props.forEach(
|
|
117
|
+
const props = ["definitionQuery"];
|
|
118
|
+
props.forEach(prop => {
|
|
112
119
|
(0, generalHelpers_1.deleteProp)(layer, prop);
|
|
113
120
|
});
|
|
114
121
|
}
|
|
@@ -137,7 +144,7 @@ function cacheFieldInfos(layer, fieldInfos, isPortal) {
|
|
|
137
144
|
// cache each of these properties as they each can contain field references
|
|
138
145
|
// and will have associated updateDefinition calls when deploying to portal
|
|
139
146
|
// as well as online for relationships...as relationships added with addToDef will cause failure
|
|
140
|
-
|
|
147
|
+
const props = {
|
|
141
148
|
editFieldsInfo: isPortal,
|
|
142
149
|
types: isPortal,
|
|
143
150
|
templates: isPortal,
|
|
@@ -146,7 +153,7 @@ function cacheFieldInfos(layer, fieldInfos, isPortal) {
|
|
|
146
153
|
timeInfo: isPortal,
|
|
147
154
|
viewDefinitionQuery: isPortal
|
|
148
155
|
};
|
|
149
|
-
Object.keys(props).forEach(
|
|
156
|
+
Object.keys(props).forEach(k => {
|
|
150
157
|
_cacheFieldInfo(layer, k, fieldInfos, props[k]);
|
|
151
158
|
});
|
|
152
159
|
return fieldInfos;
|
|
@@ -184,7 +191,7 @@ exports._cacheFieldInfo = _cacheFieldInfo;
|
|
|
184
191
|
*/
|
|
185
192
|
function cachePopupInfos(data) {
|
|
186
193
|
// store any popupInfo so we can update after any potential name changes
|
|
187
|
-
|
|
194
|
+
const popupInfos = {
|
|
188
195
|
layers: {},
|
|
189
196
|
tables: {}
|
|
190
197
|
};
|
|
@@ -206,7 +213,7 @@ exports.cachePopupInfos = cachePopupInfos;
|
|
|
206
213
|
* @param _items list or either layers or tables
|
|
207
214
|
*/
|
|
208
215
|
function _cachePopupInfo(popupInfos, type, _items) {
|
|
209
|
-
_items.forEach(
|
|
216
|
+
_items.forEach((item) => {
|
|
210
217
|
if (item && item.hasOwnProperty("popupInfo")) {
|
|
211
218
|
popupInfos[type][item.id] = item.popupInfo;
|
|
212
219
|
item.popupInfo = {};
|
|
@@ -248,10 +255,10 @@ exports.updateTemplate = updateTemplate;
|
|
|
248
255
|
*/
|
|
249
256
|
function _updateTypeKeywords(itemTemplate, createResponse) {
|
|
250
257
|
// https://github.com/Esri/solution.js/issues/589
|
|
251
|
-
|
|
252
|
-
|
|
258
|
+
const iKwords = (0, generalHelpers_1.getProp)(itemTemplate, "item.typeKeywords");
|
|
259
|
+
const cKwords = (0, generalHelpers_1.getProp)(createResponse, "typeKeywords");
|
|
253
260
|
if (iKwords && cKwords) {
|
|
254
|
-
(0, generalHelpers_1.setProp)(itemTemplate, "item.typeKeywords", iKwords.concat(cKwords.filter(
|
|
261
|
+
(0, generalHelpers_1.setProp)(itemTemplate, "item.typeKeywords", iKwords.concat(cKwords.filter(k => iKwords.indexOf(k) < 0)));
|
|
255
262
|
}
|
|
256
263
|
return itemTemplate;
|
|
257
264
|
}
|
|
@@ -267,21 +274,21 @@ exports._updateTypeKeywords = _updateTypeKeywords;
|
|
|
267
274
|
* @return The settings object that will be used to de-templatize the field references.
|
|
268
275
|
*/
|
|
269
276
|
function getLayerSettings(layerInfos, url, itemId, enterpriseIDMapping) {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
ids.forEach(
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
277
|
+
const settings = {};
|
|
278
|
+
const ids = Object.keys(layerInfos);
|
|
279
|
+
ids.forEach((id) => {
|
|
280
|
+
const _layerId = (0, generalHelpers_1.getProp)(layerInfos[id], "item.id");
|
|
281
|
+
const isNum = parseInt(_layerId, 10) > -1;
|
|
282
|
+
const layerId = isNum && enterpriseIDMapping
|
|
276
283
|
? enterpriseIDMapping[_layerId]
|
|
277
284
|
: isNum
|
|
278
285
|
? _layerId
|
|
279
286
|
: id;
|
|
280
|
-
settings[
|
|
287
|
+
settings[`layer${isNum ? _layerId : id}`] = {
|
|
281
288
|
fields: _getNameMapping(layerInfos, id),
|
|
282
289
|
url: (0, generalHelpers_1.checkUrlPathTermination)(url) + layerId,
|
|
283
|
-
layerId
|
|
284
|
-
itemId
|
|
290
|
+
layerId,
|
|
291
|
+
itemId
|
|
285
292
|
};
|
|
286
293
|
(0, generalHelpers_1.deleteProp)(layerInfos[id], "newFields");
|
|
287
294
|
(0, generalHelpers_1.deleteProp)(layerInfos[id], "sourceFields");
|
|
@@ -300,24 +307,28 @@ exports.getLayerSettings = getLayerSettings;
|
|
|
300
307
|
* @return An updated collection of AGO templates with unique feature service names.
|
|
301
308
|
*/
|
|
302
309
|
function setNamesAndTitles(templates, solutionItemId) {
|
|
303
|
-
|
|
304
|
-
return templates.map(
|
|
310
|
+
const names = [];
|
|
311
|
+
return templates.map(t => {
|
|
312
|
+
/* istanbul ignore else */
|
|
305
313
|
if (t.item.type === "Feature Service") {
|
|
306
314
|
// Retain the existing title but swap with name if it's missing
|
|
307
315
|
t.item.title = t.item.title || t.item.name;
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
316
|
+
/* istanbul ignore else */
|
|
317
|
+
if (!(0, trackingHelpers_1.isTrackingViewTemplate)(t)) {
|
|
318
|
+
// Need to set the service name: name + "_" + newItemId
|
|
319
|
+
let baseName = t.item.name || t.item.title;
|
|
320
|
+
// If the name already contains a GUID remove it
|
|
321
|
+
baseName = baseName.replace(/_[0-9A-F]{32}/gi, "");
|
|
322
|
+
// The name length limit is 98
|
|
323
|
+
// Limit the baseName to 50 characters before the _<guid>
|
|
324
|
+
const name = baseName.substring(0, 50) + "_" + solutionItemId;
|
|
325
|
+
// If the name + GUID already exists then append "_occurrenceCount"
|
|
326
|
+
t.item.name =
|
|
327
|
+
names.indexOf(name) === -1
|
|
328
|
+
? name
|
|
329
|
+
: `${name}_${names.filter(n => n === name).length}`;
|
|
330
|
+
names.push(name);
|
|
331
|
+
}
|
|
321
332
|
}
|
|
322
333
|
return t;
|
|
323
334
|
});
|
|
@@ -333,22 +344,23 @@ exports.setNamesAndTitles = setNamesAndTitles;
|
|
|
333
344
|
* @param settings The settings object used to de-templatize the various templates within the item.
|
|
334
345
|
*/
|
|
335
346
|
function updateSettingsFieldInfos(itemTemplate, settings) {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
settingsKeys.forEach(
|
|
347
|
+
const dependencies = itemTemplate.dependencies;
|
|
348
|
+
const id = itemTemplate.itemId;
|
|
349
|
+
const settingsKeys = Object.keys(settings);
|
|
350
|
+
settingsKeys.forEach((k) => {
|
|
340
351
|
if (id === settings[k].itemId) {
|
|
341
|
-
dependencies.forEach(
|
|
342
|
-
settingsKeys.forEach(
|
|
352
|
+
dependencies.forEach((d) => {
|
|
353
|
+
settingsKeys.forEach((_k) => {
|
|
343
354
|
/* istanbul ignore else */
|
|
344
355
|
if (d === _k) {
|
|
345
356
|
// combine for multi-source views
|
|
346
|
-
|
|
357
|
+
const fieldInfos = {};
|
|
347
358
|
fieldInfos[d] = (0, generalHelpers_1.getProp)(settings[_k], "fieldInfos");
|
|
348
359
|
settings[k]["sourceServiceFields"] = settings[k]["sourceServiceFields"]
|
|
349
|
-
?
|
|
350
|
-
|
|
351
|
-
layerKeys.
|
|
360
|
+
? { ...settings[k]["sourceServiceFields"], ...fieldInfos }
|
|
361
|
+
: fieldInfos;
|
|
362
|
+
const layerKeys = Object.keys(settings[_k]);
|
|
363
|
+
layerKeys.forEach(layerKey => {
|
|
352
364
|
/* istanbul ignore else */
|
|
353
365
|
if (layerKey.startsWith("layer")) {
|
|
354
366
|
settings[k][layerKey] = settings[_k][layerKey];
|
|
@@ -371,17 +383,17 @@ exports.updateSettingsFieldInfos = updateSettingsFieldInfos;
|
|
|
371
383
|
* @protected
|
|
372
384
|
*/
|
|
373
385
|
function updateTemplateForInvalidDesignations(template, authentication) {
|
|
374
|
-
return new Promise(
|
|
386
|
+
return new Promise((resolve, reject) => {
|
|
375
387
|
template.properties.hasInvalidDesignations = true;
|
|
376
388
|
if (template.item.url) {
|
|
377
389
|
// get the admin URL
|
|
378
|
-
|
|
379
|
-
(0, restHelpers_1.rest_request)(
|
|
390
|
+
const url = template.item.url;
|
|
391
|
+
(0, restHelpers_1.rest_request)(url + "?f=json", {
|
|
380
392
|
authentication: authentication
|
|
381
|
-
}).then(
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
layersAndTables.forEach(
|
|
393
|
+
}).then(serviceData => {
|
|
394
|
+
const layerInfos = {};
|
|
395
|
+
const layersAndTables = (serviceData.layers || []).concat(serviceData.tables || []);
|
|
396
|
+
layersAndTables.forEach((l) => {
|
|
385
397
|
/* istanbul ignore else */
|
|
386
398
|
if (l && l.hasOwnProperty("id")) {
|
|
387
399
|
layerInfos[l.id] = l;
|
|
@@ -389,9 +401,9 @@ function updateTemplateForInvalidDesignations(template, authentication) {
|
|
|
389
401
|
});
|
|
390
402
|
template.data[template.itemId] = Object.assign({
|
|
391
403
|
itemId: template.itemId
|
|
392
|
-
}, getLayerSettings(layerInfos,
|
|
404
|
+
}, getLayerSettings(layerInfos, url, template.itemId));
|
|
393
405
|
resolve(template);
|
|
394
|
-
},
|
|
406
|
+
}, e => reject((0, generalHelpers_1.fail)(e)));
|
|
395
407
|
}
|
|
396
408
|
else {
|
|
397
409
|
resolve(template);
|
|
@@ -409,8 +421,8 @@ exports.updateTemplateForInvalidDesignations = updateTemplateForInvalidDesignati
|
|
|
409
421
|
* @return An object that contains updated instances of popupInfos, fieldInfos, and adminLayerInfos
|
|
410
422
|
*/
|
|
411
423
|
function deTemplatizeFieldInfos(fieldInfos, popupInfos, adminLayerInfos, settings) {
|
|
412
|
-
|
|
413
|
-
fieldInfoKeys.forEach(
|
|
424
|
+
const fieldInfoKeys = Object.keys(fieldInfos);
|
|
425
|
+
fieldInfoKeys.forEach(id => {
|
|
414
426
|
if (fieldInfos[id].hasOwnProperty("templates")) {
|
|
415
427
|
fieldInfos[id].templates = JSON.parse((0, templatization_1.replaceInTemplate)(JSON.stringify(fieldInfos[id].templates), settings));
|
|
416
428
|
}
|
|
@@ -440,8 +452,8 @@ exports.deTemplatizeFieldInfos = deTemplatizeFieldInfos;
|
|
|
440
452
|
* @return array of layers and tables
|
|
441
453
|
*/
|
|
442
454
|
function getLayersAndTables(itemTemplate) {
|
|
443
|
-
|
|
444
|
-
|
|
455
|
+
const properties = itemTemplate.properties;
|
|
456
|
+
const layersAndTables = [];
|
|
445
457
|
(properties.layers || []).forEach(function (layer) {
|
|
446
458
|
layersAndTables.push({
|
|
447
459
|
item: layer,
|
|
@@ -470,14 +482,14 @@ exports.getLayersAndTables = getLayersAndTables;
|
|
|
470
482
|
*/
|
|
471
483
|
function getExistingLayersAndTables(url, ids, authentication) {
|
|
472
484
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
473
|
-
return new Promise(
|
|
474
|
-
|
|
485
|
+
return new Promise(resolve => {
|
|
486
|
+
const defs = ids.map(id => {
|
|
475
487
|
return (0, restHelpers_1.rest_request)((0, generalHelpers_1.checkUrlPathTermination)(url) + id, {
|
|
476
|
-
authentication
|
|
488
|
+
authentication
|
|
477
489
|
});
|
|
478
490
|
});
|
|
479
491
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
480
|
-
Promise.all(defs.map(
|
|
492
|
+
Promise.all(defs.map(p => p.catch(e => e))).then(resolve);
|
|
481
493
|
});
|
|
482
494
|
}
|
|
483
495
|
exports.getExistingLayersAndTables = getExistingLayersAndTables;
|
|
@@ -493,44 +505,49 @@ exports.getExistingLayersAndTables = getExistingLayersAndTables;
|
|
|
493
505
|
* @protected
|
|
494
506
|
*/
|
|
495
507
|
function addFeatureServiceLayersAndTables(itemTemplate, templateDictionary, popupInfos, authentication) {
|
|
496
|
-
return new Promise(
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
var adminLayerInfos = {};
|
|
500
|
-
// Add the service's layers and tables to it
|
|
501
|
-
var layersAndTables = getLayersAndTables(itemTemplate);
|
|
502
|
-
if (layersAndTables.length > 0) {
|
|
503
|
-
addFeatureServiceDefinition(itemTemplate.item.url || "", layersAndTables, templateDictionary, authentication, itemTemplate.key, adminLayerInfos, fieldInfos, itemTemplate).then(function () {
|
|
504
|
-
// Detemplatize field references and update the layer properties
|
|
505
|
-
// Only failure path is handled by addFeatureServiceDefinition
|
|
506
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
507
|
-
updateLayerFieldReferences(itemTemplate, fieldInfos, popupInfos, adminLayerInfos, templateDictionary).then(function (r) {
|
|
508
|
-
// Update relationships and layer definitions
|
|
509
|
-
var updates = (0, restHelpers_1.getLayerUpdates)({
|
|
510
|
-
message: "updated layer definition",
|
|
511
|
-
objects: r.layerInfos.fieldInfos,
|
|
512
|
-
itemTemplate: r.itemTemplate,
|
|
513
|
-
authentication: authentication
|
|
514
|
-
}, templateDictionary.isPortal);
|
|
515
|
-
// Get any updates for the service that should be performed after updates to the layers
|
|
516
|
-
if (templateDictionary.isPortal) {
|
|
517
|
-
updates = (0, restHelpers_1.getFinalServiceUpdates)(r.itemTemplate, authentication, updates);
|
|
518
|
-
}
|
|
519
|
-
// Process the updates sequentially
|
|
520
|
-
updates
|
|
521
|
-
.reduce(function (prev, update) {
|
|
522
|
-
return prev.then(function () {
|
|
523
|
-
return (0, restHelpers_1.getRequest)(update);
|
|
524
|
-
});
|
|
525
|
-
}, Promise.resolve(null))
|
|
526
|
-
.then(function () { return resolve(null); }, function (e) { return reject((0, generalHelpers_1.fail)(e)); } // getRequest
|
|
527
|
-
);
|
|
528
|
-
});
|
|
529
|
-
}, function (e) { return reject((0, generalHelpers_1.fail)(e)); } // addFeatureServiceDefinition
|
|
530
|
-
);
|
|
508
|
+
return new Promise((resolve, reject) => {
|
|
509
|
+
if ((0, trackingHelpers_1.isTrackingViewTemplate)(itemTemplate)) {
|
|
510
|
+
resolve(null);
|
|
531
511
|
}
|
|
532
512
|
else {
|
|
533
|
-
|
|
513
|
+
// Create a hash of various properties that contain field references
|
|
514
|
+
const fieldInfos = {};
|
|
515
|
+
const adminLayerInfos = {};
|
|
516
|
+
// Add the service's layers and tables to it
|
|
517
|
+
const layersAndTables = getLayersAndTables(itemTemplate);
|
|
518
|
+
if (layersAndTables.length > 0) {
|
|
519
|
+
addFeatureServiceDefinition(itemTemplate.item.url || "", layersAndTables, templateDictionary, authentication, itemTemplate.key, adminLayerInfos, fieldInfos, itemTemplate).then(() => {
|
|
520
|
+
// Detemplatize field references and update the layer properties
|
|
521
|
+
// Only failure path is handled by addFeatureServiceDefinition
|
|
522
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
523
|
+
updateLayerFieldReferences(itemTemplate, fieldInfos, popupInfos, adminLayerInfos, templateDictionary).then(r => {
|
|
524
|
+
// Update relationships and layer definitions
|
|
525
|
+
let updates = (0, restHelpers_1.getLayerUpdates)({
|
|
526
|
+
message: "updated layer definition",
|
|
527
|
+
objects: r.layerInfos.fieldInfos,
|
|
528
|
+
itemTemplate: r.itemTemplate,
|
|
529
|
+
authentication
|
|
530
|
+
}, templateDictionary.isPortal);
|
|
531
|
+
// Get any updates for the service that should be performed after updates to the layers
|
|
532
|
+
if (templateDictionary.isPortal) {
|
|
533
|
+
updates = (0, restHelpers_1.getFinalServiceUpdates)(r.itemTemplate, authentication, updates);
|
|
534
|
+
}
|
|
535
|
+
// Process the updates sequentially
|
|
536
|
+
updates
|
|
537
|
+
.reduce((prev, update) => {
|
|
538
|
+
return prev.then(() => {
|
|
539
|
+
return (0, restHelpers_1.getRequest)(update);
|
|
540
|
+
});
|
|
541
|
+
}, Promise.resolve(null))
|
|
542
|
+
.then(() => resolve(null), (e) => reject((0, generalHelpers_1.fail)(e)) // getRequest
|
|
543
|
+
);
|
|
544
|
+
});
|
|
545
|
+
}, e => reject((0, generalHelpers_1.fail)(e)) // addFeatureServiceDefinition
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
resolve(null);
|
|
550
|
+
}
|
|
534
551
|
}
|
|
535
552
|
});
|
|
536
553
|
}
|
|
@@ -551,83 +568,95 @@ exports.addFeatureServiceLayersAndTables = addFeatureServiceLayersAndTables;
|
|
|
551
568
|
* @protected
|
|
552
569
|
*/
|
|
553
570
|
function addFeatureServiceDefinition(serviceUrl, listToAdd, templateDictionary, authentication, key, adminLayerInfos, fieldInfos, itemTemplate) {
|
|
554
|
-
return new Promise(
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
tables: [],
|
|
558
|
-
authentication: authentication
|
|
559
|
-
};
|
|
560
|
-
// if the service has veiws keep track of the fields so we can use them to
|
|
561
|
-
// compare with the view fields
|
|
562
|
-
/* istanbul ignore else */
|
|
563
|
-
if ((0, generalHelpers_1.getProp)(itemTemplate, "properties.service.hasViews")) {
|
|
564
|
-
_updateTemplateDictionaryFields(itemTemplate, templateDictionary);
|
|
571
|
+
return new Promise((resolve, reject) => {
|
|
572
|
+
if ((0, trackingHelpers_1.isTrackingViewTemplate)(itemTemplate)) {
|
|
573
|
+
resolve(null);
|
|
565
574
|
}
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
575
|
+
else {
|
|
576
|
+
let options = {
|
|
577
|
+
layers: [],
|
|
578
|
+
tables: [],
|
|
579
|
+
authentication
|
|
580
|
+
};
|
|
581
|
+
// if the service has veiws keep track of the fields so we can use them to
|
|
582
|
+
// compare with the view fields
|
|
571
583
|
/* istanbul ignore else */
|
|
572
|
-
if (
|
|
573
|
-
|
|
584
|
+
if ((0, generalHelpers_1.getProp)(itemTemplate, "properties.service.hasViews")) {
|
|
585
|
+
_updateTemplateDictionaryFields(itemTemplate, templateDictionary);
|
|
574
586
|
}
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
// bring over the fieldInfos from the source layer
|
|
582
|
-
updateSettingsFieldInfos(itemTemplate, templateDictionary);
|
|
583
|
-
// update adminLayerInfo before add to definition with view source fieldInfo settings
|
|
584
|
-
item.adminLayerInfo = (0, templatization_1.replaceInTemplate)(item.adminLayerInfo, templateDictionary);
|
|
587
|
+
const chunkSize = _getLayerChunkSize();
|
|
588
|
+
const layerChunks = [];
|
|
589
|
+
listToAdd.forEach((toAdd, i) => {
|
|
590
|
+
let item = toAdd.item;
|
|
591
|
+
const originalId = item.id;
|
|
592
|
+
fieldInfos = cacheFieldInfos(item, fieldInfos, templateDictionary.isPortal);
|
|
585
593
|
/* istanbul ignore else */
|
|
586
|
-
if (
|
|
587
|
-
|
|
588
|
-
fieldInfos.hasOwnProperty(item.id)) {
|
|
589
|
-
Object.keys(templateDictionary).some(function (k) {
|
|
590
|
-
if (templateDictionary[k].itemId === itemTemplate.itemId) {
|
|
591
|
-
fieldInfos[item.id]["sourceServiceFields"] =
|
|
592
|
-
templateDictionary[k].sourceServiceFields;
|
|
593
|
-
return true;
|
|
594
|
-
}
|
|
595
|
-
else {
|
|
596
|
-
return false;
|
|
597
|
-
}
|
|
598
|
-
});
|
|
599
|
-
// view field domain and alias can contain different values than the source field
|
|
600
|
-
// we need to set isViewOverride when added fields that differ from the source field
|
|
601
|
-
_validateViewDomainsAndAlias(fieldInfos[item.id], item);
|
|
594
|
+
if (item.isView) {
|
|
595
|
+
deleteViewProps(item);
|
|
602
596
|
}
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
597
|
+
// when the item is a view we need to grab the supporting fieldInfos
|
|
598
|
+
/* istanbul ignore else */
|
|
599
|
+
if (itemTemplate.properties.service.isView) {
|
|
600
|
+
_updateGeomFieldName(item.adminLayerInfo, templateDictionary);
|
|
601
|
+
adminLayerInfos[originalId] = item.adminLayerInfo;
|
|
602
|
+
// need to update adminLayerInfo before adding to the service def
|
|
603
|
+
// bring over the fieldInfos from the source layer
|
|
604
|
+
updateSettingsFieldInfos(itemTemplate, templateDictionary);
|
|
605
|
+
// update adminLayerInfo before add to definition with view source fieldInfo settings
|
|
606
|
+
item.adminLayerInfo = (0, templatization_1.replaceInTemplate)(item.adminLayerInfo, templateDictionary);
|
|
607
|
+
/* istanbul ignore else */
|
|
608
|
+
if (!templateDictionary.isPortal &&
|
|
609
|
+
fieldInfos &&
|
|
610
|
+
fieldInfos.hasOwnProperty(item.id)) {
|
|
611
|
+
Object.keys(templateDictionary).some(k => {
|
|
612
|
+
if (templateDictionary[k].itemId === itemTemplate.itemId) {
|
|
613
|
+
fieldInfos[item.id]["sourceServiceFields"] =
|
|
614
|
+
templateDictionary[k].sourceServiceFields;
|
|
615
|
+
return true;
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
return false;
|
|
619
|
+
}
|
|
620
|
+
});
|
|
621
|
+
// view field domain and alias can contain different values than the source field
|
|
622
|
+
// we need to set isViewOverride when added fields that differ from the source field
|
|
623
|
+
_validateViewDomainsAndAlias(fieldInfos[item.id], item);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
/* istanbul ignore else */
|
|
627
|
+
if (templateDictionary.isPortal) {
|
|
628
|
+
item = _updateForPortal(item, itemTemplate, templateDictionary);
|
|
629
|
+
}
|
|
630
|
+
removeLayerOptimization(item);
|
|
631
|
+
// this can still chunk layers
|
|
632
|
+
options = _updateAddOptions(itemTemplate, item, options, layerChunks, authentication);
|
|
633
|
+
if (item.type === "Feature Layer") {
|
|
634
|
+
options.layers.push(item);
|
|
635
|
+
}
|
|
636
|
+
else {
|
|
637
|
+
options.tables.push(item);
|
|
638
|
+
}
|
|
639
|
+
// In general we are switching to not use chunking. Rather if we exceed the defined chunk size
|
|
640
|
+
// we will use an async request.
|
|
641
|
+
// Currently the only case that should chunk the requests is when we have a multisource view
|
|
642
|
+
// handled in _updateAddOptions above
|
|
643
|
+
/* istanbul ignore else */
|
|
644
|
+
if (i + 1 === listToAdd.length) {
|
|
645
|
+
layerChunks.push(Object.assign({}, options));
|
|
646
|
+
options = {
|
|
647
|
+
layers: [],
|
|
648
|
+
tables: [],
|
|
649
|
+
authentication
|
|
650
|
+
};
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
// will use async by default rather than chunk the layer requests when we have more layers
|
|
654
|
+
// than the defined chunk size
|
|
655
|
+
const useAsync = listToAdd.length > chunkSize;
|
|
656
|
+
layerChunks
|
|
657
|
+
.reduce((prev, curr) => prev.then(() => (0, restHelpers_1.addToServiceDefinition)(serviceUrl, curr, false, useAsync)), Promise.resolve(null))
|
|
658
|
+
.then(() => resolve(null), (e) => reject((0, generalHelpers_1.fail)(e)));
|
|
659
|
+
}
|
|
631
660
|
});
|
|
632
661
|
}
|
|
633
662
|
exports.addFeatureServiceDefinition = addFeatureServiceDefinition;
|
|
@@ -645,17 +674,17 @@ exports.addFeatureServiceDefinition = addFeatureServiceDefinition;
|
|
|
645
674
|
* @protected
|
|
646
675
|
*/
|
|
647
676
|
function _updateAddOptions(itemTemplate, item, options, layerChunks, authentication) {
|
|
648
|
-
|
|
649
|
-
|
|
677
|
+
const isMsView = (0, generalHelpers_1.getProp)(itemTemplate, "properties.service.isMultiServicesView") || false;
|
|
678
|
+
const serviceName = (0, generalHelpers_1.getProp)(itemTemplate, "item.name");
|
|
650
679
|
/* istanbul ignore else */
|
|
651
680
|
if (isMsView) {
|
|
652
|
-
|
|
681
|
+
const table = (0, generalHelpers_1.getProp)(item, "adminLayerInfo.viewLayerDefinition.table");
|
|
653
682
|
/* istanbul ignore else */
|
|
654
683
|
if (table) {
|
|
655
|
-
|
|
684
|
+
const tableNames = (table.relatedTables || []).map((t) => t.sourceServiceName);
|
|
656
685
|
tableNames.push(table.sourceServiceName);
|
|
657
686
|
/* istanbul ignore else */
|
|
658
|
-
if (tableNames.some(
|
|
687
|
+
if (tableNames.some(n => n === serviceName)) {
|
|
659
688
|
// if we already have some layers or tables add them first
|
|
660
689
|
/* istanbul ignore else */
|
|
661
690
|
if (options.layers.length > 0 || options.tables.length > 0) {
|
|
@@ -663,7 +692,7 @@ function _updateAddOptions(itemTemplate, item, options, layerChunks, authenticat
|
|
|
663
692
|
options = {
|
|
664
693
|
layers: [],
|
|
665
694
|
tables: [],
|
|
666
|
-
authentication
|
|
695
|
+
authentication
|
|
667
696
|
};
|
|
668
697
|
}
|
|
669
698
|
}
|
|
@@ -708,41 +737,41 @@ function _updateForPortal(item, itemTemplate, templateDictionary) {
|
|
|
708
737
|
// Portal will fail if the sourceFields in the viewLayerDef contain fields that are not in the source service
|
|
709
738
|
/* istanbul ignore else */
|
|
710
739
|
if (item.isView) {
|
|
711
|
-
|
|
712
|
-
|
|
740
|
+
const viewLayerDefTable = (0, generalHelpers_1.getProp)(item, "adminLayerInfo.viewLayerDefinition.table");
|
|
741
|
+
let fieldNames = [];
|
|
713
742
|
if (viewLayerDefTable) {
|
|
714
|
-
|
|
715
|
-
|
|
743
|
+
const tableFieldNames = _getFieldNames(viewLayerDefTable, itemTemplate, templateDictionary);
|
|
744
|
+
fieldNames = fieldNames.concat(tableFieldNames);
|
|
716
745
|
(0, generalHelpers_1.setProp)(item, "adminLayerInfo.viewLayerDefinition.table", _updateSourceLayerFields(viewLayerDefTable, tableFieldNames));
|
|
717
746
|
// Handle related also
|
|
718
747
|
/* istanbul ignore else */
|
|
719
748
|
if (Array.isArray(viewLayerDefTable.relatedTables)) {
|
|
720
|
-
viewLayerDefTable.relatedTables.map(
|
|
721
|
-
|
|
722
|
-
|
|
749
|
+
viewLayerDefTable.relatedTables.map((relatedTable) => {
|
|
750
|
+
const relatedTableFieldNames = _getFieldNames(relatedTable, itemTemplate, templateDictionary);
|
|
751
|
+
fieldNames = fieldNames.concat(relatedTableFieldNames);
|
|
723
752
|
return _updateSourceLayerFields(relatedTable, relatedTableFieldNames);
|
|
724
753
|
});
|
|
725
754
|
}
|
|
726
755
|
}
|
|
727
756
|
else {
|
|
728
|
-
Object.keys(templateDictionary).some(
|
|
757
|
+
Object.keys(templateDictionary).some(k => {
|
|
729
758
|
/* istanbul ignore else */
|
|
730
759
|
if (templateDictionary[k].itemId === item.serviceItemId) {
|
|
731
|
-
|
|
760
|
+
const layerInfo = templateDictionary[k][`layer${item.id}`];
|
|
732
761
|
/* istanbul ignore else */
|
|
733
762
|
if (layerInfo && layerInfo.fields) {
|
|
734
763
|
if (Array.isArray(layerInfo.fields)) {
|
|
735
|
-
|
|
764
|
+
fieldNames = layerInfo.fields.map((f) => f.name);
|
|
736
765
|
}
|
|
737
766
|
else {
|
|
738
|
-
|
|
767
|
+
fieldNames = Object.keys(layerInfo.fields);
|
|
739
768
|
}
|
|
740
769
|
}
|
|
741
770
|
return true;
|
|
742
771
|
}
|
|
743
772
|
});
|
|
744
773
|
}
|
|
745
|
-
item = _updateItemFields(item,
|
|
774
|
+
item = _updateItemFields(item, fieldNames);
|
|
746
775
|
}
|
|
747
776
|
// not allowed to set sourceSchemaChangesAllowed or isView for portal
|
|
748
777
|
// these are set when you create the service
|
|
@@ -762,19 +791,19 @@ exports._updateForPortal = _updateForPortal;
|
|
|
762
791
|
* @protected
|
|
763
792
|
*/
|
|
764
793
|
function _getFieldNames(table, itemTemplate, templateDictionary) {
|
|
765
|
-
|
|
766
|
-
|
|
794
|
+
let sourceLayerFields = [];
|
|
795
|
+
const viewSourceLayerId = table.sourceLayerId;
|
|
767
796
|
/* istanbul ignore else */
|
|
768
797
|
if (typeof viewSourceLayerId === "number") {
|
|
769
798
|
// need to make sure these actually exist in the source..
|
|
770
|
-
itemTemplate.dependencies.forEach(
|
|
771
|
-
|
|
799
|
+
itemTemplate.dependencies.forEach(d => {
|
|
800
|
+
const layerInfo = templateDictionary[d][`layer${viewSourceLayerId}`];
|
|
772
801
|
/* istanbul ignore else */
|
|
773
802
|
if (layerInfo &&
|
|
774
803
|
layerInfo.fields &&
|
|
775
804
|
templateDictionary[d].name === table.sourceServiceName) {
|
|
776
805
|
if (Array.isArray(layerInfo.fields)) {
|
|
777
|
-
sourceLayerFields = sourceLayerFields.concat(layerInfo.fields.map(
|
|
806
|
+
sourceLayerFields = sourceLayerFields.concat(layerInfo.fields.map((f) => f.name));
|
|
778
807
|
}
|
|
779
808
|
else {
|
|
780
809
|
sourceLayerFields = sourceLayerFields.concat(Object.keys(layerInfo.fields));
|
|
@@ -799,11 +828,11 @@ function _updateItemFields(item, fieldNames) {
|
|
|
799
828
|
if (fieldNames.length > 0) {
|
|
800
829
|
/* istanbul ignore else */
|
|
801
830
|
if (item.fields) {
|
|
802
|
-
item.fields = item.fields.filter(
|
|
831
|
+
item.fields = item.fields.filter((f) => fieldNames.indexOf(f.name) > -1);
|
|
803
832
|
}
|
|
804
833
|
/* istanbul ignore else */
|
|
805
834
|
if (item.indexes) {
|
|
806
|
-
item.indexes = item.indexes.filter(
|
|
835
|
+
item.indexes = item.indexes.filter((f) => fieldNames.indexOf(f.fields) > -1);
|
|
807
836
|
}
|
|
808
837
|
}
|
|
809
838
|
return item;
|
|
@@ -824,7 +853,7 @@ function _updateSourceLayerFields(table, sourceLayerFields) {
|
|
|
824
853
|
// need to make sure these actually exist in the source..
|
|
825
854
|
/* istanbul ignore else */
|
|
826
855
|
if (sourceLayerFields.length > 0) {
|
|
827
|
-
(0, generalHelpers_1.setProp)(table, "sourceLayerFields", table.sourceLayerFields.filter(
|
|
856
|
+
(0, generalHelpers_1.setProp)(table, "sourceLayerFields", table.sourceLayerFields.filter((f) => sourceLayerFields.indexOf(f.source.toLowerCase()) > -1));
|
|
828
857
|
}
|
|
829
858
|
}
|
|
830
859
|
return table;
|
|
@@ -840,13 +869,13 @@ exports._updateSourceLayerFields = _updateSourceLayerFields;
|
|
|
840
869
|
*/
|
|
841
870
|
function _updateGeomFieldName(adminLayerInfo, templateDictionary) {
|
|
842
871
|
// issue #471
|
|
843
|
-
|
|
844
|
-
|
|
872
|
+
const tableName = (0, generalHelpers_1.getProp)(adminLayerInfo, "viewLayerDefinition.table.name");
|
|
873
|
+
const fieldName = (0, generalHelpers_1.getProp)(adminLayerInfo, "geometryField.name");
|
|
845
874
|
/* istanbul ignore else */
|
|
846
875
|
if (fieldName && tableName) {
|
|
847
|
-
|
|
848
|
-
? tableName
|
|
849
|
-
: tableName
|
|
876
|
+
const geomName = templateDictionary.isPortal
|
|
877
|
+
? `${tableName}.shape`
|
|
878
|
+
: `${tableName}.Shape`;
|
|
850
879
|
(0, generalHelpers_1.setProp)(adminLayerInfo, "geometryField.name", geomName);
|
|
851
880
|
}
|
|
852
881
|
else if (!fieldName && (0, generalHelpers_1.getProp)(adminLayerInfo, "geometryField")) {
|
|
@@ -867,16 +896,15 @@ exports._updateGeomFieldName = _updateGeomFieldName;
|
|
|
867
896
|
* @param templateDictionary Hash mapping Solution source id to id of its clone (and name & URL for feature service)
|
|
868
897
|
* @protected
|
|
869
898
|
*/
|
|
870
|
-
function _updateTemplateDictionaryFields(itemTemplate, templateDictionary, compareItemId) {
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
layersAndTables.forEach(function (layerOrTable) {
|
|
899
|
+
function _updateTemplateDictionaryFields(itemTemplate, templateDictionary, compareItemId = true) {
|
|
900
|
+
const layers = itemTemplate.properties.layers;
|
|
901
|
+
const tables = itemTemplate.properties.tables;
|
|
902
|
+
const layersAndTables = layers.concat(tables);
|
|
903
|
+
const fieldInfos = {};
|
|
904
|
+
layersAndTables.forEach(layerOrTable => {
|
|
877
905
|
fieldInfos[layerOrTable.id] = layerOrTable.fields;
|
|
878
906
|
});
|
|
879
|
-
Object.keys(templateDictionary).some(
|
|
907
|
+
Object.keys(templateDictionary).some(k => {
|
|
880
908
|
if (compareItemId
|
|
881
909
|
? templateDictionary[k].itemId === itemTemplate.itemId
|
|
882
910
|
: k === itemTemplate.itemId) {
|
|
@@ -902,7 +930,7 @@ exports._updateTemplateDictionaryFields = _updateTemplateDictionaryFields;
|
|
|
902
930
|
function setDefaultSpatialReference(templateDictionary, itemId, spatialReference) {
|
|
903
931
|
/* istanbul ignore else */
|
|
904
932
|
if (spatialReference) {
|
|
905
|
-
(0, generalHelpers_1.setCreateProp)(templateDictionary, itemId
|
|
933
|
+
(0, generalHelpers_1.setCreateProp)(templateDictionary, `${itemId}.defaultSpatialReference`, spatialReference);
|
|
906
934
|
}
|
|
907
935
|
}
|
|
908
936
|
exports.setDefaultSpatialReference = setDefaultSpatialReference;
|
|
@@ -919,34 +947,34 @@ exports.setDefaultSpatialReference = setDefaultSpatialReference;
|
|
|
919
947
|
function validateSpatialReferenceAndExtent(serviceInfo, itemTemplate, templateDictionary) {
|
|
920
948
|
/* istanbul ignore else */
|
|
921
949
|
if ((0, generalHelpers_1.getProp)(serviceInfo, "service.isView")) {
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
itemTemplate.dependencies.some(
|
|
925
|
-
|
|
926
|
-
|
|
950
|
+
let sourceSR;
|
|
951
|
+
let sourceExt;
|
|
952
|
+
itemTemplate.dependencies.some(id => {
|
|
953
|
+
const source = templateDictionary[id];
|
|
954
|
+
const sr = (0, generalHelpers_1.getProp)(source, "defaultSpatialReference");
|
|
927
955
|
/* istanbul ignore else */
|
|
928
|
-
if (!
|
|
929
|
-
|
|
956
|
+
if (!sourceSR && sr) {
|
|
957
|
+
sourceSR = sr;
|
|
930
958
|
}
|
|
931
|
-
|
|
959
|
+
const ext = (0, generalHelpers_1.getProp)(source, "defaultExtent");
|
|
932
960
|
/* istanbul ignore else */
|
|
933
|
-
if (!
|
|
934
|
-
|
|
961
|
+
if (!sourceExt && ext) {
|
|
962
|
+
sourceExt = ext;
|
|
935
963
|
}
|
|
936
|
-
return
|
|
964
|
+
return sourceSR && sourceExt;
|
|
937
965
|
});
|
|
938
|
-
|
|
939
|
-
|
|
966
|
+
const sourceWkid = (0, generalHelpers_1.getProp)(sourceSR, "wkid");
|
|
967
|
+
const viewWkid = (0, generalHelpers_1.getProp)(serviceInfo, "service.spatialReference.wkid");
|
|
940
968
|
/* istanbul ignore else */
|
|
941
969
|
if (sourceWkid && viewWkid && sourceWkid !== viewWkid) {
|
|
942
|
-
(0, generalHelpers_1.setCreateProp)(serviceInfo, "service.spatialReference",
|
|
970
|
+
(0, generalHelpers_1.setCreateProp)(serviceInfo, "service.spatialReference", sourceSR);
|
|
943
971
|
}
|
|
944
|
-
|
|
972
|
+
const viewExt = (0, generalHelpers_1.getProp)(serviceInfo, "service.fullExtent");
|
|
945
973
|
/* istanbul ignore else */
|
|
946
|
-
if (
|
|
974
|
+
if (sourceExt &&
|
|
947
975
|
viewExt &&
|
|
948
|
-
JSON.stringify(
|
|
949
|
-
(0, generalHelpers_1.setCreateProp)(serviceInfo, "defaultExtent",
|
|
976
|
+
JSON.stringify(sourceExt) !== JSON.stringify(viewExt)) {
|
|
977
|
+
(0, generalHelpers_1.setCreateProp)(serviceInfo, "defaultExtent", sourceExt);
|
|
950
978
|
}
|
|
951
979
|
}
|
|
952
980
|
}
|
|
@@ -964,17 +992,17 @@ exports.validateSpatialReferenceAndExtent = validateSpatialReferenceAndExtent;
|
|
|
964
992
|
* @protected
|
|
965
993
|
*/
|
|
966
994
|
function updateLayerFieldReferences(itemTemplate, fieldInfos, popupInfos, adminLayerInfos, templateDictionary) {
|
|
967
|
-
return new Promise(
|
|
995
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
968
996
|
// Will need to do some post processing for fields
|
|
969
997
|
// to handle any potential field name changes when deploying to portal
|
|
970
|
-
postProcessFields(itemTemplate, fieldInfos, popupInfos, adminLayerInfos, templateDictionary).then(
|
|
998
|
+
postProcessFields(itemTemplate, fieldInfos, popupInfos, adminLayerInfos, templateDictionary).then((layerInfos) => {
|
|
971
999
|
// Update the items text with detemplatized popupInfo
|
|
972
1000
|
updatePopupInfo(itemTemplate, layerInfos.popupInfos);
|
|
973
1001
|
resolveFn({
|
|
974
|
-
itemTemplate
|
|
975
|
-
layerInfos
|
|
1002
|
+
itemTemplate,
|
|
1003
|
+
layerInfos
|
|
976
1004
|
});
|
|
977
|
-
},
|
|
1005
|
+
}, e => rejectFn((0, generalHelpers_1.fail)(e)));
|
|
978
1006
|
});
|
|
979
1007
|
}
|
|
980
1008
|
exports.updateLayerFieldReferences = updateLayerFieldReferences;
|
|
@@ -992,17 +1020,17 @@ exports.updateLayerFieldReferences = updateLayerFieldReferences;
|
|
|
992
1020
|
* @protected
|
|
993
1021
|
*/
|
|
994
1022
|
function postProcessFields(itemTemplate, layerInfos, popupInfos, adminLayerInfos, templateDictionary) {
|
|
995
|
-
return new Promise(
|
|
1023
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
996
1024
|
if (!itemTemplate.item.url) {
|
|
997
1025
|
rejectFn((0, generalHelpers_1.fail)("Feature layer " + itemTemplate.itemId + " does not have a URL"));
|
|
998
1026
|
}
|
|
999
1027
|
else {
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
settingsKeys.some(
|
|
1004
|
-
if (templateDictionary[k].itemId ===
|
|
1005
|
-
|
|
1028
|
+
const id = itemTemplate.itemId;
|
|
1029
|
+
const settingsKeys = Object.keys(templateDictionary);
|
|
1030
|
+
let templateInfo;
|
|
1031
|
+
settingsKeys.some(k => {
|
|
1032
|
+
if (templateDictionary[k].itemId === id) {
|
|
1033
|
+
templateInfo = templateDictionary[k];
|
|
1006
1034
|
return true;
|
|
1007
1035
|
}
|
|
1008
1036
|
else {
|
|
@@ -1010,19 +1038,19 @@ function postProcessFields(itemTemplate, layerInfos, popupInfos, adminLayerInfos
|
|
|
1010
1038
|
}
|
|
1011
1039
|
});
|
|
1012
1040
|
// concat any layers and tables to process
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1041
|
+
const layers = itemTemplate.properties.layers;
|
|
1042
|
+
const tables = itemTemplate.properties.tables;
|
|
1043
|
+
const layersAndTables = layers.concat(tables);
|
|
1016
1044
|
// Set the newFields property for the layerInfos...this will contain all fields
|
|
1017
1045
|
// as they are after being added to the definition.
|
|
1018
1046
|
// This allows us to handle any potential field name changes after deploy to portal
|
|
1019
|
-
layersAndTables.forEach(
|
|
1047
|
+
layersAndTables.forEach((item) => {
|
|
1020
1048
|
// when deploying to portal "isView" is only set for create service and will fail when
|
|
1021
1049
|
// present on addToDef so this property is removed from item and we should check the templates service info
|
|
1022
|
-
|
|
1050
|
+
const isView = item.isView || itemTemplate.properties.service.isView;
|
|
1023
1051
|
/* istanbul ignore else */
|
|
1024
1052
|
if (layerInfos && layerInfos.hasOwnProperty(item.id)) {
|
|
1025
|
-
|
|
1053
|
+
const layerInfo = layerInfos[item.id];
|
|
1026
1054
|
layerInfo["isView"] = item.isView;
|
|
1027
1055
|
layerInfo["newFields"] = item.fields;
|
|
1028
1056
|
layerInfo["sourceSchemaChangesAllowed"] =
|
|
@@ -1036,10 +1064,10 @@ function postProcessFields(itemTemplate, layerInfos, popupInfos, adminLayerInfos
|
|
|
1036
1064
|
// visible true when added with the layer definition
|
|
1037
1065
|
// update the field visibility to match that of the source
|
|
1038
1066
|
/* istanbul ignore else */
|
|
1039
|
-
if (isView &&
|
|
1067
|
+
if (isView && templateInfo && templateDictionary.isPortal) {
|
|
1040
1068
|
// when the item is a view bring over the source service fields so we can compare the domains
|
|
1041
|
-
layerInfo["sourceServiceFields"] =
|
|
1042
|
-
|
|
1069
|
+
layerInfo["sourceServiceFields"] = templateInfo.sourceServiceFields;
|
|
1070
|
+
let fieldUpdates = _getFieldVisibilityUpdates(layerInfo);
|
|
1043
1071
|
// view field domains can contain different values than the source field domains
|
|
1044
1072
|
// use the cached view domain when it differs from the source view domain
|
|
1045
1073
|
fieldUpdates = _validateDomains(layerInfo, fieldUpdates);
|
|
@@ -1048,16 +1076,16 @@ function postProcessFields(itemTemplate, layerInfos, popupInfos, adminLayerInfos
|
|
|
1048
1076
|
layerInfo.fields = fieldUpdates;
|
|
1049
1077
|
}
|
|
1050
1078
|
layerInfo.typeIdField = _getTypeIdField(item);
|
|
1051
|
-
|
|
1079
|
+
const fieldNames = layerInfo.newFields.map((f) => f.name);
|
|
1052
1080
|
_validateTemplatesFields(layerInfo, fieldNames);
|
|
1053
1081
|
_validateTypesTemplates(layerInfo, fieldNames);
|
|
1054
1082
|
}
|
|
1055
1083
|
}
|
|
1056
1084
|
});
|
|
1057
1085
|
// Add the layerInfos to the settings object to be used while detemplatizing
|
|
1058
|
-
settingsKeys.forEach(
|
|
1059
|
-
if (
|
|
1060
|
-
templateDictionary[k] = Object.assign(templateDictionary[k], getLayerSettings(layerInfos, templateDictionary[k].url,
|
|
1086
|
+
settingsKeys.forEach((k) => {
|
|
1087
|
+
if (id === templateDictionary[k].itemId) {
|
|
1088
|
+
templateDictionary[k] = Object.assign(templateDictionary[k], getLayerSettings(layerInfos, templateDictionary[k].url, id));
|
|
1061
1089
|
}
|
|
1062
1090
|
});
|
|
1063
1091
|
// update the layerInfos object with current field names
|
|
@@ -1075,7 +1103,7 @@ exports.postProcessFields = postProcessFields;
|
|
|
1075
1103
|
* @protected
|
|
1076
1104
|
*/
|
|
1077
1105
|
function _getTypeIdField(item) {
|
|
1078
|
-
|
|
1106
|
+
const typeIdFields = item.fields.filter((f) => {
|
|
1079
1107
|
return (f.name &&
|
|
1080
1108
|
item.typeIdField &&
|
|
1081
1109
|
f.name.toLowerCase() === item.typeIdField.toLowerCase());
|
|
@@ -1095,19 +1123,19 @@ exports._getTypeIdField = _getTypeIdField;
|
|
|
1095
1123
|
* @protected
|
|
1096
1124
|
*/
|
|
1097
1125
|
function _getFieldVisibilityUpdates(fieldInfo) {
|
|
1098
|
-
|
|
1126
|
+
const visibilityUpdates = [];
|
|
1099
1127
|
if (fieldInfo && fieldInfo["sourceFields"] && fieldInfo["newFields"]) {
|
|
1100
|
-
|
|
1128
|
+
const sourceFields = fieldInfo["sourceFields"].reduce((hash, f) => {
|
|
1101
1129
|
hash[String(f.name).toLocaleLowerCase()] = f.visible;
|
|
1102
1130
|
return hash;
|
|
1103
1131
|
}, {});
|
|
1104
|
-
fieldInfo["newFields"].forEach(
|
|
1105
|
-
|
|
1132
|
+
fieldInfo["newFields"].forEach((f) => {
|
|
1133
|
+
const name = String(f.name).toLocaleLowerCase();
|
|
1106
1134
|
// only add fields that are not visible
|
|
1107
|
-
if (
|
|
1135
|
+
if (sourceFields.hasOwnProperty(name) && !sourceFields[name]) {
|
|
1108
1136
|
visibilityUpdates.push({
|
|
1109
1137
|
name: f.name,
|
|
1110
|
-
visible:
|
|
1138
|
+
visible: sourceFields[name]
|
|
1111
1139
|
});
|
|
1112
1140
|
}
|
|
1113
1141
|
});
|
|
@@ -1125,14 +1153,14 @@ exports._getFieldVisibilityUpdates = _getFieldVisibilityUpdates;
|
|
|
1125
1153
|
* @protected
|
|
1126
1154
|
*/
|
|
1127
1155
|
function _validateDomains(fieldInfo, fieldUpdates) {
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1156
|
+
const domainAliasInfos = _getDomainAndAliasInfos(fieldInfo);
|
|
1157
|
+
const domainFields = domainAliasInfos.domainFields;
|
|
1158
|
+
const domainNames = domainAliasInfos.domainNames;
|
|
1159
|
+
const aliasFields = domainAliasInfos.aliasFields;
|
|
1160
|
+
const aliasNames = domainAliasInfos.aliasNames;
|
|
1133
1161
|
// loop through the fields from the new view service
|
|
1134
1162
|
// add an update when the domains don't match
|
|
1135
|
-
fieldInfo.newFields.forEach(
|
|
1163
|
+
fieldInfo.newFields.forEach((field) => {
|
|
1136
1164
|
_getPortalViewFieldUpdates(field, domainNames, domainFields, "domain", fieldUpdates);
|
|
1137
1165
|
_getPortalViewFieldUpdates(field, aliasNames, aliasFields, "alias", fieldUpdates);
|
|
1138
1166
|
});
|
|
@@ -1152,19 +1180,19 @@ exports._validateDomains = _validateDomains;
|
|
|
1152
1180
|
*/
|
|
1153
1181
|
function _getPortalViewFieldUpdates(field, names, fields, key, fieldUpdates) {
|
|
1154
1182
|
if (field.hasOwnProperty(key) && field[key]) {
|
|
1155
|
-
|
|
1183
|
+
const i = names.indexOf(String(field.name).toLocaleLowerCase());
|
|
1156
1184
|
if (JSON.stringify(field[key]) !== (i > -1 ? JSON.stringify(fields[i]) : "")) {
|
|
1157
1185
|
// should mixin the update if the field already has some other update
|
|
1158
|
-
|
|
1159
|
-
fieldUpdates.some(
|
|
1186
|
+
let hasUpdate = false;
|
|
1187
|
+
fieldUpdates.some((update) => {
|
|
1160
1188
|
if (update.name === field.name) {
|
|
1161
|
-
|
|
1189
|
+
hasUpdate = true;
|
|
1162
1190
|
update[key] = field[key];
|
|
1163
1191
|
}
|
|
1164
|
-
return
|
|
1192
|
+
return hasUpdate;
|
|
1165
1193
|
});
|
|
1166
|
-
if (!
|
|
1167
|
-
|
|
1194
|
+
if (!hasUpdate) {
|
|
1195
|
+
const update = { name: field.name };
|
|
1168
1196
|
update[key] = field[key];
|
|
1169
1197
|
fieldUpdates.push(update);
|
|
1170
1198
|
}
|
|
@@ -1182,14 +1210,14 @@ exports._getPortalViewFieldUpdates = _getPortalViewFieldUpdates;
|
|
|
1182
1210
|
* @protected
|
|
1183
1211
|
*/
|
|
1184
1212
|
function _validateViewDomainsAndAlias(fieldInfo, item) {
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1213
|
+
const domainAliasInfos = _getDomainAndAliasInfos(fieldInfo);
|
|
1214
|
+
const domainFields = domainAliasInfos.domainFields;
|
|
1215
|
+
const domainNames = domainAliasInfos.domainNames;
|
|
1216
|
+
const aliasFields = domainAliasInfos.aliasFields;
|
|
1217
|
+
const aliasNames = domainAliasInfos.aliasNames;
|
|
1190
1218
|
// loop through the fields from the item
|
|
1191
1219
|
// add isViewOverride when the domains or alias don't match
|
|
1192
|
-
item.fields.map(
|
|
1220
|
+
item.fields.map((field) => {
|
|
1193
1221
|
_isViewFieldOverride(field, domainNames, domainFields, "domain");
|
|
1194
1222
|
_isViewFieldOverride(field, aliasNames, aliasFields, "alias");
|
|
1195
1223
|
return field;
|
|
@@ -1203,17 +1231,17 @@ exports._validateViewDomainsAndAlias = _validateViewDomainsAndAlias;
|
|
|
1203
1231
|
*
|
|
1204
1232
|
*/
|
|
1205
1233
|
function _getDomainAndAliasInfos(fieldInfo) {
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1234
|
+
const domainFields = [];
|
|
1235
|
+
const domainNames = [];
|
|
1236
|
+
const aliasFields = [];
|
|
1237
|
+
const aliasNames = [];
|
|
1210
1238
|
/* istanbul ignore else */
|
|
1211
1239
|
if (fieldInfo.sourceServiceFields) {
|
|
1212
|
-
Object.keys(fieldInfo.sourceServiceFields).forEach(
|
|
1240
|
+
Object.keys(fieldInfo.sourceServiceFields).forEach(k => {
|
|
1213
1241
|
/* istanbul ignore else */
|
|
1214
1242
|
if (fieldInfo.sourceServiceFields[k]) {
|
|
1215
|
-
Object.keys(fieldInfo.sourceServiceFields[k]).forEach(
|
|
1216
|
-
fieldInfo.sourceServiceFields[k][_k].forEach(
|
|
1243
|
+
Object.keys(fieldInfo.sourceServiceFields[k]).forEach(_k => {
|
|
1244
|
+
fieldInfo.sourceServiceFields[k][_k].forEach((field) => {
|
|
1217
1245
|
/* istanbul ignore else */
|
|
1218
1246
|
if (field.hasOwnProperty("domain") && field.domain) {
|
|
1219
1247
|
domainFields.push(field.domain);
|
|
@@ -1230,10 +1258,10 @@ function _getDomainAndAliasInfos(fieldInfo) {
|
|
|
1230
1258
|
});
|
|
1231
1259
|
}
|
|
1232
1260
|
return {
|
|
1233
|
-
aliasFields
|
|
1234
|
-
aliasNames
|
|
1235
|
-
domainFields
|
|
1236
|
-
domainNames
|
|
1261
|
+
aliasFields,
|
|
1262
|
+
aliasNames,
|
|
1263
|
+
domainFields,
|
|
1264
|
+
domainNames
|
|
1237
1265
|
};
|
|
1238
1266
|
}
|
|
1239
1267
|
exports._getDomainAndAliasInfos = _getDomainAndAliasInfos;
|
|
@@ -1249,7 +1277,7 @@ exports._getDomainAndAliasInfos = _getDomainAndAliasInfos;
|
|
|
1249
1277
|
function _isViewFieldOverride(field, names, fields, key) {
|
|
1250
1278
|
/* istanbul ignore else */
|
|
1251
1279
|
if (field.hasOwnProperty(key) && field[key]) {
|
|
1252
|
-
|
|
1280
|
+
const i = names.indexOf(String(field.name).toLocaleLowerCase());
|
|
1253
1281
|
/* istanbul ignore else */
|
|
1254
1282
|
if (JSON.stringify(field[key]) !== (i > -1 ? JSON.stringify(fields[i]) : "")) {
|
|
1255
1283
|
field.isViewOverride = true;
|
|
@@ -1265,11 +1293,11 @@ exports._isViewFieldOverride = _isViewFieldOverride;
|
|
|
1265
1293
|
* @protected
|
|
1266
1294
|
*/
|
|
1267
1295
|
function updatePopupInfo(itemTemplate, popupInfos) {
|
|
1268
|
-
["layers", "tables"].forEach(
|
|
1269
|
-
|
|
1296
|
+
["layers", "tables"].forEach(type => {
|
|
1297
|
+
const _items = (0, generalHelpers_1.getProp)(itemTemplate, "data." + type);
|
|
1270
1298
|
/* istanbul ignore else */
|
|
1271
1299
|
if (_items && Array.isArray(_items)) {
|
|
1272
|
-
_items.forEach(
|
|
1300
|
+
_items.forEach((item) => {
|
|
1273
1301
|
item.popupInfo = (0, generalHelpers_1.getProp)(popupInfos, type + "." + item.id) || {};
|
|
1274
1302
|
});
|
|
1275
1303
|
}
|
|
@@ -1325,11 +1353,11 @@ function _templatizeLayer(dataItem, adminItem, itemTemplate, dependencies, templ
|
|
|
1325
1353
|
if (templatizeFieldReferences) {
|
|
1326
1354
|
_templatizeLayerFieldReferences(dataItem, itemTemplate.itemId, adminItem, dependencies);
|
|
1327
1355
|
}
|
|
1328
|
-
|
|
1356
|
+
const updates = [adminItem];
|
|
1329
1357
|
if (dataItem) {
|
|
1330
1358
|
updates.push(dataItem);
|
|
1331
1359
|
}
|
|
1332
|
-
updates.forEach(
|
|
1360
|
+
updates.forEach(update => {
|
|
1333
1361
|
if (update.hasOwnProperty("name")) {
|
|
1334
1362
|
// templatize the name but leave the current name as the optional default
|
|
1335
1363
|
update.name = (0, templatization_1.templatizeTerm)(update["serviceItemId"] + ".layer" + update.id, update["serviceItemId"] + ".layer" + update.id, ".name||" + update.name);
|
|
@@ -1353,7 +1381,7 @@ exports._templatizeLayer = _templatizeLayer;
|
|
|
1353
1381
|
* @param adminItem layer or table from the service
|
|
1354
1382
|
*/
|
|
1355
1383
|
function _validateFields(adminItem) {
|
|
1356
|
-
|
|
1384
|
+
const fieldNames = (adminItem.fields || []).map((f) => f.name);
|
|
1357
1385
|
// Update primary display field if field isn't in the layer.
|
|
1358
1386
|
_validateDisplayField(adminItem, fieldNames);
|
|
1359
1387
|
// Remove indexes on fields that don't exist in the layer.
|
|
@@ -1374,9 +1402,9 @@ exports._validateFields = _validateFields;
|
|
|
1374
1402
|
* @param fieldNames string list of fields names
|
|
1375
1403
|
*/
|
|
1376
1404
|
function _validateDisplayField(adminItem, fieldNames) {
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
if (fieldNames.some(
|
|
1405
|
+
const displayField = adminItem.displayField || "";
|
|
1406
|
+
let i = -1;
|
|
1407
|
+
if (fieldNames.some(name => {
|
|
1380
1408
|
i += 1;
|
|
1381
1409
|
return name === displayField || name === displayField.toLowerCase();
|
|
1382
1410
|
})) {
|
|
@@ -1384,19 +1412,19 @@ function _validateDisplayField(adminItem, fieldNames) {
|
|
|
1384
1412
|
}
|
|
1385
1413
|
else {
|
|
1386
1414
|
// use the first non-OID non-globalId field we find
|
|
1387
|
-
|
|
1388
|
-
|
|
1415
|
+
const skipFields = [];
|
|
1416
|
+
const oidField = (0, generalHelpers_1.getProp)(adminItem, "uniqueIdField.name");
|
|
1389
1417
|
/* istanbul ignore else */
|
|
1390
1418
|
if (oidField) {
|
|
1391
|
-
|
|
1419
|
+
skipFields.push(oidField);
|
|
1392
1420
|
}
|
|
1393
|
-
|
|
1421
|
+
const globalIdField = (0, generalHelpers_1.getProp)(adminItem, "globalIdField");
|
|
1394
1422
|
/* istanbul ignore else */
|
|
1395
1423
|
if (globalIdField) {
|
|
1396
|
-
|
|
1424
|
+
skipFields.push(globalIdField);
|
|
1397
1425
|
}
|
|
1398
|
-
fieldNames.some(
|
|
1399
|
-
if (
|
|
1426
|
+
fieldNames.some(name => {
|
|
1427
|
+
if (skipFields.indexOf(name) === -1) {
|
|
1400
1428
|
adminItem.displayField = name;
|
|
1401
1429
|
return true;
|
|
1402
1430
|
}
|
|
@@ -1415,17 +1443,17 @@ exports._validateDisplayField = _validateDisplayField;
|
|
|
1415
1443
|
* @param fieldNames string list of fields names
|
|
1416
1444
|
*/
|
|
1417
1445
|
function _validateIndexes(adminItem, fieldNames) {
|
|
1418
|
-
|
|
1446
|
+
const indexes = adminItem.indexes;
|
|
1419
1447
|
/* istanbul ignore else */
|
|
1420
1448
|
if (indexes) {
|
|
1421
|
-
|
|
1422
|
-
adminItem.indexes = indexes.reduce(
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
indexFields.forEach(
|
|
1449
|
+
const indexedFields = [];
|
|
1450
|
+
adminItem.indexes = indexes.reduce((filtered, index) => {
|
|
1451
|
+
const indexFields = index.fields.split(",");
|
|
1452
|
+
const verifiedFields = [];
|
|
1453
|
+
indexFields.forEach(indexField => {
|
|
1426
1454
|
/* istanbul ignore else */
|
|
1427
|
-
if (
|
|
1428
|
-
|
|
1455
|
+
if (indexedFields.indexOf(indexField) === -1) {
|
|
1456
|
+
indexedFields.push(indexField);
|
|
1429
1457
|
// this is the first index with this field and it should be added if the field exists
|
|
1430
1458
|
/* istanbul ignore else */
|
|
1431
1459
|
if (fieldNames.indexOf(indexField) > -1) {
|
|
@@ -1451,14 +1479,14 @@ exports._validateIndexes = _validateIndexes;
|
|
|
1451
1479
|
* @param fieldNames string list of fields names
|
|
1452
1480
|
*/
|
|
1453
1481
|
function _validateTemplatesFields(adminItem, fieldNames) {
|
|
1454
|
-
|
|
1482
|
+
const templates = adminItem.templates;
|
|
1455
1483
|
/* istanbul ignore else */
|
|
1456
1484
|
if (templates) {
|
|
1457
|
-
adminItem.templates = templates.map(
|
|
1458
|
-
|
|
1485
|
+
adminItem.templates = templates.map(template => {
|
|
1486
|
+
const attributes = (0, generalHelpers_1.getProp)(template, "prototype.attributes");
|
|
1459
1487
|
/* istanbul ignore else */
|
|
1460
1488
|
if (attributes) {
|
|
1461
|
-
Object.keys(attributes).forEach(
|
|
1489
|
+
Object.keys(attributes).forEach(k => {
|
|
1462
1490
|
/* istanbul ignore else */
|
|
1463
1491
|
if (fieldNames.indexOf(k) === -1) {
|
|
1464
1492
|
delete attributes[k];
|
|
@@ -1478,10 +1506,10 @@ exports._validateTemplatesFields = _validateTemplatesFields;
|
|
|
1478
1506
|
* @param fieldNames string list of fields names
|
|
1479
1507
|
*/
|
|
1480
1508
|
function _validateTypesTemplates(adminItem, fieldNames) {
|
|
1481
|
-
|
|
1509
|
+
const types = adminItem.types;
|
|
1482
1510
|
/* istanbul ignore else */
|
|
1483
1511
|
if (types) {
|
|
1484
|
-
adminItem.types = types.map(
|
|
1512
|
+
adminItem.types = types.map(t => {
|
|
1485
1513
|
_validateTemplatesFields(t, fieldNames);
|
|
1486
1514
|
return t;
|
|
1487
1515
|
});
|
|
@@ -1495,15 +1523,15 @@ exports._validateTypesTemplates = _validateTypesTemplates;
|
|
|
1495
1523
|
* @param fieldNames string list of fields names
|
|
1496
1524
|
*/
|
|
1497
1525
|
function _validateEditFieldsInfo(adminItem, fieldNames) {
|
|
1498
|
-
|
|
1526
|
+
const editFieldsInfo = adminItem.editFieldsInfo;
|
|
1499
1527
|
/* istanbul ignore else */
|
|
1500
1528
|
if (editFieldsInfo) {
|
|
1501
|
-
|
|
1502
|
-
editFieldsInfoKeys.forEach(
|
|
1503
|
-
|
|
1529
|
+
const editFieldsInfoKeys = Object.keys(editFieldsInfo);
|
|
1530
|
+
editFieldsInfoKeys.forEach(k => {
|
|
1531
|
+
const editFieldName = editFieldsInfo[k];
|
|
1504
1532
|
/* istanbul ignore else */
|
|
1505
1533
|
if (editFieldName) {
|
|
1506
|
-
fieldNames.some(
|
|
1534
|
+
fieldNames.some(name => {
|
|
1507
1535
|
if (name === editFieldName) {
|
|
1508
1536
|
return true;
|
|
1509
1537
|
}
|
|
@@ -1534,9 +1562,9 @@ exports._validateEditFieldsInfo = _validateEditFieldsInfo;
|
|
|
1534
1562
|
*/
|
|
1535
1563
|
function _templatizeLayerFieldReferences(dataItem, itemID, layer, dependencies) {
|
|
1536
1564
|
// This is the value that will be used as the template for adlib replacement
|
|
1537
|
-
|
|
1565
|
+
const path = itemID + ".layer" + layer.id + ".fields";
|
|
1538
1566
|
// Get the field names for various tests
|
|
1539
|
-
|
|
1567
|
+
const fieldNames = layer.fields.map((f) => f.name);
|
|
1540
1568
|
// Update the layer from the items data property
|
|
1541
1569
|
if (dataItem) {
|
|
1542
1570
|
_templatizeAdminLayerInfoFields(dataItem, dependencies);
|
|
@@ -1565,14 +1593,14 @@ exports._templatizeLayerFieldReferences = _templatizeLayerFieldReferences;
|
|
|
1565
1593
|
*/
|
|
1566
1594
|
function _templatizeAdminLayerInfo(layer, dependencies, templateDictionary) {
|
|
1567
1595
|
// Create new instance of adminLayerInfo to update for clone
|
|
1568
|
-
|
|
1596
|
+
const adminLayerInfo = Object.assign({}, layer.adminLayerInfo);
|
|
1569
1597
|
_updateGeomFieldName(adminLayerInfo, templateDictionary);
|
|
1570
1598
|
(0, generalHelpers_1.deleteProp)(adminLayerInfo, "xssTrustedFields");
|
|
1571
1599
|
(0, generalHelpers_1.deleteProp)(adminLayerInfo, "tableName");
|
|
1572
1600
|
// Remove unnecessary properties and templatize key properties from viewLayerDefinition
|
|
1573
1601
|
/* istanbul ignore else */
|
|
1574
1602
|
if (adminLayerInfo.viewLayerDefinition) {
|
|
1575
|
-
|
|
1603
|
+
const viewDef = Object.assign({}, adminLayerInfo.viewLayerDefinition);
|
|
1576
1604
|
_processAdminObject(viewDef, dependencies);
|
|
1577
1605
|
// Remove unnecessary properties and templatize key properties from viewLayerDefinition.table
|
|
1578
1606
|
/* istanbul ignore else */
|
|
@@ -1580,7 +1608,7 @@ function _templatizeAdminLayerInfo(layer, dependencies, templateDictionary) {
|
|
|
1580
1608
|
_processAdminObject(viewDef.table, dependencies);
|
|
1581
1609
|
/* istanbul ignore else */
|
|
1582
1610
|
if (viewDef.table.relatedTables) {
|
|
1583
|
-
viewDef.table.relatedTables.forEach(
|
|
1611
|
+
viewDef.table.relatedTables.forEach((table) => {
|
|
1584
1612
|
_processAdminObject(table, dependencies);
|
|
1585
1613
|
});
|
|
1586
1614
|
}
|
|
@@ -1613,7 +1641,7 @@ exports._processAdminObject = _processAdminObject;
|
|
|
1613
1641
|
* @protected
|
|
1614
1642
|
*/
|
|
1615
1643
|
function _templatizeSourceServiceName(lookupName, dependencies) {
|
|
1616
|
-
|
|
1644
|
+
const deps = dependencies.filter(dependency => dependency.name === lookupName);
|
|
1617
1645
|
return deps.length === 1 ? _templatize(deps[0].id, "name") : undefined;
|
|
1618
1646
|
}
|
|
1619
1647
|
exports._templatizeSourceServiceName = _templatizeSourceServiceName;
|
|
@@ -1626,25 +1654,25 @@ exports._templatizeSourceServiceName = _templatizeSourceServiceName;
|
|
|
1626
1654
|
*/
|
|
1627
1655
|
function _templatizeAdminLayerInfoFields(layer, dependencies) {
|
|
1628
1656
|
// templatize the source layer fields
|
|
1629
|
-
|
|
1657
|
+
const table = (0, generalHelpers_1.getProp)(layer, "adminLayerInfo.viewLayerDefinition.table");
|
|
1630
1658
|
if (table) {
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
_templatizeAdminSourceLayerFields(table.sourceLayerFields || [],
|
|
1659
|
+
let id = _getDependantItemId(table.sourceServiceName, dependencies);
|
|
1660
|
+
const path = id + ".layer" + table.sourceLayerId + ".fields";
|
|
1661
|
+
_templatizeAdminSourceLayerFields(table.sourceLayerFields || [], path);
|
|
1634
1662
|
// templatize the releated table fields
|
|
1635
|
-
|
|
1663
|
+
const relatedTables = (0, generalHelpers_1.getProp)(layer, "adminLayerInfo.viewLayerDefinition.table.relatedTables") || [];
|
|
1636
1664
|
if (relatedTables.length > 0) {
|
|
1637
|
-
relatedTables.forEach(
|
|
1638
|
-
|
|
1639
|
-
|
|
1665
|
+
relatedTables.forEach((t) => {
|
|
1666
|
+
id = _getDependantItemId(t.sourceServiceName, dependencies);
|
|
1667
|
+
const relatedPath = id + ".layer" + t.sourceLayerId + ".fields";
|
|
1640
1668
|
_templatizeTopFilter(t.topFilter || {}, relatedPath);
|
|
1641
1669
|
_templatizeAdminSourceLayerFields(t.sourceLayerFields || [], relatedPath);
|
|
1642
|
-
|
|
1643
|
-
t.parentKeyFields = parentKeyFields.map(
|
|
1644
|
-
return _templatize(
|
|
1670
|
+
const parentKeyFields = t.parentKeyFields || [];
|
|
1671
|
+
t.parentKeyFields = parentKeyFields.map((f) => {
|
|
1672
|
+
return _templatize(path, f, "name");
|
|
1645
1673
|
});
|
|
1646
|
-
|
|
1647
|
-
t.keyFields = keyFields.map(
|
|
1674
|
+
const keyFields = t.keyFields || [];
|
|
1675
|
+
t.keyFields = keyFields.map((f) => {
|
|
1648
1676
|
return _templatize(relatedPath, f, "name");
|
|
1649
1677
|
});
|
|
1650
1678
|
});
|
|
@@ -1659,7 +1687,7 @@ exports._templatizeAdminLayerInfoFields = _templatizeAdminLayerInfoFields;
|
|
|
1659
1687
|
* @param dependencies array of item dependencies
|
|
1660
1688
|
*/
|
|
1661
1689
|
function _getDependantItemId(lookupName, dependencies) {
|
|
1662
|
-
|
|
1690
|
+
const deps = dependencies.filter(dependency => dependency.name === lookupName);
|
|
1663
1691
|
return deps.length === 1 ? deps[0].id : "";
|
|
1664
1692
|
}
|
|
1665
1693
|
exports._getDependantItemId = _getDependantItemId;
|
|
@@ -1670,7 +1698,7 @@ exports._getDependantItemId = _getDependantItemId;
|
|
|
1670
1698
|
* @param basePath path used to de-templatize while deploying
|
|
1671
1699
|
*/
|
|
1672
1700
|
function _templatizeAdminSourceLayerFields(fields, basePath) {
|
|
1673
|
-
fields.forEach(
|
|
1701
|
+
fields.forEach(f => _templatizeProperty(f, "source", basePath, "name"));
|
|
1674
1702
|
}
|
|
1675
1703
|
exports._templatizeAdminSourceLayerFields = _templatizeAdminSourceLayerFields;
|
|
1676
1704
|
/**
|
|
@@ -1683,19 +1711,19 @@ function _templatizeTopFilter(topFilter, basePath) {
|
|
|
1683
1711
|
/* istanbul ignore else */
|
|
1684
1712
|
if (topFilter) {
|
|
1685
1713
|
// templatize the orderByFields prop
|
|
1686
|
-
|
|
1714
|
+
const orderByFields = topFilter["orderByFields"] || "";
|
|
1687
1715
|
/* istanbul ignore else */
|
|
1688
1716
|
if (orderByFields !== "") {
|
|
1689
|
-
|
|
1717
|
+
const orderByField = orderByFields.split(" ")[0];
|
|
1690
1718
|
topFilter.orderByFields = topFilter.orderByFields.replace(orderByField, _templatize(basePath, orderByField, "name"));
|
|
1691
1719
|
}
|
|
1692
|
-
|
|
1720
|
+
const groupByFields = topFilter["groupByFields"] || "";
|
|
1693
1721
|
/* istanbul ignore else */
|
|
1694
1722
|
if (groupByFields !== "") {
|
|
1695
|
-
|
|
1723
|
+
const _groupByFields = groupByFields.split(",");
|
|
1696
1724
|
/* istanbul ignore else */
|
|
1697
1725
|
if (_groupByFields.length > 0) {
|
|
1698
|
-
|
|
1726
|
+
const mappedFields = _groupByFields.map((f) => {
|
|
1699
1727
|
return _templatize(basePath, f, "name");
|
|
1700
1728
|
});
|
|
1701
1729
|
topFilter.groupByFields = mappedFields.join(",");
|
|
@@ -1712,11 +1740,11 @@ exports._templatizeTopFilter = _templatizeTopFilter;
|
|
|
1712
1740
|
*/
|
|
1713
1741
|
function _templatizeRelationshipFields(layer, itemID) {
|
|
1714
1742
|
if (layer && layer.relationships) {
|
|
1715
|
-
|
|
1716
|
-
relationships.forEach(
|
|
1743
|
+
const relationships = layer.relationships;
|
|
1744
|
+
relationships.forEach(r => {
|
|
1717
1745
|
/* istanbul ignore else */
|
|
1718
1746
|
if (r.keyField) {
|
|
1719
|
-
|
|
1747
|
+
const basePath = itemID + ".layer" + layer.id + ".fields";
|
|
1720
1748
|
_templatizeProperty(r, "keyField", basePath, "name");
|
|
1721
1749
|
}
|
|
1722
1750
|
});
|
|
@@ -1736,16 +1764,16 @@ function _templatizePopupInfo(layerDefinition, layer, basePath, itemID, fieldNam
|
|
|
1736
1764
|
// the data layer does not have the fields...will need to get those
|
|
1737
1765
|
// from the associated layer json
|
|
1738
1766
|
if (fieldNames && layerDefinition.popupInfo) {
|
|
1739
|
-
|
|
1767
|
+
const popupInfo = layerDefinition.popupInfo;
|
|
1740
1768
|
_templatizeName(popupInfo, "title", fieldNames, basePath);
|
|
1741
1769
|
_templatizeName(popupInfo, "description", fieldNames, basePath);
|
|
1742
|
-
|
|
1770
|
+
const fieldInfos = popupInfo.fieldInfos || [];
|
|
1743
1771
|
_templatizePopupInfoFieldInfos(fieldInfos, layer, itemID, basePath);
|
|
1744
|
-
|
|
1772
|
+
const expressionInfos = popupInfo.expressionInfos || [];
|
|
1745
1773
|
_templatizeExpressionInfos(expressionInfos, fieldNames, basePath);
|
|
1746
|
-
|
|
1774
|
+
const popupElements = popupInfo.popupElements || [];
|
|
1747
1775
|
_templatizePopupElements(popupElements, basePath, layer, itemID, fieldNames);
|
|
1748
|
-
|
|
1776
|
+
const mediaInfos = popupInfo.mediaInfos || [];
|
|
1749
1777
|
_templatizeMediaInfos(mediaInfos, fieldNames, basePath, layer, itemID);
|
|
1750
1778
|
}
|
|
1751
1779
|
}
|
|
@@ -1761,10 +1789,10 @@ exports._templatizePopupInfo = _templatizePopupInfo;
|
|
|
1761
1789
|
*/
|
|
1762
1790
|
function _templatizeName(object, property, fieldNames, basePath) {
|
|
1763
1791
|
if (object.hasOwnProperty(property)) {
|
|
1764
|
-
fieldNames.forEach(
|
|
1792
|
+
fieldNames.forEach(name => {
|
|
1765
1793
|
// Only test and replace instance of the name so any enclosing characters
|
|
1766
1794
|
// will be retained
|
|
1767
|
-
|
|
1795
|
+
const regEx = new RegExp("(\\b" + name + "\\b(?![}]{2}))", "gm");
|
|
1768
1796
|
if (regEx.test(object[property])) {
|
|
1769
1797
|
object[property] = object[property].replace(regEx, _templatize(basePath, name, "name"));
|
|
1770
1798
|
}
|
|
@@ -1782,7 +1810,7 @@ exports._templatizeName = _templatizeName;
|
|
|
1782
1810
|
* @param basePath path used to de-templatize while deploying
|
|
1783
1811
|
*/
|
|
1784
1812
|
function _templatizePopupInfoFieldInfos(fieldInfos, layer, itemID, basePath) {
|
|
1785
|
-
fieldInfos.forEach(
|
|
1813
|
+
fieldInfos.forEach((f) => {
|
|
1786
1814
|
f.fieldName = _templatizeFieldName(f.fieldName, layer, itemID, basePath);
|
|
1787
1815
|
});
|
|
1788
1816
|
}
|
|
@@ -1798,19 +1826,19 @@ exports._templatizePopupInfoFieldInfos = _templatizePopupInfoFieldInfos;
|
|
|
1798
1826
|
*/
|
|
1799
1827
|
function _templatizeFieldName(name, layer, itemID, basePath) {
|
|
1800
1828
|
if (name.indexOf("relationships/") > -1) {
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1829
|
+
const rels = name.split("/");
|
|
1830
|
+
const relationshipId = rels[1];
|
|
1831
|
+
const adminRelatedTables = (0, generalHelpers_1.getProp)(layer, "adminLayerInfo.viewLayerDefinition.table.relatedTables");
|
|
1832
|
+
const relatedTables = layer.relationships || adminRelatedTables;
|
|
1805
1833
|
/* istanbul ignore else */
|
|
1806
1834
|
if (relatedTables && relatedTables.length > parseInt(relationshipId, 10)) {
|
|
1807
|
-
|
|
1835
|
+
const relatedTable = relatedTables[relationshipId];
|
|
1808
1836
|
// the layers relationships stores the property as relatedTableId
|
|
1809
1837
|
// the layers adminLayerInfo relatedTables stores the property as sourceLayerId
|
|
1810
|
-
|
|
1838
|
+
const prop = (0, generalHelpers_1.getProp)(relatedTable, "relatedTableId")
|
|
1811
1839
|
? "relatedTableId"
|
|
1812
1840
|
: "sourceLayerId";
|
|
1813
|
-
|
|
1841
|
+
const _basePath = itemID + ".layer" + relatedTable[prop] + ".fields";
|
|
1814
1842
|
rels[2] = _templatize(_basePath, rels[2], "name");
|
|
1815
1843
|
name = rels.join("/");
|
|
1816
1844
|
}
|
|
@@ -1833,8 +1861,8 @@ exports._templatizeFieldName = _templatizeFieldName;
|
|
|
1833
1861
|
* @param basePath path used to de-templatize while deploying
|
|
1834
1862
|
*/
|
|
1835
1863
|
function _templatizeExpressionInfos(expressionInfos, fieldNames, basePath) {
|
|
1836
|
-
return expressionInfos.map(
|
|
1837
|
-
fieldNames.forEach(
|
|
1864
|
+
return expressionInfos.map((i) => {
|
|
1865
|
+
fieldNames.forEach(name => {
|
|
1838
1866
|
i.expression = _templatizeArcadeExpressions(i.expression, name, basePath);
|
|
1839
1867
|
});
|
|
1840
1868
|
return i;
|
|
@@ -1851,7 +1879,7 @@ exports._templatizeExpressionInfos = _templatizeExpressionInfos;
|
|
|
1851
1879
|
* @param fieldNames array of field names
|
|
1852
1880
|
*/
|
|
1853
1881
|
function _templatizePopupElements(popupElelments, basePath, layer, itemID, fieldNames) {
|
|
1854
|
-
popupElelments.forEach(
|
|
1882
|
+
popupElelments.forEach((pe) => {
|
|
1855
1883
|
if (pe.hasOwnProperty("fieldInfos")) {
|
|
1856
1884
|
_templatizePopupInfoFieldInfos(pe.fieldInfos, layer, itemID, basePath);
|
|
1857
1885
|
}
|
|
@@ -1872,16 +1900,14 @@ exports._templatizePopupElements = _templatizePopupElements;
|
|
|
1872
1900
|
*/
|
|
1873
1901
|
function _templatizeMediaInfos(mediaInfos, fieldNames, basePath, layer, itemId) {
|
|
1874
1902
|
// templatize various properties of mediaInfos
|
|
1875
|
-
|
|
1876
|
-
props.forEach(
|
|
1877
|
-
mediaInfos.forEach(
|
|
1903
|
+
const props = ["title", "caption"];
|
|
1904
|
+
props.forEach(p => _templatizeName(mediaInfos, p, fieldNames, basePath));
|
|
1905
|
+
mediaInfos.forEach((mi) => {
|
|
1878
1906
|
/* istanbul ignore else */
|
|
1879
1907
|
if (mi.hasOwnProperty("value")) {
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
v.fields = vfields.map(
|
|
1883
|
-
return _templatizeFieldName(f, layer, itemId, basePath);
|
|
1884
|
-
});
|
|
1908
|
+
const v = mi.value;
|
|
1909
|
+
const vfields = v.fields || [];
|
|
1910
|
+
v.fields = vfields.map(f => _templatizeFieldName(f, layer, itemId, basePath));
|
|
1885
1911
|
if (v.hasOwnProperty("normalizeField")) {
|
|
1886
1912
|
_templatizeProperty(v, "normalizeField", basePath, "name");
|
|
1887
1913
|
}
|
|
@@ -1902,15 +1928,15 @@ exports._templatizeMediaInfos = _templatizeMediaInfos;
|
|
|
1902
1928
|
*/
|
|
1903
1929
|
function _templatizeDefinitionEditor(layer, basePath, fieldNames) {
|
|
1904
1930
|
if (layer) {
|
|
1905
|
-
|
|
1931
|
+
const defEditor = layer.definitionEditor || {};
|
|
1906
1932
|
/* istanbul ignore else */
|
|
1907
1933
|
if (defEditor) {
|
|
1908
|
-
|
|
1934
|
+
const inputs = defEditor.inputs;
|
|
1909
1935
|
if (inputs) {
|
|
1910
|
-
inputs.forEach(
|
|
1936
|
+
inputs.forEach(i => {
|
|
1911
1937
|
/* istanbul ignore else */
|
|
1912
1938
|
if (i.parameters) {
|
|
1913
|
-
i.parameters.forEach(
|
|
1939
|
+
i.parameters.forEach((p) => {
|
|
1914
1940
|
_templatizeProperty(p, "fieldName", basePath, "name");
|
|
1915
1941
|
});
|
|
1916
1942
|
}
|
|
@@ -1944,9 +1970,9 @@ exports._templatizeDefinitionExpression = _templatizeDefinitionExpression;
|
|
|
1944
1970
|
* @param fieldNames array of the layers field names
|
|
1945
1971
|
*/
|
|
1946
1972
|
function _templatizeSimpleName(expression, basePath, fieldNames, suffix) {
|
|
1947
|
-
fieldNames.forEach(
|
|
1973
|
+
fieldNames.forEach(name => {
|
|
1948
1974
|
// look for the name but not if its followed by }}
|
|
1949
|
-
|
|
1975
|
+
const regEx = new RegExp("\\b" + name + "\\b(?![}]{2})", "gm");
|
|
1950
1976
|
if (expression && regEx.test(expression)) {
|
|
1951
1977
|
expression = expression.replace(regEx, _templatize(basePath, name, suffix));
|
|
1952
1978
|
}
|
|
@@ -1963,13 +1989,13 @@ exports._templatizeSimpleName = _templatizeSimpleName;
|
|
|
1963
1989
|
*/
|
|
1964
1990
|
function _templatizeDrawingInfo(layer, basePath, fieldNames) {
|
|
1965
1991
|
if (layer) {
|
|
1966
|
-
|
|
1992
|
+
const drawingInfo = layer.drawingInfo;
|
|
1967
1993
|
if (drawingInfo) {
|
|
1968
1994
|
// templatize the renderer fields
|
|
1969
|
-
|
|
1995
|
+
const renderer = drawingInfo.renderer || {};
|
|
1970
1996
|
_templatizeRenderer(renderer, basePath, fieldNames);
|
|
1971
1997
|
// templatize the labelingInfo
|
|
1972
|
-
|
|
1998
|
+
const labelingInfo = drawingInfo.labelingInfo || [];
|
|
1973
1999
|
_templatizeLabelingInfo(labelingInfo, basePath, fieldNames);
|
|
1974
2000
|
}
|
|
1975
2001
|
}
|
|
@@ -2010,39 +2036,37 @@ function _templatizeGenRenderer(renderer, basePath, fieldNames) {
|
|
|
2010
2036
|
/* istanbul ignore else */
|
|
2011
2037
|
if (renderer) {
|
|
2012
2038
|
// update authoringInfo
|
|
2013
|
-
|
|
2039
|
+
const authoringInfo = renderer.authoringInfo;
|
|
2014
2040
|
if (authoringInfo) {
|
|
2015
2041
|
_templatizeAuthoringInfo(authoringInfo, basePath, fieldNames);
|
|
2016
2042
|
}
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
fieldNameProps.forEach(
|
|
2021
|
-
return _templatizeProperty(renderer, fnP, basePath, "name");
|
|
2022
|
-
});
|
|
2043
|
+
const props = ["field", "normalizationField"];
|
|
2044
|
+
props.forEach(p => _templatizeProperty(renderer, p, basePath, "name"));
|
|
2045
|
+
const fieldNameProps = ["field1", "field2", "field3"];
|
|
2046
|
+
fieldNameProps.forEach(fnP => _templatizeProperty(renderer, fnP, basePath, "name"));
|
|
2023
2047
|
// When an attribute name is specified, it's enclosed in square brackets
|
|
2024
|
-
|
|
2025
|
-
if (
|
|
2026
|
-
fieldNames.forEach(
|
|
2027
|
-
|
|
2028
|
-
if (regEx.test(
|
|
2029
|
-
renderer.rotationExpression =
|
|
2048
|
+
const rExp = renderer.rotationExpression;
|
|
2049
|
+
if (rExp) {
|
|
2050
|
+
fieldNames.forEach(name => {
|
|
2051
|
+
const regEx = new RegExp("(\\[" + name + "\\])", "gm");
|
|
2052
|
+
if (regEx.test(rExp)) {
|
|
2053
|
+
renderer.rotationExpression = rExp.replace(regEx, "[" + _templatize(basePath, name, "name") + "]");
|
|
2030
2054
|
}
|
|
2031
2055
|
});
|
|
2032
2056
|
}
|
|
2033
2057
|
// update valueExpression
|
|
2034
2058
|
if (renderer.valueExpression) {
|
|
2035
|
-
fieldNames.forEach(
|
|
2059
|
+
fieldNames.forEach(name => {
|
|
2036
2060
|
renderer.valueExpression = _templatizeArcadeExpressions(renderer.valueExpression, name, basePath);
|
|
2037
2061
|
});
|
|
2038
2062
|
}
|
|
2039
2063
|
// update visualVariables
|
|
2040
|
-
|
|
2064
|
+
const visualVariables = renderer.visualVariables;
|
|
2041
2065
|
if (visualVariables) {
|
|
2042
|
-
visualVariables.forEach(
|
|
2043
|
-
|
|
2066
|
+
visualVariables.forEach(v => {
|
|
2067
|
+
props.forEach(p => _templatizeProperty(v, p, basePath, "name"));
|
|
2044
2068
|
if (v.valueExpression) {
|
|
2045
|
-
fieldNames.forEach(
|
|
2069
|
+
fieldNames.forEach(name => {
|
|
2046
2070
|
v.valueExpression = _templatizeArcadeExpressions(v.valueExpression, name, basePath);
|
|
2047
2071
|
});
|
|
2048
2072
|
}
|
|
@@ -2059,12 +2083,12 @@ exports._templatizeGenRenderer = _templatizeGenRenderer;
|
|
|
2059
2083
|
* @param fieldNames array of field names that will be used to search expressions
|
|
2060
2084
|
*/
|
|
2061
2085
|
function _templatizeTemporalRenderer(renderer, basePath, fieldNames) {
|
|
2062
|
-
|
|
2086
|
+
const renderers = [
|
|
2063
2087
|
renderer.latestObservationRenderer,
|
|
2064
2088
|
renderer.observationRenderer,
|
|
2065
2089
|
renderer.trackRenderer
|
|
2066
2090
|
];
|
|
2067
|
-
renderers.forEach(
|
|
2091
|
+
renderers.forEach(r => {
|
|
2068
2092
|
_templatizeRenderer(r, basePath, fieldNames);
|
|
2069
2093
|
});
|
|
2070
2094
|
}
|
|
@@ -2079,22 +2103,22 @@ exports._templatizeTemporalRenderer = _templatizeTemporalRenderer;
|
|
|
2079
2103
|
function _templatizeAuthoringInfo(authoringInfo, basePath, fieldNames) {
|
|
2080
2104
|
/* istanbul ignore else */
|
|
2081
2105
|
if (authoringInfo) {
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
props.forEach(
|
|
2085
|
-
|
|
2086
|
-
props.forEach(
|
|
2087
|
-
|
|
2106
|
+
const props = ["field", "normalizationField"];
|
|
2107
|
+
const field1 = authoringInfo.field1;
|
|
2108
|
+
props.forEach(p => _templatizeProperty(field1, p, basePath, "name"));
|
|
2109
|
+
const field2 = authoringInfo.field2;
|
|
2110
|
+
props.forEach(p => _templatizeProperty(field2, p, basePath, "name"));
|
|
2111
|
+
const fields = authoringInfo.fields;
|
|
2088
2112
|
if (fields) {
|
|
2089
|
-
authoringInfo.fields = fields.map(
|
|
2113
|
+
authoringInfo.fields = fields.map(f => _templatize(basePath, f, "name"));
|
|
2090
2114
|
}
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
if (
|
|
2094
|
-
vProps.forEach(
|
|
2115
|
+
const vProps = ["endTime", "field", "startTime"];
|
|
2116
|
+
const vVars = authoringInfo.visualVariables;
|
|
2117
|
+
if (vVars) {
|
|
2118
|
+
vProps.forEach(p => {
|
|
2095
2119
|
// endTime and startTime may or may not be a field name
|
|
2096
|
-
if (fieldNames.indexOf(
|
|
2097
|
-
_templatizeProperty(
|
|
2120
|
+
if (fieldNames.indexOf(vVars[p]) > -1) {
|
|
2121
|
+
_templatizeProperty(vVars, p, basePath, "name");
|
|
2098
2122
|
}
|
|
2099
2123
|
});
|
|
2100
2124
|
}
|
|
@@ -2109,12 +2133,12 @@ exports._templatizeAuthoringInfo = _templatizeAuthoringInfo;
|
|
|
2109
2133
|
* @param basePath path used to de-templatize while deploying
|
|
2110
2134
|
*/
|
|
2111
2135
|
function _templatizeArcadeExpressions(text, fieldName, basePath) {
|
|
2112
|
-
|
|
2136
|
+
const t = _templatize(basePath, fieldName, "name");
|
|
2113
2137
|
if (text) {
|
|
2114
2138
|
// test for $feature. notation
|
|
2115
2139
|
// captures VOTED_DEM_2012 from $feature.VOTED_DEM_2012
|
|
2116
|
-
|
|
2117
|
-
|
|
2140
|
+
let exp = "(?:\\$feature\\.)(" + fieldName + ")\\b";
|
|
2141
|
+
let regEx = new RegExp(exp, "gm");
|
|
2118
2142
|
text = regEx.test(text) ? text.replace(regEx, "$feature." + t) : text;
|
|
2119
2143
|
// test for $feature[] notation
|
|
2120
2144
|
// captures VOTED_DEM_2012 from $feature["VOTED_DEM_2012"]
|
|
@@ -2122,7 +2146,7 @@ function _templatizeArcadeExpressions(text, fieldName, basePath) {
|
|
|
2122
2146
|
// captures VOTED_DEM_2012 from $feature[VOTED_DEM_2012]
|
|
2123
2147
|
exp = "(?:[$]feature)(\\[\\\"?\\'?)" + fieldName + "(\\\"?\\'?\\])";
|
|
2124
2148
|
regEx = new RegExp(exp, "gm");
|
|
2125
|
-
|
|
2149
|
+
let result = regEx.exec(text);
|
|
2126
2150
|
if (result) {
|
|
2127
2151
|
text = text.replace(regEx, "$feature" + result[1] + t + result[2]);
|
|
2128
2152
|
}
|
|
@@ -2157,29 +2181,27 @@ exports._templatizeArcadeExpressions = _templatizeArcadeExpressions;
|
|
|
2157
2181
|
* @param fieldNames array of the layers field names
|
|
2158
2182
|
*/
|
|
2159
2183
|
function _templatizeLabelingInfo(labelingInfo, basePath, fieldNames) {
|
|
2160
|
-
labelingInfo.forEach(
|
|
2184
|
+
labelingInfo.forEach((li) => {
|
|
2161
2185
|
/* istanbul ignore else */
|
|
2162
2186
|
if (li.hasOwnProperty("fieldInfos")) {
|
|
2163
|
-
|
|
2164
|
-
fieldInfos.forEach(
|
|
2165
|
-
return _templatizeProperty(fi, "fieldName", basePath, "name");
|
|
2166
|
-
});
|
|
2187
|
+
const fieldInfos = li.fieldInfos || [];
|
|
2188
|
+
fieldInfos.forEach(fi => _templatizeProperty(fi, "fieldName", basePath, "name"));
|
|
2167
2189
|
}
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
fieldNames.forEach(
|
|
2171
|
-
|
|
2190
|
+
const labelExp = li.labelExpression || "";
|
|
2191
|
+
const labelExpInfo = li.labelExpressionInfo || {};
|
|
2192
|
+
fieldNames.forEach(n => {
|
|
2193
|
+
const t = _templatize(basePath, n, "name");
|
|
2172
2194
|
// check for [fieldName] or ["fieldName"]
|
|
2173
|
-
|
|
2174
|
-
|
|
2195
|
+
const regExBracket = new RegExp('(\\[\\"*)+(' + n + ')(\\"*\\])+', "gm");
|
|
2196
|
+
let result = regExBracket.exec(labelExp);
|
|
2175
2197
|
if (result) {
|
|
2176
2198
|
li.labelExpression = labelExp.replace(regExBracket, result[1] + t + result[3]);
|
|
2177
2199
|
}
|
|
2178
2200
|
/* istanbul ignore else */
|
|
2179
2201
|
if (labelExpInfo.value) {
|
|
2180
|
-
|
|
2202
|
+
let v = labelExpInfo.value;
|
|
2181
2203
|
// check for {fieldName}
|
|
2182
|
-
|
|
2204
|
+
const regExCurly = new RegExp("(\\{" + n + "\\})", "gm");
|
|
2183
2205
|
v = regExCurly.test(v) ? v.replace(regExCurly, "{" + t + "}") : v;
|
|
2184
2206
|
// check for [fieldName] or ["fieldName"]
|
|
2185
2207
|
result = regExBracket.exec(v);
|
|
@@ -2201,10 +2223,10 @@ exports._templatizeLabelingInfo = _templatizeLabelingInfo;
|
|
|
2201
2223
|
* @param basePath path used to de-templatize while deploying
|
|
2202
2224
|
*/
|
|
2203
2225
|
function _templatizeTemplates(layer, basePath) {
|
|
2204
|
-
|
|
2205
|
-
templates.forEach(
|
|
2206
|
-
|
|
2207
|
-
|
|
2226
|
+
const templates = layer.templates || [];
|
|
2227
|
+
templates.forEach(t => {
|
|
2228
|
+
const attributes = (0, generalHelpers_1.getProp)(t, "prototype.attributes");
|
|
2229
|
+
const _attributes = _templatizeKeys(attributes, basePath, "name");
|
|
2208
2230
|
/* istanbul ignore else */
|
|
2209
2231
|
if (_attributes) {
|
|
2210
2232
|
t.prototype.attributes = _attributes;
|
|
@@ -2219,20 +2241,20 @@ exports._templatizeTemplates = _templatizeTemplates;
|
|
|
2219
2241
|
* @param basePath path used to de-templatize while deploying
|
|
2220
2242
|
*/
|
|
2221
2243
|
function _templatizeTypeTemplates(layer, basePath) {
|
|
2222
|
-
|
|
2244
|
+
const types = layer.types;
|
|
2223
2245
|
if (types && Array.isArray(types) && types.length > 0) {
|
|
2224
|
-
types.forEach(
|
|
2225
|
-
|
|
2246
|
+
types.forEach((type) => {
|
|
2247
|
+
const domains = _templatizeKeys(type.domains, basePath, "name");
|
|
2226
2248
|
/* istanbul ignore else */
|
|
2227
2249
|
if (domains) {
|
|
2228
2250
|
type.domains = domains;
|
|
2229
2251
|
}
|
|
2230
|
-
|
|
2252
|
+
const templates = type.templates;
|
|
2231
2253
|
/* istanbul ignore else */
|
|
2232
2254
|
if (templates && templates.length > 0) {
|
|
2233
|
-
templates.forEach(
|
|
2234
|
-
|
|
2235
|
-
|
|
2255
|
+
templates.forEach((t) => {
|
|
2256
|
+
const attributes = (0, generalHelpers_1.getProp)(t, "prototype.attributes");
|
|
2257
|
+
const _attributes = _templatizeKeys(attributes, basePath, "name");
|
|
2236
2258
|
/* istanbul ignore else */
|
|
2237
2259
|
if (_attributes) {
|
|
2238
2260
|
t.prototype.attributes = _attributes;
|
|
@@ -2251,14 +2273,14 @@ exports._templatizeTypeTemplates = _templatizeTypeTemplates;
|
|
|
2251
2273
|
* @param suffix expected suffix for template variable
|
|
2252
2274
|
*/
|
|
2253
2275
|
function _templatizeKeys(obj, basePath, suffix) {
|
|
2254
|
-
|
|
2276
|
+
let _obj;
|
|
2255
2277
|
/* istanbul ignore else */
|
|
2256
2278
|
if (obj) {
|
|
2257
2279
|
_obj = {};
|
|
2258
|
-
|
|
2280
|
+
const objKeys = Object.keys(obj);
|
|
2259
2281
|
/* istanbul ignore else */
|
|
2260
2282
|
if (objKeys && objKeys.length > 0) {
|
|
2261
|
-
objKeys.forEach(
|
|
2283
|
+
objKeys.forEach(k => {
|
|
2262
2284
|
_obj[_templatize(basePath, k, suffix)] = obj[k];
|
|
2263
2285
|
});
|
|
2264
2286
|
}
|
|
@@ -2274,18 +2296,18 @@ exports._templatizeKeys = _templatizeKeys;
|
|
|
2274
2296
|
*/
|
|
2275
2297
|
function _templatizeTimeInfo(layer, basePath) {
|
|
2276
2298
|
if (layer.timeInfo) {
|
|
2277
|
-
|
|
2278
|
-
|
|
2299
|
+
const timeInfo = layer.timeInfo;
|
|
2300
|
+
const timeProps = [
|
|
2279
2301
|
"endTimeField",
|
|
2280
2302
|
"startTimeField",
|
|
2281
2303
|
"trackIdField"
|
|
2282
2304
|
];
|
|
2283
|
-
timeProps.forEach(
|
|
2284
|
-
if (
|
|
2285
|
-
_templatizeProperty(
|
|
2305
|
+
timeProps.forEach(t => {
|
|
2306
|
+
if (timeInfo[t] !== "") {
|
|
2307
|
+
_templatizeProperty(timeInfo, t, basePath, "name");
|
|
2286
2308
|
}
|
|
2287
2309
|
else {
|
|
2288
|
-
|
|
2310
|
+
timeInfo[t] = null;
|
|
2289
2311
|
}
|
|
2290
2312
|
});
|
|
2291
2313
|
}
|
|
@@ -2317,16 +2339,16 @@ exports._templatizeDefinitionQuery = _templatizeDefinitionQuery;
|
|
|
2317
2339
|
*/
|
|
2318
2340
|
function _getNameMapping(fieldInfos, id) {
|
|
2319
2341
|
// create name mapping
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
? newFields.map(
|
|
2342
|
+
const fInfo = fieldInfos[id];
|
|
2343
|
+
const nameMapping = {};
|
|
2344
|
+
const newFields = fInfo.newFields;
|
|
2345
|
+
const newFieldNames = newFields
|
|
2346
|
+
? newFields.map((f) => f.name)
|
|
2325
2347
|
: [];
|
|
2326
|
-
|
|
2327
|
-
sourceFields.forEach(
|
|
2328
|
-
|
|
2329
|
-
newFields.forEach(
|
|
2348
|
+
const sourceFields = fInfo.sourceFields || [];
|
|
2349
|
+
sourceFields.forEach((field) => {
|
|
2350
|
+
const lName = String(field.name).toLowerCase();
|
|
2351
|
+
newFields.forEach((f) => {
|
|
2330
2352
|
// Names can change more than case
|
|
2331
2353
|
if (newFieldNames.indexOf(field.name) === -1 &&
|
|
2332
2354
|
newFieldNames.indexOf(lName) === -1) {
|
|
@@ -2350,13 +2372,13 @@ function _getNameMapping(fieldInfos, id) {
|
|
|
2350
2372
|
});
|
|
2351
2373
|
// update for editFieldsInfo
|
|
2352
2374
|
if (fInfo.editFieldsInfo && fInfo.newEditFieldsInfo) {
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
Object.keys(
|
|
2357
|
-
|
|
2358
|
-
if ((
|
|
2359
|
-
nameMapping[lowerEfi].name !==
|
|
2375
|
+
const efi = JSON.parse(JSON.stringify(fInfo.editFieldsInfo));
|
|
2376
|
+
const newEfi = JSON.parse(JSON.stringify(fInfo.newEditFieldsInfo));
|
|
2377
|
+
const nameMappingKeys = Object.keys(nameMapping);
|
|
2378
|
+
Object.keys(efi).forEach(k => {
|
|
2379
|
+
const lowerEfi = String(efi[k]).toLowerCase();
|
|
2380
|
+
if ((nameMappingKeys.indexOf(lowerEfi) === -1 ||
|
|
2381
|
+
nameMapping[lowerEfi].name !== newEfi[k]) &&
|
|
2360
2382
|
newFieldNames.indexOf(lowerEfi) > -1) {
|
|
2361
2383
|
// Only add delete fields if source schema changes allowed
|
|
2362
2384
|
/* istanbul ignore else */
|
|
@@ -2370,17 +2392,17 @@ function _getNameMapping(fieldInfos, id) {
|
|
|
2370
2392
|
fInfo.deleteFields.push(lowerEfi);
|
|
2371
2393
|
}
|
|
2372
2394
|
// editFieldsInfo only has the name and not the alias and type
|
|
2373
|
-
|
|
2374
|
-
fInfo.sourceFields.some(
|
|
2375
|
-
if (sf.name ===
|
|
2376
|
-
|
|
2395
|
+
let sourceEfiField;
|
|
2396
|
+
fInfo.sourceFields.some((sf) => {
|
|
2397
|
+
if (sf.name === efi[k]) {
|
|
2398
|
+
sourceEfiField = sf;
|
|
2377
2399
|
}
|
|
2378
|
-
return sf.name ===
|
|
2400
|
+
return sf.name === efi[k];
|
|
2379
2401
|
});
|
|
2380
2402
|
nameMapping[lowerEfi] = {
|
|
2381
|
-
name:
|
|
2382
|
-
alias:
|
|
2383
|
-
type:
|
|
2403
|
+
name: newEfi[k],
|
|
2404
|
+
alias: sourceEfiField && sourceEfiField.alias ? sourceEfiField.alias : "",
|
|
2405
|
+
type: sourceEfiField && sourceEfiField.type ? sourceEfiField.type : ""
|
|
2384
2406
|
};
|
|
2385
2407
|
}
|
|
2386
2408
|
});
|
|
@@ -2392,4 +2414,13 @@ function _getNameMapping(fieldInfos, id) {
|
|
|
2392
2414
|
return nameMapping;
|
|
2393
2415
|
}
|
|
2394
2416
|
exports._getNameMapping = _getNameMapping;
|
|
2417
|
+
/**
|
|
2418
|
+
* Helper function to ensure same chunk size value is used in multiple locations
|
|
2419
|
+
*
|
|
2420
|
+
* @return a number that represents how many layers should be included per addToDef call
|
|
2421
|
+
*/
|
|
2422
|
+
function _getLayerChunkSize() {
|
|
2423
|
+
return 20;
|
|
2424
|
+
}
|
|
2425
|
+
exports._getLayerChunkSize = _getLayerChunkSize;
|
|
2395
2426
|
//# sourceMappingURL=featureServiceHelpers.js.map
|