can you confirm please?
Just tested and you are correct. Its only within ABP Studio browser.
Thanks for the input enisn.
I will soon start to explore the CMS in details (and going through your answer) and figure out what options I have and how much I need/can built on top of it. I will come back here and add any feedback/knowledge I gain on that journey.
Just to add (as it might give you an idea for making the CMSKit better) I will also be exploring something like this here.
Hi @enisn
I have tried to add more meat to this question for you. I hope this makes it easier for you to answer me.
I´m trying to see how far I can go using CMS Kit without creating my own CMS 🙈!
So the question is if I can use it with little or no custom code (except some Dynamic Widgets) OR do I have to extend it an do a complete custom extension build on top of it (is that even possible)? What are my best options?
My requirements:
Questions (contains the previous questions also)
Just to include it here I asked this question, What is the best way to customize look and feel for each tenant? 6872, before but never did anything with it since it pointed to this Tenant-specific themes 5295 and I thought this was not quite what I needed 🤷♂️
I started thinking about these things 2022 and see that some have been updated but not all.
Have you looked into this?
Not the commercial version but it does in the open source and I added it to my commercial product 2 years ago so you should accomondate for this also.
If I then just comment all the File "stuff" out to in the UI (just the UI) I get the following error when running
Autofac.Core.DependencyResolutionException: An exception was thrown while activating ContractWorkModule.JobFiles.JobFilesAppService.
 ---> Autofac.Core.DependencyResolutionException: None of the constructors found on type 'ContractWorkModule.JobFiles.JobFilesAppService' can be invoked with the available services and parameters:
Cannot resolve parameter 'Volo.Abp.Domain.Repositories.IRepository`2[ContractWorkModule.AppFileDescriptors.AppFileDescriptor,System.Guid] appFileDescriptorRepository' of constructor 'Void .ctor(ContractWorkModule.JobFiles.IJobFileRepository, ContractWorkModule.JobFiles.JobFileManager, Volo.Abp.Caching.IDistributedCache`2[ContractWorkModule.JobFiles.JobFileDownloadTokenCacheItem,System.String], Volo.Abp.Domain.Repositories.IRepository`2[ContractWorkModule.AppFileDescriptors.AppFileDescriptor,System.Guid], Volo.Abp.BlobStoring.IBlobContainer`1[ContractWorkModule.JobFiles.JobFileFileContainer])'.
so now I´m trying to track that down... It seems that the suite part has not been tested that much for this File thing..
UPDATE
I solved that one by adding this line to my ContractWorkModuleApplicationModule but then I had to add my EntityFrameworkCore project that has my database context as a reference. Is that the way to go for a module?
context.Services.AddTransient<IRepository<AppFileDescriptor, Guid>, EfCoreRepository<ShowCasasDbContext, AppFileDescriptor, Guid>>();
BUT now I´m getting the following error
[10:55:21 DBG] Get dynamic claims cache for user: 56e99f30-fe1a-429f-44c4-3a137061d937
[10:55:21 INF] Request finished HTTP/2 GET https://localhost:44369/Pages/Jobs.razor.js - 404 0 null 34.0081ms
[10:55:21 INF] Request reached the end of the middleware pipeline without being handled by application code. Request path: GET https://localhost:44369/Pages/Jobs.razor.js, Response status code: 404
[10:55:22 WRN] Unhandled exception rendering component: Failed to fetch dynamically imported module: https://localhost:44369/Pages/Jobs.razor.js
TypeError: Failed to fetch dynamically imported module: https://localhost:44369/Pages/Jobs.razor.js
Microsoft.JSInterop.JSException: Failed to fetch dynamically imported module: https://localhost:44369/Pages/Jobs.razor.js
TypeError: Failed to fetch dynamically imported module: https://localhost:44369/Pages/Jobs.razor.js
   at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, Object[] args)
   at ContractWorkModule.Blazor.Pages.ContractWorkModule.Jobs.OnAfterRenderAsync(Boolean firstRender) in C:\Dev\NineKeys.ShowCasas\aspnet-core\modules\ContractWorkModule\src\ContractWorkModule.Blazor\Pages\ContractWorkModule\Jobs.razor.cs:line 111
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)
[10:55:22 ERR] Unhandled exception in circuit 'zCPhR6vkqJKDFKyFgew8tT-7NvbRH6KsYgbbCL9rOII'.
Microsoft.JSInterop.JSException: Failed to fetch dynamically imported module: https://localhost:44369/Pages/Jobs.razor.js
TypeError: Failed to fetch dynamically imported module: https://localhost:44369/Pages/Jobs.razor.js
   at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, Object[] args)
   at ContractWorkModule.Blazor.Pages.ContractWorkModule.Jobs.OnAfterRenderAsync(Boolean firstRender) in C:\Dev\NineKeys.ShowCasas\aspnet-core\modules\ContractWorkModule\src\ContractWorkModule.Blazor\Pages\ContractWorkModule\Jobs.razor.cs:line 111
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)
[10:55:22 DBG] Get dynamic claims cache for user: 56e99f30-fe1a-429f-44c4-3a137061d937
[10:55:22 INF] Executed endpoint 'Microsoft.AspNetCore.Routing.RouteEndpoint'
[10:55:22 INF] Request finished HTTP/2 CONNECT https://localhost:44369/_blazor?id=A5k3AEkOw7p_-WHpWIf1HA - 200 null null 10154.4415ms
[10:55:22 INF] Connection id "0HN4O57KU2NH1", Request id "0HN4O57KU2NH1:00000015": the application completed without reading the entire request body.
UPDATE 2 I figured why the js was not being loaded.. it was trying to reference the js file from a totally wrong path (notice that my module has a module folder under pages (all genereated with Suite)
BUT after pointing it to the .js I get the following error
[11:11:32 WRN] Unhandled exception rendering component: JavaScript interop calls cannot be issued at this time. This is because the circuit has disconnected and is being disposed.
Microsoft.JSInterop.JSDisconnectedException: JavaScript interop calls cannot be issued at this time. This is because the circuit has disconnected and is being disposed.
   at Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime.BeginInvokeJS(Int64 asyncHandle, String identifier, String argsJson, JSCallResultType resultType, Int64 targetInstanceId)
   at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, CancellationToken cancellationToken, Object[] args)
   at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, Object[] args)
   at Microsoft.JSInterop.JSObjectReferenceExtensions.InvokeVoidAsync(IJSObjectReference jsObjectReference, String identifier, Object[] args)
   at Blazorise.DataGrid.JSDataGridModule.Initialize(ElementReference elementRef, String elementId)
   at Blazorise.DataGrid.DataGrid`1.OnAfterRenderAsync(Boolean firstRender)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)
[11:11:32 ERR] Unhandled exception in circuit 'cNIk9AF7tB-ZzTyDjjAGRWxePnRGsr20JCvkzZwBHk4'.
Microsoft.JSInterop.JSDisconnectedException: JavaScript interop calls cannot be issued at this time. This is because the circuit has disconnected and is being disposed.
   at Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime.BeginInvokeJS(Int64 asyncHandle, String identifier, String argsJson, JSCallResultType resultType, Int64 targetInstanceId)
   at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, CancellationToken cancellationToken, Object[] args)
   at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, Object[] args)
   at Microsoft.JSInterop.JSObjectReferenceExtensions.InvokeVoidAsync(IJSObjectReference jsObjectReference, String identifier, Object[] args)
   at Blazorise.DataGrid.JSDataGridModule.Initialize(ElementReference elementRef, String elementId)
   at Blazorise.DataGrid.DataGrid`1.OnAfterRenderAsync(Boolean firstRender)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)
