2019-11-25 05:07:27 +00:00
|
|
|
import { ReduxAction } from "constants/ReduxActionConstants";
|
2019-09-09 09:08:54 +00:00
|
|
|
import {
|
|
|
|
|
SENTRY_PROD_CONFIG,
|
|
|
|
|
SENTRY_STAGE_CONFIG,
|
|
|
|
|
HOTJAR_PROD_HJID,
|
|
|
|
|
HOTJAR_PROD_HJSV,
|
2019-11-25 05:07:27 +00:00
|
|
|
} from "constants/ThirdPartyConstants";
|
2019-09-09 09:08:54 +00:00
|
|
|
import * as Sentry from "@sentry/browser";
|
|
|
|
|
import AnalyticsUtil from "./AnalyticsUtil";
|
|
|
|
|
import netlifyIdentity from "netlify-identity-widget";
|
2019-09-13 11:59:45 +00:00
|
|
|
import FontFaceObserver from "fontfaceobserver";
|
2019-09-18 10:19:50 +00:00
|
|
|
import PropertyControlRegistry from "./PropertyControlRegistry";
|
|
|
|
|
import WidgetBuilderRegistry from "./WidgetRegistry";
|
2019-11-25 05:07:27 +00:00
|
|
|
import { Property } from "api/ActionAPI";
|
|
|
|
|
import { FlattenedWidgetProps } from "reducers/entityReducers/canvasWidgetsReducer";
|
2019-09-18 14:10:57 +00:00
|
|
|
import _ from "lodash";
|
2019-11-06 12:12:41 +00:00
|
|
|
import moment from "moment-timezone";
|
2019-11-19 12:44:58 +00:00
|
|
|
import ValidationRegistry from "./ValidationRegistry";
|
2019-08-30 10:33:49 +00:00
|
|
|
|
|
|
|
|
export const createReducer = (
|
|
|
|
|
initialState: any,
|
2019-09-09 09:08:54 +00:00
|
|
|
handlers: { [type: string]: Function },
|
2019-08-30 10:33:49 +00:00
|
|
|
) => {
|
|
|
|
|
return function reducer(state = initialState, action: ReduxAction<any>) {
|
|
|
|
|
if (handlers.hasOwnProperty(action.type)) {
|
2019-09-09 09:08:54 +00:00
|
|
|
return handlers[action.type](state, action);
|
2019-08-30 10:33:49 +00:00
|
|
|
} else {
|
2019-09-09 09:08:54 +00:00
|
|
|
return state;
|
2019-08-30 10:33:49 +00:00
|
|
|
}
|
2019-09-09 09:08:54 +00:00
|
|
|
};
|
|
|
|
|
};
|
2019-08-30 10:33:49 +00:00
|
|
|
|
|
|
|
|
export const appInitializer = () => {
|
2019-09-18 10:19:50 +00:00
|
|
|
WidgetBuilderRegistry.registerWidgetBuilders();
|
|
|
|
|
PropertyControlRegistry.registerPropertyControlBuilders();
|
2019-11-19 12:44:58 +00:00
|
|
|
ValidationRegistry.registerInternalValidators();
|
2019-09-02 15:36:24 +00:00
|
|
|
netlifyIdentity.init();
|
2019-11-06 12:12:41 +00:00
|
|
|
moment.tz.setDefault(moment.tz.guess());
|
2019-08-30 10:33:49 +00:00
|
|
|
switch (process.env.REACT_APP_ENVIRONMENT) {
|
|
|
|
|
case "PRODUCTION":
|
2019-09-09 09:08:54 +00:00
|
|
|
Sentry.init(SENTRY_PROD_CONFIG);
|
2019-08-30 11:23:42 +00:00
|
|
|
AnalyticsUtil.initializeHotjar(HOTJAR_PROD_HJID, HOTJAR_PROD_HJSV);
|
|
|
|
|
AnalyticsUtil.initializeSegment();
|
2019-08-30 10:33:49 +00:00
|
|
|
break;
|
|
|
|
|
case "STAGING":
|
2019-09-09 09:08:54 +00:00
|
|
|
Sentry.init(SENTRY_STAGE_CONFIG);
|
|
|
|
|
break;
|
2019-11-22 11:04:23 +00:00
|
|
|
case "DEVELOPMENT":
|
|
|
|
|
break;
|
2019-08-30 10:33:49 +00:00
|
|
|
case "LOCAL":
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-06 11:40:00 +00:00
|
|
|
const textFont = new FontFaceObserver("DM Sans");
|
2019-09-09 09:08:54 +00:00
|
|
|
textFont
|
|
|
|
|
.load()
|
|
|
|
|
.then(() => {
|
|
|
|
|
document.body.className += "fontLoaded";
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
console.log(err);
|
|
|
|
|
});
|
|
|
|
|
};
|
2019-09-18 14:10:57 +00:00
|
|
|
|
|
|
|
|
export const mapToPropList = (map: Record<string, string>): Property[] => {
|
|
|
|
|
return _.map(map, (value, key) => {
|
|
|
|
|
return { key: key, value: value };
|
|
|
|
|
});
|
|
|
|
|
};
|
2019-10-02 18:13:04 +00:00
|
|
|
|
|
|
|
|
export const getNextWidgetName = (
|
2019-10-03 17:06:44 +00:00
|
|
|
prefix: string,
|
2019-10-02 18:13:04 +00:00
|
|
|
widgets: {
|
|
|
|
|
[id: string]: FlattenedWidgetProps;
|
|
|
|
|
},
|
|
|
|
|
) => {
|
2019-10-03 17:06:44 +00:00
|
|
|
const regex = new RegExp(`^${prefix}(\\d+)$`);
|
2019-10-02 18:13:04 +00:00
|
|
|
const usedIndices: number[] = Object.values(widgets).map(widget => {
|
2019-10-03 17:06:44 +00:00
|
|
|
if (widget && widget.widgetName && regex.test(widget.widgetName)) {
|
|
|
|
|
const name = widget.widgetName || "";
|
|
|
|
|
const matches = name.match(regex);
|
|
|
|
|
const ind =
|
|
|
|
|
matches && Array.isArray(matches) ? parseInt(matches[1], 10) : 0;
|
2019-10-02 18:13:04 +00:00
|
|
|
return Number.isNaN(ind) ? 0 : ind;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}) as number[];
|
|
|
|
|
|
|
|
|
|
const lastIndex = Math.max(...usedIndices);
|
|
|
|
|
|
|
|
|
|
return prefix + (lastIndex + 1);
|
|
|
|
|
};
|
2019-11-07 11:17:53 +00:00
|
|
|
|
|
|
|
|
export const noop = () => {};
|