@dra2020/district-analytics 16.1.4 → 16.1.6

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.
@@ -977,54 +977,11 @@ function geoIDForFeature(f) {
977
977
  }
978
978
  exports.geoIDForFeature = geoIDForFeature;
979
979
  function fieldForFeature(f, dk /* dt: T.Dataset */, ff) {
980
- // const dk: string = this._keys[dt];
981
- const fk = T.fieldFromFeatureField(dk, ff);
982
- let result = undefined;
983
- // 07-31-2020 - Fix to post-process PVI into the expected election composite format.
984
- if (dk === 'P16GPR') {
985
- // 10-27-2020 - Enabling a 'Tot' result for PVI, now that we're reporting 'Other'
986
- switch (fk) {
987
- case 'D': {
988
- result = (_getFeatures(f, dk, 'D12') + _getFeatures(f, dk, 'D16')) / 2;
989
- break;
990
- }
991
- case 'R': {
992
- result = (_getFeatures(f, dk, 'R12') + _getFeatures(f, dk, 'R16')) / 2;
993
- break;
994
- }
995
- case 'Tot': {
996
- result = (_getFeatures(f, dk, 'D12') + _getFeatures(f, dk, 'D16') + _getFeatures(f, dk, 'R12') + _getFeatures(f, dk, 'R16')) / 2;
997
- break;
998
- }
999
- default: {
1000
- console.log("Field not recognized.");
1001
- break;
1002
- }
1003
- }
1004
- // result = (_getFeatures(f, dk, (fk === 'D' ? 'D12' : 'R12')) + _getFeatures(f, dk, (fk === 'D' ? 'D16' : 'R16'))) / 2;
1005
- }
1006
- else if (dk === 'P20GPR') {
1007
- switch (fk) {
1008
- case 'D': {
1009
- result = (_getFeatures(f, 'E16GPR', 'D') + _getFeatures(f, 'E20GPR', 'D')) / 2;
1010
- break;
1011
- }
1012
- case 'R': {
1013
- result = (_getFeatures(f, 'E16GPR', 'R') + _getFeatures(f, 'E20GPR', 'R')) / 2;
1014
- break;
1015
- }
1016
- case 'Tot': {
1017
- result = (_getFeatures(f, 'E16GPR', 'D') + _getFeatures(f, 'E20GPR', 'D') + _getFeatures(f, 'E16GPR', 'R') + _getFeatures(f, 'E20GPR', 'R')) / 2;
1018
- break;
1019
- }
1020
- default: {
1021
- console.log("Field not recognized.");
1022
- break;
1023
- }
1024
- }
1025
- }
1026
- else
1027
- result = _getFeatures(f, dk, fk);
980
+ // Multiple keys to transparently handle NH and non-NH (e.g. Bl vs BlC) keyed fields
981
+ // One of the values will always be missing and hence zero.
982
+ const keys = T.fieldsFromFeatureField(dk, ff);
983
+ let result = 0;
984
+ keys.forEach(key => { result += _getFeatures(f, dk, key); });
1028
985
  return result;
1029
986
  }
1030
987
  exports.fieldForFeature = fieldForFeature;
