예제 #1
0
        public static async Task <IReadOnlyList <int> > DeleteFunctionAsync(FunctionData function, FunctionManager functionManager, bool showPrompt = true)
        {
            AppTelemetry.Current.TrackEvent(
                TelemetryEvents.DeleteFunction,
                TelemetryProperties.Function,
                function.Name);

            var dependentFunctionNames = new HashSet <string>(functionManager.GetDependentFunctions(function));

            dependentFunctionNames.Remove(function.Name);

            if (!dependentFunctionNames.Any())
            {
                functionManager.DeleteFunction(function);
                return(new int[] { function.Id });
            }

            if (showPrompt)
            {
                var dialog = new DeleteConfirmationDialog(function.Name, dependentFunctionNames);
                ContentDialogResult result = await dialog.ShowAsync();

                if (result != ContentDialogResult.Primary)
                {
                    return(new int[0]);
                }
            }

            FunctionData[] functionsToRemove = functionManager.Functions.Where(f => dependentFunctionNames.Contains(f.Name)).ToArray();
            foreach (FunctionData dependentFunction in functionsToRemove)
            {
                functionManager.DeleteFunction(dependentFunction);
            }

            functionManager.DeleteFunction(function);

            return(functionsToRemove.Select(f => f.Id).Append(function.Id).ToList());
        }