public static IEnumerable<Type> GetDefinedFolderTypes(this IPage page)
{
Verify.ArgumentNotNull(page, nameof(page));
var folderDefinitions = DataFacade.GetData<IPageFolderDefinition>();
IEnumerable<Guid> typeIds;
if (folderDefinitions.IsEnumerableQuery())
{
typeIds = folderDefinitions
.Evaluate()
.Where(f => f.PageId == page.Id)
.Select(f => f.FolderTypeId);
}
else
{
typeIds = folderDefinitions
.Where(f => f.PageId == page.Id)
.Select(f => f.FolderTypeId)
.Evaluate();
}
foreach (Guid typeId in typeIds)
{
var dataTypeDescriptor = DynamicTypeManager.GetDataTypeDescriptor(typeId);
Verify.IsNotNull(dataTypeDescriptor, "Missing a page data folder type with id '{0}', referenced by a IPageFolderDefinition record", typeId);
yield return TypeManager.GetType(dataTypeDescriptor.TypeManagerTypeName);
}
}