@@ -1034,8 +991,10 @@ exports.fieldForFeature = fieldForFeature;
1034
991
  function _getFeatures(f, datasetKey, p) {
1035
992
  if (!f.properties)
1036
993
  return 0;
994
+ // This is actual path
1037
995
  if (f.properties.getDatasetField)
1038
996
  return f.properties.getDatasetField(f, datasetKey, p);
997
+ // This is old path looking through full dataset property structure
1039
998
  if (!f.properties.datasets)
1040
999
  return 0;
1041
1000
  if (datasetKey && !f.properties.datasets[datasetKey])
@@ -1043,71 +1002,6 @@ function _getFeatures(f, datasetKey, p) {
1043
1002
  let n = datasetKey ? f.properties.datasets[datasetKey][p] : f.properties[p];
1044
1003
  return !n || isNaN(n) ? 0 : n;
1045
1004
  }
1046
- /* 01-04-22 -- Replaced with the above
1047
- function _getFeatures(f: any, datasetKey: string, p: string): any
1048
- {
1049
- // Shim to load sample data2.json from disk for command-line scaffolding
1050
- if (f.properties && f.properties['datasets'])
1051
- {
1052
- if (!f.properties['datasets'][datasetKey])
1053
- {
1054
- // Feature is missing the dataset
1055
- nMissingDataset += 1;
1056
- // console.log(`${nMissingDataset}: Data ${datasetKey} missing for feature ${f} Returning zero.`);
1057
-
1058
- return 0;
1059
- }
1060
-
1061
- return f.properties['datasets'][datasetKey][p];
1062
- }
1063
-
1064
- // NOTE - The fGetW() code from dra-client below here ...
1065
-
1066
- // Direct property?
1067
- if (f.properties && f.properties[p] !== undefined)
1068
- {
1069
- return f.properties[p];
1070
- }
1071
-
1072
- // Joined property?
1073
- let a: any[] = _fGetJoined(f);
1074
- if (a)
1075
- {
1076
- for (let i: number = 0; i < a.length; i++)
1077
- {
1078
- let o: any = a[i];
1079
- if (!datasetKey)
1080
- {
1081
- if (o[p] !== undefined)
1082
- {
1083
- return o[p];
1084
- }
1085
- }
1086
- else
1087
- {
1088
- if (o['datasets'] && o['datasets'][datasetKey])
1089
- {
1090
- let v = (o['datasets'][datasetKey][p]);
1091
- if ((!(v == null)) && (!(v == undefined)))
1092
- {
1093
- return o['datasets'][datasetKey][p];
1094
- }
1095
- }
1096
- }
1097
- }
1098
- }
1099
-
1100
- // Feature is missing the property
1101
- nMissingProperty += 1;
1102
- // console.log(`${nMissingProperty}: ${p} value undefined for ${f.properties['GEOID10']}. Returning zero.`);
1103
-
1104
- return 0;
1105
- // return undefined;
1106
- }
1107
- */
1108
- function _fGetJoined(f) {
1109
- return (f.properties && f.properties.joined) ? f.properties.joined : undefined;
1110
- }
1111
1005
  // Wrap data by county, to abstract the specifics of the internal structure
1112
1006
  class Counties {
1113
1007
  constructor(s, data) {
@@ -2505,23 +2399,23 @@ exports.OUT_OF_STATE = "OUT_OF_STATE";
2505
2399
  // TYPE DEFINITIONS
2506
2400
  //
2507
2401
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2508
- exports.fieldFromFeatureField = void 0;
2509
- function fieldFromFeatureField(ds, ff) {
2510
- switch (ff) {
2511
- case 0 /* FeatureField.TotalPop */: return "Tot";
2512
- case 1 /* FeatureField.WhitePop */: return "Wh";
2513
- case 2 /* FeatureField.BlackPop */: return ds.endsWith("NH") ? "Bl" : "BlC";
2514
- case 3 /* FeatureField.HispanicPop */: return "His";
2515
- case 4 /* FeatureField.AsianPop */: return ds.endsWith("NH") ? "Asn" : "AsnC";
2516
- case 5 /* FeatureField.PacificPop */: return ds.endsWith("NH") ? "Pac" : "PacC";
2517
- case 6 /* FeatureField.NativePop */: return ds.endsWith("NH") ? "Nat" : "NatC";
2518
- case 7 /* FeatureField.DemVotes */: return "D";
2519
- case 8 /* FeatureField.RepVotes */: return "R";
2520
- // NOTE: "Other" is implied as Tot - D - R
2521
- case 9 /* FeatureField.TotalVotes */: return "Tot";
2522
- }
2523
- }
2524
- exports.fieldFromFeatureField = fieldFromFeatureField;
2402
+ exports.fieldsFromFeatureField = void 0;
2403
+ const FieldsByFeatureField = [
2404
+ ["Tot"],
2405
+ ["Wh"],
2406
+ ["Bl", "BlC"],
2407
+ ["His"],
2408
+ ["Asn", "AsnC"],
2409
+ ["Pac", "PacC"],
2410
+ ["Nat", "NatC"],
2411
+ ["D"],
2412
+ ["R"],
2413
+ ["Tot"]
2414
+ ];
2415
+ function fieldsFromFeatureField(ds, ff) {
2416
+ return FieldsByFeatureField[ff];
2417
+ }
2418
+ exports.fieldsFromFeatureField = fieldsFromFeatureField;
2525
2419
 
2526
2420
 
2527
2421
  /***/ }),