@syncfusion/ej2-maps 24.2.9 → 25.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +20 -2
  2. package/dist/ej2-maps.min.js +2 -2
  3. package/dist/ej2-maps.umd.min.js +2 -2
  4. package/dist/ej2-maps.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-maps.es2015.js +650 -333
  6. package/dist/es6/ej2-maps.es2015.js.map +1 -1
  7. package/dist/es6/ej2-maps.es5.js +664 -348
  8. package/dist/es6/ej2-maps.es5.js.map +1 -1
  9. package/dist/global/ej2-maps.min.js +2 -2
  10. package/dist/global/ej2-maps.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +13 -13
  13. package/src/maps/layers/bubble.js +2 -3
  14. package/src/maps/layers/color-mapping.d.ts +0 -1
  15. package/src/maps/layers/color-mapping.js +0 -1
  16. package/src/maps/layers/data-label.js +19 -17
  17. package/src/maps/layers/layer-panel.js +13 -7
  18. package/src/maps/layers/legend.js +11 -3
  19. package/src/maps/layers/marker.d.ts +4 -0
  20. package/src/maps/layers/marker.js +16 -13
  21. package/src/maps/layers/polygon.d.ts +0 -1
  22. package/src/maps/layers/polygon.js +1 -4
  23. package/src/maps/maps-model.d.ts +14 -0
  24. package/src/maps/maps.d.ts +14 -2
  25. package/src/maps/maps.js +118 -46
  26. package/src/maps/model/base-model.d.ts +51 -0
  27. package/src/maps/model/base.d.ts +43 -1
  28. package/src/maps/model/base.js +32 -0
  29. package/src/maps/model/constants.d.ts +12 -0
  30. package/src/maps/model/constants.js +12 -0
  31. package/src/maps/model/interface.d.ts +8 -0
  32. package/src/maps/user-interaction/tooltip.js +151 -110
  33. package/src/maps/user-interaction/zoom.d.ts +3 -5
  34. package/src/maps/user-interaction/zoom.js +202 -108
  35. package/src/maps/utils/helper.d.ts +7 -1
  36. package/src/maps/utils/helper.js +89 -37
  37. package/.eslintrc.json +0 -260
  38. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +0 -72
  39. package/.github/PULL_REQUEST_TEMPLATE/Feature.md +0 -49
  40. package/tslint.json +0 -111
@@ -422,28 +422,26 @@ export { GeoLocation };
422
422
  export function measureText(text, font) {
423
423
  var measureObject = document.getElementById('mapsmeasuretext');
424
424
  if (measureObject === null) {
425
- measureObject = createElement('text', { id: 'mapsmeasuretext' });
425
+ measureObject = document.createElement('text');
426
+ measureObject.id = 'mapsmeasuretext';
426
427
  document.body.appendChild(measureObject);
427
428
  }
428
429
  measureObject.innerText = text;
429
- measureObject.style.position = 'absolute';
430
- if (typeof (font.size) === 'number') {
431
- measureObject.style.fontSize = (font.size) + 'px';
432
- }
433
- else {
434
- measureObject.style.fontSize = font.size;
435
- }
436
- measureObject.style.fontWeight = font.fontWeight;
437
- measureObject.style.fontStyle = font.fontStyle;
438
- measureObject.style.fontFamily = font.fontFamily;
439
- measureObject.style.visibility = 'hidden';
440
- measureObject.style.top = '-100';
441
- measureObject.style.left = '0';
442
- measureObject.style.whiteSpace = 'nowrap';
443
- // For bootstrap line height issue
444
- measureObject.style.lineHeight = 'normal';
430
+ measureObject.style.cssText = 'position: absolute; font-size: ' + (typeof (font.size) === 'number' ? (font.size + 'px') : font.size) +
431
+ '; font-weight: ' + font.fontWeight + '; font-style: ' + font.fontStyle + '; font-family: ' + font.fontFamily +
432
+ '; visibility: hidden; top: -100; left: 0; whiteSpace: nowrap; lineHeight: normal';
445
433
  return new Size(measureObject.clientWidth, measureObject.clientHeight);
446
434
  }
