protected EntityJournalViewModelBase(
            IUnitOfWorkFactory unitOfWorkFactory,
            IInteractiveService interactiveService,
            INavigationManager navigationManager,
            IDeleteEntityService deleteEntityService           = null,
            ICurrentPermissionService currentPermissionService = null
            ) : base(unitOfWorkFactory, interactiveService, navigationManager)
        {
            CurrentPermissionService = currentPermissionService;
            DeleteEntityService      = deleteEntityService;

            var dataLoader = new ThreadDataLoader <TNode>(unitOfWorkFactory);

            dataLoader.CurrentPermissionService = currentPermissionService;
            dataLoader.AddQuery <TEntity>(ItemsQuery);
            DataLoader = dataLoader;

            if (currentPermissionService != null && !currentPermissionService.ValidateEntityPermission(typeof(TEntity)).CanRead)
            {
                throw new AbortCreatingPageException($"У вас нет прав для просмотра документов типа: {typeof(TEntity).GetSubjectName()}", "Невозможно открыть журнал");
            }

            CreateNodeActions();

            var names = typeof(TEntity).GetSubjectNames();

            if (!String.IsNullOrEmpty(names?.NominativePlural))
            {
                TabName = names.NominativePlural.StringToTitleCase();
            }

            UpdateOnChanges(typeof(TEntity));
        }
        protected override void CreateNodeActions()
        {
            base.CreateNodeActions();

            bool canCreate = CurrentPermissionService == null || CurrentPermissionService.ValidateEntityPermission(typeof(TEntity)).CanCreate;
            bool canEdit   = CurrentPermissionService == null || CurrentPermissionService.ValidateEntityPermission(typeof(TEntity)).CanUpdate;
            bool canDelete = CurrentPermissionService == null || CurrentPermissionService.ValidateEntityPermission(typeof(TEntity)).CanDelete;

            var addAction = new JournalAction("Добавить",
                                              (selected) => canCreate,
                                              (selected) => VisibleCreateAction,
                                              (selected) => CreateEntityDialog(),
                                              "Insert"
                                              );

            NodeActionsList.Add(addAction);

            var editAction = new JournalAction("Изменить",
                                               (selected) => canEdit && selected.Any(),
                                               (selected) => VisibleEditAction,
                                               (selected) => selected.Cast <TNode>().ToList().ForEach(EditEntityDialog)
                                               );

            NodeActionsList.Add(editAction);

            if (SelectionMode == JournalSelectionMode.None)
            {
                RowActivatedAction = editAction;
            }

            var deleteAction = new JournalAction("Удалить",
                                                 (selected) => canDelete && selected.Any(),
                                                 (selected) => VisibleDeleteAction,
                                                 (selected) => DeleteEntities(selected.Cast <TNode>().ToArray()),
                                                 "Delete"
                                                 );

            NodeActionsList.Add(deleteAction);
        }