diff --git a/main.go b/main.go index bb900a6..b29952f 100644 --- a/main.go +++ b/main.go @@ -29,7 +29,7 @@ import ( "time" ) -const VERSION = "v39" +const VERSION = "v40" var ( logger *slog.Logger @@ -663,6 +663,27 @@ func pageDatapointEdit(w http.ResponseWriter, r *http.Request, _ *session.T) { / } } + /* Triggers using this datapoint is provided as a list to update + * if changing the datapoint name. Parsing expr and automatically + * changing it to renamed datapoints would be nice in the future. */ + var triggers []Trigger + triggers, err = TriggersRetrieveByDatapoint(datapoint.Name) + if err != nil { + httpError(w, werr.Wrap(err).Log()) + return + } + slices.SortFunc(triggers, func(a, b Trigger) int { + an := strings.ToUpper(a.Name) + bn := strings.ToUpper(b.Name) + if an < bn { + return -1 + } + if an > bn { + return 1 + } + return 0 + }) + page := Page{ LAYOUT: "main", PAGE: "datapoint_edit", @@ -674,6 +695,7 @@ func pageDatapointEdit(w http.ResponseWriter, r *http.Request, _ *session.T) { / page.Data = map[string]any{ "Datapoint": datapoint, + "Triggers": triggers, } page.Render(w, r) return diff --git a/sql/00027.sql b/sql/00027.sql new file mode 100644 index 0000000..83a5625 --- /dev/null +++ b/sql/00027.sql @@ -0,0 +1,22 @@ +/* Updating a datapoint name also updates the jsonb array entry */ +CREATE OR REPLACE FUNCTION update_triggers_datapoint_name() + RETURNS TRIGGER + LANGUAGE PLPGSQL + AS +$$ +BEGIN +UPDATE "trigger" + SET + datapoints = (datapoints - OLD.name) || jsonb_build_array(NEW.name) + WHERE + datapoints ? OLD.name; + + RETURN NEW; +END; +$$; + +CREATE TRIGGER datapoint_renamed + AFTER UPDATE + ON public.datapoint + FOR EACH ROW + EXECUTE PROCEDURE update_triggers_datapoint_name(); diff --git a/static/js/datapoint_edit.mjs b/static/js/datapoint_edit.mjs index dfe5e9c..8180084 100644 --- a/static/js/datapoint_edit.mjs +++ b/static/js/datapoint_edit.mjs @@ -1,5 +1,6 @@ export class UI { - constructor() { + constructor(datapointData) { + this.datapoint = datapointData document.addEventListener('keydown', evt=>this.keyHandler(evt)) document.querySelector('input[name="group"]').focus() } @@ -16,4 +17,10 @@ export class UI { break } } + check_rename() { + let newName = document.querySelector(`input[name="name"]`).value + if (newName != this.datapoint.Name) + return confirm(`Trigger expressions needs to be manually updated when renaming a datapoint.\nDo you want to rename the datapoint?`) + return true + } } diff --git a/views/pages/datapoint_edit.gotmpl b/views/pages/datapoint_edit.gotmpl index e4a138b..3cfe372 100644 --- a/views/pages/datapoint_edit.gotmpl +++ b/views/pages/datapoint_edit.gotmpl @@ -3,48 +3,59 @@ {{ block "page_label" . }}{{end}} -