diff --git a/Gemfile b/Gemfile index 6fdf8561..6852a4c3 100644 --- a/Gemfile +++ b/Gemfile @@ -37,13 +37,13 @@ gem 'resource_api', git: 'https://github.com/performant-software/resource-api.gi gem 'jwt_auth', git: 'https://github.com/performant-software/jwt-auth.git', tag: 'v0.1.3' # Core data -gem 'core_data_connector', git: 'https://github.com/performant-software/core-data-connector.git', tag: 'v0.1.109' +gem 'core_data_connector', git: 'https://github.com/performant-software/core-data-connector.git', tag: 'v0.1.111' # IIIF gem 'triple_eye_effable', git: 'https://github.com/performant-software/triple-eye-effable.git', tag: 'v0.2.7' # User defined fields -gem 'user_defined_fields', git: 'https://github.com/performant-software/user-defined-fields.git', tag: 'v0.1.14' +gem 'user_defined_fields', git: 'https://github.com/performant-software/user-defined-fields.git', tag: 'v0.1.15' # Fuzzy dates gem 'fuzzy_dates', git: 'https://github.com/performant-software/fuzzy-dates.git', tag: 'v0.1.2' diff --git a/Gemfile.lock b/Gemfile.lock index 2b01be60..8e0bc999 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ GIT remote: https://github.com/performant-software/core-data-connector.git - revision: 727ca617ce80b2d9dc29f2cb0f80f707df31335d - tag: v0.1.109 + revision: b7786f958414034ed449c89350fff768ec4f94be + tag: v0.1.111 specs: core_data_connector (0.1.0) activerecord-postgis-adapter (~> 11.0) @@ -59,8 +59,8 @@ GIT GIT remote: https://github.com/performant-software/user-defined-fields.git - revision: 9799f151ab51506eef42177c756b762060a9838a - tag: v0.1.14 + revision: 3fe09c999fa5193e8de9e1253e60d25c95a40af8 + tag: v0.1.15 specs: user_defined_fields (0.1.0) rails (>= 6.0.3.2, < 9) @@ -245,7 +245,7 @@ GEM racc (~> 1.4) nokogiri (1.18.9-x86_64-linux-gnu) racc (~> 1.4) - oj (3.16.12) + oj (3.16.13) bigdecimal (>= 3.0) ostruct (>= 0.2) ostruct (0.6.3) diff --git a/client/src/components/ItemPage.js b/client/src/components/ItemPage.js index 7aae5634..1bbd619c 100644 --- a/client/src/components/ItemPage.js +++ b/client/src/components/ItemPage.js @@ -49,7 +49,14 @@ type ComponentProps = { saved?: boolean }; -const ItemPage = ({ form: Form, onInitialize, onSave }: Props) => { +const ItemPage = (props: Props) => { + const { + form: Form, + onCreateManifests, + onInitialize, + onSave + } = props; + const { t } = useTranslation(); const Component = useCallback((props: ComponentProps) => { @@ -152,7 +159,9 @@ const ItemPage = ({ form: Form, onInitialize, onSave }: Props) => { saving={props.saving} /> - + { projectModel?.allow_identifiers && props.item.id && (
{ const Page = withReactRouterEditPage(Component, { id: 'itemId', + onCreateManifests, onSave, onInitialize, resolveValidationError: Validation.resolveUpdateError.bind(this) diff --git a/client/src/components/ProjectModelRelationshipFactory.js b/client/src/components/ProjectModelRelationshipFactory.js index 622f5fbe..a5f379fd 100644 --- a/client/src/components/ProjectModelRelationshipFactory.js +++ b/client/src/components/ProjectModelRelationshipFactory.js @@ -1,4 +1,4 @@ -// flow +// @flow import React, { useMemo } from 'react'; import RelatedEvent from './RelatedEvent'; @@ -13,7 +13,12 @@ import RelatedWork from './RelatedWork'; import { Types } from '../utils/ProjectModels'; import useProjectModelRelationship from '../hooks/ProjectModelRelationship'; -const ProjectModelRelationshipFactory = (props) => { +type Props = { + onCreateManifests: (id: number, params: { [key: string]: any }) => Promise, + relationshipId: number +}; + +const ProjectModelRelationshipFactory = (props: Props) => { const { projectModelRelationship } = useProjectModelRelationship(); /** @@ -56,6 +61,7 @@ const ProjectModelRelationshipFactory = (props) => { case Types.MediaContent: component = ( ); diff --git a/client/src/components/ProjectModelRelationshipsFactory.js b/client/src/components/ProjectModelRelationshipsFactory.js index 164e6c10..9785caef 100644 --- a/client/src/components/ProjectModelRelationshipsFactory.js +++ b/client/src/components/ProjectModelRelationshipsFactory.js @@ -16,7 +16,11 @@ import RelationshipsService from '../services/Relationships'; import { Types } from '../utils/ProjectModels'; import useProjectModelRelationship from '../hooks/ProjectModelRelationship'; -const ProjectModelRelationshipsFactory = () => { +type Props = { + onCreateManifests: (id: number, params: { [key: string] : any }) => Promise +}; + +const ProjectModelRelationshipsFactory = (props: Props) => { const [loaded, setLoaded] = useState(false); const [relationships, setRelationships] = useState(); @@ -87,7 +91,9 @@ const ProjectModelRelationshipsFactory = () => { if (classView === Types.MediaContent) { return ( - + ); } @@ -136,6 +142,7 @@ const ProjectModelRelationshipsFactory = () => { return ( ); diff --git a/client/src/components/RelatedMediaContent.js b/client/src/components/RelatedMediaContent.js index 93272deb..fc26f78c 100644 --- a/client/src/components/RelatedMediaContent.js +++ b/client/src/components/RelatedMediaContent.js @@ -1,30 +1,37 @@ // @flow import { EditModal, FileInputButton, LazyIIIF } from '@performant-software/semantic-components'; -import { IIIF as IIIFUtils } from '@performant-software/shared-components'; import type { EditContainerProps } from '@performant-software/shared-components/types'; import React, { useCallback, useContext, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, Form } from 'semantic-ui-react'; import _ from 'underscore'; +import ItemContext from '../context/Item'; +import ManifestUrlButton from './ManifestUrlButton'; +import MediaContentUtils from '../utils/MediaContent'; import MediaContentsService from '../services/MediaContents'; import ProjectContext from '../context/Project'; import RelatedMediaContentModal from './RelatedMediaContentModal'; import type { Relationship as RelationshipType } from '../types/Relationship'; import RelationshipsService from '../services/Relationships'; -import { useRelationship } from '../hooks/Relationship'; +import useParams from '../hooks/ParsedParams'; import useProjectModelRelationship from '../hooks/ProjectModelRelationship'; +import { useRelationship } from '../hooks/Relationship'; import withRelationshipEditForm from '../hooks/RelationshipEditForm'; type Props = EditContainerProps & { - item: RelationshipType + item: RelationshipType, + onCreateManifests: (id: number, params: { [key: string] : any }) => Promise }; const RelatedMediaContentForm = (props: Props) => { const [editModal, setEditModal] = useState(false); + const [saving, setSaving] = useState(false); - const { project } = useContext(ProjectContext); - const { foreignProjectModelId } = useProjectModelRelationship(); + const { project, projectModel } = useContext(ProjectContext); + const { uuid } = useContext(ItemContext); + const { itemId } = useParams(); + const { foreignProjectModelId, projectModelRelationship } = useProjectModelRelationship(); const { t } = useTranslation(); const { @@ -35,11 +42,27 @@ const RelatedMediaContentForm = (props: Props) => { } = useRelationship(props); /** - * Sets the manifest URL. + * Memo-izes the manifest URL. + */ + const manifestUrl = useMemo(() => ( + MediaContentUtils.getManifestURL(projectModel, uuid, projectModelRelationship.uuid) + ), [projectModel, projectModelRelationship, uuid]) + + /** + * Calls the onCreateManifests callback. * - * @type {string|string|*} + * @type {(function(): void)|*} */ - const manifest = useMemo(() => (IIIFUtils.createManifestURL(foreignObject?.manifest)), [foreignObject?.manifest]); + const onCreateManifest = useCallback(() => { + setSaving(true); + + const params = { + project_model_relationship_id: projectModelRelationship.id + }; + + props.onCreateManifests(itemId, params) + .then(() => setSaving(false)); + }, [itemId, projectModelRelationship]) /** * Deletes the current relationship. @@ -93,7 +116,7 @@ const RelatedMediaContentForm = (props: Props) => { contentType={foreignObject?.content_type} downloadUrl={foreignObject?.content_download_url} key={foreignObject?.id} - manifest={manifest} + manifest={manifestUrl} preview={foreignObject?.content_preview_url} src={foreignObject?.content_url} > @@ -116,11 +139,22 @@ const RelatedMediaContentForm = (props: Props) => { { props.item.id && ( <>
); }; -const Relationships = () => { +const Relationships = (props) => { const { projectModel } = useContext(ProjectContext); const { itemId } = useParams(); @@ -53,6 +55,7 @@ const Relationships = () => { return _.map(projectModel.all_project_model_relationships, (projectModelRelationship) => ( )); diff --git a/client/src/hooks/RelationshipEditForm.js b/client/src/hooks/RelationshipEditForm.js index 59b8c072..c6ac513b 100644 --- a/client/src/hooks/RelationshipEditForm.js +++ b/client/src/hooks/RelationshipEditForm.js @@ -67,7 +67,7 @@ const withRelationshipEditForm = (WrappedComponent) => (props: Props) => { * * @type {unknown} */ - const Component = useMemo(() => , [props]); + const Component = useMemo(() => , [id, props]); return Component; }; diff --git a/client/src/i18n/en.json b/client/src/i18n/en.json index 636b6795..f10fcc87 100644 --- a/client/src/i18n/en.json +++ b/client/src/i18n/en.json @@ -842,7 +842,15 @@ "name": "Name" } }, + "RelatedMediaContent": { + "buttons": { + "refreshManifest": "Refresh Manifest" + } + }, "RelatedMediaContents": { + "buttons": { + "refreshManifest": "Refresh Manifest" + }, "options": { "link": "Link existing record", "upload": "Upload from your computer" diff --git a/client/src/pages/Event.js b/client/src/pages/Event.js index c6b2b85e..f19f89fc 100644 --- a/client/src/pages/Event.js +++ b/client/src/pages/Event.js @@ -8,6 +8,10 @@ import EventsService from '../services/Events'; const Person = () => ( ( + EventsService + .createManifests(id, params) + )} onInitialize={(id) => ( EventsService .fetchOne(id) diff --git a/client/src/pages/Instance.js b/client/src/pages/Instance.js index ac54ab4f..93f26605 100644 --- a/client/src/pages/Instance.js +++ b/client/src/pages/Instance.js @@ -8,6 +8,10 @@ import ItemPage from '../components/ItemPage'; const Instance = () => ( ( + InstancesService + .createManifests(id, params) + )} onInitialize={(id) => ( InstancesService .fetchOne(id) diff --git a/client/src/pages/Item.js b/client/src/pages/Item.js index bc6d34c9..010bef4f 100644 --- a/client/src/pages/Item.js +++ b/client/src/pages/Item.js @@ -8,6 +8,10 @@ import ItemsService from '../services/Items'; const Item = () => ( ( + ItemsService + .createManifests(id, params) + )} onInitialize={(id) => ( ItemsService .fetchOne(id) diff --git a/client/src/pages/MediaContent.js b/client/src/pages/MediaContent.js index ae6dbd41..fd34056d 100644 --- a/client/src/pages/MediaContent.js +++ b/client/src/pages/MediaContent.js @@ -12,6 +12,10 @@ const MediaContent = () => { return ( ( + MediaContentsService + .createManifests(id, params) + )} onInitialize={(id) => ( MediaContentsService .fetchOne(id) diff --git a/client/src/pages/Organization.js b/client/src/pages/Organization.js index 1b34d4f5..7ed2922a 100644 --- a/client/src/pages/Organization.js +++ b/client/src/pages/Organization.js @@ -8,6 +8,10 @@ import OrganizationService from '../services/Organizations'; const Organization = () => ( ( + OrganizationService + .createManifests(id, params) + )} onInitialize={(id) => ( OrganizationService .fetchOne(id) diff --git a/client/src/pages/Person.js b/client/src/pages/Person.js index 5be28a74..24e05da5 100644 --- a/client/src/pages/Person.js +++ b/client/src/pages/Person.js @@ -8,6 +8,10 @@ import PersonForm from '../components/PersonForm'; const Person = () => ( ( + PeopleService + .createManifests(id, params) + )} onInitialize={(id) => ( PeopleService .fetchOne(id) diff --git a/client/src/pages/Place.js b/client/src/pages/Place.js index f8871f22..3057ff6c 100644 --- a/client/src/pages/Place.js +++ b/client/src/pages/Place.js @@ -8,6 +8,10 @@ import PlacesService from '../services/Places'; const Place = () => ( ( + PlacesService + .createManifests(id, params) + )} onInitialize={(id) => ( PlacesService .fetchOne(id) diff --git a/client/src/pages/TaxonomyItem.js b/client/src/pages/TaxonomyItem.js index 16eada71..4b755ed9 100644 --- a/client/src/pages/TaxonomyItem.js +++ b/client/src/pages/TaxonomyItem.js @@ -8,6 +8,10 @@ import TaxonomyItemForm from '../components/TaxonomyItemForm'; const TaxonomyItem = () => ( ( + TaxonomiesService + .createManifests(id, params) + )} onInitialize={(id) => ( TaxonomiesService .fetchOne(id) diff --git a/client/src/pages/Work.js b/client/src/pages/Work.js index efa9ffab..b36654e5 100644 --- a/client/src/pages/Work.js +++ b/client/src/pages/Work.js @@ -8,6 +8,10 @@ import WorksService from '../services/Works'; const Work = () => ( ( + WorksService + .createManifests(id, params) + )} onInitialize={(id) => ( WorksService .fetchOne(id) diff --git a/client/src/services/Base.js b/client/src/services/Base.js new file mode 100644 index 00000000..ebdb778f --- /dev/null +++ b/client/src/services/Base.js @@ -0,0 +1,51 @@ +// @flow + +import { BaseService as APIBase } from '@performant-software/shared-components'; + +/** + * Class responsible for handling all merge and manifests API requests. + */ +class BaseService extends APIBase { + /** + * Constructs a new BaseService object. This constructor should never be used directly. + */ + constructor() { + super(); + + if (this.constructor === BaseService) { + throw new TypeError('Abstract class "BaseService" cannot be instantiated directly.'); + } + } + + /** + * Calls the /core_data///create_manifests API endpoint. + * + * @param id + * @param params + * + * @returns {*} + */ + createManifests(id, params = {}) { + const transform = this.getTransform(); + const payload = transform.toManifestable(params); + + return this.getAxios().post(`${this.getBaseUrl()}/${id}/create_manifests`, payload, this.getConfig()); + } + + /** + * Calls the /core_data//merge API endpoint. + * + * @param item + * @param ids + * + * @returns {*} + */ + mergeRecords(item, ids) { + const transform = this.getTransform(); + const payload = transform.toMergeable(item, ids); + + return this.getAxios().post(`${this.getBaseUrl()}/merge`, payload, this.getConfig()); + } +} + +export default BaseService; diff --git a/client/src/services/Events.js b/client/src/services/Events.js index dac4384f..b5cb2de0 100644 --- a/client/src/services/Events.js +++ b/client/src/services/Events.js @@ -1,12 +1,12 @@ // @flow +import BaseService from './Base'; import EventTransform from '../transforms/Event'; -import MergeableService from './Mergeable'; /** * Class responsible for handling all event API requests. */ -class Events extends MergeableService { +class Events extends BaseService { /** * Returns the event base URL. * diff --git a/client/src/services/Instances.js b/client/src/services/Instances.js index ecceb699..54432215 100644 --- a/client/src/services/Instances.js +++ b/client/src/services/Instances.js @@ -1,12 +1,12 @@ // @flow +import BaseService from './Base'; import InstanceTransform from '../transforms/Instance'; -import MergeableService from './Mergeable'; /** * Class responsible for handling all Instance API requests. */ -class Instances extends MergeableService { +class Instances extends BaseService { /** * Returns the Instance base URL. * diff --git a/client/src/services/Items.js b/client/src/services/Items.js index 478dc5b9..ba41422e 100644 --- a/client/src/services/Items.js +++ b/client/src/services/Items.js @@ -1,13 +1,13 @@ // @flow +import BaseService from './Base'; import Importable from '../transforms/Importable'; import ItemTransform from '../transforms/Item'; -import MergeableService from './Mergeable'; /** * Class responsible for handling all item API requests. */ -class Items extends MergeableService { +class Items extends BaseService { /** * Calls the `/items/:id/analyze_import` API endpoint. * diff --git a/client/src/services/MediaContents.js b/client/src/services/MediaContents.js index ab0d4b71..70a36f81 100644 --- a/client/src/services/MediaContents.js +++ b/client/src/services/MediaContents.js @@ -1,8 +1,8 @@ // @flow import { TripleEyeEffable } from '@performant-software/shared-components'; +import BaseService from './Base'; import MediaContentTransform from '../transforms/MediaContent'; -import MergeableService from './Mergeable'; import type { MediaContent as MediaContentType } from '../types/MediaContent'; import type { Project as ProjectType } from '../types/Project'; import SessionService from './Session'; @@ -10,7 +10,7 @@ import SessionService from './Session'; /** * Class responsible for handling all media contents API requests. */ -class MediaContents extends MergeableService { +class MediaContents extends BaseService { /** * Returns the media contents base URL. * diff --git a/client/src/services/Mergeable.js b/client/src/services/Mergeable.js deleted file mode 100644 index 6eb996d6..00000000 --- a/client/src/services/Mergeable.js +++ /dev/null @@ -1,34 +0,0 @@ -// @flow - -import { BaseService } from '@performant-software/shared-components'; - -/** - * Class responsible for handling all merge API requests. - */ -class MergeableService extends BaseService { - /** - * Constructs a new MergeableService object. This constructor should never be used directly. - */ - constructor() { - super(); - - if (this.constructor === MergeableService) { - throw new TypeError('Abstract class "MergeableService" cannot be instantiated directly.'); - } - } - - /** - * Calls the /core_data//merge API endpoint. - * - * @param item - * @param ids - * - * @returns {*} - */ - mergeRecords(item, ids) { - const transform = this.getTransform(); - return this.getAxios().post(`${this.getBaseUrl()}/merge`, transform.toMergeable(item, ids), this.getConfig()); - } -} - -export default MergeableService; diff --git a/client/src/services/Organizations.js b/client/src/services/Organizations.js index 28349903..783ef489 100644 --- a/client/src/services/Organizations.js +++ b/client/src/services/Organizations.js @@ -1,12 +1,12 @@ // @flow -import MergeableService from './Mergeable'; +import BaseService from './Base'; import OrganizationTransform from '../transforms/Organization'; /** * Class responsible for handling all organization API requests. */ -class Organization extends MergeableService { +class Organization extends BaseService { /** * Returns the organization base URL. * diff --git a/client/src/services/People.js b/client/src/services/People.js index 4272bfc8..4654c5a4 100644 --- a/client/src/services/People.js +++ b/client/src/services/People.js @@ -1,12 +1,12 @@ // @flow -import MergeableService from './Mergeable'; +import BaseService from './Base'; import PersonTransform from '../transforms/Person'; /** * Class responsible for handling all person API requests. */ -class People extends MergeableService { +class People extends BaseService { /** * Returns the person base URL. * diff --git a/client/src/services/Places.js b/client/src/services/Places.js index 7eae7f43..845b8a34 100644 --- a/client/src/services/Places.js +++ b/client/src/services/Places.js @@ -1,12 +1,12 @@ // @flow -import MergeableService from './Mergeable'; +import BaseService from './Base'; import PlaceTransform from '../transforms/Place'; /** * Class responsible for handling all place API requests. */ -class Places extends MergeableService { +class Places extends BaseService { /** * Returns the places base URL. * diff --git a/client/src/services/Taxonomies.js b/client/src/services/Taxonomies.js index 3acccbd9..5287d03d 100644 --- a/client/src/services/Taxonomies.js +++ b/client/src/services/Taxonomies.js @@ -1,12 +1,12 @@ // @flow -import MergeableService from './Mergeable'; +import BaseService from './Base'; import TaxonomyTransform from '../transforms/Taxonomy'; /** * Class responsible for handling all taxonomy API requests. */ -class Taxonomies extends MergeableService { +class Taxonomies extends BaseService { /** * Returns the taxonomy base URL. * diff --git a/client/src/services/Works.js b/client/src/services/Works.js index 8380de9f..1500aa73 100644 --- a/client/src/services/Works.js +++ b/client/src/services/Works.js @@ -1,12 +1,12 @@ // @flow -import MergeableService from './Mergeable'; +import BaseService from './Base'; import WorkTransform from '../transforms/Work'; /** * Class responsible for handling all work API requests. */ -class Works extends MergeableService { +class Works extends BaseService { /** * Returns the work base URL. * diff --git a/client/src/transforms/Mergeable.js b/client/src/transforms/Base.js similarity index 50% rename from client/src/transforms/Mergeable.js rename to client/src/transforms/Base.js index 66626c54..13fe20cd 100644 --- a/client/src/transforms/Mergeable.js +++ b/client/src/transforms/Base.js @@ -1,11 +1,23 @@ // @flow -import { BaseTransform, ObjectJs as ObjectUtils } from '@performant-software/shared-components'; +import { BaseTransform as APIBase, ObjectJs as ObjectUtils } from '@performant-software/shared-components'; +import _ from 'underscore'; /** * Class responsible for transforming records for merge requests. */ -class MergeableTransform extends BaseTransform { +class BaseTransform extends APIBase { + /** + * Returns a hash of the valid parameters for the manifests endpoint. + * + * @param params + * + * @returns {*} + */ + toManifestable(params) { + return _.pick(params, 'project_model_relationship_id'); + } + /** * Converts the passed item to a mergeable payload by removing any "id" attributes. * @@ -22,4 +34,4 @@ class MergeableTransform extends BaseTransform { } } -export default MergeableTransform; +export default BaseTransform; diff --git a/client/src/transforms/Event.js b/client/src/transforms/Event.js index 958364e0..13e0df3a 100644 --- a/client/src/transforms/Event.js +++ b/client/src/transforms/Event.js @@ -1,13 +1,12 @@ // @flow -import { FuzzyDateTransform } from '@performant-software/shared-components'; +import BaseTransform from './Base'; import type { Event as EventType } from '../types/Event'; -import MergeableTransform from './Mergeable'; /** * Class responsible for transforming event records for POST/PUT requests. */ -class Event extends MergeableTransform { +class Event extends BaseTransform { /** * Returns the event parameter name. * diff --git a/client/src/transforms/Instance.js b/client/src/transforms/Instance.js index f1c4d8df..4612113e 100644 --- a/client/src/transforms/Instance.js +++ b/client/src/transforms/Instance.js @@ -1,13 +1,13 @@ // @flow +import BaseTransform from './Base'; import type { Instance as InstanceType } from '../types/Instance'; -import MergeableTransform from './Mergeable'; import SourceNames from './SourceNames'; /** * Class responsible for transforming instance records for POST/PUT requests. */ -class Instance extends MergeableTransform { +class Instance extends BaseTransform { /** * Returns the instance parameter name. * diff --git a/client/src/transforms/Item.js b/client/src/transforms/Item.js index bdffcaf7..1c4d6921 100644 --- a/client/src/transforms/Item.js +++ b/client/src/transforms/Item.js @@ -2,14 +2,14 @@ import { DataTypes } from '@performant-software/user-defined-fields'; import _ from 'underscore'; +import BaseTransform from './Base'; import type { Item as ItemType } from '../types/Item'; -import MergeableTransform from './Mergeable'; import SourceNames from './SourceNames'; /** * Class responsible for transforming item records for POST/PUT requests. */ -class Item extends MergeableTransform { +class Item extends BaseTransform { /** * Returns the item parameter name. * diff --git a/client/src/transforms/MediaContent.js b/client/src/transforms/MediaContent.js index 0f798e60..42a67644 100644 --- a/client/src/transforms/MediaContent.js +++ b/client/src/transforms/MediaContent.js @@ -36,6 +36,17 @@ class MediaContent extends FormDataTransform { ]; } + /** + * Returns the valid parameters for the create_manifests endpoint. + * + * @param params + * + * @returns {*} + */ + toManifestable(params: { [key: string]: any }) { + return _.pick(params, 'project_model_relationship_id'); + } + /** * Converts the passed media contents to a mergeable payload by removing any "id" attributes. * diff --git a/client/src/transforms/Organization.js b/client/src/transforms/Organization.js index 0e2968a1..26048d45 100644 --- a/client/src/transforms/Organization.js +++ b/client/src/transforms/Organization.js @@ -1,13 +1,13 @@ // @flow -import MergeableTransform from './Mergeable'; +import BaseTransform from './Base'; import type { Organization as OrganizationType } from '../types/Organization'; import OrganizationNames from './OrganizationNames'; /** * Class responsible for transforming organization records for POST/PUT requests. */ -class Organization extends MergeableTransform { +class Organization extends BaseTransform { /** * Returns the person parameter name. * diff --git a/client/src/transforms/Person.js b/client/src/transforms/Person.js index 0ca61727..3ca07114 100644 --- a/client/src/transforms/Person.js +++ b/client/src/transforms/Person.js @@ -1,14 +1,14 @@ // @flow import _ from 'underscore'; -import MergeableTransform from './Mergeable'; +import BaseTransform from './Base'; import type { Person as PersonType } from '../types/Person'; import PersonNames from './PersonNames'; /** * Class responsible for transforming person records for POST/PUT requests. */ -class Person extends MergeableTransform { +class Person extends BaseTransform { /** * Returns the person parameter name. * diff --git a/client/src/transforms/Place.js b/client/src/transforms/Place.js index 75e2b343..29aca8ec 100644 --- a/client/src/transforms/Place.js +++ b/client/src/transforms/Place.js @@ -1,7 +1,7 @@ // @flow import _ from 'underscore'; -import MergeableTransform from './Mergeable'; +import BaseTransform from './Base'; import type { Place as PlaceType } from '../types/Place'; import PlaceGeometry from './PlaceGeometry'; import PlaceLayers from './PlaceLayers'; @@ -10,7 +10,7 @@ import PlaceNames from './PlaceNames'; /** * Class responsible for transforming place records for POST/PUT requests. */ -class Place extends MergeableTransform { +class Place extends BaseTransform { /** * Returns the place parameter name. * diff --git a/client/src/transforms/Taxonomy.js b/client/src/transforms/Taxonomy.js index 51dac7a0..6c67165e 100644 --- a/client/src/transforms/Taxonomy.js +++ b/client/src/transforms/Taxonomy.js @@ -1,12 +1,12 @@ // @flow -import MergeableTransform from './Mergeable'; +import BaseTransform from './Base'; import type { Taxonomy as TaxonomyType } from '../types/Taxonomy'; /** * Class responsible for transforming taxonomy records for POST/PUT requests. */ -class Taxonomy extends MergeableTransform { +class Taxonomy extends BaseTransform { /** * Returns the taxonomy parameter name. * diff --git a/client/src/transforms/Work.js b/client/src/transforms/Work.js index 3548ab7f..6ba91781 100644 --- a/client/src/transforms/Work.js +++ b/client/src/transforms/Work.js @@ -1,10 +1,10 @@ // @flow -import MergeableTransform from './Mergeable'; +import BaseTransform from './Base'; import SourceNames from './SourceNames'; import type { Work as WorkType } from '../types/Work'; -class Work extends MergeableTransform { +class Work extends BaseTransform { /** * Returns the work parameter name. *