mirror of
https://github.com/RoganDawes/P4wnP1_aloa.git
synced 2025-03-17 13:21:50 +01:00
WebClient: Open newly created TriggerActions in edit mode
This commit is contained in:
parent
65210bb519
commit
e85e6189fc
@ -17,6 +17,24 @@ func InitComponentsGeneric() {
|
||||
hvue.NewComponent(
|
||||
"startup-settings",
|
||||
hvue.Template(compStartupSettings),
|
||||
hvue.DataFunc(func(vm *hvue.VM) interface{} {
|
||||
data := &struct {
|
||||
*js.Object
|
||||
MasterTemplateName string `js:"MasterTemplateName"`
|
||||
|
||||
ShowTemplateSelect bool `js:"ShowTemplateSelect"`
|
||||
}{Object: O()}
|
||||
|
||||
data.ShowTemplateSelect = false
|
||||
data.MasterTemplateName = "startup"
|
||||
//data.MasterTemplate = NewMasterTemplate()
|
||||
return data
|
||||
}),
|
||||
hvue.Method("selectMasterTemplate",
|
||||
func(vm *hvue.VM, name *js.Object) {
|
||||
println("Selecting Startup Master Template :", name.String())
|
||||
vm.Set("MasterTemplateName", name)
|
||||
}),
|
||||
)
|
||||
hvue.NewComponent(
|
||||
"system",
|
||||
@ -276,6 +294,22 @@ const compStartupSettings = `
|
||||
|
||||
<q-card-main>
|
||||
<div class="row gutter-sm">
|
||||
<q-item tag="div" class="col-12">
|
||||
<select-string-from-array :values="$store.state.StoredMasterTemplateList" v-model="ShowTemplateSelect" title="Select Master Template used on startup" @load="selectMasterTemplate($event)"></select-string-from-array>
|
||||
<q-item-side icon="whatshot" color primary />
|
||||
<q-item-main>
|
||||
<q-item-tile label>Startup Master Template</q-item-tile>
|
||||
<q-item-tile sublabel>The template which is loaded on service start</q-item-tile>
|
||||
<q-item-tile>
|
||||
<div class="row no-wrap">
|
||||
<div class="fit">
|
||||
<q-input v-model="MasterTemplateName" color="primary" inverted readonly clearable></q-input>
|
||||
</div>
|
||||
<div><q-btn icon="more" color="primary" @click="ShowTemplateSelect=true" flat /></div>
|
||||
</div>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
|
||||
</div>
|
||||
</q-card-main>
|
||||
@ -291,7 +325,7 @@ const compMasterTemplate = `
|
||||
<!-- {{ $data }} -->
|
||||
|
||||
<q-card-main>
|
||||
<select-string-from-array :values="$store.state.StoredMasterTemplateList" v-model="showLoadModal" title="Load USB Master Template" @load="load($event)" @delete="deleteStored($event)" with-delete></select-string-from-array>
|
||||
<select-string-from-array :values="$store.state.StoredMasterTemplateList" v-model="showLoadModal" title="Load stored Master Template" @load="load($event)" @delete="deleteStored($event)" with-delete></select-string-from-array>
|
||||
<select-string-from-array :values="$store.state.StoredMasterTemplateList" v-model="showDeployStoredModal" title="Deploy stored Master Template" @load="deployStored($event)" @delete="deleteStored($event)" with-delete></select-string-from-array>
|
||||
<modal-string-input v-model="showStoreModal" title="Store current Master Template" @save="store($event)"></modal-string-input>
|
||||
|
||||
|
@ -151,11 +151,12 @@ func generateSelectOptionsTemplateTypes() *js.Object {
|
||||
return tts
|
||||
}
|
||||
|
||||
/*
|
||||
type TriggerActionCompData struct {
|
||||
*js.Object
|
||||
EditMode bool `js:"EditMode"`
|
||||
Edit bool `js:"Edit"`
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
func InitComponentsTriggerActions() {
|
||||
@ -176,9 +177,23 @@ func InitComponentsTriggerActions() {
|
||||
data.TemplateName = ""
|
||||
return &data
|
||||
}),
|
||||
hvue.Method("editTa",
|
||||
func(vm *hvue.VM, taID *js.Object) {
|
||||
vm.Get("$refs").Index(taID.Int()).Index(0).Call("setEditMode", true)
|
||||
}),
|
||||
hvue.Method("addTA",
|
||||
func(vm *hvue.VM) {
|
||||
vm.Get("$store").Call("dispatch", VUEX_ACTION_ADD_NEW_TRIGGER_ACTION)
|
||||
promise := vm.Get("$store").Call("dispatch", VUEX_ACTION_ADD_NEW_TRIGGER_ACTION)
|
||||
promise.Call("then",
|
||||
func(value *js.Object) {
|
||||
// set the trigger action into edit mode
|
||||
vm.Call("editTa", value)
|
||||
},
|
||||
func(reason *js.Object) {
|
||||
println("add TriggerAction failed", reason)
|
||||
},
|
||||
)
|
||||
|
||||
}),
|
||||
hvue.Method("storeTAS",
|
||||
func(vm *hvue.VM, name *js.Object) {
|
||||
@ -219,6 +234,9 @@ func InitComponentsTriggerActions() {
|
||||
hvue.Mounted(func(vm *hvue.VM) {
|
||||
vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_CURRENT_TRIGGER_ACTIONS_FROM_SERVER)
|
||||
vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_GPIO_NAMES_LIST)
|
||||
|
||||
js.Global.Set("tam",vm)
|
||||
|
||||
}),
|
||||
)
|
||||
|
||||
@ -227,13 +245,64 @@ func InitComponentsTriggerActions() {
|
||||
hvue.NewComponent(
|
||||
"TriggerAction",
|
||||
hvue.Template(templateTriggerAction),
|
||||
hvue.DataFunc(func(vm *hvue.VM) interface{} {
|
||||
data := &struct {
|
||||
*js.Object
|
||||
Edit bool `js:"Edit"`
|
||||
}{Object:O()}
|
||||
data.Edit = false
|
||||
return data
|
||||
}),
|
||||
hvue.PropObj("ta"),
|
||||
hvue.PropObj("edit",
|
||||
hvue.Types(hvue.PBoolean),
|
||||
),
|
||||
hvue.Method("setEditMode",
|
||||
func(vm *hvue.VM, enabled bool) {
|
||||
vm.Data.Set("Edit", enabled)
|
||||
}),
|
||||
hvue.Mounted(func(vm *hvue.VM) {
|
||||
vm.Set("Edit", vm.Get("edit"))
|
||||
}),
|
||||
)
|
||||
|
||||
hvue.NewComponent(
|
||||
"TriggerActionOverview",
|
||||
hvue.Template(templateTriggerActionOverview),
|
||||
hvue.PropObj("ta"),
|
||||
hvue.PropObj("edit",
|
||||
hvue.Types(hvue.PBoolean),
|
||||
),
|
||||
/*
|
||||
hvue.Mounted(func(vm *hvue.VM) {
|
||||
data := TriggerActionCompData{Object: vm.Data}
|
||||
data.Edit = vm.Get("edit").Bool()
|
||||
}),
|
||||
*/
|
||||
/*
|
||||
hvue.DataFunc(func(vm *hvue.VM) interface{} {
|
||||
data := &TriggerActionCompData{Object: O()}
|
||||
data.Edit = false
|
||||
|
||||
return data
|
||||
}),
|
||||
*/
|
||||
hvue.ComputedWithGetSet("EditMode",
|
||||
func(vm *hvue.VM) interface{} {
|
||||
/*
|
||||
data := TriggerActionCompData{Object: vm.Data}
|
||||
return data.Edit
|
||||
*/
|
||||
return vm.Get("edit")
|
||||
},
|
||||
func(vm *hvue.VM, newValue *js.Object) {
|
||||
/*
|
||||
data := TriggerActionCompData{Object: vm.Data}
|
||||
data.Edit = newValue.Bool()
|
||||
*/
|
||||
// Emit event for editmode change
|
||||
vm.Emit("edit", newValue)
|
||||
}),
|
||||
hvue.Computed("computedColor", func(vm *hvue.VM) interface{} {
|
||||
ta := &jsTriggerAction{Object: vm.Get("ta")}
|
||||
switch {
|
||||
@ -329,22 +398,7 @@ func InitComponentsTriggerActions() {
|
||||
}
|
||||
return strAction
|
||||
}),
|
||||
hvue.Mounted(func(vm *hvue.VM) {
|
||||
data := TriggerActionCompData{Object: vm.Data}
|
||||
data.EditMode = vm.Get("overview").Bool()
|
||||
}),
|
||||
hvue.DataFunc(func(vm *hvue.VM) interface{} {
|
||||
data := &TriggerActionCompData{Object: O()}
|
||||
data.EditMode = false
|
||||
|
||||
return data
|
||||
}),
|
||||
hvue.Method(
|
||||
"enableEditMode",
|
||||
func(vm *hvue.VM) {
|
||||
data := TriggerActionCompData{Object: vm.Data}
|
||||
data.EditMode = true
|
||||
}),
|
||||
hvue.Method(
|
||||
"updateTA",
|
||||
func(vm *hvue.VM) {
|
||||
@ -603,7 +657,7 @@ func InitComponentsTriggerActions() {
|
||||
const templateTriggerAction = `
|
||||
<div>
|
||||
<!-- {{ ta }} -->
|
||||
<TriggerActionOverview :ta="ta"></TriggerActionOverview>
|
||||
<TriggerActionOverview :ta="ta" :edit="Edit" @edit="Edit=$event"></TriggerActionOverview>
|
||||
</div>
|
||||
`
|
||||
const templateTriggerActionOverview = `
|
||||
@ -632,7 +686,7 @@ const templateTriggerActionOverview = `
|
||||
</span>
|
||||
|
||||
<div slot="right" v-if="!ta.Immutable">
|
||||
<q-btn color="primary" icon="edit" @click="enableEditMode" flat></q-btn>
|
||||
<q-btn color="primary" icon="edit" @click="EditMode=true" flat></q-btn>
|
||||
<q-btn color="negative" icon="delete" @click="deleteTA" flat></q-btn>
|
||||
</div>
|
||||
</q-card-title>
|
||||
@ -710,7 +764,7 @@ const templateTrigger = `
|
||||
<q-item-tile label>Value</q-item-tile>
|
||||
<q-item-tile sublabel>The numeric value which has to be received to activate the trigger</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="ta.TriggerData.Value" type="number" decimals="0" inverted :disable="!ta.IsActive"></q-input>
|
||||
<q-input v-model="ta.TriggerData.Value" type="number" inverted :disable="!ta.IsActive"></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
@ -778,7 +832,7 @@ const templateTrigger = `
|
||||
<q-item-tile label>Debounce duration</q-item-tile>
|
||||
<q-item-tile sublabel>Successive edge events in this duration are ignored</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="ta.TriggerData.DebounceMillis" type="number" suffix="ms" decimals="0" inverted :disable="!ta.IsActive"></q-input>
|
||||
<q-input v-model="ta.TriggerData.DebounceMillis" type="number" suffix="ms" inverted :disable="!ta.IsActive"></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
@ -857,7 +911,7 @@ const templateAction = `
|
||||
<q-item-tile label>Value</q-item-tile>
|
||||
<q-item-tile sublabel>The numeric value which is sent to the group channel</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="ta.ActionData.Value" color="secondary" type="number" decimals="0" inverted :disable="!ta.IsActive"></q-input>
|
||||
<q-input v-model="ta.ActionData.Value" color="secondary" type="number" inverted :disable="!ta.IsActive"></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
@ -919,7 +973,7 @@ const templateTriggerActionManager = `
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6" v-for="ta in $store.getters.triggerActions">
|
||||
<TriggerAction :key="ta.Id" :ta="ta" overview></TriggerAction>
|
||||
<TriggerAction :ref="ta.Id" :key="ta.Id" :ta="ta" :edit="false"></TriggerAction>
|
||||
</div>
|
||||
</div>
|
||||
</q-page>
|
||||
|
@ -1136,7 +1136,8 @@ func actionUpdateStoredTriggerActionSetsList(store *mvuex.Store, context *mvuex.
|
||||
return
|
||||
}
|
||||
|
||||
func actionUpdateCurrentTriggerActionsFromServer(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
|
||||
func actionUpdateCurrentTriggerActionsFromServer(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) *js.Object{
|
||||
/*
|
||||
go func() {
|
||||
println("Trying to fetch current TriggerActions from server")
|
||||
tastate, err := RpcClient.GetDeployedTriggerActionSet(defaultTimeout)
|
||||
@ -1157,18 +1158,59 @@ func actionUpdateCurrentTriggerActionsFromServer(store *mvuex.Store, context *mv
|
||||
}()
|
||||
|
||||
return
|
||||
*/
|
||||
return NewPromise(func() (res interface{}, err error) {
|
||||
println("Trying to fetch current TriggerActions from server")
|
||||
tastate, err := RpcClient.GetDeployedTriggerActionSet(defaultTimeout)
|
||||
if err != nil {
|
||||
QuasarNotifyError("Error fetching deployed TriggerActions", err.Error(), QUASAR_NOTIFICATION_POSITION_TOP)
|
||||
return false,err
|
||||
}
|
||||
|
||||
// ToDo: Clear list berfore adding back elements
|
||||
state.TriggerActionList.Flush()
|
||||
|
||||
for _, ta := range tastate.TriggerActions {
|
||||
|
||||
jsTA := NewTriggerAction()
|
||||
jsTA.fromGo(ta)
|
||||
state.TriggerActionList.UpdateEntry(jsTA)
|
||||
}
|
||||
|
||||
return true,err
|
||||
}).Object
|
||||
|
||||
}
|
||||
|
||||
func actionAddNewTriggerAction(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
|
||||
go func() {
|
||||
func actionAddNewTriggerAction(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) interface{} {
|
||||
return NewPromise(func() (res interface{}, err error) {
|
||||
newTA := NewTriggerAction()
|
||||
newTA.IsActive = false // don't activate by default
|
||||
RpcClient.DeployTriggerActionsSetAdd(defaultTimeout, &pb.TriggerActionSet{TriggerActions: []*pb.TriggerAction{newTA.toGo()}})
|
||||
added,_ := RpcClient.DeployTriggerActionsSetAdd(defaultTimeout, &pb.TriggerActionSet{TriggerActions: []*pb.TriggerAction{newTA.toGo()}})
|
||||
if added != nil && (len(added.TriggerActions) == 1) {
|
||||
res = added.TriggerActions[0].Id
|
||||
println("TriggerAction with ID", res, "added")
|
||||
|
||||
} else {
|
||||
err = errors.New("couldn't add TriggerAction")
|
||||
}
|
||||
|
||||
return
|
||||
}).Call("then",
|
||||
func(resAddPromise *js.Object) interface{} {
|
||||
// set the trigger action into edit mode
|
||||
updatePromise := actionUpdateCurrentTriggerActionsFromServer(store, context, state)
|
||||
|
||||
return updatePromise.Call("then",
|
||||
func(resUpdatePromise *js.Object) interface{} {
|
||||
// set the trigger action into edit mode
|
||||
return resAddPromise
|
||||
},
|
||||
)
|
||||
},
|
||||
)
|
||||
|
||||
actionUpdateCurrentTriggerActionsFromServer(store, context, state)
|
||||
}()
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func actionUpdateTriggerActions(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, jsTas *jsTriggerActionSet) {
|
||||
|
@ -49,4 +49,4 @@ func NewPromise(pf PromiseFunc) (p *Promise) {
|
||||
Object: jsP,
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user