Skip to content
This repository was archived by the owner on Dec 7, 2021. It is now read-only.

Commit 0fa8dba

Browse files
tbarlow12wbreza
authored andcommitted
Editor Page and canvas upates
1 parent 2f6ff66 commit 0fa8dba

File tree

6 files changed

+42
-72
lines changed

6 files changed

+42
-72
lines changed

src/common/mockFactory.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -802,8 +802,6 @@ export default class MockFactory {
802802
save: jest.fn((project: IProject) => Promise.resolve(project)),
803803
delete: jest.fn((project: IProject) => Promise.resolve()),
804804
isDuplicate: jest.fn((project: IProject, projectList: IProject[]) => true),
805-
renameTag: jest.fn(),
806-
deleteTag: jest.fn(),
807805
};
808806
}
809807

src/react/components/pages/editorPage/canvas.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,20 @@ export default class Canvas extends React.Component<ICanvasProps, ICanvasState>
192192
return this.state.currentAsset.regions.filter((r) => selectedRegions.find((id) => r.id === id));
193193
}
194194

195-
public updateCanvasToolsRegions = (): void => {
196-
for (const region of this.state.currentAsset.regions) {
197-
this.editor.RM.updateTagsById(
198-
region.id,
199-
CanvasHelpers.getTagsDescriptor(this.props.project.tags, region),
200-
);
195+
public updateCanvasToolsRegions = (asset?: IAssetMetadata): void => {
196+
if (asset) {
197+
this.setState({
198+
currentAsset: asset,
199+
});
200+
this.clearAllRegions();
201+
this.addRegionsToCanvasTools(asset.regions);
202+
} else {
203+
for (const region of this.state.currentAsset.regions) {
204+
this.editor.RM.updateTagsById(
205+
region.id,
206+
CanvasHelpers.getTagsDescriptor(this.props.project.tags, region),
207+
);
208+
}
201209
}
202210
}
203211

src/react/components/pages/editorPage/editorPage.tsx

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ export default class EditorPage extends React.Component<IEditorPageProps, IEdito
229229
</div>
230230
<div className="editor-page-right-sidebar">
231231
<TagInput
232-
tags={this.state.project.tags}
232+
tags={this.props.project.tags}
233233
lockedTags={this.state.lockedTags}
234234
selectedRegions={this.state.selectedRegions}
235235
onChange={this.onTagsChanged}
@@ -313,13 +313,18 @@ export default class EditorPage extends React.Component<IEditorPageProps, IEdito
313313
const assetService = new AssetService(project);
314314
const asset = await assetService.renameTag(project.assets, tagName, newTagName, selectedAsset);
315315

316-
const projectService = new ProjectService();
317-
const newProject = projectService.renameTag(project, tagName, newTagName);
318-
await this.props.actions.saveProject(newProject);
319-
316+
const newProject: IProject = {
317+
...project,
318+
tags: project.tags.map((t) => (t.name === tagName) ? {...t, name: newTagName} : t),
319+
}
320320
this.setState({
321-
selectedAsset: asset,
322321
project: newProject,
322+
selectedAsset: asset || selectedAsset,
323+
}, async () => {
324+
await this.props.actions.saveProject(newProject);
325+
if (asset) {
326+
this.canvas.current.updateCanvasToolsRegions(asset);
327+
}
323328
});
324329
}
325330

@@ -328,18 +333,21 @@ export default class EditorPage extends React.Component<IEditorPageProps, IEdito
328333
}
329334

330335
private onTagDeleted = async (tagName: string): Promise<void> => {
331-
const { project, selectedAsset } = this.state;
332-
const assetService = new AssetService(project);
333-
const asset = await assetService.deleteTag(project.assets, tagName, selectedAsset);
334-
335-
const projectService = new ProjectService();
336-
const newProject = projectService.deleteTag(project, tagName);
336+
const { selectedAsset } = this.state;
337+
const { project } = this.props;
338+
const newProject: IProject = {
339+
...project,
340+
tags: project.tags.filter((t) => t.name !== tagName)
341+
}
337342
await this.props.actions.saveProject(newProject);
343+
debugger;
338344

339-
this.setState({
340-
selectedAsset: asset,
341-
project: newProject,
342-
});
345+
const assetService = new AssetService(project);
346+
const asset = await assetService.deleteTag(project.assets, tagName, selectedAsset);
347+
if (asset) {
348+
this.canvas.current.updateCanvasToolsRegions(asset);
349+
this.setState({selectedAsset: asset});
350+
}
343351
}
344352

