in src/persistence/mapiObjectStorage.ts [298:361]
public async updateObject<T>(key: string, dataObject: T): Promise<void> {
const resource = this.paperbitsKeyToArmResource(key);
const contentType = this.getContentTypeFromResource(resource);
const isLocalized = localizedContentTypes.includes(contentType);
let paperbitsContract;
if (isLocalized) {
if (key.startsWith("blocks/")) {
this.localizeBlock(dataObject);
}
paperbitsContract = {
...dataObject,
[selectedLocaleArm]: dataObject["locales"][selectedLocaleBits],
};
delete paperbitsContract["locales"];
}
else {
paperbitsContract = dataObject;
}
let armContract = this.convertPaperbitsContractToArmContract(paperbitsContract);
delete armContract["id"];
let exists: boolean;
try {
if (key.includes("settings") || key.includes("styles")) {
armContract = { nodes: [armContract] };
}
if (key.includes("navigationItems")) {
armContract = { nodes: armContract };
}
if (key.includes("files")) {
delete armContract["type"];
}
await this.apiClient.head<T>(resource);
exists = true;
}
catch (error) {
if (error?.code === "ResourceNotFound") {
exists = false;
}
else {
throw new AppError(`Could not update object '${key}'.`, error);
}
}
try {
const headers: HttpHeader[] = [await this.apiClient.getPortalHeader("updateObject")];
if (exists) {
headers.push({ name: "If-Match", value: "*" });
}
await this.apiClient.put<T>(resource, headers, { properties: armContract });
}
catch (error) {
throw new AppError(`Could not update object '${key}'.`, error);
}
}