// +build js package main import ( "github.com/gopherjs/gopherjs/js" "github.com/mame82/hvue" ) type CompHIDJobsData struct { *js.Object } func newCompHIDJobsData(vm *hvue.VM) interface{} { cc := &CompHIDJobsData{ Object: js.Global.Get("Object").New(), } return cc } func InitCompHIDJobs() { hvue.NewComponent( "hid-job-overview", hvue.Template(compHIDJobOverviewTemplate), hvue.DataFunc(newCompHIDJobsData), hvue.Computed("jobs", func(vm *hvue.VM) interface{} { //return vm.Get("$store").Get("state").Get("hidJobList").Get("jobs") return vm.Get("$store").Get("getters").Get("hidjobs") }), ) hvue.NewComponent( "hid-job-overview-item", hvue.Template(compHIDJobOverViewItemTemplate), hvue.DataFunc(func(vm *hvue.VM) interface{} { data := &struct { *js.Object ShowDetails bool `js:"ShowDetails"` }{Object: O()} data.ShowDetails = false return data }), hvue.Method("cancel", func(vm *hvue.VM) { job := &jsHidJobState{Object:vm.Get("job")} println("Aborting job :", job.Id) vm.Get("$store").Call("dispatch", VUEX_ACTION_CANCEL_HID_JOB, job.Id) }), hvue.Computed("jobstate", func(vm *hvue.VM) interface{} { //fetch job and cast back to jobstate job := &jsHidJobState{Object:vm.Get("job")} switch { case job.HasFailed && !job.HasSucceeded: return "FAILED" case job.HasSucceeded && !job.HasFailed: return "SUCCEEDED" case !(job.HasFailed || job.HasSucceeded): return "RUNNING" default: return "UNKNOWN_STATE" } }), hvue.Computed("jobcolor", func(vm *hvue.VM) interface{} { //fetch job and cast back to jobstate job := &jsHidJobState{Object:vm.Get("job")} switch { case job.HasFailed && !job.HasSucceeded: return "negative" case job.HasSucceeded && !job.HasFailed: return "positive" case !(job.HasFailed || job.HasSucceeded): return "warning" default: return "info" } }), hvue.Computed("jobicon", func(vm *hvue.VM) interface{} { //fetch job and cast back to jobstate job := &jsHidJobState{Object:vm.Get("job")} switch { case job.HasFailed && !job.HasSucceeded: return "error" case job.HasSucceeded && !job.HasFailed: return "check_circle" case !(job.HasFailed || job.HasSucceeded): return "sync" default: return "help" } }), hvue.PropObj("job", hvue.Required), ) hvue.NewComponent( "job-detail-modal", hvue.Template(templateHIDJobDetails), hvue.ComputedWithGetSet( "visible", func(vm *hvue.VM) interface{} { return vm.Get("value") }, func(vm *hvue.VM, newValue *js.Object) { vm.Call("$emit", "input", newValue) }, ), hvue.PropObj( "value", hvue.Required, hvue.Types(hvue.PBoolean), ), hvue.PropObj( "job", hvue.Required, ), hvue.Computed("jobstate", func(vm *hvue.VM) interface{} { //fetch job and cast back to jobstate job := &jsHidJobState{Object:vm.Get("job")} switch { case job.HasFailed && !job.HasSucceeded: return "FAILED" case job.HasSucceeded && !job.HasFailed: return "SUCCEEDED" case !(job.HasFailed || job.HasSucceeded): return "RUNNING" default: return "UNKNOWN_STATE" } }), hvue.Computed("jobcolor", func(vm *hvue.VM) interface{} { //fetch job and cast back to jobstate job := &jsHidJobState{Object:vm.Get("job")} switch { case job.HasFailed && !job.HasSucceeded: return "negative" case job.HasSucceeded && !job.HasFailed: return "positive" case !(job.HasFailed || job.HasSucceeded): return "warning" default: return "info" } }), ) } const ( /* // HIDJobList type jsHidJobState struct { *js.Object Id int64 `js:"id"` VmId int64 `js:"vmId"` HasFailed bool `js:"hasFailed"` HasSucceeded bool `js:"hasSucceeded"` LastMessage string `js:"lastMessage"` TextResult string `js:"textResult"` LastUpdateTime string `js:"lastUpdateTime"` //JSON timestamp from server ScriptSource string `js:"textSource"` } */ templateHIDJobDetails = ` HIDScript job details Job ID VM ID Sate HIDScript result HIDScript source ` compHIDJobOverViewItemTemplate = ` Job {{ job.id }} State {{ jobstate }} cancel HIDScript job {{ job.id }} show HIDScript job details ` //{ "evtype": 0, "vmId": 2, "jobId": 3, "hasError": false, "result": "null", "error": "", "message": "Script started", "time": "2018-07-30 04:56:42.297533 +0000 UTC m=+7625.097825001" } compHIDJobOverviewTemplate = ` cancel all running HIDScript jobs delete succeeded HID jobs from list delete failed HID jobs from list ` )