345353
private onCtrlTagClicked = (tag: ITag): void => {

src/services/assetService.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,9 @@ export class AssetService {
243243
tagName: string,
244244
transformer: (tags: string[]) => string[],
245245
currentAsset?: IAssetMetadata): Promise<IAssetMetadata> {
246+
if (!assets) {
247+
return;
248+
}
246249
const assetKeys = Object.keys(assets);
247250
// Loop over assets and update if necessary
248251
for (const assetKey of assetKeys) {

src/services/projectService.test.ts

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -157,33 +157,4 @@ describe("Project Service", () => {
157157
await projectSerivce.delete(testProject);
158158
expect(storageProviderMock.deleteFile.mock.calls).toHaveLength(assets.length + 1);
159159
});
160-
161-
it("Deletes a tag from project", () => {
162-
const tag = MockFactory.createTestTag();
163-
const project: IProject = {
164-
...MockFactory.createTestProject(),
165-
tags: [tag],
166-
};
167-
const projectService = new ProjectService();
168-
expect(projectSerivce.deleteTag(project, tag.name)).toEqual({
169-
...project,
170-
tags: [],
171-
});
172-
});
173-
174-
it("Renames a tag within project", () => {
175-
const tag = MockFactory.createTestTag();
176-
const project: IProject = {
177-
...MockFactory.createTestProject(),
178-
tags: [tag],
179-
};
180-
const projectService = new ProjectService();
181-
expect(projectSerivce.renameTag(project, tag.name, "test")).toEqual({
182-
...project,
183-
tags: [{
184-
name: "test",
185-
color: expect.any(String),
186-
}],
187-
});
188-
});
189160
});

src/services/projectService.ts

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import _ from "lodash";
22
import shortid from "shortid";
33
import { StorageProviderFactory } from "../providers/storage/storageProviderFactory";
4-
import { IProject, ISecurityToken, AppError, ErrorCode, AssetState, IAssetMetadata } from "../models/applicationState";
4+
import { IProject, ISecurityToken, AppError, ErrorCode, AssetState } from "../models/applicationState";
55
import Guard from "../common/guard";
66
import { constants } from "../common/constants";
77
import { ExportProviderFactory } from "../providers/export/exportProviderFactory";
88
import { decryptProject, encryptProject } from "../common/utils";
99
import packageJson from "../../package.json";
10-
import { AssetService } from "./assetService";
11-
import { forEachAsync } from "../common/extensions/array";
1210

1311
/**
1412
* Functions required for a project service
@@ -20,8 +18,6 @@ export interface IProjectService {
2018
save(project: IProject, securityToken: ISecurityToken): Promise<IProject>;
2119
delete(project: IProject): Promise<void>;
2220
isDuplicate(project: IProject, projectList: IProject[]): boolean;
23-
deleteTag(project: IProject, tagName: string): IProject;
24-
renameTag(project: IProject, tagName: string, newTagName: string);
2521
}
2622

2723
/**
@@ -104,20 +100,6 @@ export default class ProjectService implements IProjectService {
104100
return (duplicateProjects !== undefined);
105101
}
106102

107-
public deleteTag(project: IProject, tagName: string): IProject {
108-
return {
109-
...project,
110-
tags: project.tags.filter((t) => t.name !== tagName),
111-
};
112-
}
113-
114-
public renameTag(project: IProject, tagName: string, newTagName: string): IProject {
115-
return {
116-
...project,
117-
tags: project.tags.map((t) => (t.name === tagName) ? {...t, name: newTagName} : t),
118-
};
119-
}
120-
121103
private async saveExportSettings(project: IProject): Promise<void> {
122104
if (!project.exportFormat || !project.exportFormat.providerType) {
123105
return Promise.resolve();

0 commit comments

Comments
 (0)