Browse Source

Entities renamed.

pull/364/head
Sebastian Stehle 7 years ago
parent
commit
f65b73ca33
  1. 4
      src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs
  2. 34
      src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
  3. 10
      src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs
  4. 16
      src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
  5. 9
      src/Squidex/Areas/Api/Controllers/Contents/Models/ContentsDto.cs
  6. 16
      src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs
  7. 4
      src/Squidex/Areas/Api/Controllers/History/HistoryController.cs
  8. 4
      src/Squidex/Areas/Api/Controllers/News/Service/FeaturesService.cs
  9. 12
      src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs
  10. 12
      src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs
  11. 8
      src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs
  12. 22
      src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs
  13. 4
      src/Squidex/Areas/Api/Controllers/Users/UsersController.cs
  14. 9
      src/Squidex/app/features/administration/state/users.state.ts
  15. 3
      src/Squidex/app/features/content/pages/contents/contents-page.component.html
  16. 4
      src/Squidex/app/features/content/pages/contents/contents-page.component.ts
  17. 6
      src/Squidex/app/features/content/shared/contents-selector.component.html
  18. 4
      src/Squidex/app/features/content/shared/contents-selector.component.ts
  19. 9
      src/Squidex/app/shared/components/search-form.component.html
  20. 9
      src/Squidex/app/shared/components/search-form.component.ts
  21. 6
      src/Squidex/app/shared/services/contents.service.spec.ts
  22. 23
      src/Squidex/app/shared/services/contents.service.ts
  23. 41
      src/Squidex/app/shared/state/contents.state.ts

4
src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs

@ -60,9 +60,9 @@ namespace Squidex.Areas.Api.Controllers.Apps
var userOrClientId = HttpContext.User.UserOrClientId(); var userOrClientId = HttpContext.User.UserOrClientId();
var userPermissions = HttpContext.Permissions(); var userPermissions = HttpContext.Permissions();
var entities = await appProvider.GetUserApps(userOrClientId, userPermissions); var apps = await appProvider.GetUserApps(userOrClientId, userPermissions);
var response = entities.ToArray(a => AppDto.FromApp(a, userOrClientId, userPermissions, appPlansProvider, this)); var response = apps.ToArray(a => AppDto.FromApp(a, userOrClientId, userPermissions, appPlansProvider, this));
Response.Headers[HeaderNames.ETag] = response.ToManyEtag(); Response.Headers[HeaderNames.ETag] = response.ToManyEtag();

34
src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs

