@planet-a/affinity-node
Version:
API wrapper for the affinity.co API
144 lines (143 loc) • 4.88 kB
JavaScript
import { defaultTransformers } from './axios_default_transformers.js';
import { FieldValueType } from './lists.js';
import { fieldValuesUrl } from './urls.js';
/**
* @module
* Field values are displayed in Affinity as the data in the cells of an Affinity spreadsheet.
*
* As an example for how a field value is created:
* 1. Assume there exists a list of people called "Business Development Leads".
* 2. A custom field called "Deal Size" is created on this list. Fields are visually displayed as columns.
* 3. A person X is added to this list. This action creates a list entry for this person.
* 4. A value, 50,000, is entered in the cell corresponding to person X in the Deal Size column.
* 5. 50,000 is now a field value tied to the list entry corresponding to person X, and the "Deal Size" field.
*
* *Notes*:
* - By default, Affinity creates some fields for you automatically. These include Location, Industry, Job Titles, and more. See the [Default Fields section](https://api-docs.affinity.co/#default-fields) for more information.
* - Opportunities cannot have global field values
*/
export class FieldValues {
/** @hidden */
constructor(axios) {
Object.defineProperty(this, "axios", {
enumerable: true,
configurable: true,
writable: true,
value: axios
});
}
static transformFieldValue(fieldValue) {
return {
...fieldValue,
value: fieldValue.value_type === FieldValueType.DATE
? new Date(fieldValue.value)
: fieldValue.value,
updated_at: fieldValue.updated_at === null
? null
: new Date(fieldValue.updated_at),
created_at: new Date(fieldValue.created_at),
};
}
/**
* Fetches field values based on the provided parameters.
*
* @returns An array of field value objects.
*
* @example
* ```typescript
* const fieldValues = await affinity.fieldValues.getAll({ person_id: 1234 })
* console.log(fieldValues)
* ```
*/
async all(params) {
const response = await this.axios.get(fieldValuesUrl(), {
params,
transformResponse: [
...defaultTransformers(),
(json) => {
return json.map(FieldValues.transformFieldValue);
},
],
});
return response.data;
}
/**
* Creates a new field value.
*
* @param data - Object containing the data for creating a new field value
* @returns The created field value object.
*
* @example
* ```typescript
* const newFieldValue = await affinity.fieldValues.create({
* field_id: 1284,
* entity_id: 38706,
* value: "Architecture"
* })
* console.log(newFieldValue)
* ```
*/
async create(data) {
const response = await this.axios.post(fieldValuesUrl(), {
...data,
value: data.value instanceof Date
? data.value.toISOString()
: data.value,
}, {
transformResponse: [
...defaultTransformers(),
(json) => {
return FieldValues.transformFieldValue(json);
},
],
});
return response.data;
}
/**
* Updates an existing field value.
*
* @param data - Object containing the data for updating a field value
* @returns The updated field value object.
*
* @example
* ```typescript
* const updatedFieldValue = await affinity.fieldValues.update({
* field_value_id: 20406836,
* value: "Healthcare"
* })
* console.log(updatedFieldValue)
* ```
*/
async update(data) {
const response = await this.axios.put(fieldValuesUrl(data.field_value_id), {
value: data.value instanceof Date
? data.value.toISOString()
: data.value,
}, {
transformResponse: [
...defaultTransformers(),
(json) => {
return FieldValues.transformFieldValue(json);
},
],
});
return response.data;
}
/**
* Deletes a specific field value.
*
* @returns boolean indicating whether the field value was successfully deleted.
*
* @example
* ```typescript
* const success = await affinity.fieldValues.delete({
* field_value_id: 20406836
* })
* console.log(success ? 'Field value deleted': 'Field value not deleted')
* ```
*/
async delete({ field_value_id }) {
const response = await this.axios.delete(fieldValuesUrl(field_value_id));
return response.data.success === true;
}
}