Browse Source

Type name serialization fixed.

pull/346/head
Sebastian Stehle 7 years ago
parent
commit
153fdda6da
  1. 21
      src/Squidex.Infrastructure/Json/Newtonsoft/TypeNameSerializationBinder.cs
  2. 5
      src/Squidex/Areas/Api/Controllers/Schemas/Models/ConfigurePreviewUrlsDto.cs
  3. 14
      src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.html
  4. 1
      src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts
  5. 2
      src/Squidex/app/theme/_bootstrap-vars.scss

21
src/Squidex.Infrastructure/Json/Newtonsoft/TypeNameSerializationBinder.cs

@ -6,11 +6,12 @@
// ==========================================================================
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace Squidex.Infrastructure.Json.Newtonsoft
{
public class TypeNameSerializationBinder : DefaultSerializationBinder
public sealed class TypeNameSerializationBinder : ISerializationBinder
{
private readonly TypeNameRegistry typeNameRegistry;
@ -21,26 +22,20 @@ namespace Squidex.Infrastructure.Json.Newtonsoft
this.typeNameRegistry = typeNameRegistry;
}
public override Type BindToType(string assemblyName, string typeName)
public Type BindToType(string assemblyName, string typeName)
{
var type = typeNameRegistry.GetTypeOrNull(typeName);
return type ?? base.BindToType(assemblyName, typeName);
return typeNameRegistry.GetTypeOrNull(typeName);
}
public override void BindToName(Type serializedType, out string assemblyName, out string typeName)
public void BindToName(Type serializedType, out string assemblyName, out string typeName)
{
assemblyName = null;
var name = typeNameRegistry.GetNameOrNull(serializedType);
typeName = typeNameRegistry.GetNameOrNull(serializedType);
if (name != null)
{
typeName = name;
}
else
if (typeName == null)
{
base.BindToName(serializedType, out assemblyName, out typeName);
throw new JsonException("Trying to serialize object with type name.");
}
}
}

5
src/Squidex/Areas/Api/Controllers/Schemas/Models/ConfigurePreviewUrlsDto.cs

@ -14,7 +14,10 @@ namespace Squidex.Areas.Api.Controllers.Schemas.Models
{
public ConfigurePreviewUrls ToCommand()
{
return new ConfigurePreviewUrls { PreviewUrls = this };
return new ConfigurePreviewUrls
{
PreviewUrls = new Dictionary<string, string>(this)
};
}
}
}

14
src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.html

@ -12,17 +12,17 @@
<div class="col col-name pr-1">
<sqx-control-errors [for]="form.get('name')" fieldName="Name" [submitted]="editForm.submitted | async"></sqx-control-errors>
<input type="text" class="form-control" maxlength="1000" [formControl]="form.get('name')" placeholder="Name, e.g. Web or Mobile" />
<input type="text" class="form-control" maxlength="1000" [formControl]="form.get('name')" placeholder="Web or Mobile" />
</div>
<div class="col pr-1">
<sqx-control-errors [for]="form.get('url')" fieldName="Url" [submitted]="editForm.submitted | async"></sqx-control-errors>
<input type="text" class="form-control" maxlength="1000" [formControl]="form.get('url')" placeholder="Url" />
<input type="text" class="form-control" maxlength="1000" [formControl]="form.get('url')" placeholder="Url with placeholders like ${id} or ${data.slug}" />
</div>
<div class="col-auto col-options">
<button type="button" class="btn btn-text-delete btn-danger"
<button type="button" class="btn btn-text-danger"
(sqxConfirmClick)="editForm.remove(i)"
confirmTitle="Remove url"
confirmText="Do you really want to remove this url?">
@ -35,17 +35,13 @@
<div class="col col-name pr-1">
<sqx-control-errors for="name" [submitted]="addForm.submitted | async"></sqx-control-errors>
<input type="text" class="form-control" maxlength="1000" formControlName="name" placeholder="Name, e.g. Web or Mobile" />
<input type="text" class="form-control" maxlength="1000" formControlName="name" placeholder="Web or Mobile" />
</div>
<div class="col pr-1">
<sqx-control-errors for="url" [submitted]="addForm.submitted | async"></sqx-control-errors>
<input type="text" class="form-control" maxlength="1000" formControlName="url" placeholder="Url" />
<small class="form-text text-muted">
{{editHelp}}
</small>
<input type="text" class="form-control" maxlength="1000" formControlName="url" placeholder="Url with placeholders like ${id} or ${data.slug}" />
</div>
<div class="col-auto col-options">

1
src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts

@ -30,7 +30,6 @@ export class SchemaPreviewUrlsFormComponent implements OnInit {
public addForm = new AddPreviewUrlForm(this.formBuilder);
public editForm = new ConfigurePreviewUrlsForm(this.formBuilder);
public editHelp = 'Use placeholders like ${id}, ${data.slug} or ${data.title.en}.';
constructor(
private readonly formBuilder: FormBuilder,

2
src/Squidex/app/theme/_bootstrap-vars.scss

@ -23,7 +23,7 @@ $alert-color-level: -12.5;
$input-bg-disabled: $color-input-disabled;
$input-border-color: $color-input;
$input-color-placeholder: $color-text-decent;
$input-placeholder-color: $color-text-decent;
$badge-bg-level: 2;

Loading…
Cancel
Save