435
+ /** @private */
436
+ export function measureTextElement(text, font) {
437
+ var canvas = document.createElement('canvas');
438
+ var context = canvas.getContext('2d');
439
+ context.font = font.fontStyle + " " + font.fontWeight + " " + (typeof font.size === 'number' ? font.size + 'px' : font.size) + " " + font.fontFamily;
440
+ var metrics = context.measureText(text);
441
+ var width = metrics.width;
442
+ var height = parseFloat(font.size) || 16;
443
+ return new Size(width, height);
444
+ }
447
445
  /**
448
446
  * Internal use of text options
449
447
  *
@@ -1003,6 +1001,7 @@ export function clusterTemplate(currentLayer, markerTemplate, maps, layerIndex,
1003
1001
  factor = maps.mapLayerPanel.calculateFactor(currentLayer);
1004
1002
  }
1005
1003
  var isClusteringCompleted = false;
1004
+ var currentZoomFactor = !maps.isTileMap ? maps.mapScaleValue : maps.tileZoomLevel;
1006
1005
  maps.trigger('markerClusterRendering', eventArg, function (clusterargs) {
1007
1006
  Array.prototype.forEach.call(markerTemplate.childNodes, function (markerElement, o) {
1008
1007
  indexCollection = [];
@@ -1011,20 +1010,28 @@ export function clusterTemplate(currentLayer, markerTemplate, maps, layerIndex,
1011
1010
  bounds1 = tempElement.getBoundingClientRect();
1012
1011
  indexCollection.push(o);
1013
1012
  if (!isNullOrUndefined(bounds1)) {
1014
- Array.prototype.forEach.call(markerTemplate.childNodes, function (otherMarkerElement, p) {
1015
- if (p >= o + 1 && otherMarkerElement['style']['visibility'] !== 'hidden') {
1016
- tempElement = otherMarkerElement;
1017
- bounds2 = tempElement.getBoundingClientRect();
1018
- if (!isNullOrUndefined(bounds2)) {
1019
- if (!(bounds1.left > bounds2.right || bounds1.right < bounds2.left
1020
- || bounds1.top > bounds2.bottom || bounds1.bottom < bounds2.top)) {
1021
- colloideBounds.push(bounds2);
1022
- otherMarkerElement['style']['visibility'] = 'hidden';
1023
- indexCollection.push(p);
1013
+ var list = (maps.markerModule.zoomedMarkerCluster.length > 0 && maps.markerModule.zoomedMarkerCluster[layerIndex] && maps.markerModule.zoomedMarkerCluster[layerIndex][o] && maps.markerModule.zoomedMarkerCluster[layerIndex][o].length > 0)
1014
+ || (maps.markerModule.initialMarkerCluster.length > 0 && maps.markerModule.initialMarkerCluster[layerIndex] && maps.markerModule.initialMarkerCluster[layerIndex][o] && maps.markerModule.initialMarkerCluster[layerIndex][o].length > 0) ?
1015
+ (maps.previousScale < currentZoomFactor ? maps.markerModule.zoomedMarkerCluster[layerIndex][o] : maps.markerModule.initialMarkerCluster[layerIndex][o]) : null;
1016
+ if (!isNullOrUndefined(list) && list.length !== 0) {
1017
+ Array.prototype.forEach.call(list, function (currentIndex, p) {
1018
+ if (o !== currentIndex) {
1019
+ var otherMarkerElement = document.getElementById(maps.element.id + '_LayerIndex_' + layerIndex + '_MarkerIndex_'
1020
+ + 0 + '_dataIndex_' + currentIndex);
1021
+ if (otherMarkerElement['style']['visibility'] !== 'hidden') {
1022
+ markerBoundsComparer(otherMarkerElement, bounds1, colloideBounds, indexCollection, currentIndex);
1024
1023
  }
1025
1024
  }
1026
- }
1027
- });
1025
+ });
1026
+ }
1027
+ else {
1028
+ Array.prototype.forEach.call(markerTemplate.childNodes, function (otherMarkerElement, p) {
1029
+ if (p >= o + 1 && otherMarkerElement['style']['visibility'] !== 'hidden') {
1030
+ markerBoundsComparer(otherMarkerElement, bounds1, colloideBounds, indexCollection, p);
1031
+ }
1032
+ });
1033
+ }
1034
+ markerClusterListHandler(maps, currentZoomFactor, layerIndex, o, indexCollection);
1028
1035
  tempX = bounds1.left + bounds1.width / 2;
1029
1036
  tempY = bounds1.top + bounds1.height;
1030
1037
  if (colloideBounds.length > 0) {
@@ -1099,6 +1106,9 @@ export function clusterTemplate(currentLayer, markerTemplate, maps, layerIndex,
1099
1106
  }
1100
1107
  colloideBounds = [];
1101
1108
  }
1109
+ else {
1110
+ markerClusterListHandler(maps, currentZoomFactor, layerIndex, o, indexCollection);
1111
+ }
1102
1112
  isClusteringCompleted = true;
1103
1113
  });
1104
1114
  layerElement.appendChild(clusterGroup);
@@ -1187,6 +1197,30 @@ export function clusterTemplate(currentLayer, markerTemplate, maps, layerIndex,
1187
1197
  });
1188
1198
  return isClusteringCompleted;
1189
1199
  }
1200
+ /** @private */
1201
+ export function markerClusterListHandler(maps, currentZoomFactor, layerIndex, index, indexCollection) {
1202
+ if (currentZoomFactor == 1) {
1203
+ var initialMarkerClusterList = isNullOrUndefined(maps.markerModule.initialMarkerCluster[layerIndex][index]) ? [] : indexCollection.length > 1 ? indexCollection : [];
1204
+ maps.markerModule.initialMarkerCluster[layerIndex][index] = initialMarkerClusterList;
1205
+ var zoomedMarkerClusterList = isNullOrUndefined(maps.markerModule.zoomedMarkerCluster[layerIndex][index]) ? [] : indexCollection.length > 1 ? indexCollection : [];
1206
+ maps.markerModule.zoomedMarkerCluster[layerIndex][index] = zoomedMarkerClusterList;
1207
+ }
1208
+ else if (currentZoomFactor > 1) {
1209
+ maps.markerModule.zoomedMarkerCluster[layerIndex][index] = indexCollection.length > 1 ? indexCollection : [];
1210
+ }
1211
+ }
1212
+ /** @private */
1213
+ export function markerBoundsComparer(tempElement, markerBounds, colloideBounds, indexCollection, p) {
1214
+ var currentMarkerBound = tempElement.getBoundingClientRect();
1215
+ if (!isNullOrUndefined(currentMarkerBound)) {
1216
+ if (!(markerBounds.left > currentMarkerBound.right || markerBounds.right < currentMarkerBound.left
1217
+ || markerBounds.top > currentMarkerBound.bottom || markerBounds.bottom < currentMarkerBound.top)) {
1218
+ colloideBounds.push(currentMarkerBound);
1219
+ tempElement['style']['visibility'] = 'hidden';
1220
+ indexCollection.push(p);
1221
+ }
1222
+ }
1223
+ }
1190
1224
  /**
1191
1225
  *
1192
1226
  * @param {MarkerClusterData[]} sameMarkerData - Specifies the marker data
@@ -1981,22 +2015,40 @@ export function isCustomPath(layerData) {
1981
2015
  * @returns {string} - Returns the string
1982
2016
  * @private
1983
2017
  */
