public async Task <IActionResult> EditProperties(WorkflowSnippetViewModel viewModel, string sourcename)
        {
            if (!await _authorizationService.AuthorizeAsync(User, OrchardCore.Workflows.Snippets.Permissions.ManageWorkflowSnippets))
            {
                return(Forbid());
            }

            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }

            var isNew           = string.IsNullOrEmpty(sourcename);
            var workflowSnippet = default(WorkflowSnippet);

            if (isNew)
            {
                if (String.IsNullOrWhiteSpace(viewModel.Name))
                {
                    ModelState.AddModelError(nameof(WorkflowSnippetViewModel.Name), S["The name is mandatory."]);
                }
                else
                {
                    var shortcodeTemplatesDocument = await _workflowSnippetsManager.GetWorkflowSnippetsDocumentAsync();

                    if (shortcodeTemplatesDocument.WorkflowSnippets.ContainsKey(viewModel.Name))
                    {
                        ModelState.AddModelError(nameof(WorkflowSnippetViewModel.Name), S["A snippet with the same name already exists."]);
                    }
                }

                if (!ModelState.IsValid)
                {
                    // If we got this far, something failed, redisplay form
                    return(View(viewModel));
                }

                workflowSnippet = new WorkflowSnippet
                {
                    Description = viewModel.Description,
                    IsEnabled   = viewModel.IsEnabled,
                    Categories  = JsonConvert.DeserializeObject <string[]>(viewModel.SelectedCategories),
                };
                await _workflowSnippetsManager.UpdateShortcodeTemplateAsync(viewModel.Name, workflowSnippet);
            }
            else
            {
                var shortcodeTemplatesDocument = await _workflowSnippetsManager.GetWorkflowSnippetsDocumentAsync();

                if (!shortcodeTemplatesDocument.WorkflowSnippets.ContainsKey(sourcename))
                {
                    return(NotFound());
                }
                workflowSnippet = shortcodeTemplatesDocument.WorkflowSnippets[sourcename];

                workflowSnippet.Description = viewModel.Description?.Trim();
                workflowSnippet.Categories  = JsonConvert.DeserializeObject <string[]>(viewModel.SelectedCategories);
                workflowSnippet.IsEnabled   = viewModel.IsEnabled;

                await _workflowSnippetsManager.RemoveWorkflowSnippetAsync(sourcename);

                await _workflowSnippetsManager.UpdateShortcodeTemplateAsync(viewModel.Name, workflowSnippet);
            }


            return(isNew
                        ? RedirectToAction("Edit", new { sourcename = viewModel.Name })
                        :   RedirectToAction("Index"));
        }
        private async Task    UpdateWorkFlowSnippet(string snippetname, WorkflowSnippet model)
        {
            await _workflowSnippetsManager.RemoveWorkflowSnippetAsync(snippetname);

            await _workflowSnippetsManager.UpdateShortcodeTemplateAsync(snippetname, model);
        }