From 0fa8dba2169d93fbd645122aacb0b23b0b12b013 Mon Sep 17 00:00:00 2001 From: Tanner Barlow Date: Mon, 15 Apr 2019 12:43:49 -0700 Subject: [PATCH] Editor Page and canvas upates --- src/common/mockFactory.ts | 2 - .../components/pages/editorPage/canvas.tsx | 20 +++++++--- .../pages/editorPage/editorPage.tsx | 40 +++++++++++-------- src/services/assetService.ts | 3 ++ src/services/projectService.test.ts | 29 -------------- src/services/projectService.ts | 20 +--------- 6 files changed, 42 insertions(+), 72 deletions(-) diff --git a/src/common/mockFactory.ts b/src/common/mockFactory.ts index 60a2e6e7b5..1db2f08d61 100644 --- a/src/common/mockFactory.ts +++ b/src/common/mockFactory.ts @@ -802,8 +802,6 @@ export default class MockFactory { save: jest.fn((project: IProject) => Promise.resolve(project)), delete: jest.fn((project: IProject) => Promise.resolve()), isDuplicate: jest.fn((project: IProject, projectList: IProject[]) => true), - renameTag: jest.fn(), - deleteTag: jest.fn(), }; } diff --git a/src/react/components/pages/editorPage/canvas.tsx b/src/react/components/pages/editorPage/canvas.tsx index 33d9dc5f6a..e73ce4efbd 100644 --- a/src/react/components/pages/editorPage/canvas.tsx +++ b/src/react/components/pages/editorPage/canvas.tsx @@ -192,12 +192,20 @@ export default class Canvas extends React.Component return this.state.currentAsset.regions.filter((r) => selectedRegions.find((id) => r.id === id)); } - public updateCanvasToolsRegions = (): void => { - for (const region of this.state.currentAsset.regions) { - this.editor.RM.updateTagsById( - region.id, - CanvasHelpers.getTagsDescriptor(this.props.project.tags, region), - ); + public updateCanvasToolsRegions = (asset?: IAssetMetadata): void => { + if (asset) { + this.setState({ + currentAsset: asset, + }); + this.clearAllRegions(); + this.addRegionsToCanvasTools(asset.regions); + } else { + for (const region of this.state.currentAsset.regions) { + this.editor.RM.updateTagsById( + region.id, + CanvasHelpers.getTagsDescriptor(this.props.project.tags, region), + ); + } } } diff --git a/src/react/components/pages/editorPage/editorPage.tsx b/src/react/components/pages/editorPage/editorPage.tsx index dcbf10f08b..bba44a2248 100644 --- a/src/react/components/pages/editorPage/editorPage.tsx +++ b/src/react/components/pages/editorPage/editorPage.tsx @@ -229,7 +229,7 @@ export default class EditorPage extends React.Component
(t.name === tagName) ? {...t, name: newTagName} : t), + } this.setState({ - selectedAsset: asset, project: newProject, + selectedAsset: asset || selectedAsset, + }, async () => { + await this.props.actions.saveProject(newProject); + if (asset) { + this.canvas.current.updateCanvasToolsRegions(asset); + } }); } @@ -328,18 +333,21 @@ export default class EditorPage extends React.Component => { - const { project, selectedAsset } = this.state; - const assetService = new AssetService(project); - const asset = await assetService.deleteTag(project.assets, tagName, selectedAsset); - - const projectService = new ProjectService(); - const newProject = projectService.deleteTag(project, tagName); + const { selectedAsset } = this.state; + const { project } = this.props; + const newProject: IProject = { + ...project, + tags: project.tags.filter((t) => t.name !== tagName) + } await this.props.actions.saveProject(newProject); + debugger; - this.setState({ - selectedAsset: asset, - project: newProject, - }); + const assetService = new AssetService(project); + const asset = await assetService.deleteTag(project.assets, tagName, selectedAsset); + if (asset) { + this.canvas.current.updateCanvasToolsRegions(asset); + this.setState({selectedAsset: asset}); + } } private onCtrlTagClicked = (tag: ITag): void => { diff --git a/src/services/assetService.ts b/src/services/assetService.ts index 99208ecdca..c87b3b795d 100644 --- a/src/services/assetService.ts +++ b/src/services/assetService.ts @@ -243,6 +243,9 @@ export class AssetService { tagName: string, transformer: (tags: string[]) => string[], currentAsset?: IAssetMetadata): Promise { + if (!assets) { + return; + } const assetKeys = Object.keys(assets); // Loop over assets and update if necessary for (const assetKey of assetKeys) { diff --git a/src/services/projectService.test.ts b/src/services/projectService.test.ts index 9f5b6278ed..f610e750a3 100644 --- a/src/services/projectService.test.ts +++ b/src/services/projectService.test.ts @@ -157,33 +157,4 @@ describe("Project Service", () => { await projectSerivce.delete(testProject); expect(storageProviderMock.deleteFile.mock.calls).toHaveLength(assets.length + 1); }); - - it("Deletes a tag from project", () => { - const tag = MockFactory.createTestTag(); - const project: IProject = { - ...MockFactory.createTestProject(), - tags: [tag], - }; - const projectService = new ProjectService(); - expect(projectSerivce.deleteTag(project, tag.name)).toEqual({ - ...project, - tags: [], - }); - }); - - it("Renames a tag within project", () => { - const tag = MockFactory.createTestTag(); - const project: IProject = { - ...MockFactory.createTestProject(), - tags: [tag], - }; - const projectService = new ProjectService(); - expect(projectSerivce.renameTag(project, tag.name, "test")).toEqual({ - ...project, - tags: [{ - name: "test", - color: expect.any(String), - }], - }); - }); }); diff --git a/src/services/projectService.ts b/src/services/projectService.ts index e092c5343d..3b868cf27f 100644 --- a/src/services/projectService.ts +++ b/src/services/projectService.ts @@ -1,14 +1,12 @@ import _ from "lodash"; import shortid from "shortid"; import { StorageProviderFactory } from "../providers/storage/storageProviderFactory"; -import { IProject, ISecurityToken, AppError, ErrorCode, AssetState, IAssetMetadata } from "../models/applicationState"; +import { IProject, ISecurityToken, AppError, ErrorCode, AssetState } from "../models/applicationState"; import Guard from "../common/guard"; import { constants } from "../common/constants"; import { ExportProviderFactory } from "../providers/export/exportProviderFactory"; import { decryptProject, encryptProject } from "../common/utils"; import packageJson from "../../package.json"; -import { AssetService } from "./assetService"; -import { forEachAsync } from "../common/extensions/array"; /** * Functions required for a project service @@ -20,8 +18,6 @@ export interface IProjectService { save(project: IProject, securityToken: ISecurityToken): Promise; delete(project: IProject): Promise; isDuplicate(project: IProject, projectList: IProject[]): boolean; - deleteTag(project: IProject, tagName: string): IProject; - renameTag(project: IProject, tagName: string, newTagName: string); } /** @@ -104,20 +100,6 @@ export default class ProjectService implements IProjectService { return (duplicateProjects !== undefined); } - public deleteTag(project: IProject, tagName: string): IProject { - return { - ...project, - tags: project.tags.filter((t) => t.name !== tagName), - }; - } - - public renameTag(project: IProject, tagName: string, newTagName: string): IProject { - return { - ...project, - tags: project.tags.map((t) => (t.name === tagName) ? {...t, name: newTagName} : t), - }; - } - private async saveExportSettings(project: IProject): Promise { if (!project.exportFormat || !project.exportFormat.providerType) { return Promise.resolve();