1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
require "pro_tacts/admin/group_label"
require "pro_tacts/admin/member_picker"

module ProTacts
  module Admin
    # GET /groups/:id/members — the picker (Admin::MemberPicker) over
    # a group that exists, its Save moving only what was toggled.
    class GroupsMembers < MemberPicker
      # @rbs @group: Group

      #: (group: Group, contacts: Array[ListedContact], login: String) -> void
      def initialize(group:, contacts:, login:)
        @group = group
        super(contacts:, login:)
      end

      private

      #: () -> String
      def title = "Members of #{@group.label}"

      #: () -> String
      def action = "/groups/#{@group.id}/members"

      #: () -> [String, (String | Phlex::HTML)]
      def back = ["/groups/#{@group.id}", GroupLabel.new(group: @group)]

      #: () -> String
      def submit = "Save"

      #: () -> Array[String]
      def ticked = @group.members

      #: () -> Array[String]
      def was = @group.members
    end
  end
end