diff --git a/.idea/.idea.HopFrame/.idea/workspace.xml b/.idea/.idea.HopFrame/.idea/workspace.xml
index 09e7fe9..5670919 100644
--- a/.idea/.idea.HopFrame/.idea/workspace.xml
+++ b/.idea/.idea.HopFrame/.idea/workspace.xml
@@ -9,33 +9,11 @@
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -55,7 +33,7 @@
@@ -102,26 +80,26 @@
- {
- "keyToString": {
- ".NET Launch Settings Profile.HopFrame.Testing.executor": "Run",
- ".NET Launch Settings Profile.HopFrame.Testing: https.executor": "Run",
- ".NET Project.HopFrame.Testing.executor": "Run",
- "72b118b0-a6fc-4561-acdf-74f0b454dbb8.executor": "Debug",
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "RunOnceActivity.git.unshallow": "true",
- "dcdf1689-dc07-47e4-8824-2e60a4fbf301.executor": "Debug",
- "git-widget-placeholder": "!18 on feature/unit-tests",
- "list.type.of.created.stylesheet": "CSS",
- "node.js.detected.package.eslint": "true",
- "node.js.detected.package.tslint": "true",
- "node.js.selected.package.eslint": "(autodetect)",
- "node.js.selected.package.tslint": "(autodetect)",
- "nodejs_package_manager_path": "npm",
- "settings.editor.selected.configurable": "preferences.environmentSetup",
- "vue.rearranger.settings.migration": "true"
+
+}]]>
@@ -181,7 +159,7 @@
-
+
@@ -327,48 +305,72 @@
1737285123218
-
+
+
+ 1737298835225
+
+
+
+ 1737298835225
+
+
+
+ 1737299111987
+
+
+
+ 1737299111987
+
+
+
+ 1737300408069
+
+
+
+ 1737300408069
+
+
-
+
-
+
-
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -396,6 +398,9 @@
-
+
+
+
+
\ 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..4bf6fe5 100644
--- a/src/HopFrame.Core/HopFrame.Core.csproj
+++ b/src/HopFrame.Core/HopFrame.Core.csproj
@@ -4,8 +4,20 @@
net9.0enableenable
+
+ true
+ README.md
+ MIT
+ HopFrame.Core
+
+
+ true
+ /
+
+
+
diff --git a/src/HopFrame.Web/HopFrame.Web.csproj b/src/HopFrame.Web/HopFrame.Web.csproj
index 7ab8884..f1cfc3b 100644
--- a/src/HopFrame.Web/HopFrame.Web.csproj
+++ b/src/HopFrame.Web/HopFrame.Web.csproj
@@ -4,8 +4,19 @@
net9.0enableenable
+
+ true
+ README.md
+ MIT
+ HopFrame.Web
+
+
+ true
+ /
+
+
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/HopFrame.Testing.csproj b/testing/HopFrame.Testing/HopFrame.Testing.csproj
index aa6580f..200d962 100644
--- a/testing/HopFrame.Testing/HopFrame.Testing.csproj
+++ b/testing/HopFrame.Testing/HopFrame.Testing.csproj
@@ -4,6 +4,8 @@
net9.0enableenable
+
+ false
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);