UNPKG

contentful-management

Version:
138 lines (135 loc) 5.13 kB
import { toPlainObject, freezeSys } from 'contentful-sdk-core'; import copy from 'fast-copy'; import enhanceWithMethods from '../enhance-with-methods.js'; import { wrapResourceType } from './resource-type.js'; /** * @internal */ function createResourceProviderApi(makeRequest) { return { /** * Sends an update to the server with any changes made to the object's properties * @returns Object returned from the server with updated changes. * @example ```javascript * const contentful = require('contentful-management') * * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * * client.getOrganization('<org_id>') * .then((org) => org.getAppDefinition('<app_def_id>')) * .then((appDefinition) => appDefinition.getResourceProvider()) * .then((resourceProvider) => { * resourceProvider.function.sys.id = '<new_contentful_function_id>' * return resourceProvider.upsert() * }) * .catch(console.error) * ``` */ upsert: function upsert() { const data = this.toPlainObject(); return makeRequest({ entityType: 'ResourceProvider', action: 'upsert', params: getParams(data), headers: {}, payload: getUpsertParams(data), }).then((data) => wrapResourceProvider(makeRequest, data)); }, /** * Deletes this object on the server. * @returns Promise for the deletion. It contains no data, but the Promise error case should be handled. * @example ```javascript * const contentful = require('contentful-management') * * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * * client.getOrganization('<org_id>') * .then((org) => org.getAppDefinition('<app_def_id>')) * .then((appDefinition) => appDefinition.getResourceProvider()) * .then((resourceProvider) => resourceProvider.delete()) * .catch(console.error) * ``` */ delete: function del() { const data = this.toPlainObject(); return makeRequest({ entityType: 'ResourceProvider', action: 'delete', params: getParams(data), }); }, getResourceType: function getResourceType(id) { return makeRequest({ entityType: 'ResourceType', action: 'get', params: { organizationId: this.sys.organization.sys.id, appDefinitionId: this.sys.appDefinition.sys.id, resourceTypeId: id, }, }).then((data) => wrapResourceType(makeRequest, data)); }, upsertResourceType: function upsertResourceType(id, data) { return makeRequest({ entityType: 'ResourceType', action: 'upsert', params: { organizationId: this.sys.organization.sys.id, appDefinitionId: this.sys.appDefinition.sys.id, resourceTypeId: id, }, headers: {}, payload: data, }).then((data) => wrapResourceType(makeRequest, data)); }, getResourceTypes: function getResourceTypes() { return makeRequest({ entityType: 'ResourceType', action: 'getMany', params: { organizationId: this.sys.organization.sys.id, appDefinitionId: this.sys.appDefinition.sys.id, }, }).then((data) => { data.items = data.items.map((item) => wrapResourceType(makeRequest, item)); return data; }); }, }; } /** * @internal * @param data - raw ResourceProvider Object * @returns Object containing the http params for the ResourceProvider request: organizationId and appDefinitionId */ const getParams = (data) => ({ organizationId: data.sys.organization.sys.id, appDefinitionId: data.sys.appDefinition.sys.id, }); /** * @internal * @param data - raw ResourceProvider Object * @returns UpsertResourceProviderProps */ const getUpsertParams = (data) => ({ sys: { id: data.sys.id }, type: data.type, function: data.function, }); /** * @internal * @param makeRequest - function to make requests via an adapter * @param data - Raw Resource Provider data * @returns Wrapped Resource Provider data */ function wrapResourceProvider(makeRequest, data) { const resourceProvider = toPlainObject(copy(data)); const ResourceProviderWithMethods = enhanceWithMethods(resourceProvider, createResourceProviderApi(makeRequest)); return freezeSys(ResourceProviderWithMethods); } export { wrapResourceProvider }; //# sourceMappingURL=resource-provider.js.map