I have a table with a checkbox in one of the columns. When a checkbox is checked I push the row into an array.
I have tried to explain this better in terms of ..real world down below
The table can have rows with duplicate id(column of the row (flat_id) is different). The duplicate id I mentioned above is user_map_id.
When I check(click on the checkbox) a row, I want other rows with same user_map_id to be disabled.
So when a row is checked I store the user_map_ids in an array. And then I do this:
ng-disabled="selectedUserMapIdArray.indexOf(flat.user_map_id) >= 0
i.e I disable the row if the user_map_id is present in the array with selected user_map_ids but this disables the one I checked too and I can't uncheck it if I want to.
So I pushed the flat_ids in an array too and did this:
ng-disabled="selectedUserMapIdArray.indexOf(flat.user_map_id) >= 0 && selectedFlatNumArray.indexOf(flat.flat_id) < 0 "
i.e Disable row if the row's user_map_id is present in the selectedUserMapIdArray(which stores the user_map_id) array and not present in the selectedFlatNumArray(which stores the flat_id)
But now when I check a row that has a particular flat_id which is common with one of the duplicate user_map_id, flat_id, and then again check one in that group, the one with the common flat_id does not get disabled because the flat_id I checked above is present in the selectedFlatNumArray(which stores the flat_id).
Explaining in terms of real world
The rows in the table are a list of flat owners and occupants(both have user_map_id). A flat owner can have multiple flats(hence duplicate user_map_ids in the table). The flat owner can have multiple flats(different flat_ids).
But the flat owner can have an occupant(same flat_id different user_map_id). The occupant can reside in one of the many flats of the flat owner(same flat_id different user_map_id).
I want to be able to check any of the flat owner(others get disabled) and also an occupant(if I want to).
If I check row with one of the flats of the flat owner, the other rows of belonging to same flat owner get disabled and works ok.
But when I check a row with an occupant and then again check a flat owner of that occupant (which does not have same flat_id) the row with same flat_id won't get disabled because the flat_id is present in the selectedFlatNumArray(which stores the flat_id)
How do I do this?
The table:
<tbody>
<tr ng-repeat="flat in someObj.flatsArray | filter:searchFlat">
<td>{{ flat.occupant_name || flat.owner_name}}</td>
<td>{{flat.flat_no}}</td>
<td class="text-center">
<input class="" name="{{flat.flat_no}}" ng-attr-title="{{(selectedUserMapIdArray.indexOf(flat.user_map_id) >= 0 && selectedFlatNumArray.indexOf(flat.flat_id) < 0) ? 'This user has been already invited' : ''}}"
ng-disabled="selectedUserMapIdArray.indexOf(flat.user_map_id) >= 0 && selectedFlatNumArray.indexOf(flat.flat_id) < 0 "
type="checkbox" ng-change="checkChanged(flat.isChecked, flat)" ng-model="flat.isChecked" />
</td>
</tr>
</tbody>