UPDATE 3 I could not fix the error above so I just commented all out BUT now I sometimes get this error
[11:31:38 WRN] Unhandled exception rendering component: Collection was modified; enumeration operation may not execute.
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
  at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
  at Volo.Abp.AspNetCore.Components.Web.LeptonXTheme.Components.ApplicationLayout.Common.ContentToolbar.mvtNVO0Qjc(RenderTreeBuilder  )
  at Blazorise.Row.<BuildRenderTree>b__24_2(RenderTreeBuilder __builder3)
  at Microsoft.AspNetCore.Components.CascadingValue`1.Render(RenderTreeBuilder builder)
  at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)
[11:31:38 ERR] Unhandled exception in circuit 'b8SskGnvorXXbNMQgrv2vO6JHWfGZCHdeQPmqprrUr0'.
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
  at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
  at Volo.Abp.AspNetCore.Components.Web.LeptonXTheme.Components.ApplicationLayout.Common.ContentToolbar.mvtNVO0Qjc(RenderTreeBuilder  )
  at Blazorise.Row.<BuildRenderTree>b__24_2(RenderTreeBuilder __builder3)
  at Microsoft.AspNetCore.Components.CascadingValue`1.Render(RenderTreeBuilder builder)
  at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)
I want to be able to turn off cmsKit features for all blogs (e.g comments) for all tenants but now I can only turn everything on or add all features and skip the ones I don´t want (what happens when there is a new feature and I miss it!)
Can we have something like this?
GlobalFeatureManager.Instance.Modules.CmsKit(cmsKit =>
{
    cmsKit.EnableAllExcept(x =>  {
        x.Comment.Disable();
        });
});
The Quick Navigation Bar In Blog Post is picking up something totally different from what is in the blog post. Take a look
 
                                