1984
- export function textTrim(maxWidth, text, font) {
2018
+ export function textTrim(maxWidth, text, font, width, isCanvasMeasure, widthList) {
1985
2019
  var label = text;
1986
- var size = measureText(text, font).width;
1987
- if (size > maxWidth) {
2020
+ if (isNullOrUndefined(width)) {
2021
+ if (!isCanvasMeasure) {
2022
+ width = measureText(text, font).width;
2023
+ }
2024
+ else {
2025
+ width = measureTextElement(text, font).width;
2026
+ }
2027
+ }
2028
+ if (width > maxWidth) {
1988
2029
  var textLength = text.length;
1989
2030
  for (var i = textLength - 1; i >= 0; --i) {
1990
2031
  label = text.substring(0, i) + '...';
1991
- size = measureText(label, font).width;
1992
- if (size <= maxWidth || label.length < 4) {
2032
+ if (!isCanvasMeasure) {
2033
+ width = measureText(label, font).width;
2034
+ }
2035
+ else {
2036
+ width = measureTextElement(label, font).width;
2037
+ }
2038
+ if (width <= maxWidth || label.length < 4) {
1993
2039
  if (label.length < 4) {
1994
2040
  label = ' ';
1995
2041
  }
2042
+ if (!isNullOrUndefined(widthList)) {
2043
+ widthList.push(width);
2044
+ }
1996
2045
  return label;
1997
2046
  }
1998
2047
  }
1999
2048
  }
2049
+ if (!isNullOrUndefined(widthList)) {
2050
+ widthList.push(width);
2051
+ }
2000
2052
  return label;
2001
2053
  }
2002
2054
  /**
@@ -2074,11 +2126,11 @@ export function getTranslate(mapObject, layer, animate) {
2074
2126
  }
2075
2127
  if (mapObject.zoomSettings.shouldZoomInitially && mapObject.zoomSettings.enable) {
2076
2128
  mapObject.mapScaleValue = scaleFactor = zoomFactorValue = ((mapObject.zoomSettings.shouldZoomInitially || mapObject.enablePersistence) && mapObject.scale === 1)
2077
- ? mapObject.scale : (isNullOrUndefined(mapObject.markerZoomFactor)) ? 1 : mapObject.markerZoomFactor;
2078
- if (mapObject.mapScaleValue !== mapObject.markerZoomFactor && !mapObject.enablePersistence) {
2129
+ ? mapObject.scale : (isNullOrUndefined(mapObject.markerZoomFactor)) ? 1 : (mapObject.markerZoomedState ? mapObject.markerZoomFactor : parseInt(mapObject.scale.toString()));
2130
+ if (mapObject.markerZoomedState && mapObject.mapScaleValue !== mapObject.markerZoomFactor && !mapObject.enablePersistence) {
2079
2131
  mapObject.mapScaleValue = zoomFactorValue = mapObject.markerZoomFactor;
2080
2132
  }
2081
- if (!isNullOrUndefined(mapObject.markerCenterLatitude) && !isNullOrUndefined(mapObject.markerCenterLongitude)) {
2133
+ if (mapObject.markerZoomedState && !isNullOrUndefined(mapObject.markerCenterLatitude) && !isNullOrUndefined(mapObject.markerCenterLongitude)) {
2082
2134
  centerLatitude = mapObject.markerCenterLatitude;
2083
2135
  centerLongitude = mapObject.markerCenterLongitude;
2084
2136
  }
package/.eslintrc.json DELETED
@@ -1,260 +0,0 @@
1
- {
2
- "env": {
3
- "browser": true,
4
- "es2021": true
5
- },
6
- "extends": [
7
- "eslint:recommended",
8
- "plugin:@typescript-eslint/recommended",
9
- "plugin:jsdoc/recommended",
10
- "plugin:security/recommended"
11
- ],
12
- "parser": "@typescript-eslint/parser",
13
- "parserOptions": {
14
- "ecmaFeatures": { "js": true },
15
- "ecmaVersion": 2018,
16
- "project": "./tsconfig.json",
17
- "sourceType": "module"
18
- },
19
- "plugins": [
20
- "@typescript-eslint",
21
- "@typescript-eslint/tslint",
22
- "eslint-plugin-security",
23
- "jsdoc"
24
- ],
25
- "rules": {
26
- "use-isnan": "error",
27
- "security/detect-unsafe-regex":"error",
28
- "security/detect-buffer-noassert":"error",
29
- "security/detect-child-process":"error",
30
- "security/detect-disable-mustache-escape":"error",
31
- "security/detect-eval-with-expression":"error",
32
- "security/detect-no-csrf-before-method-override":"error",
33
- "security/detect-non-literal-fs-filename":"error",
34
- "security/detect-non-literal-regexp":"error",
35
- "security/detect-non-literal-require":"error",
36
- "security/detect-object-injection":"error",
37
- "security/detect-possible-timing-attacks":"error",
38
- "security/detect-pseudoRandomBytes":"error",
39
- "security/detect-new-buffer":"error",
40
- "security/detect-bidi-characters":"error",
41
- "@typescript-eslint/no-inferrable-types": "off",
42
- "@typescript-eslint/ban-types": ["warn", {
43
- "types": {
44
- "Object": false,
45
- "object": false,
46
- "{}": false,
47
- "Function": false
48
- }
49
- }],
50
- "jsdoc/check-tag-names": 0,
51
- "@typescript-eslint/tslint/config": [
52
- "error",
53
- {
54
- "rules": {
55
- "ban": true,
56
- "chai-vague-errors": true,
57
- "max-func-body-length": [
58
- true,
59
- 120,
60
- {
61
- "ignore-parameters-to-function-regex": "describe"
62
- }
63
- ],
64
- "missing-jsdoc": true,
65
- "no-backbone-get-set-outside-model": false,
66
- "no-cookies": false,
67
- "no-delete-expression": false,
68
- "no-disable-auto-sanitization": true,
69
- "no-duplicate-case": true,
70
- "no-duplicate-parameter-names": true,
71
- "no-empty-interfaces": false,
72
- "no-exec-script": true,
73
- "no-function-expression": false,
74
- "no-multiple-var-decl": false,
75
- "no-string-based-set-immediate": false,
76
- "no-string-based-set-interval": false,
77
- "no-unnecessary-bind": false,
78
- "no-unused-imports": true,
79
- "no-with-statement": false,
80
- "prefer-array-literal": false,
81
- "typedef": [
82
- true,
83
- "call-signature",
84
- "parameter",
85
- "property-declaration",
86
- "variable-declaration",
87
- "arrow-parameter",
88
- "member-variable-declaration"
89
- ],
90
- "use-named-parameter": false,
91
- "valid-typeof": true,
92
- "whitespace": [
93
- true,
94
- "check-branch",
95
- "check-decl",
96
- "check-operator",
97
- "check-separator",
98
- "check-type"
99
- ]
100
- }
101
- }
102
- ],
103
- "no-control-regex": "error",
104
- "no-constant-condition": "error",
105
- "no-invalid-regexp": "error",
106
- "curly": "error",
107
- "eol-last": [
108
- "error",
109
- "always"
110
- ],
111
- "guard-for-in": "error",
112
- "no-labels": "error",
113
- "max-len": [
114
- "error",
115
- {
116
- "code": 140,
117
- "tabWidth": 4,
118
- "ignoreComments": true,
119
- "ignoreStrings": true,
120
- "ignoreTemplateLiterals": true,
121
- "ignoreRegExpLiterals": true
122
- }
123
- ],
124
- "no-console": [
125
- "error",
126
- {
127
- "allow": [
128
- "warn",
129
- "dir",
130
- "timeLog",
131
- "assert",
132
- "clear",
133
- "count",
134
- "countReset",
135
- "group",
136
- "groupEnd",
137
- "table",
138
- "dirxml",
139
- "error",
140
- "groupCollapsed",
141
- "Console",
142
- "profile",
143
- "profileEnd",
144
- "timeStamp",
145
- "context"
146
- ]
147
- }
148
- ],
149
- "no-redeclare": [
150
- "error",
151
- {
152
- "builtinGlobals": true
153
- }
154
- ],
155
- "@typescript-eslint/no-parameter-properties": "error",
156
- "@typescript-eslint/indent": [
157
- "error",
158
- 4,
159
- {
160
- "CallExpression": {
161
- "arguments": "first"
162
- },
163
- "FunctionDeclaration": {
164
- "parameters": "first"
165
- },
166
- "FunctionExpression": {
167
- "parameters": "first"
168
- }
169
- }
170
- ],
171
- "no-debugger": "error",
172
- "no-eval": "error",
173
- "no-extra-semi": "error",
174
- "no-throw-literal": "error",
175
- "no-fallthrough": "error",
176
- "comma-dangle": [
177
- "error",
178
- "never"
179
- ],
180
- "no-trailing-spaces": "error",
181
- "@typescript-eslint/no-unused-expressions": "error",
182
- "@typescript-eslint/no-var-requires": "error",
183
- "one-var": [
184
- "error",
185
- "never"
186
- ],
187
- "@typescript-eslint/no-explicit-any": "error",
188
- "no-cond-assign": [
189
- "error",
190
- "always"
191
- ],
192
- "@typescript-eslint/consistent-type-assertions": "off",
193
- "jsdoc/check-alignment": "error",
194
- "no-empty": "error",
195
- "quotes": [
196
- "error",
197
- "single"
198
- ],
199
- "semi": [
200
- "error",
201
- "always"
202
- ],
203
- "eqeqeq": [
204
- "error",
205
- "smart"
206
- ],
207
- "valid-typeof": [
208
- "error",
209
- {
210
- "requireStringLiterals": true
211
- }
212
- ],
213
- "camelcase": [
214
- "error",
215
- {
216
- "properties": "always",
217
- "ignoreDestructuring": true,
218
- "ignoreImports": true
219
- }
220
- ],
221
- "no-irregular-whitespace": [
222
- "error",
223
- {
224
- "skipStrings": true,
225
- "skipComments": true,
226
- "skipRegExps": true,
227
- "skipTemplates": true
228
- }
229
- ],
230
- "valid-jsdoc": [
231
- "error",
232
- {
233
- "prefer": {
234
- "arg": "param",
235
- "argument": "param",
236
- "class": "constructor",
237
- "return": "returns",
238
- "virtual": "abstract"
239
- }
240
- }
241
- ],
242
- "no-var": "error",
243
- "radix": "error"
244
- },
245
- "reportUnusedDisableDirectives": true,
246
- "overrides": [
247
- {
248
- "files": [
249
- "node_modules",
250
- "dist",
251
- "public",
252
- "coverage",
253
- "test-report"
254
- ],
255
- "rules": {
256
- "no-unused-expressions": "off"
257
- }
258
- }
259
- ]
260
- }
@@ -1,72 +0,0 @@
1
- # Bug description
2
-
3
- Clearly and concisely describe the problem or feature (this cannot be empty).
4
-
5
- ## Root cause
6
-
7
- Briefly describe the root cause and analysis of the problem.
8
- If there is an internal discussion on the forum, provide the link.
9
-
10
- ## Reason for not identifying earlier
11
-
12
- Find how it was missed in our earlier testing and development and by whom it was missed. This will help prevent similar mistakes in the future.
13
-
14
- ### Reason
15
-
16
- Provide reason for missing.
17
-
18
- ### Action taken:
19
-
20
- Provide the action plan taken to avoid this issue further. Also, mention if we addressed any other area in the same product based on this learning.
21
-
22
- ### Related Area for missing test case:
23
-
24
- Unit test case / E2E test case / Manual testing
25
-
26
- ## Is it a breaking issue?
27
-
28
- If it is a breaking issue, provide the commit detail which caused this break.
29
-
30
- ## Solution description
31
-
32
- Describe your code changes in detail for reviewers.
33
-
34
- ### Cause:
35
-
36
- Technical explanation for cause.
37
-
38
- ### Fix:
39
-
40
- Technical explanation for your fix.
41
-
42
- ## Output screenshots
43
-
44
- Post the output screenshots if an UI is affected or added due to this bug.
45
-
46
- ### Before issue fix output image:
47
-
48
- Provide issue image before fix.
49
-
50
- ### After issue fix output image:
51
-
52
- Provide issue fixed image with your fix.
53
-
54
- ## Areas affected and ensured
55
-
56
- List the areas affected by your code changes.
57
-
58
- ## Additional checklist
59
-
60
- - [ ] Did you run the automation against your fix? <b> Yes | No Your Explanation </b>
61
-
62
- - [ ] Is there any API name change? <b> Yes | No Your Explanation </b>
63
-
64
- - [ ] Is there any existing behavior change of other features due to this code change? <b> Yes | No Your Explanation </b>
65
-
66
- - [ ] Did you record this case in the unit test or UI test? <b> Yes | No Your Explanation </b>
67
-
68
- - [ ] Did you added issue fix comment? <b> Yes | No Your Explanation </b>
69
-
70
- - [ ] Did you tested this issue fix for all browsers? <b> [ ] Chrome [ ] Firefox [ ] Edge [ ] Internet Explorer </b>
71
-
72
- - [ ] Does it have any known issues? <b> Yes | No Your Explanation </b>
@@ -1,49 +0,0 @@
1
- # Feature description
2
-
3
- Clearly and concisely describe the problem/feature (this cannot be empty)
4
-
5
- ## Analysis / Design
6
-
7
- If there is an external design, link to it project documentation area
8
- If there is an internal discussion on the Forum, provide the link.
9
-
10
- ## Solution Description
11
-
12
- Describe your code changes in detail for reviewers
13
-
14
- ## Output screenshots
15
-
16
- Post the output screenshots if an UI is affected or added due to this feature.
17
-
18
- ## Areas affected and ensured
19
-
20
- List out the areas are affected by your code changes.
21
-
22
- ## Test cases
23
-
24
- Provide the unit testing written file details to understand the use cases considered in this implementation.
25
- If there is no TDD (if it’s not possible to follow), provide the UI automation script location and the Excel file that contains the use cases considered in this implementation.
26
- Provide the test cases Excel file alone if the feature cannot be automated in any case.
27
-
28
- ## Test bed sample location
29
-
30
- Provide the test bed sample location where code reviewers can review the new feature’s behaviors. It can be from NPMCI, staging site, local server, etc.
31
-
32
- ## Additional checklist
33
-
34
- - [ ] Did you run the automation against your feature? <b> Yes | No Your Explanation </b>
35
-
36
- - [ ] Is there any API name change? <b> Yes | No Your Explanation </b>
37
-
38
- - [ ] Is there any existing behavior change of other features due to this code change? <b> Yes | No Your Explanation </b>
39
-
40
- - [ ] Did you record this case in the unit test or UI test? <b> Yes | No Your Explanation </b>
41
-
42
- - [ ] Did you add comment for your new code (Method / Class / API / Interface / Event)? <b> Yes | No Your Explanation </b>
43
-
44
- - [ ] Did you configured third party config your feature? <b> Yes | No Your Explanation </b>
45
-
46
- - [ ] Did you tested this feature with all browsers? <b> [ ] Chrome [ ] Firefox [ ] Edge [ ] Internet Explorer </b>
47
-
48
-
49
-