diff --git a/.idea/.idea.HopFrame/.idea/workspace.xml b/.idea/.idea.HopFrame/.idea/workspace.xml
index 09e7fe9..e567891 100644
--- a/.idea/.idea.HopFrame/.idea/workspace.xml
+++ b/.idea/.idea.HopFrame/.idea/workspace.xml
@@ -9,33 +9,14 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -122,7 +103,7 @@
"vue.rearranger.settings.migration": "true"
}
}
-
+
@@ -181,7 +162,7 @@
-
+
@@ -327,48 +308,64 @@
1737285123218
-
+
+
+ 1737298835225
+
+
+
+ 1737298835225
+
+
+
+ 1737299111987
+
+
+
+ 1737299111987
+
+
-
+
-
+
-
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -396,6 +393,8 @@
-
+
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..bf26e74
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Leon Hoppe
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d655ccd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,87 @@
+# HopFrame
+
+## Overview
+
+Welcome to the **HopFrame**! This project aims to provide a comprehensive and modular framework for easy management of your database.
+The framework is designed to be highly configurable, ensuring that developers either quickly add the framework for simple data editing or
+configure it to their needs to implement it fully in their data management pipeline.
+
+## Features
+
+- **Dynamic Table Management**: Create, edit, and delete records dynamically with support for various data types including numeric, text, boolean, dates, and relational data.
+- **Role-Based Access Control (RBAC)**: Implement fine-grained access control policies for viewing, creating, updating, and deleting records.
+- **Modern Design**: A modern and user-friendly interface built with Fluent UI components, ensuring easy to use and pleasing administration pages.
+- **Validation and Error Handling**: Comprehensive input validation and error handling to ensure data integrity and provide feedback to users.
+- **Support for Complex Data Relationships**: Manage complex relationships between data entities with ease.
+
+## Getting Started
+
+### Configuration
+
+Configuring HopFrame is straightforward and flexible. You can easily define your contexts, tables, and their properties using the provided configurators.
+Simply use your editors intelli-sense to find out what you can configure.
+
+```csharp
+builder.Services.AddHopFrame(options => {
+ options.DisplayUserInfo(false);
+ options.AddDbContext(context => {
+ context.Table(table => {
+ table.Property(u => u.Password)
+ .DisplayValue(false);
+
+ table.Property(u => u.FirstName)
+ .List(false);
+
+ table.Property(u => u.LastName)
+ .List(false);
+
+ table.Property(u => u.Id)
+ .IsSortable(false)
+ .SetOrderIndex(3);
+
+ table.AddVirtualProperty("Name", (user, _) => $"{user.FirstName} {user.LastName}")
+ .SetOrderIndex(2);
+
+ table.SetDisplayName("Clients");
+ table.SetDescription("This table is used for user data store and user authentication");
+
+ table.SetViewPolicy("users.view");
+
+ table.Property(u => u.Posts)
+ .FormatEach((post, _) => post.Caption);
+ });
+
+ context.Table()
+ .Property(p => p.Content)
+ .IsTextArea(true)
+ .Validator(input => {
+ var errors = new List();
+
+ if (input is null)
+ errors.Add("Value cannot be null");
+
+ if (input?.Length > 10)
+ errors.Add("Value can only be 10 characters long");
+
+ return errors;
+ });
+
+ context.Table()
+ .SetOrderIndex(-1);
+ });
+});
+```
+
+### Usage
+
+- Navigate to `/admin` to access the admin dashboard and start managing your tables.
+- Use the side menu to switch between different tables.
+- Utilize the built-in CRUD functionality to manage your data seamlessly.
+
+## Contributing
+
+Contributions are welcome! Feel free to open an issue or submit a pull request if you have suggestions or improvements.
+
+## License
+
+This project is licensed under the MIT License. See the LICENSE file for details.
diff --git a/src/HopFrame.Core/HopFrame.Core.csproj b/src/HopFrame.Core/HopFrame.Core.csproj
index 4056565..12adcd1 100644
--- a/src/HopFrame.Core/HopFrame.Core.csproj
+++ b/src/HopFrame.Core/HopFrame.Core.csproj
@@ -4,6 +4,11 @@
net9.0enableenable
+
+ true
+ ../../README.md
+ MIT
+ HopFrame.Core
diff --git a/src/HopFrame.Web/HopFrame.Web.csproj b/src/HopFrame.Web/HopFrame.Web.csproj
index 7ab8884..87242af 100644
--- a/src/HopFrame.Web/HopFrame.Web.csproj
+++ b/src/HopFrame.Web/HopFrame.Web.csproj
@@ -4,6 +4,11 @@
net9.0enableenable
+
+ true
+ ../../README.md
+ MIT
+ HopFrame.Web
diff --git a/src/HopFrame.Web/ServiceCollectionExtensions.cs b/src/HopFrame.Web/ServiceCollectionExtensions.cs
index 443ac29..dfd2606 100644
--- a/src/HopFrame.Web/ServiceCollectionExtensions.cs
+++ b/src/HopFrame.Web/ServiceCollectionExtensions.cs
@@ -36,6 +36,9 @@ public static class ServiceCollectionExtensions {
return services;
}
+ ///
+ /// Maps the HopFrame admin ui endpoints
+ ///
public static RazorComponentsEndpointConventionBuilder MapHopFramePages(this RazorComponentsEndpointConventionBuilder builder) {
builder
.AddInteractiveServerRenderMode()
diff --git a/testing/HopFrame.Testing/Program.cs b/testing/HopFrame.Testing/Program.cs
index bd80c11..28ec112 100644
--- a/testing/HopFrame.Testing/Program.cs
+++ b/testing/HopFrame.Testing/Program.cs
@@ -23,7 +23,7 @@ builder.Services.AddHopFrame(options => {
options.AddDbContext(context => {
context.Table(table => {
table.Property(u => u.Password)
- .SetParser((pwd, _) => pwd + "-edited");
+ .DisplayValue(false);
table.Property(u => u.FirstName)
.List(false);