@ -74,18 +74,18 @@ namespace Squidex.Areas.Api.Controllers.Assets
[FromQuery] int? quality = null, [FromQuery] int? quality = null,
[FromQuery] string mode = null) [FromQuery] string mode = null)
{ {
IAssetEntity entity; IAssetEntity asset;
if (Guid.TryParse(idOrSlug, out var guid)) if (Guid.TryParse(idOrSlug, out var guid))
{ {
entity = await assetRepository.FindAssetAsync(guid); asset = await assetRepository.FindAssetAsync(guid);
} }
else else
{ {
entity = await assetRepository.FindAssetBySlugAsync(App.Id, idOrSlug); asset = await assetRepository.FindAssetBySlugAsync(App.Id, idOrSlug);
} }
return DeliverAsset(entity, version, width, height, quality, mode, dl); return DeliverAsset(asset, version, width, height, quality, mode, dl);
} }
/// <summary> /// <summary>
@ -115,25 +115,25 @@ namespace Squidex.Areas.Api.Controllers.Assets
[FromQuery] int? quality = null, [FromQuery] int? quality = null,
[FromQuery] string mode = null) [FromQuery] string mode = null)
{ {
var entity = await assetRepository.FindAssetAsync(id); var asset = await assetRepository.FindAssetAsync(id);
return DeliverAsset(entity, version, width, height, quality, mode, dl); return DeliverAsset(asset, version, width, height, quality, mode, dl);
} }
private IActionResult DeliverAsset(IAssetEntity entity, long version, int? width, int? height, int? quality, string mode, int download = 1) private IActionResult DeliverAsset(IAssetEntity asset, long version, int? width, int? height, int? quality, string mode, int download = 1)
{ {
if (entity == null || entity.FileVersion < version || width == 0 || height == 0 || quality == 0) if (asset == null || asset.FileVersion < version || width == 0 || height == 0 || quality == 0)
{ {
return NotFound(); return NotFound();
} }
Response.Headers[HeaderNames.ETag] = entity.FileVersion.ToString(); Response.Headers[HeaderNames.ETag] = asset.FileVersion.ToString();
var handler = new Func<Stream, Task>(async bodyStream => var handler = new Func<Stream, Task>(async bodyStream =>
{ {
var assetId = entity.Id.ToString(); var assetId = asset.Id.ToString();
if (entity.IsImage && (width.HasValue || height.HasValue || quality.HasValue)) if (asset.IsImage && (width.HasValue || height.HasValue || quality.HasValue))
{ {
var assetSuffix = $"{width}_{height}_{mode}"; var assetSuffix = $"{width}_{height}_{mode}";
@ -144,7 +144,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
try try
{ {
await assetStore.DownloadAsync(assetId, entity.FileVersion, assetSuffix, bodyStream); await assetStore.DownloadAsync(assetId, asset.FileVersion, assetSuffix, bodyStream);
} }
catch (AssetNotFoundException) catch (AssetNotFoundException)
{ {
@ -156,7 +156,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
{ {
using (Profiler.Trace("ResizeDownload")) using (Profiler.Trace("ResizeDownload"))
{ {
await assetStore.DownloadAsync(assetId, entity.FileVersion, null, sourceStream); await assetStore.DownloadAsync(assetId, asset.FileVersion, null, sourceStream);
sourceStream.Position = 0; sourceStream.Position = 0;
} }
@ -168,7 +168,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
using (Profiler.Trace("ResizeUpload")) using (Profiler.Trace("ResizeUpload"))
{ {
await assetStore.UploadAsync(assetId, entity.FileVersion, assetSuffix, destinationStream); await assetStore.UploadAsync(assetId, asset.FileVersion, assetSuffix, destinationStream);
destinationStream.Position = 0; destinationStream.Position = 0;
} }
@ -180,17 +180,17 @@ namespace Squidex.Areas.Api.Controllers.Assets
} }
else else
{ {
await assetStore.DownloadAsync(assetId, entity.FileVersion, null, bodyStream); await assetStore.DownloadAsync(assetId, asset.FileVersion, null, bodyStream);
} }
}); });
if (download == 1) if (download == 1)
{ {
return new FileCallbackResult(entity.MimeType, entity.FileName, true, handler); return new FileCallbackResult(asset.MimeType, asset.FileName, true, handler);
} }
else else
{ {
return new FileCallbackResult(entity.MimeType, null, true, handler); return new FileCallbackResult(asset.MimeType, null, true, handler);
} }
} }

10
src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs

@ -135,21 +135,21 @@ namespace Squidex.Areas.Api.Controllers.Assets
{ {
var context = Context(); var context = Context();
var entity = await assetQuery.FindAssetAsync(context, id); var asset = await assetQuery.FindAssetAsync(context, id);
if (entity == null) if (asset == null)
{ {
return NotFound(); return NotFound();
} }
var response = AssetDto.FromAsset(entity, this, app); var response = AssetDto.FromAsset(asset, this, app);
if (controllerOptions.Value.EnableSurrogateKeys) if (controllerOptions.Value.EnableSurrogateKeys)
{ {
Response.Headers["Surrogate-Key"] = entity.Id.ToString(); Response.Headers["Surrogate-Key"] = asset.Id.ToString();
} }
Response.Headers[HeaderNames.ETag] = entity.Version.ToString(); Response.Headers[HeaderNames.ETag] = asset.Version.ToString();
return Ok(response); return Ok(response);
} }

16
src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs

@ -107,7 +107,6 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// </summary> /// </summary>
/// <param name="app">The name of the app.</param> /// <param name="app">The name of the app.</param>
/// <param name="ids">The optional ids of the content to fetch.</param> /// <param name="ids">The optional ids of the content to fetch.</param>
/// <param name="status">The requested status, only for frontend client.</param>
/// <returns> /// <returns>
/// 200 => Contents retrieved. /// 200 => Contents retrieved.
/// 404 => App not found. /// 404 => App not found.
@ -120,13 +119,12 @@ namespace Squidex.Areas.Api.Controllers.Contents
[ProducesResponseType(typeof(ContentsDto), 200)] [ProducesResponseType(typeof(ContentsDto), 200)]
[ApiPermission] [ApiPermission]
[ApiCosts(1)] [ApiCosts(1)]
public async Task<IActionResult> GetAllContents(string app, [FromQuery] string ids, [FromQuery] string[] status = null) public async Task<IActionResult> GetAllContents(string app, [FromQuery] string ids)
{ {
var context = Context(); var context = Context();
var contents = await contentQuery.QueryAsync(context, Q.Empty.WithIds(ids).Ids);
var result = await contentQuery.QueryAsync(context, Q.Empty.WithIds(ids).Ids); var response = ContentsDto.FromContents(contents, context, this, app, null);
var response = ContentsDto.FromContents(result, context, this, app, null);
if (controllerOptions.Value.EnableSurrogateKeys && response.Items.Length <= controllerOptions.Value.MaxItemsForSurrogateKeys) if (controllerOptions.Value.EnableSurrogateKeys && response.Items.Length <= controllerOptions.Value.MaxItemsForSurrogateKeys)
{ {
@ -144,7 +142,6 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// <param name="app">The name of the app.</param> /// <param name="app">The name of the app.</param>
/// <param name="name">The name of the schema.</param> /// <param name="name">The name of the schema.</param>
/// <param name="ids">The optional ids of the content to fetch.</param> /// <param name="ids">The optional ids of the content to fetch.</param>
/// <param name="status">The requested status, only for frontend client.</param>
/// <returns> /// <returns>
/// 200 => Contents retrieved. /// 200 => Contents retrieved.
/// 404 => Schema or app not found. /// 404 => Schema or app not found.
@ -157,13 +154,12 @@ namespace Squidex.Areas.Api.Controllers.Contents
[ProducesResponseType(typeof(ContentsDto), 200)] [ProducesResponseType(typeof(ContentsDto), 200)]
[ApiPermission] [ApiPermission]
[ApiCosts(1)] [ApiCosts(1)]
public async Task<IActionResult> GetContents(string app, string name, [FromQuery] string ids = null, [FromQuery] string[] status = null) public async Task<IActionResult> GetContents(string app, string name, [FromQuery] string ids = null)
{ {
var context = Context(); var context = Context();
var contents = await contentQuery.QueryAsync(context, name, Q.Empty.WithIds(ids).WithODataQuery(Request.QueryString.ToString()));
var result = await contentQuery.QueryAsync(context, name, Q.Empty.WithIds(ids).WithODataQuery(Request.QueryString.ToString())); var response = ContentsDto.FromContents(contents, context, this, app, name);
var response = ContentsDto.FromContents(result, context, this, app, name);
if (ShouldProvideSurrogateKeys(response)) if (ShouldProvideSurrogateKeys(response))
{ {

9
src/Squidex/Areas/Api/Controllers/Contents/Models/ContentsDto.cs

@ -30,12 +30,6 @@ namespace Squidex.Areas.Api.Controllers.Contents.Models
[Required] [Required]
public ContentDto[] Items { get; set; } public ContentDto[] Items { get; set; }
/// <summary>
/// All available statuses.
/// </summary>
[Required]
public string[] Statuses { get; set; }
public string ToEtag() public string ToEtag()
{ {
return Items.ToManyEtag(Total); return Items.ToManyEtag(Total);
@ -62,8 +56,7 @@ namespace Squidex.Areas.Api.Controllers.Contents.Models
var result = new ContentsDto var result = new ContentsDto
{ {
Total = contents.Total, Total = contents.Total,
Items = contents.Select(x => ContentDto.FromContent(x, context, controller, app, schema)).ToArray(), Items = contents.Select(x => ContentDto.FromContent(x, context, controller, app, schema)).ToArray()
Statuses = new[] { "Published", "Draft", "Archived" }
}; };
return result.CreateLinks(controller, app, schema); return result.CreateLinks(controller, app, schema);

16
src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs

@ -33,9 +33,9 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
[ApiPermission(Permissions.AdminEventsRead)] [ApiPermission(Permissions.AdminEventsRead)]
public async Task<IActionResult> GetEventConsumers() public async Task<IActionResult> GetEventConsumers()
{ {
var entities = await GetGrain().GetConsumersAsync(); var eventConsumers = await GetGrain().GetConsumersAsync();
var response = EventConsumersDto.FromResults(entities.Value, this); var response = EventConsumersDto.FromResults(eventConsumers.Value, this);
return Ok(response); return Ok(response);
} }
@ -46,9 +46,9 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
[ApiPermission(Permissions.AdminEventsManage)] [ApiPermission(Permissions.AdminEventsManage)]
public async Task<IActionResult> StartEventConsumer(string name) public async Task<IActionResult> StartEventConsumer(string name)
{ {
var entity = await GetGrain().StartAsync(name); var eventConsumer = await GetGrain().StartAsync(name);
var response = EventConsumerDto.FromEventConsumerInfo(entity.Value, this); var response = EventConsumerDto.FromEventConsumerInfo(eventConsumer.Value, this);
return Ok(response); return Ok(response);
} }
@ -59,9 +59,9 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
[ApiPermission(Permissions.AdminEventsManage)] [ApiPermission(Permissions.AdminEventsManage)]
public async Task<IActionResult> StopEventConsumer(string name) public async Task<IActionResult> StopEventConsumer(string name)
{ {
var entity = await GetGrain().StopAsync(name); var eventConsumer = await GetGrain().StopAsync(name);
var response = EventConsumerDto.FromEventConsumerInfo(entity.Value, this); var response = EventConsumerDto.FromEventConsumerInfo(eventConsumer.Value, this);
return Ok(response); return Ok(response);
} }
@ -72,9 +72,9 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
[ApiPermission(Permissions.AdminEventsManage)] [ApiPermission(Permissions.AdminEventsManage)]
public async Task<IActionResult> ResetEventConsumer(string name) public async Task<IActionResult> ResetEventConsumer(string name)
{ {
var entity = await GetGrain().ResetAsync(name); var eventConsumer = await GetGrain().ResetAsync(name);
var response = EventConsumerDto.FromEventConsumerInfo(entity.Value, this); var response = EventConsumerDto.FromEventConsumerInfo(eventConsumer.Value, this);
return Ok(response); return Ok(response);
} }

4
src/Squidex/Areas/Api/Controllers/History/HistoryController.cs

@ -46,9 +46,9 @@ namespace Squidex.Areas.Api.Controllers.History
[ApiCosts(0.1)] [ApiCosts(0.1)]
public async Task<IActionResult> GetHistory(string app, string channel) public async Task<IActionResult> GetHistory(string app, string channel)
{ {
var entities = await historyService.QueryByChannelAsync(AppId, channel, 100); var events = await historyService.QueryByChannelAsync(AppId, channel, 100);
var response = entities.ToArray(HistoryEventDto.FromHistoryEvent); var response = events.ToArray(HistoryEventDto.FromHistoryEvent);
return Ok(response); return Ok(response);
} }

4
src/Squidex/Areas/Api/Controllers/News/Service/FeaturesService.cs

@ -43,9 +43,9 @@ namespace Squidex.Areas.Api.Controllers.News.Service
if (client != null && version < FeatureVersion) if (client != null && version < FeatureVersion)
{ {
var entities = await client.GetAsync(filter: $"data/version/iv gt {version}", context: Flatten); var features = await client.GetAsync(filter: $"data/version/iv gt {version}", context: Flatten);
result.Features.AddRange(entities.Items.Select(x => x.Data)); result.Features.AddRange(features.Items.Select(x => x.Data));
} }
return result; return result;

12
src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs

@ -82,9 +82,9 @@ namespace Squidex.Areas.Api.Controllers.Rules
[ApiCosts(1)] [ApiCosts(1)]
public async Task<IActionResult> GetRules(string app) public async Task<IActionResult> GetRules(string app)
{ {
var entities = await appProvider.GetRulesAsync(AppId); var rules = await appProvider.GetRulesAsync(AppId);
var response = RulesDto.FromRules(entities, this, app); var response = RulesDto.FromRules(rules, this, app);
Response.Headers[HeaderNames.ETag] = response.GenerateEtag(); Response.Headers[HeaderNames.ETag] = response.GenerateEtag();
@ -253,9 +253,9 @@ namespace Squidex.Areas.Api.Controllers.Rules
[ApiCosts(0)] [ApiCosts(0)]
public async Task<IActionResult> PutEvent(string app, Guid id) public async Task<IActionResult> PutEvent(string app, Guid id)
{ {
var entity = await ruleEventsRepository.FindAsync(id); var ruleEvent = await ruleEventsRepository.FindAsync(id);
if (entity == null) if (ruleEvent == null)
{ {
return NotFound(); return NotFound();
} }
@ -280,9 +280,9 @@ namespace Squidex.Areas.Api.Controllers.Rules
[ApiCosts(0)] [ApiCosts(0)]
public async Task<IActionResult> DeleteEvent(string app, Guid id) public async Task<IActionResult> DeleteEvent(string app, Guid id)
{ {
var entity = await ruleEventsRepository.FindAsync(id); var ruleEvent = await ruleEventsRepository.FindAsync(id);
if (entity == null) if (ruleEvent == null)
{ {
return NotFound(); return NotFound();
} }

12
src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs

@ -73,25 +73,25 @@ namespace Squidex.Areas.Api.Controllers.Schemas
[ApiCosts(0)] [ApiCosts(0)]
public async Task<IActionResult> GetSchema(string app, string name) public async Task<IActionResult> GetSchema(string app, string name)
{ {
ISchemaEntity entity; ISchemaEntity schema;
if (Guid.TryParse(name, out var id)) if (Guid.TryParse(name, out var id))
{ {
entity = await appProvider.GetSchemaAsync(AppId, id); schema = await appProvider.GetSchemaAsync(AppId, id);
} }
else else
{ {
entity = await appProvider.GetSchemaAsync(AppId, name); schema = await appProvider.GetSchemaAsync(AppId, name);
} }
if (entity == null || entity.IsDeleted) if (schema == null || schema.IsDeleted)
{ {
return NotFound(); return NotFound();
} }
var response = SchemaDetailsDto.FromSchemaWithDetails(entity, this, app); var response = SchemaDetailsDto.FromSchemaWithDetails(schema, this, app);
Response.Headers[HeaderNames.ETag] = entity.Version.ToString(); Response.Headers[HeaderNames.ETag] = schema.Version.ToString();
return Ok(response); return Ok(response);
} }

8
src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs

@ -127,9 +127,9 @@ namespace Squidex.Areas.Api.Controllers.Statistics
return BadRequest(); return BadRequest();
} }
var entities = await usageTracker.QueryAsync(AppId.ToString(), fromDate.Date, toDate.Date); var usages = await usageTracker.QueryAsync(AppId.ToString(), fromDate.Date, toDate.Date);
var response = entities.ToDictionary(x => x.Key, x => x.Value.Select(CallsUsageDto.FromUsage).ToArray()); var response = usages.ToDictionary(x => x.Key, x => x.Value.Select(CallsUsageDto.FromUsage).ToArray());
return Ok(response); return Ok(response);
} }
@ -181,9 +181,9 @@ namespace Squidex.Areas.Api.Controllers.Statistics
return BadRequest(); return BadRequest();
} }
var entities = await assetStatsRepository.QueryAsync(AppId, fromDate.Date, toDate.Date); var usages = await assetStatsRepository.QueryAsync(AppId, fromDate.Date, toDate.Date);
var models = entities.Select(StorageUsageDto.FromStats).ToArray(); var models = usages.Select(StorageUsageDto.FromStats).ToArray();
return Ok(models); return Ok(models);
} }

22
src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs

@ -52,14 +52,14 @@ namespace Squidex.Areas.Api.Controllers.Users
[ApiPermission(Permissions.AdminUsersRead)] [ApiPermission(Permissions.AdminUsersRead)]
public async Task<IActionResult> GetUser(string id) public async Task<IActionResult> GetUser(string id)
{ {
var entity = await userManager.FindByIdWithClaimsAsync(id); var user = await userManager.FindByIdWithClaimsAsync(id);
if (entity == null) if (user == null)
{ {
return NotFound(); return NotFound();
} }
var response = UserDto.FromUser(entity, this); var response = UserDto.FromUser(user, this);
return Ok(response); return Ok(response);
} }
@ -70,9 +70,9 @@ namespace Squidex.Areas.Api.Controllers.Users
[ApiPermission(Permissions.AdminUsersCreate)] [ApiPermission(Permissions.AdminUsersCreate)]
public async Task<IActionResult> PostUser([FromBody] CreateUserDto request) public async Task<IActionResult> PostUser([FromBody] CreateUserDto request)
{ {
var entity = await userManager.CreateAsync(userFactory, request.ToValues()); var user = await userManager.CreateAsync(userFactory, request.ToValues());
var response = UserDto.FromUser(entity, this); var response = UserDto.FromUser(user, this);
return Ok(response); return Ok(response);
} }
@ -83,9 +83,9 @@ namespace Squidex.Areas.Api.Controllers.Users
[ApiPermission(Permissions.AdminUsersUpdate)] [ApiPermission(Permissions.AdminUsersUpdate)]
public async Task<IActionResult> PutUser(string id, [FromBody] UpdateUserDto request) public async Task<IActionResult> PutUser(string id, [FromBody] UpdateUserDto request)
{ {
var entity = await userManager.UpdateAsync(id, request.ToValues()); var user = await userManager.UpdateAsync(id, request.ToValues());
var response = UserDto.FromUser(entity, this); var response = UserDto.FromUser(user, this);
return Ok(response); return Ok(response);
} }
@ -101,9 +101,9 @@ namespace Squidex.Areas.Api.Controllers.Users
throw new ValidationException("Locking user failed.", new ValidationError("You cannot lock yourself.")); throw new ValidationException("Locking user failed.", new ValidationError("You cannot lock yourself."));
} }
var entity = await userManager.LockAsync(id); var user = await userManager.LockAsync(id);
var response = UserDto.FromUser(entity, this); var response = UserDto.FromUser(user, this);
return Ok(response); return Ok(response);
} }
@ -119,9 +119,9 @@ namespace Squidex.Areas.Api.Controllers.Users
throw new ValidationException("Unlocking user failed.", new ValidationError("You cannot unlock yourself.")); throw new ValidationException("Unlocking user failed.", new ValidationError("You cannot unlock yourself."));
} }
var entity = await userManager.UnlockAsync(id); var user = await userManager.UnlockAsync(id);
var response = UserDto.FromUser(entity, this); var response = UserDto.FromUser(user, this);
return Ok(response); return Ok(response);
} }

4
src/Squidex/Areas/Api/Controllers/Users/UsersController.cs

@ -91,9 +91,9 @@ namespace Squidex.Areas.Api.Controllers.Users
{ {
try try
{ {
var entities = await userResolver.QueryByEmailAsync(query); var users = await userResolver.QueryByEmailAsync(query);
var response = entities.Where(x => !x.IsHidden()).Select(x => UserDto.FromUser(x, this)).ToArray(); var response = users.Where(x => !x.IsHidden()).Select(x => UserDto.FromUser(x, this)).ToArray();
return Ok(response); return Ok(response);
} }

9
src/Squidex/app/features/administration/state/users.state.ts

@ -134,7 +134,14 @@ export class UsersState extends State<Snapshot> {
selectedUser = users.find(x => x.id === selectedUser!.id) || selectedUser; selectedUser = users.find(x => x.id === selectedUser!.id) || selectedUser;
} }
return { ...s, users, usersPager, selectedUser, isLoaded: true, _links }; return { ...s,
canCreate,
isLoaded: true,
selectedUser,
users,
usersPager,
_links
};
}); });
}), }),
shareSubscribed(this.dialogs)); shareSubscribed(this.dialogs));

