Browse Source

Fixes

pull/479/head
Sebastian 6 years ago
parent
commit
df870cceac
  1. 4
      backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentEnricher.cs
  2. 4
      backend/src/Squidex/Areas/Api/Controllers/Contents/Models/ContentDto.cs
  3. 38
      frontend/app/features/content/pages/content/content-page.component.ts
  4. 14
      frontend/app/shared/components/forms/rich-editor.component.ts

4
backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentEnricher.cs

@ -65,6 +65,8 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
Guard.NotNull(contents); Guard.NotNull(contents);
Guard.NotNull(context); Guard.NotNull(context);
var app = context.App;
using (Profiler.TraceMethod<ContentEnricher>()) using (Profiler.TraceMethod<ContentEnricher>())
{ {
var results = new List<ContentEntity>(); var results = new List<ContentEntity>();
@ -96,6 +98,8 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
{ {
content.CacheDependencies = new HashSet<object?> content.CacheDependencies = new HashSet<object?>
{ {
app.Id,
app.Version,
schema.Id, schema.Id,
schema.Version schema.Version
}; };

4
backend/src/Squidex/Areas/Api/Controllers/Contents/Models/ContentDto.cs

@ -165,6 +165,8 @@ namespace Squidex.Areas.Api.Controllers.Contents.Models
if (content.CanUpdate) if (content.CanUpdate)
{ {
AddPutLink("update", controller.Url<ContentsController>(x => nameof(x.PutContent), values)); AddPutLink("update", controller.Url<ContentsController>(x => nameof(x.PutContent), values));
AddPatchLink("patch", controller.Url<ContentsController>(x => nameof(x.PatchContent), values));
} }
if (Status == Status.Published) if (Status == Status.Published)
@ -172,8 +174,6 @@ namespace Squidex.Areas.Api.Controllers.Contents.Models
AddPutLink("draft/propose", controller.Url<ContentsController>(x => nameof(x.PutContent), values) + "?asDraft=true"); AddPutLink("draft/propose", controller.Url<ContentsController>(x => nameof(x.PutContent), values) + "?asDraft=true");
} }
AddPatchLink("patch", controller.Url<ContentsController>(x => nameof(x.PatchContent), values));
if (content.Nexts != null) if (content.Nexts != null)
{ {
foreach (var next in content.Nexts) foreach (var next in content.Nexts)

38
frontend/app/features/content/pages/content/content-page.component.ts

@ -107,6 +107,10 @@ export class ContentPageComponent extends ResourceOwner implements CanComponentD
this.own( this.own(
this.contentsState.selectedContent this.contentsState.selectedContent
.subscribe(content => { .subscribe(content => {
const isNewContent = isOtherContent(content, this.content);
this.content = content;
this.autoSaveKey = { this.autoSaveKey = {
schemaId: this.schema.id, schemaId: this.schema.id,
schemaVersion: this.schema.version, schemaVersion: this.schema.version,
@ -119,24 +123,20 @@ export class ContentPageComponent extends ResourceOwner implements CanComponentD
const clone = this.tempService.fetch(); const clone = this.tempService.fetch();
const autosaved = this.autoSaveService.get(this.autoSaveKey);
if (clone) { if (clone) {
this.loadContent(clone, true); this.loadContent(clone, true);
} else { } else if (isNewContent && autosaved && this.contentForm.hasChanges(autosaved)) {
const autosaved = this.autoSaveService.get(this.autoSaveKey); this.dialogs.confirm('Unsaved changes', 'You have unsaved changes. Do you want to load them now?')
.subscribe(shouldLoad => {
if (autosaved && this.isOtherContent(content) && this.contentForm.hasChanges(autosaved)) { if (shouldLoad) {
this.dialogs.confirm('Unsaved changes', 'You have unsaved changes. Do you want to load them now?') this.loadContent(autosaved, false);
.subscribe(shouldLoad => { } else {
if (shouldLoad) { this.autoSaveService.remove(this.autoSaveKey);
this.loadContent(autosaved, false); }
} else { });
this.autoSaveService.remove(this.autoSaveKey);
}
});
}
} }
this.content = content;
})); }));
this.own( this.own(
@ -155,10 +155,6 @@ export class ContentPageComponent extends ResourceOwner implements CanComponentD
})); }));
} }
private isOtherContent(content: ContentDto | null | undefined) {
return !this.content || !content || content.id !== this.content.id;
}
public canDeactivate(): Observable<boolean> { public canDeactivate(): Observable<boolean> {
return this.checkPendingChanges('close the current content view').pipe( return this.checkPendingChanges('close the current content view').pipe(
tap(confirmed => { tap(confirmed => {
@ -340,3 +336,7 @@ export class ContentPageComponent extends ResourceOwner implements CanComponentD
return field.fieldId + this.schema.id; return field.fieldId + this.schema.id;
} }
} }
function isOtherContent(lhs: ContentDto | null | undefined, rhs: ContentDto | null | undefined) {
return !lhs || !rhs || lhs.id !== rhs.id;
}

14
frontend/app/shared/components/forms/rich-editor.component.ts

@ -210,10 +210,16 @@ export class RichEditorComponent extends StatefulControlComponent<undefined, str
let content = ''; let content = '';
for (const asset of assets) { for (const asset of assets) {
if (asset.type === 'Video') { switch (asset.type) {
content += `<video src="${asset.fullUrl(this.apiUrl)}" />`; case 'Video':
} else { content += `<video src="${asset.fullUrl(this.apiUrl)}" />`;
content += `<img src="${asset.fullUrl(this.apiUrl)}" alt="${asset.fileName}" />`; break;
case 'Video':
content += `<img src="${asset.fullUrl(this.apiUrl)}" alt="${asset.fileName}" />`;
break;
default:
content += `<a href="${asset.fullUrl(this.apiUrl)}" alt="${asset.fileName}">${asset.fileName}</a>`;
break;
} }
} }

Loading…
Cancel
Save