Skip to content

Commit f033eb4

Browse files
committed
Merge branch 'twharmon-update-goui'
2 parents 3167287 + 0b1ed93 commit f033eb4

File tree

8 files changed

+30
-29
lines changed

8 files changed

+30
-29
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
<!doctype html><html lang=en><meta name=viewport content="width=device-width,initial-scale=1"><title>GoUI</title>
22
<link href=/css/currentStyle.css rel=stylesheet><div id=root></div><script>(()=>{if(typeof global!="undefined");else if(typeof window!="undefined")window.global=window;else if(typeof self!="undefined")self.global=self;else throw new Error("cannot export Go (neither global, window nor self is defined)");!global.require&&typeof require!="undefined"&&(global.require=require),!global.fs&&global.require&&(global.fs=require("fs"));const e=()=>{const e=new Error("not implemented");return e.code="ENOSYS",e};if(!global.fs){let t="";global.fs={constants:{O_WRONLY:-1,O_RDWR:-1,O_CREAT:-1,O_TRUNC:-1,O_APPEND:-1,O_EXCL:-1},writeSync(e,s){t+=n.decode(s);const o=t.lastIndexOf(`
3-
`);return o!=-1&&(console.log(t.substr(0,o)),t=t.substr(o+1)),s.length},write(t,n,s,o,i,a){if(s!==0||o!==n.length||i!==null){a(e());return}const r=this.writeSync(t,n);a(null,r)},chmod(t,n,s){s(e())},chown(t,n,s,o){o(e())},close(t,n){n(e())},fchmod(t,n,s){s(e())},fchown(t,n,s,o){o(e())},fstat(t,n){n(e())},fsync(e,t){t(null)},ftruncate(t,n,s){s(e())},lchown(t,n,s,o){o(e())},link(t,n,s){s(e())},lstat(t,n){n(e())},mkdir(t,n,s){s(e())},open(t,n,s,o){o(e())},read(t,n,s,o,i,a){a(e())},readdir(t,n){n(e())},readlink(t,n){n(e())},rename(t,n,s){s(e())},rmdir(t,n){n(e())},stat(t,n){n(e())},symlink(t,n,s){s(e())},truncate(t,n,s){s(e())},unlink(t,n){n(e())},utimes(t,n,s,o){o(e())}}}if(global.process||(global.process={getuid(){return-1},getgid(){return-1},geteuid(){return-1},getegid(){return-1},getgroups(){throw e()},pid:-1,ppid:-1,umask(){throw e()},cwd(){throw e()},chdir(){throw e()}}),!global.crypto){const e=require("crypto");global.crypto={getRandomValues(t){e.randomFillSync(t)}}}global.performance||(global.performance={now(){const[e,t]=process.hrtime();return e*1e3+t/1e6}}),global.TextEncoder||(global.TextEncoder=require("util").TextEncoder),global.TextDecoder||(global.TextDecoder=require("util").TextDecoder);const o=new TextEncoder("utf-8"),n=new TextDecoder("utf-8");let t=new DataView(new ArrayBuffer(8));var s=[];if(global.Go=class{constructor(){this._callbackTimeouts=new Map,this._nextCallbackTimeoutID=1;const e=()=>new DataView(this._inst.exports.memory.buffer),i=e=>{t.setBigInt64(0,e,!0);const n=t.getFloat64(0,!0);if(n===0)return void 0;if(!isNaN(n))return n;const s=e&4294967295n;return this._values[s]},u=t=>{let n=e().getBigUint64(t,!0);return i(n)},c=e=>{const s=2146959360n;if(typeof e=="number")return isNaN(e)?s<<32n:e===0?s<<32n|1n:(t.setFloat64(0,e,!0),t.getBigInt64(0,!0));switch(e){case void 0:return 0n;case null:return s<<32n|2n;case!0:return s<<32n|3n;case!1:return s<<32n|4n}let n=this._ids.get(e);n===void 0&&(n=this._idPool.pop(),n===void 0&&(n=BigInt(this._values.length)),this._values[n]=e,this._goRefCounts[n]=0,this._ids.set(e,n)),this._goRefCounts[n]++;let o=1n;switch(typeof e){case"string":o=2n;break;case"symbol":o=3n;break;case"function":o=4n;break}return n|(s|o)<<32n},a=(t,n)=>{let s=c(n);e().setBigUint64(t,s,!0)},l=(e,t)=>new Uint8Array(this._inst.exports.memory.buffer,e,t),d=(e,t)=>{const s=new Array(t);for(let n=0;n<t;n++)s[n]=u(e+n*8);return s},r=(e,t)=>n.decode(new DataView(this._inst.exports.memory.buffer,e,t)),h=Date.now()-performance.now();this.importObject={wasi_snapshot_preview1:{fd_write:function(t,o,i,a){let r=0;if(t==1)for(let t=0;t<i;t++){let a=o+t*8,l=e().getUint32(a+0,!0),c=e().getUint32(a+4,!0);r+=c;for(let t=0;t<c;t++){let o=e().getUint8(l+t);if(o==13);else if(o==10){let e=n.decode(new Uint8Array(s));s=[],console.log(e)}else s.push(o)}}else console.error("invalid file descriptor:",t);return e().setUint32(a,r,!0),0},fd_close:()=>0,fd_fdstat_get:()=>0,fd_seek:()=>0,proc_exit:e=>{if(global.process)process.exit(e);else throw"trying to exit with code "+e},random_get:(e,t)=>(crypto.getRandomValues(l(e,t)),0)},gojs:{"runtime.ticks":()=>h+performance.now(),"runtime.sleepTicks":e=>{setTimeout(this._inst.exports.go_scheduler,e)},"syscall/js.finalizeRef":e=>{console.error("syscall/js.finalizeRef not implemented")},"syscall/js.stringVal":(e,t)=>{const n=r(e,t);return c(n)},"syscall/js.valueGet":(e,t,n)=>{let s=r(t,n),o=i(e),a=Reflect.get(o,s);return c(a)},"syscall/js.valueSet":(e,t,n,s)=>{const o=i(e),a=r(t,n),c=i(s);Reflect.set(o,a,c)},"syscall/js.valueDelete":(e,t,n)=>{const s=i(e),o=r(t,n);Reflect.deleteProperty(s,o)},"syscall/js.valueIndex":(e,t)=>c(Reflect.get(i(e),t)),"syscall/js.valueSetIndex":(e,t,n)=>{Reflect.set(i(e),t,i(n))},"syscall/js.valueCall":(t,n,s,o,c,l,u)=>{const h=i(n),m=r(s,o),f=d(c,l,u);try{const n=Reflect.get(h,m);a(t,Reflect.apply(n,h,f)),e().setUint8(t+8,1)}catch(n){a(t,n),e().setUint8(t+8,0)}},"syscall/js.valueInvoke":(t,n,s,o,r)=>{try{const c=i(n),l=d(s,o,r);a(t,Reflect.apply(c,void 0,l)),e().setUint8(t+8,1)}catch(n){a(t,n),e().setUint8(t+8,0)}},"syscall/js.valueNew":(t,n,s,o,r)=>{const c=i(n),l=d(s,o,r);try{a(t,Reflect.construct(c,l)),e().setUint8(t+8,1)}catch(n){a(t,n),e().setUint8(t+8,0)}},"syscall/js.valueLength":e=>i(e).length,"syscall/js.valuePrepareString":(t,n)=>{const r=String(i(n)),s=o.encode(r);a(t,s),e().setInt32(t+8,s.length,!0)},"syscall/js.valueLoadString":(e,t,n,s)=>{const o=i(e);l(t,n,s).set(o)},"syscall/js.valueInstanceOf":(e,t)=>i(e)instanceof i(t),"syscall/js.copyBytesToGo":(t,n,s,o,a)=>{let h=t,c=t+4;const d=l(n,s),r=i(a);if(!(r instanceof Uint8Array||r instanceof Uint8ClampedArray)){e().setUint8(c,0);return}const u=r.subarray(0,d.length);d.set(u),e().setUint32(h,u.length,!0),e().setUint8(c,1)},"syscall/js.copyBytesToJS":(t,n,s,o)=>{let u=t,c=t+4;const r=i(n),h=l(s,o);if(!(r instanceof Uint8Array||r instanceof Uint8ClampedArray)){e().setUint8(c,0);return}const d=h.subarray(0,r.length);r.set(d),e().setUint32(u,d.length,!0),e().setUint8(c,1)}}},this.importObject.env=this.importObject.gojs}async run(e){this._inst=e,this._values=[NaN,0,null,!0,!1,global,this],this._goRefCounts=[],this._ids=new Map,this._idPool=[],this.exited=!1;const t=new DataView(this._inst.exports.memory.buffer);for(;!0;){const e=new Promise(e=>{this._resolveCallbackPromise=()=>{if(this.exited)throw new Error("bad callback: Go program has already exited");setTimeout(e,0)}});if(this._inst.exports._start(),this.exited)break;await e}}_resume(){if(this.exited)throw new Error("Go program has already exited");this._inst.exports.resume(),this.exited&&this._resolveExitPromise()}_makeFuncWrapper(e){const t=this;return function(){const n={id:e,this:this,args:arguments};return t._pendingEvent=n,t._resume(),n.result}}},global.require&&global.require.main===module&&global.process&&global.process.versions&&!global.process.versions.electron){process.argv.length!=3&&(console.error("usage: go_js_wasm_exec [wasm binary] [arguments]"),process.exit(1));const e=new Go;WebAssembly.instantiate(fs.readFileSync(process.argv[2]),e.importObject).then(t=>e.run(t.instance)).catch(e=>{console.error(e),process.exit(1)})}})();const go=new Go,fetched=fetch("main.wasm");"instantiateStreaming"in WebAssembly?WebAssembly.instantiateStreaming(fetched,go.importObject).then(e=>go.run(e.instance)):fetched.then(e=>e.arrayBuffer()).then(e=>WebAssembly.instantiate(e,go.importObject).then(e=>go.run(e.instance)))</script>
3+
`);return o!=-1&&(console.log(t.substr(0,o)),t=t.substr(o+1)),s.length},write(t,n,s,o,i,a){if(s!==0||o!==n.length||i!==null){a(e());return}const r=this.writeSync(t,n);a(null,r)},chmod(t,n,s){s(e())},chown(t,n,s,o){o(e())},close(t,n){n(e())},fchmod(t,n,s){s(e())},fchown(t,n,s,o){o(e())},fstat(t,n){n(e())},fsync(e,t){t(null)},ftruncate(t,n,s){s(e())},lchown(t,n,s,o){o(e())},link(t,n,s){s(e())},lstat(t,n){n(e())},mkdir(t,n,s){s(e())},open(t,n,s,o){o(e())},read(t,n,s,o,i,a){a(e())},readdir(t,n){n(e())},readlink(t,n){n(e())},rename(t,n,s){s(e())},rmdir(t,n){n(e())},stat(t,n){n(e())},symlink(t,n,s){s(e())},truncate(t,n,s){s(e())},unlink(t,n){n(e())},utimes(t,n,s,o){o(e())}}}if(global.process||(global.process={getuid(){return-1},getgid(){return-1},geteuid(){return-1},getegid(){return-1},getgroups(){throw e()},pid:-1,ppid:-1,umask(){throw e()},cwd(){throw e()},chdir(){throw e()}}),!global.crypto){const e=require("crypto");global.crypto={getRandomValues(t){e.randomFillSync(t)}}}global.performance||(global.performance={now(){const[e,t]=process.hrtime();return e*1e3+t/1e6}}),global.TextEncoder||(global.TextEncoder=require("util").TextEncoder),global.TextDecoder||(global.TextDecoder=require("util").TextDecoder);const o=new TextEncoder("utf-8"),n=new TextDecoder("utf-8");let t=new DataView(new ArrayBuffer(8));var s=[];if(global.Go=class{constructor(){this._callbackTimeouts=new Map,this._nextCallbackTimeoutID=1;const e=()=>new DataView(this._inst.exports.memory.buffer),i=e=>{t.setBigInt64(0,e,!0);const n=t.getFloat64(0,!0);if(n===0)return void 0;if(!isNaN(n))return n;const s=e&4294967295n;return this._values[s]},u=t=>{let n=e().getBigUint64(t,!0);return i(n)},c=e=>{const s=2146959360n;if(typeof e=="number")return isNaN(e)?s<<32n:e===0?s<<32n|1n:(t.setFloat64(0,e,!0),t.getBigInt64(0,!0));switch(e){case void 0:return 0n;case null:return s<<32n|2n;case!0:return s<<32n|3n;case!1:return s<<32n|4n}let n=this._ids.get(e);n===void 0&&(n=this._idPool.pop(),n===void 0&&(n=BigInt(this._values.length)),this._values[n]=e,this._goRefCounts[n]=0,this._ids.set(e,n)),this._goRefCounts[n]++;let o=1n;switch(typeof e){case"string":o=2n;break;case"symbol":o=3n;break;case"function":o=4n;break}return n|(s|o)<<32n},a=(t,n)=>{let s=c(n);e().setBigUint64(t,s,!0)},l=(e,t)=>new Uint8Array(this._inst.exports.memory.buffer,e,t),d=(e,t)=>{const s=new Array(t);for(let n=0;n<t;n++)s[n]=u(e+n*8);return s},r=(e,t)=>n.decode(new DataView(this._inst.exports.memory.buffer,e,t)),h=Date.now()-performance.now();this.importObject={wasi_snapshot_preview1:{fd_write:function(t,o,i,a){let r=0;if(t==1)for(let t=0;t<i;t++){let a=o+t*8,l=e().getUint32(a+0,!0),c=e().getUint32(a+4,!0);r+=c;for(let t=0;t<c;t++){let o=e().getUint8(l+t);if(o==13);else if(o==10){let e=n.decode(new Uint8Array(s));s=[],console.log(e)}else s.push(o)}}else console.error("invalid file descriptor:",t);return e().setUint32(a,r,!0),0},fd_close:()=>0,fd_fdstat_get:()=>0,fd_seek:()=>0,proc_exit:e=>{if(global.process)process.exit(e);else throw"trying to exit with code "+e},random_get:(e,t)=>(crypto.getRandomValues(l(e,t)),0)},gojs:{"runtime.ticks":()=>h+performance.now(),"runtime.sleepTicks":e=>{setTimeout(this._inst.exports.go_scheduler,e)},"syscall/js.finalizeRef":e=>{console.error("syscall/js.finalizeRef not implemented")},"syscall/js.stringVal":(e,t)=>{const n=r(e,t);return c(n)},"syscall/js.valueGet":(e,t,n)=>{let s=r(t,n),o=i(e),a=Reflect.get(o,s);return c(a)},"syscall/js.valueSet":(e,t,n,s)=>{const o=i(e),a=r(t,n),c=i(s);Reflect.set(o,a,c)},"syscall/js.valueDelete":(e,t,n)=>{const s=i(e),o=r(t,n);Reflect.deleteProperty(s,o)},"syscall/js.valueIndex":(e,t)=>c(Reflect.get(i(e),t)),"syscall/js.valueSetIndex":(e,t,n)=>{Reflect.set(i(e),t,i(n))},"syscall/js.valueCall":(t,n,s,o,c,l,u)=>{const h=i(n),m=r(s,o),f=d(c,l,u);try{const n=Reflect.get(h,m);a(t,Reflect.apply(n,h,f)),e().setUint8(t+8,1)}catch(n){a(t,n),e().setUint8(t+8,0)}},"syscall/js.valueInvoke":(t,n,s,o,r)=>{try{const c=i(n),l=d(s,o,r);a(t,Reflect.apply(c,void 0,l)),e().setUint8(t+8,1)}catch(n){a(t,n),e().setUint8(t+8,0)}},"syscall/js.valueNew":(t,n,s,o,r)=>{const c=i(n),l=d(s,o,r);try{a(t,Reflect.construct(c,l)),e().setUint8(t+8,1)}catch(n){a(t,n),e().setUint8(t+8,0)}},"syscall/js.valueLength":e=>i(e).length,"syscall/js.valuePrepareString":(t,n)=>{const r=String(i(n)),s=o.encode(r);a(t,s),e().setInt32(t+8,s.length,!0)},"syscall/js.valueLoadString":(e,t,n,s)=>{const o=i(e);l(t,n,s).set(o)},"syscall/js.valueInstanceOf":(e,t)=>i(e)instanceof i(t),"syscall/js.copyBytesToGo":(t,n,s,o,a)=>{let h=t,c=t+4;const d=l(n,s),r=i(a);if(!(r instanceof Uint8Array||r instanceof Uint8ClampedArray)){e().setUint8(c,0);return}const u=r.subarray(0,d.length);d.set(u),e().setUint32(h,u.length,!0),e().setUint8(c,1)},"syscall/js.copyBytesToJS":(t,n,s,o)=>{let u=t,c=t+4;const r=i(n),h=l(s,o);if(!(r instanceof Uint8Array||r instanceof Uint8ClampedArray)){e().setUint8(c,0);return}const d=h.subarray(0,r.length);r.set(d),e().setUint32(u,d.length,!0),e().setUint8(c,1)}}},this.importObject.env=this.importObject.gojs}async run(e){this._inst=e,this._values=[NaN,0,null,!0,!1,global,this],this._goRefCounts=[],this._ids=new Map,this._idPool=[],this.exited=!1;const t=new DataView(this._inst.exports.memory.buffer);for(;!0;){const e=new Promise(e=>{this._resolveCallbackPromise=()=>{if(this.exited)throw new Error("bad callback: Go program has already exited");setTimeout(e,0)}});if(this._inst.exports._start(),this.exited)break;await e}}_resume(){if(this.exited)throw new Error("Go program has already exited");this._inst.exports.resume(),this.exited&&this._resolveExitPromise()}_makeFuncWrapper(e){const t=this;return function(){const n={id:e,this:this,args:arguments};return t._pendingEvent=n,t._resume(),n.result}}},global.require&&global.require.main===module&&global.process&&global.process.versions&&!global.process.versions.electron){process.argv.length!=3&&(console.error("usage: go_js_wasm_exec [wasm binary] [arguments]"),process.exit(1));const e=new Go;WebAssembly.instantiate(fs.readFileSync(process.argv[2]),e.importObject).then(t=>e.run(t.instance)).catch(e=>{console.error(e),process.exit(1)})}})();let elements={},nodes=new Map;window._GOUI_ELEMENTS=elements;let randInt=()=>Math.floor(Math.random()*2e9),generateId=()=>{let e=randInt();for(;elements[e];)e=randInt();return e},createElement=(e,t)=>{let n=generateId(),s=document.createElement(e);return elements[n]=s,t&&nodes.set(s,n),n},createElementNS=(e,t)=>{let n=generateId();return elements[n]=document.createElementNS(t,e),n},createTextNode=e=>{let t=generateId();return elements[t]=document.createTextNode(e),t},decoder=new TextDecoder,memory,getString=(e,t)=>decoder.decode(memory.buffer.slice(e,e+t)),go=new Go;go.importObject.env={createElement:(e,t,n)=>createElement(getString(e,t),n),createTd:e=>createElement("td",e),createTr:e=>createElement("tr",e),createSpan:e=>createElement("span",e),createA:e=>createElement("a",e),createDiv:e=>createElement("div",e),createTable:e=>createElement("table",e),createTbody:e=>createElement("tbody",e),createH1:e=>createElement("h1",e),createButton:e=>createElement("button",e),createElementNS:(e,t,n,s)=>createElementNS(getString(e,t),getString(n,s)),createTextNode:(e,t)=>createTextNode(getString(e,t)),appendChild:(e,t)=>{elements[e].appendChild(elements[t])},setStr:(e,t,n,s,o)=>{elements[e][getString(t,n)]=getString(s,o)},setClass:(e,t,n)=>{elements[e].className=getString(t,n)},setData:(e,t,n)=>{elements[e].data=getString(t,n)},setAriaHidden:(e,t)=>{elements[e].ariaHidden=!!t},setBool:(e,t,n,s)=>{elements[e][getString(t,n)]=!!s},replaceWith:(e,t)=>{elements[e].replaceWith(elements[t]),delete elements[e]},removeAttribute:(e,t,n)=>{elements[e].removeAttribute(getString(t,n))},removeNode:e=>{elements[e].remove()},disposeNode:(e,t)=>{t&&nodes.delete(elements[e]),delete elements[e]},cloneNode:e=>{let t=generateId();return elements[t]=elements[e].cloneNode(!0),t},moveBefore:(e,t,n,s)=>{let a=elements[s],o=elements[e],i=o.childNodes[n];if(a===i)return;let r=a.nextSibling;o.insertBefore(a,i),i!==o.lastChild&&!t&&o.insertBefore(i,r)},mount:(e,t,n)=>{let s=document.querySelector(getString(t,n));s.appendChild(elements[e])}},WebAssembly.instantiateStreaming(fetch("main.wasm"),go.importObject).then(e=>{let t=e.instance,n=t.exports;window.addEventListener("click",e=>{let t=e.target;for(;t;){let s=nodes.get(t);s&&(window._GOUI_EVENT=e,n.callClickListener(s)),t=t.parentNode}}),memory=n.memory,go.run(t)})</script>

frameworks/keyed/goui/build/main.wasm

-43.4 KB
Binary file not shown.

frameworks/keyed/goui/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ module main
22

33
go 1.20
44

5-
require github.com/twharmon/goui v0.1.2
5+
require github.com/twharmon/goui v0.2.0
66

7-
// replace github.com/twharmon/goui v0.1.2 => ../../../../goui
7+
replace github.com/twharmon/goui v0.2.0 => ../../../../goui

frameworks/keyed/goui/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
github.com/twharmon/goui v0.1.2 h1:aYU4iGy4ME85PFcVPTMIIvPa30GmqCTFDZw0HU3aPAw=
22
github.com/twharmon/goui v0.1.2/go.mod h1:Z2CGgcOPuRhYamMA5sNrscZCdo8nm8xQcXa+RwQDnZ4=
3+
github.com/twharmon/goui v0.2.0 h1:NDIQCubFN1YivnKcYqtHitr5m4LP6TtdJEhDtQIXehM=
4+
github.com/twharmon/goui v0.2.0/go.mod h1:Z2CGgcOPuRhYamMA5sNrscZCdo8nm8xQcXa+RwQDnZ4=

frameworks/keyed/goui/goui.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@ server:
22
port: 5000
33
proxy: http://localhost:8080
44
build:
5-
compiler: tinygo
65
wasm_opt: true
76
no_traps: true

frameworks/keyed/goui/src/app/app.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,6 @@ type AppState struct {
1111
Selected int
1212
}
1313

14-
var preload = goui.Element("span", &goui.Attributes{
15-
Class: "preloadicon glyphicon glyphicon-remove",
16-
AriaHidden: true,
17-
})
18-
1914
func App(goui.NoProps) *goui.Node {
2015
state, setState := goui.UseState(&AppState{})
2116

@@ -35,7 +30,12 @@ func App(goui.NoProps) *goui.Node {
3530
}),
3631
})},
3732
}),
38-
preload,
33+
preloadIcon,
3934
},
4035
})
4136
}
37+
38+
var preloadIcon = goui.Element("span", &goui.Attributes{
39+
Class: "preloadicon glyphicon glyphicon-remove",
40+
AriaHidden: true,
41+
})

frameworks/keyed/goui/src/app/jumbotron.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,6 @@ func (jp JumbotronProps) Memo() goui.Deps {
1414
return goui.Deps{}
1515
}
1616

17-
var heading = goui.Element("div", &goui.Attributes{
18-
Class: "col-md-6",
19-
Children: goui.Children{
20-
goui.Element("h1", &goui.Attributes{Children: goui.Children{goui.Text("GoUI")}}),
21-
},
22-
})
23-
2417
func button(id string, txt string, onclick *goui.Callback[func(*goui.MouseEvent)]) *goui.Node {
2518
return goui.Element("div", &goui.Attributes{
2619
Class: "col-sm-6 smallpad",
@@ -122,3 +115,10 @@ func Jumbotron(props JumbotronProps) *goui.Node {
122115
},
123116
})
124117
}
118+
119+
var heading = goui.Element("div", &goui.Attributes{
120+
Class: "col-md-6",
121+
Children: goui.Children{
122+
goui.Element("h1", &goui.Attributes{Children: goui.Children{goui.Text("GoUI")}}),
123+
},
124+
})

frameworks/keyed/goui/src/app/row.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,14 @@ type RowProps struct {
1313
Item *data.Item
1414
}
1515

16-
func (rp RowProps) Key() any {
17-
return rp.Item.ID
16+
func (rp RowProps) Key() string {
17+
return strconv.Itoa(rp.Item.ID)
1818
}
1919

2020
func (rp RowProps) Memo() goui.Deps {
2121
return goui.Deps{rp.Selected, rp.Item.Label}
2222
}
2323

24-
var emptyTD = goui.Element("td", &goui.Attributes{Class: "col-md-6"})
25-
var deleteIcon = goui.Children{
26-
goui.Element("span", &goui.Attributes{
27-
Class: "glyphicon glyphicon-remove",
28-
AriaHidden: true,
29-
}),
30-
}
31-
3224
func Row(props RowProps) *goui.Node {
3325
id := props.Item.ID
3426

@@ -82,11 +74,19 @@ func Row(props RowProps) *goui.Node {
8274
Children: goui.Children{
8375
goui.Element("a", &goui.Attributes{
8476
OnClick: handleDelete,
85-
Children: deleteIcon,
77+
Children: trashIcon,
8678
}),
8779
},
8880
}),
89-
emptyTD,
81+
emptyTd,
9082
},
9183
})
9284
}
85+
86+
var emptyTd = goui.Element("td", &goui.Attributes{Class: "col-md-6"})
87+
var trashIcon = goui.Children{
88+
goui.Element("span", &goui.Attributes{
89+
Class: "glyphicon glyphicon-remove",
90+
AriaHidden: true,
91+
}),
92+
}

0 commit comments

Comments
 (0)