maxsokolov / TableKit

Type-safe declarative table views.
MIT License
706 stars 74 forks source link

Поддержка нескольких действий одного типа #53

Closed noxt closed 7 years ago

noxt commented 8 years ago

@maxsokolov Привет! Спасибо за либу)

Расскажи, это так задумано, что если добавлять два действия одного типа, то выполняется только последний?

Мы просто написали экстеншн к TableRowAction с дефолтными методами по кастомизации и вызываем это таким образом: TableRow<TaskClientInfoCell>(item: task, actions: [.hideSeparatorAction(), .disableSelectionAction()]) но, как я уже описал выше, выполняется только последний экшн.

Я сейчас в форке сделаю поддержку нескольких экшенов одного типа, нужно потом PR делать или вам такое не надо?

maxsokolov commented 8 years ago

@noxt привет!

Расскажи, это так задумано, что если добавлять два действия одного типа, то выполняется только последний?

Каждый action сейчас хранится по ключу от имени действия, поэтому каждый новый action просто перезаписывает предыдущий по этому же ключу.

Это хорошая идея. Мы тоже замечали, что такой функционал неплохо бы иметь, но тут есть несколько концептуальных вопросов:

1) Должно ли несколько одинаковых действий описываться разными объектами TableRowAction<StringTableViewCell>(.click)? 2) Или это должен быть один объект TableRowAction но с методами вроде addHandler. Это может быть логичным, у меня один .click и несколько handlers к нему...

Также, что делать в случае, если я хочу удалить одно из действий. И нужно ли вообще давать возможность удалить действие.

В случае с первым подходом - удаление можно было бы сделать назначив TableRowAction какой-то id и добавить для Row метод removeActionForId. Со вторым подходом не так просто... addHandlerForKey

Функция полезная, но видение реализации еще не устоялось.

UPD: Если я хочу удалить одно из действий в случае первого подхода я должен пройтись по всем Row. В случае второго я просто удаляю один handler на TableRowAction.

maxsokolov commented 7 years ago

@noxt версия 2.1 теперь поддерживает несколько действий одного типа. Обновил доку.