3
src/Squidex/app/features/content/pages/contents/contents-page.component.html

@ -19,9 +19,6 @@
[filter]="filter" [filter]="filter"
(querySubmit)="search()" (querySubmit)="search()"
[queries]="schemaQueries" [queries]="schemaQueries"
(statusChange)="filterStatus($event)"
[status]="contentsState.status | async"
[statuses]="contentsState.statuses | async"
expandable="true" expandable="true"
enableArchive="true" enableArchive="true"
enableShortcut="true"> enableShortcut="true">

4
src/Squidex/app/features/content/pages/contents/contents-page.component.ts

@ -140,10 +140,6 @@ export class ContentsPageComponent extends ResourceOwner implements OnInit {
.subscribe(); .subscribe();
} }
public filterStatus(status: string[]) {
this.contentsState.filterStatus(status);
}
public goPrev() { public goPrev() {
this.contentsState.goPrev(); this.contentsState.goPrev();
} }

6
src/Squidex/app/features/content/shared/contents-selector.component.html

@ -11,11 +11,9 @@
</button> </button>
</div> </div>
<div class="col pl-1"> <div class="col pl-1">
<sqx-search-form formClass="form" placeholder="Search for content" fieldExample="data/[MY_FIELD]/iv" <sqx-search-form formClass="form" placeholder="Search for content"
[fieldExample]="'data/[MY_FIELD]/iv'"
[filter]="filter" [filter]="filter"
(statusChange)="filterStatus($event)"
[status]="contentsState.status | async"
[statuses]="contentsState.statuses | async"
(querySubmit)="search()" (querySubmit)="search()"
expandable="true"> expandable="true">
</sqx-search-form> </sqx-search-form>

