added support for passing more than one id in the Hook.Unbind method for consistency with the router
This commit is contained in:
parent
0ac4a388c0
commit
f1b199b35c
|
@ -1,3 +1,8 @@
|
||||||
|
## (WIP)
|
||||||
|
|
||||||
|
- Added support for passing more than one id in the `Hook.Unbind` method for consistency with the router.
|
||||||
|
|
||||||
|
|
||||||
## v0.23.1
|
## v0.23.1
|
||||||
|
|
||||||
- Added `RequestEvent.Blob(status, contentType, bytes)` response write helper ([#5940](https://github.com/pocketbase/pocketbase/discussions/5940)).
|
- Added `RequestEvent.Blob(status, contentType, bytes)` response write helper ([#5940](https://github.com/pocketbase/pocketbase/discussions/5940)).
|
||||||
|
|
|
@ -112,11 +112,12 @@ func (h *Hook[T]) BindFunc(fn func(e T) error) string {
|
||||||
return h.Bind(&Handler[T]{Func: fn})
|
return h.Bind(&Handler[T]{Func: fn})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unbind removes a single hook handler by its id.
|
// Unbind removes one or many hook handler by their id.
|
||||||
func (h *Hook[T]) Unbind(id string) {
|
func (h *Hook[T]) Unbind(idsToRemove ...string) {
|
||||||
h.mu.Lock()
|
h.mu.Lock()
|
||||||
defer h.mu.Unlock()
|
defer h.mu.Unlock()
|
||||||
|
|
||||||
|
for _, id := range idsToRemove {
|
||||||
for i := len(h.handlers) - 1; i >= 0; i-- {
|
for i := len(h.handlers) - 1; i >= 0; i-- {
|
||||||
if h.handlers[i].Id == id {
|
if h.handlers[i].Id == id {
|
||||||
h.handlers = append(h.handlers[:i], h.handlers[i+1:]...)
|
h.handlers = append(h.handlers[:i], h.handlers[i+1:]...)
|
||||||
|
@ -124,6 +125,7 @@ func (h *Hook[T]) Unbind(id string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UnbindAll removes all registered handlers.
|
// UnbindAll removes all registered handlers.
|
||||||
func (h *Hook[T]) UnbindAll() {
|
func (h *Hook[T]) UnbindAll() {
|
||||||
|
|
|
@ -70,6 +70,7 @@ func TestHookUnbind(t *testing.T) {
|
||||||
|
|
||||||
calls := ""
|
calls := ""
|
||||||
|
|
||||||
|
id0 := h.BindFunc(func(e *Event) error { calls += "0"; return e.Next() })
|
||||||
id1 := h.BindFunc(func(e *Event) error { calls += "1"; return e.Next() })
|
id1 := h.BindFunc(func(e *Event) error { calls += "1"; return e.Next() })
|
||||||
h.BindFunc(func(e *Event) error { calls += "2"; return e.Next() })
|
h.BindFunc(func(e *Event) error { calls += "2"; return e.Next() })
|
||||||
h.Bind(&Handler[*Event]{
|
h.Bind(&Handler[*Event]{
|
||||||
|
@ -78,11 +79,11 @@ func TestHookUnbind(t *testing.T) {
|
||||||
|
|
||||||
h.Unbind("missing") // should do nothing and not panic
|
h.Unbind("missing") // should do nothing and not panic
|
||||||
|
|
||||||
if total := len(h.handlers); total != 3 {
|
if total := len(h.handlers); total != 4 {
|
||||||
t.Fatalf("Expected %d handlers, got %d", 3, total)
|
t.Fatalf("Expected %d handlers, got %d", 4, total)
|
||||||
}
|
}
|
||||||
|
|
||||||
h.Unbind(id1)
|
h.Unbind(id1, id0)
|
||||||
|
|
||||||
if total := len(h.handlers); total != 2 {
|
if total := len(h.handlers); total != 2 {
|
||||||
t.Fatalf("Expected %d handlers, got %d", 2, total)
|
t.Fatalf("Expected %d handlers, got %d", 2, total)
|
||||||
|
|
Loading…
Reference in New Issue