@embrace-io/react-native
Version:
A React Native wrapper for the Embrace SDK
58 lines (57 loc) • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
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) {
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) => 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) => chain.then(results => {
return step.run(this).then(res => {
logger.log(`${step.name} was completed`);
step.isCompleted = true;
return [...results, res];
});
}), Promise.resolve([]));
}
runSteps() {
return this.processSteps()
.then(() => {
logger.log("done");
})
.catch(err => {
logger.error("error in setting up Embrace: " + err);
const uncompletedSteps = this.getUncompletedSteps();
uncompletedSteps.forEach(uncompletedStep => {
logger.error(`We could not complete: ${uncompletedStep.name}, Please refer to the docs at ${uncompletedStep.docURL ||
"https://embrace.io/docs/react-native/integration/"}`);
});
});
}
}
exports.default = Wizard;