4
src/Squidex/app/features/content/shared/contents-selector.component.ts

@ -70,10 +70,6 @@ export class ContentsSelectorComponent implements OnInit {
this.contentsState.search(this.filter.apiFilter); this.contentsState.search(this.filter.apiFilter);
} }
public filterStatus(status: string[]) {
this.contentsState.filterStatus(status);
}
public goNext() { public goNext() {
this.contentsState.goNext(); this.contentsState.goNext();
} }

9
src/Squidex/app/shared/components/search-form.component.html

@ -68,15 +68,6 @@
(ngModelChange)="filter.setOrder($event)" /> (ngModelChange)="filter.setOrder($event)" />
</div> </div>
</div> </div>
<div class="form-group row" *ngIf="statuses && statuses.length > 0">
<div class="col-10 offset-2">
<sqx-checkbox-group [values]="statuses"
[ngModel]="status"
(ngModelChange)="statusChange.emit($event)">
</sqx-checkbox-group>
</div>
</div>
<div class="link"> <div class="link">
Read more about filtering in the <a href="https://docs.squidex.io/04-guides/02-api.html" sqxExternalLink>Documentation</a>. Read more about filtering in the <a href="https://docs.squidex.io/04-guides/02-api.html" sqxExternalLink>Documentation</a>.

