diff options
Diffstat (limited to 'asset-sources')
| -rw-r--r-- | asset-sources/fietsboek.ts | 24 | 
1 files changed, 23 insertions, 1 deletions
diff --git a/asset-sources/fietsboek.ts b/asset-sources/fietsboek.ts index 1cadfc2..b885271 100644 --- a/asset-sources/fietsboek.ts +++ b/asset-sources/fietsboek.ts @@ -138,6 +138,23 @@ function checkNameValidity(name: Selector) {  checkNameValidity;  /** + * Check whether the given friend is already tagged. + * + * Note that this uses the "HTML list", so it uses the tags that the user is + * currently editing - not the ones from the database! + * + * @param friendId - ID of the friend to check. + * @return Whether the friend is in the list of tagged people. + */ +function friendIsTagged(friendId: number): boolean { +    return Array.from(document.querySelectorAll("[name='tagged-friend[]']")) +        .map((obj) => obj as HTMLInputElement) +        .filter((obj) => !obj.disabled) +        .map((obj) => obj.value) +        .includes(friendId.toString()); +} + +/**   * Hit the endpoint to search for friends. This populates the friend selector   * when tagging friends.   */ @@ -152,10 +169,15 @@ function searchFriends() {              const blueprint = document.querySelector("#friendSearchBlueprint") as HTMLLIElement;              // Only show friends with a matching name -            const friends = response.filter( +            let friends = response.filter(                  (obj) => obj.name.toLowerCase().indexOf(searchPattern) != -1              ); +            // Only show friends that are not yet existing +            friends = friends.filter( +                (obj) => !friendIsTagged(obj.id) +            ); +              friends.forEach((friend) => {                  const copy = blueprint.cloneNode(true) as HTMLLIElement;                  copy.removeAttribute("id");  | 
