ee-ts-util
Version:
typescript utilities and functions
49 lines • 2.63 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const fetch = require("isomorphic-fetch");
const Option_1 = require("fp-ts/lib/Option");
const common_1 = require("./common");
var ProjectState;
(function (ProjectState) {
ProjectState["INTERNAL"] = "Internal";
ProjectState["TENTATIVE"] = "Tentative";
ProjectState["CONFIRMED"] = "Confirmed";
})(ProjectState = exports.ProjectState || (exports.ProjectState = {}));
exports.UNDEFINED_PROJECT = { id: -1, name: "[#UNDEF]", state: "[#UNDEF]" };
exports.buildFetchProjectInfoAdapter = (baseUrl, token) => (projectId) => fetch(`${baseUrl}/api/v1/projects/${projectId}`, {
headers: new Headers({ "content-type": "application/json", "auth": token }),
}).then((response) => (response.json().then(toProjectInfo)));
exports.buildFetchPhasesAdapter = (baseUrl, token) => (projectId) => __awaiter(this, void 0, void 0, function* () {
return common_1.fetchPageData(baseUrl, `/api/v1/projects/${projectId}/phases?fields=budget_items&per_page=${PHASES_FOR_PAGE}`, token, [], toPhaseDto);
});
const toProjectInfo = (resp) => ({
id: resp.id,
parentId: resp.parent_id,
name: resp.name,
state: resp.project_state,
billable: resp.project_state !== undefined && resp.project_state !== ProjectState.INTERNAL,
clientName: resp.client,
startDate: resp.starts_at,
endDate: resp.ends_at,
});
const toPhaseDto = (resp) => ({
id: resp.id,
projectName: resp.name,
phaseName: resp.phase_name,
budgetItems: toBudgetItemsDto(resp.budget_items.data),
});
const toBudgetItemsDto = (maybeBudgetItems) => fromEmpty(maybeBudgetItems).fold(() => ({ category: "" }), (budgetItems) => ({ category: budgetItems[0].category }));
// This is DUPLICATED in timeEntryAdapter
const fromEmpty = (maybeArray) => {
return Option_1.fromNullable(maybeArray).fold(() => Option_1.none, (array) => array.length === 0 ? Option_1.none : Option_1.some(array));
};
const PHASES_FOR_PAGE = 50;
//# sourceMappingURL=projectAdapter.js.map