public async updateObject()

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);
        }
    }