@embrace-io/react-native
Version:
A React Native wrapper for the Embrace SDK
75 lines (74 loc) • 3.16 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable @typescript-eslint/no-explicit-any -- generic wizard step/field plumbing */
const EmbraceLogger_1 = require("../../src/utils/EmbraceLogger");
const LOGGER = new EmbraceLogger_1.default(console);
class Wizard {
constructor() {
this.fields = {};
this.steps = [];
this.fieldValues = {};
}
registerField(field) {
this.fields[field.name] = field;
}
registerStep(step) {
this.steps = this.steps.concat(step);
}
fieldValue(field) {
return __awaiter(this, void 0, void 0, function* () {
const value = this.fieldValues[field.name];
if (value !== undefined) {
return Promise.resolve(value);
}
return field.fetch().then((val) => {
this.fieldValues[field.name] = val;
return val;
});
});
}
fieldValueList(list) {
return list.reduce((chain, field) => __awaiter(this, void 0, void 0, function* () {
return chain.then(results => field.fetch().then(res => [...results, res]));
}), Promise.resolve([]));
}
getUncompletedSteps() {
return this.steps.filter(step => !step.isCompleted);
}
processSteps() {
return this.steps.reduce((chain, step) => __awaiter(this, void 0, void 0, function* () {
return chain.then((results) => __awaiter(this, void 0, void 0, function* () {
return step.run(this).then(res => {
LOGGER.log(`${step.name} was completed`);
step.isCompleted = true;
return [...results, res];
});
}));
}), Promise.resolve([]));
}
runSteps() {
return __awaiter(this, void 0, void 0, function* () {
return this.processSteps()
.then(() => {
LOGGER.log("Done.");
})
.catch(err => {
LOGGER.error("Error in setting up Embrace: " + err);
this.getUncompletedSteps().forEach(uncompletedStep => {
const { name, docURL } = uncompletedStep;
LOGGER.error(`We could not complete: ${name}, Please refer to the docs at ${docURL || "https://embrace.io/docs/react-native/integration/"}`);
});
});
});
}
}
exports.default = Wizard;