9
src/Squidex/app/shared/components/search-form.component.ts

@ -39,15 +39,6 @@ export class SearchFormComponent implements OnInit {
@Input() @Input()
public filter: FilterState; public filter: FilterState;
@Input()
public statuses: [] = [];
@Input()
public status: string[];
@Output()
public statusChange = new EventEmitter<[]>();
@Input() @Input()
public schemaName = ''; public schemaName = '';

6
src/Squidex/app/shared/services/contents.service.spec.ts

@ -47,11 +47,11 @@ describe('ContentsService', () => {
let contents: ContentsDto; let contents: ContentsDto;
contentsService.getContents('my-app', 'my-schema', 17, 13, undefined, undefined, ['Draft', 'Published']).subscribe(result => { contentsService.getContents('my-app', 'my-schema', 17, 13, undefined, undefined).subscribe(result => {
contents = result; contents = result;
}); });
const req = httpMock.expectOne('http://service/p/api/content/my-app/my-schema?$top=17&$skip=13&status=Draft&status=Published'); const req = httpMock.expectOne('http://service/p/api/content/my-app/my-schema?$top=17&$skip=13');
expect(req.request.method).toEqual('GET'); expect(req.request.method).toEqual('GET');
expect(req.request.headers.get('If-Match')).toBeNull(); expect(req.request.headers.get('If-Match')).toBeNull();
@ -66,7 +66,7 @@ describe('ContentsService', () => {
}); });
expect(contents!).toEqual( expect(contents!).toEqual(
new ContentsDto(['Draft', 'Published'], 10, [ new ContentsDto(10, [
createContent(12), createContent(12),
createContent(13) createContent(13)
])); ]));

23
src/Squidex/app/shared/services/contents.service.ts

@ -35,15 +35,6 @@ export class ScheduleDto {
} }
export class ContentsDto extends ResultSet<ContentDto> { export class ContentsDto extends ResultSet<ContentDto> {
constructor(
public readonly statuses: string[],
total: number,
items: ContentDto[],
links?: ResourceLinks
) {
super(total, items, links);
}
public get canCreate() { public get canCreate() {
return hasAnyLink(this._links, 'create'); return hasAnyLink(this._links, 'create');
} }
@ -98,7 +89,7 @@ export class ContentsService {
) { ) {
} }
public getContents(appName: string, schemaName: string, take: number, skip: number, query?: string, ids?: string[], status?: string[]): Observable<ContentsDto> { public getContents(appName: string, schemaName: string, take: number, skip: number, query?: string, ids?: string[]): Observable<ContentsDto> {
const queryParts: string[] = []; const queryParts: string[] = [];
if (query && query.length > 0) { if (query && query.length > 0) {
@ -123,21 +114,15 @@ export class ContentsService {
queryParts.push(`ids=${ids.join(',')}`); queryParts.push(`ids=${ids.join(',')}`);
} }
if (status) {
for (let s of status) {
queryParts.push(`status=${s}`);
}
}
const fullQuery = queryParts.join('&'); const fullQuery = queryParts.join('&');
const url = this.apiUrl.buildUrl(`/api/content/${appName}/${schemaName}?${fullQuery}`); const url = this.apiUrl.buildUrl(`/api/content/${appName}/${schemaName}?${fullQuery}`);
return this.http.get<{ total: number, items: [], statuses: string[] } & Resource>(url).pipe( return this.http.get<{ total: number, items: [] } & Resource>(url).pipe(
map(({ total, items, statuses, _links }) => { map(({ total, items, _links }) => {
const contents = items.map(x => parseContent(x)); const contents = items.map(x => parseContent(x));
return new ContentsDto(statuses, total, contents, _links); return new ContentsDto(total, contents, _links);
}), }),
pretifyError('Failed to load contents. Please reload.')); pretifyError('Failed to load contents. Please reload.'));
} }

41
src/Squidex/app/shared/state/contents.state.ts

@ -40,12 +40,6 @@ interface Snapshot {
// Indicates if the contents are loaded. // Indicates if the contents are loaded.
isLoaded?: boolean; isLoaded?: boolean;
// All statuses.
statuses?: string[];
// Indicates which status is shown.
status?: string[];
// The selected content. // The selected content.
selectedContent?: ContentDto | null; selectedContent?: ContentDto | null;
@ -84,14 +78,6 @@ export abstract class ContentsStateBase extends State<Snapshot> {
this.changes.pipe(map(x => !!x.isLoaded), this.changes.pipe(map(x => !!x.isLoaded),
distinctUntilChanged()); distinctUntilChanged());
public status =
this.changes.pipe(map(x => x.status),
distinctUntilChanged());
public statuses =
this.changes.pipe(map(x => x.statuses),
distinctUntilChanged());
public canCreateAny = public canCreateAny =
this.changes.pipe(map(x => !!x.canCreate || !!x.canCreateAndPublish), this.changes.pipe(map(x => !!x.canCreate || !!x.canCreateAndPublish),
distinctUntilChanged()); distinctUntilChanged());
@ -152,9 +138,8 @@ export abstract class ContentsStateBase extends State<Snapshot> {
return this.contentsService.getContents(this.appName, this.schemaName, return this.contentsService.getContents(this.appName, this.schemaName,
this.snapshot.contentsPager.pageSize, this.snapshot.contentsPager.pageSize,
this.snapshot.contentsPager.skip, this.snapshot.contentsPager.skip,
this.snapshot.contentsQuery, undefined, this.snapshot.contentsQuery, undefined).pipe(
this.snapshot.status).pipe( tap(({ total, items, _links, canCreate, canCreateAndPublish }) => {
tap(({ total, items, _links, statuses, canCreate, canCreateAndPublish }) => {
if (isReload) { if (isReload) {
this.dialogs.notifyInfo('Contents reloaded.'); this.dialogs.notifyInfo('Contents reloaded.');
} }
@ -163,13 +148,6 @@ export abstract class ContentsStateBase extends State<Snapshot> {
const contents = ImmutableArray.of(items); const contents = ImmutableArray.of(items);
const contentsPager = s.contentsPager.setCount(total); const contentsPager = s.contentsPager.setCount(total);
statuses = s.statuses || statuses;
const status =
s.statuses ?
s.status :
statuses;
let selectedContent = s.selectedContent; let selectedContent = s.selectedContent;
if (selectedContent) { if (selectedContent) {
@ -182,8 +160,6 @@ export abstract class ContentsStateBase extends State<Snapshot> {
contentsPager, contentsPager,
isLoaded: true, isLoaded: true,
selectedContent, selectedContent,
status,
statuses,
_links _links
}; };
}); });
@ -305,19 +281,18 @@ export abstract class ContentsStateBase extends State<Snapshot> {
if (!oldVersion || !oldVersion.eq(content.version)) { if (!oldVersion || !oldVersion.eq(content.version)) {
return this.next(s => { return this.next(s => {
const contents = s.contents.replaceBy('id', content); const contents = s.contents.replaceBy('id', content);
const selectedContent = s.selectedContent && s.selectedContent.id === content.id ? content : s.selectedContent;
const selectedContent =
s.selectedContent &&
s.selectedContent.id === content.id ?
content :
s.selectedContent;
return { ...s, contents, selectedContent }; return { ...s, contents, selectedContent };
}); });
} }
} }
public filterStatus(status: string[]): Observable<any> {
this.next(s => ({ ...s, contentsPager: new Pager(0), status }));
return this.loadInternal();
}
public search(contentsQuery?: string): Observable<any> { public search(contentsQuery?: string): Observable<any> {
this.next(s => ({ ...s, contentsPager: new Pager(0), contentsQuery })); this.next(s => ({ ...s, contentsPager: new Pager(0), contentsQuery }));

Loading…
Cancel
Save