going somewhere

This commit is contained in:
didier amyot committed 2023-02-08 09:14:27 -05:00
1 parent e7cec774d8
commit 8449cf94ee
9 files changed
+106 -24

No files matched your search

+11 -7
View File
@@ -26,15 +26,19 @@ The rust source must be `/nix/store/pmih7jv9r5xfaif92bza8w05876qvnvc-rust-src/`
nix develop nix develop
``` ```
## Workwork ## Todos
#### Architecture
* [ ] put all the ressources (migrations, templates and statics) into a ressources directory
#### Backend
* [ ] Parametrize `CURRENT_TIMESTAMP` * [ ] Parametrize `CURRENT_TIMESTAMP`
### Todo
#### API
#### Front end #### Front end
* [ ] return hello world. * [ ] Serve static files using actix
* [ ] Hack https://github.com/bigskysoftware/htmx/blob/master/src/ext/json-enc.js to all embedded fields.
* [ ] Create UI to create user
* [ ] Create UI to create security
+4 -2
View File
@@ -64,8 +64,8 @@ impl FromRequest for MiniJinjaRenderer {
async fn print_shit() -> std::io::Result<()>{ async fn print_shit() -> std::io::Result<()>{
let mut i = 0; let mut i = 0;
loop { loop {
sleep(Duration::from_millis(1000)).await; sleep(Duration::from_millis(10_000)).await;
println!("he he! {:?}", i); println!("Loop on a different thread {:?}", i);
i +=1; i +=1;
} }
} }
@@ -96,6 +96,8 @@ pub async fn web_ui_main(port: u16, enable_template_autoreload: bool) -> std::io
.service(views::actions) .service(views::actions)
.service(views::overview) .service(views::overview)
.service(views::overview_submit_button) .service(views::overview_submit_button)
.service(views::actions_partials)
.service(views::static_file)
.service(views::push_event) .service(views::push_event)
.wrap(ErrorHandlers::new().handler(StatusCode::NOT_FOUND, not_found)) .wrap(ErrorHandlers::new().handler(StatusCode::NOT_FOUND, not_found))
.wrap(Logger::default()) .wrap(Logger::default())
+51 -2
View File
@@ -5,6 +5,8 @@ use minijinja::context;
use serde::Deserialize; use serde::Deserialize;
use std::collections::HashMap; use std::collections::HashMap;
use log::info;
use resource::resource_str;
use crate::webui::MiniJinjaRenderer; use crate::webui::MiniJinjaRenderer;
@@ -41,9 +43,55 @@ pub async fn overview_submit_button(
tmpl_env.render("partials/overview/submit_button.html", ctx) tmpl_env.render("partials/overview/submit_button.html", ctx)
} }
#[actix_web::get("/partials/actions/action-form")]
pub async fn actions_partials(
req: HttpRequest,
tmpl_env: MiniJinjaRenderer,
query: web::Query<HashMap<String, String>>,
) -> actix_web::Result<impl Responder> {
let event_type = query.get("event_type").unwrap_or(&"404".to_string()).to_string();
let ctx = context!{event_type => event_type};
let template_location = format!("partials/actions/{:}.html", event_type);
info!("Getting template at: {:?}", template_location);
tmpl_env.render(template_location.as_str(), ctx)
}
#[actix_web::get("/static/{file_name}")]
pub async fn static_file(
req: HttpRequest
) -> actix_web::Result<impl Responder> {
let file_name = req.match_info().get("file_name").unwrap_or(&"404.html".to_string()).to_string();
let template_location = format!("static/{:}", file_name);
info!("Getting static file: {:?}", file_name);
Ok(template_location)
}
#[derive(Deserialize, Debug)]
struct Event1{
name: String,
age: i64,
}
#[derive(Deserialize, Debug)]
struct Event2{
name: String,
score: i64,
}
#[derive(Deserialize, Debug)]
enum Event{
Event1(Event1),
Event2(Event2),
}
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
struct CreateEventPayload { struct CreateEventPayload {
event: String, event: Event,
event_type: String, event_type: String,
} }
@@ -51,9 +99,10 @@ struct CreateEventPayload {
pub async fn push_event( pub async fn push_event(
req: HttpRequest, req: HttpRequest,
tmpl_env: MiniJinjaRenderer, tmpl_env: MiniJinjaRenderer,
web::Form(form): web::Form<CreateEventPayload>, web::Json(form): web::Json<CreateEventPayload>,
) -> actix_web::Result<impl Responder> { ) -> actix_web::Result<impl Responder> {
let shit = req.match_info().get("event_type").unwrap(); let shit = req.match_info().get("event_type").unwrap();
println!("payload: {:?}", form);
let ctx = context! { let ctx = context! {
event_type => shit, event_type => shit,
}; };
+6 -12
View File
@@ -14,25 +14,19 @@
class="uk-select" class="uk-select"
aria-label="Select" aria-label="Select"
class="uk-button uk-button-default" class="uk-button uk-button-default"
hx-get="/partials/overview/submit_button" hx-get="/partials/actions/action-form"
hx-trigger="change,load" hx-trigger="change,load"
hx-target="#submit-button" hx-target="#action-form"
hx-swap="outerHTML">> hx-swap="innerHTML">>
<option value="create_user">Create User</option> <option value="create_user">Create User</option>
<option value="create_security">Create Security</option> <option value="create_security">Create Security</option>
</select> </select>
</div> </div>
<div class="uk-margin"> <div id="action-form"></div>
<label class="uk-form-label">Event [JSON5]</label>
<textarea class="uk-textarea"
name="event"
style="font: 0.875rem/1.5 Consolas,monaco,monospace"
rows="5"
placeholder="JSON"></textarea>
</div>
<div id="submit-button"></div> <div id="submit-button"></div>
<div id="parent-div"></div>
</fieldset> </fieldset>
</form> </form>
+1
View File
@@ -8,6 +8,7 @@
<script src="https://cdn.jsdelivr.net/npm/uikit@3.15.23/dist/js/uikit.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/uikit@3.15.23/dist/js/uikit.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/uikit@3.15.23/dist/js/uikit-icons.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/uikit@3.15.23/dist/js/uikit-icons.min.js"></script>
<script src="https://unpkg.com/htmx.org@1.8.5"></script> <script src="https://unpkg.com/htmx.org@1.8.5"></script>
<script src="https://unpkg.com/htmx.org/dist/ext/json-enc.js"></script>
</head> </head>
<body> <body>
@@ -0,0 +1,7 @@
<label class="uk-label">
<input type="text" name="event.name">
</label>
{%include "partials/actions/submit_button.html"%}
@@ -0,0 +1,10 @@
<div class="uk-margin">
<label class="uk-form-label">Event [JSON5]</label>
<textarea class="uk-textarea"
name="event"
style="font: 0.875rem/1.5 Consolas,monaco,monospace"
rows="5"
placeholder="JSON"></textarea>
</div>
{%include "partials/actions/submit_button.html"%}
@@ -3,6 +3,7 @@
hx-post="/v1/events/{{event_type}}" hx-post="/v1/events/{{event_type}}"
hx-trigger="click" hx-trigger="click"
hx-target="#event-table-first-row" hx-target="#event-table-first-row"
hx-ext="json-enc"
hx-swap="outerHTML"> hx-swap="outerHTML">
Submit Submit ss
</button> </button>
+14
View File
@@ -0,0 +1,14 @@
(function() {
htmx.defineExtension('embedded-json-enc', {
onEvent: function (name, evt) {
if (name === "htmx:configRequest") {
evt.detail.headers['Content-Type'] = "application/json";
}
},
encodeParameters : function(xhr, parameters, elt) {
xhr.overrideMimeType('text/json');
return (JSON.stringify(parameters));
}
});
})()