back-testing-react 1.3.49 → 1.3.50

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "back-testing-react",
3
- "version": "1.3.49",
3
+ "version": "1.3.50",
4
4
  "description": "Parametric back testing application developed by NormanMax Insurance Solutions",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -45,7 +45,8 @@
45
45
  "dependencies": {
46
46
  "@emotion/react": "^11.13.3",
47
47
  "@emotion/styled": "^11.13.0",
48
- "@fortawesome/fontawesome-free": "^6.7.1",
48
+ "@fortawesome/fontawesome-free": "^6.7.2",
49
+ "@fortawesome/free-regular-svg-icons": "^6.7.2",
49
50
  "@fortawesome/free-solid-svg-icons": "^6.7.1",
50
51
  "@fortawesome/react-fontawesome": "^0.2.2",
51
52
  "@mapbox/search-js-core": "^1.0.0-beta.22",
@@ -0,0 +1,429 @@
1
+ import { LngLatLike } from "@mapbox/search-js-core"
2
+ import { Point } from "geojson";
3
+ import { RiskLocation } from "../back-testing-stepper/steps/input-multi-location/input-multi-location.types";
4
+ import { CATCircle, CATPolygon } from "../back-testing-stepper/steps/input-multi-cias/input-multi-cias.types";
5
+ import { Proxy } from "../back-testing-stepper/steps/input-multi-proxy/input-multi-proxy.types";
6
+ import { PayoutOption } from "../back-testing-stepper/steps/step.types";
7
+ import { Anemometer } from "../back-testing-stepper/steps/input-multi-anemometer/input-multi-anemometer.types";
8
+
9
+
10
+ export interface StormPayout {
11
+ name: string;
12
+ year: number;
13
+ maxRecovery: number;
14
+ maxRecoveryAmount: number;
15
+ proxy:{
16
+ name?: string;
17
+ year?: number;
18
+ category?: number;
19
+ windspeedMPH?: number;
20
+ proxyPayout: number;
21
+ },
22
+ anemometer:{
23
+ name?: string;
24
+ year?: number;
25
+ category?: number;
26
+ windspeedMPH?: number;
27
+ anemometerPayout: number;
28
+ },
29
+ ciac:{
30
+ name?: string;
31
+ year?: number;
32
+ category?: number;
33
+ windspeedMPH?: number;
34
+ ciacPayout: number;
35
+ }
36
+ color?: string;
37
+ stormTrack:{
38
+ NAME: string;
39
+ SEASON: number;
40
+ ISO_TIME: string,
41
+ USA_WIND: number;
42
+ USA_SSHS: number;
43
+ LOCATION: Point
44
+ }[]
45
+ }
46
+
47
+ export interface StormPayoutV2 {
48
+ name: string;
49
+ year: number;
50
+ maxRecovery: number;
51
+ maxRecoveryAmount: number;
52
+ proxy:{
53
+ name?: string;
54
+ year?: number;
55
+ category?: number;
56
+ windspeedMPH?: number;
57
+ locationPayouts: {locationRefId: string, proxyPayout: number}[];
58
+ },
59
+ anemometer:{
60
+ name?: string;
61
+ year?: number;
62
+ category?: number;
63
+ windspeedMPH?: number;
64
+ locationPayouts: {locationRefId: string, anemometerPayout: number}[];
65
+ },
66
+ ciac:{
67
+ name?: string;
68
+ year?: number;
69
+ category?: number;
70
+ windspeedMPH?: number;
71
+ locationPayouts: {locationRefId: string, ciacPayout: number}[];
72
+ }
73
+ color?: string;
74
+ stormTrack:{
75
+ NAME: string;
76
+ SEASON: number;
77
+ ISO_TIME: string,
78
+ USA_WIND: number;
79
+ USA_SSHS: number;
80
+ LOCATION: Point
81
+ }[]
82
+ }
83
+
84
+ export interface PayoutResponse {
85
+ status: number;
86
+ payouts: StormPayout[];
87
+ }
88
+
89
+ export interface PayoutResponseV2 {
90
+ status: number;
91
+ payouts: StormPayout[];
92
+ details: PayoutDetails
93
+ }
94
+
95
+ export interface PayoutDetails {
96
+ proxies: { [key: string]: ProxyPayout[] };
97
+ anemometers: { [key: string]: AnemometerPayout[] };
98
+ cias: { [key: string]: CIACPayout[] };
99
+ }
100
+
101
+ export interface ProxyPayout {
102
+ name?: string;
103
+ year?: number;
104
+ category?: number;
105
+ windspeedMPH?: number;
106
+ proxyPayout?: number;
107
+ }
108
+
109
+ export interface AnemometerPayout {
110
+ name?: string;
111
+ year?: number;
112
+ category?: number;
113
+ windspeedMPH?: number;
114
+ anemometerPayout?: number;
115
+ }
116
+
117
+ export interface CIACPayout {
118
+ name?: string;
119
+ year?: number;
120
+ category?: number;
121
+ windspeedMPH?: number;
122
+ ciacPayout?: number;
123
+ }
124
+
125
+ export interface Payout {
126
+ category: number,
127
+ payout: number
128
+ }
129
+
130
+ export interface Shape {
131
+ type: ShapeType;
132
+ refId: string
133
+ }
134
+
135
+ export interface Circle extends Shape {
136
+ type: ShapeType.CIRCLE
137
+ latitude: number | undefined;
138
+ longitude: number | undefined;
139
+ radius: number | undefined;
140
+ }
141
+
142
+ export interface Polygon extends Shape {
143
+ type: ShapeType.POLYGON
144
+ coords:[number,number][]
145
+ }
146
+
147
+ export enum ShapeType {
148
+ CIRCLE = '__circle',
149
+ POLYGON = '__polygon'
150
+ }
151
+
152
+ export interface ProxyRequest {
153
+ enabled: boolean;
154
+ radius: number;
155
+ latitude: number | undefined;
156
+ longitude: number | undefined;
157
+ payouts: Payout[] | undefined;
158
+ }
159
+
160
+ export interface ProxyRequestV2 {
161
+ refId: string,
162
+ enabled: boolean;
163
+ radius: number;
164
+ latitude: number;
165
+ longitude: number;
166
+ payouts: Payout[];
167
+ }
168
+
169
+ export interface Coordinate {
170
+ latitude: number | undefined,
171
+ longitude: number | undefined
172
+ }
173
+
174
+ export interface AnemometerRequest {
175
+ enabled: boolean;
176
+ code: string
177
+ latitude: number | undefined;
178
+ longitude: number | undefined;
179
+ payouts: Payout[] | undefined;
180
+ }
181
+
182
+ export interface AnemometerRequestV2 {
183
+ refId: string,
184
+ enabled: boolean;
185
+ code: string
186
+ payouts: Payout[];
187
+ }
188
+
189
+ export interface CIACRequest {
190
+ enabled: boolean;
191
+ includeNotNamedStorms: boolean;
192
+ shapes: Shape[];
193
+ payouts: Payout[] | undefined;
194
+ }
195
+
196
+ export interface CIASRequestV2 {
197
+ refId: string,
198
+ enabled: boolean;
199
+ shape: Shape;
200
+ payouts: Payout[];
201
+ }
202
+
203
+ export interface Location {
204
+ latitude: number,
205
+ longitude: number,
206
+ limit: number
207
+ }
208
+
209
+ export interface PayoutRequest {
210
+ limit: number;
211
+ latitude: number | undefined;
212
+ longitude: number | undefined;
213
+ includeZeroPayouts: boolean;
214
+ proxy: ProxyRequest;
215
+ anemometer: AnemometerRequest;
216
+ ciac: CIACRequest;
217
+ }
218
+
219
+ export interface PayoutRequestV2 {
220
+ limit: number;
221
+ proxies: ProxyRequestV2[],
222
+ anemometers: AnemometerRequestV2[],
223
+ cias: CIASRequestV2[],
224
+ includeZeroPayouts: boolean;
225
+ includeNotNamedStorms: boolean
226
+ }
227
+
228
+ export interface BackTestingMapProps {
229
+ mapAccessToken: string,
230
+ apiAccessToken: string,
231
+ env: 'dev'|'uat'|'prod',
232
+ location: {longitude: number, latitude: number } | undefined | null,
233
+ limit: number | undefined | null,
234
+ ciacRadius: number | undefined | null,
235
+ anemometerCode: string | undefined | null,
236
+ proxyPayouts?: Payout[],
237
+ anemometerPayouts?: Payout[],
238
+ ciacPayouts?: Payout[],
239
+ includeNoNameStorms?: boolean,
240
+ includeZeroPayouts?: boolean,
241
+ proxyEnabled?: boolean,
242
+ anemometerEnabled?: boolean,
243
+ ciacEnabled?: boolean,
244
+ isCalculatePayoutEnabled?: boolean,
245
+ onCalculatePayoutEnabledChanged?: (e:boolean) => void,
246
+ onViewChange?: (view: MapView) => void,
247
+ stormPayouts: StormPayout[],
248
+ onCalculatePayouts?: (payouts: StormPayout[]) => void ,
249
+ onLoad?: (e:React.MutableRefObject<mapboxgl.Map | undefined>) => void
250
+ appStatus: ('loading'| 'idle')
251
+ onAppStatusChange: (e: 'loading'| 'idle') => void
252
+ isPdfJobQueued?: boolean;
253
+ onPdfJobQueuedChanged?: (e:boolean) => void
254
+
255
+ locations: RiskLocation[];
256
+ proxies: Proxy[]
257
+ proxyPayoutOption?: PayoutOption[]
258
+ anemometers: Anemometer[]
259
+ anemometerPayoutOption?: PayoutOption[]
260
+ circles: CATCircle[];
261
+ polygons: CATPolygon[]
262
+ ciasPayoutOptions?: PayoutOption[]
263
+ }
264
+
265
+ export interface BackTestingActions {
266
+ calculatePayouts: (proxyPayouts: Payout[], anemometerCode: string, anemometerPayouts: Payout[], ciacPayouts: Payout[], includeNoNameStorms: boolean, includeZeroPayouts: boolean, limit: number, proxyEnabled: boolean, anemometerEnabled: boolean, ciacEnabled: boolean) => void,
267
+ }
268
+
269
+ export enum MapView {
270
+ CAT_INTENSITY = '__cat_view',
271
+ STORMS = '__storms_view'
272
+ }
273
+
274
+ export enum Constants {
275
+ COLOR_CAT_5 = "rgba(252, 92, 13, 1)", // red-orange
276
+ COLOR_CAT_5_MUTED = "rgba(255, 255, 255, 0.5)", // red-orange
277
+
278
+ COLOR_CAT_4 = "rgba(250, 141, 14, 1)", // orange
279
+ COLOR_CAT_4_MUTED = "rgba(255, 255, 255, 0.5)", // orange
280
+
281
+ COLOR_CAT_3 = "rgba(247, 190, 15, 1)", // orange-yellow
282
+ COLOR_CAT_3_MUTED = "rgba(255, 255, 255, 0.5)", // orange-yellow
283
+
284
+ COLOR_CAT_2 = "rgba(246, 215, 15, 1)", // yellow
285
+ COLOR_CAT_2_MUTED = "rgba(255, 255, 255, 0.5)", // yellow
286
+
287
+ COLOR_CAT_1 = "rgba(192, 232, 38, 1)", // yellow-green
288
+ COLOR_CAT_1_MUTED = "rgba(255, 255, 255, 0.5)", // yellow-green
289
+
290
+ COLOR_TROPICAL_STORM = "rgba(156, 244, 53, 1)", // lime-green
291
+ COLOR_TROPICAL_STORM_MUTED = "rgba(255, 255, 255, 0.5)", // lime-green
292
+
293
+ COLOR_TROPICAL_DEPRESSION = "rgba(120, 255, 68,1)", // bright-green
294
+ COLOR_TROPICAL_DEPRESSION_MUTED = "rgba(255, 255, 255, 0.5)", // bright-green
295
+
296
+ COLOR_TROPICAL_EXPRESSION = "rgba(120, 255, 68,1)", // bright-green
297
+ COLOR_TROPICAL_EXPRESSION_MUTED = "rgba(255, 255, 255, 0.5)", // bright-green
298
+
299
+ COLOR_MUTED = "rgba(255, 255, 255, 0.5)", // bright-green
300
+ }
301
+
302
+ export const DEFAULT_MAP_COORDINATE : LngLatLike = [-70.9,42.35]
303
+ export const DEFAULT_MAP_ZOOM : number = 8
304
+
305
+ // map data sources
306
+ export const CIAC_SOURCE = '__ciac_data'
307
+ export const TROPICAL_STORM_SOURCE = '__tropical_storms_data'
308
+ export const TROPICAL_STORM_TRACK_SOURCE = '__tropical_storm_tracks_data'
309
+
310
+ //map visual layers
311
+ export const CIAC_LAYER = '__ciac_layer'
312
+ export const TROPICAL_STORM_LAYER = '__tropical_storms_layer'
313
+ export const TROPICAL_STORM_TRACK_LAYER = '__tropical_storm_tracks_layer'
314
+
315
+ export function generateCATColor(cat:number): string {
316
+ switch(cat){
317
+ case 5:
318
+ return Constants.COLOR_CAT_5
319
+ case 4:
320
+ return Constants.COLOR_CAT_4
321
+ case 3:
322
+ return Constants.COLOR_CAT_3
323
+ case 2:
324
+ return Constants.COLOR_CAT_2
325
+ case 1:
326
+ return Constants.COLOR_CAT_1
327
+ case 0:
328
+ return Constants.COLOR_TROPICAL_STORM
329
+ case -1:
330
+ return Constants.COLOR_TROPICAL_DEPRESSION
331
+ case -2:
332
+ return Constants.COLOR_TROPICAL_EXPRESSION
333
+ default:
334
+ return Constants.COLOR_TROPICAL_EXPRESSION
335
+ }
336
+ }
337
+
338
+ export function randomColor(index:number): string {
339
+ var hue = (Math.floor(index) * 120) + (Math.round((index * 120)/360) * 30);
340
+ return `hsla(${hue}, 90%, 60%, 1)`;
341
+ }
342
+
343
+ export function generateProxyRequest(latLng: [number|undefined,number|undefined], radius: number, payouts: Payout[] | undefined, enabled: boolean ){
344
+ let coord = (latLng);
345
+ let proxy : ProxyRequest = {
346
+ enabled:enabled,
347
+ radius: radius,
348
+ latitude: coord[1],
349
+ longitude: coord[0],
350
+ payouts: payouts
351
+ }
352
+ return proxy
353
+ }
354
+
355
+ export function generateAnemometerRequest(latLng: [number|undefined,number|undefined], anemometerCode:string, payouts: Payout[] | undefined, enabled: boolean){
356
+ let coord = (latLng);
357
+ let anemometer : AnemometerRequest = {
358
+ enabled:enabled,
359
+ code:anemometerCode,
360
+ latitude: coord[1],
361
+ longitude: coord[0],
362
+ payouts: payouts
363
+ }
364
+ return anemometer
365
+ }
366
+
367
+ export function generateCIACRequest(latLng: [number|undefined,number|undefined], radius: number | undefined, includeNoNameStorms: boolean, payouts: Payout[] | undefined, enabled: boolean){
368
+ let coord = (latLng);
369
+ let ciac : CIACRequest = {
370
+ enabled:enabled,
371
+ shapes:[{
372
+ type: ShapeType.CIRCLE,
373
+ latitude: coord[1],
374
+ longitude: coord[0],
375
+ radius: radius
376
+ } as Circle],
377
+ includeNotNamedStorms: includeNoNameStorms,
378
+ payouts: payouts
379
+ }
380
+ return ciac
381
+ }
382
+
383
+ export function generateInitialProxyRequest() : ProxyRequest {
384
+ return {
385
+ enabled:true,
386
+ latitude: undefined,
387
+ longitude: undefined,
388
+ radius: 1000,
389
+ payouts: undefined
390
+ }
391
+ }
392
+
393
+ export function generateInitialAnemometerRequest() : AnemometerRequest {
394
+ return {
395
+ enabled:true,
396
+ code: "",
397
+ latitude: undefined,
398
+ longitude: undefined,
399
+ payouts: undefined
400
+ }
401
+ }
402
+
403
+ export function generateInitialCIACRequest() : CIACRequest {
404
+ return {
405
+ enabled:true,
406
+ includeNotNamedStorms: false,
407
+ shapes: [
408
+ {
409
+ type: ShapeType.CIRCLE,
410
+ latitude: undefined,
411
+ longitude: undefined,
412
+ radius: 15
413
+ } as Circle
414
+ ],
415
+ payouts: undefined
416
+ }
417
+ }
418
+
419
+ export function generateInitialPayoutRequest(latitude:number | undefined, longitude: number | undefined) : PayoutRequest {
420
+ return {
421
+ limit: 0,
422
+ latitude: latitude,
423
+ longitude: longitude,
424
+ includeZeroPayouts: false,
425
+ proxy: generateInitialProxyRequest(),
426
+ anemometer: generateInitialAnemometerRequest(),
427
+ ciac: generateInitialCIACRequest()
428
+ }
429
+ }
@@ -1,6 +1,6 @@
1
1
  "use client"
2
2
 
3
- import { MediaType, Payout, PayoutWizardStepType, RadioChoice, WizardStep } from "../step.types";
3
+ import { MediaType, Payout, PayoutWizardStepType, RadioChoice, WizardStep } from "../step-new.types";
4
4
  import React, { forwardRef, useImperativeHandle } from "react";
5
5
  import { generateNewAnemometer, InputMultiAnemometerStepProps, Anemometer } from "./input-multi-anemometer.types";
6
6
  import './input-multi-anemometer.css'
@@ -9,7 +9,7 @@ import { faPlus } from "@fortawesome/free-solid-svg-icons";
9
9
  import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
10
10
  import WindPowerIcon from '@mui/icons-material/WindPower';
11
11
  import DeleteIcon from '@mui/icons-material/Delete';
12
- import SelectInput from "../../inputs/select-input/select-input";
12
+ import SelectInput from "../../inputs/select-input-new/select-input";
13
13
  import InputFile from "../../inputs/file-input/file-input";
14
14
  import Papa from 'papaparse';
15
15
  import NumberInput from "../../inputs/number-input/number-input";
@@ -1,6 +1,6 @@
1
1
  "use client"
2
2
 
3
- import { generateLocationOptions, LocationChoice, MediaType, Payout, PayoutWizardStepType, RadioChoice, WizardStep } from "../step.types";
3
+ import { generateLocationOptions, LocationChoice, MediaType, Payout, PayoutWizardStepType, RadioChoice, WizardStep } from "../step-new.types";
4
4
  import React, { forwardRef, useEffect, useImperativeHandle } from "react";
5
5
  import { CATCircle, CATPolygon, CATShape, generateNewCATCircle, generateNewCATPolygon, InputMultiCIASStepProps } from "./input-multi-cias.types";
6
6
  import './input-multi-cias.css'
@@ -9,11 +9,11 @@ import { faPlus, faVectorSquare } from "@fortawesome/free-solid-svg-icons";
9
9
  import { faCircleDot } from "@fortawesome/free-regular-svg-icons";
10
10
  import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
11
11
  import DeleteIcon from '@mui/icons-material/Delete';
12
- import SelectInput from "../../inputs/select-input/select-input";
12
+ import SelectInput from "../../inputs/select-input-new/select-input";
13
13
  import InputFile from "../../inputs/file-input/file-input";
14
14
  import Papa from 'papaparse';
15
- import NumberInput from "../../inputs/number-input/number-input";
16
- import { ShapeType } from "../../../back-testing-map/back-testing-map.types";
15
+ import NumberInput from "../../inputs/number-input-new/number-input";
16
+ import { ShapeType } from "../../../back-testing-map/back-testing-map-new.types";
17
17
  import DistanceInput from "../../inputs/distance-input/distance-input";
18
18
 
19
19
  const addProxyButtonBase = '#FFF';
@@ -1,6 +1,6 @@
1
- import { ShapeType } from "../../../back-testing-map/back-testing-map.types";
1
+ import { ShapeType } from "../../../back-testing-map/back-testing-map-new.types";
2
2
  import { RiskLocation } from "../input-multi-location/input-multi-location.types"
3
- import { Payout, PayoutOption, PayoutWizardStepType, RadioChoice } from "../step.types"
3
+ import { Payout, PayoutOption, PayoutWizardStepType, RadioChoice } from "../step-new.types"
4
4
  import { v4 as uuidv4 } from 'uuid';
5
5
 
6
6
  export interface InputMultiCIASStepProps {
@@ -1,6 +1,6 @@
1
1
  "use client"
2
2
 
3
- import { PayoutWizardStepType, WizardStep } from "../step.types";
3
+ import { PayoutWizardStepType, WizardStep } from "../step-new.types";
4
4
  import React, { forwardRef, useEffect, useImperativeHandle } from "react";
5
5
  import { generateNewRiskLocation, InputMultiLocationStepProps, RiskLocation } from "./input-multi-location.types";
6
6
  import DeleteIcon from '@mui/icons-material/Delete';
@@ -1,5 +1,5 @@
1
1
  import { PayoutRequest } from "../../../back-testing-map/back-testing-map.types";
2
- import { PayoutWizardStepType } from "../step.types";
2
+ import { PayoutWizardStepType } from "../step-new.types";
3
3
  import { v4 as uuidv4 } from 'uuid';
4
4
 
5
5
  export interface InputMultiLocationStepProps {